1This is gccint.info, produced by makeinfo version 5.2 from gccint.texi.
2
3Copyright (C) 1988-2013 Free Software Foundation, Inc.
4
5 Permission is granted to copy, distribute and/or modify this document
6under the terms of the GNU Free Documentation License, Version 1.3 or
7any later version published by the Free Software Foundation; with the
8Invariant Sections being "Funding Free Software", the Front-Cover Texts
9being (a) (see below), and with the Back-Cover Texts being (b) (see
10below).  A copy of the license is included in the section entitled "GNU
11Free Documentation License".
12
13 (a) The FSF's Front-Cover Text is:
14
15 A GNU Manual
16
17 (b) The FSF's Back-Cover Text is:
18
19 You have freedom to copy and modify this GNU Manual, like GNU software.
20Copies published by the Free Software Foundation raise funds for GNU
21development.
22INFO-DIR-SECTION Software development
23START-INFO-DIR-ENTRY
24* gccint: (gccint).            Internals of the GNU Compiler Collection.
25END-INFO-DIR-ENTRY
26
27 This file documents the internals of the GNU compilers.
28
29 Copyright (C) 1988-2013 Free Software Foundation, Inc.
30
31 Permission is granted to copy, distribute and/or modify this document
32under the terms of the GNU Free Documentation License, Version 1.3 or
33any later version published by the Free Software Foundation; with the
34Invariant Sections being "Funding Free Software", the Front-Cover Texts
35being (a) (see below), and with the Back-Cover Texts being (b) (see
36below).  A copy of the license is included in the section entitled "GNU
37Free Documentation License".
38
39 (a) The FSF's Front-Cover Text is:
40
41 A GNU Manual
42
43 (b) The FSF's Back-Cover Text is:
44
45 You have freedom to copy and modify this GNU Manual, like GNU software.
46Copies published by the Free Software Foundation raise funds for GNU
47development.
48
49
50File: gccint.info,  Node: Top,  Next: Contributing,  Up: (DIR)
51
52Introduction
53************
54
55This manual documents the internals of the GNU compilers, including how
56to port them to new targets and some information about how to write
57front ends for new languages.  It corresponds to the compilers (GCC)
58version 4.8.3.  The use of the GNU compilers is documented in a separate
59manual.  *Note Introduction: (gcc)Top.
60
61 This manual is mainly a reference manual rather than a tutorial.  It
62discusses how to contribute to GCC (*note Contributing::), the
63characteristics of the machines supported by GCC as hosts and targets
64(*note Portability::), how GCC relates to the ABIs on such systems
65(*note Interface::), and the characteristics of the languages for which
66GCC front ends are written (*note Languages::).  It then describes the
67GCC source tree structure and build system, some of the interfaces to
68GCC front ends, and how support for a target system is implemented in
69GCC.
70
71 Additional tutorial information is linked to from
72<http://gcc.gnu.org/readings.html>.
73
74* Menu:
75
76* Contributing::    How to contribute to testing and developing GCC.
77* Portability::     Goals of GCC's portability features.
78* Interface::       Function-call interface of GCC output.
79* Libgcc::          Low-level runtime library used by GCC.
80* Languages::       Languages for which GCC front ends are written.
81* Source Tree::     GCC source tree structure and build system.
82* Testsuites::      GCC testsuites.
83* Options::         Option specification files.
84* Passes::          Order of passes, what they do, and what each file is for.
85* GENERIC::         Language-independent representation generated by Front Ends
86* GIMPLE::          Tuple representation used by Tree SSA optimizers
87* Tree SSA::        Analysis and optimization of GIMPLE
88* RTL::             Machine-dependent low-level intermediate representation.
89* Control Flow::    Maintaining and manipulating the control flow graph.
90* Loop Analysis and Representation:: Analysis and representation of loops
91* Machine Desc::    How to write machine description instruction patterns.
92* Target Macros::   How to write the machine description C macros and functions.
93* Host Config::     Writing the 'xm-MACHINE.h' file.
94* Fragments::       Writing the 't-TARGET' and 'x-HOST' files.
95* Collect2::        How 'collect2' works; how it finds 'ld'.
96* Header Dirs::     Understanding the standard header file directories.
97* Type Information:: GCC's memory management; generating type information.
98* Plugins::         Extending the compiler with plugins.
99* LTO::             Using Link-Time Optimization.
100
101* Funding::         How to help assure funding for free software.
102* GNU Project::     The GNU Project and GNU/Linux.
103
104* Copying::         GNU General Public License says
105                    how you can copy and share GCC.
106* GNU Free Documentation License:: How you can copy and share this manual.
107* Contributors::    People who have contributed to GCC.
108
109* Option Index::    Index to command line options.
110* Concept Index::   Index of concepts and symbol names.
111
112
113File: gccint.info,  Node: Contributing,  Next: Portability,  Up: Top
114
1151 Contributing to GCC Development
116*********************************
117
118If you would like to help pretest GCC releases to assure they work well,
119current development sources are available by SVN (see
120<http://gcc.gnu.org/svn.html>).  Source and binary snapshots are also
121available for FTP; see <http://gcc.gnu.org/snapshots.html>.
122
123 If you would like to work on improvements to GCC, please read the
124advice at these URLs:
125
126     <http://gcc.gnu.org/contribute.html>
127     <http://gcc.gnu.org/contributewhy.html>
128
129for information on how to make useful contributions and avoid
130duplication of effort.  Suggested projects are listed at
131<http://gcc.gnu.org/projects/>.
132
133
134File: gccint.info,  Node: Portability,  Next: Interface,  Prev: Contributing,  Up: Top
135
1362 GCC and Portability
137*********************
138
139GCC itself aims to be portable to any machine where 'int' is at least a
14032-bit type.  It aims to target machines with a flat (non-segmented)
141byte addressed data address space (the code address space can be
142separate).  Target ABIs may have 8, 16, 32 or 64-bit 'int' type.  'char'
143can be wider than 8 bits.
144
145 GCC gets most of the information about the target machine from a
146machine description which gives an algebraic formula for each of the
147machine's instructions.  This is a very clean way to describe the
148target.  But when the compiler needs information that is difficult to
149express in this fashion, ad-hoc parameters have been defined for machine
150descriptions.  The purpose of portability is to reduce the total work
151needed on the compiler; it was not of interest for its own sake.
152
153 GCC does not contain machine dependent code, but it does contain code
154that depends on machine parameters such as endianness (whether the most
155significant byte has the highest or lowest address of the bytes in a
156word) and the availability of autoincrement addressing.  In the
157RTL-generation pass, it is often necessary to have multiple strategies
158for generating code for a particular kind of syntax tree, strategies
159that are usable for different combinations of parameters.  Often, not
160all possible cases have been addressed, but only the common ones or only
161the ones that have been encountered.  As a result, a new target may
162require additional strategies.  You will know if this happens because
163the compiler will call 'abort'.  Fortunately, the new strategies can be
164added in a machine-independent fashion, and will affect only the target
165machines that need them.
166
167
168File: gccint.info,  Node: Interface,  Next: Libgcc,  Prev: Portability,  Up: Top
169
1703 Interfacing to GCC Output
171***************************
172
173GCC is normally configured to use the same function calling convention
174normally in use on the target system.  This is done with the
175machine-description macros described (*note Target Macros::).
176
177 However, returning of structure and union values is done differently on
178some target machines.  As a result, functions compiled with PCC
179returning such types cannot be called from code compiled with GCC, and
180vice versa.  This does not cause trouble often because few Unix library
181routines return structures or unions.
182
183 GCC code returns structures and unions that are 1, 2, 4 or 8 bytes long
184in the same registers used for 'int' or 'double' return values.  (GCC
185typically allocates variables of such types in registers also.)
186Structures and unions of other sizes are returned by storing them into
187an address passed by the caller (usually in a register).  The target
188hook 'TARGET_STRUCT_VALUE_RTX' tells GCC where to pass this address.
189
190 By contrast, PCC on most target machines returns structures and unions
191of any size by copying the data into an area of static storage, and then
192returning the address of that storage as if it were a pointer value.
193The caller must copy the data from that memory area to the place where
194the value is wanted.  This is slower than the method used by GCC, and
195fails to be reentrant.
196
197 On some target machines, such as RISC machines and the 80386, the
198standard system convention is to pass to the subroutine the address of
199where to return the value.  On these machines, GCC has been configured
200to be compatible with the standard compiler, when this method is used.
201It may not be compatible for structures of 1, 2, 4 or 8 bytes.
202
203 GCC uses the system's standard convention for passing arguments.  On
204some machines, the first few arguments are passed in registers; in
205others, all are passed on the stack.  It would be possible to use
206registers for argument passing on any machine, and this would probably
207result in a significant speedup.  But the result would be complete
208incompatibility with code that follows the standard convention.  So this
209change is practical only if you are switching to GCC as the sole C
210compiler for the system.  We may implement register argument passing on
211certain machines once we have a complete GNU system so that we can
212compile the libraries with GCC.
213
214 On some machines (particularly the SPARC), certain types of arguments
215are passed "by invisible reference".  This means that the value is
216stored in memory, and the address of the memory location is passed to
217the subroutine.
218
219 If you use 'longjmp', beware of automatic variables.  ISO C says that
220automatic variables that are not declared 'volatile' have undefined
221values after a 'longjmp'.  And this is all GCC promises to do, because
222it is very difficult to restore register variables correctly, and one of
223GCC's features is that it can put variables in registers without your
224asking it to.
225
226
227File: gccint.info,  Node: Libgcc,  Next: Languages,  Prev: Interface,  Up: Top
228
2294 The GCC low-level runtime library
230***********************************
231
232GCC provides a low-level runtime library, 'libgcc.a' or 'libgcc_s.so.1'
233on some platforms.  GCC generates calls to routines in this library
234automatically, whenever it needs to perform some operation that is too
235complicated to emit inline code for.
236
237 Most of the routines in 'libgcc' handle arithmetic operations that the
238target processor cannot perform directly.  This includes integer
239multiply and divide on some machines, and all floating-point and
240fixed-point operations on other machines.  'libgcc' also includes
241routines for exception handling, and a handful of miscellaneous
242operations.
243
244 Some of these routines can be defined in mostly machine-independent C.
245Others must be hand-written in assembly language for each processor that
246needs them.
247
248 GCC will also generate calls to C library routines, such as 'memcpy'
249and 'memset', in some cases.  The set of routines that GCC may possibly
250use is documented in *note (gcc)Other Builtins::.
251
252 These routines take arguments and return values of a specific machine
253mode, not a specific C type.  *Note Machine Modes::, for an explanation
254of this concept.  For illustrative purposes, in this chapter the
255floating point type 'float' is assumed to correspond to 'SFmode';
256'double' to 'DFmode'; and 'long double' to both 'TFmode' and 'XFmode'.
257Similarly, the integer types 'int' and 'unsigned int' correspond to
258'SImode'; 'long' and 'unsigned long' to 'DImode'; and 'long long' and
259'unsigned long long' to 'TImode'.
260
261* Menu:
262
263* Integer library routines::
264* Soft float library routines::
265* Decimal float library routines::
266* Fixed-point fractional library routines::
267* Exception handling routines::
268* Miscellaneous routines::
269
270
271File: gccint.info,  Node: Integer library routines,  Next: Soft float library routines,  Up: Libgcc
272
2734.1 Routines for integer arithmetic
274===================================
275
276The integer arithmetic routines are used on platforms that don't provide
277hardware support for arithmetic operations on some modes.
278
2794.1.1 Arithmetic functions
280--------------------------
281
282 -- Runtime Function: int __ashlsi3 (int A, int B)
283 -- Runtime Function: long __ashldi3 (long A, int B)
284 -- Runtime Function: long long __ashlti3 (long long A, int B)
285     These functions return the result of shifting A left by B bits.
286
287 -- Runtime Function: int __ashrsi3 (int A, int B)
288 -- Runtime Function: long __ashrdi3 (long A, int B)
289 -- Runtime Function: long long __ashrti3 (long long A, int B)
290     These functions return the result of arithmetically shifting A
291     right by B bits.
292
293 -- Runtime Function: int __divsi3 (int A, int B)
294 -- Runtime Function: long __divdi3 (long A, long B)
295 -- Runtime Function: long long __divti3 (long long A, long long B)
296     These functions return the quotient of the signed division of A and
297     B.
298
299 -- Runtime Function: int __lshrsi3 (int A, int B)
300 -- Runtime Function: long __lshrdi3 (long A, int B)
301 -- Runtime Function: long long __lshrti3 (long long A, int B)
302     These functions return the result of logically shifting A right by
303     B bits.
304
305 -- Runtime Function: int __modsi3 (int A, int B)
306 -- Runtime Function: long __moddi3 (long A, long B)
307 -- Runtime Function: long long __modti3 (long long A, long long B)
308     These functions return the remainder of the signed division of A
309     and B.
310
311 -- Runtime Function: int __mulsi3 (int A, int B)
312 -- Runtime Function: long __muldi3 (long A, long B)
313 -- Runtime Function: long long __multi3 (long long A, long long B)
314     These functions return the product of A and B.
315
316 -- Runtime Function: long __negdi2 (long A)
317 -- Runtime Function: long long __negti2 (long long A)
318     These functions return the negation of A.
319
320 -- Runtime Function: unsigned int __udivsi3 (unsigned int A, unsigned
321          int B)
322 -- Runtime Function: unsigned long __udivdi3 (unsigned long A, unsigned
323          long B)
324 -- Runtime Function: unsigned long long __udivti3 (unsigned long long
325          A, unsigned long long B)
326     These functions return the quotient of the unsigned division of A
327     and B.
328
329 -- Runtime Function: unsigned long __udivmoddi4 (unsigned long A,
330          unsigned long B, unsigned long *C)
331 -- Runtime Function: unsigned long long __udivmodti4 (unsigned long
332          long A, unsigned long long B, unsigned long long *C)
333     These functions calculate both the quotient and remainder of the
334     unsigned division of A and B.  The return value is the quotient,
335     and the remainder is placed in variable pointed to by C.
336
337 -- Runtime Function: unsigned int __umodsi3 (unsigned int A, unsigned
338          int B)
339 -- Runtime Function: unsigned long __umoddi3 (unsigned long A, unsigned
340          long B)
341 -- Runtime Function: unsigned long long __umodti3 (unsigned long long
342          A, unsigned long long B)
343     These functions return the remainder of the unsigned division of A
344     and B.
345
3464.1.2 Comparison functions
347--------------------------
348
349The following functions implement integral comparisons.  These functions
350implement a low-level compare, upon which the higher level comparison
351operators (such as less than and greater than or equal to) can be
352constructed.  The returned values lie in the range zero to two, to allow
353the high-level operators to be implemented by testing the returned
354result using either signed or unsigned comparison.
355
356 -- Runtime Function: int __cmpdi2 (long A, long B)
357 -- Runtime Function: int __cmpti2 (long long A, long long B)
358     These functions perform a signed comparison of A and B.  If A is
359     less than B, they return 0; if A is greater than B, they return 2;
360     and if A and B are equal they return 1.
361
362 -- Runtime Function: int __ucmpdi2 (unsigned long A, unsigned long B)
363 -- Runtime Function: int __ucmpti2 (unsigned long long A, unsigned long
364          long B)
365     These functions perform an unsigned comparison of A and B.  If A is
366     less than B, they return 0; if A is greater than B, they return 2;
367     and if A and B are equal they return 1.
368
3694.1.3 Trapping arithmetic functions
370-----------------------------------
371
372The following functions implement trapping arithmetic.  These functions
373call the libc function 'abort' upon signed arithmetic overflow.
374
375 -- Runtime Function: int __absvsi2 (int A)
376 -- Runtime Function: long __absvdi2 (long A)
377     These functions return the absolute value of A.
378
379 -- Runtime Function: int __addvsi3 (int A, int B)
380 -- Runtime Function: long __addvdi3 (long A, long B)
381     These functions return the sum of A and B; that is 'A + B'.
382
383 -- Runtime Function: int __mulvsi3 (int A, int B)
384 -- Runtime Function: long __mulvdi3 (long A, long B)
385     The functions return the product of A and B; that is 'A * B'.
386
387 -- Runtime Function: int __negvsi2 (int A)
388 -- Runtime Function: long __negvdi2 (long A)
389     These functions return the negation of A; that is '-A'.
390
391 -- Runtime Function: int __subvsi3 (int A, int B)
392 -- Runtime Function: long __subvdi3 (long A, long B)
393     These functions return the difference between B and A; that is 'A -
394     B'.
395
3964.1.4 Bit operations
397--------------------
398
399 -- Runtime Function: int __clzsi2 (int A)
400 -- Runtime Function: int __clzdi2 (long A)
401 -- Runtime Function: int __clzti2 (long long A)
402     These functions return the number of leading 0-bits in A, starting
403     at the most significant bit position.  If A is zero, the result is
404     undefined.
405
406 -- Runtime Function: int __ctzsi2 (int A)
407 -- Runtime Function: int __ctzdi2 (long A)
408 -- Runtime Function: int __ctzti2 (long long A)
409     These functions return the number of trailing 0-bits in A, starting
410     at the least significant bit position.  If A is zero, the result is
411     undefined.
412
413 -- Runtime Function: int __ffsdi2 (long A)
414 -- Runtime Function: int __ffsti2 (long long A)
415     These functions return the index of the least significant 1-bit in
416     A, or the value zero if A is zero.  The least significant bit is
417     index one.
418
419 -- Runtime Function: int __paritysi2 (int A)
420 -- Runtime Function: int __paritydi2 (long A)
421 -- Runtime Function: int __parityti2 (long long A)
422     These functions return the value zero if the number of bits set in
423     A is even, and the value one otherwise.
424
425 -- Runtime Function: int __popcountsi2 (int A)
426 -- Runtime Function: int __popcountdi2 (long A)
427 -- Runtime Function: int __popcountti2 (long long A)
428     These functions return the number of bits set in A.
429
430 -- Runtime Function: int32_t __bswapsi2 (int32_t A)
431 -- Runtime Function: int64_t __bswapdi2 (int64_t A)
432     These functions return the A byteswapped.
433
434
435File: gccint.info,  Node: Soft float library routines,  Next: Decimal float library routines,  Prev: Integer library routines,  Up: Libgcc
436
4374.2 Routines for floating point emulation
438=========================================
439
440The software floating point library is used on machines which do not
441have hardware support for floating point.  It is also used whenever
442'-msoft-float' is used to disable generation of floating point
443instructions.  (Not all targets support this switch.)
444
445 For compatibility with other compilers, the floating point emulation
446routines can be renamed with the 'DECLARE_LIBRARY_RENAMES' macro (*note
447Library Calls::).  In this section, the default names are used.
448
449 Presently the library does not support 'XFmode', which is used for
450'long double' on some architectures.
451
4524.2.1 Arithmetic functions
453--------------------------
454
455 -- Runtime Function: float __addsf3 (float A, float B)
456 -- Runtime Function: double __adddf3 (double A, double B)
457 -- Runtime Function: long double __addtf3 (long double A, long double
458          B)
459 -- Runtime Function: long double __addxf3 (long double A, long double
460          B)
461     These functions return the sum of A and B.
462
463 -- Runtime Function: float __subsf3 (float A, float B)
464 -- Runtime Function: double __subdf3 (double A, double B)
465 -- Runtime Function: long double __subtf3 (long double A, long double
466          B)
467 -- Runtime Function: long double __subxf3 (long double A, long double
468          B)
469     These functions return the difference between B and A; that is,
470     A - B.
471
472 -- Runtime Function: float __mulsf3 (float A, float B)
473 -- Runtime Function: double __muldf3 (double A, double B)
474 -- Runtime Function: long double __multf3 (long double A, long double
475          B)
476 -- Runtime Function: long double __mulxf3 (long double A, long double
477          B)
478     These functions return the product of A and B.
479
480 -- Runtime Function: float __divsf3 (float A, float B)
481 -- Runtime Function: double __divdf3 (double A, double B)
482 -- Runtime Function: long double __divtf3 (long double A, long double
483          B)
484 -- Runtime Function: long double __divxf3 (long double A, long double
485          B)
486     These functions return the quotient of A and B; that is, A / B.
487
488 -- Runtime Function: float __negsf2 (float A)
489 -- Runtime Function: double __negdf2 (double A)
490 -- Runtime Function: long double __negtf2 (long double A)
491 -- Runtime Function: long double __negxf2 (long double A)
492     These functions return the negation of A.  They simply flip the
493     sign bit, so they can produce negative zero and negative NaN.
494
4954.2.2 Conversion functions
496--------------------------
497
498 -- Runtime Function: double __extendsfdf2 (float A)
499 -- Runtime Function: long double __extendsftf2 (float A)
500 -- Runtime Function: long double __extendsfxf2 (float A)
501 -- Runtime Function: long double __extenddftf2 (double A)
502 -- Runtime Function: long double __extenddfxf2 (double A)
503     These functions extend A to the wider mode of their return type.
504
505 -- Runtime Function: double __truncxfdf2 (long double A)
506 -- Runtime Function: double __trunctfdf2 (long double A)
507 -- Runtime Function: float __truncxfsf2 (long double A)
508 -- Runtime Function: float __trunctfsf2 (long double A)
509 -- Runtime Function: float __truncdfsf2 (double A)
510     These functions truncate A to the narrower mode of their return
511     type, rounding toward zero.
512
513 -- Runtime Function: int __fixsfsi (float A)
514 -- Runtime Function: int __fixdfsi (double A)
515 -- Runtime Function: int __fixtfsi (long double A)
516 -- Runtime Function: int __fixxfsi (long double A)
517     These functions convert A to a signed integer, rounding toward
518     zero.
519
520 -- Runtime Function: long __fixsfdi (float A)
521 -- Runtime Function: long __fixdfdi (double A)
522 -- Runtime Function: long __fixtfdi (long double A)
523 -- Runtime Function: long __fixxfdi (long double A)
524     These functions convert A to a signed long, rounding toward zero.
525
526 -- Runtime Function: long long __fixsfti (float A)
527 -- Runtime Function: long long __fixdfti (double A)
528 -- Runtime Function: long long __fixtfti (long double A)
529 -- Runtime Function: long long __fixxfti (long double A)
530     These functions convert A to a signed long long, rounding toward
531     zero.
532
533 -- Runtime Function: unsigned int __fixunssfsi (float A)
534 -- Runtime Function: unsigned int __fixunsdfsi (double A)
535 -- Runtime Function: unsigned int __fixunstfsi (long double A)
536 -- Runtime Function: unsigned int __fixunsxfsi (long double A)
537     These functions convert A to an unsigned integer, rounding toward
538     zero.  Negative values all become zero.
539
540 -- Runtime Function: unsigned long __fixunssfdi (float A)
541 -- Runtime Function: unsigned long __fixunsdfdi (double A)
542 -- Runtime Function: unsigned long __fixunstfdi (long double A)
543 -- Runtime Function: unsigned long __fixunsxfdi (long double A)
544     These functions convert A to an unsigned long, rounding toward
545     zero.  Negative values all become zero.
546
547 -- Runtime Function: unsigned long long __fixunssfti (float A)
548 -- Runtime Function: unsigned long long __fixunsdfti (double A)
549 -- Runtime Function: unsigned long long __fixunstfti (long double A)
550 -- Runtime Function: unsigned long long __fixunsxfti (long double A)
551     These functions convert A to an unsigned long long, rounding toward
552     zero.  Negative values all become zero.
553
554 -- Runtime Function: float __floatsisf (int I)
555 -- Runtime Function: double __floatsidf (int I)
556 -- Runtime Function: long double __floatsitf (int I)
557 -- Runtime Function: long double __floatsixf (int I)
558     These functions convert I, a signed integer, to floating point.
559
560 -- Runtime Function: float __floatdisf (long I)
561 -- Runtime Function: double __floatdidf (long I)
562 -- Runtime Function: long double __floatditf (long I)
563 -- Runtime Function: long double __floatdixf (long I)
564     These functions convert I, a signed long, to floating point.
565
566 -- Runtime Function: float __floattisf (long long I)
567 -- Runtime Function: double __floattidf (long long I)
568 -- Runtime Function: long double __floattitf (long long I)
569 -- Runtime Function: long double __floattixf (long long I)
570     These functions convert I, a signed long long, to floating point.
571
572 -- Runtime Function: float __floatunsisf (unsigned int I)
573 -- Runtime Function: double __floatunsidf (unsigned int I)
574 -- Runtime Function: long double __floatunsitf (unsigned int I)
575 -- Runtime Function: long double __floatunsixf (unsigned int I)
576     These functions convert I, an unsigned integer, to floating point.
577
578 -- Runtime Function: float __floatundisf (unsigned long I)
579 -- Runtime Function: double __floatundidf (unsigned long I)
580 -- Runtime Function: long double __floatunditf (unsigned long I)
581 -- Runtime Function: long double __floatundixf (unsigned long I)
582     These functions convert I, an unsigned long, to floating point.
583
584 -- Runtime Function: float __floatuntisf (unsigned long long I)
585 -- Runtime Function: double __floatuntidf (unsigned long long I)
586 -- Runtime Function: long double __floatuntitf (unsigned long long I)
587 -- Runtime Function: long double __floatuntixf (unsigned long long I)
588     These functions convert I, an unsigned long long, to floating
589     point.
590
5914.2.3 Comparison functions
592--------------------------
593
594There are two sets of basic comparison functions.
595
596 -- Runtime Function: int __cmpsf2 (float A, float B)
597 -- Runtime Function: int __cmpdf2 (double A, double B)
598 -- Runtime Function: int __cmptf2 (long double A, long double B)
599     These functions calculate a <=> b.  That is, if A is less than B,
600     they return -1; if A is greater than B, they return 1; and if A and
601     B are equal they return 0.  If either argument is NaN they return
602     1, but you should not rely on this; if NaN is a possibility, use
603     one of the higher-level comparison functions.
604
605 -- Runtime Function: int __unordsf2 (float A, float B)
606 -- Runtime Function: int __unorddf2 (double A, double B)
607 -- Runtime Function: int __unordtf2 (long double A, long double B)
608     These functions return a nonzero value if either argument is NaN,
609     otherwise 0.
610
611 There is also a complete group of higher level functions which
612correspond directly to comparison operators.  They implement the ISO C
613semantics for floating-point comparisons, taking NaN into account.  Pay
614careful attention to the return values defined for each set.  Under the
615hood, all of these routines are implemented as
616
617       if (__unordXf2 (a, b))
618         return E;
619       return __cmpXf2 (a, b);
620
621where E is a constant chosen to give the proper behavior for NaN.  Thus,
622the meaning of the return value is different for each set.  Do not rely
623on this implementation; only the semantics documented below are
624guaranteed.
625
626 -- Runtime Function: int __eqsf2 (float A, float B)
627 -- Runtime Function: int __eqdf2 (double A, double B)
628 -- Runtime Function: int __eqtf2 (long double A, long double B)
629     These functions return zero if neither argument is NaN, and A and B
630     are equal.
631
632 -- Runtime Function: int __nesf2 (float A, float B)
633 -- Runtime Function: int __nedf2 (double A, double B)
634 -- Runtime Function: int __netf2 (long double A, long double B)
635     These functions return a nonzero value if either argument is NaN,
636     or if A and B are unequal.
637
638 -- Runtime Function: int __gesf2 (float A, float B)
639 -- Runtime Function: int __gedf2 (double A, double B)
640 -- Runtime Function: int __getf2 (long double A, long double B)
641     These functions return a value greater than or equal to zero if
642     neither argument is NaN, and A is greater than or equal to B.
643
644 -- Runtime Function: int __ltsf2 (float A, float B)
645 -- Runtime Function: int __ltdf2 (double A, double B)
646 -- Runtime Function: int __lttf2 (long double A, long double B)
647     These functions return a value less than zero if neither argument
648     is NaN, and A is strictly less than B.
649
650 -- Runtime Function: int __lesf2 (float A, float B)
651 -- Runtime Function: int __ledf2 (double A, double B)
652 -- Runtime Function: int __letf2 (long double A, long double B)
653     These functions return a value less than or equal to zero if
654     neither argument is NaN, and A is less than or equal to B.
655
656 -- Runtime Function: int __gtsf2 (float A, float B)
657 -- Runtime Function: int __gtdf2 (double A, double B)
658 -- Runtime Function: int __gttf2 (long double A, long double B)
659     These functions return a value greater than zero if neither
660     argument is NaN, and A is strictly greater than B.
661
6624.2.4 Other floating-point functions
663------------------------------------
664
665 -- Runtime Function: float __powisf2 (float A, int B)
666 -- Runtime Function: double __powidf2 (double A, int B)
667 -- Runtime Function: long double __powitf2 (long double A, int B)
668 -- Runtime Function: long double __powixf2 (long double A, int B)
669     These functions convert raise A to the power B.
670
671 -- Runtime Function: complex float __mulsc3 (float A, float B, float C,
672          float D)
673 -- Runtime Function: complex double __muldc3 (double A, double B,
674          double C, double D)
675 -- Runtime Function: complex long double __multc3 (long double A, long
676          double B, long double C, long double D)
677 -- Runtime Function: complex long double __mulxc3 (long double A, long
678          double B, long double C, long double D)
679     These functions return the product of A + iB and C + iD, following
680     the rules of C99 Annex G.
681
682 -- Runtime Function: complex float __divsc3 (float A, float B, float C,
683          float D)
684 -- Runtime Function: complex double __divdc3 (double A, double B,
685          double C, double D)
686 -- Runtime Function: complex long double __divtc3 (long double A, long
687          double B, long double C, long double D)
688 -- Runtime Function: complex long double __divxc3 (long double A, long
689          double B, long double C, long double D)
690     These functions return the quotient of A + iB and C + iD (i.e., (A
691     + iB) / (C + iD)), following the rules of C99 Annex G.
692
693
694File: gccint.info,  Node: Decimal float library routines,  Next: Fixed-point fractional library routines,  Prev: Soft float library routines,  Up: Libgcc
695
6964.3 Routines for decimal floating point emulation
697=================================================
698
699The software decimal floating point library implements IEEE 754-2008
700decimal floating point arithmetic and is only activated on selected
701targets.
702
703 The software decimal floating point library supports either DPD
704(Densely Packed Decimal) or BID (Binary Integer Decimal) encoding as
705selected at configure time.
706
7074.3.1 Arithmetic functions
708--------------------------
709
710 -- Runtime Function: _Decimal32 __dpd_addsd3 (_Decimal32 A, _Decimal32
711          B)
712 -- Runtime Function: _Decimal32 __bid_addsd3 (_Decimal32 A, _Decimal32
713          B)
714 -- Runtime Function: _Decimal64 __dpd_adddd3 (_Decimal64 A, _Decimal64
715          B)
716 -- Runtime Function: _Decimal64 __bid_adddd3 (_Decimal64 A, _Decimal64
717          B)
718 -- Runtime Function: _Decimal128 __dpd_addtd3 (_Decimal128 A,
719          _Decimal128 B)
720 -- Runtime Function: _Decimal128 __bid_addtd3 (_Decimal128 A,
721          _Decimal128 B)
722     These functions return the sum of A and B.
723
724 -- Runtime Function: _Decimal32 __dpd_subsd3 (_Decimal32 A, _Decimal32
725          B)
726 -- Runtime Function: _Decimal32 __bid_subsd3 (_Decimal32 A, _Decimal32
727          B)
728 -- Runtime Function: _Decimal64 __dpd_subdd3 (_Decimal64 A, _Decimal64
729          B)
730 -- Runtime Function: _Decimal64 __bid_subdd3 (_Decimal64 A, _Decimal64
731          B)
732 -- Runtime Function: _Decimal128 __dpd_subtd3 (_Decimal128 A,
733          _Decimal128 B)
734 -- Runtime Function: _Decimal128 __bid_subtd3 (_Decimal128 A,
735          _Decimal128 B)
736     These functions return the difference between B and A; that is,
737     A - B.
738
739 -- Runtime Function: _Decimal32 __dpd_mulsd3 (_Decimal32 A, _Decimal32
740          B)
741 -- Runtime Function: _Decimal32 __bid_mulsd3 (_Decimal32 A, _Decimal32
742          B)
743 -- Runtime Function: _Decimal64 __dpd_muldd3 (_Decimal64 A, _Decimal64
744          B)
745 -- Runtime Function: _Decimal64 __bid_muldd3 (_Decimal64 A, _Decimal64
746          B)
747 -- Runtime Function: _Decimal128 __dpd_multd3 (_Decimal128 A,
748          _Decimal128 B)
749 -- Runtime Function: _Decimal128 __bid_multd3 (_Decimal128 A,
750          _Decimal128 B)
751     These functions return the product of A and B.
752
753 -- Runtime Function: _Decimal32 __dpd_divsd3 (_Decimal32 A, _Decimal32
754          B)
755 -- Runtime Function: _Decimal32 __bid_divsd3 (_Decimal32 A, _Decimal32
756          B)
757 -- Runtime Function: _Decimal64 __dpd_divdd3 (_Decimal64 A, _Decimal64
758          B)
759 -- Runtime Function: _Decimal64 __bid_divdd3 (_Decimal64 A, _Decimal64
760          B)
761 -- Runtime Function: _Decimal128 __dpd_divtd3 (_Decimal128 A,
762          _Decimal128 B)
763 -- Runtime Function: _Decimal128 __bid_divtd3 (_Decimal128 A,
764          _Decimal128 B)
765     These functions return the quotient of A and B; that is, A / B.
766
767 -- Runtime Function: _Decimal32 __dpd_negsd2 (_Decimal32 A)
768 -- Runtime Function: _Decimal32 __bid_negsd2 (_Decimal32 A)
769 -- Runtime Function: _Decimal64 __dpd_negdd2 (_Decimal64 A)
770 -- Runtime Function: _Decimal64 __bid_negdd2 (_Decimal64 A)
771 -- Runtime Function: _Decimal128 __dpd_negtd2 (_Decimal128 A)
772 -- Runtime Function: _Decimal128 __bid_negtd2 (_Decimal128 A)
773     These functions return the negation of A.  They simply flip the
774     sign bit, so they can produce negative zero and negative NaN.
775
7764.3.2 Conversion functions
777--------------------------
778
779 -- Runtime Function: _Decimal64 __dpd_extendsddd2 (_Decimal32 A)
780 -- Runtime Function: _Decimal64 __bid_extendsddd2 (_Decimal32 A)
781 -- Runtime Function: _Decimal128 __dpd_extendsdtd2 (_Decimal32 A)
782 -- Runtime Function: _Decimal128 __bid_extendsdtd2 (_Decimal32 A)
783 -- Runtime Function: _Decimal128 __dpd_extendddtd2 (_Decimal64 A)
784 -- Runtime Function: _Decimal128 __bid_extendddtd2 (_Decimal64 A)
785 -- Runtime Function: _Decimal32 __dpd_truncddsd2 (_Decimal64 A)
786 -- Runtime Function: _Decimal32 __bid_truncddsd2 (_Decimal64 A)
787 -- Runtime Function: _Decimal32 __dpd_trunctdsd2 (_Decimal128 A)
788 -- Runtime Function: _Decimal32 __bid_trunctdsd2 (_Decimal128 A)
789 -- Runtime Function: _Decimal64 __dpd_trunctddd2 (_Decimal128 A)
790 -- Runtime Function: _Decimal64 __bid_trunctddd2 (_Decimal128 A)
791     These functions convert the value A from one decimal floating type
792     to another.
793
794 -- Runtime Function: _Decimal64 __dpd_extendsfdd (float A)
795 -- Runtime Function: _Decimal64 __bid_extendsfdd (float A)
796 -- Runtime Function: _Decimal128 __dpd_extendsftd (float A)
797 -- Runtime Function: _Decimal128 __bid_extendsftd (float A)
798 -- Runtime Function: _Decimal128 __dpd_extenddftd (double A)
799 -- Runtime Function: _Decimal128 __bid_extenddftd (double A)
800 -- Runtime Function: _Decimal128 __dpd_extendxftd (long double A)
801 -- Runtime Function: _Decimal128 __bid_extendxftd (long double A)
802 -- Runtime Function: _Decimal32 __dpd_truncdfsd (double A)
803 -- Runtime Function: _Decimal32 __bid_truncdfsd (double A)
804 -- Runtime Function: _Decimal32 __dpd_truncxfsd (long double A)
805 -- Runtime Function: _Decimal32 __bid_truncxfsd (long double A)
806 -- Runtime Function: _Decimal32 __dpd_trunctfsd (long double A)
807 -- Runtime Function: _Decimal32 __bid_trunctfsd (long double A)
808 -- Runtime Function: _Decimal64 __dpd_truncxfdd (long double A)
809 -- Runtime Function: _Decimal64 __bid_truncxfdd (long double A)
810 -- Runtime Function: _Decimal64 __dpd_trunctfdd (long double A)
811 -- Runtime Function: _Decimal64 __bid_trunctfdd (long double A)
812     These functions convert the value of A from a binary floating type
813     to a decimal floating type of a different size.
814
815 -- Runtime Function: float __dpd_truncddsf (_Decimal64 A)
816 -- Runtime Function: float __bid_truncddsf (_Decimal64 A)
817 -- Runtime Function: float __dpd_trunctdsf (_Decimal128 A)
818 -- Runtime Function: float __bid_trunctdsf (_Decimal128 A)
819 -- Runtime Function: double __dpd_extendsddf (_Decimal32 A)
820 -- Runtime Function: double __bid_extendsddf (_Decimal32 A)
821 -- Runtime Function: double __dpd_trunctddf (_Decimal128 A)
822 -- Runtime Function: double __bid_trunctddf (_Decimal128 A)
823 -- Runtime Function: long double __dpd_extendsdxf (_Decimal32 A)
824 -- Runtime Function: long double __bid_extendsdxf (_Decimal32 A)
825 -- Runtime Function: long double __dpd_extendddxf (_Decimal64 A)
826 -- Runtime Function: long double __bid_extendddxf (_Decimal64 A)
827 -- Runtime Function: long double __dpd_trunctdxf (_Decimal128 A)
828 -- Runtime Function: long double __bid_trunctdxf (_Decimal128 A)
829 -- Runtime Function: long double __dpd_extendsdtf (_Decimal32 A)
830 -- Runtime Function: long double __bid_extendsdtf (_Decimal32 A)
831 -- Runtime Function: long double __dpd_extendddtf (_Decimal64 A)
832 -- Runtime Function: long double __bid_extendddtf (_Decimal64 A)
833     These functions convert the value of A from a decimal floating type
834     to a binary floating type of a different size.
835
836 -- Runtime Function: _Decimal32 __dpd_extendsfsd (float A)
837 -- Runtime Function: _Decimal32 __bid_extendsfsd (float A)
838 -- Runtime Function: _Decimal64 __dpd_extenddfdd (double A)
839 -- Runtime Function: _Decimal64 __bid_extenddfdd (double A)
840 -- Runtime Function: _Decimal128 __dpd_extendtftd (long double A)
841 -- Runtime Function: _Decimal128 __bid_extendtftd (long double A)
842 -- Runtime Function: float __dpd_truncsdsf (_Decimal32 A)
843 -- Runtime Function: float __bid_truncsdsf (_Decimal32 A)
844 -- Runtime Function: double __dpd_truncdddf (_Decimal64 A)
845 -- Runtime Function: double __bid_truncdddf (_Decimal64 A)
846 -- Runtime Function: long double __dpd_trunctdtf (_Decimal128 A)
847 -- Runtime Function: long double __bid_trunctdtf (_Decimal128 A)
848     These functions convert the value of A between decimal and binary
849     floating types of the same size.
850
851 -- Runtime Function: int __dpd_fixsdsi (_Decimal32 A)
852 -- Runtime Function: int __bid_fixsdsi (_Decimal32 A)
853 -- Runtime Function: int __dpd_fixddsi (_Decimal64 A)
854 -- Runtime Function: int __bid_fixddsi (_Decimal64 A)
855 -- Runtime Function: int __dpd_fixtdsi (_Decimal128 A)
856 -- Runtime Function: int __bid_fixtdsi (_Decimal128 A)
857     These functions convert A to a signed integer.
858
859 -- Runtime Function: long __dpd_fixsddi (_Decimal32 A)
860 -- Runtime Function: long __bid_fixsddi (_Decimal32 A)
861 -- Runtime Function: long __dpd_fixdddi (_Decimal64 A)
862 -- Runtime Function: long __bid_fixdddi (_Decimal64 A)
863 -- Runtime Function: long __dpd_fixtddi (_Decimal128 A)
864 -- Runtime Function: long __bid_fixtddi (_Decimal128 A)
865     These functions convert A to a signed long.
866
867 -- Runtime Function: unsigned int __dpd_fixunssdsi (_Decimal32 A)
868 -- Runtime Function: unsigned int __bid_fixunssdsi (_Decimal32 A)
869 -- Runtime Function: unsigned int __dpd_fixunsddsi (_Decimal64 A)
870 -- Runtime Function: unsigned int __bid_fixunsddsi (_Decimal64 A)
871 -- Runtime Function: unsigned int __dpd_fixunstdsi (_Decimal128 A)
872 -- Runtime Function: unsigned int __bid_fixunstdsi (_Decimal128 A)
873     These functions convert A to an unsigned integer.  Negative values
874     all become zero.
875
876 -- Runtime Function: unsigned long __dpd_fixunssddi (_Decimal32 A)
877 -- Runtime Function: unsigned long __bid_fixunssddi (_Decimal32 A)
878 -- Runtime Function: unsigned long __dpd_fixunsdddi (_Decimal64 A)
879 -- Runtime Function: unsigned long __bid_fixunsdddi (_Decimal64 A)
880 -- Runtime Function: unsigned long __dpd_fixunstddi (_Decimal128 A)
881 -- Runtime Function: unsigned long __bid_fixunstddi (_Decimal128 A)
882     These functions convert A to an unsigned long.  Negative values all
883     become zero.
884
885 -- Runtime Function: _Decimal32 __dpd_floatsisd (int I)
886 -- Runtime Function: _Decimal32 __bid_floatsisd (int I)
887 -- Runtime Function: _Decimal64 __dpd_floatsidd (int I)
888 -- Runtime Function: _Decimal64 __bid_floatsidd (int I)
889 -- Runtime Function: _Decimal128 __dpd_floatsitd (int I)
890 -- Runtime Function: _Decimal128 __bid_floatsitd (int I)
891     These functions convert I, a signed integer, to decimal floating
892     point.
893
894 -- Runtime Function: _Decimal32 __dpd_floatdisd (long I)
895 -- Runtime Function: _Decimal32 __bid_floatdisd (long I)
896 -- Runtime Function: _Decimal64 __dpd_floatdidd (long I)
897 -- Runtime Function: _Decimal64 __bid_floatdidd (long I)
898 -- Runtime Function: _Decimal128 __dpd_floatditd (long I)
899 -- Runtime Function: _Decimal128 __bid_floatditd (long I)
900     These functions convert I, a signed long, to decimal floating
901     point.
902
903 -- Runtime Function: _Decimal32 __dpd_floatunssisd (unsigned int I)
904 -- Runtime Function: _Decimal32 __bid_floatunssisd (unsigned int I)
905 -- Runtime Function: _Decimal64 __dpd_floatunssidd (unsigned int I)
906 -- Runtime Function: _Decimal64 __bid_floatunssidd (unsigned int I)
907 -- Runtime Function: _Decimal128 __dpd_floatunssitd (unsigned int I)
908 -- Runtime Function: _Decimal128 __bid_floatunssitd (unsigned int I)
909     These functions convert I, an unsigned integer, to decimal floating
910     point.
911
912 -- Runtime Function: _Decimal32 __dpd_floatunsdisd (unsigned long I)
913 -- Runtime Function: _Decimal32 __bid_floatunsdisd (unsigned long I)
914 -- Runtime Function: _Decimal64 __dpd_floatunsdidd (unsigned long I)
915 -- Runtime Function: _Decimal64 __bid_floatunsdidd (unsigned long I)
916 -- Runtime Function: _Decimal128 __dpd_floatunsditd (unsigned long I)
917 -- Runtime Function: _Decimal128 __bid_floatunsditd (unsigned long I)
918     These functions convert I, an unsigned long, to decimal floating
919     point.
920
9214.3.3 Comparison functions
922--------------------------
923
924 -- Runtime Function: int __dpd_unordsd2 (_Decimal32 A, _Decimal32 B)
925 -- Runtime Function: int __bid_unordsd2 (_Decimal32 A, _Decimal32 B)
926 -- Runtime Function: int __dpd_unorddd2 (_Decimal64 A, _Decimal64 B)
927 -- Runtime Function: int __bid_unorddd2 (_Decimal64 A, _Decimal64 B)
928 -- Runtime Function: int __dpd_unordtd2 (_Decimal128 A, _Decimal128 B)
929 -- Runtime Function: int __bid_unordtd2 (_Decimal128 A, _Decimal128 B)
930     These functions return a nonzero value if either argument is NaN,
931     otherwise 0.
932
933 There is also a complete group of higher level functions which
934correspond directly to comparison operators.  They implement the ISO C
935semantics for floating-point comparisons, taking NaN into account.  Pay
936careful attention to the return values defined for each set.  Under the
937hood, all of these routines are implemented as
938
939       if (__bid_unordXd2 (a, b))
940         return E;
941       return __bid_cmpXd2 (a, b);
942
943where E is a constant chosen to give the proper behavior for NaN.  Thus,
944the meaning of the return value is different for each set.  Do not rely
945on this implementation; only the semantics documented below are
946guaranteed.
947
948 -- Runtime Function: int __dpd_eqsd2 (_Decimal32 A, _Decimal32 B)
949 -- Runtime Function: int __bid_eqsd2 (_Decimal32 A, _Decimal32 B)
950 -- Runtime Function: int __dpd_eqdd2 (_Decimal64 A, _Decimal64 B)
951 -- Runtime Function: int __bid_eqdd2 (_Decimal64 A, _Decimal64 B)
952 -- Runtime Function: int __dpd_eqtd2 (_Decimal128 A, _Decimal128 B)
953 -- Runtime Function: int __bid_eqtd2 (_Decimal128 A, _Decimal128 B)
954     These functions return zero if neither argument is NaN, and A and B
955     are equal.
956
957 -- Runtime Function: int __dpd_nesd2 (_Decimal32 A, _Decimal32 B)
958 -- Runtime Function: int __bid_nesd2 (_Decimal32 A, _Decimal32 B)
959 -- Runtime Function: int __dpd_nedd2 (_Decimal64 A, _Decimal64 B)
960 -- Runtime Function: int __bid_nedd2 (_Decimal64 A, _Decimal64 B)
961 -- Runtime Function: int __dpd_netd2 (_Decimal128 A, _Decimal128 B)
962 -- Runtime Function: int __bid_netd2 (_Decimal128 A, _Decimal128 B)
963     These functions return a nonzero value if either argument is NaN,
964     or if A and B are unequal.
965
966 -- Runtime Function: int __dpd_gesd2 (_Decimal32 A, _Decimal32 B)
967 -- Runtime Function: int __bid_gesd2 (_Decimal32 A, _Decimal32 B)
968 -- Runtime Function: int __dpd_gedd2 (_Decimal64 A, _Decimal64 B)
969 -- Runtime Function: int __bid_gedd2 (_Decimal64 A, _Decimal64 B)
970 -- Runtime Function: int __dpd_getd2 (_Decimal128 A, _Decimal128 B)
971 -- Runtime Function: int __bid_getd2 (_Decimal128 A, _Decimal128 B)
972     These functions return a value greater than or equal to zero if
973     neither argument is NaN, and A is greater than or equal to B.
974
975 -- Runtime Function: int __dpd_ltsd2 (_Decimal32 A, _Decimal32 B)
976 -- Runtime Function: int __bid_ltsd2 (_Decimal32 A, _Decimal32 B)
977 -- Runtime Function: int __dpd_ltdd2 (_Decimal64 A, _Decimal64 B)
978 -- Runtime Function: int __bid_ltdd2 (_Decimal64 A, _Decimal64 B)
979 -- Runtime Function: int __dpd_lttd2 (_Decimal128 A, _Decimal128 B)
980 -- Runtime Function: int __bid_lttd2 (_Decimal128 A, _Decimal128 B)
981     These functions return a value less than zero if neither argument
982     is NaN, and A is strictly less than B.
983
984 -- Runtime Function: int __dpd_lesd2 (_Decimal32 A, _Decimal32 B)
985 -- Runtime Function: int __bid_lesd2 (_Decimal32 A, _Decimal32 B)
986 -- Runtime Function: int __dpd_ledd2 (_Decimal64 A, _Decimal64 B)
987 -- Runtime Function: int __bid_ledd2 (_Decimal64 A, _Decimal64 B)
988 -- Runtime Function: int __dpd_letd2 (_Decimal128 A, _Decimal128 B)
989 -- Runtime Function: int __bid_letd2 (_Decimal128 A, _Decimal128 B)
990     These functions return a value less than or equal to zero if
991     neither argument is NaN, and A is less than or equal to B.
992
993 -- Runtime Function: int __dpd_gtsd2 (_Decimal32 A, _Decimal32 B)
994 -- Runtime Function: int __bid_gtsd2 (_Decimal32 A, _Decimal32 B)
995 -- Runtime Function: int __dpd_gtdd2 (_Decimal64 A, _Decimal64 B)
996 -- Runtime Function: int __bid_gtdd2 (_Decimal64 A, _Decimal64 B)
997 -- Runtime Function: int __dpd_gttd2 (_Decimal128 A, _Decimal128 B)
998 -- Runtime Function: int __bid_gttd2 (_Decimal128 A, _Decimal128 B)
999     These functions return a value greater than zero if neither
1000     argument is NaN, and A is strictly greater than B.
1001
1002
1003File: gccint.info,  Node: Fixed-point fractional library routines,  Next: Exception handling routines,  Prev: Decimal float library routines,  Up: Libgcc
1004
10054.4 Routines for fixed-point fractional emulation
1006=================================================
1007
1008The software fixed-point library implements fixed-point fractional
1009arithmetic, and is only activated on selected targets.
1010
1011 For ease of comprehension 'fract' is an alias for the '_Fract' type,
1012'accum' an alias for '_Accum', and 'sat' an alias for '_Sat'.
1013
1014 For illustrative purposes, in this section the fixed-point fractional
1015type 'short fract' is assumed to correspond to machine mode 'QQmode';
1016'unsigned short fract' to 'UQQmode'; 'fract' to 'HQmode';
1017'unsigned fract' to 'UHQmode'; 'long fract' to 'SQmode';
1018'unsigned long fract' to 'USQmode'; 'long long fract' to 'DQmode'; and
1019'unsigned long long fract' to 'UDQmode'.  Similarly the fixed-point
1020accumulator type 'short accum' corresponds to 'HAmode';
1021'unsigned short accum' to 'UHAmode'; 'accum' to 'SAmode';
1022'unsigned accum' to 'USAmode'; 'long accum' to 'DAmode';
1023'unsigned long accum' to 'UDAmode'; 'long long accum' to 'TAmode'; and
1024'unsigned long long accum' to 'UTAmode'.
1025
10264.4.1 Arithmetic functions
1027--------------------------
1028
1029 -- Runtime Function: short fract __addqq3 (short fract A, short fract
1030          B)
1031 -- Runtime Function: fract __addhq3 (fract A, fract B)
1032 -- Runtime Function: long fract __addsq3 (long fract A, long fract B)
1033 -- Runtime Function: long long fract __adddq3 (long long fract A, long
1034          long fract B)
1035 -- Runtime Function: unsigned short fract __adduqq3 (unsigned short
1036          fract A, unsigned short fract B)
1037 -- Runtime Function: unsigned fract __adduhq3 (unsigned fract A,
1038          unsigned fract B)
1039 -- Runtime Function: unsigned long fract __addusq3 (unsigned long fract
1040          A, unsigned long fract B)
1041 -- Runtime Function: unsigned long long fract __addudq3 (unsigned long
1042          long fract A, unsigned long long fract B)
1043 -- Runtime Function: short accum __addha3 (short accum A, short accum
1044          B)
1045 -- Runtime Function: accum __addsa3 (accum A, accum B)
1046 -- Runtime Function: long accum __addda3 (long accum A, long accum B)
1047 -- Runtime Function: long long accum __addta3 (long long accum A, long
1048          long accum B)
1049 -- Runtime Function: unsigned short accum __adduha3 (unsigned short
1050          accum A, unsigned short accum B)
1051 -- Runtime Function: unsigned accum __addusa3 (unsigned accum A,
1052          unsigned accum B)
1053 -- Runtime Function: unsigned long accum __adduda3 (unsigned long accum
1054          A, unsigned long accum B)
1055 -- Runtime Function: unsigned long long accum __adduta3 (unsigned long
1056          long accum A, unsigned long long accum B)
1057     These functions return the sum of A and B.
1058
1059 -- Runtime Function: short fract __ssaddqq3 (short fract A, short fract
1060          B)
1061 -- Runtime Function: fract __ssaddhq3 (fract A, fract B)
1062 -- Runtime Function: long fract __ssaddsq3 (long fract A, long fract B)
1063 -- Runtime Function: long long fract __ssadddq3 (long long fract A,
1064          long long fract B)
1065 -- Runtime Function: short accum __ssaddha3 (short accum A, short accum
1066          B)
1067 -- Runtime Function: accum __ssaddsa3 (accum A, accum B)
1068 -- Runtime Function: long accum __ssaddda3 (long accum A, long accum B)
1069 -- Runtime Function: long long accum __ssaddta3 (long long accum A,
1070          long long accum B)
1071     These functions return the sum of A and B with signed saturation.
1072
1073 -- Runtime Function: unsigned short fract __usadduqq3 (unsigned short
1074          fract A, unsigned short fract B)
1075 -- Runtime Function: unsigned fract __usadduhq3 (unsigned fract A,
1076          unsigned fract B)
1077 -- Runtime Function: unsigned long fract __usaddusq3 (unsigned long
1078          fract A, unsigned long fract B)
1079 -- Runtime Function: unsigned long long fract __usaddudq3 (unsigned
1080          long long fract A, unsigned long long fract B)
1081 -- Runtime Function: unsigned short accum __usadduha3 (unsigned short
1082          accum A, unsigned short accum B)
1083 -- Runtime Function: unsigned accum __usaddusa3 (unsigned accum A,
1084          unsigned accum B)
1085 -- Runtime Function: unsigned long accum __usadduda3 (unsigned long
1086          accum A, unsigned long accum B)
1087 -- Runtime Function: unsigned long long accum __usadduta3 (unsigned
1088          long long accum A, unsigned long long accum B)
1089     These functions return the sum of A and B with unsigned saturation.
1090
1091 -- Runtime Function: short fract __subqq3 (short fract A, short fract
1092          B)
1093 -- Runtime Function: fract __subhq3 (fract A, fract B)
1094 -- Runtime Function: long fract __subsq3 (long fract A, long fract B)
1095 -- Runtime Function: long long fract __subdq3 (long long fract A, long
1096          long fract B)
1097 -- Runtime Function: unsigned short fract __subuqq3 (unsigned short
1098          fract A, unsigned short fract B)
1099 -- Runtime Function: unsigned fract __subuhq3 (unsigned fract A,
1100          unsigned fract B)
1101 -- Runtime Function: unsigned long fract __subusq3 (unsigned long fract
1102          A, unsigned long fract B)
1103 -- Runtime Function: unsigned long long fract __subudq3 (unsigned long
1104          long fract A, unsigned long long fract B)
1105 -- Runtime Function: short accum __subha3 (short accum A, short accum
1106          B)
1107 -- Runtime Function: accum __subsa3 (accum A, accum B)
1108 -- Runtime Function: long accum __subda3 (long accum A, long accum B)
1109 -- Runtime Function: long long accum __subta3 (long long accum A, long
1110          long accum B)
1111 -- Runtime Function: unsigned short accum __subuha3 (unsigned short
1112          accum A, unsigned short accum B)
1113 -- Runtime Function: unsigned accum __subusa3 (unsigned accum A,
1114          unsigned accum B)
1115 -- Runtime Function: unsigned long accum __subuda3 (unsigned long accum
1116          A, unsigned long accum B)
1117 -- Runtime Function: unsigned long long accum __subuta3 (unsigned long
1118          long accum A, unsigned long long accum B)
1119     These functions return the difference of A and B; that is, 'A - B'.
1120
1121 -- Runtime Function: short fract __sssubqq3 (short fract A, short fract
1122          B)
1123 -- Runtime Function: fract __sssubhq3 (fract A, fract B)
1124 -- Runtime Function: long fract __sssubsq3 (long fract A, long fract B)
1125 -- Runtime Function: long long fract __sssubdq3 (long long fract A,
1126          long long fract B)
1127 -- Runtime Function: short accum __sssubha3 (short accum A, short accum
1128          B)
1129 -- Runtime Function: accum __sssubsa3 (accum A, accum B)
1130 -- Runtime Function: long accum __sssubda3 (long accum A, long accum B)
1131 -- Runtime Function: long long accum __sssubta3 (long long accum A,
1132          long long accum B)
1133     These functions return the difference of A and B with signed
1134     saturation; that is, 'A - B'.
1135
1136 -- Runtime Function: unsigned short fract __ussubuqq3 (unsigned short
1137          fract A, unsigned short fract B)
1138 -- Runtime Function: unsigned fract __ussubuhq3 (unsigned fract A,
1139          unsigned fract B)
1140 -- Runtime Function: unsigned long fract __ussubusq3 (unsigned long
1141          fract A, unsigned long fract B)
1142 -- Runtime Function: unsigned long long fract __ussubudq3 (unsigned
1143          long long fract A, unsigned long long fract B)
1144 -- Runtime Function: unsigned short accum __ussubuha3 (unsigned short
1145          accum A, unsigned short accum B)
1146 -- Runtime Function: unsigned accum __ussubusa3 (unsigned accum A,
1147          unsigned accum B)
1148 -- Runtime Function: unsigned long accum __ussubuda3 (unsigned long
1149          accum A, unsigned long accum B)
1150 -- Runtime Function: unsigned long long accum __ussubuta3 (unsigned
1151          long long accum A, unsigned long long accum B)
1152     These functions return the difference of A and B with unsigned
1153     saturation; that is, 'A - B'.
1154
1155 -- Runtime Function: short fract __mulqq3 (short fract A, short fract
1156          B)
1157 -- Runtime Function: fract __mulhq3 (fract A, fract B)
1158 -- Runtime Function: long fract __mulsq3 (long fract A, long fract B)
1159 -- Runtime Function: long long fract __muldq3 (long long fract A, long
1160          long fract B)
1161 -- Runtime Function: unsigned short fract __muluqq3 (unsigned short
1162          fract A, unsigned short fract B)
1163 -- Runtime Function: unsigned fract __muluhq3 (unsigned fract A,
1164          unsigned fract B)
1165 -- Runtime Function: unsigned long fract __mulusq3 (unsigned long fract
1166          A, unsigned long fract B)
1167 -- Runtime Function: unsigned long long fract __muludq3 (unsigned long
1168          long fract A, unsigned long long fract B)
1169 -- Runtime Function: short accum __mulha3 (short accum A, short accum
1170          B)
1171 -- Runtime Function: accum __mulsa3 (accum A, accum B)
1172 -- Runtime Function: long accum __mulda3 (long accum A, long accum B)
1173 -- Runtime Function: long long accum __multa3 (long long accum A, long
1174          long accum B)
1175 -- Runtime Function: unsigned short accum __muluha3 (unsigned short
1176          accum A, unsigned short accum B)
1177 -- Runtime Function: unsigned accum __mulusa3 (unsigned accum A,
1178          unsigned accum B)
1179 -- Runtime Function: unsigned long accum __muluda3 (unsigned long accum
1180          A, unsigned long accum B)
1181 -- Runtime Function: unsigned long long accum __muluta3 (unsigned long
1182          long accum A, unsigned long long accum B)
1183     These functions return the product of A and B.
1184
1185 -- Runtime Function: short fract __ssmulqq3 (short fract A, short fract
1186          B)
1187 -- Runtime Function: fract __ssmulhq3 (fract A, fract B)
1188 -- Runtime Function: long fract __ssmulsq3 (long fract A, long fract B)
1189 -- Runtime Function: long long fract __ssmuldq3 (long long fract A,
1190          long long fract B)
1191 -- Runtime Function: short accum __ssmulha3 (short accum A, short accum
1192          B)
1193 -- Runtime Function: accum __ssmulsa3 (accum A, accum B)
1194 -- Runtime Function: long accum __ssmulda3 (long accum A, long accum B)
1195 -- Runtime Function: long long accum __ssmulta3 (long long accum A,
1196          long long accum B)
1197     These functions return the product of A and B with signed
1198     saturation.
1199
1200 -- Runtime Function: unsigned short fract __usmuluqq3 (unsigned short
1201          fract A, unsigned short fract B)
1202 -- Runtime Function: unsigned fract __usmuluhq3 (unsigned fract A,
1203          unsigned fract B)
1204 -- Runtime Function: unsigned long fract __usmulusq3 (unsigned long
1205          fract A, unsigned long fract B)
1206 -- Runtime Function: unsigned long long fract __usmuludq3 (unsigned
1207          long long fract A, unsigned long long fract B)
1208 -- Runtime Function: unsigned short accum __usmuluha3 (unsigned short
1209          accum A, unsigned short accum B)
1210 -- Runtime Function: unsigned accum __usmulusa3 (unsigned accum A,
1211          unsigned accum B)
1212 -- Runtime Function: unsigned long accum __usmuluda3 (unsigned long
1213          accum A, unsigned long accum B)
1214 -- Runtime Function: unsigned long long accum __usmuluta3 (unsigned
1215          long long accum A, unsigned long long accum B)
1216     These functions return the product of A and B with unsigned
1217     saturation.
1218
1219 -- Runtime Function: short fract __divqq3 (short fract A, short fract
1220          B)
1221 -- Runtime Function: fract __divhq3 (fract A, fract B)
1222 -- Runtime Function: long fract __divsq3 (long fract A, long fract B)
1223 -- Runtime Function: long long fract __divdq3 (long long fract A, long
1224          long fract B)
1225 -- Runtime Function: short accum __divha3 (short accum A, short accum
1226          B)
1227 -- Runtime Function: accum __divsa3 (accum A, accum B)
1228 -- Runtime Function: long accum __divda3 (long accum A, long accum B)
1229 -- Runtime Function: long long accum __divta3 (long long accum A, long
1230          long accum B)
1231     These functions return the quotient of the signed division of A and
1232     B.
1233
1234 -- Runtime Function: unsigned short fract __udivuqq3 (unsigned short
1235          fract A, unsigned short fract B)
1236 -- Runtime Function: unsigned fract __udivuhq3 (unsigned fract A,
1237          unsigned fract B)
1238 -- Runtime Function: unsigned long fract __udivusq3 (unsigned long
1239          fract A, unsigned long fract B)
1240 -- Runtime Function: unsigned long long fract __udivudq3 (unsigned long
1241          long fract A, unsigned long long fract B)
1242 -- Runtime Function: unsigned short accum __udivuha3 (unsigned short
1243          accum A, unsigned short accum B)
1244 -- Runtime Function: unsigned accum __udivusa3 (unsigned accum A,
1245          unsigned accum B)
1246 -- Runtime Function: unsigned long accum __udivuda3 (unsigned long
1247          accum A, unsigned long accum B)
1248 -- Runtime Function: unsigned long long accum __udivuta3 (unsigned long
1249          long accum A, unsigned long long accum B)
1250     These functions return the quotient of the unsigned division of A
1251     and B.
1252
1253 -- Runtime Function: short fract __ssdivqq3 (short fract A, short fract
1254          B)
1255 -- Runtime Function: fract __ssdivhq3 (fract A, fract B)
1256 -- Runtime Function: long fract __ssdivsq3 (long fract A, long fract B)
1257 -- Runtime Function: long long fract __ssdivdq3 (long long fract A,
1258          long long fract B)
1259 -- Runtime Function: short accum __ssdivha3 (short accum A, short accum
1260          B)
1261 -- Runtime Function: accum __ssdivsa3 (accum A, accum B)
1262 -- Runtime Function: long accum __ssdivda3 (long accum A, long accum B)
1263 -- Runtime Function: long long accum __ssdivta3 (long long accum A,
1264          long long accum B)
1265     These functions return the quotient of the signed division of A and
1266     B with signed saturation.
1267
1268 -- Runtime Function: unsigned short fract __usdivuqq3 (unsigned short
1269          fract A, unsigned short fract B)
1270 -- Runtime Function: unsigned fract __usdivuhq3 (unsigned fract A,
1271          unsigned fract B)
1272 -- Runtime Function: unsigned long fract __usdivusq3 (unsigned long
1273          fract A, unsigned long fract B)
1274 -- Runtime Function: unsigned long long fract __usdivudq3 (unsigned
1275          long long fract A, unsigned long long fract B)
1276 -- Runtime Function: unsigned short accum __usdivuha3 (unsigned short
1277          accum A, unsigned short accum B)
1278 -- Runtime Function: unsigned accum __usdivusa3 (unsigned accum A,
1279          unsigned accum B)
1280 -- Runtime Function: unsigned long accum __usdivuda3 (unsigned long
1281          accum A, unsigned long accum B)
1282 -- Runtime Function: unsigned long long accum __usdivuta3 (unsigned
1283          long long accum A, unsigned long long accum B)
1284     These functions return the quotient of the unsigned division of A
1285     and B with unsigned saturation.
1286
1287 -- Runtime Function: short fract __negqq2 (short fract A)
1288 -- Runtime Function: fract __neghq2 (fract A)
1289 -- Runtime Function: long fract __negsq2 (long fract A)
1290 -- Runtime Function: long long fract __negdq2 (long long fract A)
1291 -- Runtime Function: unsigned short fract __neguqq2 (unsigned short
1292          fract A)
1293 -- Runtime Function: unsigned fract __neguhq2 (unsigned fract A)
1294 -- Runtime Function: unsigned long fract __negusq2 (unsigned long fract
1295          A)
1296 -- Runtime Function: unsigned long long fract __negudq2 (unsigned long
1297          long fract A)
1298 -- Runtime Function: short accum __negha2 (short accum A)
1299 -- Runtime Function: accum __negsa2 (accum A)
1300 -- Runtime Function: long accum __negda2 (long accum A)
1301 -- Runtime Function: long long accum __negta2 (long long accum A)
1302 -- Runtime Function: unsigned short accum __neguha2 (unsigned short
1303          accum A)
1304 -- Runtime Function: unsigned accum __negusa2 (unsigned accum A)
1305 -- Runtime Function: unsigned long accum __neguda2 (unsigned long accum
1306          A)
1307 -- Runtime Function: unsigned long long accum __neguta2 (unsigned long
1308          long accum A)
1309     These functions return the negation of A.
1310
1311 -- Runtime Function: short fract __ssnegqq2 (short fract A)
1312 -- Runtime Function: fract __ssneghq2 (fract A)
1313 -- Runtime Function: long fract __ssnegsq2 (long fract A)
1314 -- Runtime Function: long long fract __ssnegdq2 (long long fract A)
1315 -- Runtime Function: short accum __ssnegha2 (short accum A)
1316 -- Runtime Function: accum __ssnegsa2 (accum A)
1317 -- Runtime Function: long accum __ssnegda2 (long accum A)
1318 -- Runtime Function: long long accum __ssnegta2 (long long accum A)
1319     These functions return the negation of A with signed saturation.
1320
1321 -- Runtime Function: unsigned short fract __usneguqq2 (unsigned short
1322          fract A)
1323 -- Runtime Function: unsigned fract __usneguhq2 (unsigned fract A)
1324 -- Runtime Function: unsigned long fract __usnegusq2 (unsigned long
1325          fract A)
1326 -- Runtime Function: unsigned long long fract __usnegudq2 (unsigned
1327          long long fract A)
1328 -- Runtime Function: unsigned short accum __usneguha2 (unsigned short
1329          accum A)
1330 -- Runtime Function: unsigned accum __usnegusa2 (unsigned accum A)
1331 -- Runtime Function: unsigned long accum __usneguda2 (unsigned long
1332          accum A)
1333 -- Runtime Function: unsigned long long accum __usneguta2 (unsigned
1334          long long accum A)
1335     These functions return the negation of A with unsigned saturation.
1336
1337 -- Runtime Function: short fract __ashlqq3 (short fract A, int B)
1338 -- Runtime Function: fract __ashlhq3 (fract A, int B)
1339 -- Runtime Function: long fract __ashlsq3 (long fract A, int B)
1340 -- Runtime Function: long long fract __ashldq3 (long long fract A, int
1341          B)
1342 -- Runtime Function: unsigned short fract __ashluqq3 (unsigned short
1343          fract A, int B)
1344 -- Runtime Function: unsigned fract __ashluhq3 (unsigned fract A, int
1345          B)
1346 -- Runtime Function: unsigned long fract __ashlusq3 (unsigned long
1347          fract A, int B)
1348 -- Runtime Function: unsigned long long fract __ashludq3 (unsigned long
1349          long fract A, int B)
1350 -- Runtime Function: short accum __ashlha3 (short accum A, int B)
1351 -- Runtime Function: accum __ashlsa3 (accum A, int B)
1352 -- Runtime Function: long accum __ashlda3 (long accum A, int B)
1353 -- Runtime Function: long long accum __ashlta3 (long long accum A, int
1354          B)
1355 -- Runtime Function: unsigned short accum __ashluha3 (unsigned short
1356          accum A, int B)
1357 -- Runtime Function: unsigned accum __ashlusa3 (unsigned accum A, int
1358          B)
1359 -- Runtime Function: unsigned long accum __ashluda3 (unsigned long
1360          accum A, int B)
1361 -- Runtime Function: unsigned long long accum __ashluta3 (unsigned long
1362          long accum A, int B)
1363     These functions return the result of shifting A left by B bits.
1364
1365 -- Runtime Function: short fract __ashrqq3 (short fract A, int B)
1366 -- Runtime Function: fract __ashrhq3 (fract A, int B)
1367 -- Runtime Function: long fract __ashrsq3 (long fract A, int B)
1368 -- Runtime Function: long long fract __ashrdq3 (long long fract A, int
1369          B)
1370 -- Runtime Function: short accum __ashrha3 (short accum A, int B)
1371 -- Runtime Function: accum __ashrsa3 (accum A, int B)
1372 -- Runtime Function: long accum __ashrda3 (long accum A, int B)
1373 -- Runtime Function: long long accum __ashrta3 (long long accum A, int
1374          B)
1375     These functions return the result of arithmetically shifting A
1376     right by B bits.
1377
1378 -- Runtime Function: unsigned short fract __lshruqq3 (unsigned short
1379          fract A, int B)
1380 -- Runtime Function: unsigned fract __lshruhq3 (unsigned fract A, int
1381          B)
1382 -- Runtime Function: unsigned long fract __lshrusq3 (unsigned long
1383          fract A, int B)
1384 -- Runtime Function: unsigned long long fract __lshrudq3 (unsigned long
1385          long fract A, int B)
1386 -- Runtime Function: unsigned short accum __lshruha3 (unsigned short
1387          accum A, int B)
1388 -- Runtime Function: unsigned accum __lshrusa3 (unsigned accum A, int
1389          B)
1390 -- Runtime Function: unsigned long accum __lshruda3 (unsigned long
1391          accum A, int B)
1392 -- Runtime Function: unsigned long long accum __lshruta3 (unsigned long
1393          long accum A, int B)
1394     These functions return the result of logically shifting A right by
1395     B bits.
1396
1397 -- Runtime Function: fract __ssashlhq3 (fract A, int B)
1398 -- Runtime Function: long fract __ssashlsq3 (long fract A, int B)
1399 -- Runtime Function: long long fract __ssashldq3 (long long fract A,
1400          int B)
1401 -- Runtime Function: short accum __ssashlha3 (short accum A, int B)
1402 -- Runtime Function: accum __ssashlsa3 (accum A, int B)
1403 -- Runtime Function: long accum __ssashlda3 (long accum A, int B)
1404 -- Runtime Function: long long accum __ssashlta3 (long long accum A,
1405          int B)
1406     These functions return the result of shifting A left by B bits with
1407     signed saturation.
1408
1409 -- Runtime Function: unsigned short fract __usashluqq3 (unsigned short
1410          fract A, int B)
1411 -- Runtime Function: unsigned fract __usashluhq3 (unsigned fract A, int
1412          B)
1413 -- Runtime Function: unsigned long fract __usashlusq3 (unsigned long
1414          fract A, int B)
1415 -- Runtime Function: unsigned long long fract __usashludq3 (unsigned
1416          long long fract A, int B)
1417 -- Runtime Function: unsigned short accum __usashluha3 (unsigned short
1418          accum A, int B)
1419 -- Runtime Function: unsigned accum __usashlusa3 (unsigned accum A, int
1420          B)
1421 -- Runtime Function: unsigned long accum __usashluda3 (unsigned long
1422          accum A, int B)
1423 -- Runtime Function: unsigned long long accum __usashluta3 (unsigned
1424          long long accum A, int B)
1425     These functions return the result of shifting A left by B bits with
1426     unsigned saturation.
1427
14284.4.2 Comparison functions
1429--------------------------
1430
1431The following functions implement fixed-point comparisons.  These
1432functions implement a low-level compare, upon which the higher level
1433comparison operators (such as less than and greater than or equal to)
1434can be constructed.  The returned values lie in the range zero to two,
1435to allow the high-level operators to be implemented by testing the
1436returned result using either signed or unsigned comparison.
1437
1438 -- Runtime Function: int __cmpqq2 (short fract A, short fract B)
1439 -- Runtime Function: int __cmphq2 (fract A, fract B)
1440 -- Runtime Function: int __cmpsq2 (long fract A, long fract B)
1441 -- Runtime Function: int __cmpdq2 (long long fract A, long long fract
1442          B)
1443 -- Runtime Function: int __cmpuqq2 (unsigned short fract A, unsigned
1444          short fract B)
1445 -- Runtime Function: int __cmpuhq2 (unsigned fract A, unsigned fract B)
1446 -- Runtime Function: int __cmpusq2 (unsigned long fract A, unsigned
1447          long fract B)
1448 -- Runtime Function: int __cmpudq2 (unsigned long long fract A,
1449          unsigned long long fract B)
1450 -- Runtime Function: int __cmpha2 (short accum A, short accum B)
1451 -- Runtime Function: int __cmpsa2 (accum A, accum B)
1452 -- Runtime Function: int __cmpda2 (long accum A, long accum B)
1453 -- Runtime Function: int __cmpta2 (long long accum A, long long accum
1454          B)
1455 -- Runtime Function: int __cmpuha2 (unsigned short accum A, unsigned
1456          short accum B)
1457 -- Runtime Function: int __cmpusa2 (unsigned accum A, unsigned accum B)
1458 -- Runtime Function: int __cmpuda2 (unsigned long accum A, unsigned
1459          long accum B)
1460 -- Runtime Function: int __cmputa2 (unsigned long long accum A,
1461          unsigned long long accum B)
1462     These functions perform a signed or unsigned comparison of A and B
1463     (depending on the selected machine mode).  If A is less than B,
1464     they return 0; if A is greater than B, they return 2; and if A and
1465     B are equal they return 1.
1466
14674.4.3 Conversion functions
1468--------------------------
1469
1470 -- Runtime Function: fract __fractqqhq2 (short fract A)
1471 -- Runtime Function: long fract __fractqqsq2 (short fract A)
1472 -- Runtime Function: long long fract __fractqqdq2 (short fract A)
1473 -- Runtime Function: short accum __fractqqha (short fract A)
1474 -- Runtime Function: accum __fractqqsa (short fract A)
1475 -- Runtime Function: long accum __fractqqda (short fract A)
1476 -- Runtime Function: long long accum __fractqqta (short fract A)
1477 -- Runtime Function: unsigned short fract __fractqquqq (short fract A)
1478 -- Runtime Function: unsigned fract __fractqquhq (short fract A)
1479 -- Runtime Function: unsigned long fract __fractqqusq (short fract A)
1480 -- Runtime Function: unsigned long long fract __fractqqudq (short fract
1481          A)
1482 -- Runtime Function: unsigned short accum __fractqquha (short fract A)
1483 -- Runtime Function: unsigned accum __fractqqusa (short fract A)
1484 -- Runtime Function: unsigned long accum __fractqquda (short fract A)
1485 -- Runtime Function: unsigned long long accum __fractqquta (short fract
1486          A)
1487 -- Runtime Function: signed char __fractqqqi (short fract A)
1488 -- Runtime Function: short __fractqqhi (short fract A)
1489 -- Runtime Function: int __fractqqsi (short fract A)
1490 -- Runtime Function: long __fractqqdi (short fract A)
1491 -- Runtime Function: long long __fractqqti (short fract A)
1492 -- Runtime Function: float __fractqqsf (short fract A)
1493 -- Runtime Function: double __fractqqdf (short fract A)
1494 -- Runtime Function: short fract __fracthqqq2 (fract A)
1495 -- Runtime Function: long fract __fracthqsq2 (fract A)
1496 -- Runtime Function: long long fract __fracthqdq2 (fract A)
1497 -- Runtime Function: short accum __fracthqha (fract A)
1498 -- Runtime Function: accum __fracthqsa (fract A)
1499 -- Runtime Function: long accum __fracthqda (fract A)
1500 -- Runtime Function: long long accum __fracthqta (fract A)
1501 -- Runtime Function: unsigned short fract __fracthquqq (fract A)
1502 -- Runtime Function: unsigned fract __fracthquhq (fract A)
1503 -- Runtime Function: unsigned long fract __fracthqusq (fract A)
1504 -- Runtime Function: unsigned long long fract __fracthqudq (fract A)
1505 -- Runtime Function: unsigned short accum __fracthquha (fract A)
1506 -- Runtime Function: unsigned accum __fracthqusa (fract A)
1507 -- Runtime Function: unsigned long accum __fracthquda (fract A)
1508 -- Runtime Function: unsigned long long accum __fracthquta (fract A)
1509 -- Runtime Function: signed char __fracthqqi (fract A)
1510 -- Runtime Function: short __fracthqhi (fract A)
1511 -- Runtime Function: int __fracthqsi (fract A)
1512 -- Runtime Function: long __fracthqdi (fract A)
1513 -- Runtime Function: long long __fracthqti (fract A)
1514 -- Runtime Function: float __fracthqsf (fract A)
1515 -- Runtime Function: double __fracthqdf (fract A)
1516 -- Runtime Function: short fract __fractsqqq2 (long fract A)
1517 -- Runtime Function: fract __fractsqhq2 (long fract A)
1518 -- Runtime Function: long long fract __fractsqdq2 (long fract A)
1519 -- Runtime Function: short accum __fractsqha (long fract A)
1520 -- Runtime Function: accum __fractsqsa (long fract A)
1521 -- Runtime Function: long accum __fractsqda (long fract A)
1522 -- Runtime Function: long long accum __fractsqta (long fract A)
1523 -- Runtime Function: unsigned short fract __fractsquqq (long fract A)
1524 -- Runtime Function: unsigned fract __fractsquhq (long fract A)
1525 -- Runtime Function: unsigned long fract __fractsqusq (long fract A)
1526 -- Runtime Function: unsigned long long fract __fractsqudq (long fract
1527          A)
1528 -- Runtime Function: unsigned short accum __fractsquha (long fract A)
1529 -- Runtime Function: unsigned accum __fractsqusa (long fract A)
1530 -- Runtime Function: unsigned long accum __fractsquda (long fract A)
1531 -- Runtime Function: unsigned long long accum __fractsquta (long fract
1532          A)
1533 -- Runtime Function: signed char __fractsqqi (long fract A)
1534 -- Runtime Function: short __fractsqhi (long fract A)
1535 -- Runtime Function: int __fractsqsi (long fract A)
1536 -- Runtime Function: long __fractsqdi (long fract A)
1537 -- Runtime Function: long long __fractsqti (long fract A)
1538 -- Runtime Function: float __fractsqsf (long fract A)
1539 -- Runtime Function: double __fractsqdf (long fract A)
1540 -- Runtime Function: short fract __fractdqqq2 (long long fract A)
1541 -- Runtime Function: fract __fractdqhq2 (long long fract A)
1542 -- Runtime Function: long fract __fractdqsq2 (long long fract A)
1543 -- Runtime Function: short accum __fractdqha (long long fract A)
1544 -- Runtime Function: accum __fractdqsa (long long fract A)
1545 -- Runtime Function: long accum __fractdqda (long long fract A)
1546 -- Runtime Function: long long accum __fractdqta (long long fract A)
1547 -- Runtime Function: unsigned short fract __fractdquqq (long long fract
1548          A)
1549 -- Runtime Function: unsigned fract __fractdquhq (long long fract A)
1550 -- Runtime Function: unsigned long fract __fractdqusq (long long fract
1551          A)
1552 -- Runtime Function: unsigned long long fract __fractdqudq (long long
1553          fract A)
1554 -- Runtime Function: unsigned short accum __fractdquha (long long fract
1555          A)
1556 -- Runtime Function: unsigned accum __fractdqusa (long long fract A)
1557 -- Runtime Function: unsigned long accum __fractdquda (long long fract
1558          A)
1559 -- Runtime Function: unsigned long long accum __fractdquta (long long
1560          fract A)
1561 -- Runtime Function: signed char __fractdqqi (long long fract A)
1562 -- Runtime Function: short __fractdqhi (long long fract A)
1563 -- Runtime Function: int __fractdqsi (long long fract A)
1564 -- Runtime Function: long __fractdqdi (long long fract A)
1565 -- Runtime Function: long long __fractdqti (long long fract A)
1566 -- Runtime Function: float __fractdqsf (long long fract A)
1567 -- Runtime Function: double __fractdqdf (long long fract A)
1568 -- Runtime Function: short fract __fracthaqq (short accum A)
1569 -- Runtime Function: fract __fracthahq (short accum A)
1570 -- Runtime Function: long fract __fracthasq (short accum A)
1571 -- Runtime Function: long long fract __fracthadq (short accum A)
1572 -- Runtime Function: accum __fracthasa2 (short accum A)
1573 -- Runtime Function: long accum __fracthada2 (short accum A)
1574 -- Runtime Function: long long accum __fracthata2 (short accum A)
1575 -- Runtime Function: unsigned short fract __fracthauqq (short accum A)
1576 -- Runtime Function: unsigned fract __fracthauhq (short accum A)
1577 -- Runtime Function: unsigned long fract __fracthausq (short accum A)
1578 -- Runtime Function: unsigned long long fract __fracthaudq (short accum
1579          A)
1580 -- Runtime Function: unsigned short accum __fracthauha (short accum A)
1581 -- Runtime Function: unsigned accum __fracthausa (short accum A)
1582 -- Runtime Function: unsigned long accum __fracthauda (short accum A)
1583 -- Runtime Function: unsigned long long accum __fracthauta (short accum
1584          A)
1585 -- Runtime Function: signed char __fracthaqi (short accum A)
1586 -- Runtime Function: short __fracthahi (short accum A)
1587 -- Runtime Function: int __fracthasi (short accum A)
1588 -- Runtime Function: long __fracthadi (short accum A)
1589 -- Runtime Function: long long __fracthati (short accum A)
1590 -- Runtime Function: float __fracthasf (short accum A)
1591 -- Runtime Function: double __fracthadf (short accum A)
1592 -- Runtime Function: short fract __fractsaqq (accum A)
1593 -- Runtime Function: fract __fractsahq (accum A)
1594 -- Runtime Function: long fract __fractsasq (accum A)
1595 -- Runtime Function: long long fract __fractsadq (accum A)
1596 -- Runtime Function: short accum __fractsaha2 (accum A)
1597 -- Runtime Function: long accum __fractsada2 (accum A)
1598 -- Runtime Function: long long accum __fractsata2 (accum A)
1599 -- Runtime Function: unsigned short fract __fractsauqq (accum A)
1600 -- Runtime Function: unsigned fract __fractsauhq (accum A)
1601 -- Runtime Function: unsigned long fract __fractsausq (accum A)
1602 -- Runtime Function: unsigned long long fract __fractsaudq (accum A)
1603 -- Runtime Function: unsigned short accum __fractsauha (accum A)
1604 -- Runtime Function: unsigned accum __fractsausa (accum A)
1605 -- Runtime Function: unsigned long accum __fractsauda (accum A)
1606 -- Runtime Function: unsigned long long accum __fractsauta (accum A)
1607 -- Runtime Function: signed char __fractsaqi (accum A)
1608 -- Runtime Function: short __fractsahi (accum A)
1609 -- Runtime Function: int __fractsasi (accum A)
1610 -- Runtime Function: long __fractsadi (accum A)
1611 -- Runtime Function: long long __fractsati (accum A)
1612 -- Runtime Function: float __fractsasf (accum A)
1613 -- Runtime Function: double __fractsadf (accum A)
1614 -- Runtime Function: short fract __fractdaqq (long accum A)
1615 -- Runtime Function: fract __fractdahq (long accum A)
1616 -- Runtime Function: long fract __fractdasq (long accum A)
1617 -- Runtime Function: long long fract __fractdadq (long accum A)
1618 -- Runtime Function: short accum __fractdaha2 (long accum A)
1619 -- Runtime Function: accum __fractdasa2 (long accum A)
1620 -- Runtime Function: long long accum __fractdata2 (long accum A)
1621 -- Runtime Function: unsigned short fract __fractdauqq (long accum A)
1622 -- Runtime Function: unsigned fract __fractdauhq (long accum A)
1623 -- Runtime Function: unsigned long fract __fractdausq (long accum A)
1624 -- Runtime Function: unsigned long long fract __fractdaudq (long accum
1625          A)
1626 -- Runtime Function: unsigned short accum __fractdauha (long accum A)
1627 -- Runtime Function: unsigned accum __fractdausa (long accum A)
1628 -- Runtime Function: unsigned long accum __fractdauda (long accum A)
1629 -- Runtime Function: unsigned long long accum __fractdauta (long accum
1630          A)
1631 -- Runtime Function: signed char __fractdaqi (long accum A)
1632 -- Runtime Function: short __fractdahi (long accum A)
1633 -- Runtime Function: int __fractdasi (long accum A)
1634 -- Runtime Function: long __fractdadi (long accum A)
1635 -- Runtime Function: long long __fractdati (long accum A)
1636 -- Runtime Function: float __fractdasf (long accum A)
1637 -- Runtime Function: double __fractdadf (long accum A)
1638 -- Runtime Function: short fract __fracttaqq (long long accum A)
1639 -- Runtime Function: fract __fracttahq (long long accum A)
1640 -- Runtime Function: long fract __fracttasq (long long accum A)
1641 -- Runtime Function: long long fract __fracttadq (long long accum A)
1642 -- Runtime Function: short accum __fracttaha2 (long long accum A)
1643 -- Runtime Function: accum __fracttasa2 (long long accum A)
1644 -- Runtime Function: long accum __fracttada2 (long long accum A)
1645 -- Runtime Function: unsigned short fract __fracttauqq (long long accum
1646          A)
1647 -- Runtime Function: unsigned fract __fracttauhq (long long accum A)
1648 -- Runtime Function: unsigned long fract __fracttausq (long long accum
1649          A)
1650 -- Runtime Function: unsigned long long fract __fracttaudq (long long
1651          accum A)
1652 -- Runtime Function: unsigned short accum __fracttauha (long long accum
1653          A)
1654 -- Runtime Function: unsigned accum __fracttausa (long long accum A)
1655 -- Runtime Function: unsigned long accum __fracttauda (long long accum
1656          A)
1657 -- Runtime Function: unsigned long long accum __fracttauta (long long
1658          accum A)
1659 -- Runtime Function: signed char __fracttaqi (long long accum A)
1660 -- Runtime Function: short __fracttahi (long long accum A)
1661 -- Runtime Function: int __fracttasi (long long accum A)
1662 -- Runtime Function: long __fracttadi (long long accum A)
1663 -- Runtime Function: long long __fracttati (long long accum A)
1664 -- Runtime Function: float __fracttasf (long long accum A)
1665 -- Runtime Function: double __fracttadf (long long accum A)
1666 -- Runtime Function: short fract __fractuqqqq (unsigned short fract A)
1667 -- Runtime Function: fract __fractuqqhq (unsigned short fract A)
1668 -- Runtime Function: long fract __fractuqqsq (unsigned short fract A)
1669 -- Runtime Function: long long fract __fractuqqdq (unsigned short fract
1670          A)
1671 -- Runtime Function: short accum __fractuqqha (unsigned short fract A)
1672 -- Runtime Function: accum __fractuqqsa (unsigned short fract A)
1673 -- Runtime Function: long accum __fractuqqda (unsigned short fract A)
1674 -- Runtime Function: long long accum __fractuqqta (unsigned short fract
1675          A)
1676 -- Runtime Function: unsigned fract __fractuqquhq2 (unsigned short
1677          fract A)
1678 -- Runtime Function: unsigned long fract __fractuqqusq2 (unsigned short
1679          fract A)
1680 -- Runtime Function: unsigned long long fract __fractuqqudq2 (unsigned
1681          short fract A)
1682 -- Runtime Function: unsigned short accum __fractuqquha (unsigned short
1683          fract A)
1684 -- Runtime Function: unsigned accum __fractuqqusa (unsigned short fract
1685          A)
1686 -- Runtime Function: unsigned long accum __fractuqquda (unsigned short
1687          fract A)
1688 -- Runtime Function: unsigned long long accum __fractuqquta (unsigned
1689          short fract A)
1690 -- Runtime Function: signed char __fractuqqqi (unsigned short fract A)
1691 -- Runtime Function: short __fractuqqhi (unsigned short fract A)
1692 -- Runtime Function: int __fractuqqsi (unsigned short fract A)
1693 -- Runtime Function: long __fractuqqdi (unsigned short fract A)
1694 -- Runtime Function: long long __fractuqqti (unsigned short fract A)
1695 -- Runtime Function: float __fractuqqsf (unsigned short fract A)
1696 -- Runtime Function: double __fractuqqdf (unsigned short fract A)
1697 -- Runtime Function: short fract __fractuhqqq (unsigned fract A)
1698 -- Runtime Function: fract __fractuhqhq (unsigned fract A)
1699 -- Runtime Function: long fract __fractuhqsq (unsigned fract A)
1700 -- Runtime Function: long long fract __fractuhqdq (unsigned fract A)
1701 -- Runtime Function: short accum __fractuhqha (unsigned fract A)
1702 -- Runtime Function: accum __fractuhqsa (unsigned fract A)
1703 -- Runtime Function: long accum __fractuhqda (unsigned fract A)
1704 -- Runtime Function: long long accum __fractuhqta (unsigned fract A)
1705 -- Runtime Function: unsigned short fract __fractuhquqq2 (unsigned
1706          fract A)
1707 -- Runtime Function: unsigned long fract __fractuhqusq2 (unsigned fract
1708          A)
1709 -- Runtime Function: unsigned long long fract __fractuhqudq2 (unsigned
1710          fract A)
1711 -- Runtime Function: unsigned short accum __fractuhquha (unsigned fract
1712          A)
1713 -- Runtime Function: unsigned accum __fractuhqusa (unsigned fract A)
1714 -- Runtime Function: unsigned long accum __fractuhquda (unsigned fract
1715          A)
1716 -- Runtime Function: unsigned long long accum __fractuhquta (unsigned
1717          fract A)
1718 -- Runtime Function: signed char __fractuhqqi (unsigned fract A)
1719 -- Runtime Function: short __fractuhqhi (unsigned fract A)
1720 -- Runtime Function: int __fractuhqsi (unsigned fract A)
1721 -- Runtime Function: long __fractuhqdi (unsigned fract A)
1722 -- Runtime Function: long long __fractuhqti (unsigned fract A)
1723 -- Runtime Function: float __fractuhqsf (unsigned fract A)
1724 -- Runtime Function: double __fractuhqdf (unsigned fract A)
1725 -- Runtime Function: short fract __fractusqqq (unsigned long fract A)
1726 -- Runtime Function: fract __fractusqhq (unsigned long fract A)
1727 -- Runtime Function: long fract __fractusqsq (unsigned long fract A)
1728 -- Runtime Function: long long fract __fractusqdq (unsigned long fract
1729          A)
1730 -- Runtime Function: short accum __fractusqha (unsigned long fract A)
1731 -- Runtime Function: accum __fractusqsa (unsigned long fract A)
1732 -- Runtime Function: long accum __fractusqda (unsigned long fract A)
1733 -- Runtime Function: long long accum __fractusqta (unsigned long fract
1734          A)
1735 -- Runtime Function: unsigned short fract __fractusquqq2 (unsigned long
1736          fract A)
1737 -- Runtime Function: unsigned fract __fractusquhq2 (unsigned long fract
1738          A)
1739 -- Runtime Function: unsigned long long fract __fractusqudq2 (unsigned
1740          long fract A)
1741 -- Runtime Function: unsigned short accum __fractusquha (unsigned long
1742          fract A)
1743 -- Runtime Function: unsigned accum __fractusqusa (unsigned long fract
1744          A)
1745 -- Runtime Function: unsigned long accum __fractusquda (unsigned long
1746          fract A)
1747 -- Runtime Function: unsigned long long accum __fractusquta (unsigned
1748          long fract A)
1749 -- Runtime Function: signed char __fractusqqi (unsigned long fract A)
1750 -- Runtime Function: short __fractusqhi (unsigned long fract A)
1751 -- Runtime Function: int __fractusqsi (unsigned long fract A)
1752 -- Runtime Function: long __fractusqdi (unsigned long fract A)
1753 -- Runtime Function: long long __fractusqti (unsigned long fract A)
1754 -- Runtime Function: float __fractusqsf (unsigned long fract A)
1755 -- Runtime Function: double __fractusqdf (unsigned long fract A)
1756 -- Runtime Function: short fract __fractudqqq (unsigned long long fract
1757          A)
1758 -- Runtime Function: fract __fractudqhq (unsigned long long fract A)
1759 -- Runtime Function: long fract __fractudqsq (unsigned long long fract
1760          A)
1761 -- Runtime Function: long long fract __fractudqdq (unsigned long long
1762          fract A)
1763 -- Runtime Function: short accum __fractudqha (unsigned long long fract
1764          A)
1765 -- Runtime Function: accum __fractudqsa (unsigned long long fract A)
1766 -- Runtime Function: long accum __fractudqda (unsigned long long fract
1767          A)
1768 -- Runtime Function: long long accum __fractudqta (unsigned long long
1769          fract A)
1770 -- Runtime Function: unsigned short fract __fractudquqq2 (unsigned long
1771          long fract A)
1772 -- Runtime Function: unsigned fract __fractudquhq2 (unsigned long long
1773          fract A)
1774 -- Runtime Function: unsigned long fract __fractudqusq2 (unsigned long
1775          long fract A)
1776 -- Runtime Function: unsigned short accum __fractudquha (unsigned long
1777          long fract A)
1778 -- Runtime Function: unsigned accum __fractudqusa (unsigned long long
1779          fract A)
1780 -- Runtime Function: unsigned long accum __fractudquda (unsigned long
1781          long fract A)
1782 -- Runtime Function: unsigned long long accum __fractudquta (unsigned
1783          long long fract A)
1784 -- Runtime Function: signed char __fractudqqi (unsigned long long fract
1785          A)
1786 -- Runtime Function: short __fractudqhi (unsigned long long fract A)
1787 -- Runtime Function: int __fractudqsi (unsigned long long fract A)
1788 -- Runtime Function: long __fractudqdi (unsigned long long fract A)
1789 -- Runtime Function: long long __fractudqti (unsigned long long fract
1790          A)
1791 -- Runtime Function: float __fractudqsf (unsigned long long fract A)
1792 -- Runtime Function: double __fractudqdf (unsigned long long fract A)
1793 -- Runtime Function: short fract __fractuhaqq (unsigned short accum A)
1794 -- Runtime Function: fract __fractuhahq (unsigned short accum A)
1795 -- Runtime Function: long fract __fractuhasq (unsigned short accum A)
1796 -- Runtime Function: long long fract __fractuhadq (unsigned short accum
1797          A)
1798 -- Runtime Function: short accum __fractuhaha (unsigned short accum A)
1799 -- Runtime Function: accum __fractuhasa (unsigned short accum A)
1800 -- Runtime Function: long accum __fractuhada (unsigned short accum A)
1801 -- Runtime Function: long long accum __fractuhata (unsigned short accum
1802          A)
1803 -- Runtime Function: unsigned short fract __fractuhauqq (unsigned short
1804          accum A)
1805 -- Runtime Function: unsigned fract __fractuhauhq (unsigned short accum
1806          A)
1807 -- Runtime Function: unsigned long fract __fractuhausq (unsigned short
1808          accum A)
1809 -- Runtime Function: unsigned long long fract __fractuhaudq (unsigned
1810          short accum A)
1811 -- Runtime Function: unsigned accum __fractuhausa2 (unsigned short
1812          accum A)
1813 -- Runtime Function: unsigned long accum __fractuhauda2 (unsigned short
1814          accum A)
1815 -- Runtime Function: unsigned long long accum __fractuhauta2 (unsigned
1816          short accum A)
1817 -- Runtime Function: signed char __fractuhaqi (unsigned short accum A)
1818 -- Runtime Function: short __fractuhahi (unsigned short accum A)
1819 -- Runtime Function: int __fractuhasi (unsigned short accum A)
1820 -- Runtime Function: long __fractuhadi (unsigned short accum A)
1821 -- Runtime Function: long long __fractuhati (unsigned short accum A)
1822 -- Runtime Function: float __fractuhasf (unsigned short accum A)
1823 -- Runtime Function: double __fractuhadf (unsigned short accum A)
1824 -- Runtime Function: short fract __fractusaqq (unsigned accum A)
1825 -- Runtime Function: fract __fractusahq (unsigned accum A)
1826 -- Runtime Function: long fract __fractusasq (unsigned accum A)
1827 -- Runtime Function: long long fract __fractusadq (unsigned accum A)
1828 -- Runtime Function: short accum __fractusaha (unsigned accum A)
1829 -- Runtime Function: accum __fractusasa (unsigned accum A)
1830 -- Runtime Function: long accum __fractusada (unsigned accum A)
1831 -- Runtime Function: long long accum __fractusata (unsigned accum A)
1832 -- Runtime Function: unsigned short fract __fractusauqq (unsigned accum
1833          A)
1834 -- Runtime Function: unsigned fract __fractusauhq (unsigned accum A)
1835 -- Runtime Function: unsigned long fract __fractusausq (unsigned accum
1836          A)
1837 -- Runtime Function: unsigned long long fract __fractusaudq (unsigned
1838          accum A)
1839 -- Runtime Function: unsigned short accum __fractusauha2 (unsigned
1840          accum A)
1841 -- Runtime Function: unsigned long accum __fractusauda2 (unsigned accum
1842          A)
1843 -- Runtime Function: unsigned long long accum __fractusauta2 (unsigned
1844          accum A)
1845 -- Runtime Function: signed char __fractusaqi (unsigned accum A)
1846 -- Runtime Function: short __fractusahi (unsigned accum A)
1847 -- Runtime Function: int __fractusasi (unsigned accum A)
1848 -- Runtime Function: long __fractusadi (unsigned accum A)
1849 -- Runtime Function: long long __fractusati (unsigned accum A)
1850 -- Runtime Function: float __fractusasf (unsigned accum A)
1851 -- Runtime Function: double __fractusadf (unsigned accum A)
1852 -- Runtime Function: short fract __fractudaqq (unsigned long accum A)
1853 -- Runtime Function: fract __fractudahq (unsigned long accum A)
1854 -- Runtime Function: long fract __fractudasq (unsigned long accum A)
1855 -- Runtime Function: long long fract __fractudadq (unsigned long accum
1856          A)
1857 -- Runtime Function: short accum __fractudaha (unsigned long accum A)
1858 -- Runtime Function: accum __fractudasa (unsigned long accum A)
1859 -- Runtime Function: long accum __fractudada (unsigned long accum A)
1860 -- Runtime Function: long long accum __fractudata (unsigned long accum
1861          A)
1862 -- Runtime Function: unsigned short fract __fractudauqq (unsigned long
1863          accum A)
1864 -- Runtime Function: unsigned fract __fractudauhq (unsigned long accum
1865          A)
1866 -- Runtime Function: unsigned long fract __fractudausq (unsigned long
1867          accum A)
1868 -- Runtime Function: unsigned long long fract __fractudaudq (unsigned
1869          long accum A)
1870 -- Runtime Function: unsigned short accum __fractudauha2 (unsigned long
1871          accum A)
1872 -- Runtime Function: unsigned accum __fractudausa2 (unsigned long accum
1873          A)
1874 -- Runtime Function: unsigned long long accum __fractudauta2 (unsigned
1875          long accum A)
1876 -- Runtime Function: signed char __fractudaqi (unsigned long accum A)
1877 -- Runtime Function: short __fractudahi (unsigned long accum A)
1878 -- Runtime Function: int __fractudasi (unsigned long accum A)
1879 -- Runtime Function: long __fractudadi (unsigned long accum A)
1880 -- Runtime Function: long long __fractudati (unsigned long accum A)
1881 -- Runtime Function: float __fractudasf (unsigned long accum A)
1882 -- Runtime Function: double __fractudadf (unsigned long accum A)
1883 -- Runtime Function: short fract __fractutaqq (unsigned long long accum
1884          A)
1885 -- Runtime Function: fract __fractutahq (unsigned long long accum A)
1886 -- Runtime Function: long fract __fractutasq (unsigned long long accum
1887          A)
1888 -- Runtime Function: long long fract __fractutadq (unsigned long long
1889          accum A)
1890 -- Runtime Function: short accum __fractutaha (unsigned long long accum
1891          A)
1892 -- Runtime Function: accum __fractutasa (unsigned long long accum A)
1893 -- Runtime Function: long accum __fractutada (unsigned long long accum
1894          A)
1895 -- Runtime Function: long long accum __fractutata (unsigned long long
1896          accum A)
1897 -- Runtime Function: unsigned short fract __fractutauqq (unsigned long
1898          long accum A)
1899 -- Runtime Function: unsigned fract __fractutauhq (unsigned long long
1900          accum A)
1901 -- Runtime Function: unsigned long fract __fractutausq (unsigned long
1902          long accum A)
1903 -- Runtime Function: unsigned long long fract __fractutaudq (unsigned
1904          long long accum A)
1905 -- Runtime Function: unsigned short accum __fractutauha2 (unsigned long
1906          long accum A)
1907 -- Runtime Function: unsigned accum __fractutausa2 (unsigned long long
1908          accum A)
1909 -- Runtime Function: unsigned long accum __fractutauda2 (unsigned long
1910          long accum A)
1911 -- Runtime Function: signed char __fractutaqi (unsigned long long accum
1912          A)
1913 -- Runtime Function: short __fractutahi (unsigned long long accum A)
1914 -- Runtime Function: int __fractutasi (unsigned long long accum A)
1915 -- Runtime Function: long __fractutadi (unsigned long long accum A)
1916 -- Runtime Function: long long __fractutati (unsigned long long accum
1917          A)
1918 -- Runtime Function: float __fractutasf (unsigned long long accum A)
1919 -- Runtime Function: double __fractutadf (unsigned long long accum A)
1920 -- Runtime Function: short fract __fractqiqq (signed char A)
1921 -- Runtime Function: fract __fractqihq (signed char A)
1922 -- Runtime Function: long fract __fractqisq (signed char A)
1923 -- Runtime Function: long long fract __fractqidq (signed char A)
1924 -- Runtime Function: short accum __fractqiha (signed char A)
1925 -- Runtime Function: accum __fractqisa (signed char A)
1926 -- Runtime Function: long accum __fractqida (signed char A)
1927 -- Runtime Function: long long accum __fractqita (signed char A)
1928 -- Runtime Function: unsigned short fract __fractqiuqq (signed char A)
1929 -- Runtime Function: unsigned fract __fractqiuhq (signed char A)
1930 -- Runtime Function: unsigned long fract __fractqiusq (signed char A)
1931 -- Runtime Function: unsigned long long fract __fractqiudq (signed char
1932          A)
1933 -- Runtime Function: unsigned short accum __fractqiuha (signed char A)
1934 -- Runtime Function: unsigned accum __fractqiusa (signed char A)
1935 -- Runtime Function: unsigned long accum __fractqiuda (signed char A)
1936 -- Runtime Function: unsigned long long accum __fractqiuta (signed char
1937          A)
1938 -- Runtime Function: short fract __fracthiqq (short A)
1939 -- Runtime Function: fract __fracthihq (short A)
1940 -- Runtime Function: long fract __fracthisq (short A)
1941 -- Runtime Function: long long fract __fracthidq (short A)
1942 -- Runtime Function: short accum __fracthiha (short A)
1943 -- Runtime Function: accum __fracthisa (short A)
1944 -- Runtime Function: long accum __fracthida (short A)
1945 -- Runtime Function: long long accum __fracthita (short A)
1946 -- Runtime Function: unsigned short fract __fracthiuqq (short A)
1947 -- Runtime Function: unsigned fract __fracthiuhq (short A)
1948 -- Runtime Function: unsigned long fract __fracthiusq (short A)
1949 -- Runtime Function: unsigned long long fract __fracthiudq (short A)
1950 -- Runtime Function: unsigned short accum __fracthiuha (short A)
1951 -- Runtime Function: unsigned accum __fracthiusa (short A)
1952 -- Runtime Function: unsigned long accum __fracthiuda (short A)
1953 -- Runtime Function: unsigned long long accum __fracthiuta (short A)
1954 -- Runtime Function: short fract __fractsiqq (int A)
1955 -- Runtime Function: fract __fractsihq (int A)
1956 -- Runtime Function: long fract __fractsisq (int A)
1957 -- Runtime Function: long long fract __fractsidq (int A)
1958 -- Runtime Function: short accum __fractsiha (int A)
1959 -- Runtime Function: accum __fractsisa (int A)
1960 -- Runtime Function: long accum __fractsida (int A)
1961 -- Runtime Function: long long accum __fractsita (int A)
1962 -- Runtime Function: unsigned short fract __fractsiuqq (int A)
1963 -- Runtime Function: unsigned fract __fractsiuhq (int A)
1964 -- Runtime Function: unsigned long fract __fractsiusq (int A)
1965 -- Runtime Function: unsigned long long fract __fractsiudq (int A)
1966 -- Runtime Function: unsigned short accum __fractsiuha (int A)
1967 -- Runtime Function: unsigned accum __fractsiusa (int A)
1968 -- Runtime Function: unsigned long accum __fractsiuda (int A)
1969 -- Runtime Function: unsigned long long accum __fractsiuta (int A)
1970 -- Runtime Function: short fract __fractdiqq (long A)
1971 -- Runtime Function: fract __fractdihq (long A)
1972 -- Runtime Function: long fract __fractdisq (long A)
1973 -- Runtime Function: long long fract __fractdidq (long A)
1974 -- Runtime Function: short accum __fractdiha (long A)
1975 -- Runtime Function: accum __fractdisa (long A)
1976 -- Runtime Function: long accum __fractdida (long A)
1977 -- Runtime Function: long long accum __fractdita (long A)
1978 -- Runtime Function: unsigned short fract __fractdiuqq (long A)
1979 -- Runtime Function: unsigned fract __fractdiuhq (long A)
1980 -- Runtime Function: unsigned long fract __fractdiusq (long A)
1981 -- Runtime Function: unsigned long long fract __fractdiudq (long A)
1982 -- Runtime Function: unsigned short accum __fractdiuha (long A)
1983 -- Runtime Function: unsigned accum __fractdiusa (long A)
1984 -- Runtime Function: unsigned long accum __fractdiuda (long A)
1985 -- Runtime Function: unsigned long long accum __fractdiuta (long A)
1986 -- Runtime Function: short fract __fracttiqq (long long A)
1987 -- Runtime Function: fract __fracttihq (long long A)
1988 -- Runtime Function: long fract __fracttisq (long long A)
1989 -- Runtime Function: long long fract __fracttidq (long long A)
1990 -- Runtime Function: short accum __fracttiha (long long A)
1991 -- Runtime Function: accum __fracttisa (long long A)
1992 -- Runtime Function: long accum __fracttida (long long A)
1993 -- Runtime Function: long long accum __fracttita (long long A)
1994 -- Runtime Function: unsigned short fract __fracttiuqq (long long A)
1995 -- Runtime Function: unsigned fract __fracttiuhq (long long A)
1996 -- Runtime Function: unsigned long fract __fracttiusq (long long A)
1997 -- Runtime Function: unsigned long long fract __fracttiudq (long long
1998          A)
1999 -- Runtime Function: unsigned short accum __fracttiuha (long long A)
2000 -- Runtime Function: unsigned accum __fracttiusa (long long A)
2001 -- Runtime Function: unsigned long accum __fracttiuda (long long A)
2002 -- Runtime Function: unsigned long long accum __fracttiuta (long long
2003          A)
2004 -- Runtime Function: short fract __fractsfqq (float A)
2005 -- Runtime Function: fract __fractsfhq (float A)
2006 -- Runtime Function: long fract __fractsfsq (float A)
2007 -- Runtime Function: long long fract __fractsfdq (float A)
2008 -- Runtime Function: short accum __fractsfha (float A)
2009 -- Runtime Function: accum __fractsfsa (float A)
2010 -- Runtime Function: long accum __fractsfda (float A)
2011 -- Runtime Function: long long accum __fractsfta (float A)
2012 -- Runtime Function: unsigned short fract __fractsfuqq (float A)
2013 -- Runtime Function: unsigned fract __fractsfuhq (float A)
2014 -- Runtime Function: unsigned long fract __fractsfusq (float A)
2015 -- Runtime Function: unsigned long long fract __fractsfudq (float A)
2016 -- Runtime Function: unsigned short accum __fractsfuha (float A)
2017 -- Runtime Function: unsigned accum __fractsfusa (float A)
2018 -- Runtime Function: unsigned long accum __fractsfuda (float A)
2019 -- Runtime Function: unsigned long long accum __fractsfuta (float A)
2020 -- Runtime Function: short fract __fractdfqq (double A)
2021 -- Runtime Function: fract __fractdfhq (double A)
2022 -- Runtime Function: long fract __fractdfsq (double A)
2023 -- Runtime Function: long long fract __fractdfdq (double A)
2024 -- Runtime Function: short accum __fractdfha (double A)
2025 -- Runtime Function: accum __fractdfsa (double A)
2026 -- Runtime Function: long accum __fractdfda (double A)
2027 -- Runtime Function: long long accum __fractdfta (double A)
2028 -- Runtime Function: unsigned short fract __fractdfuqq (double A)
2029 -- Runtime Function: unsigned fract __fractdfuhq (double A)
2030 -- Runtime Function: unsigned long fract __fractdfusq (double A)
2031 -- Runtime Function: unsigned long long fract __fractdfudq (double A)
2032 -- Runtime Function: unsigned short accum __fractdfuha (double A)
2033 -- Runtime Function: unsigned accum __fractdfusa (double A)
2034 -- Runtime Function: unsigned long accum __fractdfuda (double A)
2035 -- Runtime Function: unsigned long long accum __fractdfuta (double A)
2036     These functions convert from fractional and signed non-fractionals
2037     to fractionals and signed non-fractionals, without saturation.
2038
2039 -- Runtime Function: fract __satfractqqhq2 (short fract A)
2040 -- Runtime Function: long fract __satfractqqsq2 (short fract A)
2041 -- Runtime Function: long long fract __satfractqqdq2 (short fract A)
2042 -- Runtime Function: short accum __satfractqqha (short fract A)
2043 -- Runtime Function: accum __satfractqqsa (short fract A)
2044 -- Runtime Function: long accum __satfractqqda (short fract A)
2045 -- Runtime Function: long long accum __satfractqqta (short fract A)
2046 -- Runtime Function: unsigned short fract __satfractqquqq (short fract
2047          A)
2048 -- Runtime Function: unsigned fract __satfractqquhq (short fract A)
2049 -- Runtime Function: unsigned long fract __satfractqqusq (short fract
2050          A)
2051 -- Runtime Function: unsigned long long fract __satfractqqudq (short
2052          fract A)
2053 -- Runtime Function: unsigned short accum __satfractqquha (short fract
2054          A)
2055 -- Runtime Function: unsigned accum __satfractqqusa (short fract A)
2056 -- Runtime Function: unsigned long accum __satfractqquda (short fract
2057          A)
2058 -- Runtime Function: unsigned long long accum __satfractqquta (short
2059          fract A)
2060 -- Runtime Function: short fract __satfracthqqq2 (fract A)
2061 -- Runtime Function: long fract __satfracthqsq2 (fract A)
2062 -- Runtime Function: long long fract __satfracthqdq2 (fract A)
2063 -- Runtime Function: short accum __satfracthqha (fract A)
2064 -- Runtime Function: accum __satfracthqsa (fract A)
2065 -- Runtime Function: long accum __satfracthqda (fract A)
2066 -- Runtime Function: long long accum __satfracthqta (fract A)
2067 -- Runtime Function: unsigned short fract __satfracthquqq (fract A)
2068 -- Runtime Function: unsigned fract __satfracthquhq (fract A)
2069 -- Runtime Function: unsigned long fract __satfracthqusq (fract A)
2070 -- Runtime Function: unsigned long long fract __satfracthqudq (fract A)
2071 -- Runtime Function: unsigned short accum __satfracthquha (fract A)
2072 -- Runtime Function: unsigned accum __satfracthqusa (fract A)
2073 -- Runtime Function: unsigned long accum __satfracthquda (fract A)
2074 -- Runtime Function: unsigned long long accum __satfracthquta (fract A)
2075 -- Runtime Function: short fract __satfractsqqq2 (long fract A)
2076 -- Runtime Function: fract __satfractsqhq2 (long fract A)
2077 -- Runtime Function: long long fract __satfractsqdq2 (long fract A)
2078 -- Runtime Function: short accum __satfractsqha (long fract A)
2079 -- Runtime Function: accum __satfractsqsa (long fract A)
2080 -- Runtime Function: long accum __satfractsqda (long fract A)
2081 -- Runtime Function: long long accum __satfractsqta (long fract A)
2082 -- Runtime Function: unsigned short fract __satfractsquqq (long fract
2083          A)
2084 -- Runtime Function: unsigned fract __satfractsquhq (long fract A)
2085 -- Runtime Function: unsigned long fract __satfractsqusq (long fract A)
2086 -- Runtime Function: unsigned long long fract __satfractsqudq (long
2087          fract A)
2088 -- Runtime Function: unsigned short accum __satfractsquha (long fract
2089          A)
2090 -- Runtime Function: unsigned accum __satfractsqusa (long fract A)
2091 -- Runtime Function: unsigned long accum __satfractsquda (long fract A)
2092 -- Runtime Function: unsigned long long accum __satfractsquta (long
2093          fract A)
2094 -- Runtime Function: short fract __satfractdqqq2 (long long fract A)
2095 -- Runtime Function: fract __satfractdqhq2 (long long fract A)
2096 -- Runtime Function: long fract __satfractdqsq2 (long long fract A)
2097 -- Runtime Function: short accum __satfractdqha (long long fract A)
2098 -- Runtime Function: accum __satfractdqsa (long long fract A)
2099 -- Runtime Function: long accum __satfractdqda (long long fract A)
2100 -- Runtime Function: long long accum __satfractdqta (long long fract A)
2101 -- Runtime Function: unsigned short fract __satfractdquqq (long long
2102          fract A)
2103 -- Runtime Function: unsigned fract __satfractdquhq (long long fract A)
2104 -- Runtime Function: unsigned long fract __satfractdqusq (long long
2105          fract A)
2106 -- Runtime Function: unsigned long long fract __satfractdqudq (long
2107          long fract A)
2108 -- Runtime Function: unsigned short accum __satfractdquha (long long
2109          fract A)
2110 -- Runtime Function: unsigned accum __satfractdqusa (long long fract A)
2111 -- Runtime Function: unsigned long accum __satfractdquda (long long
2112          fract A)
2113 -- Runtime Function: unsigned long long accum __satfractdquta (long
2114          long fract A)
2115 -- Runtime Function: short fract __satfracthaqq (short accum A)
2116 -- Runtime Function: fract __satfracthahq (short accum A)
2117 -- Runtime Function: long fract __satfracthasq (short accum A)
2118 -- Runtime Function: long long fract __satfracthadq (short accum A)
2119 -- Runtime Function: accum __satfracthasa2 (short accum A)
2120 -- Runtime Function: long accum __satfracthada2 (short accum A)
2121 -- Runtime Function: long long accum __satfracthata2 (short accum A)
2122 -- Runtime Function: unsigned short fract __satfracthauqq (short accum
2123          A)
2124 -- Runtime Function: unsigned fract __satfracthauhq (short accum A)
2125 -- Runtime Function: unsigned long fract __satfracthausq (short accum
2126          A)
2127 -- Runtime Function: unsigned long long fract __satfracthaudq (short
2128          accum A)
2129 -- Runtime Function: unsigned short accum __satfracthauha (short accum
2130          A)
2131 -- Runtime Function: unsigned accum __satfracthausa (short accum A)
2132 -- Runtime Function: unsigned long accum __satfracthauda (short accum
2133          A)
2134 -- Runtime Function: unsigned long long accum __satfracthauta (short
2135          accum A)
2136 -- Runtime Function: short fract __satfractsaqq (accum A)
2137 -- Runtime Function: fract __satfractsahq (accum A)
2138 -- Runtime Function: long fract __satfractsasq (accum A)
2139 -- Runtime Function: long long fract __satfractsadq (accum A)
2140 -- Runtime Function: short accum __satfractsaha2 (accum A)
2141 -- Runtime Function: long accum __satfractsada2 (accum A)
2142 -- Runtime Function: long long accum __satfractsata2 (accum A)
2143 -- Runtime Function: unsigned short fract __satfractsauqq (accum A)
2144 -- Runtime Function: unsigned fract __satfractsauhq (accum A)
2145 -- Runtime Function: unsigned long fract __satfractsausq (accum A)
2146 -- Runtime Function: unsigned long long fract __satfractsaudq (accum A)
2147 -- Runtime Function: unsigned short accum __satfractsauha (accum A)
2148 -- Runtime Function: unsigned accum __satfractsausa (accum A)
2149 -- Runtime Function: unsigned long accum __satfractsauda (accum A)
2150 -- Runtime Function: unsigned long long accum __satfractsauta (accum A)
2151 -- Runtime Function: short fract __satfractdaqq (long accum A)
2152 -- Runtime Function: fract __satfractdahq (long accum A)
2153 -- Runtime Function: long fract __satfractdasq (long accum A)
2154 -- Runtime Function: long long fract __satfractdadq (long accum A)
2155 -- Runtime Function: short accum __satfractdaha2 (long accum A)
2156 -- Runtime Function: accum __satfractdasa2 (long accum A)
2157 -- Runtime Function: long long accum __satfractdata2 (long accum A)
2158 -- Runtime Function: unsigned short fract __satfractdauqq (long accum
2159          A)
2160 -- Runtime Function: unsigned fract __satfractdauhq (long accum A)
2161 -- Runtime Function: unsigned long fract __satfractdausq (long accum A)
2162 -- Runtime Function: unsigned long long fract __satfractdaudq (long
2163          accum A)
2164 -- Runtime Function: unsigned short accum __satfractdauha (long accum
2165          A)
2166 -- Runtime Function: unsigned accum __satfractdausa (long accum A)
2167 -- Runtime Function: unsigned long accum __satfractdauda (long accum A)
2168 -- Runtime Function: unsigned long long accum __satfractdauta (long
2169          accum A)
2170 -- Runtime Function: short fract __satfracttaqq (long long accum A)
2171 -- Runtime Function: fract __satfracttahq (long long accum A)
2172 -- Runtime Function: long fract __satfracttasq (long long accum A)
2173 -- Runtime Function: long long fract __satfracttadq (long long accum A)
2174 -- Runtime Function: short accum __satfracttaha2 (long long accum A)
2175 -- Runtime Function: accum __satfracttasa2 (long long accum A)
2176 -- Runtime Function: long accum __satfracttada2 (long long accum A)
2177 -- Runtime Function: unsigned short fract __satfracttauqq (long long
2178          accum A)
2179 -- Runtime Function: unsigned fract __satfracttauhq (long long accum A)
2180 -- Runtime Function: unsigned long fract __satfracttausq (long long
2181          accum A)
2182 -- Runtime Function: unsigned long long fract __satfracttaudq (long
2183          long accum A)
2184 -- Runtime Function: unsigned short accum __satfracttauha (long long
2185          accum A)
2186 -- Runtime Function: unsigned accum __satfracttausa (long long accum A)
2187 -- Runtime Function: unsigned long accum __satfracttauda (long long
2188          accum A)
2189 -- Runtime Function: unsigned long long accum __satfracttauta (long
2190          long accum A)
2191 -- Runtime Function: short fract __satfractuqqqq (unsigned short fract
2192          A)
2193 -- Runtime Function: fract __satfractuqqhq (unsigned short fract A)
2194 -- Runtime Function: long fract __satfractuqqsq (unsigned short fract
2195          A)
2196 -- Runtime Function: long long fract __satfractuqqdq (unsigned short
2197          fract A)
2198 -- Runtime Function: short accum __satfractuqqha (unsigned short fract
2199          A)
2200 -- Runtime Function: accum __satfractuqqsa (unsigned short fract A)
2201 -- Runtime Function: long accum __satfractuqqda (unsigned short fract
2202          A)
2203 -- Runtime Function: long long accum __satfractuqqta (unsigned short
2204          fract A)
2205 -- Runtime Function: unsigned fract __satfractuqquhq2 (unsigned short
2206          fract A)
2207 -- Runtime Function: unsigned long fract __satfractuqqusq2 (unsigned
2208          short fract A)
2209 -- Runtime Function: unsigned long long fract __satfractuqqudq2
2210          (unsigned short fract A)
2211 -- Runtime Function: unsigned short accum __satfractuqquha (unsigned
2212          short fract A)
2213 -- Runtime Function: unsigned accum __satfractuqqusa (unsigned short
2214          fract A)
2215 -- Runtime Function: unsigned long accum __satfractuqquda (unsigned
2216          short fract A)
2217 -- Runtime Function: unsigned long long accum __satfractuqquta
2218          (unsigned short fract A)
2219 -- Runtime Function: short fract __satfractuhqqq (unsigned fract A)
2220 -- Runtime Function: fract __satfractuhqhq (unsigned fract A)
2221 -- Runtime Function: long fract __satfractuhqsq (unsigned fract A)
2222 -- Runtime Function: long long fract __satfractuhqdq (unsigned fract A)
2223 -- Runtime Function: short accum __satfractuhqha (unsigned fract A)
2224 -- Runtime Function: accum __satfractuhqsa (unsigned fract A)
2225 -- Runtime Function: long accum __satfractuhqda (unsigned fract A)
2226 -- Runtime Function: long long accum __satfractuhqta (unsigned fract A)
2227 -- Runtime Function: unsigned short fract __satfractuhquqq2 (unsigned
2228          fract A)
2229 -- Runtime Function: unsigned long fract __satfractuhqusq2 (unsigned
2230          fract A)
2231 -- Runtime Function: unsigned long long fract __satfractuhqudq2
2232          (unsigned fract A)
2233 -- Runtime Function: unsigned short accum __satfractuhquha (unsigned
2234          fract A)
2235 -- Runtime Function: unsigned accum __satfractuhqusa (unsigned fract A)
2236 -- Runtime Function: unsigned long accum __satfractuhquda (unsigned
2237          fract A)
2238 -- Runtime Function: unsigned long long accum __satfractuhquta
2239          (unsigned fract A)
2240 -- Runtime Function: short fract __satfractusqqq (unsigned long fract
2241          A)
2242 -- Runtime Function: fract __satfractusqhq (unsigned long fract A)
2243 -- Runtime Function: long fract __satfractusqsq (unsigned long fract A)
2244 -- Runtime Function: long long fract __satfractusqdq (unsigned long
2245          fract A)
2246 -- Runtime Function: short accum __satfractusqha (unsigned long fract
2247          A)
2248 -- Runtime Function: accum __satfractusqsa (unsigned long fract A)
2249 -- Runtime Function: long accum __satfractusqda (unsigned long fract A)
2250 -- Runtime Function: long long accum __satfractusqta (unsigned long
2251          fract A)
2252 -- Runtime Function: unsigned short fract __satfractusquqq2 (unsigned
2253          long fract A)
2254 -- Runtime Function: unsigned fract __satfractusquhq2 (unsigned long
2255          fract A)
2256 -- Runtime Function: unsigned long long fract __satfractusqudq2
2257          (unsigned long fract A)
2258 -- Runtime Function: unsigned short accum __satfractusquha (unsigned
2259          long fract A)
2260 -- Runtime Function: unsigned accum __satfractusqusa (unsigned long
2261          fract A)
2262 -- Runtime Function: unsigned long accum __satfractusquda (unsigned
2263          long fract A)
2264 -- Runtime Function: unsigned long long accum __satfractusquta
2265          (unsigned long fract A)
2266 -- Runtime Function: short fract __satfractudqqq (unsigned long long
2267          fract A)
2268 -- Runtime Function: fract __satfractudqhq (unsigned long long fract A)
2269 -- Runtime Function: long fract __satfractudqsq (unsigned long long
2270          fract A)
2271 -- Runtime Function: long long fract __satfractudqdq (unsigned long
2272          long fract A)
2273 -- Runtime Function: short accum __satfractudqha (unsigned long long
2274          fract A)
2275 -- Runtime Function: accum __satfractudqsa (unsigned long long fract A)
2276 -- Runtime Function: long accum __satfractudqda (unsigned long long
2277          fract A)
2278 -- Runtime Function: long long accum __satfractudqta (unsigned long
2279          long fract A)
2280 -- Runtime Function: unsigned short fract __satfractudquqq2 (unsigned
2281          long long fract A)
2282 -- Runtime Function: unsigned fract __satfractudquhq2 (unsigned long
2283          long fract A)
2284 -- Runtime Function: unsigned long fract __satfractudqusq2 (unsigned
2285          long long fract A)
2286 -- Runtime Function: unsigned short accum __satfractudquha (unsigned
2287          long long fract A)
2288 -- Runtime Function: unsigned accum __satfractudqusa (unsigned long
2289          long fract A)
2290 -- Runtime Function: unsigned long accum __satfractudquda (unsigned
2291          long long fract A)
2292 -- Runtime Function: unsigned long long accum __satfractudquta
2293          (unsigned long long fract A)
2294 -- Runtime Function: short fract __satfractuhaqq (unsigned short accum
2295          A)
2296 -- Runtime Function: fract __satfractuhahq (unsigned short accum A)
2297 -- Runtime Function: long fract __satfractuhasq (unsigned short accum
2298          A)
2299 -- Runtime Function: long long fract __satfractuhadq (unsigned short
2300          accum A)
2301 -- Runtime Function: short accum __satfractuhaha (unsigned short accum
2302          A)
2303 -- Runtime Function: accum __satfractuhasa (unsigned short accum A)
2304 -- Runtime Function: long accum __satfractuhada (unsigned short accum
2305          A)
2306 -- Runtime Function: long long accum __satfractuhata (unsigned short
2307          accum A)
2308 -- Runtime Function: unsigned short fract __satfractuhauqq (unsigned
2309          short accum A)
2310 -- Runtime Function: unsigned fract __satfractuhauhq (unsigned short
2311          accum A)
2312 -- Runtime Function: unsigned long fract __satfractuhausq (unsigned
2313          short accum A)
2314 -- Runtime Function: unsigned long long fract __satfractuhaudq
2315          (unsigned short accum A)
2316 -- Runtime Function: unsigned accum __satfractuhausa2 (unsigned short
2317          accum A)
2318 -- Runtime Function: unsigned long accum __satfractuhauda2 (unsigned
2319          short accum A)
2320 -- Runtime Function: unsigned long long accum __satfractuhauta2
2321          (unsigned short accum A)
2322 -- Runtime Function: short fract __satfractusaqq (unsigned accum A)
2323 -- Runtime Function: fract __satfractusahq (unsigned accum A)
2324 -- Runtime Function: long fract __satfractusasq (unsigned accum A)
2325 -- Runtime Function: long long fract __satfractusadq (unsigned accum A)
2326 -- Runtime Function: short accum __satfractusaha (unsigned accum A)
2327 -- Runtime Function: accum __satfractusasa (unsigned accum A)
2328 -- Runtime Function: long accum __satfractusada (unsigned accum A)
2329 -- Runtime Function: long long accum __satfractusata (unsigned accum A)
2330 -- Runtime Function: unsigned short fract __satfractusauqq (unsigned
2331          accum A)
2332 -- Runtime Function: unsigned fract __satfractusauhq (unsigned accum A)
2333 -- Runtime Function: unsigned long fract __satfractusausq (unsigned
2334          accum A)
2335 -- Runtime Function: unsigned long long fract __satfractusaudq
2336          (unsigned accum A)
2337 -- Runtime Function: unsigned short accum __satfractusauha2 (unsigned
2338          accum A)
2339 -- Runtime Function: unsigned long accum __satfractusauda2 (unsigned
2340          accum A)
2341 -- Runtime Function: unsigned long long accum __satfractusauta2
2342          (unsigned accum A)
2343 -- Runtime Function: short fract __satfractudaqq (unsigned long accum
2344          A)
2345 -- Runtime Function: fract __satfractudahq (unsigned long accum A)
2346 -- Runtime Function: long fract __satfractudasq (unsigned long accum A)
2347 -- Runtime Function: long long fract __satfractudadq (unsigned long
2348          accum A)
2349 -- Runtime Function: short accum __satfractudaha (unsigned long accum
2350          A)
2351 -- Runtime Function: accum __satfractudasa (unsigned long accum A)
2352 -- Runtime Function: long accum __satfractudada (unsigned long accum A)
2353 -- Runtime Function: long long accum __satfractudata (unsigned long
2354          accum A)
2355 -- Runtime Function: unsigned short fract __satfractudauqq (unsigned
2356          long accum A)
2357 -- Runtime Function: unsigned fract __satfractudauhq (unsigned long
2358          accum A)
2359 -- Runtime Function: unsigned long fract __satfractudausq (unsigned
2360          long accum A)
2361 -- Runtime Function: unsigned long long fract __satfractudaudq
2362          (unsigned long accum A)
2363 -- Runtime Function: unsigned short accum __satfractudauha2 (unsigned
2364          long accum A)
2365 -- Runtime Function: unsigned accum __satfractudausa2 (unsigned long
2366          accum A)
2367 -- Runtime Function: unsigned long long accum __satfractudauta2
2368          (unsigned long accum A)
2369 -- Runtime Function: short fract __satfractutaqq (unsigned long long
2370          accum A)
2371 -- Runtime Function: fract __satfractutahq (unsigned long long accum A)
2372 -- Runtime Function: long fract __satfractutasq (unsigned long long
2373          accum A)
2374 -- Runtime Function: long long fract __satfractutadq (unsigned long
2375          long accum A)
2376 -- Runtime Function: short accum __satfractutaha (unsigned long long
2377          accum A)
2378 -- Runtime Function: accum __satfractutasa (unsigned long long accum A)
2379 -- Runtime Function: long accum __satfractutada (unsigned long long
2380          accum A)
2381 -- Runtime Function: long long accum __satfractutata (unsigned long
2382          long accum A)
2383 -- Runtime Function: unsigned short fract __satfractutauqq (unsigned
2384          long long accum A)
2385 -- Runtime Function: unsigned fract __satfractutauhq (unsigned long
2386          long accum A)
2387 -- Runtime Function: unsigned long fract __satfractutausq (unsigned
2388          long long accum A)
2389 -- Runtime Function: unsigned long long fract __satfractutaudq
2390          (unsigned long long accum A)
2391 -- Runtime Function: unsigned short accum __satfractutauha2 (unsigned
2392          long long accum A)
2393 -- Runtime Function: unsigned accum __satfractutausa2 (unsigned long
2394          long accum A)
2395 -- Runtime Function: unsigned long accum __satfractutauda2 (unsigned
2396          long long accum A)
2397 -- Runtime Function: short fract __satfractqiqq (signed char A)
2398 -- Runtime Function: fract __satfractqihq (signed char A)
2399 -- Runtime Function: long fract __satfractqisq (signed char A)
2400 -- Runtime Function: long long fract __satfractqidq (signed char A)
2401 -- Runtime Function: short accum __satfractqiha (signed char A)
2402 -- Runtime Function: accum __satfractqisa (signed char A)
2403 -- Runtime Function: long accum __satfractqida (signed char A)
2404 -- Runtime Function: long long accum __satfractqita (signed char A)
2405 -- Runtime Function: unsigned short fract __satfractqiuqq (signed char
2406          A)
2407 -- Runtime Function: unsigned fract __satfractqiuhq (signed char A)
2408 -- Runtime Function: unsigned long fract __satfractqiusq (signed char
2409          A)
2410 -- Runtime Function: unsigned long long fract __satfractqiudq (signed
2411          char A)
2412 -- Runtime Function: unsigned short accum __satfractqiuha (signed char
2413          A)
2414 -- Runtime Function: unsigned accum __satfractqiusa (signed char A)
2415 -- Runtime Function: unsigned long accum __satfractqiuda (signed char
2416          A)
2417 -- Runtime Function: unsigned long long accum __satfractqiuta (signed
2418          char A)
2419 -- Runtime Function: short fract __satfracthiqq (short A)
2420 -- Runtime Function: fract __satfracthihq (short A)
2421 -- Runtime Function: long fract __satfracthisq (short A)
2422 -- Runtime Function: long long fract __satfracthidq (short A)
2423 -- Runtime Function: short accum __satfracthiha (short A)
2424 -- Runtime Function: accum __satfracthisa (short A)
2425 -- Runtime Function: long accum __satfracthida (short A)
2426 -- Runtime Function: long long accum __satfracthita (short A)
2427 -- Runtime Function: unsigned short fract __satfracthiuqq (short A)
2428 -- Runtime Function: unsigned fract __satfracthiuhq (short A)
2429 -- Runtime Function: unsigned long fract __satfracthiusq (short A)
2430 -- Runtime Function: unsigned long long fract __satfracthiudq (short A)
2431 -- Runtime Function: unsigned short accum __satfracthiuha (short A)
2432 -- Runtime Function: unsigned accum __satfracthiusa (short A)
2433 -- Runtime Function: unsigned long accum __satfracthiuda (short A)
2434 -- Runtime Function: unsigned long long accum __satfracthiuta (short A)
2435 -- Runtime Function: short fract __satfractsiqq (int A)
2436 -- Runtime Function: fract __satfractsihq (int A)
2437 -- Runtime Function: long fract __satfractsisq (int A)
2438 -- Runtime Function: long long fract __satfractsidq (int A)
2439 -- Runtime Function: short accum __satfractsiha (int A)
2440 -- Runtime Function: accum __satfractsisa (int A)
2441 -- Runtime Function: long accum __satfractsida (int A)
2442 -- Runtime Function: long long accum __satfractsita (int A)
2443 -- Runtime Function: unsigned short fract __satfractsiuqq (int A)
2444 -- Runtime Function: unsigned fract __satfractsiuhq (int A)
2445 -- Runtime Function: unsigned long fract __satfractsiusq (int A)
2446 -- Runtime Function: unsigned long long fract __satfractsiudq (int A)
2447 -- Runtime Function: unsigned short accum __satfractsiuha (int A)
2448 -- Runtime Function: unsigned accum __satfractsiusa (int A)
2449 -- Runtime Function: unsigned long accum __satfractsiuda (int A)
2450 -- Runtime Function: unsigned long long accum __satfractsiuta (int A)
2451 -- Runtime Function: short fract __satfractdiqq (long A)
2452 -- Runtime Function: fract __satfractdihq (long A)
2453 -- Runtime Function: long fract __satfractdisq (long A)
2454 -- Runtime Function: long long fract __satfractdidq (long A)
2455 -- Runtime Function: short accum __satfractdiha (long A)
2456 -- Runtime Function: accum __satfractdisa (long A)
2457 -- Runtime Function: long accum __satfractdida (long A)
2458 -- Runtime Function: long long accum __satfractdita (long A)
2459 -- Runtime Function: unsigned short fract __satfractdiuqq (long A)
2460 -- Runtime Function: unsigned fract __satfractdiuhq (long A)
2461 -- Runtime Function: unsigned long fract __satfractdiusq (long A)
2462 -- Runtime Function: unsigned long long fract __satfractdiudq (long A)
2463 -- Runtime Function: unsigned short accum __satfractdiuha (long A)
2464 -- Runtime Function: unsigned accum __satfractdiusa (long A)
2465 -- Runtime Function: unsigned long accum __satfractdiuda (long A)
2466 -- Runtime Function: unsigned long long accum __satfractdiuta (long A)
2467 -- Runtime Function: short fract __satfracttiqq (long long A)
2468 -- Runtime Function: fract __satfracttihq (long long A)
2469 -- Runtime Function: long fract __satfracttisq (long long A)
2470 -- Runtime Function: long long fract __satfracttidq (long long A)
2471 -- Runtime Function: short accum __satfracttiha (long long A)
2472 -- Runtime Function: accum __satfracttisa (long long A)
2473 -- Runtime Function: long accum __satfracttida (long long A)
2474 -- Runtime Function: long long accum __satfracttita (long long A)
2475 -- Runtime Function: unsigned short fract __satfracttiuqq (long long A)
2476 -- Runtime Function: unsigned fract __satfracttiuhq (long long A)
2477 -- Runtime Function: unsigned long fract __satfracttiusq (long long A)
2478 -- Runtime Function: unsigned long long fract __satfracttiudq (long
2479          long A)
2480 -- Runtime Function: unsigned short accum __satfracttiuha (long long A)
2481 -- Runtime Function: unsigned accum __satfracttiusa (long long A)
2482 -- Runtime Function: unsigned long accum __satfracttiuda (long long A)
2483 -- Runtime Function: unsigned long long accum __satfracttiuta (long
2484          long A)
2485 -- Runtime Function: short fract __satfractsfqq (float A)
2486 -- Runtime Function: fract __satfractsfhq (float A)
2487 -- Runtime Function: long fract __satfractsfsq (float A)
2488 -- Runtime Function: long long fract __satfractsfdq (float A)
2489 -- Runtime Function: short accum __satfractsfha (float A)
2490 -- Runtime Function: accum __satfractsfsa (float A)
2491 -- Runtime Function: long accum __satfractsfda (float A)
2492 -- Runtime Function: long long accum __satfractsfta (float A)
2493 -- Runtime Function: unsigned short fract __satfractsfuqq (float A)
2494 -- Runtime Function: unsigned fract __satfractsfuhq (float A)
2495 -- Runtime Function: unsigned long fract __satfractsfusq (float A)
2496 -- Runtime Function: unsigned long long fract __satfractsfudq (float A)
2497 -- Runtime Function: unsigned short accum __satfractsfuha (float A)
2498 -- Runtime Function: unsigned accum __satfractsfusa (float A)
2499 -- Runtime Function: unsigned long accum __satfractsfuda (float A)
2500 -- Runtime Function: unsigned long long accum __satfractsfuta (float A)
2501 -- Runtime Function: short fract __satfractdfqq (double A)
2502 -- Runtime Function: fract __satfractdfhq (double A)
2503 -- Runtime Function: long fract __satfractdfsq (double A)
2504 -- Runtime Function: long long fract __satfractdfdq (double A)
2505 -- Runtime Function: short accum __satfractdfha (double A)
2506 -- Runtime Function: accum __satfractdfsa (double A)
2507 -- Runtime Function: long accum __satfractdfda (double A)
2508 -- Runtime Function: long long accum __satfractdfta (double A)
2509 -- Runtime Function: unsigned short fract __satfractdfuqq (double A)
2510 -- Runtime Function: unsigned fract __satfractdfuhq (double A)
2511 -- Runtime Function: unsigned long fract __satfractdfusq (double A)
2512 -- Runtime Function: unsigned long long fract __satfractdfudq (double
2513          A)
2514 -- Runtime Function: unsigned short accum __satfractdfuha (double A)
2515 -- Runtime Function: unsigned accum __satfractdfusa (double A)
2516 -- Runtime Function: unsigned long accum __satfractdfuda (double A)
2517 -- Runtime Function: unsigned long long accum __satfractdfuta (double
2518          A)
2519     The functions convert from fractional and signed non-fractionals to
2520     fractionals, with saturation.
2521
2522 -- Runtime Function: unsigned char __fractunsqqqi (short fract A)
2523 -- Runtime Function: unsigned short __fractunsqqhi (short fract A)
2524 -- Runtime Function: unsigned int __fractunsqqsi (short fract A)
2525 -- Runtime Function: unsigned long __fractunsqqdi (short fract A)
2526 -- Runtime Function: unsigned long long __fractunsqqti (short fract A)
2527 -- Runtime Function: unsigned char __fractunshqqi (fract A)
2528 -- Runtime Function: unsigned short __fractunshqhi (fract A)
2529 -- Runtime Function: unsigned int __fractunshqsi (fract A)
2530 -- Runtime Function: unsigned long __fractunshqdi (fract A)
2531 -- Runtime Function: unsigned long long __fractunshqti (fract A)
2532 -- Runtime Function: unsigned char __fractunssqqi (long fract A)
2533 -- Runtime Function: unsigned short __fractunssqhi (long fract A)
2534 -- Runtime Function: unsigned int __fractunssqsi (long fract A)
2535 -- Runtime Function: unsigned long __fractunssqdi (long fract A)
2536 -- Runtime Function: unsigned long long __fractunssqti (long fract A)
2537 -- Runtime Function: unsigned char __fractunsdqqi (long long fract A)
2538 -- Runtime Function: unsigned short __fractunsdqhi (long long fract A)
2539 -- Runtime Function: unsigned int __fractunsdqsi (long long fract A)
2540 -- Runtime Function: unsigned long __fractunsdqdi (long long fract A)
2541 -- Runtime Function: unsigned long long __fractunsdqti (long long fract
2542          A)
2543 -- Runtime Function: unsigned char __fractunshaqi (short accum A)
2544 -- Runtime Function: unsigned short __fractunshahi (short accum A)
2545 -- Runtime Function: unsigned int __fractunshasi (short accum A)
2546 -- Runtime Function: unsigned long __fractunshadi (short accum A)
2547 -- Runtime Function: unsigned long long __fractunshati (short accum A)
2548 -- Runtime Function: unsigned char __fractunssaqi (accum A)
2549 -- Runtime Function: unsigned short __fractunssahi (accum A)
2550 -- Runtime Function: unsigned int __fractunssasi (accum A)
2551 -- Runtime Function: unsigned long __fractunssadi (accum A)
2552 -- Runtime Function: unsigned long long __fractunssati (accum A)
2553 -- Runtime Function: unsigned char __fractunsdaqi (long accum A)
2554 -- Runtime Function: unsigned short __fractunsdahi (long accum A)
2555 -- Runtime Function: unsigned int __fractunsdasi (long accum A)
2556 -- Runtime Function: unsigned long __fractunsdadi (long accum A)
2557 -- Runtime Function: unsigned long long __fractunsdati (long accum A)
2558 -- Runtime Function: unsigned char __fractunstaqi (long long accum A)
2559 -- Runtime Function: unsigned short __fractunstahi (long long accum A)
2560 -- Runtime Function: unsigned int __fractunstasi (long long accum A)
2561 -- Runtime Function: unsigned long __fractunstadi (long long accum A)
2562 -- Runtime Function: unsigned long long __fractunstati (long long accum
2563          A)
2564 -- Runtime Function: unsigned char __fractunsuqqqi (unsigned short
2565          fract A)
2566 -- Runtime Function: unsigned short __fractunsuqqhi (unsigned short
2567          fract A)
2568 -- Runtime Function: unsigned int __fractunsuqqsi (unsigned short fract
2569          A)
2570 -- Runtime Function: unsigned long __fractunsuqqdi (unsigned short
2571          fract A)
2572 -- Runtime Function: unsigned long long __fractunsuqqti (unsigned short
2573          fract A)
2574 -- Runtime Function: unsigned char __fractunsuhqqi (unsigned fract A)
2575 -- Runtime Function: unsigned short __fractunsuhqhi (unsigned fract A)
2576 -- Runtime Function: unsigned int __fractunsuhqsi (unsigned fract A)
2577 -- Runtime Function: unsigned long __fractunsuhqdi (unsigned fract A)
2578 -- Runtime Function: unsigned long long __fractunsuhqti (unsigned fract
2579          A)
2580 -- Runtime Function: unsigned char __fractunsusqqi (unsigned long fract
2581          A)
2582 -- Runtime Function: unsigned short __fractunsusqhi (unsigned long
2583          fract A)
2584 -- Runtime Function: unsigned int __fractunsusqsi (unsigned long fract
2585          A)
2586 -- Runtime Function: unsigned long __fractunsusqdi (unsigned long fract
2587          A)
2588 -- Runtime Function: unsigned long long __fractunsusqti (unsigned long
2589          fract A)
2590 -- Runtime Function: unsigned char __fractunsudqqi (unsigned long long
2591          fract A)
2592 -- Runtime Function: unsigned short __fractunsudqhi (unsigned long long
2593          fract A)
2594 -- Runtime Function: unsigned int __fractunsudqsi (unsigned long long
2595          fract A)
2596 -- Runtime Function: unsigned long __fractunsudqdi (unsigned long long
2597          fract A)
2598 -- Runtime Function: unsigned long long __fractunsudqti (unsigned long
2599          long fract A)
2600 -- Runtime Function: unsigned char __fractunsuhaqi (unsigned short
2601          accum A)
2602 -- Runtime Function: unsigned short __fractunsuhahi (unsigned short
2603          accum A)
2604 -- Runtime Function: unsigned int __fractunsuhasi (unsigned short accum
2605          A)
2606 -- Runtime Function: unsigned long __fractunsuhadi (unsigned short
2607          accum A)
2608 -- Runtime Function: unsigned long long __fractunsuhati (unsigned short
2609          accum A)
2610 -- Runtime Function: unsigned char __fractunsusaqi (unsigned accum A)
2611 -- Runtime Function: unsigned short __fractunsusahi (unsigned accum A)
2612 -- Runtime Function: unsigned int __fractunsusasi (unsigned accum A)
2613 -- Runtime Function: unsigned long __fractunsusadi (unsigned accum A)
2614 -- Runtime Function: unsigned long long __fractunsusati (unsigned accum
2615          A)
2616 -- Runtime Function: unsigned char __fractunsudaqi (unsigned long accum
2617          A)
2618 -- Runtime Function: unsigned short __fractunsudahi (unsigned long
2619          accum A)
2620 -- Runtime Function: unsigned int __fractunsudasi (unsigned long accum
2621          A)
2622 -- Runtime Function: unsigned long __fractunsudadi (unsigned long accum
2623          A)
2624 -- Runtime Function: unsigned long long __fractunsudati (unsigned long
2625          accum A)
2626 -- Runtime Function: unsigned char __fractunsutaqi (unsigned long long
2627          accum A)
2628 -- Runtime Function: unsigned short __fractunsutahi (unsigned long long
2629          accum A)
2630 -- Runtime Function: unsigned int __fractunsutasi (unsigned long long
2631          accum A)
2632 -- Runtime Function: unsigned long __fractunsutadi (unsigned long long
2633          accum A)
2634 -- Runtime Function: unsigned long long __fractunsutati (unsigned long
2635          long accum A)
2636 -- Runtime Function: short fract __fractunsqiqq (unsigned char A)
2637 -- Runtime Function: fract __fractunsqihq (unsigned char A)
2638 -- Runtime Function: long fract __fractunsqisq (unsigned char A)
2639 -- Runtime Function: long long fract __fractunsqidq (unsigned char A)
2640 -- Runtime Function: short accum __fractunsqiha (unsigned char A)
2641 -- Runtime Function: accum __fractunsqisa (unsigned char A)
2642 -- Runtime Function: long accum __fractunsqida (unsigned char A)
2643 -- Runtime Function: long long accum __fractunsqita (unsigned char A)
2644 -- Runtime Function: unsigned short fract __fractunsqiuqq (unsigned
2645          char A)
2646 -- Runtime Function: unsigned fract __fractunsqiuhq (unsigned char A)
2647 -- Runtime Function: unsigned long fract __fractunsqiusq (unsigned char
2648          A)
2649 -- Runtime Function: unsigned long long fract __fractunsqiudq (unsigned
2650          char A)
2651 -- Runtime Function: unsigned short accum __fractunsqiuha (unsigned
2652          char A)
2653 -- Runtime Function: unsigned accum __fractunsqiusa (unsigned char A)
2654 -- Runtime Function: unsigned long accum __fractunsqiuda (unsigned char
2655          A)
2656 -- Runtime Function: unsigned long long accum __fractunsqiuta (unsigned
2657          char A)
2658 -- Runtime Function: short fract __fractunshiqq (unsigned short A)
2659 -- Runtime Function: fract __fractunshihq (unsigned short A)
2660 -- Runtime Function: long fract __fractunshisq (unsigned short A)
2661 -- Runtime Function: long long fract __fractunshidq (unsigned short A)
2662 -- Runtime Function: short accum __fractunshiha (unsigned short A)
2663 -- Runtime Function: accum __fractunshisa (unsigned short A)
2664 -- Runtime Function: long accum __fractunshida (unsigned short A)
2665 -- Runtime Function: long long accum __fractunshita (unsigned short A)
2666 -- Runtime Function: unsigned short fract __fractunshiuqq (unsigned
2667          short A)
2668 -- Runtime Function: unsigned fract __fractunshiuhq (unsigned short A)
2669 -- Runtime Function: unsigned long fract __fractunshiusq (unsigned
2670          short A)
2671 -- Runtime Function: unsigned long long fract __fractunshiudq (unsigned
2672          short A)
2673 -- Runtime Function: unsigned short accum __fractunshiuha (unsigned
2674          short A)
2675 -- Runtime Function: unsigned accum __fractunshiusa (unsigned short A)
2676 -- Runtime Function: unsigned long accum __fractunshiuda (unsigned
2677          short A)
2678 -- Runtime Function: unsigned long long accum __fractunshiuta (unsigned
2679          short A)
2680 -- Runtime Function: short fract __fractunssiqq (unsigned int A)
2681 -- Runtime Function: fract __fractunssihq (unsigned int A)
2682 -- Runtime Function: long fract __fractunssisq (unsigned int A)
2683 -- Runtime Function: long long fract __fractunssidq (unsigned int A)
2684 -- Runtime Function: short accum __fractunssiha (unsigned int A)
2685 -- Runtime Function: accum __fractunssisa (unsigned int A)
2686 -- Runtime Function: long accum __fractunssida (unsigned int A)
2687 -- Runtime Function: long long accum __fractunssita (unsigned int A)
2688 -- Runtime Function: unsigned short fract __fractunssiuqq (unsigned int
2689          A)
2690 -- Runtime Function: unsigned fract __fractunssiuhq (unsigned int A)
2691 -- Runtime Function: unsigned long fract __fractunssiusq (unsigned int
2692          A)
2693 -- Runtime Function: unsigned long long fract __fractunssiudq (unsigned
2694          int A)
2695 -- Runtime Function: unsigned short accum __fractunssiuha (unsigned int
2696          A)
2697 -- Runtime Function: unsigned accum __fractunssiusa (unsigned int A)
2698 -- Runtime Function: unsigned long accum __fractunssiuda (unsigned int
2699          A)
2700 -- Runtime Function: unsigned long long accum __fractunssiuta (unsigned
2701          int A)
2702 -- Runtime Function: short fract __fractunsdiqq (unsigned long A)
2703 -- Runtime Function: fract __fractunsdihq (unsigned long A)
2704 -- Runtime Function: long fract __fractunsdisq (unsigned long A)
2705 -- Runtime Function: long long fract __fractunsdidq (unsigned long A)
2706 -- Runtime Function: short accum __fractunsdiha (unsigned long A)
2707 -- Runtime Function: accum __fractunsdisa (unsigned long A)
2708 -- Runtime Function: long accum __fractunsdida (unsigned long A)
2709 -- Runtime Function: long long accum __fractunsdita (unsigned long A)
2710 -- Runtime Function: unsigned short fract __fractunsdiuqq (unsigned
2711          long A)
2712 -- Runtime Function: unsigned fract __fractunsdiuhq (unsigned long A)
2713 -- Runtime Function: unsigned long fract __fractunsdiusq (unsigned long
2714          A)
2715 -- Runtime Function: unsigned long long fract __fractunsdiudq (unsigned
2716          long A)
2717 -- Runtime Function: unsigned short accum __fractunsdiuha (unsigned
2718          long A)
2719 -- Runtime Function: unsigned accum __fractunsdiusa (unsigned long A)
2720 -- Runtime Function: unsigned long accum __fractunsdiuda (unsigned long
2721          A)
2722 -- Runtime Function: unsigned long long accum __fractunsdiuta (unsigned
2723          long A)
2724 -- Runtime Function: short fract __fractunstiqq (unsigned long long A)
2725 -- Runtime Function: fract __fractunstihq (unsigned long long A)
2726 -- Runtime Function: long fract __fractunstisq (unsigned long long A)
2727 -- Runtime Function: long long fract __fractunstidq (unsigned long long
2728          A)
2729 -- Runtime Function: short accum __fractunstiha (unsigned long long A)
2730 -- Runtime Function: accum __fractunstisa (unsigned long long A)
2731 -- Runtime Function: long accum __fractunstida (unsigned long long A)
2732 -- Runtime Function: long long accum __fractunstita (unsigned long long
2733          A)
2734 -- Runtime Function: unsigned short fract __fractunstiuqq (unsigned
2735          long long A)
2736 -- Runtime Function: unsigned fract __fractunstiuhq (unsigned long long
2737          A)
2738 -- Runtime Function: unsigned long fract __fractunstiusq (unsigned long
2739          long A)
2740 -- Runtime Function: unsigned long long fract __fractunstiudq (unsigned
2741          long long A)
2742 -- Runtime Function: unsigned short accum __fractunstiuha (unsigned
2743          long long A)
2744 -- Runtime Function: unsigned accum __fractunstiusa (unsigned long long
2745          A)
2746 -- Runtime Function: unsigned long accum __fractunstiuda (unsigned long
2747          long A)
2748 -- Runtime Function: unsigned long long accum __fractunstiuta (unsigned
2749          long long A)
2750     These functions convert from fractionals to unsigned
2751     non-fractionals; and from unsigned non-fractionals to fractionals,
2752     without saturation.
2753
2754 -- Runtime Function: short fract __satfractunsqiqq (unsigned char A)
2755 -- Runtime Function: fract __satfractunsqihq (unsigned char A)
2756 -- Runtime Function: long fract __satfractunsqisq (unsigned char A)
2757 -- Runtime Function: long long fract __satfractunsqidq (unsigned char
2758          A)
2759 -- Runtime Function: short accum __satfractunsqiha (unsigned char A)
2760 -- Runtime Function: accum __satfractunsqisa (unsigned char A)
2761 -- Runtime Function: long accum __satfractunsqida (unsigned char A)
2762 -- Runtime Function: long long accum __satfractunsqita (unsigned char
2763          A)
2764 -- Runtime Function: unsigned short fract __satfractunsqiuqq (unsigned
2765          char A)
2766 -- Runtime Function: unsigned fract __satfractunsqiuhq (unsigned char
2767          A)
2768 -- Runtime Function: unsigned long fract __satfractunsqiusq (unsigned
2769          char A)
2770 -- Runtime Function: unsigned long long fract __satfractunsqiudq
2771          (unsigned char A)
2772 -- Runtime Function: unsigned short accum __satfractunsqiuha (unsigned
2773          char A)
2774 -- Runtime Function: unsigned accum __satfractunsqiusa (unsigned char
2775          A)
2776 -- Runtime Function: unsigned long accum __satfractunsqiuda (unsigned
2777          char A)
2778 -- Runtime Function: unsigned long long accum __satfractunsqiuta
2779          (unsigned char A)
2780 -- Runtime Function: short fract __satfractunshiqq (unsigned short A)
2781 -- Runtime Function: fract __satfractunshihq (unsigned short A)
2782 -- Runtime Function: long fract __satfractunshisq (unsigned short A)
2783 -- Runtime Function: long long fract __satfractunshidq (unsigned short
2784          A)
2785 -- Runtime Function: short accum __satfractunshiha (unsigned short A)
2786 -- Runtime Function: accum __satfractunshisa (unsigned short A)
2787 -- Runtime Function: long accum __satfractunshida (unsigned short A)
2788 -- Runtime Function: long long accum __satfractunshita (unsigned short
2789          A)
2790 -- Runtime Function: unsigned short fract __satfractunshiuqq (unsigned
2791          short A)
2792 -- Runtime Function: unsigned fract __satfractunshiuhq (unsigned short
2793          A)
2794 -- Runtime Function: unsigned long fract __satfractunshiusq (unsigned
2795          short A)
2796 -- Runtime Function: unsigned long long fract __satfractunshiudq
2797          (unsigned short A)
2798 -- Runtime Function: unsigned short accum __satfractunshiuha (unsigned
2799          short A)
2800 -- Runtime Function: unsigned accum __satfractunshiusa (unsigned short
2801          A)
2802 -- Runtime Function: unsigned long accum __satfractunshiuda (unsigned
2803          short A)
2804 -- Runtime Function: unsigned long long accum __satfractunshiuta
2805          (unsigned short A)
2806 -- Runtime Function: short fract __satfractunssiqq (unsigned int A)
2807 -- Runtime Function: fract __satfractunssihq (unsigned int A)
2808 -- Runtime Function: long fract __satfractunssisq (unsigned int A)
2809 -- Runtime Function: long long fract __satfractunssidq (unsigned int A)
2810 -- Runtime Function: short accum __satfractunssiha (unsigned int A)
2811 -- Runtime Function: accum __satfractunssisa (unsigned int A)
2812 -- Runtime Function: long accum __satfractunssida (unsigned int A)
2813 -- Runtime Function: long long accum __satfractunssita (unsigned int A)
2814 -- Runtime Function: unsigned short fract __satfractunssiuqq (unsigned
2815          int A)
2816 -- Runtime Function: unsigned fract __satfractunssiuhq (unsigned int A)
2817 -- Runtime Function: unsigned long fract __satfractunssiusq (unsigned
2818          int A)
2819 -- Runtime Function: unsigned long long fract __satfractunssiudq
2820          (unsigned int A)
2821 -- Runtime Function: unsigned short accum __satfractunssiuha (unsigned
2822          int A)
2823 -- Runtime Function: unsigned accum __satfractunssiusa (unsigned int A)
2824 -- Runtime Function: unsigned long accum __satfractunssiuda (unsigned
2825          int A)
2826 -- Runtime Function: unsigned long long accum __satfractunssiuta
2827          (unsigned int A)
2828 -- Runtime Function: short fract __satfractunsdiqq (unsigned long A)
2829 -- Runtime Function: fract __satfractunsdihq (unsigned long A)
2830 -- Runtime Function: long fract __satfractunsdisq (unsigned long A)
2831 -- Runtime Function: long long fract __satfractunsdidq (unsigned long
2832          A)
2833 -- Runtime Function: short accum __satfractunsdiha (unsigned long A)
2834 -- Runtime Function: accum __satfractunsdisa (unsigned long A)
2835 -- Runtime Function: long accum __satfractunsdida (unsigned long A)
2836 -- Runtime Function: long long accum __satfractunsdita (unsigned long
2837          A)
2838 -- Runtime Function: unsigned short fract __satfractunsdiuqq (unsigned
2839          long A)
2840 -- Runtime Function: unsigned fract __satfractunsdiuhq (unsigned long
2841          A)
2842 -- Runtime Function: unsigned long fract __satfractunsdiusq (unsigned
2843          long A)
2844 -- Runtime Function: unsigned long long fract __satfractunsdiudq
2845          (unsigned long A)
2846 -- Runtime Function: unsigned short accum __satfractunsdiuha (unsigned
2847          long A)
2848 -- Runtime Function: unsigned accum __satfractunsdiusa (unsigned long
2849          A)
2850 -- Runtime Function: unsigned long accum __satfractunsdiuda (unsigned
2851          long A)
2852 -- Runtime Function: unsigned long long accum __satfractunsdiuta
2853          (unsigned long A)
2854 -- Runtime Function: short fract __satfractunstiqq (unsigned long long
2855          A)
2856 -- Runtime Function: fract __satfractunstihq (unsigned long long A)
2857 -- Runtime Function: long fract __satfractunstisq (unsigned long long
2858          A)
2859 -- Runtime Function: long long fract __satfractunstidq (unsigned long
2860          long A)
2861 -- Runtime Function: short accum __satfractunstiha (unsigned long long
2862          A)
2863 -- Runtime Function: accum __satfractunstisa (unsigned long long A)
2864 -- Runtime Function: long accum __satfractunstida (unsigned long long
2865          A)
2866 -- Runtime Function: long long accum __satfractunstita (unsigned long
2867          long A)
2868 -- Runtime Function: unsigned short fract __satfractunstiuqq (unsigned
2869          long long A)
2870 -- Runtime Function: unsigned fract __satfractunstiuhq (unsigned long
2871          long A)
2872 -- Runtime Function: unsigned long fract __satfractunstiusq (unsigned
2873          long long A)
2874 -- Runtime Function: unsigned long long fract __satfractunstiudq
2875          (unsigned long long A)
2876 -- Runtime Function: unsigned short accum __satfractunstiuha (unsigned
2877          long long A)
2878 -- Runtime Function: unsigned accum __satfractunstiusa (unsigned long
2879          long A)
2880 -- Runtime Function: unsigned long accum __satfractunstiuda (unsigned
2881          long long A)
2882 -- Runtime Function: unsigned long long accum __satfractunstiuta
2883          (unsigned long long A)
2884     These functions convert from unsigned non-fractionals to
2885     fractionals, with saturation.
2886
2887
2888File: gccint.info,  Node: Exception handling routines,  Next: Miscellaneous routines,  Prev: Fixed-point fractional library routines,  Up: Libgcc
2889
28904.5 Language-independent routines for exception handling
2891========================================================
2892
2893document me!
2894
2895       _Unwind_DeleteException
2896       _Unwind_Find_FDE
2897       _Unwind_ForcedUnwind
2898       _Unwind_GetGR
2899       _Unwind_GetIP
2900       _Unwind_GetLanguageSpecificData
2901       _Unwind_GetRegionStart
2902       _Unwind_GetTextRelBase
2903       _Unwind_GetDataRelBase
2904       _Unwind_RaiseException
2905       _Unwind_Resume
2906       _Unwind_SetGR
2907       _Unwind_SetIP
2908       _Unwind_FindEnclosingFunction
2909       _Unwind_SjLj_Register
2910       _Unwind_SjLj_Unregister
2911       _Unwind_SjLj_RaiseException
2912       _Unwind_SjLj_ForcedUnwind
2913       _Unwind_SjLj_Resume
2914       __deregister_frame
2915       __deregister_frame_info
2916       __deregister_frame_info_bases
2917       __register_frame
2918       __register_frame_info
2919       __register_frame_info_bases
2920       __register_frame_info_table
2921       __register_frame_info_table_bases
2922       __register_frame_table
2923
2924
2925File: gccint.info,  Node: Miscellaneous routines,  Prev: Exception handling routines,  Up: Libgcc
2926
29274.6 Miscellaneous runtime library routines
2928==========================================
2929
29304.6.1 Cache control functions
2931-----------------------------
2932
2933 -- Runtime Function: void __clear_cache (char *BEG, char *END)
2934     This function clears the instruction cache between BEG and END.
2935
29364.6.2 Split stack functions and variables
2937-----------------------------------------
2938
2939 -- Runtime Function: void * __splitstack_find (void *SEGMENT_ARG, void
2940          *SP, size_t LEN, void **NEXT_SEGMENT, void **NEXT_SP, void
2941          **INITIAL_SP)
2942     When using '-fsplit-stack', this call may be used to iterate over
2943     the stack segments.  It may be called like this:
2944            void *next_segment = NULL;
2945            void *next_sp = NULL;
2946            void *initial_sp = NULL;
2947            void *stack;
2948            size_t stack_size;
2949            while ((stack = __splitstack_find (next_segment, next_sp,
2950                                               &stack_size, &next_segment,
2951                                               &next_sp, &initial_sp))
2952                   != NULL)
2953              {
2954                /* Stack segment starts at stack and is
2955                   stack_size bytes long.  */
2956              }
2957
2958     There is no way to iterate over the stack segments of a different
2959     thread.  However, what is permitted is for one thread to call this
2960     with the SEGMENT_ARG and SP arguments NULL, to pass NEXT_SEGMENT,
2961     NEXT_SP, and INITIAL_SP to a different thread, and then to suspend
2962     one way or another.  A different thread may run the subsequent
2963     '__splitstack_find' iterations.  Of course, this will only work if
2964     the first thread is suspended while the second thread is calling
2965     '__splitstack_find'.  If not, the second thread could be looking at
2966     the stack while it is changing, and anything could happen.
2967
2968 -- Variable: __morestack_segments
2969 -- Variable: __morestack_current_segment
2970 -- Variable: __morestack_initial_sp
2971     Internal variables used by the '-fsplit-stack' implementation.
2972
2973
2974File: gccint.info,  Node: Languages,  Next: Source Tree,  Prev: Libgcc,  Up: Top
2975
29765 Language Front Ends in GCC
2977****************************
2978
2979The interface to front ends for languages in GCC, and in particular the
2980'tree' structure (*note GENERIC::), was initially designed for C, and
2981many aspects of it are still somewhat biased towards C and C-like
2982languages.  It is, however, reasonably well suited to other procedural
2983languages, and front ends for many such languages have been written for
2984GCC.
2985
2986 Writing a compiler as a front end for GCC, rather than compiling
2987directly to assembler or generating C code which is then compiled by
2988GCC, has several advantages:
2989
2990   * GCC front ends benefit from the support for many different target
2991     machines already present in GCC.
2992   * GCC front ends benefit from all the optimizations in GCC.  Some of
2993     these, such as alias analysis, may work better when GCC is
2994     compiling directly from source code then when it is compiling from
2995     generated C code.
2996   * Better debugging information is generated when compiling directly
2997     from source code than when going via intermediate generated C code.
2998
2999 Because of the advantages of writing a compiler as a GCC front end, GCC
3000front ends have also been created for languages very different from
3001those for which GCC was designed, such as the declarative
3002logic/functional language Mercury.  For these reasons, it may also be
3003useful to implement compilers created for specialized purposes (for
3004example, as part of a research project) as GCC front ends.
3005
3006
3007File: gccint.info,  Node: Source Tree,  Next: Testsuites,  Prev: Languages,  Up: Top
3008
30096 Source Tree Structure and Build System
3010****************************************
3011
3012This chapter describes the structure of the GCC source tree, and how GCC
3013is built.  The user documentation for building and installing GCC is in
3014a separate manual (<http://gcc.gnu.org/install/>), with which it is
3015presumed that you are familiar.
3016
3017* Menu:
3018
3019* Configure Terms:: Configuration terminology and history.
3020* Top Level::       The top level source directory.
3021* gcc Directory::   The 'gcc' subdirectory.
3022
3023
3024File: gccint.info,  Node: Configure Terms,  Next: Top Level,  Up: Source Tree
3025
30266.1 Configure Terms and History
3027===============================
3028
3029The configure and build process has a long and colorful history, and can
3030be confusing to anyone who doesn't know why things are the way they are.
3031While there are other documents which describe the configuration process
3032in detail, here are a few things that everyone working on GCC should
3033know.
3034
3035 There are three system names that the build knows about: the machine
3036you are building on ("build"), the machine that you are building for
3037("host"), and the machine that GCC will produce code for ("target").
3038When you configure GCC, you specify these with '--build=', '--host=',
3039and '--target='.
3040
3041 Specifying the host without specifying the build should be avoided, as
3042'configure' may (and once did) assume that the host you specify is also
3043the build, which may not be true.
3044
3045 If build, host, and target are all the same, this is called a "native".
3046If build and host are the same but target is different, this is called a
3047"cross".  If build, host, and target are all different this is called a
3048"canadian" (for obscure reasons dealing with Canada's political party
3049and the background of the person working on the build at that time).  If
3050host and target are the same, but build is different, you are using a
3051cross-compiler to build a native for a different system.  Some people
3052call this a "host-x-host", "crossed native", or "cross-built native".
3053If build and target are the same, but host is different, you are using a
3054cross compiler to build a cross compiler that produces code for the
3055machine you're building on.  This is rare, so there is no common way of
3056describing it.  There is a proposal to call this a "crossback".
3057
3058 If build and host are the same, the GCC you are building will also be
3059used to build the target libraries (like 'libstdc++').  If build and
3060host are different, you must have already built and installed a cross
3061compiler that will be used to build the target libraries (if you
3062configured with '--target=foo-bar', this compiler will be called
3063'foo-bar-gcc').
3064
3065 In the case of target libraries, the machine you're building for is the
3066machine you specified with '--target'.  So, build is the machine you're
3067building on (no change there), host is the machine you're building for
3068(the target libraries are built for the target, so host is the target
3069you specified), and target doesn't apply (because you're not building a
3070compiler, you're building libraries).  The configure/make process will
3071adjust these variables as needed.  It also sets '$with_cross_host' to
3072the original '--host' value in case you need it.
3073
3074 The 'libiberty' support library is built up to three times: once for
3075the host, once for the target (even if they are the same), and once for
3076the build if build and host are different.  This allows it to be used by
3077all programs which are generated in the course of the build process.
3078
3079
3080File: gccint.info,  Node: Top Level,  Next: gcc Directory,  Prev: Configure Terms,  Up: Source Tree
3081
30826.2 Top Level Source Directory
3083==============================
3084
3085The top level source directory in a GCC distribution contains several
3086files and directories that are shared with other software distributions
3087such as that of GNU Binutils.  It also contains several subdirectories
3088that contain parts of GCC and its runtime libraries:
3089
3090'boehm-gc'
3091     The Boehm conservative garbage collector, used as part of the Java
3092     runtime library.
3093
3094'config'
3095     Autoconf macros and Makefile fragments used throughout the tree.
3096
3097'contrib'
3098     Contributed scripts that may be found useful in conjunction with
3099     GCC.  One of these, 'contrib/texi2pod.pl', is used to generate man
3100     pages from Texinfo manuals as part of the GCC build process.
3101
3102'fixincludes'
3103     The support for fixing system headers to work with GCC.  See
3104     'fixincludes/README' for more information.  The headers fixed by
3105     this mechanism are installed in 'LIBSUBDIR/include-fixed'.  Along
3106     with those headers, 'README-fixinc' is also installed, as
3107     'LIBSUBDIR/include-fixed/README'.
3108
3109'gcc'
3110     The main sources of GCC itself (except for runtime libraries),
3111     including optimizers, support for different target architectures,
3112     language front ends, and testsuites.  *Note The 'gcc' Subdirectory:
3113     gcc Directory, for details.
3114
3115'gnattools'
3116     Support tools for GNAT.
3117
3118'include'
3119     Headers for the 'libiberty' library.
3120
3121'intl'
3122     GNU 'libintl', from GNU 'gettext', for systems which do not include
3123     it in 'libc'.
3124
3125'libada'
3126     The Ada runtime library.
3127
3128'libatomic'
3129     The runtime support library for atomic operations (e.g.  for
3130     '__sync' and '__atomic').
3131
3132'libcpp'
3133     The C preprocessor library.
3134
3135'libdecnumber'
3136     The Decimal Float support library.
3137
3138'libffi'
3139     The 'libffi' library, used as part of the Java runtime library.
3140
3141'libgcc'
3142     The GCC runtime library.
3143
3144'libgfortran'
3145     The Fortran runtime library.
3146
3147'libgo'
3148     The Go runtime library.  The bulk of this library is mirrored from
3149     the master Go repository (http://code.google.com/p/go/).
3150
3151'libgomp'
3152     The GNU OpenMP runtime library.
3153
3154'libiberty'
3155     The 'libiberty' library, used for portability and for some
3156     generally useful data structures and algorithms.  *Note
3157     Introduction: (libiberty)Top, for more information about this
3158     library.
3159
3160'libitm'
3161     The runtime support library for transactional memory.
3162
3163'libjava'
3164     The Java runtime library.
3165
3166'libmudflap'
3167     The 'libmudflap' library, used for instrumenting pointer and array
3168     dereferencing operations.
3169
3170'libobjc'
3171     The Objective-C and Objective-C++ runtime library.
3172
3173'libquadmath'
3174     The runtime support library for quad-precision math operations.
3175
3176'libssp'
3177     The Stack protector runtime library.
3178
3179'libstdc++-v3'
3180     The C++ runtime library.
3181
3182'lto-plugin'
3183     Plugin used by 'gold' if link-time optimizations are enabled.
3184
3185'maintainer-scripts'
3186     Scripts used by the 'gccadmin' account on 'gcc.gnu.org'.
3187
3188'zlib'
3189     The 'zlib' compression library, used by the Java front end, as part
3190     of the Java runtime library, and for compressing and uncompressing
3191     GCC's intermediate language in LTO object files.
3192
3193 The build system in the top level directory, including how recursion
3194into subdirectories works and how building runtime libraries for
3195multilibs is handled, is documented in a separate manual, included with
3196GNU Binutils.  *Note GNU configure and build system: (configure)Top, for
3197details.
3198
3199
3200File: gccint.info,  Node: gcc Directory,  Prev: Top Level,  Up: Source Tree
3201
32026.3 The 'gcc' Subdirectory
3203==========================
3204
3205The 'gcc' directory contains many files that are part of the C sources
3206of GCC, other files used as part of the configuration and build process,
3207and subdirectories including documentation and a testsuite.  The files
3208that are sources of GCC are documented in a separate chapter.  *Note
3209Passes and Files of the Compiler: Passes.
3210
3211* Menu:
3212
3213* Subdirectories:: Subdirectories of 'gcc'.
3214* Configuration::  The configuration process, and the files it uses.
3215* Build::          The build system in the 'gcc' directory.
3216* Makefile::       Targets in 'gcc/Makefile'.
3217* Library Files::  Library source files and headers under 'gcc/'.
3218* Headers::        Headers installed by GCC.
3219* Documentation::  Building documentation in GCC.
3220* Front End::      Anatomy of a language front end.
3221* Back End::       Anatomy of a target back end.
3222
3223
3224File: gccint.info,  Node: Subdirectories,  Next: Configuration,  Up: gcc Directory
3225
32266.3.1 Subdirectories of 'gcc'
3227-----------------------------
3228
3229The 'gcc' directory contains the following subdirectories:
3230
3231'LANGUAGE'
3232     Subdirectories for various languages.  Directories containing a
3233     file 'config-lang.in' are language subdirectories.  The contents of
3234     the subdirectories 'c' (for C), 'cp' (for C++), 'objc' (for
3235     Objective-C), 'objcp' (for Objective-C++), and 'lto' (for LTO) are
3236     documented in this manual (*note Passes and Files of the Compiler:
3237     Passes.); those for other languages are not.  *Note Anatomy of a
3238     Language Front End: Front End, for details of the files in these
3239     directories.
3240
3241'common'
3242     Source files shared between the compiler drivers (such as 'gcc')
3243     and the compilers proper (such as 'cc1').  If an architecture
3244     defines target hooks shared between those places, it also has a
3245     subdirectory in 'common/config'.  *Note Target Structure::.
3246
3247'config'
3248     Configuration files for supported architectures and operating
3249     systems.  *Note Anatomy of a Target Back End: Back End, for details
3250     of the files in this directory.
3251
3252'doc'
3253     Texinfo documentation for GCC, together with automatically
3254     generated man pages and support for converting the installation
3255     manual to HTML.  *Note Documentation::.
3256
3257'ginclude'
3258     System headers installed by GCC, mainly those required by the C
3259     standard of freestanding implementations.  *Note Headers Installed
3260     by GCC: Headers, for details of when these and other headers are
3261     installed.
3262
3263'po'
3264     Message catalogs with translations of messages produced by GCC into
3265     various languages, 'LANGUAGE.po'.  This directory also contains
3266     'gcc.pot', the template for these message catalogues, 'exgettext',
3267     a wrapper around 'gettext' to extract the messages from the GCC
3268     sources and create 'gcc.pot', which is run by 'make gcc.pot', and
3269     'EXCLUDES', a list of files from which messages should not be
3270     extracted.
3271
3272'testsuite'
3273     The GCC testsuites (except for those for runtime libraries).  *Note
3274     Testsuites::.
3275
3276
3277File: gccint.info,  Node: Configuration,  Next: Build,  Prev: Subdirectories,  Up: gcc Directory
3278
32796.3.2 Configuration in the 'gcc' Directory
3280------------------------------------------
3281
3282The 'gcc' directory is configured with an Autoconf-generated script
3283'configure'.  The 'configure' script is generated from 'configure.ac'
3284and 'aclocal.m4'.  From the files 'configure.ac' and 'acconfig.h',
3285Autoheader generates the file 'config.in'.  The file 'cstamp-h.in' is
3286used as a timestamp.
3287
3288* Menu:
3289
3290* Config Fragments::     Scripts used by 'configure'.
3291* System Config::        The 'config.build', 'config.host', and
3292                         'config.gcc' files.
3293* Configuration Files::  Files created by running 'configure'.
3294
3295
3296File: gccint.info,  Node: Config Fragments,  Next: System Config,  Up: Configuration
3297
32986.3.2.1 Scripts Used by 'configure'
3299...................................
3300
3301'configure' uses some other scripts to help in its work:
3302
3303   * The standard GNU 'config.sub' and 'config.guess' files, kept in the
3304     top level directory, are used.
3305
3306   * The file 'config.gcc' is used to handle configuration specific to
3307     the particular target machine.  The file 'config.build' is used to
3308     handle configuration specific to the particular build machine.  The
3309     file 'config.host' is used to handle configuration specific to the
3310     particular host machine.  (In general, these should only be used
3311     for features that cannot reasonably be tested in Autoconf feature
3312     tests.)  *Note The 'config.build'; 'config.host'; and 'config.gcc'
3313     Files: System Config, for details of the contents of these files.
3314
3315   * Each language subdirectory has a file 'LANGUAGE/config-lang.in'
3316     that is used for front-end-specific configuration.  *Note The Front
3317     End 'config-lang.in' File: Front End Config, for details of this
3318     file.
3319
3320   * A helper script 'configure.frag' is used as part of creating the
3321     output of 'configure'.
3322
3323
3324File: gccint.info,  Node: System Config,  Next: Configuration Files,  Prev: Config Fragments,  Up: Configuration
3325
33266.3.2.2 The 'config.build'; 'config.host'; and 'config.gcc' Files
3327.................................................................
3328
3329The 'config.build' file contains specific rules for particular systems
3330which GCC is built on.  This should be used as rarely as possible, as
3331the behavior of the build system can always be detected by autoconf.
3332
3333 The 'config.host' file contains specific rules for particular systems
3334which GCC will run on.  This is rarely needed.
3335
3336 The 'config.gcc' file contains specific rules for particular systems
3337which GCC will generate code for.  This is usually needed.
3338
3339 Each file has a list of the shell variables it sets, with descriptions,
3340at the top of the file.
3341
3342 FIXME: document the contents of these files, and what variables should
3343be set to control build, host and target configuration.
3344
3345
3346File: gccint.info,  Node: Configuration Files,  Prev: System Config,  Up: Configuration
3347
33486.3.2.3 Files Created by 'configure'
3349....................................
3350
3351Here we spell out what files will be set up by 'configure' in the 'gcc'
3352directory.  Some other files are created as temporary files in the
3353configuration process, and are not used in the subsequent build; these
3354are not documented.
3355
3356   * 'Makefile' is constructed from 'Makefile.in', together with the
3357     host and target fragments (*note Makefile Fragments: Fragments.)
3358     't-TARGET' and 'x-HOST' from 'config', if any, and language
3359     Makefile fragments 'LANGUAGE/Make-lang.in'.
3360   * 'auto-host.h' contains information about the host machine
3361     determined by 'configure'.  If the host machine is different from
3362     the build machine, then 'auto-build.h' is also created, containing
3363     such information about the build machine.
3364   * 'config.status' is a script that may be run to recreate the current
3365     configuration.
3366   * 'configargs.h' is a header containing details of the arguments
3367     passed to 'configure' to configure GCC, and of the thread model
3368     used.
3369   * 'cstamp-h' is used as a timestamp.
3370   * If a language 'config-lang.in' file (*note The Front End
3371     'config-lang.in' File: Front End Config.) sets 'outputs', then the
3372     files listed in 'outputs' there are also generated.
3373
3374 The following configuration headers are created from the Makefile,
3375using 'mkconfig.sh', rather than directly by 'configure'.  'config.h',
3376'bconfig.h' and 'tconfig.h' all contain the 'xm-MACHINE.h' header, if
3377any, appropriate to the host, build and target machines respectively,
3378the configuration headers for the target, and some definitions; for the
3379host and build machines, these include the autoconfigured headers
3380generated by 'configure'.  The other configuration headers are
3381determined by 'config.gcc'.  They also contain the typedefs for 'rtx',
3382'rtvec' and 'tree'.
3383
3384   * 'config.h', for use in programs that run on the host machine.
3385   * 'bconfig.h', for use in programs that run on the build machine.
3386   * 'tconfig.h', for use in programs and libraries for the target
3387     machine.
3388   * 'tm_p.h', which includes the header 'MACHINE-protos.h' that
3389     contains prototypes for functions in the target 'MACHINE.c' file.
3390     The header 'MACHINE-protos.h' can include prototypes of functions
3391     that use rtl and tree data structures inside appropriate '#ifdef
3392     RTX_CODE' and '#ifdef TREE_CODE' conditional code segements.  The
3393     'MACHINE-protos.h' is included after the 'rtl.h' and/or 'tree.h'
3394     would have been included.  The 'tm_p.h' also includes the header
3395     'tm-preds.h' which is generated by 'genpreds' program during the
3396     build to define the declarations and inline functions for the
3397     predicate functions.
3398
3399
3400File: gccint.info,  Node: Build,  Next: Makefile,  Prev: Configuration,  Up: gcc Directory
3401
34026.3.3 Build System in the 'gcc' Directory
3403-----------------------------------------
3404
3405FIXME: describe the build system, including what is built in what
3406stages.  Also list the various source files that are used in the build
3407process but aren't source files of GCC itself and so aren't documented
3408below (*note Passes::).
3409
3410
3411File: gccint.info,  Node: Makefile,  Next: Library Files,  Prev: Build,  Up: gcc Directory
3412
34136.3.4 Makefile Targets
3414----------------------
3415
3416These targets are available from the 'gcc' directory:
3417
3418'all'
3419     This is the default target.  Depending on what your
3420     build/host/target configuration is, it coordinates all the things
3421     that need to be built.
3422
3423'doc'
3424     Produce info-formatted documentation and man pages.  Essentially it
3425     calls 'make man' and 'make info'.
3426
3427'dvi'
3428     Produce DVI-formatted documentation.
3429
3430'pdf'
3431     Produce PDF-formatted documentation.
3432
3433'html'
3434     Produce HTML-formatted documentation.
3435
3436'man'
3437     Generate man pages.
3438
3439'info'
3440     Generate info-formatted pages.
3441
3442'mostlyclean'
3443     Delete the files made while building the compiler.
3444
3445'clean'
3446     That, and all the other files built by 'make all'.
3447
3448'distclean'
3449     That, and all the files created by 'configure'.
3450
3451'maintainer-clean'
3452     Distclean plus any file that can be generated from other files.
3453     Note that additional tools may be required beyond what is normally
3454     needed to build GCC.
3455
3456'srcextra'
3457     Generates files in the source directory that are not
3458     version-controlled but should go into a release tarball.
3459
3460'srcinfo'
3461'srcman'
3462     Copies the info-formatted and manpage documentation into the source
3463     directory usually for the purpose of generating a release tarball.
3464
3465'install'
3466     Installs GCC.
3467
3468'uninstall'
3469     Deletes installed files, though this is not supported.
3470
3471'check'
3472     Run the testsuite.  This creates a 'testsuite' subdirectory that
3473     has various '.sum' and '.log' files containing the results of the
3474     testing.  You can run subsets with, for example, 'make check-gcc'.
3475     You can specify specific tests by setting 'RUNTESTFLAGS' to be the
3476     name of the '.exp' file, optionally followed by (for some tests) an
3477     equals and a file wildcard, like:
3478
3479          make check-gcc RUNTESTFLAGS="execute.exp=19980413-*"
3480
3481     Note that running the testsuite may require additional tools be
3482     installed, such as Tcl or DejaGnu.
3483
3484 The toplevel tree from which you start GCC compilation is not the GCC
3485directory, but rather a complex Makefile that coordinates the various
3486steps of the build, including bootstrapping the compiler and using the
3487new compiler to build target libraries.
3488
3489 When GCC is configured for a native configuration, the default action
3490for 'make' is to do a full three-stage bootstrap.  This means that GCC
3491is built three times--once with the native compiler, once with the
3492native-built compiler it just built, and once with the compiler it built
3493the second time.  In theory, the last two should produce the same
3494results, which 'make compare' can check.  Each stage is configured
3495separately and compiled into a separate directory, to minimize problems
3496due to ABI incompatibilities between the native compiler and GCC.
3497
3498 If you do a change, rebuilding will also start from the first stage and
3499"bubble" up the change through the three stages.  Each stage is taken
3500from its build directory (if it had been built previously), rebuilt, and
3501copied to its subdirectory.  This will allow you to, for example,
3502continue a bootstrap after fixing a bug which causes the stage2 build to
3503crash.  It does not provide as good coverage of the compiler as
3504bootstrapping from scratch, but it ensures that the new code is
3505syntactically correct (e.g., that you did not use GCC extensions by
3506mistake), and avoids spurious bootstrap comparison failures(1).
3507
3508 Other targets available from the top level include:
3509
3510'bootstrap-lean'
3511     Like 'bootstrap', except that the various stages are removed once
3512     they're no longer needed.  This saves disk space.
3513
3514'bootstrap2'
3515'bootstrap2-lean'
3516     Performs only the first two stages of bootstrap.  Unlike a
3517     three-stage bootstrap, this does not perform a comparison to test
3518     that the compiler is running properly.  Note that the disk space
3519     required by a "lean" bootstrap is approximately independent of the
3520     number of stages.
3521
3522'stageN-bubble (N = 1...4, profile, feedback)'
3523     Rebuild all the stages up to N, with the appropriate flags,
3524     "bubbling" the changes as described above.
3525
3526'all-stageN (N = 1...4, profile, feedback)'
3527     Assuming that stage N has already been built, rebuild it with the
3528     appropriate flags.  This is rarely needed.
3529
3530'cleanstrap'
3531     Remove everything ('make clean') and rebuilds ('make bootstrap').
3532
3533'compare'
3534     Compares the results of stages 2 and 3.  This ensures that the
3535     compiler is running properly, since it should produce the same
3536     object files regardless of how it itself was compiled.
3537
3538'profiledbootstrap'
3539     Builds a compiler with profiling feedback information.  In this
3540     case, the second and third stages are named 'profile' and
3541     'feedback', respectively.  For more information, see *note Building
3542     with profile feedback: (gccinstall)Building.
3543
3544'restrap'
3545     Restart a bootstrap, so that everything that was not built with the
3546     system compiler is rebuilt.
3547
3548'stageN-start (N = 1...4, profile, feedback)'
3549     For each package that is bootstrapped, rename directories so that,
3550     for example, 'gcc' points to the stageN GCC, compiled with the
3551     stageN-1 GCC(2).
3552
3553     You will invoke this target if you need to test or debug the stageN
3554     GCC.  If you only need to execute GCC (but you need not run 'make'
3555     either to rebuild it or to run test suites), you should be able to
3556     work directly in the 'stageN-gcc' directory.  This makes it easier
3557     to debug multiple stages in parallel.
3558
3559'stage'
3560     For each package that is bootstrapped, relocate its build directory
3561     to indicate its stage.  For example, if the 'gcc' directory points
3562     to the stage2 GCC, after invoking this target it will be renamed to
3563     'stage2-gcc'.
3564
3565 If you wish to use non-default GCC flags when compiling the stage2 and
3566stage3 compilers, set 'BOOT_CFLAGS' on the command line when doing
3567'make'.
3568
3569 Usually, the first stage only builds the languages that the compiler is
3570written in: typically, C and maybe Ada.  If you are debugging a
3571miscompilation of a different stage2 front-end (for example, of the
3572Fortran front-end), you may want to have front-ends for other languages
3573in the first stage as well.  To do so, set 'STAGE1_LANGUAGES' on the
3574command line when doing 'make'.
3575
3576 For example, in the aforementioned scenario of debugging a Fortran
3577front-end miscompilation caused by the stage1 compiler, you may need a
3578command like
3579
3580     make stage2-bubble STAGE1_LANGUAGES=c,fortran
3581
3582 Alternatively, you can use per-language targets to build and test
3583languages that are not enabled by default in stage1.  For example, 'make
3584f951' will build a Fortran compiler even in the stage1 build directory.
3585
3586   ---------- Footnotes ----------
3587
3588   (1) Except if the compiler was buggy and miscompiled some of the
3589files that were not modified.  In this case, it's best to use 'make
3590restrap'.
3591
3592   (2) Customarily, the system compiler is also termed the 'stage0' GCC.
3593
3594
3595File: gccint.info,  Node: Library Files,  Next: Headers,  Prev: Makefile,  Up: gcc Directory
3596
35976.3.5 Library Source Files and Headers under the 'gcc' Directory
3598----------------------------------------------------------------
3599
3600FIXME: list here, with explanation, all the C source files and headers
3601under the 'gcc' directory that aren't built into the GCC executable but
3602rather are part of runtime libraries and object files, such as
3603'crtstuff.c' and 'unwind-dw2.c'.  *Note Headers Installed by GCC:
3604Headers, for more information about the 'ginclude' directory.
3605
3606
3607File: gccint.info,  Node: Headers,  Next: Documentation,  Prev: Library Files,  Up: gcc Directory
3608
36096.3.6 Headers Installed by GCC
3610------------------------------
3611
3612In general, GCC expects the system C library to provide most of the
3613headers to be used with it.  However, GCC will fix those headers if
3614necessary to make them work with GCC, and will install some headers
3615required of freestanding implementations.  These headers are installed
3616in 'LIBSUBDIR/include'.  Headers for non-C runtime libraries are also
3617installed by GCC; these are not documented here.  (FIXME: document them
3618somewhere.)
3619
3620 Several of the headers GCC installs are in the 'ginclude' directory.
3621These headers, 'iso646.h', 'stdarg.h', 'stdbool.h', and 'stddef.h', are
3622installed in 'LIBSUBDIR/include', unless the target Makefile fragment
3623(*note Target Fragment::) overrides this by setting 'USER_H'.
3624
3625 In addition to these headers and those generated by fixing system
3626headers to work with GCC, some other headers may also be installed in
3627'LIBSUBDIR/include'.  'config.gcc' may set 'extra_headers'; this
3628specifies additional headers under 'config' to be installed on some
3629systems.
3630
3631 GCC installs its own version of '<float.h>', from 'ginclude/float.h'.
3632This is done to cope with command-line options that change the
3633representation of floating point numbers.
3634
3635 GCC also installs its own version of '<limits.h>'; this is generated
3636from 'glimits.h', together with 'limitx.h' and 'limity.h' if the system
3637also has its own version of '<limits.h>'.  (GCC provides its own header
3638because it is required of ISO C freestanding implementations, but needs
3639to include the system header from its own header as well because other
3640standards such as POSIX specify additional values to be defined in
3641'<limits.h>'.)  The system's '<limits.h>' header is used via
3642'LIBSUBDIR/include/syslimits.h', which is copied from 'gsyslimits.h' if
3643it does not need fixing to work with GCC; if it needs fixing,
3644'syslimits.h' is the fixed copy.
3645
3646 GCC can also install '<tgmath.h>'.  It will do this when 'config.gcc'
3647sets 'use_gcc_tgmath' to 'yes'.
3648
3649
3650File: gccint.info,  Node: Documentation,  Next: Front End,  Prev: Headers,  Up: gcc Directory
3651
36526.3.7 Building Documentation
3653----------------------------
3654
3655The main GCC documentation is in the form of manuals in Texinfo format.
3656These are installed in Info format; DVI versions may be generated by
3657'make dvi', PDF versions by 'make pdf', and HTML versions by 'make
3658html'.  In addition, some man pages are generated from the Texinfo
3659manuals, there are some other text files with miscellaneous
3660documentation, and runtime libraries have their own documentation
3661outside the 'gcc' directory.  FIXME: document the documentation for
3662runtime libraries somewhere.
3663
3664* Menu:
3665
3666* Texinfo Manuals::      GCC manuals in Texinfo format.
3667* Man Page Generation::  Generating man pages from Texinfo manuals.
3668* Miscellaneous Docs::   Miscellaneous text files with documentation.
3669
3670
3671File: gccint.info,  Node: Texinfo Manuals,  Next: Man Page Generation,  Up: Documentation
3672
36736.3.7.1 Texinfo Manuals
3674.......................
3675
3676The manuals for GCC as a whole, and the C and C++ front ends, are in
3677files 'doc/*.texi'.  Other front ends have their own manuals in files
3678'LANGUAGE/*.texi'.  Common files 'doc/include/*.texi' are provided which
3679may be included in multiple manuals; the following files are in
3680'doc/include':
3681
3682'fdl.texi'
3683     The GNU Free Documentation License.
3684'funding.texi'
3685     The section "Funding Free Software".
3686'gcc-common.texi'
3687     Common definitions for manuals.
3688'gpl_v3.texi'
3689     The GNU General Public License.
3690'texinfo.tex'
3691     A copy of 'texinfo.tex' known to work with the GCC manuals.
3692
3693 DVI-formatted manuals are generated by 'make dvi', which uses
3694'texi2dvi' (via the Makefile macro '$(TEXI2DVI)').  PDF-formatted
3695manuals are generated by 'make pdf', which uses 'texi2pdf' (via the
3696Makefile macro '$(TEXI2PDF)').  HTML formatted manuals are generated by
3697'make html'.  Info manuals are generated by 'make info' (which is run as
3698part of a bootstrap); this generates the manuals in the source
3699directory, using 'makeinfo' via the Makefile macro '$(MAKEINFO)', and
3700they are included in release distributions.
3701
3702 Manuals are also provided on the GCC web site, in both HTML and
3703PostScript forms.  This is done via the script
3704'maintainer-scripts/update_web_docs_svn'.  Each manual to be provided
3705online must be listed in the definition of 'MANUALS' in that file; a
3706file 'NAME.texi' must only appear once in the source tree, and the
3707output manual must have the same name as the source file.  (However,
3708other Texinfo files, included in manuals but not themselves the root
3709files of manuals, may have names that appear more than once in the
3710source tree.)  The manual file 'NAME.texi' should only include other
3711files in its own directory or in 'doc/include'.  HTML manuals will be
3712generated by 'makeinfo --html', PostScript manuals by 'texi2dvi' and
3713'dvips', and PDF manuals by 'texi2pdf'.  All Texinfo files that are
3714parts of manuals must be version-controlled, even if they are generated
3715files, for the generation of online manuals to work.
3716
3717 The installation manual, 'doc/install.texi', is also provided on the
3718GCC web site.  The HTML version is generated by the script
3719'doc/install.texi2html'.
3720
3721
3722File: gccint.info,  Node: Man Page Generation,  Next: Miscellaneous Docs,  Prev: Texinfo Manuals,  Up: Documentation
3723
37246.3.7.2 Man Page Generation
3725...........................
3726
3727Because of user demand, in addition to full Texinfo manuals, man pages
3728are provided which contain extracts from those manuals.  These man pages
3729are generated from the Texinfo manuals using 'contrib/texi2pod.pl' and
3730'pod2man'.  (The man page for 'g++', 'cp/g++.1', just contains a '.so'
3731reference to 'gcc.1', but all the other man pages are generated from
3732Texinfo manuals.)
3733
3734 Because many systems may not have the necessary tools installed to
3735generate the man pages, they are only generated if the 'configure'
3736script detects that recent enough tools are installed, and the Makefiles
3737allow generating man pages to fail without aborting the build.  Man
3738pages are also included in release distributions.  They are generated in
3739the source directory.
3740
3741 Magic comments in Texinfo files starting '@c man' control what parts of
3742a Texinfo file go into a man page.  Only a subset of Texinfo is
3743supported by 'texi2pod.pl', and it may be necessary to add support for
3744more Texinfo features to this script when generating new man pages.  To
3745improve the man page output, some special Texinfo macros are provided in
3746'doc/include/gcc-common.texi' which 'texi2pod.pl' understands:
3747
3748'@gcctabopt'
3749     Use in the form '@table @gcctabopt' for tables of options, where
3750     for printed output the effect of '@code' is better than that of
3751     '@option' but for man page output a different effect is wanted.
3752'@gccoptlist'
3753     Use for summary lists of options in manuals.
3754'@gol'
3755     Use at the end of each line inside '@gccoptlist'.  This is
3756     necessary to avoid problems with differences in how the
3757     '@gccoptlist' macro is handled by different Texinfo formatters.
3758
3759 FIXME: describe the 'texi2pod.pl' input language and magic comments in
3760more detail.
3761
3762
3763File: gccint.info,  Node: Miscellaneous Docs,  Prev: Man Page Generation,  Up: Documentation
3764
37656.3.7.3 Miscellaneous Documentation
3766...................................
3767
3768In addition to the formal documentation that is installed by GCC, there
3769are several other text files in the 'gcc' subdirectory with
3770miscellaneous documentation:
3771
3772'ABOUT-GCC-NLS'
3773     Notes on GCC's Native Language Support.  FIXME: this should be part
3774     of this manual rather than a separate file.
3775'ABOUT-NLS'
3776     Notes on the Free Translation Project.
3777'COPYING'
3778'COPYING3'
3779     The GNU General Public License, Versions 2 and 3.
3780'COPYING.LIB'
3781'COPYING3.LIB'
3782     The GNU Lesser General Public License, Versions 2.1 and 3.
3783'*ChangeLog*'
3784'*/ChangeLog*'
3785     Change log files for various parts of GCC.
3786'LANGUAGES'
3787     Details of a few changes to the GCC front-end interface.  FIXME:
3788     the information in this file should be part of general
3789     documentation of the front-end interface in this manual.
3790'ONEWS'
3791     Information about new features in old versions of GCC.  (For recent
3792     versions, the information is on the GCC web site.)
3793'README.Portability'
3794     Information about portability issues when writing code in GCC.
3795     FIXME: why isn't this part of this manual or of the GCC Coding
3796     Conventions?
3797
3798 FIXME: document such files in subdirectories, at least 'config', 'c',
3799'cp', 'objc', 'testsuite'.
3800
3801
3802File: gccint.info,  Node: Front End,  Next: Back End,  Prev: Documentation,  Up: gcc Directory
3803
38046.3.8 Anatomy of a Language Front End
3805-------------------------------------
3806
3807A front end for a language in GCC has the following parts:
3808
3809   * A directory 'LANGUAGE' under 'gcc' containing source files for that
3810     front end.  *Note The Front End 'LANGUAGE' Directory: Front End
3811     Directory, for details.
3812   * A mention of the language in the list of supported languages in
3813     'gcc/doc/install.texi'.
3814   * A mention of the name under which the language's runtime library is
3815     recognized by '--enable-shared=PACKAGE' in the documentation of
3816     that option in 'gcc/doc/install.texi'.
3817   * A mention of any special prerequisites for building the front end
3818     in the documentation of prerequisites in 'gcc/doc/install.texi'.
3819   * Details of contributors to that front end in
3820     'gcc/doc/contrib.texi'.  If the details are in that front end's own
3821     manual then there should be a link to that manual's list in
3822     'contrib.texi'.
3823   * Information about support for that language in
3824     'gcc/doc/frontends.texi'.
3825   * Information about standards for that language, and the front end's
3826     support for them, in 'gcc/doc/standards.texi'.  This may be a link
3827     to such information in the front end's own manual.
3828   * Details of source file suffixes for that language and '-x LANG'
3829     options supported, in 'gcc/doc/invoke.texi'.
3830   * Entries in 'default_compilers' in 'gcc.c' for source file suffixes
3831     for that language.
3832   * Preferably testsuites, which may be under 'gcc/testsuite' or
3833     runtime library directories.  FIXME: document somewhere how to
3834     write testsuite harnesses.
3835   * Probably a runtime library for the language, outside the 'gcc'
3836     directory.  FIXME: document this further.
3837   * Details of the directories of any runtime libraries in
3838     'gcc/doc/sourcebuild.texi'.
3839   * Check targets in 'Makefile.def' for the top-level 'Makefile' to
3840     check just the compiler or the compiler and runtime library for the
3841     language.
3842
3843 If the front end is added to the official GCC source repository, the
3844following are also necessary:
3845
3846   * At least one Bugzilla component for bugs in that front end and
3847     runtime libraries.  This category needs to be added to the Bugzilla
3848     database.
3849   * Normally, one or more maintainers of that front end listed in
3850     'MAINTAINERS'.
3851   * Mentions on the GCC web site in 'index.html' and 'frontends.html',
3852     with any relevant links on 'readings.html'.  (Front ends that are
3853     not an official part of GCC may also be listed on 'frontends.html',
3854     with relevant links.)
3855   * A news item on 'index.html', and possibly an announcement on the
3856     <[email protected]> mailing list.
3857   * The front end's manuals should be mentioned in
3858     'maintainer-scripts/update_web_docs_svn' (*note Texinfo Manuals::)
3859     and the online manuals should be linked to from
3860     'onlinedocs/index.html'.
3861   * Any old releases or CVS repositories of the front end, before its
3862     inclusion in GCC, should be made available on the GCC FTP site
3863     <ftp://gcc.gnu.org/pub/gcc/old-releases/>.
3864   * The release and snapshot script 'maintainer-scripts/gcc_release'
3865     should be updated to generate appropriate tarballs for this front
3866     end.
3867   * If this front end includes its own version files that include the
3868     current date, 'maintainer-scripts/update_version' should be updated
3869     accordingly.
3870
3871* Menu:
3872
3873* Front End Directory::  The front end 'LANGUAGE' directory.
3874* Front End Config::     The front end 'config-lang.in' file.
3875* Front End Makefile::   The front end 'Make-lang.in' file.
3876
3877
3878File: gccint.info,  Node: Front End Directory,  Next: Front End Config,  Up: Front End
3879
38806.3.8.1 The Front End 'LANGUAGE' Directory
3881..........................................
3882
3883A front end 'LANGUAGE' directory contains the source files of that front
3884end (but not of any runtime libraries, which should be outside the 'gcc'
3885directory).  This includes documentation, and possibly some subsidiary
3886programs built alongside the front end.  Certain files are special and
3887other parts of the compiler depend on their names:
3888
3889'config-lang.in'
3890     This file is required in all language subdirectories.  *Note The
3891     Front End 'config-lang.in' File: Front End Config, for details of
3892     its contents
3893'Make-lang.in'
3894     This file is required in all language subdirectories.  *Note The
3895     Front End 'Make-lang.in' File: Front End Makefile, for details of
3896     its contents.
3897'lang.opt'
3898     This file registers the set of switches that the front end accepts
3899     on the command line, and their '--help' text.  *Note Options::.
3900'lang-specs.h'
3901     This file provides entries for 'default_compilers' in 'gcc.c' which
3902     override the default of giving an error that a compiler for that
3903     language is not installed.
3904'LANGUAGE-tree.def'
3905     This file, which need not exist, defines any language-specific tree
3906     codes.
3907
3908
3909File: gccint.info,  Node: Front End Config,  Next: Front End Makefile,  Prev: Front End Directory,  Up: Front End
3910
39116.3.8.2 The Front End 'config-lang.in' File
3912...........................................
3913
3914Each language subdirectory contains a 'config-lang.in' file.  This file
3915is a shell script that may define some variables describing the
3916language:
3917
3918'language'
3919     This definition must be present, and gives the name of the language
3920     for some purposes such as arguments to '--enable-languages'.
3921'lang_requires'
3922     If defined, this variable lists (space-separated) language front
3923     ends other than C that this front end requires to be enabled (with
3924     the names given being their 'language' settings).  For example, the
3925     Java front end depends on the C++ front end, so sets
3926     'lang_requires=c++'.
3927'subdir_requires'
3928     If defined, this variable lists (space-separated) front end
3929     directories other than C that this front end requires to be
3930     present.  For example, the Objective-C++ front end uses source
3931     files from the C++ and Objective-C front ends, so sets
3932     'subdir_requires="cp objc"'.
3933'target_libs'
3934     If defined, this variable lists (space-separated) targets in the
3935     top level 'Makefile' to build the runtime libraries for this
3936     language, such as 'target-libobjc'.
3937'lang_dirs'
3938     If defined, this variable lists (space-separated) top level
3939     directories (parallel to 'gcc'), apart from the runtime libraries,
3940     that should not be configured if this front end is not built.
3941'build_by_default'
3942     If defined to 'no', this language front end is not built unless
3943     enabled in a '--enable-languages' argument.  Otherwise, front ends
3944     are built by default, subject to any special logic in
3945     'configure.ac' (as is present to disable the Ada front end if the
3946     Ada compiler is not already installed).
3947'boot_language'
3948     If defined to 'yes', this front end is built in stage1 of the
3949     bootstrap.  This is only relevant to front ends written in their
3950     own languages.
3951'compilers'
3952     If defined, a space-separated list of compiler executables that
3953     will be run by the driver.  The names here will each end with
3954     '\$(exeext)'.
3955'outputs'
3956     If defined, a space-separated list of files that should be
3957     generated by 'configure' substituting values in them.  This
3958     mechanism can be used to create a file 'LANGUAGE/Makefile' from
3959     'LANGUAGE/Makefile.in', but this is deprecated, building everything
3960     from the single 'gcc/Makefile' is preferred.
3961'gtfiles'
3962     If defined, a space-separated list of files that should be scanned
3963     by 'gengtype.c' to generate the garbage collection tables and
3964     routines for this language.  This excludes the files that are
3965     common to all front ends.  *Note Type Information::.
3966
3967
3968File: gccint.info,  Node: Front End Makefile,  Prev: Front End Config,  Up: Front End
3969
39706.3.8.3 The Front End 'Make-lang.in' File
3971.........................................
3972
3973Each language subdirectory contains a 'Make-lang.in' file.  It contains
3974targets 'LANG.HOOK' (where 'LANG' is the setting of 'language' in
3975'config-lang.in') for the following values of 'HOOK', and any other
3976Makefile rules required to build those targets (which may if necessary
3977use other Makefiles specified in 'outputs' in 'config-lang.in', although
3978this is deprecated).  It also adds any testsuite targets that can use
3979the standard rule in 'gcc/Makefile.in' to the variable 'lang_checks'.
3980
3981'all.cross'
3982'start.encap'
3983'rest.encap'
3984     FIXME: exactly what goes in each of these targets?
3985'tags'
3986     Build an 'etags' 'TAGS' file in the language subdirectory in the
3987     source tree.
3988'info'
3989     Build info documentation for the front end, in the build directory.
3990     This target is only called by 'make bootstrap' if a suitable
3991     version of 'makeinfo' is available, so does not need to check for
3992     this, and should fail if an error occurs.
3993'dvi'
3994     Build DVI documentation for the front end, in the build directory.
3995     This should be done using '$(TEXI2DVI)', with appropriate '-I'
3996     arguments pointing to directories of included files.
3997'pdf'
3998     Build PDF documentation for the front end, in the build directory.
3999     This should be done using '$(TEXI2PDF)', with appropriate '-I'
4000     arguments pointing to directories of included files.
4001'html'
4002     Build HTML documentation for the front end, in the build directory.
4003'man'
4004     Build generated man pages for the front end from Texinfo manuals
4005     (*note Man Page Generation::), in the build directory.  This target
4006     is only called if the necessary tools are available, but should
4007     ignore errors so as not to stop the build if errors occur; man
4008     pages are optional and the tools involved may be installed in a
4009     broken way.
4010'install-common'
4011     Install everything that is part of the front end, apart from the
4012     compiler executables listed in 'compilers' in 'config-lang.in'.
4013'install-info'
4014     Install info documentation for the front end, if it is present in
4015     the source directory.  This target should have dependencies on info
4016     files that should be installed.
4017'install-man'
4018     Install man pages for the front end.  This target should ignore
4019     errors.
4020'install-plugin'
4021     Install headers needed for plugins.
4022'srcextra'
4023     Copies its dependencies into the source directory.  This generally
4024     should be used for generated files such as Bison output files which
4025     are not version-controlled, but should be included in any release
4026     tarballs.  This target will be executed during a bootstrap if
4027     '--enable-generated-files-in-srcdir' was specified as a 'configure'
4028     option.
4029'srcinfo'
4030'srcman'
4031     Copies its dependencies into the source directory.  These targets
4032     will be executed during a bootstrap if
4033     '--enable-generated-files-in-srcdir' was specified as a 'configure'
4034     option.
4035'uninstall'
4036     Uninstall files installed by installing the compiler.  This is
4037     currently documented not to be supported, so the hook need not do
4038     anything.
4039'mostlyclean'
4040'clean'
4041'distclean'
4042'maintainer-clean'
4043     The language parts of the standard GNU '*clean' targets.  *Note
4044     Standard Targets for Users: (standards)Standard Targets, for
4045     details of the standard targets.  For GCC, 'maintainer-clean'
4046     should delete all generated files in the source directory that are
4047     not version-controlled, but should not delete anything that is.
4048
4049 'Make-lang.in' must also define a variable 'LANG_OBJS' to a list of
4050host object files that are used by that language.
4051
4052
4053File: gccint.info,  Node: Back End,  Prev: Front End,  Up: gcc Directory
4054
40556.3.9 Anatomy of a Target Back End
4056----------------------------------
4057
4058A back end for a target architecture in GCC has the following parts:
4059
4060   * A directory 'MACHINE' under 'gcc/config', containing a machine
4061     description 'MACHINE.md' file (*note Machine Descriptions: Machine
4062     Desc.), header files 'MACHINE.h' and 'MACHINE-protos.h' and a
4063     source file 'MACHINE.c' (*note Target Description Macros and
4064     Functions: Target Macros.), possibly a target Makefile fragment
4065     't-MACHINE' (*note The Target Makefile Fragment: Target Fragment.),
4066     and maybe some other files.  The names of these files may be
4067     changed from the defaults given by explicit specifications in
4068     'config.gcc'.
4069   * If necessary, a file 'MACHINE-modes.def' in the 'MACHINE'
4070     directory, containing additional machine modes to represent
4071     condition codes.  *Note Condition Code::, for further details.
4072   * An optional 'MACHINE.opt' file in the 'MACHINE' directory,
4073     containing a list of target-specific options.  You can also add
4074     other option files using the 'extra_options' variable in
4075     'config.gcc'.  *Note Options::.
4076   * Entries in 'config.gcc' (*note The 'config.gcc' File: System
4077     Config.) for the systems with this target architecture.
4078   * Documentation in 'gcc/doc/invoke.texi' for any command-line options
4079     supported by this target (*note Run-time Target Specification:
4080     Run-time Target.).  This means both entries in the summary table of
4081     options and details of the individual options.
4082   * Documentation in 'gcc/doc/extend.texi' for any target-specific
4083     attributes supported (*note Defining target-specific uses of
4084     '__attribute__': Target Attributes.), including where the same
4085     attribute is already supported on some targets, which are
4086     enumerated in the manual.
4087   * Documentation in 'gcc/doc/extend.texi' for any target-specific
4088     pragmas supported.
4089   * Documentation in 'gcc/doc/extend.texi' of any target-specific
4090     built-in functions supported.
4091   * Documentation in 'gcc/doc/extend.texi' of any target-specific
4092     format checking styles supported.
4093   * Documentation in 'gcc/doc/md.texi' of any target-specific
4094     constraint letters (*note Constraints for Particular Machines:
4095     Machine Constraints.).
4096   * A note in 'gcc/doc/contrib.texi' under the person or people who
4097     contributed the target support.
4098   * Entries in 'gcc/doc/install.texi' for all target triplets supported
4099     with this target architecture, giving details of any special notes
4100     about installation for this target, or saying that there are no
4101     special notes if there are none.
4102   * Possibly other support outside the 'gcc' directory for runtime
4103     libraries.  FIXME: reference docs for this.  The 'libstdc++'
4104     porting manual needs to be installed as info for this to work, or
4105     to be a chapter of this manual.
4106
4107 If the back end is added to the official GCC source repository, the
4108following are also necessary:
4109
4110   * An entry for the target architecture in 'readings.html' on the GCC
4111     web site, with any relevant links.
4112   * Details of the properties of the back end and target architecture
4113     in 'backends.html' on the GCC web site.
4114   * A news item about the contribution of support for that target
4115     architecture, in 'index.html' on the GCC web site.
4116   * Normally, one or more maintainers of that target listed in
4117     'MAINTAINERS'.  Some existing architectures may be unmaintained,
4118     but it would be unusual to add support for a target that does not
4119     have a maintainer when support is added.
4120   * Target triplets covering all 'config.gcc' stanzas for the target,
4121     in the list in 'contrib/config-list.mk'.
4122
4123
4124File: gccint.info,  Node: Testsuites,  Next: Options,  Prev: Source Tree,  Up: Top
4125
41267 Testsuites
4127************
4128
4129GCC contains several testsuites to help maintain compiler quality.  Most
4130of the runtime libraries and language front ends in GCC have testsuites.
4131Currently only the C language testsuites are documented here; FIXME:
4132document the others.
4133
4134* Menu:
4135
4136* Test Idioms::     Idioms used in testsuite code.
4137* Test Directives:: Directives used within DejaGnu tests.
4138* Ada Tests::       The Ada language testsuites.
4139* C Tests::         The C language testsuites.
4140* libgcj Tests::    The Java library testsuites.
4141* LTO Testing::     Support for testing link-time optimizations.
4142* gcov Testing::    Support for testing gcov.
4143* profopt Testing:: Support for testing profile-directed optimizations.
4144* compat Testing::  Support for testing binary compatibility.
4145* Torture Tests::   Support for torture testing using multiple options.
4146
4147
4148File: gccint.info,  Node: Test Idioms,  Next: Test Directives,  Up: Testsuites
4149
41507.1 Idioms Used in Testsuite Code
4151=================================
4152
4153In general, C testcases have a trailing '-N.c', starting with '-1.c', in
4154case other testcases with similar names are added later.  If the test is
4155a test of some well-defined feature, it should have a name referring to
4156that feature such as 'FEATURE-1.c'.  If it does not test a well-defined
4157feature but just happens to exercise a bug somewhere in the compiler,
4158and a bug report has been filed for this bug in the GCC bug database,
4159'prBUG-NUMBER-1.c' is the appropriate form of name.  Otherwise (for
4160miscellaneous bugs not filed in the GCC bug database), and previously
4161more generally, test cases are named after the date on which they were
4162added.  This allows people to tell at a glance whether a test failure is
4163because of a recently found bug that has not yet been fixed, or whether
4164it may be a regression, but does not give any other information about
4165the bug or where discussion of it may be found.  Some other language
4166testsuites follow similar conventions.
4167
4168 In the 'gcc.dg' testsuite, it is often necessary to test that an error
4169is indeed a hard error and not just a warning--for example, where it is
4170a constraint violation in the C standard, which must become an error
4171with '-pedantic-errors'.  The following idiom, where the first line
4172shown is line LINE of the file and the line that generates the error, is
4173used for this:
4174
4175     /* { dg-bogus "warning" "warning in place of error" } */
4176     /* { dg-error "REGEXP" "MESSAGE" { target *-*-* } LINE } */
4177
4178 It may be necessary to check that an expression is an integer constant
4179expression and has a certain value.  To check that 'E' has value 'V', an
4180idiom similar to the following is used:
4181
4182     char x[((E) == (V) ? 1 : -1)];
4183
4184 In 'gcc.dg' tests, '__typeof__' is sometimes used to make assertions
4185about the types of expressions.  See, for example,
4186'gcc.dg/c99-condexpr-1.c'.  The more subtle uses depend on the exact
4187rules for the types of conditional expressions in the C standard; see,
4188for example, 'gcc.dg/c99-intconst-1.c'.
4189
4190 It is useful to be able to test that optimizations are being made
4191properly.  This cannot be done in all cases, but it can be done where
4192the optimization will lead to code being optimized away (for example,
4193where flow analysis or alias analysis should show that certain code
4194cannot be called) or to functions not being called because they have
4195been expanded as built-in functions.  Such tests go in
4196'gcc.c-torture/execute'.  Where code should be optimized away, a call to
4197a nonexistent function such as 'link_failure ()' may be inserted; a
4198definition
4199
4200     #ifndef __OPTIMIZE__
4201     void
4202     link_failure (void)
4203     {
4204       abort ();
4205     }
4206     #endif
4207
4208will also be needed so that linking still succeeds when the test is run
4209without optimization.  When all calls to a built-in function should have
4210been optimized and no calls to the non-built-in version of the function
4211should remain, that function may be defined as 'static' to call 'abort
4212()' (although redeclaring a function as static may not work on all
4213targets).
4214
4215 All testcases must be portable.  Target-specific testcases must have
4216appropriate code to avoid causing failures on unsupported systems;
4217unfortunately, the mechanisms for this differ by directory.
4218
4219 FIXME: discuss non-C testsuites here.
4220
4221
4222File: gccint.info,  Node: Test Directives,  Next: Ada Tests,  Prev: Test Idioms,  Up: Testsuites
4223
42247.2 Directives used within DejaGnu tests
4225========================================
4226
4227* Menu:
4228
4229* Directives::  Syntax and descriptions of test directives.
4230* Selectors:: Selecting targets to which a test applies.
4231* Effective-Target Keywords:: Keywords describing target attributes.
4232* Add Options:: Features for 'dg-add-options'
4233* Require Support:: Variants of 'dg-require-SUPPORT'
4234* Final Actions:: Commands for use in 'dg-final'
4235
4236
4237File: gccint.info,  Node: Directives,  Next: Selectors,  Up: Test Directives
4238
42397.2.1 Syntax and Descriptions of test directives
4240------------------------------------------------
4241
4242Test directives appear within comments in a test source file and begin
4243with 'dg-'.  Some of these are defined within DejaGnu and others are
4244local to the GCC testsuite.
4245
4246 The order in which test directives appear in a test can be important:
4247directives local to GCC sometimes override information used by the
4248DejaGnu directives, which know nothing about the GCC directives, so the
4249DejaGnu directives must precede GCC directives.
4250
4251 Several test directives include selectors (*note Selectors::) which are
4252usually preceded by the keyword 'target' or 'xfail'.
4253
42547.2.1.1 Specify how to build the test
4255.....................................
4256
4257'{ dg-do DO-WHAT-KEYWORD [{ target/xfail SELECTOR }] }'
4258     DO-WHAT-KEYWORD specifies how the test is compiled and whether it
4259     is executed.  It is one of:
4260
4261     'preprocess'
4262          Compile with '-E' to run only the preprocessor.
4263     'compile'
4264          Compile with '-S' to produce an assembly code file.
4265     'assemble'
4266          Compile with '-c' to produce a relocatable object file.
4267     'link'
4268          Compile, assemble, and link to produce an executable file.
4269     'run'
4270          Produce and run an executable file, which is expected to
4271          return an exit code of 0.
4272
4273     The default is 'compile'.  That can be overridden for a set of
4274     tests by redefining 'dg-do-what-default' within the '.exp' file for
4275     those tests.
4276
4277     If the directive includes the optional '{ target SELECTOR }' then
4278     the test is skipped unless the target system matches the SELECTOR.
4279
4280     If DO-WHAT-KEYWORD is 'run' and the directive includes the optional
4281     '{ xfail SELECTOR }' and the selector is met then the test is
4282     expected to fail.  The 'xfail' clause is ignored for other values
4283     of DO-WHAT-KEYWORD; those tests can use directive 'dg-xfail-if'.
4284
42857.2.1.2 Specify additional compiler options
4286...........................................
4287
4288'{ dg-options OPTIONS [{ target SELECTOR }] }'
4289     This DejaGnu directive provides a list of compiler options, to be
4290     used if the target system matches SELECTOR, that replace the
4291     default options used for this set of tests.
4292
4293'{ dg-add-options FEATURE ... }'
4294     Add any compiler options that are needed to access certain
4295     features.  This directive does nothing on targets that enable the
4296     features by default, or that don't provide them at all.  It must
4297     come after all 'dg-options' directives.  For supported values of
4298     FEATURE see *note Add Options::.
4299
4300'{ dg-additional-options OPTIONS [{ target SELECTOR }] }'
4301     This directive provides a list of compiler options, to be used if
4302     the target system matches SELECTOR, that are added to the default
4303     options used for this set of tests.
4304
43057.2.1.3 Modify the test timeout value
4306.....................................
4307
4308The normal timeout limit, in seconds, is found by searching the
4309following in order:
4310
4311   * the value defined by an earlier 'dg-timeout' directive in the test
4312
4313   * variable TOOL_TIMEOUT defined by the set of tests
4314
4315   * GCC,TIMEOUT set in the target board
4316
4317   * 300
4318
4319'{ dg-timeout N [{target SELECTOR }] }'
4320     Set the time limit for the compilation and for the execution of the
4321     test to the specified number of seconds.
4322
4323'{ dg-timeout-factor X [{ target SELECTOR }] }'
4324     Multiply the normal time limit for compilation and execution of the
4325     test by the specified floating-point factor.
4326
43277.2.1.4 Skip a test for some targets
4328....................................
4329
4330'{ dg-skip-if COMMENT { SELECTOR } [{ INCLUDE-OPTS } [{ EXCLUDE-OPTS }]] }'
4331     Arguments INCLUDE-OPTS and EXCLUDE-OPTS are lists in which each
4332     element is a string of zero or more GCC options.  Skip the test if
4333     all of the following conditions are met:
4334        * the test system is included in SELECTOR
4335
4336        * for at least one of the option strings in INCLUDE-OPTS, every
4337          option from that string is in the set of options with which
4338          the test would be compiled; use '"*"' for an INCLUDE-OPTS list
4339          that matches any options; that is the default if INCLUDE-OPTS
4340          is not specified
4341
4342        * for each of the option strings in EXCLUDE-OPTS, at least one
4343          option from that string is not in the set of options with
4344          which the test would be compiled; use '""' for an empty
4345          EXCLUDE-OPTS list; that is the default if EXCLUDE-OPTS is not
4346          specified
4347
4348     For example, to skip a test if option '-Os' is present:
4349
4350          /* { dg-skip-if "" { *-*-* }  { "-Os" } { "" } } */
4351
4352     To skip a test if both options '-O2' and '-g' are present:
4353
4354          /* { dg-skip-if "" { *-*-* }  { "-O2 -g" } { "" } } */
4355
4356     To skip a test if either '-O2' or '-O3' is present:
4357
4358          /* { dg-skip-if "" { *-*-* }  { "-O2" "-O3" } { "" } } */
4359
4360     To skip a test unless option '-Os' is present:
4361
4362          /* { dg-skip-if "" { *-*-* }  { "*" } { "-Os" } } */
4363
4364     To skip a test if either '-O2' or '-O3' is used with '-g' but not
4365     if '-fpic' is also present:
4366
4367          /* { dg-skip-if "" { *-*-* }  { "-O2 -g" "-O3 -g" } { "-fpic" } } */
4368
4369'{ dg-require-effective-target KEYWORD [{ SELECTOR }] }'
4370     Skip the test if the test target, including current multilib flags,
4371     is not covered by the effective-target keyword.  If the directive
4372     includes the optional '{ SELECTOR }' then the effective-target test
4373     is only performed if the target system matches the SELECTOR.  This
4374     directive must appear after any 'dg-do' directive in the test and
4375     before any 'dg-additional-sources' directive.  *Note
4376     Effective-Target Keywords::.
4377
4378'{ dg-require-SUPPORT args }'
4379     Skip the test if the target does not provide the required support.
4380     These directives must appear after any 'dg-do' directive in the
4381     test and before any 'dg-additional-sources' directive.  They
4382     require at least one argument, which can be an empty string if the
4383     specific procedure does not examine the argument.  *Note Require
4384     Support::, for a complete list of these directives.
4385
43867.2.1.5 Expect a test to fail for some targets
4387..............................................
4388
4389'{ dg-xfail-if COMMENT { SELECTOR } [{ INCLUDE-OPTS } [{ EXCLUDE-OPTS }]] }'
4390     Expect the test to fail if the conditions (which are the same as
4391     for 'dg-skip-if') are met.  This does not affect the execute step.
4392
4393'{ dg-xfail-run-if COMMENT { SELECTOR } [{ INCLUDE-OPTS } [{ EXCLUDE-OPTS }]] }'
4394     Expect the execute step of a test to fail if the conditions (which
4395     are the same as for 'dg-skip-if') are met.
4396
43977.2.1.6 Expect the test executable to fail
4398..........................................
4399
4400'{ dg-shouldfail COMMENT [{ SELECTOR } [{ INCLUDE-OPTS } [{ EXCLUDE-OPTS }]]] }'
4401     Expect the test executable to return a nonzero exit status if the
4402     conditions (which are the same as for 'dg-skip-if') are met.
4403
44047.2.1.7 Verify compiler messages
4405................................
4406
4407'{ dg-error REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] }]] }'
4408     This DejaGnu directive appears on a source line that is expected to
4409     get an error message, or else specifies the source line associated
4410     with the message.  If there is no message for that line or if the
4411     text of that message is not matched by REGEXP then the check fails
4412     and COMMENT is included in the 'FAIL' message.  The check does not
4413     look for the string 'error' unless it is part of REGEXP.
4414
4415'{ dg-warning REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] }]] }'
4416     This DejaGnu directive appears on a source line that is expected to
4417     get a warning message, or else specifies the source line associated
4418     with the message.  If there is no message for that line or if the
4419     text of that message is not matched by REGEXP then the check fails
4420     and COMMENT is included in the 'FAIL' message.  The check does not
4421     look for the string 'warning' unless it is part of REGEXP.
4422
4423'{ dg-message REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] }]] }'
4424     The line is expected to get a message other than an error or
4425     warning.  If there is no message for that line or if the text of
4426     that message is not matched by REGEXP then the check fails and
4427     COMMENT is included in the 'FAIL' message.
4428
4429'{ dg-bogus REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] }]] }'
4430     This DejaGnu directive appears on a source line that should not get
4431     a message matching REGEXP, or else specifies the source line
4432     associated with the bogus message.  It is usually used with 'xfail'
4433     to indicate that the message is a known problem for a particular
4434     set of targets.
4435
4436'{ dg-excess-errors COMMENT [{ target/xfail SELECTOR }] }'
4437     This DejaGnu directive indicates that the test is expected to fail
4438     due to compiler messages that are not handled by 'dg-error',
4439     'dg-warning' or 'dg-bogus'.  For this directive 'xfail' has the
4440     same effect as 'target'.
4441
4442'{ dg-prune-output REGEXP }'
4443     Prune messages matching REGEXP from the test output.
4444
44457.2.1.8 Verify output of the test executable
4446............................................
4447
4448'{ dg-output REGEXP [{ target/xfail SELECTOR }] }'
4449     This DejaGnu directive compares REGEXP to the combined output that
4450     the test executable writes to 'stdout' and 'stderr'.
4451
44527.2.1.9 Specify additional files for a test
4453...........................................
4454
4455'{ dg-additional-files "FILELIST" }'
4456     Specify additional files, other than source files, that must be
4457     copied to the system where the compiler runs.
4458
4459'{ dg-additional-sources "FILELIST" }'
4460     Specify additional source files to appear in the compile line
4461     following the main test file.
4462
44637.2.1.10 Add checks at the end of a test
4464........................................
4465
4466'{ dg-final { LOCAL-DIRECTIVE } }'
4467     This DejaGnu directive is placed within a comment anywhere in the
4468     source file and is processed after the test has been compiled and
4469     run.  Multiple 'dg-final' commands are processed in the order in
4470     which they appear in the source file.  *Note Final Actions::, for a
4471     list of directives that can be used within 'dg-final'.
4472
4473
4474File: gccint.info,  Node: Selectors,  Next: Effective-Target Keywords,  Prev: Directives,  Up: Test Directives
4475
44767.2.2 Selecting targets to which a test applies
4477-----------------------------------------------
4478
4479Several test directives include SELECTORs to limit the targets for which
4480a test is run or to declare that a test is expected to fail on
4481particular targets.
4482
4483 A selector is:
4484   * one or more target triplets, possibly including wildcard
4485     characters; use '*-*-*' to match any target
4486   * a single effective-target keyword (*note Effective-Target
4487     Keywords::)
4488   * a logical expression
4489
4490 Depending on the context, the selector specifies whether a test is
4491skipped and reported as unsupported or is expected to fail.  A context
4492that allows either 'target' or 'xfail' also allows '{ target SELECTOR1
4493xfail SELECTOR2 }' to skip the test for targets that don't match
4494SELECTOR1 and the test to fail for targets that match SELECTOR2.
4495
4496 A selector expression appears within curly braces and uses a single
4497logical operator: one of '!', '&&', or '||'.  An operand is another
4498selector expression, an effective-target keyword, a single target
4499triplet, or a list of target triplets within quotes or curly braces.
4500For example:
4501
4502     { target { ! "hppa*-*-* ia64*-*-*" } }
4503     { target { powerpc*-*-* && lp64 } }
4504     { xfail { lp64 || vect_no_align } }
4505
4506
4507File: gccint.info,  Node: Effective-Target Keywords,  Next: Add Options,  Prev: Selectors,  Up: Test Directives
4508
45097.2.3 Keywords describing target attributes
4510-------------------------------------------
4511
4512Effective-target keywords identify sets of targets that support
4513particular functionality.  They are used to limit tests to be run only
4514for particular targets, or to specify that particular sets of targets
4515are expected to fail some tests.
4516
4517 Effective-target keywords are defined in 'lib/target-supports.exp' in
4518the GCC testsuite, with the exception of those that are documented as
4519being local to a particular test directory.
4520
4521 The 'effective target' takes into account all of the compiler options
4522with which the test will be compiled, including the multilib options.
4523By convention, keywords ending in '_nocache' can also include options
4524specified for the particular test in an earlier 'dg-options' or
4525'dg-add-options' directive.
4526
45277.2.3.1 Data type sizes
4528.......................
4529
4530'ilp32'
4531     Target has 32-bit 'int', 'long', and pointers.
4532
4533'lp64'
4534     Target has 32-bit 'int', 64-bit 'long' and pointers.
4535
4536'llp64'
4537     Target has 32-bit 'int' and 'long', 64-bit 'long long' and
4538     pointers.
4539
4540'double64'
4541     Target has 64-bit 'double'.
4542
4543'double64plus'
4544     Target has 'double' that is 64 bits or longer.
4545
4546'int32plus'
4547     Target has 'int' that is at 32 bits or longer.
4548
4549'int16'
4550     Target has 'int' that is 16 bits or shorter.
4551
4552'long_neq_int'
4553     Target has 'int' and 'long' with different sizes.
4554
4555'large_double'
4556     Target supports 'double' that is longer than 'float'.
4557
4558'large_long_double'
4559     Target supports 'long double' that is longer than 'double'.
4560
4561'ptr32plus'
4562     Target has pointers that are 32 bits or longer.
4563
4564'size32plus'
4565     Target supports array and structure sizes that are 32 bits or
4566     longer.
4567
4568'4byte_wchar_t'
4569     Target has 'wchar_t' that is at least 4 bytes.
4570
45717.2.3.2 Fortran-specific attributes
4572...................................
4573
4574'fortran_integer_16'
4575     Target supports Fortran 'integer' that is 16 bytes or longer.
4576
4577'fortran_large_int'
4578     Target supports Fortran 'integer' kinds larger than 'integer(8)'.
4579
4580'fortran_large_real'
4581     Target supports Fortran 'real' kinds larger than 'real(8)'.
4582
45837.2.3.3 Vector-specific attributes
4584..................................
4585
4586'vect_condition'
4587     Target supports vector conditional operations.
4588
4589'vect_double'
4590     Target supports hardware vectors of 'double'.
4591
4592'vect_float'
4593     Target supports hardware vectors of 'float'.
4594
4595'vect_int'
4596     Target supports hardware vectors of 'int'.
4597
4598'vect_long'
4599     Target supports hardware vectors of 'long'.
4600
4601'vect_long_long'
4602     Target supports hardware vectors of 'long long'.
4603
4604'vect_aligned_arrays'
4605     Target aligns arrays to vector alignment boundary.
4606
4607'vect_hw_misalign'
4608     Target supports a vector misalign access.
4609
4610'vect_no_align'
4611     Target does not support a vector alignment mechanism.
4612
4613'vect_no_int_max'
4614     Target does not support a vector max instruction on 'int'.
4615
4616'vect_no_int_add'
4617     Target does not support a vector add instruction on 'int'.
4618
4619'vect_no_bitwise'
4620     Target does not support vector bitwise instructions.
4621
4622'vect_char_mult'
4623     Target supports 'vector char' multiplication.
4624
4625'vect_short_mult'
4626     Target supports 'vector short' multiplication.
4627
4628'vect_int_mult'
4629     Target supports 'vector int' multiplication.
4630
4631'vect_extract_even_odd'
4632     Target supports vector even/odd element extraction.
4633
4634'vect_extract_even_odd_wide'
4635     Target supports vector even/odd element extraction of vectors with
4636     elements 'SImode' or larger.
4637
4638'vect_interleave'
4639     Target supports vector interleaving.
4640
4641'vect_strided'
4642     Target supports vector interleaving and extract even/odd.
4643
4644'vect_strided_wide'
4645     Target supports vector interleaving and extract even/odd for wide
4646     element types.
4647
4648'vect_perm'
4649     Target supports vector permutation.
4650
4651'vect_shift'
4652     Target supports a hardware vector shift operation.
4653
4654'vect_widen_sum_hi_to_si'
4655     Target supports a vector widening summation of 'short' operands
4656     into 'int' results, or can promote (unpack) from 'short' to 'int'.
4657
4658'vect_widen_sum_qi_to_hi'
4659     Target supports a vector widening summation of 'char' operands into
4660     'short' results, or can promote (unpack) from 'char' to 'short'.
4661
4662'vect_widen_sum_qi_to_si'
4663     Target supports a vector widening summation of 'char' operands into
4664     'int' results.
4665
4666'vect_widen_mult_qi_to_hi'
4667     Target supports a vector widening multiplication of 'char' operands
4668     into 'short' results, or can promote (unpack) from 'char' to
4669     'short' and perform non-widening multiplication of 'short'.
4670
4671'vect_widen_mult_hi_to_si'
4672     Target supports a vector widening multiplication of 'short'
4673     operands into 'int' results, or can promote (unpack) from 'short'
4674     to 'int' and perform non-widening multiplication of 'int'.
4675
4676'vect_sdot_qi'
4677     Target supports a vector dot-product of 'signed char'.
4678
4679'vect_udot_qi'
4680     Target supports a vector dot-product of 'unsigned char'.
4681
4682'vect_sdot_hi'
4683     Target supports a vector dot-product of 'signed short'.
4684
4685'vect_udot_hi'
4686     Target supports a vector dot-product of 'unsigned short'.
4687
4688'vect_pack_trunc'
4689     Target supports a vector demotion (packing) of 'short' to 'char'
4690     and from 'int' to 'short' using modulo arithmetic.
4691
4692'vect_unpack'
4693     Target supports a vector promotion (unpacking) of 'char' to 'short'
4694     and from 'char' to 'int'.
4695
4696'vect_intfloat_cvt'
4697     Target supports conversion from 'signed int' to 'float'.
4698
4699'vect_uintfloat_cvt'
4700     Target supports conversion from 'unsigned int' to 'float'.
4701
4702'vect_floatint_cvt'
4703     Target supports conversion from 'float' to 'signed int'.
4704
4705'vect_floatuint_cvt'
4706     Target supports conversion from 'float' to 'unsigned int'.
4707
47087.2.3.4 Thread Local Storage attributes
4709.......................................
4710
4711'tls'
4712     Target supports thread-local storage.
4713
4714'tls_native'
4715     Target supports native (rather than emulated) thread-local storage.
4716
4717'tls_runtime'
4718     Test system supports executing TLS executables.
4719
47207.2.3.5 Decimal floating point attributes
4721.........................................
4722
4723'dfp'
4724     Targets supports compiling decimal floating point extension to C.
4725
4726'dfp_nocache'
4727     Including the options used to compile this particular test, the
4728     target supports compiling decimal floating point extension to C.
4729
4730'dfprt'
4731     Test system can execute decimal floating point tests.
4732
4733'dfprt_nocache'
4734     Including the options used to compile this particular test, the
4735     test system can execute decimal floating point tests.
4736
4737'hard_dfp'
4738     Target generates decimal floating point instructions with current
4739     options.
4740
47417.2.3.6 ARM-specific attributes
4742...............................
4743
4744'arm32'
4745     ARM target generates 32-bit code.
4746
4747'arm_eabi'
4748     ARM target adheres to the ABI for the ARM Architecture.
4749
4750'arm_hf_eabi'
4751     ARM target adheres to the VFP and Advanced SIMD Register Arguments
4752     variant of the ABI for the ARM Architecture (as selected with
4753     '-mfloat-abi=hard').
4754
4755'arm_hard_vfp_ok'
4756     ARM target supports '-mfpu=vfp -mfloat-abi=hard'.  Some multilibs
4757     may be incompatible with these options.
4758
4759'arm_iwmmxt_ok'
4760     ARM target supports '-mcpu=iwmmxt'.  Some multilibs may be
4761     incompatible with this option.
4762
4763'arm_neon'
4764     ARM target supports generating NEON instructions.
4765
4766'arm_neon_hw'
4767     Test system supports executing NEON instructions.
4768
4769'arm_neonv2_hw'
4770     Test system supports executing NEON v2 instructions.
4771
4772'arm_neon_ok'
4773     ARM Target supports '-mfpu=neon -mfloat-abi=softfp' or compatible
4774     options.  Some multilibs may be incompatible with these options.
4775
4776'arm_neonv2_ok'
4777     ARM Target supports '-mfpu=neon-vfpv4 -mfloat-abi=softfp' or
4778     compatible options.  Some multilibs may be incompatible with these
4779     options.
4780
4781'arm_neon_fp16_ok'
4782     ARM Target supports '-mfpu=neon-fp16 -mfloat-abi=softfp' or
4783     compatible options.  Some multilibs may be incompatible with these
4784     options.
4785
4786'arm_thumb1_ok'
4787     ARM target generates Thumb-1 code for '-mthumb'.
4788
4789'arm_thumb2_ok'
4790     ARM target generates Thumb-2 code for '-mthumb'.
4791
4792'arm_vfp_ok'
4793     ARM target supports '-mfpu=vfp -mfloat-abi=softfp'.  Some multilibs
4794     may be incompatible with these options.
4795
4796'arm_v8_vfp_ok'
4797     ARM target supports '-mfpu=fp-armv8 -mfloat-abi=softfp'.  Some
4798     multilibs may be incompatible with these options.
4799
4800'arm_v8_neon_ok'
4801     ARM target supports '-mfpu=neon-fp-armv8 -mfloat-abi=softfp'.  Some
4802     multilibs may be incompatible with these options.
4803
4804'arm_prefer_ldrd_strd'
4805     ARM target prefers 'LDRD' and 'STRD' instructions over 'LDM' and
4806     'STM' instructions.
4807
48087.2.3.7 MIPS-specific attributes
4809................................
4810
4811'mips64'
4812     MIPS target supports 64-bit instructions.
4813
4814'nomips16'
4815     MIPS target does not produce MIPS16 code.
4816
4817'mips16_attribute'
4818     MIPS target can generate MIPS16 code.
4819
4820'mips_loongson'
4821     MIPS target is a Loongson-2E or -2F target using an ABI that
4822     supports the Loongson vector modes.
4823
4824'mips_newabi_large_long_double'
4825     MIPS target supports 'long double' larger than 'double' when using
4826     the new ABI.
4827
4828'mpaired_single'
4829     MIPS target supports '-mpaired-single'.
4830
48317.2.3.8 PowerPC-specific attributes
4832...................................
4833
4834'dfp_hw'
4835     PowerPC target supports executing hardware DFP instructions.
4836
4837'p8vector_hw'
4838     PowerPC target supports executing VSX instructions (ISA 2.07).
4839
4840'powerpc64'
4841     Test system supports executing 64-bit instructions.
4842
4843'powerpc_altivec'
4844     PowerPC target supports AltiVec.
4845
4846'powerpc_altivec_ok'
4847     PowerPC target supports '-maltivec'.
4848
4849'powerpc_eabi_ok'
4850     PowerPC target supports '-meabi'.
4851
4852'powerpc_elfv2'
4853     PowerPC target supports '-mabi=elfv2'.
4854
4855'powerpc_fprs'
4856     PowerPC target supports floating-point registers.
4857
4858'powerpc_hard_double'
4859     PowerPC target supports hardware double-precision floating-point.
4860
4861'powerpc_htm_ok'
4862     PowerPC target supports '-mhtm'
4863
4864'powerpc_p8vector_ok'
4865     PowerPC target supports '-mpower8-vector'
4866
4867'powerpc_ppu_ok'
4868     PowerPC target supports '-mcpu=cell'.
4869
4870'powerpc_spe'
4871     PowerPC target supports PowerPC SPE.
4872
4873'powerpc_spe_nocache'
4874     Including the options used to compile this particular test, the
4875     PowerPC target supports PowerPC SPE.
4876
4877'powerpc_spu'
4878     PowerPC target supports PowerPC SPU.
4879
4880'powerpc_vsx_ok'
4881     PowerPC target supports '-mvsx'.
4882
4883'powerpc_405_nocache'
4884     Including the options used to compile this particular test, the
4885     PowerPC target supports PowerPC 405.
4886
4887'ppc_recip_hw'
4888     PowerPC target supports executing reciprocal estimate instructions.
4889
4890'spu_auto_overlay'
4891     SPU target has toolchain that supports automatic overlay
4892     generation.
4893
4894'vmx_hw'
4895     PowerPC target supports executing AltiVec instructions.
4896
4897'vsx_hw'
4898     PowerPC target supports executing VSX instructions (ISA 2.06).
4899
49007.2.3.9 Other hardware attributes
4901.................................
4902
4903'avx'
4904     Target supports compiling 'avx' instructions.
4905
4906'avx_runtime'
4907     Target supports the execution of 'avx' instructions.
4908
4909'cell_hw'
4910     Test system can execute AltiVec and Cell PPU instructions.
4911
4912'coldfire_fpu'
4913     Target uses a ColdFire FPU.
4914
4915'hard_float'
4916     Target supports FPU instructions.
4917
4918'sse'
4919     Target supports compiling 'sse' instructions.
4920
4921'sse_runtime'
4922     Target supports the execution of 'sse' instructions.
4923
4924'sse2'
4925     Target supports compiling 'sse2' instructions.
4926
4927'sse2_runtime'
4928     Target supports the execution of 'sse2' instructions.
4929
4930'sync_char_short'
4931     Target supports atomic operations on 'char' and 'short'.
4932
4933'sync_int_long'
4934     Target supports atomic operations on 'int' and 'long'.
4935
4936'ultrasparc_hw'
4937     Test environment appears to run executables on a simulator that
4938     accepts only 'EM_SPARC' executables and chokes on 'EM_SPARC32PLUS'
4939     or 'EM_SPARCV9' executables.
4940
4941'vect_cmdline_needed'
4942     Target requires a command line argument to enable a SIMD
4943     instruction set.
4944
49457.2.3.10 Environment attributes
4946...............................
4947
4948'c'
4949     The language for the compiler under test is C.
4950
4951'c++'
4952     The language for the compiler under test is C++.
4953
4954'c99_runtime'
4955     Target provides a full C99 runtime.
4956
4957'correct_iso_cpp_string_wchar_protos'
4958     Target 'string.h' and 'wchar.h' headers provide C++ required
4959     overloads for 'strchr' etc.  functions.
4960
4961'dummy_wcsftime'
4962     Target uses a dummy 'wcsftime' function that always returns zero.
4963
4964'fd_truncate'
4965     Target can truncate a file from a file descriptor, as used by
4966     'libgfortran/io/unix.c:fd_truncate'; i.e.  'ftruncate' or 'chsize'.
4967
4968'freestanding'
4969     Target is 'freestanding' as defined in section 4 of the C99
4970     standard.  Effectively, it is a target which supports no extra
4971     headers or libraries other than what is considered essential.
4972
4973'init_priority'
4974     Target supports constructors with initialization priority
4975     arguments.
4976
4977'inttypes_types'
4978     Target has the basic signed and unsigned types in 'inttypes.h'.
4979     This is for tests that GCC's notions of these types agree with
4980     those in the header, as some systems have only 'inttypes.h'.
4981
4982'lax_strtofp'
4983     Target might have errors of a few ULP in string to floating-point
4984     conversion functions and overflow is not always detected correctly
4985     by those functions.
4986
4987'mmap'
4988     Target supports 'mmap'.
4989
4990'newlib'
4991     Target supports Newlib.
4992
4993'pow10'
4994     Target provides 'pow10' function.
4995
4996'pthread'
4997     Target can compile using 'pthread.h' with no errors or warnings.
4998
4999'pthread_h'
5000     Target has 'pthread.h'.
5001
5002'run_expensive_tests'
5003     Expensive testcases (usually those that consume excessive amounts
5004     of CPU time) should be run on this target.  This can be enabled by
5005     setting the 'GCC_TEST_RUN_EXPENSIVE' environment variable to a
5006     non-empty string.
5007
5008'simulator'
5009     Test system runs executables on a simulator (i.e.  slowly) rather
5010     than hardware (i.e.  fast).
5011
5012'stdint_types'
5013     Target has the basic signed and unsigned C types in 'stdint.h'.
5014     This will be obsolete when GCC ensures a working 'stdint.h' for all
5015     targets.
5016
5017'trampolines'
5018     Target supports trampolines.
5019
5020'uclibc'
5021     Target supports uClibc.
5022
5023'unwrapped'
5024     Target does not use a status wrapper.
5025
5026'vxworks_kernel'
5027     Target is a VxWorks kernel.
5028
5029'vxworks_rtp'
5030     Target is a VxWorks RTP.
5031
5032'wchar'
5033     Target supports wide characters.
5034
50357.2.3.11 Other attributes
5036.........................
5037
5038'automatic_stack_alignment'
5039     Target supports automatic stack alignment.
5040
5041'cxa_atexit'
5042     Target uses '__cxa_atexit'.
5043
5044'default_packed'
5045     Target has packed layout of structure members by default.
5046
5047'fgraphite'
5048     Target supports Graphite optimizations.
5049
5050'fixed_point'
5051     Target supports fixed-point extension to C.
5052
5053'fopenmp'
5054     Target supports OpenMP via '-fopenmp'.
5055
5056'fpic'
5057     Target supports '-fpic' and '-fPIC'.
5058
5059'freorder'
5060     Target supports '-freorder-blocks-and-partition'.
5061
5062'fstack_protector'
5063     Target supports '-fstack-protector'.
5064
5065'gas'
5066     Target uses GNU 'as'.
5067
5068'gc_sections'
5069     Target supports '--gc-sections'.
5070
5071'gld'
5072     Target uses GNU 'ld'.
5073
5074'keeps_null_pointer_checks'
5075     Target keeps null pointer checks, either due to the use of
5076     '-fno-delete-null-pointer-checks' or hardwired into the target.
5077
5078'lto'
5079     Compiler has been configured to support link-time optimization
5080     (LTO).
5081
5082'naked_functions'
5083     Target supports the 'naked' function attribute.
5084
5085'named_sections'
5086     Target supports named sections.
5087
5088'natural_alignment_32'
5089     Target uses natural alignment (aligned to type size) for types of
5090     32 bits or less.
5091
5092'target_natural_alignment_64'
5093     Target uses natural alignment (aligned to type size) for types of
5094     64 bits or less.
5095
5096'nonpic'
5097     Target does not generate PIC by default.
5098
5099'pcc_bitfield_type_matters'
5100     Target defines 'PCC_BITFIELD_TYPE_MATTERS'.
5101
5102'pe_aligned_commons'
5103     Target supports '-mpe-aligned-commons'.
5104
5105'pie'
5106     Target supports '-pie', '-fpie' and '-fPIE'.
5107
5108'section_anchors'
5109     Target supports section anchors.
5110
5111'short_enums'
5112     Target defaults to short enums.
5113
5114'static'
5115     Target supports '-static'.
5116
5117'static_libgfortran'
5118     Target supports statically linking 'libgfortran'.
5119
5120'string_merging'
5121     Target supports merging string constants at link time.
5122
5123'ucn'
5124     Target supports compiling and assembling UCN.
5125
5126'ucn_nocache'
5127     Including the options used to compile this particular test, the
5128     target supports compiling and assembling UCN.
5129
5130'unaligned_stack'
5131     Target does not guarantee that its 'STACK_BOUNDARY' is greater than
5132     or equal to the required vector alignment.
5133
5134'vector_alignment_reachable'
5135     Vector alignment is reachable for types of 32 bits or less.
5136
5137'vector_alignment_reachable_for_64bit'
5138     Vector alignment is reachable for types of 64 bits or less.
5139
5140'wchar_t_char16_t_compatible'
5141     Target supports 'wchar_t' that is compatible with 'char16_t'.
5142
5143'wchar_t_char32_t_compatible'
5144     Target supports 'wchar_t' that is compatible with 'char32_t'.
5145
51467.2.3.12 Local to tests in 'gcc.target/i386'
5147............................................
5148
5149'3dnow'
5150     Target supports compiling '3dnow' instructions.
5151
5152'aes'
5153     Target supports compiling 'aes' instructions.
5154
5155'fma4'
5156     Target supports compiling 'fma4' instructions.
5157
5158'ms_hook_prologue'
5159     Target supports attribute 'ms_hook_prologue'.
5160
5161'pclmul'
5162     Target supports compiling 'pclmul' instructions.
5163
5164'sse3'
5165     Target supports compiling 'sse3' instructions.
5166
5167'sse4'
5168     Target supports compiling 'sse4' instructions.
5169
5170'sse4a'
5171     Target supports compiling 'sse4a' instructions.
5172
5173'ssse3'
5174     Target supports compiling 'ssse3' instructions.
5175
5176'vaes'
5177     Target supports compiling 'vaes' instructions.
5178
5179'vpclmul'
5180     Target supports compiling 'vpclmul' instructions.
5181
5182'xop'
5183     Target supports compiling 'xop' instructions.
5184
51857.2.3.13 Local to tests in 'gcc.target/spu/ea'
5186..............................................
5187
5188'ealib'
5189     Target '__ea' library functions are available.
5190
51917.2.3.14 Local to tests in 'gcc.test-framework'
5192...............................................
5193
5194'no'
5195     Always returns 0.
5196
5197'yes'
5198     Always returns 1.
5199
5200
5201File: gccint.info,  Node: Add Options,  Next: Require Support,  Prev: Effective-Target Keywords,  Up: Test Directives
5202
52037.2.4 Features for 'dg-add-options'
5204-----------------------------------
5205
5206The supported values of FEATURE for directive 'dg-add-options' are:
5207
5208'arm_neon'
5209     NEON support.  Only ARM targets support this feature, and only then
5210     in certain modes; see the *note arm_neon_ok effective target
5211     keyword: arm_neon_ok.
5212
5213'arm_neon_fp16'
5214     NEON and half-precision floating point support.  Only ARM targets
5215     support this feature, and only then in certain modes; see the *note
5216     arm_neon_fp16_ok effective target keyword: arm_neon_ok.
5217
5218'bind_pic_locally'
5219     Add the target-specific flags needed to enable functions to bind
5220     locally when using pic/PIC passes in the testsuite.
5221
5222'c99_runtime'
5223     Add the target-specific flags needed to access the C99 runtime.
5224
5225'ieee'
5226     Add the target-specific flags needed to enable full IEEE compliance
5227     mode.
5228
5229'mips16_attribute'
5230     'mips16' function attributes.  Only MIPS targets support this
5231     feature, and only then in certain modes.
5232
5233'tls'
5234     Add the target-specific flags needed to use thread-local storage.
5235
5236
5237File: gccint.info,  Node: Require Support,  Next: Final Actions,  Prev: Add Options,  Up: Test Directives
5238
52397.2.5 Variants of 'dg-require-SUPPORT'
5240--------------------------------------
5241
5242A few of the 'dg-require' directives take arguments.
5243
5244'dg-require-iconv CODESET'
5245     Skip the test if the target does not support iconv.  CODESET is the
5246     codeset to convert to.
5247
5248'dg-require-profiling PROFOPT'
5249     Skip the test if the target does not support profiling with option
5250     PROFOPT.
5251
5252'dg-require-visibility VIS'
5253     Skip the test if the target does not support the 'visibility'
5254     attribute.  If VIS is '""', support for 'visibility("hidden")' is
5255     checked, for 'visibility("VIS")' otherwise.
5256
5257 The original 'dg-require' directives were defined before there was
5258support for effective-target keywords.  The directives that do not take
5259arguments could be replaced with effective-target keywords.
5260
5261'dg-require-alias ""'
5262     Skip the test if the target does not support the 'alias' attribute.
5263
5264'dg-require-ascii-locale ""'
5265     Skip the test if the host does not support an ASCII locale.
5266
5267'dg-require-compat-dfp ""'
5268     Skip this test unless both compilers in a 'compat' testsuite
5269     support decimal floating point.
5270
5271'dg-require-cxa-atexit ""'
5272     Skip the test if the target does not support '__cxa_atexit'.  This
5273     is equivalent to 'dg-require-effective-target cxa_atexit'.
5274
5275'dg-require-dll ""'
5276     Skip the test if the target does not support DLL attributes.
5277
5278'dg-require-fork ""'
5279     Skip the test if the target does not support 'fork'.
5280
5281'dg-require-gc-sections ""'
5282     Skip the test if the target's linker does not support the
5283     '--gc-sections' flags.  This is equivalent to
5284     'dg-require-effective-target gc-sections'.
5285
5286'dg-require-host-local ""'
5287     Skip the test if the host is remote, rather than the same as the
5288     build system.  Some tests are incompatible with DejaGnu's handling
5289     of remote hosts, which involves copying the source file to the host
5290     and compiling it with a relative path and "'-o a.out'".
5291
5292'dg-require-mkfifo ""'
5293     Skip the test if the target does not support 'mkfifo'.
5294
5295'dg-require-named-sections ""'
5296     Skip the test is the target does not support named sections.  This
5297     is equivalent to 'dg-require-effective-target named_sections'.
5298
5299'dg-require-weak ""'
5300     Skip the test if the target does not support weak symbols.
5301
5302'dg-require-weak-override ""'
5303     Skip the test if the target does not support overriding weak
5304     symbols.
5305
5306
5307File: gccint.info,  Node: Final Actions,  Prev: Require Support,  Up: Test Directives
5308
53097.2.6 Commands for use in 'dg-final'
5310------------------------------------
5311
5312The GCC testsuite defines the following directives to be used within
5313'dg-final'.
5314
53157.2.6.1 Scan a particular file
5316..............................
5317
5318'scan-file FILENAME REGEXP [{ target/xfail SELECTOR }]'
5319     Passes if REGEXP matches text in FILENAME.
5320'scan-file-not FILENAME REGEXP [{ target/xfail SELECTOR }]'
5321     Passes if REGEXP does not match text in FILENAME.
5322'scan-module MODULE REGEXP [{ target/xfail SELECTOR }]'
5323     Passes if REGEXP matches in Fortran module MODULE.
5324
53257.2.6.2 Scan the assembly output
5326................................
5327
5328'scan-assembler REGEX [{ target/xfail SELECTOR }]'
5329     Passes if REGEX matches text in the test's assembler output.
5330
5331'scan-assembler-not REGEX [{ target/xfail SELECTOR }]'
5332     Passes if REGEX does not match text in the test's assembler output.
5333
5334'scan-assembler-times REGEX NUM [{ target/xfail SELECTOR }]'
5335     Passes if REGEX is matched exactly NUM times in the test's
5336     assembler output.
5337
5338'scan-assembler-dem REGEX [{ target/xfail SELECTOR }]'
5339     Passes if REGEX matches text in the test's demangled assembler
5340     output.
5341
5342'scan-assembler-dem-not REGEX [{ target/xfail SELECTOR }]'
5343     Passes if REGEX does not match text in the test's demangled
5344     assembler output.
5345
5346'scan-hidden SYMBOL [{ target/xfail SELECTOR }]'
5347     Passes if SYMBOL is defined as a hidden symbol in the test's
5348     assembly output.
5349
5350'scan-not-hidden SYMBOL [{ target/xfail SELECTOR }]'
5351     Passes if SYMBOL is not defined as a hidden symbol in the test's
5352     assembly output.
5353
53547.2.6.3 Scan optimization dump files
5355....................................
5356
5357These commands are available for KIND of 'tree', 'rtl', and 'ipa'.
5358
5359'scan-KIND-dump REGEX SUFFIX [{ target/xfail SELECTOR }]'
5360     Passes if REGEX matches text in the dump file with suffix SUFFIX.
5361
5362'scan-KIND-dump-not REGEX SUFFIX [{ target/xfail SELECTOR }]'
5363     Passes if REGEX does not match text in the dump file with suffix
5364     SUFFIX.
5365
5366'scan-KIND-dump-times REGEX NUM SUFFIX [{ target/xfail SELECTOR }]'
5367     Passes if REGEX is found exactly NUM times in the dump file with
5368     suffix SUFFIX.
5369
5370'scan-KIND-dump-dem REGEX SUFFIX [{ target/xfail SELECTOR }]'
5371     Passes if REGEX matches demangled text in the dump file with suffix
5372     SUFFIX.
5373
5374'scan-KIND-dump-dem-not REGEX SUFFIX [{ target/xfail SELECTOR }]'
5375     Passes if REGEX does not match demangled text in the dump file with
5376     suffix SUFFIX.
5377
53787.2.6.4 Verify that an output files exists or not
5379.................................................
5380
5381'output-exists [{ target/xfail SELECTOR }]'
5382     Passes if compiler output file exists.
5383
5384'output-exists-not [{ target/xfail SELECTOR }]'
5385     Passes if compiler output file does not exist.
5386
53877.2.6.5 Check for LTO tests
5388...........................
5389
5390'scan-symbol REGEXP [{ target/xfail SELECTOR }]'
5391     Passes if the pattern is present in the final executable.
5392
53937.2.6.6 Checks for 'gcov' tests
5394...............................
5395
5396'run-gcov SOURCEFILE'
5397     Check line counts in 'gcov' tests.
5398
5399'run-gcov [branches] [calls] { OPTS SOURCEFILE }'
5400     Check branch and/or call counts, in addition to line counts, in
5401     'gcov' tests.
5402
54037.2.6.7 Clean up generated test files
5404.....................................
5405
5406'cleanup-coverage-files'
5407     Removes coverage data files generated for this test.
5408
5409'cleanup-ipa-dump SUFFIX'
5410     Removes IPA dump files generated for this test.
5411
5412'cleanup-modules "LIST-OF-EXTRA-MODULES"'
5413     Removes Fortran module files generated for this test, excluding the
5414     module names listed in keep-modules.  Cleaning up module files is
5415     usually done automatically by the testsuite by looking at the
5416     source files and removing the modules after the test has been
5417     executed.
5418          module MoD1
5419          end module MoD1
5420          module Mod2
5421          end module Mod2
5422          module moD3
5423          end module moD3
5424          module mod4
5425          end module mod4
5426          ! { dg-final { cleanup-modules "mod1 mod2" } } ! redundant
5427          ! { dg-final { keep-modules "mod3 mod4" } }
5428
5429'keep-modules "LIST-OF-MODULES-NOT-TO-DELETE"'
5430     Whitespace separated list of module names that should not be
5431     deleted by cleanup-modules.  If the list of modules is empty, all
5432     modules defined in this file are kept.
5433          module maybe_unneeded
5434          end module maybe_unneeded
5435          module keep1
5436          end module keep1
5437          module keep2
5438          end module keep2
5439          ! { dg-final { keep-modules "keep1 keep2" } } ! just keep these two
5440          ! { dg-final { keep-modules "" } } ! keep all
5441
5442'cleanup-profile-file'
5443     Removes profiling files generated for this test.
5444
5445'cleanup-repo-files'
5446     Removes files generated for this test for '-frepo'.
5447
5448'cleanup-rtl-dump SUFFIX'
5449     Removes RTL dump files generated for this test.
5450
5451'cleanup-saved-temps'
5452     Removes files for the current test which were kept for
5453     '-save-temps'.
5454
5455'cleanup-tree-dump SUFFIX'
5456     Removes tree dump files matching SUFFIX which were generated for
5457     this test.
5458
5459
5460File: gccint.info,  Node: Ada Tests,  Next: C Tests,  Prev: Test Directives,  Up: Testsuites
5461
54627.3 Ada Language Testsuites
5463===========================
5464
5465The Ada testsuite includes executable tests from the ACATS testsuite,
5466publicly available at <http://www.ada-auth.org/acats.html>.
5467
5468 These tests are integrated in the GCC testsuite in the 'ada/acats'
5469directory, and enabled automatically when running 'make check', assuming
5470the Ada language has been enabled when configuring GCC.
5471
5472 You can also run the Ada testsuite independently, using 'make
5473check-ada', or run a subset of the tests by specifying which chapter to
5474run, e.g.:
5475
5476     $ make check-ada CHAPTERS="c3 c9"
5477
5478 The tests are organized by directory, each directory corresponding to a
5479chapter of the Ada Reference Manual.  So for example, 'c9' corresponds
5480to chapter 9, which deals with tasking features of the language.
5481
5482 There is also an extra chapter called 'gcc' containing a template for
5483creating new executable tests, although this is deprecated in favor of
5484the 'gnat.dg' testsuite.
5485
5486 The tests are run using two 'sh' scripts: 'run_acats' and 'run_all.sh'.
5487To run the tests using a simulator or a cross target, see the small
5488customization section at the top of 'run_all.sh'.
5489
5490 These tests are run using the build tree: they can be run without doing
5491a 'make install'.
5492
5493
5494File: gccint.info,  Node: C Tests,  Next: libgcj Tests,  Prev: Ada Tests,  Up: Testsuites
5495
54967.4 C Language Testsuites
5497=========================
5498
5499GCC contains the following C language testsuites, in the 'gcc/testsuite'
5500directory:
5501
5502'gcc.dg'
5503     This contains tests of particular features of the C compiler, using
5504     the more modern 'dg' harness.  Correctness tests for various
5505     compiler features should go here if possible.
5506
5507     Magic comments determine whether the file is preprocessed,
5508     compiled, linked or run.  In these tests, error and warning message
5509     texts are compared against expected texts or regular expressions
5510     given in comments.  These tests are run with the options '-ansi
5511     -pedantic' unless other options are given in the test.  Except as
5512     noted below they are not run with multiple optimization options.
5513'gcc.dg/compat'
5514     This subdirectory contains tests for binary compatibility using
5515     'lib/compat.exp', which in turn uses the language-independent
5516     support (*note Support for testing binary compatibility: compat
5517     Testing.).
5518'gcc.dg/cpp'
5519     This subdirectory contains tests of the preprocessor.
5520'gcc.dg/debug'
5521     This subdirectory contains tests for debug formats.  Tests in this
5522     subdirectory are run for each debug format that the compiler
5523     supports.
5524'gcc.dg/format'
5525     This subdirectory contains tests of the '-Wformat' format checking.
5526     Tests in this directory are run with and without '-DWIDE'.
5527'gcc.dg/noncompile'
5528     This subdirectory contains tests of code that should not compile
5529     and does not need any special compilation options.  They are run
5530     with multiple optimization options, since sometimes invalid code
5531     crashes the compiler with optimization.
5532'gcc.dg/special'
5533     FIXME: describe this.
5534
5535'gcc.c-torture'
5536     This contains particular code fragments which have historically
5537     broken easily.  These tests are run with multiple optimization
5538     options, so tests for features which only break at some
5539     optimization levels belong here.  This also contains tests to check
5540     that certain optimizations occur.  It might be worthwhile to
5541     separate the correctness tests cleanly from the code quality tests,
5542     but it hasn't been done yet.
5543
5544'gcc.c-torture/compat'
5545     FIXME: describe this.
5546
5547     This directory should probably not be used for new tests.
5548'gcc.c-torture/compile'
5549     This testsuite contains test cases that should compile, but do not
5550     need to link or run.  These test cases are compiled with several
5551     different combinations of optimization options.  All warnings are
5552     disabled for these test cases, so this directory is not suitable if
5553     you wish to test for the presence or absence of compiler warnings.
5554     While special options can be set, and tests disabled on specific
5555     platforms, by the use of '.x' files, mostly these test cases should
5556     not contain platform dependencies.  FIXME: discuss how defines such
5557     as 'NO_LABEL_VALUES' and 'STACK_SIZE' are used.
5558'gcc.c-torture/execute'
5559     This testsuite contains test cases that should compile, link and
5560     run; otherwise the same comments as for 'gcc.c-torture/compile'
5561     apply.
5562'gcc.c-torture/execute/ieee'
5563     This contains tests which are specific to IEEE floating point.
5564'gcc.c-torture/unsorted'
5565     FIXME: describe this.
5566
5567     This directory should probably not be used for new tests.
5568'gcc.misc-tests'
5569     This directory contains C tests that require special handling.
5570     Some of these tests have individual expect files, and others share
5571     special-purpose expect files:
5572
5573     'bprob*.c'
5574          Test '-fbranch-probabilities' using
5575          'gcc.misc-tests/bprob.exp', which in turn uses the generic,
5576          language-independent framework (*note Support for testing
5577          profile-directed optimizations: profopt Testing.).
5578
5579     'gcov*.c'
5580          Test 'gcov' output using 'gcov.exp', which in turn uses the
5581          language-independent support (*note Support for testing gcov:
5582          gcov Testing.).
5583
5584     'i386-pf-*.c'
5585          Test i386-specific support for data prefetch using
5586          'i386-prefetch.exp'.
5587
5588'gcc.test-framework'
5589     'dg-*.c'
5590          Test the testsuite itself using
5591          'gcc.test-framework/test-framework.exp'.
5592
5593 FIXME: merge in 'testsuite/README.gcc' and discuss the format of test
5594cases and magic comments more.
5595
5596
5597File: gccint.info,  Node: libgcj Tests,  Next: LTO Testing,  Prev: C Tests,  Up: Testsuites
5598
55997.5 The Java library testsuites.
5600================================
5601
5602Runtime tests are executed via 'make check' in the
5603'TARGET/libjava/testsuite' directory in the build tree.  Additional
5604runtime tests can be checked into this testsuite.
5605
5606 Regression testing of the core packages in libgcj is also covered by
5607the Mauve testsuite.  The Mauve Project develops tests for the Java
5608Class Libraries.  These tests are run as part of libgcj testing by
5609placing the Mauve tree within the libjava testsuite sources at
5610'libjava/testsuite/libjava.mauve/mauve', or by specifying the location
5611of that tree when invoking 'make', as in 'make MAUVEDIR=~/mauve check'.
5612
5613 To detect regressions, a mechanism in 'mauve.exp' compares the failures
5614for a test run against the list of expected failures in
5615'libjava/testsuite/libjava.mauve/xfails' from the source hierarchy.
5616Update this file when adding new failing tests to Mauve, or when fixing
5617bugs in libgcj that had caused Mauve test failures.
5618
5619 We encourage developers to contribute test cases to Mauve.
5620
5621
5622File: gccint.info,  Node: LTO Testing,  Next: gcov Testing,  Prev: libgcj Tests,  Up: Testsuites
5623
56247.6 Support for testing link-time optimizations
5625===============================================
5626
5627Tests for link-time optimizations usually require multiple source files
5628that are compiled separately, perhaps with different sets of options.
5629There are several special-purpose test directives used for these tests.
5630
5631'{ dg-lto-do DO-WHAT-KEYWORD }'
5632     DO-WHAT-KEYWORD specifies how the test is compiled and whether it
5633     is executed.  It is one of:
5634
5635     'assemble'
5636          Compile with '-c' to produce a relocatable object file.
5637     'link'
5638          Compile, assemble, and link to produce an executable file.
5639     'run'
5640          Produce and run an executable file, which is expected to
5641          return an exit code of 0.
5642
5643     The default is 'assemble'.  That can be overridden for a set of
5644     tests by redefining 'dg-do-what-default' within the '.exp' file for
5645     those tests.
5646
5647     Unlike 'dg-do', 'dg-lto-do' does not support an optional 'target'
5648     or 'xfail' list.  Use 'dg-skip-if', 'dg-xfail-if', or
5649     'dg-xfail-run-if'.
5650
5651'{ dg-lto-options { { OPTIONS } [{ OPTIONS }] } [{ target SELECTOR }]}'
5652     This directive provides a list of one or more sets of compiler
5653     options to override LTO_OPTIONS.  Each test will be compiled and
5654     run with each of these sets of options.
5655
5656'{ dg-extra-ld-options OPTIONS [{ target SELECTOR }]}'
5657     This directive adds OPTIONS to the linker options used.
5658
5659'{ dg-suppress-ld-options OPTIONS [{ target SELECTOR }]}'
5660     This directive removes OPTIONS from the set of linker options used.
5661
5662
5663File: gccint.info,  Node: gcov Testing,  Next: profopt Testing,  Prev: LTO Testing,  Up: Testsuites
5664
56657.7 Support for testing 'gcov'
5666==============================
5667
5668Language-independent support for testing 'gcov', and for checking that
5669branch profiling produces expected values, is provided by the expect
5670file 'lib/gcov.exp'.  'gcov' tests also rely on procedures in
5671'lib/gcc-dg.exp' to compile and run the test program.  A typical 'gcov'
5672test contains the following DejaGnu commands within comments:
5673
5674     { dg-options "-fprofile-arcs -ftest-coverage" }
5675     { dg-do run { target native } }
5676     { dg-final { run-gcov sourcefile } }
5677
5678 Checks of 'gcov' output can include line counts, branch percentages,
5679and call return percentages.  All of these checks are requested via
5680commands that appear in comments in the test's source file.  Commands to
5681check line counts are processed by default.  Commands to check branch
5682percentages and call return percentages are processed if the 'run-gcov'
5683command has arguments 'branches' or 'calls', respectively.  For example,
5684the following specifies checking both, as well as passing '-b' to
5685'gcov':
5686
5687     { dg-final { run-gcov branches calls { -b sourcefile } } }
5688
5689 A line count command appears within a comment on the source line that
5690is expected to get the specified count and has the form 'count(CNT)'.  A
5691test should only check line counts for lines that will get the same
5692count for any architecture.
5693
5694 Commands to check branch percentages ('branch') and call return
5695percentages ('returns') are very similar to each other.  A beginning
5696command appears on or before the first of a range of lines that will
5697report the percentage, and the ending command follows that range of
5698lines.  The beginning command can include a list of percentages, all of
5699which are expected to be found within the range.  A range is terminated
5700by the next command of the same kind.  A command 'branch(end)' or
5701'returns(end)' marks the end of a range without starting a new one.  For
5702example:
5703
5704     if (i > 10 && j > i && j < 20)  /* branch(27 50 75) */
5705                                     /* branch(end) */
5706       foo (i, j);
5707
5708 For a call return percentage, the value specified is the percentage of
5709calls reported to return.  For a branch percentage, the value is either
5710the expected percentage or 100 minus that value, since the direction of
5711a branch can differ depending on the target or the optimization level.
5712
5713 Not all branches and calls need to be checked.  A test should not check
5714for branches that might be optimized away or replaced with predicated
5715instructions.  Don't check for calls inserted by the compiler or ones
5716that might be inlined or optimized away.
5717
5718 A single test can check for combinations of line counts, branch
5719percentages, and call return percentages.  The command to check a line
5720count must appear on the line that will report that count, but commands
5721to check branch percentages and call return percentages can bracket the
5722lines that report them.
5723
5724
5725File: gccint.info,  Node: profopt Testing,  Next: compat Testing,  Prev: gcov Testing,  Up: Testsuites
5726
57277.8 Support for testing profile-directed optimizations
5728======================================================
5729
5730The file 'profopt.exp' provides language-independent support for
5731checking correct execution of a test built with profile-directed
5732optimization.  This testing requires that a test program be built and
5733executed twice.  The first time it is compiled to generate profile data,
5734and the second time it is compiled to use the data that was generated
5735during the first execution.  The second execution is to verify that the
5736test produces the expected results.
5737
5738 To check that the optimization actually generated better code, a test
5739can be built and run a third time with normal optimizations to verify
5740that the performance is better with the profile-directed optimizations.
5741'profopt.exp' has the beginnings of this kind of support.
5742
5743 'profopt.exp' provides generic support for profile-directed
5744optimizations.  Each set of tests that uses it provides information
5745about a specific optimization:
5746
5747'tool'
5748     tool being tested, e.g., 'gcc'
5749
5750'profile_option'
5751     options used to generate profile data
5752
5753'feedback_option'
5754     options used to optimize using that profile data
5755
5756'prof_ext'
5757     suffix of profile data files
5758
5759'PROFOPT_OPTIONS'
5760     list of options with which to run each test, similar to the lists
5761     for torture tests
5762
5763'{ dg-final-generate { LOCAL-DIRECTIVE } }'
5764     This directive is similar to 'dg-final', but the LOCAL-DIRECTIVE is
5765     run after the generation of profile data.
5766
5767'{ dg-final-use { LOCAL-DIRECTIVE } }'
5768     The LOCAL-DIRECTIVE is run after the profile data have been used.
5769
5770
5771File: gccint.info,  Node: compat Testing,  Next: Torture Tests,  Prev: profopt Testing,  Up: Testsuites
5772
57737.9 Support for testing binary compatibility
5774============================================
5775
5776The file 'compat.exp' provides language-independent support for binary
5777compatibility testing.  It supports testing interoperability of two
5778compilers that follow the same ABI, or of multiple sets of compiler
5779options that should not affect binary compatibility.  It is intended to
5780be used for testsuites that complement ABI testsuites.
5781
5782 A test supported by this framework has three parts, each in a separate
5783source file: a main program and two pieces that interact with each other
5784to split up the functionality being tested.
5785
5786'TESTNAME_main.SUFFIX'
5787     Contains the main program, which calls a function in file
5788     'TESTNAME_x.SUFFIX'.
5789
5790'TESTNAME_x.SUFFIX'
5791     Contains at least one call to a function in 'TESTNAME_y.SUFFIX'.
5792
5793'TESTNAME_y.SUFFIX'
5794     Shares data with, or gets arguments from, 'TESTNAME_x.SUFFIX'.
5795
5796 Within each test, the main program and one functional piece are
5797compiled by the GCC under test.  The other piece can be compiled by an
5798alternate compiler.  If no alternate compiler is specified, then all
5799three source files are all compiled by the GCC under test.  You can
5800specify pairs of sets of compiler options.  The first element of such a
5801pair specifies options used with the GCC under test, and the second
5802element of the pair specifies options used with the alternate compiler.
5803Each test is compiled with each pair of options.
5804
5805 'compat.exp' defines default pairs of compiler options.  These can be
5806overridden by defining the environment variable 'COMPAT_OPTIONS' as:
5807
5808     COMPAT_OPTIONS="[list [list {TST1} {ALT1}]
5809       ...[list {TSTN} {ALTN}]]"
5810
5811 where TSTI and ALTI are lists of options, with TSTI used by the
5812compiler under test and ALTI used by the alternate compiler.  For
5813example, with '[list [list {-g -O0} {-O3}] [list {-fpic} {-fPIC -O2}]]',
5814the test is first built with '-g -O0' by the compiler under test and
5815with '-O3' by the alternate compiler.  The test is built a second time
5816using '-fpic' by the compiler under test and '-fPIC -O2' by the
5817alternate compiler.
5818
5819 An alternate compiler is specified by defining an environment variable
5820to be the full pathname of an installed compiler; for C define
5821'ALT_CC_UNDER_TEST', and for C++ define 'ALT_CXX_UNDER_TEST'.  These
5822will be written to the 'site.exp' file used by DejaGnu.  The default is
5823to build each test with the compiler under test using the first of each
5824pair of compiler options from 'COMPAT_OPTIONS'.  When
5825'ALT_CC_UNDER_TEST' or 'ALT_CXX_UNDER_TEST' is 'same', each test is
5826built using the compiler under test but with combinations of the options
5827from 'COMPAT_OPTIONS'.
5828
5829 To run only the C++ compatibility suite using the compiler under test
5830and another version of GCC using specific compiler options, do the
5831following from 'OBJDIR/gcc':
5832
5833     rm site.exp
5834     make -k \
5835       ALT_CXX_UNDER_TEST=${alt_prefix}/bin/g++ \
5836       COMPAT_OPTIONS="LISTS AS SHOWN ABOVE" \
5837       check-c++ \
5838       RUNTESTFLAGS="compat.exp"
5839
5840 A test that fails when the source files are compiled with different
5841compilers, but passes when the files are compiled with the same
5842compiler, demonstrates incompatibility of the generated code or runtime
5843support.  A test that fails for the alternate compiler but passes for
5844the compiler under test probably tests for a bug that was fixed in the
5845compiler under test but is present in the alternate compiler.
5846
5847 The binary compatibility tests support a small number of test framework
5848commands that appear within comments in a test file.
5849
5850'dg-require-*'
5851     These commands can be used in 'TESTNAME_main.SUFFIX' to skip the
5852     test if specific support is not available on the target.
5853
5854'dg-options'
5855     The specified options are used for compiling this particular source
5856     file, appended to the options from 'COMPAT_OPTIONS'.  When this
5857     command appears in 'TESTNAME_main.SUFFIX' the options are also used
5858     to link the test program.
5859
5860'dg-xfail-if'
5861     This command can be used in a secondary source file to specify that
5862     compilation is expected to fail for particular options on
5863     particular targets.
5864
5865
5866File: gccint.info,  Node: Torture Tests,  Prev: compat Testing,  Up: Testsuites
5867
58687.10 Support for torture testing using multiple options
5869=======================================================
5870
5871Throughout the compiler testsuite there are several directories whose
5872tests are run multiple times, each with a different set of options.
5873These are known as torture tests.  'lib/torture-options.exp' defines
5874procedures to set up these lists:
5875
5876'torture-init'
5877     Initialize use of torture lists.
5878'set-torture-options'
5879     Set lists of torture options to use for tests with and without
5880     loops.  Optionally combine a set of torture options with a set of
5881     other options, as is done with Objective-C runtime options.
5882'torture-finish'
5883     Finalize use of torture lists.
5884
5885 The '.exp' file for a set of tests that use torture options must
5886include calls to these three procedures if:
5887
5888   * It calls 'gcc-dg-runtest' and overrides DG_TORTURE_OPTIONS.
5889
5890   * It calls ${TOOL}'-torture' or ${TOOL}'-torture-execute', where TOOL
5891     is 'c', 'fortran', or 'objc'.
5892
5893   * It calls 'dg-pch'.
5894
5895 It is not necessary for a '.exp' file that calls 'gcc-dg-runtest' to
5896call the torture procedures if the tests should use the list in
5897DG_TORTURE_OPTIONS defined in 'gcc-dg.exp'.
5898
5899 Most uses of torture options can override the default lists by defining
5900TORTURE_OPTIONS or add to the default list by defining
5901ADDITIONAL_TORTURE_OPTIONS.  Define these in a '.dejagnurc' file or add
5902them to the 'site.exp' file; for example
5903
5904     set ADDITIONAL_TORTURE_OPTIONS  [list \
5905       { -O2 -ftree-loop-linear } \
5906       { -O2 -fpeel-loops } ]
5907
5908
5909File: gccint.info,  Node: Options,  Next: Passes,  Prev: Testsuites,  Up: Top
5910
59118 Option specification files
5912****************************
5913
5914Most GCC command-line options are described by special option definition
5915files, the names of which conventionally end in '.opt'.  This chapter
5916describes the format of these files.
5917
5918* Menu:
5919
5920* Option file format::   The general layout of the files
5921* Option properties::    Supported option properties
5922
5923
5924File: gccint.info,  Node: Option file format,  Next: Option properties,  Up: Options
5925
59268.1 Option file format
5927======================
5928
5929Option files are a simple list of records in which each field occupies
5930its own line and in which the records themselves are separated by blank
5931lines.  Comments may appear on their own line anywhere within the file
5932and are preceded by semicolons.  Whitespace is allowed before the
5933semicolon.
5934
5935 The files can contain the following types of record:
5936
5937   * A language definition record.  These records have two fields: the
5938     string 'Language' and the name of the language.  Once a language
5939     has been declared in this way, it can be used as an option
5940     property.  *Note Option properties::.
5941
5942   * A target specific save record to save additional information.
5943     These records have two fields: the string 'TargetSave', and a
5944     declaration type to go in the 'cl_target_option' structure.
5945
5946   * A variable record to define a variable used to store option
5947     information.  These records have two fields: the string 'Variable',
5948     and a declaration of the type and name of the variable, optionally
5949     with an initializer (but without any trailing ';').  These records
5950     may be used for variables used for many options where declaring the
5951     initializer in a single option definition record, or duplicating it
5952     in many records, would be inappropriate, or for variables set in
5953     option handlers rather than referenced by 'Var' properties.
5954
5955   * A variable record to define a variable used to store option
5956     information.  These records have two fields: the string
5957     'TargetVariable', and a declaration of the type and name of the
5958     variable, optionally with an initializer (but without any trailing
5959     ';').  'TargetVariable' is a combination of 'Variable' and
5960     'TargetSave' records in that the variable is defined in the
5961     'gcc_options' structure, but these variables are also stored in the
5962     'cl_target_option' structure.  The variables are saved in the
5963     target save code and restored in the target restore code.
5964
5965   * A variable record to record any additional files that the
5966     'options.h' file should include.  This is useful to provide
5967     enumeration or structure definitions needed for target variables.
5968     These records have two fields: the string 'HeaderInclude' and the
5969     name of the include file.
5970
5971   * A variable record to record any additional files that the
5972     'options.c' or 'options-save.c' file should include.  This is
5973     useful to provide inline functions needed for target variables
5974     and/or '#ifdef' sequences to properly set up the initialization.
5975     These records have two fields: the string 'SourceInclude' and the
5976     name of the include file.
5977
5978   * An enumeration record to define a set of strings that may be used
5979     as arguments to an option or options.  These records have three
5980     fields: the string 'Enum', a space-separated list of properties and
5981     help text used to describe the set of strings in '--help' output.
5982     Properties use the same format as option properties; the following
5983     are valid:
5984     'Name(NAME)'
5985          This property is required; NAME must be a name (suitable for
5986          use in C identifiers) used to identify the set of strings in
5987          'Enum' option properties.
5988
5989     'Type(TYPE)'
5990          This property is required; TYPE is the C type for variables
5991          set by options using this enumeration together with 'Var'.
5992
5993     'UnknownError(MESSAGE)'
5994          The message MESSAGE will be used as an error message if the
5995          argument is invalid; for enumerations without 'UnknownError',
5996          a generic error message is used.  MESSAGE should contain a
5997          single '%qs' format, which will be used to format the invalid
5998          argument.
5999
6000   * An enumeration value record to define one of the strings in a set
6001     given in an 'Enum' record.  These records have two fields: the
6002     string 'EnumValue' and a space-separated list of properties.
6003     Properties use the same format as option properties; the following
6004     are valid:
6005     'Enum(NAME)'
6006          This property is required; NAME says which 'Enum' record this
6007          'EnumValue' record corresponds to.
6008
6009     'String(STRING)'
6010          This property is required; STRING is the string option
6011          argument being described by this record.
6012
6013     'Value(VALUE)'
6014          This property is required; it says what value (representable
6015          as 'int') should be used for the given string.
6016
6017     'Canonical'
6018          This property is optional.  If present, it says the present
6019          string is the canonical one among all those with the given
6020          value.  Other strings yielding that value will be mapped to
6021          this one so specs do not need to handle them.
6022
6023     'DriverOnly'
6024          This property is optional.  If present, the present string
6025          will only be accepted by the driver.  This is used for cases
6026          such as '-march=native' that are processed by the driver so
6027          that 'gcc -v' shows how the options chosen depended on the
6028          system on which the compiler was run.
6029
6030   * An option definition record.  These records have the following
6031     fields:
6032       1. the name of the option, with the leading "-" removed
6033       2. a space-separated list of option properties (*note Option
6034          properties::)
6035       3. the help text to use for '--help' (omitted if the second field
6036          contains the 'Undocumented' property).
6037
6038     By default, all options beginning with "f", "W" or "m" are
6039     implicitly assumed to take a "no-" form.  This form should not be
6040     listed separately.  If an option beginning with one of these
6041     letters does not have a "no-" form, you can use the
6042     'RejectNegative' property to reject it.
6043
6044     The help text is automatically line-wrapped before being displayed.
6045     Normally the name of the option is printed on the left-hand side of
6046     the output and the help text is printed on the right.  However, if
6047     the help text contains a tab character, the text to the left of the
6048     tab is used instead of the option's name and the text to the right
6049     of the tab forms the help text.  This allows you to elaborate on
6050     what type of argument the option takes.
6051
6052   * A target mask record.  These records have one field of the form
6053     'Mask(X)'.  The options-processing script will automatically
6054     allocate a bit in 'target_flags' (*note Run-time Target::) for each
6055     mask name X and set the macro 'MASK_X' to the appropriate bitmask.
6056     It will also declare a 'TARGET_X' macro that has the value 1 when
6057     bit 'MASK_X' is set and 0 otherwise.
6058
6059     They are primarily intended to declare target masks that are not
6060     associated with user options, either because these masks represent
6061     internal switches or because the options are not available on all
6062     configurations and yet the masks always need to be defined.
6063
6064
6065File: gccint.info,  Node: Option properties,  Prev: Option file format,  Up: Options
6066
60678.2 Option properties
6068=====================
6069
6070The second field of an option record can specify any of the following
6071properties.  When an option takes an argument, it is enclosed in
6072parentheses following the option property name.  The parser that handles
6073option files is quite simplistic, and will be tricked by any nested
6074parentheses within the argument text itself; in this case, the entire
6075option argument can be wrapped in curly braces within the parentheses to
6076demarcate it, e.g.:
6077
6078     Condition({defined (USE_CYGWIN_LIBSTDCXX_WRAPPERS)})
6079
6080'Common'
6081     The option is available for all languages and targets.
6082
6083'Target'
6084     The option is available for all languages but is target-specific.
6085
6086'Driver'
6087     The option is handled by the compiler driver using code not shared
6088     with the compilers proper ('cc1' etc.).
6089
6090'LANGUAGE'
6091     The option is available when compiling for the given language.
6092
6093     It is possible to specify several different languages for the same
6094     option.  Each LANGUAGE must have been declared by an earlier
6095     'Language' record.  *Note Option file format::.
6096
6097'RejectDriver'
6098     The option is only handled by the compilers proper ('cc1' etc.) and
6099     should not be accepted by the driver.
6100
6101'RejectNegative'
6102     The option does not have a "no-" form.  All options beginning with
6103     "f", "W" or "m" are assumed to have a "no-" form unless this
6104     property is used.
6105
6106'Negative(OTHERNAME)'
6107     The option will turn off another option OTHERNAME, which is the
6108     option name with the leading "-" removed.  This chain action will
6109     propagate through the 'Negative' property of the option to be
6110     turned off.
6111
6112     As a consequence, if you have a group of mutually-exclusive
6113     options, their 'Negative' properties should form a circular chain.
6114     For example, if options '-A', '-B' and '-C' are mutually exclusive,
6115     their respective 'Negative' properties should be 'Negative(B)',
6116     'Negative(C)' and 'Negative(A)'.
6117
6118'Joined'
6119'Separate'
6120     The option takes a mandatory argument.  'Joined' indicates that the
6121     option and argument can be included in the same 'argv' entry (as
6122     with '-mflush-func=NAME', for example).  'Separate' indicates that
6123     the option and argument can be separate 'argv' entries (as with
6124     '-o').  An option is allowed to have both of these properties.
6125
6126'JoinedOrMissing'
6127     The option takes an optional argument.  If the argument is given,
6128     it will be part of the same 'argv' entry as the option itself.
6129
6130     This property cannot be used alongside 'Joined' or 'Separate'.
6131
6132'MissingArgError(MESSAGE)'
6133     For an option marked 'Joined' or 'Separate', the message MESSAGE
6134     will be used as an error message if the mandatory argument is
6135     missing; for options without 'MissingArgError', a generic error
6136     message is used.  MESSAGE should contain a single '%qs' format,
6137     which will be used to format the name of the option passed.
6138
6139'Args(N)'
6140     For an option marked 'Separate', indicate that it takes N
6141     arguments.  The default is 1.
6142
6143'UInteger'
6144     The option's argument is a non-negative integer.  The option parser
6145     will check and convert the argument before passing it to the
6146     relevant option handler.  'UInteger' should also be used on options
6147     like '-falign-loops' where both '-falign-loops' and
6148     '-falign-loops'=N are supported to make sure the saved options are
6149     given a full integer.
6150
6151'ToLower'
6152     The option's argument should be converted to lowercase as part of
6153     putting it in canonical form, and before comparing with the strings
6154     indicated by any 'Enum' property.
6155
6156'NoDriverArg'
6157     For an option marked 'Separate', the option only takes an argument
6158     in the compiler proper, not in the driver.  This is for
6159     compatibility with existing options that are used both directly and
6160     via '-Wp,'; new options should not have this property.
6161
6162'Var(VAR)'
6163     The state of this option should be stored in variable VAR (actually
6164     a macro for 'global_options.x_VAR').  The way that the state is
6165     stored depends on the type of option:
6166
6167        * If the option uses the 'Mask' or 'InverseMask' properties, VAR
6168          is the integer variable that contains the mask.
6169
6170        * If the option is a normal on/off switch, VAR is an integer
6171          variable that is nonzero when the option is enabled.  The
6172          options parser will set the variable to 1 when the positive
6173          form of the option is used and 0 when the "no-" form is used.
6174
6175        * If the option takes an argument and has the 'UInteger'
6176          property, VAR is an integer variable that stores the value of
6177          the argument.
6178
6179        * If the option takes an argument and has the 'Enum' property,
6180          VAR is a variable (type given in the 'Type' property of the
6181          'Enum' record whose 'Name' property has the same argument as
6182          the 'Enum' property of this option) that stores the value of
6183          the argument.
6184
6185        * If the option has the 'Defer' property, VAR is a pointer to a
6186          'VEC(cl_deferred_option,heap)' that stores the option for
6187          later processing.  (VAR is declared with type 'void *' and
6188          needs to be cast to 'VEC(cl_deferred_option,heap)' before
6189          use.)
6190
6191        * Otherwise, if the option takes an argument, VAR is a pointer
6192          to the argument string.  The pointer will be null if the
6193          argument is optional and wasn't given.
6194
6195     The option-processing script will usually zero-initialize VAR.  You
6196     can modify this behavior using 'Init'.
6197
6198'Var(VAR, SET)'
6199     The option controls an integer variable VAR and is active when VAR
6200     equals SET.  The option parser will set VAR to SET when the
6201     positive form of the option is used and '!SET' when the "no-" form
6202     is used.
6203
6204     VAR is declared in the same way as for the single-argument form
6205     described above.
6206
6207'Init(VALUE)'
6208     The variable specified by the 'Var' property should be statically
6209     initialized to VALUE.  If more than one option using the same
6210     variable specifies 'Init', all must specify the same initializer.
6211
6212'Mask(NAME)'
6213     The option is associated with a bit in the 'target_flags' variable
6214     (*note Run-time Target::) and is active when that bit is set.  You
6215     may also specify 'Var' to select a variable other than
6216     'target_flags'.
6217
6218     The options-processing script will automatically allocate a unique
6219     bit for the option.  If the option is attached to 'target_flags',
6220     the script will set the macro 'MASK_NAME' to the appropriate
6221     bitmask.  It will also declare a 'TARGET_NAME' macro that has the
6222     value 1 when the option is active and 0 otherwise.  If you use
6223     'Var' to attach the option to a different variable, the bitmask
6224     macro with be called 'OPTION_MASK_NAME'.
6225
6226'InverseMask(OTHERNAME)'
6227'InverseMask(OTHERNAME, THISNAME)'
6228     The option is the inverse of another option that has the
6229     'Mask(OTHERNAME)' property.  If THISNAME is given, the
6230     options-processing script will declare a 'TARGET_THISNAME' macro
6231     that is 1 when the option is active and 0 otherwise.
6232
6233'Enum(NAME)'
6234     The option's argument is a string from the set of strings
6235     associated with the corresponding 'Enum' record.  The string is
6236     checked and converted to the integer specified in the corresponding
6237     'EnumValue' record before being passed to option handlers.
6238
6239'Defer'
6240     The option should be stored in a vector, specified with 'Var', for
6241     later processing.
6242
6243'Alias(OPT)'
6244'Alias(OPT, ARG)'
6245'Alias(OPT, POSARG, NEGARG)'
6246     The option is an alias for '-OPT' (or the negative form of that
6247     option, depending on 'NegativeAlias').  In the first form, any
6248     argument passed to the alias is considered to be passed to '-OPT',
6249     and '-OPT' is considered to be negated if the alias is used in
6250     negated form.  In the second form, the alias may not be negated or
6251     have an argument, and POSARG is considered to be passed as an
6252     argument to '-OPT'.  In the third form, the alias may not have an
6253     argument, if the alias is used in the positive form then POSARG is
6254     considered to be passed to '-OPT', and if the alias is used in the
6255     negative form then NEGARG is considered to be passed to '-OPT'.
6256
6257     Aliases should not specify 'Var' or 'Mask' or 'UInteger'.  Aliases
6258     should normally specify the same languages as the target of the
6259     alias; the flags on the target will be used to determine any
6260     diagnostic for use of an option for the wrong language, while those
6261     on the alias will be used to identify what command-line text is the
6262     option and what text is any argument to that option.
6263
6264     When an 'Alias' definition is used for an option, driver specs do
6265     not need to handle it and no 'OPT_' enumeration value is defined
6266     for it; only the canonical form of the option will be seen in those
6267     places.
6268
6269'NegativeAlias'
6270     For an option marked with 'Alias(OPT)', the option is considered to
6271     be an alias for the positive form of '-OPT' if negated and for the
6272     negative form of '-OPT' if not negated.  'NegativeAlias' may not be
6273     used with the forms of 'Alias' taking more than one argument.
6274
6275'Ignore'
6276     This option is ignored apart from printing any warning specified
6277     using 'Warn'.  The option will not be seen by specs and no 'OPT_'
6278     enumeration value is defined for it.
6279
6280'SeparateAlias'
6281     For an option marked with 'Joined', 'Separate' and 'Alias', the
6282     option only acts as an alias when passed a separate argument; with
6283     a joined argument it acts as a normal option, with an 'OPT_'
6284     enumeration value.  This is for compatibility with the Java '-d'
6285     option and should not be used for new options.
6286
6287'Warn(MESSAGE)'
6288     If this option is used, output the warning MESSAGE.  MESSAGE is a
6289     format string, either taking a single operand with a '%qs' format
6290     which is the option name, or not taking any operands, which is
6291     passed to the 'warning' function.  If an alias is marked 'Warn',
6292     the target of the alias must not also be marked 'Warn'.
6293
6294'Report'
6295     The state of the option should be printed by '-fverbose-asm'.
6296
6297'Warning'
6298     This is a warning option and should be shown as such in '--help'
6299     output.  This flag does not currently affect anything other than
6300     '--help'.
6301
6302'Optimization'
6303     This is an optimization option.  It should be shown as such in
6304     '--help' output, and any associated variable named using 'Var'
6305     should be saved and restored when the optimization level is changed
6306     with 'optimize' attributes.
6307
6308'Undocumented'
6309     The option is deliberately missing documentation and should not be
6310     included in the '--help' output.
6311
6312'Condition(COND)'
6313     The option should only be accepted if preprocessor condition COND
6314     is true.  Note that any C declarations associated with the option
6315     will be present even if COND is false; COND simply controls whether
6316     the option is accepted and whether it is printed in the '--help'
6317     output.
6318
6319'Save'
6320     Build the 'cl_target_option' structure to hold a copy of the
6321     option, add the functions 'cl_target_option_save' and
6322     'cl_target_option_restore' to save and restore the options.
6323
6324'SetByCombined'
6325     The option may also be set by a combined option such as
6326     '-ffast-math'.  This causes the 'gcc_options' struct to have a
6327     field 'frontend_set_NAME', where 'NAME' is the name of the field
6328     holding the value of this option (without the leading 'x_').  This
6329     gives the front end a way to indicate that the value has been set
6330     explicitly and should not be changed by the combined option.  For
6331     example, some front ends use this to prevent '-ffast-math' and
6332     '-fno-fast-math' from changing the value of '-fmath-errno' for
6333     languages that do not use 'errno'.
6334
6335'EnabledBy(OPT)'
6336'EnabledBy(OPT && OPT2)'
6337     If not explicitly set, the option is set to the value of '-OPT'.
6338     The second form specifies that the option is only set if both OPT
6339     and OPT2 are set.
6340
6341'LangEnabledBy(LANGUAGE, OPT)'
6342'LangEnabledBy(LANGUAGE, OPT, POSARG, NEGARG)'
6343     When compiling for the given language, the option is set to the
6344     value of '-OPT', if not explicitly set.  In the second form, if OPT
6345     is used in the positive form then POSARG is considered to be passed
6346     to the option, and if OPT is used in the negative form then NEGARG
6347     is considered to be passed to the option.  It is possible to
6348     specify several different languages.  Each LANGUAGE must have been
6349     declared by an earlier 'Language' record.  *Note Option file
6350     format::.
6351
6352'NoDWARFRecord'
6353     The option is omitted from the producer string written by
6354     '-grecord-gcc-switches'.
6355
6356
6357File: gccint.info,  Node: Passes,  Next: RTL,  Prev: Options,  Up: Top
6358
63599 Passes and Files of the Compiler
6360**********************************
6361
6362This chapter is dedicated to giving an overview of the optimization and
6363code generation passes of the compiler.  In the process, it describes
6364some of the language front end interface, though this description is no
6365where near complete.
6366
6367* Menu:
6368
6369* Parsing pass::         The language front end turns text into bits.
6370* Gimplification pass::  The bits are turned into something we can optimize.
6371* Pass manager::         Sequencing the optimization passes.
6372* Tree SSA passes::      Optimizations on a high-level representation.
6373* RTL passes::           Optimizations on a low-level representation.
6374
6375
6376File: gccint.info,  Node: Parsing pass,  Next: Gimplification pass,  Up: Passes
6377
63789.1 Parsing pass
6379================
6380
6381The language front end is invoked only once, via
6382'lang_hooks.parse_file', to parse the entire input.  The language front
6383end may use any intermediate language representation deemed appropriate.
6384The C front end uses GENERIC trees (*note GENERIC::), plus a double
6385handful of language specific tree codes defined in 'c-common.def'.  The
6386Fortran front end uses a completely different private representation.
6387
6388 At some point the front end must translate the representation used in
6389the front end to a representation understood by the language-independent
6390portions of the compiler.  Current practice takes one of two forms.  The
6391C front end manually invokes the gimplifier (*note GIMPLE::) on each
6392function, and uses the gimplifier callbacks to convert the
6393language-specific tree nodes directly to GIMPLE before passing the
6394function off to be compiled.  The Fortran front end converts from a
6395private representation to GENERIC, which is later lowered to GIMPLE when
6396the function is compiled.  Which route to choose probably depends on how
6397well GENERIC (plus extensions) can be made to match up with the source
6398language and necessary parsing data structures.
6399
6400 BUG: Gimplification must occur before nested function lowering, and
6401nested function lowering must be done by the front end before passing
6402the data off to cgraph.
6403
6404 TODO: Cgraph should control nested function lowering.  It would only be
6405invoked when it is certain that the outer-most function is used.
6406
6407 TODO: Cgraph needs a gimplify_function callback.  It should be invoked
6408when (1) it is certain that the function is used, (2) warning flags
6409specified by the user require some amount of compilation in order to
6410honor, (3) the language indicates that semantic analysis is not complete
6411until gimplification occurs.  Hum... this sounds overly complicated.
6412Perhaps we should just have the front end gimplify always; in most cases
6413it's only one function call.
6414
6415 The front end needs to pass all function definitions and top level
6416declarations off to the middle-end so that they can be compiled and
6417emitted to the object file.  For a simple procedural language, it is
6418usually most convenient to do this as each top level declaration or
6419definition is seen.  There is also a distinction to be made between
6420generating functional code and generating complete debug information.
6421The only thing that is absolutely required for functional code is that
6422function and data _definitions_ be passed to the middle-end.  For
6423complete debug information, function, data and type declarations should
6424all be passed as well.
6425
6426 In any case, the front end needs each complete top-level function or
6427data declaration, and each data definition should be passed to
6428'rest_of_decl_compilation'.  Each complete type definition should be
6429passed to 'rest_of_type_compilation'.  Each function definition should
6430be passed to 'cgraph_finalize_function'.
6431
6432 TODO: I know rest_of_compilation currently has all sorts of RTL
6433generation semantics.  I plan to move all code generation bits (both
6434Tree and RTL) to compile_function.  Should we hide cgraph from the front
6435ends and move back to rest_of_compilation as the official interface?
6436Possibly we should rename all three interfaces such that the names match
6437in some meaningful way and that is more descriptive than "rest_of".
6438
6439 The middle-end will, at its option, emit the function and data
6440definitions immediately or queue them for later processing.
6441
6442
6443File: gccint.info,  Node: Gimplification pass,  Next: Pass manager,  Prev: Parsing pass,  Up: Passes
6444
64459.2 Gimplification pass
6446=======================
6447
6448"Gimplification" is a whimsical term for the process of converting the
6449intermediate representation of a function into the GIMPLE language
6450(*note GIMPLE::).  The term stuck, and so words like "gimplification",
6451"gimplify", "gimplifier" and the like are sprinkled throughout this
6452section of code.
6453
6454 While a front end may certainly choose to generate GIMPLE directly if
6455it chooses, this can be a moderately complex process unless the
6456intermediate language used by the front end is already fairly simple.
6457Usually it is easier to generate GENERIC trees plus extensions and let
6458the language-independent gimplifier do most of the work.
6459
6460 The main entry point to this pass is 'gimplify_function_tree' located
6461in 'gimplify.c'.  From here we process the entire function gimplifying
6462each statement in turn.  The main workhorse for this pass is
6463'gimplify_expr'.  Approximately everything passes through here at least
6464once, and it is from here that we invoke the 'lang_hooks.gimplify_expr'
6465callback.
6466
6467 The callback should examine the expression in question and return
6468'GS_UNHANDLED' if the expression is not a language specific construct
6469that requires attention.  Otherwise it should alter the expression in
6470some way to such that forward progress is made toward producing valid
6471GIMPLE.  If the callback is certain that the transformation is complete
6472and the expression is valid GIMPLE, it should return 'GS_ALL_DONE'.
6473Otherwise it should return 'GS_OK', which will cause the expression to
6474be processed again.  If the callback encounters an error during the
6475transformation (because the front end is relying on the gimplification
6476process to finish semantic checks), it should return 'GS_ERROR'.
6477
6478
6479File: gccint.info,  Node: Pass manager,  Next: Tree SSA passes,  Prev: Gimplification pass,  Up: Passes
6480
64819.3 Pass manager
6482================
6483
6484The pass manager is located in 'passes.c', 'tree-optimize.c' and
6485'tree-pass.h'.  Its job is to run all of the individual passes in the
6486correct order, and take care of standard bookkeeping that applies to
6487every pass.
6488
6489 The theory of operation is that each pass defines a structure that
6490represents everything we need to know about that pass--when it should be
6491run, how it should be run, what intermediate language form or
6492on-the-side data structures it needs.  We register the pass to be run in
6493some particular order, and the pass manager arranges for everything to
6494happen in the correct order.
6495
6496 The actuality doesn't completely live up to the theory at present.
6497Command-line switches and 'timevar_id_t' enumerations must still be
6498defined elsewhere.  The pass manager validates constraints but does not
6499attempt to (re-)generate data structures or lower intermediate language
6500form based on the requirements of the next pass.  Nevertheless, what is
6501present is useful, and a far sight better than nothing at all.
6502
6503 Each pass should have a unique name.  Each pass may have its own dump
6504file (for GCC debugging purposes).  Passes with a name starting with a
6505star do not dump anything.  Sometimes passes are supposed to share a
6506dump file / option name.  To still give these unique names, you can use
6507a prefix that is delimited by a space from the part that is used for the
6508dump file / option name.  E.g.  When the pass name is "ud dce", the name
6509used for dump file/options is "dce".
6510
6511 TODO: describe the global variables set up by the pass manager, and a
6512brief description of how a new pass should use it.  I need to look at
6513what info RTL passes use first...
6514
6515
6516File: gccint.info,  Node: Tree SSA passes,  Next: RTL passes,  Prev: Pass manager,  Up: Passes
6517
65189.4 Tree SSA passes
6519===================
6520
6521The following briefly describes the Tree optimization passes that are
6522run after gimplification and what source files they are located in.
6523
6524   * Remove useless statements
6525
6526     This pass is an extremely simple sweep across the gimple code in
6527     which we identify obviously dead code and remove it.  Here we do
6528     things like simplify 'if' statements with constant conditions,
6529     remove exception handling constructs surrounding code that
6530     obviously cannot throw, remove lexical bindings that contain no
6531     variables, and other assorted simplistic cleanups.  The idea is to
6532     get rid of the obvious stuff quickly rather than wait until later
6533     when it's more work to get rid of it.  This pass is located in
6534     'tree-cfg.c' and described by 'pass_remove_useless_stmts'.
6535
6536   * Mudflap declaration registration
6537
6538     If mudflap (*note -fmudflap -fmudflapth -fmudflapir: (gcc)Optimize
6539     Options.) is enabled, we generate code to register some variable
6540     declarations with the mudflap runtime.  Specifically, the runtime
6541     tracks the lifetimes of those variable declarations that have their
6542     addresses taken, or whose bounds are unknown at compile time
6543     ('extern').  This pass generates new exception handling constructs
6544     ('try'/'finally'), and so must run before those are lowered.  In
6545     addition, the pass enqueues declarations of static variables whose
6546     lifetimes extend to the entire program.  The pass is located in
6547     'tree-mudflap.c' and is described by 'pass_mudflap_1'.
6548
6549   * OpenMP lowering
6550
6551     If OpenMP generation ('-fopenmp') is enabled, this pass lowers
6552     OpenMP constructs into GIMPLE.
6553
6554     Lowering of OpenMP constructs involves creating replacement
6555     expressions for local variables that have been mapped using data
6556     sharing clauses, exposing the control flow of most synchronization
6557     directives and adding region markers to facilitate the creation of
6558     the control flow graph.  The pass is located in 'omp-low.c' and is
6559     described by 'pass_lower_omp'.
6560
6561   * OpenMP expansion
6562
6563     If OpenMP generation ('-fopenmp') is enabled, this pass expands
6564     parallel regions into their own functions to be invoked by the
6565     thread library.  The pass is located in 'omp-low.c' and is
6566     described by 'pass_expand_omp'.
6567
6568   * Lower control flow
6569
6570     This pass flattens 'if' statements ('COND_EXPR') and moves lexical
6571     bindings ('BIND_EXPR') out of line.  After this pass, all 'if'
6572     statements will have exactly two 'goto' statements in its 'then'
6573     and 'else' arms.  Lexical binding information for each statement
6574     will be found in 'TREE_BLOCK' rather than being inferred from its
6575     position under a 'BIND_EXPR'.  This pass is found in 'gimple-low.c'
6576     and is described by 'pass_lower_cf'.
6577
6578   * Lower exception handling control flow
6579
6580     This pass decomposes high-level exception handling constructs
6581     ('TRY_FINALLY_EXPR' and 'TRY_CATCH_EXPR') into a form that
6582     explicitly represents the control flow involved.  After this pass,
6583     'lookup_stmt_eh_region' will return a non-negative number for any
6584     statement that may have EH control flow semantics; examine
6585     'tree_can_throw_internal' or 'tree_can_throw_external' for exact
6586     semantics.  Exact control flow may be extracted from
6587     'foreach_reachable_handler'.  The EH region nesting tree is defined
6588     in 'except.h' and built in 'except.c'.  The lowering pass itself is
6589     in 'tree-eh.c' and is described by 'pass_lower_eh'.
6590
6591   * Build the control flow graph
6592
6593     This pass decomposes a function into basic blocks and creates all
6594     of the edges that connect them.  It is located in 'tree-cfg.c' and
6595     is described by 'pass_build_cfg'.
6596
6597   * Find all referenced variables
6598
6599     This pass walks the entire function and collects an array of all
6600     variables referenced in the function, 'referenced_vars'.  The index
6601     at which a variable is found in the array is used as a UID for the
6602     variable within this function.  This data is needed by the SSA
6603     rewriting routines.  The pass is located in 'tree-dfa.c' and is
6604     described by 'pass_referenced_vars'.
6605
6606   * Enter static single assignment form
6607
6608     This pass rewrites the function such that it is in SSA form.  After
6609     this pass, all 'is_gimple_reg' variables will be referenced by
6610     'SSA_NAME', and all occurrences of other variables will be
6611     annotated with 'VDEFS' and 'VUSES'; PHI nodes will have been
6612     inserted as necessary for each basic block.  This pass is located
6613     in 'tree-ssa.c' and is described by 'pass_build_ssa'.
6614
6615   * Warn for uninitialized variables
6616
6617     This pass scans the function for uses of 'SSA_NAME's that are fed
6618     by default definition.  For non-parameter variables, such uses are
6619     uninitialized.  The pass is run twice, before and after
6620     optimization (if turned on).  In the first pass we only warn for
6621     uses that are positively uninitialized; in the second pass we warn
6622     for uses that are possibly uninitialized.  The pass is located in
6623     'tree-ssa.c' and is defined by 'pass_early_warn_uninitialized' and
6624     'pass_late_warn_uninitialized'.
6625
6626   * Dead code elimination
6627
6628     This pass scans the function for statements without side effects
6629     whose result is unused.  It does not do memory life analysis, so
6630     any value that is stored in memory is considered used.  The pass is
6631     run multiple times throughout the optimization process.  It is
6632     located in 'tree-ssa-dce.c' and is described by 'pass_dce'.
6633
6634   * Dominator optimizations
6635
6636     This pass performs trivial dominator-based copy and constant
6637     propagation, expression simplification, and jump threading.  It is
6638     run multiple times throughout the optimization process.  It is
6639     located in 'tree-ssa-dom.c' and is described by 'pass_dominator'.
6640
6641   * Forward propagation of single-use variables
6642
6643     This pass attempts to remove redundant computation by substituting
6644     variables that are used once into the expression that uses them and
6645     seeing if the result can be simplified.  It is located in
6646     'tree-ssa-forwprop.c' and is described by 'pass_forwprop'.
6647
6648   * Copy Renaming
6649
6650     This pass attempts to change the name of compiler temporaries
6651     involved in copy operations such that SSA->normal can coalesce the
6652     copy away.  When compiler temporaries are copies of user variables,
6653     it also renames the compiler temporary to the user variable
6654     resulting in better use of user symbols.  It is located in
6655     'tree-ssa-copyrename.c' and is described by 'pass_copyrename'.
6656
6657   * PHI node optimizations
6658
6659     This pass recognizes forms of PHI inputs that can be represented as
6660     conditional expressions and rewrites them into straight line code.
6661     It is located in 'tree-ssa-phiopt.c' and is described by
6662     'pass_phiopt'.
6663
6664   * May-alias optimization
6665
6666     This pass performs a flow sensitive SSA-based points-to analysis.
6667     The resulting may-alias, must-alias, and escape analysis
6668     information is used to promote variables from in-memory addressable
6669     objects to non-aliased variables that can be renamed into SSA form.
6670     We also update the 'VDEF'/'VUSE' memory tags for non-renameable
6671     aggregates so that we get fewer false kills.  The pass is located
6672     in 'tree-ssa-alias.c' and is described by 'pass_may_alias'.
6673
6674     Interprocedural points-to information is located in
6675     'tree-ssa-structalias.c' and described by 'pass_ipa_pta'.
6676
6677   * Profiling
6678
6679     This pass rewrites the function in order to collect runtime block
6680     and value profiling data.  Such data may be fed back into the
6681     compiler on a subsequent run so as to allow optimization based on
6682     expected execution frequencies.  The pass is located in 'predict.c'
6683     and is described by 'pass_profile'.
6684
6685   * Lower complex arithmetic
6686
6687     This pass rewrites complex arithmetic operations into their
6688     component scalar arithmetic operations.  The pass is located in
6689     'tree-complex.c' and is described by 'pass_lower_complex'.
6690
6691   * Scalar replacement of aggregates
6692
6693     This pass rewrites suitable non-aliased local aggregate variables
6694     into a set of scalar variables.  The resulting scalar variables are
6695     rewritten into SSA form, which allows subsequent optimization
6696     passes to do a significantly better job with them.  The pass is
6697     located in 'tree-sra.c' and is described by 'pass_sra'.
6698
6699   * Dead store elimination
6700
6701     This pass eliminates stores to memory that are subsequently
6702     overwritten by another store, without any intervening loads.  The
6703     pass is located in 'tree-ssa-dse.c' and is described by 'pass_dse'.
6704
6705   * Tail recursion elimination
6706
6707     This pass transforms tail recursion into a loop.  It is located in
6708     'tree-tailcall.c' and is described by 'pass_tail_recursion'.
6709
6710   * Forward store motion
6711
6712     This pass sinks stores and assignments down the flowgraph closer to
6713     their use point.  The pass is located in 'tree-ssa-sink.c' and is
6714     described by 'pass_sink_code'.
6715
6716   * Partial redundancy elimination
6717
6718     This pass eliminates partially redundant computations, as well as
6719     performing load motion.  The pass is located in 'tree-ssa-pre.c'
6720     and is described by 'pass_pre'.
6721
6722     Just before partial redundancy elimination, if
6723     '-funsafe-math-optimizations' is on, GCC tries to convert divisions
6724     to multiplications by the reciprocal.  The pass is located in
6725     'tree-ssa-math-opts.c' and is described by 'pass_cse_reciprocal'.
6726
6727   * Full redundancy elimination
6728
6729     This is a simpler form of PRE that only eliminates redundancies
6730     that occur on all paths.  It is located in 'tree-ssa-pre.c' and
6731     described by 'pass_fre'.
6732
6733   * Loop optimization
6734
6735     The main driver of the pass is placed in 'tree-ssa-loop.c' and
6736     described by 'pass_loop'.
6737
6738     The optimizations performed by this pass are:
6739
6740     Loop invariant motion.  This pass moves only invariants that would
6741     be hard to handle on RTL level (function calls, operations that
6742     expand to nontrivial sequences of insns).  With '-funswitch-loops'
6743     it also moves operands of conditions that are invariant out of the
6744     loop, so that we can use just trivial invariantness analysis in
6745     loop unswitching.  The pass also includes store motion.  The pass
6746     is implemented in 'tree-ssa-loop-im.c'.
6747
6748     Canonical induction variable creation.  This pass creates a simple
6749     counter for number of iterations of the loop and replaces the exit
6750     condition of the loop using it, in case when a complicated analysis
6751     is necessary to determine the number of iterations.  Later
6752     optimizations then may determine the number easily.  The pass is
6753     implemented in 'tree-ssa-loop-ivcanon.c'.
6754
6755     Induction variable optimizations.  This pass performs standard
6756     induction variable optimizations, including strength reduction,
6757     induction variable merging and induction variable elimination.  The
6758     pass is implemented in 'tree-ssa-loop-ivopts.c'.
6759
6760     Loop unswitching.  This pass moves the conditional jumps that are
6761     invariant out of the loops.  To achieve this, a duplicate of the
6762     loop is created for each possible outcome of conditional jump(s).
6763     The pass is implemented in 'tree-ssa-loop-unswitch.c'.  This pass
6764     should eventually replace the RTL level loop unswitching in
6765     'loop-unswitch.c', but currently the RTL level pass is not
6766     completely redundant yet due to deficiencies in tree level alias
6767     analysis.
6768
6769     The optimizations also use various utility functions contained in
6770     'tree-ssa-loop-manip.c', 'cfgloop.c', 'cfgloopanal.c' and
6771     'cfgloopmanip.c'.
6772
6773     Vectorization.  This pass transforms loops to operate on vector
6774     types instead of scalar types.  Data parallelism across loop
6775     iterations is exploited to group data elements from consecutive
6776     iterations into a vector and operate on them in parallel.
6777     Depending on available target support the loop is conceptually
6778     unrolled by a factor 'VF' (vectorization factor), which is the
6779     number of elements operated upon in parallel in each iteration, and
6780     the 'VF' copies of each scalar operation are fused to form a vector
6781     operation.  Additional loop transformations such as peeling and
6782     versioning may take place to align the number of iterations, and to
6783     align the memory accesses in the loop.  The pass is implemented in
6784     'tree-vectorizer.c' (the main driver), 'tree-vect-loop.c' and
6785     'tree-vect-loop-manip.c' (loop specific parts and general loop
6786     utilities), 'tree-vect-slp' (loop-aware SLP functionality),
6787     'tree-vect-stmts.c' and 'tree-vect-data-refs.c'.  Analysis of data
6788     references is in 'tree-data-ref.c'.
6789
6790     SLP Vectorization.  This pass performs vectorization of
6791     straight-line code.  The pass is implemented in 'tree-vectorizer.c'
6792     (the main driver), 'tree-vect-slp.c', 'tree-vect-stmts.c' and
6793     'tree-vect-data-refs.c'.
6794
6795     Autoparallelization.  This pass splits the loop iteration space to
6796     run into several threads.  The pass is implemented in
6797     'tree-parloops.c'.
6798
6799     Graphite is a loop transformation framework based on the polyhedral
6800     model.  Graphite stands for Gimple Represented as Polyhedra.  The
6801     internals of this infrastructure are documented in
6802     <http://gcc.gnu.org/wiki/Graphite>.  The passes working on this
6803     representation are implemented in the various 'graphite-*' files.
6804
6805   * Tree level if-conversion for vectorizer
6806
6807     This pass applies if-conversion to simple loops to help vectorizer.
6808     We identify if convertible loops, if-convert statements and merge
6809     basic blocks in one big block.  The idea is to present loop in such
6810     form so that vectorizer can have one to one mapping between
6811     statements and available vector operations.  This pass is located
6812     in 'tree-if-conv.c' and is described by 'pass_if_conversion'.
6813
6814   * Conditional constant propagation
6815
6816     This pass relaxes a lattice of values in order to identify those
6817     that must be constant even in the presence of conditional branches.
6818     The pass is located in 'tree-ssa-ccp.c' and is described by
6819     'pass_ccp'.
6820
6821     A related pass that works on memory loads and stores, and not just
6822     register values, is located in 'tree-ssa-ccp.c' and described by
6823     'pass_store_ccp'.
6824
6825   * Conditional copy propagation
6826
6827     This is similar to constant propagation but the lattice of values
6828     is the "copy-of" relation.  It eliminates redundant copies from the
6829     code.  The pass is located in 'tree-ssa-copy.c' and described by
6830     'pass_copy_prop'.
6831
6832     A related pass that works on memory copies, and not just register
6833     copies, is located in 'tree-ssa-copy.c' and described by
6834     'pass_store_copy_prop'.
6835
6836   * Value range propagation
6837
6838     This transformation is similar to constant propagation but instead
6839     of propagating single constant values, it propagates known value
6840     ranges.  The implementation is based on Patterson's range
6841     propagation algorithm (Accurate Static Branch Prediction by Value
6842     Range Propagation, J. R. C. Patterson, PLDI '95).  In contrast to
6843     Patterson's algorithm, this implementation does not propagate
6844     branch probabilities nor it uses more than a single range per SSA
6845     name.  This means that the current implementation cannot be used
6846     for branch prediction (though adapting it would not be difficult).
6847     The pass is located in 'tree-vrp.c' and is described by 'pass_vrp'.
6848
6849   * Folding built-in functions
6850
6851     This pass simplifies built-in functions, as applicable, with
6852     constant arguments or with inferable string lengths.  It is located
6853     in 'tree-ssa-ccp.c' and is described by 'pass_fold_builtins'.
6854
6855   * Split critical edges
6856
6857     This pass identifies critical edges and inserts empty basic blocks
6858     such that the edge is no longer critical.  The pass is located in
6859     'tree-cfg.c' and is described by 'pass_split_crit_edges'.
6860
6861   * Control dependence dead code elimination
6862
6863     This pass is a stronger form of dead code elimination that can
6864     eliminate unnecessary control flow statements.  It is located in
6865     'tree-ssa-dce.c' and is described by 'pass_cd_dce'.
6866
6867   * Tail call elimination
6868
6869     This pass identifies function calls that may be rewritten into
6870     jumps.  No code transformation is actually applied here, but the
6871     data and control flow problem is solved.  The code transformation
6872     requires target support, and so is delayed until RTL.  In the
6873     meantime 'CALL_EXPR_TAILCALL' is set indicating the possibility.
6874     The pass is located in 'tree-tailcall.c' and is described by
6875     'pass_tail_calls'.  The RTL transformation is handled by
6876     'fixup_tail_calls' in 'calls.c'.
6877
6878   * Warn for function return without value
6879
6880     For non-void functions, this pass locates return statements that do
6881     not specify a value and issues a warning.  Such a statement may
6882     have been injected by falling off the end of the function.  This
6883     pass is run last so that we have as much time as possible to prove
6884     that the statement is not reachable.  It is located in 'tree-cfg.c'
6885     and is described by 'pass_warn_function_return'.
6886
6887   * Mudflap statement annotation
6888
6889     If mudflap is enabled, we rewrite some memory accesses with code to
6890     validate that the memory access is correct.  In particular,
6891     expressions involving pointer dereferences ('INDIRECT_REF',
6892     'ARRAY_REF', etc.)  are replaced by code that checks the selected
6893     address range against the mudflap runtime's database of valid
6894     regions.  This check includes an inline lookup into a direct-mapped
6895     cache, based on shift/mask operations of the pointer value, with a
6896     fallback function call into the runtime.  The pass is located in
6897     'tree-mudflap.c' and is described by 'pass_mudflap_2'.
6898
6899   * Leave static single assignment form
6900
6901     This pass rewrites the function such that it is in normal form.  At
6902     the same time, we eliminate as many single-use temporaries as
6903     possible, so the intermediate language is no longer GIMPLE, but
6904     GENERIC.  The pass is located in 'tree-outof-ssa.c' and is
6905     described by 'pass_del_ssa'.
6906
6907   * Merge PHI nodes that feed into one another
6908
6909     This is part of the CFG cleanup passes.  It attempts to join PHI
6910     nodes from a forwarder CFG block into another block with PHI nodes.
6911     The pass is located in 'tree-cfgcleanup.c' and is described by
6912     'pass_merge_phi'.
6913
6914   * Return value optimization
6915
6916     If a function always returns the same local variable, and that
6917     local variable is an aggregate type, then the variable is replaced
6918     with the return value for the function (i.e., the function's
6919     DECL_RESULT). This is equivalent to the C++ named return value
6920     optimization applied to GIMPLE.  The pass is located in
6921     'tree-nrv.c' and is described by 'pass_nrv'.
6922
6923   * Return slot optimization
6924
6925     If a function returns a memory object and is called as 'var =
6926     foo()', this pass tries to change the call so that the address of
6927     'var' is sent to the caller to avoid an extra memory copy.  This
6928     pass is located in 'tree-nrv.c' and is described by
6929     'pass_return_slot'.
6930
6931   * Optimize calls to '__builtin_object_size'
6932
6933     This is a propagation pass similar to CCP that tries to remove
6934     calls to '__builtin_object_size' when the size of the object can be
6935     computed at compile-time.  This pass is located in
6936     'tree-object-size.c' and is described by 'pass_object_sizes'.
6937
6938   * Loop invariant motion
6939
6940     This pass removes expensive loop-invariant computations out of
6941     loops.  The pass is located in 'tree-ssa-loop.c' and described by
6942     'pass_lim'.
6943
6944   * Loop nest optimizations
6945
6946     This is a family of loop transformations that works on loop nests.
6947     It includes loop interchange, scaling, skewing and reversal and
6948     they are all geared to the optimization of data locality in array
6949     traversals and the removal of dependencies that hamper
6950     optimizations such as loop parallelization and vectorization.  The
6951     pass is located in 'tree-loop-linear.c' and described by
6952     'pass_linear_transform'.
6953
6954   * Removal of empty loops
6955
6956     This pass removes loops with no code in them.  The pass is located
6957     in 'tree-ssa-loop-ivcanon.c' and described by 'pass_empty_loop'.
6958
6959   * Unrolling of small loops
6960
6961     This pass completely unrolls loops with few iterations.  The pass
6962     is located in 'tree-ssa-loop-ivcanon.c' and described by
6963     'pass_complete_unroll'.
6964
6965   * Predictive commoning
6966
6967     This pass makes the code reuse the computations from the previous
6968     iterations of the loops, especially loads and stores to memory.  It
6969     does so by storing the values of these computations to a bank of
6970     temporary variables that are rotated at the end of loop.  To avoid
6971     the need for this rotation, the loop is then unrolled and the
6972     copies of the loop body are rewritten to use the appropriate
6973     version of the temporary variable.  This pass is located in
6974     'tree-predcom.c' and described by 'pass_predcom'.
6975
6976   * Array prefetching
6977
6978     This pass issues prefetch instructions for array references inside
6979     loops.  The pass is located in 'tree-ssa-loop-prefetch.c' and
6980     described by 'pass_loop_prefetch'.
6981
6982   * Reassociation
6983
6984     This pass rewrites arithmetic expressions to enable optimizations
6985     that operate on them, like redundancy elimination and
6986     vectorization.  The pass is located in 'tree-ssa-reassoc.c' and
6987     described by 'pass_reassoc'.
6988
6989   * Optimization of 'stdarg' functions
6990
6991     This pass tries to avoid the saving of register arguments into the
6992     stack on entry to 'stdarg' functions.  If the function doesn't use
6993     any 'va_start' macros, no registers need to be saved.  If
6994     'va_start' macros are used, the 'va_list' variables don't escape
6995     the function, it is only necessary to save registers that will be
6996     used in 'va_arg' macros.  For instance, if 'va_arg' is only used
6997     with integral types in the function, floating point registers don't
6998     need to be saved.  This pass is located in 'tree-stdarg.c' and
6999     described by 'pass_stdarg'.
7000
7001
7002File: gccint.info,  Node: RTL passes,  Prev: Tree SSA passes,  Up: Passes
7003
70049.5 RTL passes
7005==============
7006
7007The following briefly describes the RTL generation and optimization
7008passes that are run after the Tree optimization passes.
7009
7010   * RTL generation
7011
7012     The source files for RTL generation include 'stmt.c', 'calls.c',
7013     'expr.c', 'explow.c', 'expmed.c', 'function.c', 'optabs.c' and
7014     'emit-rtl.c'.  Also, the file 'insn-emit.c', generated from the
7015     machine description by the program 'genemit', is used in this pass.
7016     The header file 'expr.h' is used for communication within this
7017     pass.
7018
7019     The header files 'insn-flags.h' and 'insn-codes.h', generated from
7020     the machine description by the programs 'genflags' and 'gencodes',
7021     tell this pass which standard names are available for use and which
7022     patterns correspond to them.
7023
7024   * Generation of exception landing pads
7025
7026     This pass generates the glue that handles communication between the
7027     exception handling library routines and the exception handlers
7028     within the function.  Entry points in the function that are invoked
7029     by the exception handling library are called "landing pads".  The
7030     code for this pass is located in 'except.c'.
7031
7032   * Control flow graph cleanup
7033
7034     This pass removes unreachable code, simplifies jumps to next, jumps
7035     to jump, jumps across jumps, etc.  The pass is run multiple times.
7036     For historical reasons, it is occasionally referred to as the "jump
7037     optimization pass".  The bulk of the code for this pass is in
7038     'cfgcleanup.c', and there are support routines in 'cfgrtl.c' and
7039     'jump.c'.
7040
7041   * Forward propagation of single-def values
7042
7043     This pass attempts to remove redundant computation by substituting
7044     variables that come from a single definition, and seeing if the
7045     result can be simplified.  It performs copy propagation and
7046     addressing mode selection.  The pass is run twice, with values
7047     being propagated into loops only on the second run.  The code is
7048     located in 'fwprop.c'.
7049
7050   * Common subexpression elimination
7051
7052     This pass removes redundant computation within basic blocks, and
7053     optimizes addressing modes based on cost.  The pass is run twice.
7054     The code for this pass is located in 'cse.c'.
7055
7056   * Global common subexpression elimination
7057
7058     This pass performs two different types of GCSE depending on whether
7059     you are optimizing for size or not (LCM based GCSE tends to
7060     increase code size for a gain in speed, while Morel-Renvoise based
7061     GCSE does not).  When optimizing for size, GCSE is done using
7062     Morel-Renvoise Partial Redundancy Elimination, with the exception
7063     that it does not try to move invariants out of loops--that is left
7064     to the loop optimization pass.  If MR PRE GCSE is done, code
7065     hoisting (aka unification) is also done, as well as load motion.
7066     If you are optimizing for speed, LCM (lazy code motion) based GCSE
7067     is done.  LCM is based on the work of Knoop, Ruthing, and Steffen.
7068     LCM based GCSE also does loop invariant code motion.  We also
7069     perform load and store motion when optimizing for speed.
7070     Regardless of which type of GCSE is used, the GCSE pass also
7071     performs global constant and copy propagation.  The source file for
7072     this pass is 'gcse.c', and the LCM routines are in 'lcm.c'.
7073
7074   * Loop optimization
7075
7076     This pass performs several loop related optimizations.  The source
7077     files 'cfgloopanal.c' and 'cfgloopmanip.c' contain generic loop
7078     analysis and manipulation code.  Initialization and finalization of
7079     loop structures is handled by 'loop-init.c'.  A loop invariant
7080     motion pass is implemented in 'loop-invariant.c'.  Basic block
7081     level optimizations--unrolling, peeling and unswitching loops-- are
7082     implemented in 'loop-unswitch.c' and 'loop-unroll.c'.  Replacing of
7083     the exit condition of loops by special machine-dependent
7084     instructions is handled by 'loop-doloop.c'.
7085
7086   * Jump bypassing
7087
7088     This pass is an aggressive form of GCSE that transforms the control
7089     flow graph of a function by propagating constants into conditional
7090     branch instructions.  The source file for this pass is 'gcse.c'.
7091
7092   * If conversion
7093
7094     This pass attempts to replace conditional branches and surrounding
7095     assignments with arithmetic, boolean value producing comparison
7096     instructions, and conditional move instructions.  In the very last
7097     invocation after reload/LRA, it will generate predicated
7098     instructions when supported by the target.  The code is located in
7099     'ifcvt.c'.
7100
7101   * Web construction
7102
7103     This pass splits independent uses of each pseudo-register.  This
7104     can improve effect of the other transformation, such as CSE or
7105     register allocation.  The code for this pass is located in 'web.c'.
7106
7107   * Instruction combination
7108
7109     This pass attempts to combine groups of two or three instructions
7110     that are related by data flow into single instructions.  It
7111     combines the RTL expressions for the instructions by substitution,
7112     simplifies the result using algebra, and then attempts to match the
7113     result against the machine description.  The code is located in
7114     'combine.c'.
7115
7116   * Register movement
7117
7118     This pass looks for cases where matching constraints would force an
7119     instruction to need a reload, and this reload would be a
7120     register-to-register move.  It then attempts to change the
7121     registers used by the instruction to avoid the move instruction.
7122     The code is located in 'regmove.c'.
7123
7124   * Mode switching optimization
7125
7126     This pass looks for instructions that require the processor to be
7127     in a specific "mode" and minimizes the number of mode changes
7128     required to satisfy all users.  What these modes are, and what they
7129     apply to are completely target-specific.  The code for this pass is
7130     located in 'mode-switching.c'.
7131
7132   * Modulo scheduling
7133
7134     This pass looks at innermost loops and reorders their instructions
7135     by overlapping different iterations.  Modulo scheduling is
7136     performed immediately before instruction scheduling.  The code for
7137     this pass is located in 'modulo-sched.c'.
7138
7139   * Instruction scheduling
7140
7141     This pass looks for instructions whose output will not be available
7142     by the time that it is used in subsequent instructions.  Memory
7143     loads and floating point instructions often have this behavior on
7144     RISC machines.  It re-orders instructions within a basic block to
7145     try to separate the definition and use of items that otherwise
7146     would cause pipeline stalls.  This pass is performed twice, before
7147     and after register allocation.  The code for this pass is located
7148     in 'haifa-sched.c', 'sched-deps.c', 'sched-ebb.c', 'sched-rgn.c'
7149     and 'sched-vis.c'.
7150
7151   * Register allocation
7152
7153     These passes make sure that all occurrences of pseudo registers are
7154     eliminated, either by allocating them to a hard register, replacing
7155     them by an equivalent expression (e.g. a constant) or by placing
7156     them on the stack.  This is done in several subpasses:
7157
7158        * Register move optimizations.  This pass makes some simple RTL
7159          code transformations which improve the subsequent register
7160          allocation.  The source file is 'regmove.c'.
7161
7162        * The integrated register allocator (IRA).  It is called
7163          integrated because coalescing, register live range splitting,
7164          and hard register preferencing are done on-the-fly during
7165          coloring.  It also has better integration with the reload/LRA
7166          pass.  Pseudo-registers spilled by the allocator or the
7167          reload/LRA have still a chance to get hard-registers if the
7168          reload/LRA evicts some pseudo-registers from hard-registers.
7169          The allocator helps to choose better pseudos for spilling
7170          based on their live ranges and to coalesce stack slots
7171          allocated for the spilled pseudo-registers.  IRA is a regional
7172          register allocator which is transformed into Chaitin-Briggs
7173          allocator if there is one region.  By default, IRA chooses
7174          regions using register pressure but the user can force it to
7175          use one region or regions corresponding to all loops.
7176
7177          Source files of the allocator are 'ira.c', 'ira-build.c',
7178          'ira-costs.c', 'ira-conflicts.c', 'ira-color.c', 'ira-emit.c',
7179          'ira-lives', plus header files 'ira.h' and 'ira-int.h' used
7180          for the communication between the allocator and the rest of
7181          the compiler and between the IRA files.
7182
7183        * Reloading.  This pass renumbers pseudo registers with the
7184          hardware registers numbers they were allocated.  Pseudo
7185          registers that did not get hard registers are replaced with
7186          stack slots.  Then it finds instructions that are invalid
7187          because a value has failed to end up in a register, or has
7188          ended up in a register of the wrong kind.  It fixes up these
7189          instructions by reloading the problematical values temporarily
7190          into registers.  Additional instructions are generated to do
7191          the copying.
7192
7193          The reload pass also optionally eliminates the frame pointer
7194          and inserts instructions to save and restore call-clobbered
7195          registers around calls.
7196
7197          Source files are 'reload.c' and 'reload1.c', plus the header
7198          'reload.h' used for communication between them.
7199
7200        * This pass is a modern replacement of the reload pass.  Source
7201          files are 'lra.c', 'lra-assign.c', 'lra-coalesce.c',
7202          'lra-constraints.c', 'lra-eliminations.c', 'lra-equivs.c',
7203          'lra-lives.c', 'lra-saves.c', 'lra-spills.c', the header
7204          'lra-int.h' used for communication between them, and the
7205          header 'lra.h' used for communication between LRA and the rest
7206          of compiler.
7207
7208          Unlike the reload pass, intermediate LRA decisions are
7209          reflected in RTL as much as possible.  This reduces the number
7210          of target-dependent macros and hooks, leaving instruction
7211          constraints as the primary source of control.
7212
7213          LRA is run on targets for which TARGET_LRA_P returns true.
7214
7215   * Basic block reordering
7216
7217     This pass implements profile guided code positioning.  If profile
7218     information is not available, various types of static analysis are
7219     performed to make the predictions normally coming from the profile
7220     feedback (IE execution frequency, branch probability, etc).  It is
7221     implemented in the file 'bb-reorder.c', and the various prediction
7222     routines are in 'predict.c'.
7223
7224   * Variable tracking
7225
7226     This pass computes where the variables are stored at each position
7227     in code and generates notes describing the variable locations to
7228     RTL code.  The location lists are then generated according to these
7229     notes to debug information if the debugging information format
7230     supports location lists.  The code is located in 'var-tracking.c'.
7231
7232   * Delayed branch scheduling
7233
7234     This optional pass attempts to find instructions that can go into
7235     the delay slots of other instructions, usually jumps and calls.
7236     The code for this pass is located in 'reorg.c'.
7237
7238   * Branch shortening
7239
7240     On many RISC machines, branch instructions have a limited range.
7241     Thus, longer sequences of instructions must be used for long
7242     branches.  In this pass, the compiler figures out what how far each
7243     instruction will be from each other instruction, and therefore
7244     whether the usual instructions, or the longer sequences, must be
7245     used for each branch.  The code for this pass is located in
7246     'final.c'.
7247
7248   * Register-to-stack conversion
7249
7250     Conversion from usage of some hard registers to usage of a register
7251     stack may be done at this point.  Currently, this is supported only
7252     for the floating-point registers of the Intel 80387 coprocessor.
7253     The code for this pass is located in 'reg-stack.c'.
7254
7255   * Final
7256
7257     This pass outputs the assembler code for the function.  The source
7258     files are 'final.c' plus 'insn-output.c'; the latter is generated
7259     automatically from the machine description by the tool 'genoutput'.
7260     The header file 'conditions.h' is used for communication between
7261     these files.  If mudflap is enabled, the queue of deferred
7262     declarations and any addressed constants (e.g., string literals) is
7263     processed by 'mudflap_finish_file' into a synthetic constructor
7264     function containing calls into the mudflap runtime.
7265
7266   * Debugging information output
7267
7268     This is run after final because it must output the stack slot
7269     offsets for pseudo registers that did not get hard registers.
7270     Source files are 'dbxout.c' for DBX symbol table format, 'sdbout.c'
7271     for SDB symbol table format, 'dwarfout.c' for DWARF symbol table
7272     format, files 'dwarf2out.c' and 'dwarf2asm.c' for DWARF2 symbol
7273     table format, and 'vmsdbgout.c' for VMS debug symbol table format.
7274
7275
7276File: gccint.info,  Node: RTL,  Next: GENERIC,  Prev: Passes,  Up: Top
7277
727810 RTL Representation
7279*********************
7280
7281The last part of the compiler work is done on a low-level intermediate
7282representation called Register Transfer Language.  In this language, the
7283instructions to be output are described, pretty much one by one, in an
7284algebraic form that describes what the instruction does.
7285
7286 RTL is inspired by Lisp lists.  It has both an internal form, made up
7287of structures that point at other structures, and a textual form that is
7288used in the machine description and in printed debugging dumps.  The
7289textual form uses nested parentheses to indicate the pointers in the
7290internal form.
7291
7292* Menu:
7293
7294* RTL Objects::       Expressions vs vectors vs strings vs integers.
7295* RTL Classes::       Categories of RTL expression objects, and their structure.
7296* Accessors::         Macros to access expression operands or vector elts.
7297* Special Accessors:: Macros to access specific annotations on RTL.
7298* Flags::             Other flags in an RTL expression.
7299* Machine Modes::     Describing the size and format of a datum.
7300* Constants::         Expressions with constant values.
7301* Regs and Memory::   Expressions representing register contents or memory.
7302* Arithmetic::        Expressions representing arithmetic on other expressions.
7303* Comparisons::       Expressions representing comparison of expressions.
7304* Bit-Fields::        Expressions representing bit-fields in memory or reg.
7305* Vector Operations:: Expressions involving vector datatypes.
7306* Conversions::       Extending, truncating, floating or fixing.
7307* RTL Declarations::  Declaring volatility, constancy, etc.
7308* Side Effects::      Expressions for storing in registers, etc.
7309* Incdec::            Embedded side-effects for autoincrement addressing.
7310* Assembler::         Representing 'asm' with operands.
7311* Debug Information:: Expressions representing debugging information.
7312* Insns::             Expression types for entire insns.
7313* Calls::             RTL representation of function call insns.
7314* Sharing::           Some expressions are unique; others *must* be copied.
7315* Reading RTL::       Reading textual RTL from a file.
7316
7317
7318File: gccint.info,  Node: RTL Objects,  Next: RTL Classes,  Up: RTL
7319
732010.1 RTL Object Types
7321=====================
7322
7323RTL uses five kinds of objects: expressions, integers, wide integers,
7324strings and vectors.  Expressions are the most important ones.  An RTL
7325expression ("RTX", for short) is a C structure, but it is usually
7326referred to with a pointer; a type that is given the typedef name 'rtx'.
7327
7328 An integer is simply an 'int'; their written form uses decimal digits.
7329A wide integer is an integral object whose type is 'HOST_WIDE_INT';
7330their written form uses decimal digits.
7331
7332 A string is a sequence of characters.  In core it is represented as a
7333'char *' in usual C fashion, and it is written in C syntax as well.
7334However, strings in RTL may never be null.  If you write an empty string
7335in a machine description, it is represented in core as a null pointer
7336rather than as a pointer to a null character.  In certain contexts,
7337these null pointers instead of strings are valid.  Within RTL code,
7338strings are most commonly found inside 'symbol_ref' expressions, but
7339they appear in other contexts in the RTL expressions that make up
7340machine descriptions.
7341
7342 In a machine description, strings are normally written with double
7343quotes, as you would in C.  However, strings in machine descriptions may
7344extend over many lines, which is invalid C, and adjacent string
7345constants are not concatenated as they are in C.  Any string constant
7346may be surrounded with a single set of parentheses.  Sometimes this
7347makes the machine description easier to read.
7348
7349 There is also a special syntax for strings, which can be useful when C
7350code is embedded in a machine description.  Wherever a string can
7351appear, it is also valid to write a C-style brace block.  The entire
7352brace block, including the outermost pair of braces, is considered to be
7353the string constant.  Double quote characters inside the braces are not
7354special.  Therefore, if you write string constants in the C code, you
7355need not escape each quote character with a backslash.
7356
7357 A vector contains an arbitrary number of pointers to expressions.  The
7358number of elements in the vector is explicitly present in the vector.
7359The written form of a vector consists of square brackets ('[...]')
7360surrounding the elements, in sequence and with whitespace separating
7361them.  Vectors of length zero are not created; null pointers are used
7362instead.
7363
7364 Expressions are classified by "expression codes" (also called RTX
7365codes).  The expression code is a name defined in 'rtl.def', which is
7366also (in uppercase) a C enumeration constant.  The possible expression
7367codes and their meanings are machine-independent.  The code of an RTX
7368can be extracted with the macro 'GET_CODE (X)' and altered with
7369'PUT_CODE (X, NEWCODE)'.
7370
7371 The expression code determines how many operands the expression
7372contains, and what kinds of objects they are.  In RTL, unlike Lisp, you
7373cannot tell by looking at an operand what kind of object it is.
7374Instead, you must know from its context--from the expression code of the
7375containing expression.  For example, in an expression of code 'subreg',
7376the first operand is to be regarded as an expression and the second
7377operand as an integer.  In an expression of code 'plus', there are two
7378operands, both of which are to be regarded as expressions.  In a
7379'symbol_ref' expression, there is one operand, which is to be regarded
7380as a string.
7381
7382 Expressions are written as parentheses containing the name of the
7383expression type, its flags and machine mode if any, and then the
7384operands of the expression (separated by spaces).
7385
7386 Expression code names in the 'md' file are written in lowercase, but
7387when they appear in C code they are written in uppercase.  In this
7388manual, they are shown as follows: 'const_int'.
7389
7390 In a few contexts a null pointer is valid where an expression is
7391normally wanted.  The written form of this is '(nil)'.
7392
7393
7394File: gccint.info,  Node: RTL Classes,  Next: Accessors,  Prev: RTL Objects,  Up: RTL
7395
739610.2 RTL Classes and Formats
7397============================
7398
7399The various expression codes are divided into several "classes", which
7400are represented by single characters.  You can determine the class of an
7401RTX code with the macro 'GET_RTX_CLASS (CODE)'.  Currently, 'rtl.def'
7402defines these classes:
7403
7404'RTX_OBJ'
7405     An RTX code that represents an actual object, such as a register
7406     ('REG') or a memory location ('MEM', 'SYMBOL_REF').  'LO_SUM') is
7407     also included; instead, 'SUBREG' and 'STRICT_LOW_PART' are not in
7408     this class, but in class 'x'.
7409
7410'RTX_CONST_OBJ'
7411     An RTX code that represents a constant object.  'HIGH' is also
7412     included in this class.
7413
7414'RTX_COMPARE'
7415     An RTX code for a non-symmetric comparison, such as 'GEU' or 'LT'.
7416
7417'RTX_COMM_COMPARE'
7418     An RTX code for a symmetric (commutative) comparison, such as 'EQ'
7419     or 'ORDERED'.
7420
7421'RTX_UNARY'
7422     An RTX code for a unary arithmetic operation, such as 'NEG', 'NOT',
7423     or 'ABS'.  This category also includes value extension (sign or
7424     zero) and conversions between integer and floating point.
7425
7426'RTX_COMM_ARITH'
7427     An RTX code for a commutative binary operation, such as 'PLUS' or
7428     'AND'.  'NE' and 'EQ' are comparisons, so they have class '<'.
7429
7430'RTX_BIN_ARITH'
7431     An RTX code for a non-commutative binary operation, such as
7432     'MINUS', 'DIV', or 'ASHIFTRT'.
7433
7434'RTX_BITFIELD_OPS'
7435     An RTX code for a bit-field operation.  Currently only
7436     'ZERO_EXTRACT' and 'SIGN_EXTRACT'.  These have three inputs and are
7437     lvalues (so they can be used for insertion as well).  *Note
7438     Bit-Fields::.
7439
7440'RTX_TERNARY'
7441     An RTX code for other three input operations.  Currently only
7442     'IF_THEN_ELSE', 'VEC_MERGE', 'SIGN_EXTRACT', 'ZERO_EXTRACT', and
7443     'FMA'.
7444
7445'RTX_INSN'
7446     An RTX code for an entire instruction: 'INSN', 'JUMP_INSN', and
7447     'CALL_INSN'.  *Note Insns::.
7448
7449'RTX_MATCH'
7450     An RTX code for something that matches in insns, such as
7451     'MATCH_DUP'.  These only occur in machine descriptions.
7452
7453'RTX_AUTOINC'
7454     An RTX code for an auto-increment addressing mode, such as
7455     'POST_INC'.
7456
7457'RTX_EXTRA'
7458     All other RTX codes.  This category includes the remaining codes
7459     used only in machine descriptions ('DEFINE_*', etc.).  It also
7460     includes all the codes describing side effects ('SET', 'USE',
7461     'CLOBBER', etc.)  and the non-insns that may appear on an insn
7462     chain, such as 'NOTE', 'BARRIER', and 'CODE_LABEL'.  'SUBREG' is
7463     also part of this class.
7464
7465 For each expression code, 'rtl.def' specifies the number of contained
7466objects and their kinds using a sequence of characters called the
7467"format" of the expression code.  For example, the format of 'subreg' is
7468'ei'.
7469
7470 These are the most commonly used format characters:
7471
7472'e'
7473     An expression (actually a pointer to an expression).
7474
7475'i'
7476     An integer.
7477
7478'w'
7479     A wide integer.
7480
7481's'
7482     A string.
7483
7484'E'
7485     A vector of expressions.
7486
7487 A few other format characters are used occasionally:
7488
7489'u'
7490     'u' is equivalent to 'e' except that it is printed differently in
7491     debugging dumps.  It is used for pointers to insns.
7492
7493'n'
7494     'n' is equivalent to 'i' except that it is printed differently in
7495     debugging dumps.  It is used for the line number or code number of
7496     a 'note' insn.
7497
7498'S'
7499     'S' indicates a string which is optional.  In the RTL objects in
7500     core, 'S' is equivalent to 's', but when the object is read, from
7501     an 'md' file, the string value of this operand may be omitted.  An
7502     omitted string is taken to be the null string.
7503
7504'V'
7505     'V' indicates a vector which is optional.  In the RTL objects in
7506     core, 'V' is equivalent to 'E', but when the object is read from an
7507     'md' file, the vector value of this operand may be omitted.  An
7508     omitted vector is effectively the same as a vector of no elements.
7509
7510'B'
7511     'B' indicates a pointer to basic block structure.
7512
7513'0'
7514     '0' means a slot whose contents do not fit any normal category.
7515     '0' slots are not printed at all in dumps, and are often used in
7516     special ways by small parts of the compiler.
7517
7518 There are macros to get the number of operands and the format of an
7519expression code:
7520
7521'GET_RTX_LENGTH (CODE)'
7522     Number of operands of an RTX of code CODE.
7523
7524'GET_RTX_FORMAT (CODE)'
7525     The format of an RTX of code CODE, as a C string.
7526
7527 Some classes of RTX codes always have the same format.  For example, it
7528is safe to assume that all comparison operations have format 'ee'.
7529
7530'1'
7531     All codes of this class have format 'e'.
7532
7533'<'
7534'c'
7535'2'
7536     All codes of these classes have format 'ee'.
7537
7538'b'
7539'3'
7540     All codes of these classes have format 'eee'.
7541
7542'i'
7543     All codes of this class have formats that begin with 'iuueiee'.
7544     *Note Insns::.  Note that not all RTL objects linked onto an insn
7545     chain are of class 'i'.
7546
7547'o'
7548'm'
7549'x'
7550     You can make no assumptions about the format of these codes.
7551
7552
7553File: gccint.info,  Node: Accessors,  Next: Special Accessors,  Prev: RTL Classes,  Up: RTL
7554
755510.3 Access to Operands
7556=======================
7557
7558Operands of expressions are accessed using the macros 'XEXP', 'XINT',
7559'XWINT' and 'XSTR'.  Each of these macros takes two arguments: an
7560expression-pointer (RTX) and an operand number (counting from zero).
7561Thus,
7562
7563     XEXP (X, 2)
7564
7565accesses operand 2 of expression X, as an expression.
7566
7567     XINT (X, 2)
7568
7569accesses the same operand as an integer.  'XSTR', used in the same
7570fashion, would access it as a string.
7571
7572 Any operand can be accessed as an integer, as an expression or as a
7573string.  You must choose the correct method of access for the kind of
7574value actually stored in the operand.  You would do this based on the
7575expression code of the containing expression.  That is also how you
7576would know how many operands there are.
7577
7578 For example, if X is a 'subreg' expression, you know that it has two
7579operands which can be correctly accessed as 'XEXP (X, 0)' and 'XINT (X,
75801)'.  If you did 'XINT (X, 0)', you would get the address of the
7581expression operand but cast as an integer; that might occasionally be
7582useful, but it would be cleaner to write '(int) XEXP (X, 0)'.  'XEXP (X,
75831)' would also compile without error, and would return the second,
7584integer operand cast as an expression pointer, which would probably
7585result in a crash when accessed.  Nothing stops you from writing 'XEXP
7586(X, 28)' either, but this will access memory past the end of the
7587expression with unpredictable results.
7588
7589 Access to operands which are vectors is more complicated.  You can use
7590the macro 'XVEC' to get the vector-pointer itself, or the macros
7591'XVECEXP' and 'XVECLEN' to access the elements and length of a vector.
7592
7593'XVEC (EXP, IDX)'
7594     Access the vector-pointer which is operand number IDX in EXP.
7595
7596'XVECLEN (EXP, IDX)'
7597     Access the length (number of elements) in the vector which is in
7598     operand number IDX in EXP.  This value is an 'int'.
7599
7600'XVECEXP (EXP, IDX, ELTNUM)'
7601     Access element number ELTNUM in the vector which is in operand
7602     number IDX in EXP.  This value is an RTX.
7603
7604     It is up to you to make sure that ELTNUM is not negative and is
7605     less than 'XVECLEN (EXP, IDX)'.
7606
7607 All the macros defined in this section expand into lvalues and
7608therefore can be used to assign the operands, lengths and vector
7609elements as well as to access them.
7610
7611
7612File: gccint.info,  Node: Special Accessors,  Next: Flags,  Prev: Accessors,  Up: RTL
7613
761410.4 Access to Special Operands
7615===============================
7616
7617Some RTL nodes have special annotations associated with them.
7618
7619'MEM'
7620     'MEM_ALIAS_SET (X)'
7621          If 0, X is not in any alias set, and may alias anything.
7622          Otherwise, X can only alias 'MEM's in a conflicting alias set.
7623          This value is set in a language-dependent manner in the
7624          front-end, and should not be altered in the back-end.  In some
7625          front-ends, these numbers may correspond in some way to types,
7626          or other language-level entities, but they need not, and the
7627          back-end makes no such assumptions.  These set numbers are
7628          tested with 'alias_sets_conflict_p'.
7629
7630     'MEM_EXPR (X)'
7631          If this register is known to hold the value of some user-level
7632          declaration, this is that tree node.  It may also be a
7633          'COMPONENT_REF', in which case this is some field reference,
7634          and 'TREE_OPERAND (X, 0)' contains the declaration, or another
7635          'COMPONENT_REF', or null if there is no compile-time object
7636          associated with the reference.
7637
7638     'MEM_OFFSET_KNOWN_P (X)'
7639          True if the offset of the memory reference from 'MEM_EXPR' is
7640          known.  'MEM_OFFSET (X)' provides the offset if so.
7641
7642     'MEM_OFFSET (X)'
7643          The offset from the start of 'MEM_EXPR'.  The value is only
7644          valid if 'MEM_OFFSET_KNOWN_P (X)' is true.
7645
7646     'MEM_SIZE_KNOWN_P (X)'
7647          True if the size of the memory reference is known.  'MEM_SIZE
7648          (X)' provides its size if so.
7649
7650     'MEM_SIZE (X)'
7651          The size in bytes of the memory reference.  This is mostly
7652          relevant for 'BLKmode' references as otherwise the size is
7653          implied by the mode.  The value is only valid if
7654          'MEM_SIZE_KNOWN_P (X)' is true.
7655
7656     'MEM_ALIGN (X)'
7657          The known alignment in bits of the memory reference.
7658
7659     'MEM_ADDR_SPACE (X)'
7660          The address space of the memory reference.  This will commonly
7661          be zero for the generic address space.
7662
7663'REG'
7664     'ORIGINAL_REGNO (X)'
7665          This field holds the number the register "originally" had; for
7666          a pseudo register turned into a hard reg this will hold the
7667          old pseudo register number.
7668
7669     'REG_EXPR (X)'
7670          If this register is known to hold the value of some user-level
7671          declaration, this is that tree node.
7672
7673     'REG_OFFSET (X)'
7674          If this register is known to hold the value of some user-level
7675          declaration, this is the offset into that logical storage.
7676
7677'SYMBOL_REF'
7678     'SYMBOL_REF_DECL (X)'
7679          If the 'symbol_ref' X was created for a 'VAR_DECL' or a
7680          'FUNCTION_DECL', that tree is recorded here.  If this value is
7681          null, then X was created by back end code generation routines,
7682          and there is no associated front end symbol table entry.
7683
7684          'SYMBOL_REF_DECL' may also point to a tree of class ''c'',
7685          that is, some sort of constant.  In this case, the
7686          'symbol_ref' is an entry in the per-file constant pool; again,
7687          there is no associated front end symbol table entry.
7688
7689     'SYMBOL_REF_CONSTANT (X)'
7690          If 'CONSTANT_POOL_ADDRESS_P (X)' is true, this is the constant
7691          pool entry for X.  It is null otherwise.
7692
7693     'SYMBOL_REF_DATA (X)'
7694          A field of opaque type used to store 'SYMBOL_REF_DECL' or
7695          'SYMBOL_REF_CONSTANT'.
7696
7697     'SYMBOL_REF_FLAGS (X)'
7698          In a 'symbol_ref', this is used to communicate various
7699          predicates about the symbol.  Some of these are common enough
7700          to be computed by common code, some are specific to the
7701          target.  The common bits are:
7702
7703          'SYMBOL_FLAG_FUNCTION'
7704               Set if the symbol refers to a function.
7705
7706          'SYMBOL_FLAG_LOCAL'
7707               Set if the symbol is local to this "module".  See
7708               'TARGET_BINDS_LOCAL_P'.
7709
7710          'SYMBOL_FLAG_EXTERNAL'
7711               Set if this symbol is not defined in this translation
7712               unit.  Note that this is not the inverse of
7713               'SYMBOL_FLAG_LOCAL'.
7714
7715          'SYMBOL_FLAG_SMALL'
7716               Set if the symbol is located in the small data section.
7717               See 'TARGET_IN_SMALL_DATA_P'.
7718
7719          'SYMBOL_REF_TLS_MODEL (X)'
7720               This is a multi-bit field accessor that returns the
7721               'tls_model' to be used for a thread-local storage symbol.
7722               It returns zero for non-thread-local symbols.
7723
7724          'SYMBOL_FLAG_HAS_BLOCK_INFO'
7725               Set if the symbol has 'SYMBOL_REF_BLOCK' and
7726               'SYMBOL_REF_BLOCK_OFFSET' fields.
7727
7728          'SYMBOL_FLAG_ANCHOR'
7729               Set if the symbol is used as a section anchor.  "Section
7730               anchors" are symbols that have a known position within an
7731               'object_block' and that can be used to access nearby
7732               members of that block.  They are used to implement
7733               '-fsection-anchors'.
7734
7735               If this flag is set, then 'SYMBOL_FLAG_HAS_BLOCK_INFO'
7736               will be too.
7737
7738          Bits beginning with 'SYMBOL_FLAG_MACH_DEP' are available for
7739          the target's use.
7740
7741'SYMBOL_REF_BLOCK (X)'
7742     If 'SYMBOL_REF_HAS_BLOCK_INFO_P (X)', this is the 'object_block'
7743     structure to which the symbol belongs, or 'NULL' if it has not been
7744     assigned a block.
7745
7746'SYMBOL_REF_BLOCK_OFFSET (X)'
7747     If 'SYMBOL_REF_HAS_BLOCK_INFO_P (X)', this is the offset of X from
7748     the first object in 'SYMBOL_REF_BLOCK (X)'.  The value is negative
7749     if X has not yet been assigned to a block, or it has not been given
7750     an offset within that block.
7751
7752
7753File: gccint.info,  Node: Flags,  Next: Machine Modes,  Prev: Special Accessors,  Up: RTL
7754
775510.5 Flags in an RTL Expression
7756===============================
7757
7758RTL expressions contain several flags (one-bit bit-fields) that are used
7759in certain types of expression.  Most often they are accessed with the
7760following macros, which expand into lvalues.
7761
7762'CONSTANT_POOL_ADDRESS_P (X)'
7763     Nonzero in a 'symbol_ref' if it refers to part of the current
7764     function's constant pool.  For most targets these addresses are in
7765     a '.rodata' section entirely separate from the function, but for
7766     some targets the addresses are close to the beginning of the
7767     function.  In either case GCC assumes these addresses can be
7768     addressed directly, perhaps with the help of base registers.
7769     Stored in the 'unchanging' field and printed as '/u'.
7770
7771'RTL_CONST_CALL_P (X)'
7772     In a 'call_insn' indicates that the insn represents a call to a
7773     const function.  Stored in the 'unchanging' field and printed as
7774     '/u'.
7775
7776'RTL_PURE_CALL_P (X)'
7777     In a 'call_insn' indicates that the insn represents a call to a
7778     pure function.  Stored in the 'return_val' field and printed as
7779     '/i'.
7780
7781'RTL_CONST_OR_PURE_CALL_P (X)'
7782     In a 'call_insn', true if 'RTL_CONST_CALL_P' or 'RTL_PURE_CALL_P'
7783     is true.
7784
7785'RTL_LOOPING_CONST_OR_PURE_CALL_P (X)'
7786     In a 'call_insn' indicates that the insn represents a possibly
7787     infinite looping call to a const or pure function.  Stored in the
7788     'call' field and printed as '/c'.  Only true if one of
7789     'RTL_CONST_CALL_P' or 'RTL_PURE_CALL_P' is true.
7790
7791'INSN_ANNULLED_BRANCH_P (X)'
7792     In a 'jump_insn', 'call_insn', or 'insn' indicates that the branch
7793     is an annulling one.  See the discussion under 'sequence' below.
7794     Stored in the 'unchanging' field and printed as '/u'.
7795
7796'INSN_DELETED_P (X)'
7797     In an 'insn', 'call_insn', 'jump_insn', 'code_label', 'barrier', or
7798     'note', nonzero if the insn has been deleted.  Stored in the
7799     'volatil' field and printed as '/v'.
7800
7801'INSN_FROM_TARGET_P (X)'
7802     In an 'insn' or 'jump_insn' or 'call_insn' in a delay slot of a
7803     branch, indicates that the insn is from the target of the branch.
7804     If the branch insn has 'INSN_ANNULLED_BRANCH_P' set, this insn will
7805     only be executed if the branch is taken.  For annulled branches
7806     with 'INSN_FROM_TARGET_P' clear, the insn will be executed only if
7807     the branch is not taken.  When 'INSN_ANNULLED_BRANCH_P' is not set,
7808     this insn will always be executed.  Stored in the 'in_struct' field
7809     and printed as '/s'.
7810
7811'LABEL_PRESERVE_P (X)'
7812     In a 'code_label' or 'note', indicates that the label is referenced
7813     by code or data not visible to the RTL of a given function.  Labels
7814     referenced by a non-local goto will have this bit set.  Stored in
7815     the 'in_struct' field and printed as '/s'.
7816
7817'LABEL_REF_NONLOCAL_P (X)'
7818     In 'label_ref' and 'reg_label' expressions, nonzero if this is a
7819     reference to a non-local label.  Stored in the 'volatil' field and
7820     printed as '/v'.
7821
7822'MEM_KEEP_ALIAS_SET_P (X)'
7823     In 'mem' expressions, 1 if we should keep the alias set for this
7824     mem unchanged when we access a component.  Set to 1, for example,
7825     when we are already in a non-addressable component of an aggregate.
7826     Stored in the 'jump' field and printed as '/j'.
7827
7828'MEM_VOLATILE_P (X)'
7829     In 'mem', 'asm_operands', and 'asm_input' expressions, nonzero for
7830     volatile memory references.  Stored in the 'volatil' field and
7831     printed as '/v'.
7832
7833'MEM_NOTRAP_P (X)'
7834     In 'mem', nonzero for memory references that will not trap.  Stored
7835     in the 'call' field and printed as '/c'.
7836
7837'MEM_POINTER (X)'
7838     Nonzero in a 'mem' if the memory reference holds a pointer.  Stored
7839     in the 'frame_related' field and printed as '/f'.
7840
7841'REG_FUNCTION_VALUE_P (X)'
7842     Nonzero in a 'reg' if it is the place in which this function's
7843     value is going to be returned.  (This happens only in a hard
7844     register.)  Stored in the 'return_val' field and printed as '/i'.
7845
7846'REG_POINTER (X)'
7847     Nonzero in a 'reg' if the register holds a pointer.  Stored in the
7848     'frame_related' field and printed as '/f'.
7849
7850'REG_USERVAR_P (X)'
7851     In a 'reg', nonzero if it corresponds to a variable present in the
7852     user's source code.  Zero for temporaries generated internally by
7853     the compiler.  Stored in the 'volatil' field and printed as '/v'.
7854
7855     The same hard register may be used also for collecting the values
7856     of functions called by this one, but 'REG_FUNCTION_VALUE_P' is zero
7857     in this kind of use.
7858
7859'RTX_FRAME_RELATED_P (X)'
7860     Nonzero in an 'insn', 'call_insn', 'jump_insn', 'barrier', or 'set'
7861     which is part of a function prologue and sets the stack pointer,
7862     sets the frame pointer, or saves a register.  This flag should also
7863     be set on an instruction that sets up a temporary register to use
7864     in place of the frame pointer.  Stored in the 'frame_related' field
7865     and printed as '/f'.
7866
7867     In particular, on RISC targets where there are limits on the sizes
7868     of immediate constants, it is sometimes impossible to reach the
7869     register save area directly from the stack pointer.  In that case,
7870     a temporary register is used that is near enough to the register
7871     save area, and the Canonical Frame Address, i.e., DWARF2's logical
7872     frame pointer, register must (temporarily) be changed to be this
7873     temporary register.  So, the instruction that sets this temporary
7874     register must be marked as 'RTX_FRAME_RELATED_P'.
7875
7876     If the marked instruction is overly complex (defined in terms of
7877     what 'dwarf2out_frame_debug_expr' can handle), you will also have
7878     to create a 'REG_FRAME_RELATED_EXPR' note and attach it to the
7879     instruction.  This note should contain a simple expression of the
7880     computation performed by this instruction, i.e., one that
7881     'dwarf2out_frame_debug_expr' can handle.
7882
7883     This flag is required for exception handling support on targets
7884     with RTL prologues.
7885
7886'MEM_READONLY_P (X)'
7887     Nonzero in a 'mem', if the memory is statically allocated and
7888     read-only.
7889
7890     Read-only in this context means never modified during the lifetime
7891     of the program, not necessarily in ROM or in write-disabled pages.
7892     A common example of the later is a shared library's global offset
7893     table.  This table is initialized by the runtime loader, so the
7894     memory is technically writable, but after control is transferred
7895     from the runtime loader to the application, this memory will never
7896     be subsequently modified.
7897
7898     Stored in the 'unchanging' field and printed as '/u'.
7899
7900'SCHED_GROUP_P (X)'
7901     During instruction scheduling, in an 'insn', 'call_insn' or
7902     'jump_insn', indicates that the previous insn must be scheduled
7903     together with this insn.  This is used to ensure that certain
7904     groups of instructions will not be split up by the instruction
7905     scheduling pass, for example, 'use' insns before a 'call_insn' may
7906     not be separated from the 'call_insn'.  Stored in the 'in_struct'
7907     field and printed as '/s'.
7908
7909'SET_IS_RETURN_P (X)'
7910     For a 'set', nonzero if it is for a return.  Stored in the 'jump'
7911     field and printed as '/j'.
7912
7913'SIBLING_CALL_P (X)'
7914     For a 'call_insn', nonzero if the insn is a sibling call.  Stored
7915     in the 'jump' field and printed as '/j'.
7916
7917'STRING_POOL_ADDRESS_P (X)'
7918     For a 'symbol_ref' expression, nonzero if it addresses this
7919     function's string constant pool.  Stored in the 'frame_related'
7920     field and printed as '/f'.
7921
7922'SUBREG_PROMOTED_UNSIGNED_P (X)'
7923     Returns a value greater then zero for a 'subreg' that has
7924     'SUBREG_PROMOTED_VAR_P' nonzero if the object being referenced is
7925     kept zero-extended, zero if it is kept sign-extended, and less then
7926     zero if it is extended some other way via the 'ptr_extend'
7927     instruction.  Stored in the 'unchanging' field and 'volatil' field,
7928     printed as '/u' and '/v'.  This macro may only be used to get the
7929     value it may not be used to change the value.  Use
7930     'SUBREG_PROMOTED_UNSIGNED_SET' to change the value.
7931
7932'SUBREG_PROMOTED_UNSIGNED_SET (X)'
7933     Set the 'unchanging' and 'volatil' fields in a 'subreg' to reflect
7934     zero, sign, or other extension.  If 'volatil' is zero, then
7935     'unchanging' as nonzero means zero extension and as zero means sign
7936     extension.  If 'volatil' is nonzero then some other type of
7937     extension was done via the 'ptr_extend' instruction.
7938
7939'SUBREG_PROMOTED_VAR_P (X)'
7940     Nonzero in a 'subreg' if it was made when accessing an object that
7941     was promoted to a wider mode in accord with the 'PROMOTED_MODE'
7942     machine description macro (*note Storage Layout::).  In this case,
7943     the mode of the 'subreg' is the declared mode of the object and the
7944     mode of 'SUBREG_REG' is the mode of the register that holds the
7945     object.  Promoted variables are always either sign- or
7946     zero-extended to the wider mode on every assignment.  Stored in the
7947     'in_struct' field and printed as '/s'.
7948
7949'SYMBOL_REF_USED (X)'
7950     In a 'symbol_ref', indicates that X has been used.  This is
7951     normally only used to ensure that X is only declared external once.
7952     Stored in the 'used' field.
7953
7954'SYMBOL_REF_WEAK (X)'
7955     In a 'symbol_ref', indicates that X has been declared weak.  Stored
7956     in the 'return_val' field and printed as '/i'.
7957
7958'SYMBOL_REF_FLAG (X)'
7959     In a 'symbol_ref', this is used as a flag for machine-specific
7960     purposes.  Stored in the 'volatil' field and printed as '/v'.
7961
7962     Most uses of 'SYMBOL_REF_FLAG' are historic and may be subsumed by
7963     'SYMBOL_REF_FLAGS'.  Certainly use of 'SYMBOL_REF_FLAGS' is
7964     mandatory if the target requires more than one bit of storage.
7965
7966'PREFETCH_SCHEDULE_BARRIER_P (X)'
7967     In a 'prefetch', indicates that the prefetch is a scheduling
7968     barrier.  No other INSNs will be moved over it.  Stored in the
7969     'volatil' field and printed as '/v'.
7970
7971 These are the fields to which the above macros refer:
7972
7973'call'
7974     In a 'mem', 1 means that the memory reference will not trap.
7975
7976     In a 'call', 1 means that this pure or const call may possibly
7977     infinite loop.
7978
7979     In an RTL dump, this flag is represented as '/c'.
7980
7981'frame_related'
7982     In an 'insn' or 'set' expression, 1 means that it is part of a
7983     function prologue and sets the stack pointer, sets the frame
7984     pointer, saves a register, or sets up a temporary register to use
7985     in place of the frame pointer.
7986
7987     In 'reg' expressions, 1 means that the register holds a pointer.
7988
7989     In 'mem' expressions, 1 means that the memory reference holds a
7990     pointer.
7991
7992     In 'symbol_ref' expressions, 1 means that the reference addresses
7993     this function's string constant pool.
7994
7995     In an RTL dump, this flag is represented as '/f'.
7996
7997'in_struct'
7998     In 'reg' expressions, it is 1 if the register has its entire life
7999     contained within the test expression of some loop.
8000
8001     In 'subreg' expressions, 1 means that the 'subreg' is accessing an
8002     object that has had its mode promoted from a wider mode.
8003
8004     In 'label_ref' expressions, 1 means that the referenced label is
8005     outside the innermost loop containing the insn in which the
8006     'label_ref' was found.
8007
8008     In 'code_label' expressions, it is 1 if the label may never be
8009     deleted.  This is used for labels which are the target of non-local
8010     gotos.  Such a label that would have been deleted is replaced with
8011     a 'note' of type 'NOTE_INSN_DELETED_LABEL'.
8012
8013     In an 'insn' during dead-code elimination, 1 means that the insn is
8014     dead code.
8015
8016     In an 'insn' or 'jump_insn' during reorg for an insn in the delay
8017     slot of a branch, 1 means that this insn is from the target of the
8018     branch.
8019
8020     In an 'insn' during instruction scheduling, 1 means that this insn
8021     must be scheduled as part of a group together with the previous
8022     insn.
8023
8024     In an RTL dump, this flag is represented as '/s'.
8025
8026'return_val'
8027     In 'reg' expressions, 1 means the register contains the value to be
8028     returned by the current function.  On machines that pass parameters
8029     in registers, the same register number may be used for parameters
8030     as well, but this flag is not set on such uses.
8031
8032     In 'symbol_ref' expressions, 1 means the referenced symbol is weak.
8033
8034     In 'call' expressions, 1 means the call is pure.
8035
8036     In an RTL dump, this flag is represented as '/i'.
8037
8038'jump'
8039     In a 'mem' expression, 1 means we should keep the alias set for
8040     this mem unchanged when we access a component.
8041
8042     In a 'set', 1 means it is for a return.
8043
8044     In a 'call_insn', 1 means it is a sibling call.
8045
8046     In an RTL dump, this flag is represented as '/j'.
8047
8048'unchanging'
8049     In 'reg' and 'mem' expressions, 1 means that the value of the
8050     expression never changes.
8051
8052     In 'subreg' expressions, it is 1 if the 'subreg' references an
8053     unsigned object whose mode has been promoted to a wider mode.
8054
8055     In an 'insn' or 'jump_insn' in the delay slot of a branch
8056     instruction, 1 means an annulling branch should be used.
8057
8058     In a 'symbol_ref' expression, 1 means that this symbol addresses
8059     something in the per-function constant pool.
8060
8061     In a 'call_insn' 1 means that this instruction is a call to a const
8062     function.
8063
8064     In an RTL dump, this flag is represented as '/u'.
8065
8066'used'
8067     This flag is used directly (without an access macro) at the end of
8068     RTL generation for a function, to count the number of times an
8069     expression appears in insns.  Expressions that appear more than
8070     once are copied, according to the rules for shared structure (*note
8071     Sharing::).
8072
8073     For a 'reg', it is used directly (without an access macro) by the
8074     leaf register renumbering code to ensure that each register is only
8075     renumbered once.
8076
8077     In a 'symbol_ref', it indicates that an external declaration for
8078     the symbol has already been written.
8079
8080'volatil'
8081     In a 'mem', 'asm_operands', or 'asm_input' expression, it is 1 if
8082     the memory reference is volatile.  Volatile memory references may
8083     not be deleted, reordered or combined.
8084
8085     In a 'symbol_ref' expression, it is used for machine-specific
8086     purposes.
8087
8088     In a 'reg' expression, it is 1 if the value is a user-level
8089     variable.  0 indicates an internal compiler temporary.
8090
8091     In an 'insn', 1 means the insn has been deleted.
8092
8093     In 'label_ref' and 'reg_label' expressions, 1 means a reference to
8094     a non-local label.
8095
8096     In 'prefetch' expressions, 1 means that the containing insn is a
8097     scheduling barrier.
8098
8099     In an RTL dump, this flag is represented as '/v'.
8100
8101
8102File: gccint.info,  Node: Machine Modes,  Next: Constants,  Prev: Flags,  Up: RTL
8103
810410.6 Machine Modes
8105==================
8106
8107A machine mode describes a size of data object and the representation
8108used for it.  In the C code, machine modes are represented by an
8109enumeration type, 'enum machine_mode', defined in 'machmode.def'.  Each
8110RTL expression has room for a machine mode and so do certain kinds of
8111tree expressions (declarations and types, to be precise).
8112
8113 In debugging dumps and machine descriptions, the machine mode of an RTL
8114expression is written after the expression code with a colon to separate
8115them.  The letters 'mode' which appear at the end of each machine mode
8116name are omitted.  For example, '(reg:SI 38)' is a 'reg' expression with
8117machine mode 'SImode'.  If the mode is 'VOIDmode', it is not written at
8118all.
8119
8120 Here is a table of machine modes.  The term "byte" below refers to an
8121object of 'BITS_PER_UNIT' bits (*note Storage Layout::).
8122
8123'BImode'
8124     "Bit" mode represents a single bit, for predicate registers.
8125
8126'QImode'
8127     "Quarter-Integer" mode represents a single byte treated as an
8128     integer.
8129
8130'HImode'
8131     "Half-Integer" mode represents a two-byte integer.
8132
8133'PSImode'
8134     "Partial Single Integer" mode represents an integer which occupies
8135     four bytes but which doesn't really use all four.  On some
8136     machines, this is the right mode to use for pointers.
8137
8138'SImode'
8139     "Single Integer" mode represents a four-byte integer.
8140
8141'PDImode'
8142     "Partial Double Integer" mode represents an integer which occupies
8143     eight bytes but which doesn't really use all eight.  On some
8144     machines, this is the right mode to use for certain pointers.
8145
8146'DImode'
8147     "Double Integer" mode represents an eight-byte integer.
8148
8149'TImode'
8150     "Tetra Integer" (?)  mode represents a sixteen-byte integer.
8151
8152'OImode'
8153     "Octa Integer" (?)  mode represents a thirty-two-byte integer.
8154
8155'QFmode'
8156     "Quarter-Floating" mode represents a quarter-precision (single
8157     byte) floating point number.
8158
8159'HFmode'
8160     "Half-Floating" mode represents a half-precision (two byte)
8161     floating point number.
8162
8163'TQFmode'
8164     "Three-Quarter-Floating" (?)  mode represents a
8165     three-quarter-precision (three byte) floating point number.
8166
8167'SFmode'
8168     "Single Floating" mode represents a four byte floating point
8169     number.  In the common case, of a processor with IEEE arithmetic
8170     and 8-bit bytes, this is a single-precision IEEE floating point
8171     number; it can also be used for double-precision (on processors
8172     with 16-bit bytes) and single-precision VAX and IBM types.
8173
8174'DFmode'
8175     "Double Floating" mode represents an eight byte floating point
8176     number.  In the common case, of a processor with IEEE arithmetic
8177     and 8-bit bytes, this is a double-precision IEEE floating point
8178     number.
8179
8180'XFmode'
8181     "Extended Floating" mode represents an IEEE extended floating point
8182     number.  This mode only has 80 meaningful bits (ten bytes).  Some
8183     processors require such numbers to be padded to twelve bytes,
8184     others to sixteen; this mode is used for either.
8185
8186'SDmode'
8187     "Single Decimal Floating" mode represents a four byte decimal
8188     floating point number (as distinct from conventional binary
8189     floating point).
8190
8191'DDmode'
8192     "Double Decimal Floating" mode represents an eight byte decimal
8193     floating point number.
8194
8195'TDmode'
8196     "Tetra Decimal Floating" mode represents a sixteen byte decimal
8197     floating point number all 128 of whose bits are meaningful.
8198
8199'TFmode'
8200     "Tetra Floating" mode represents a sixteen byte floating point
8201     number all 128 of whose bits are meaningful.  One common use is the
8202     IEEE quad-precision format.
8203
8204'QQmode'
8205     "Quarter-Fractional" mode represents a single byte treated as a
8206     signed fractional number.  The default format is "s.7".
8207
8208'HQmode'
8209     "Half-Fractional" mode represents a two-byte signed fractional
8210     number.  The default format is "s.15".
8211
8212'SQmode'
8213     "Single Fractional" mode represents a four-byte signed fractional
8214     number.  The default format is "s.31".
8215
8216'DQmode'
8217     "Double Fractional" mode represents an eight-byte signed fractional
8218     number.  The default format is "s.63".
8219
8220'TQmode'
8221     "Tetra Fractional" mode represents a sixteen-byte signed fractional
8222     number.  The default format is "s.127".
8223
8224'UQQmode'
8225     "Unsigned Quarter-Fractional" mode represents a single byte treated
8226     as an unsigned fractional number.  The default format is ".8".
8227
8228'UHQmode'
8229     "Unsigned Half-Fractional" mode represents a two-byte unsigned
8230     fractional number.  The default format is ".16".
8231
8232'USQmode'
8233     "Unsigned Single Fractional" mode represents a four-byte unsigned
8234     fractional number.  The default format is ".32".
8235
8236'UDQmode'
8237     "Unsigned Double Fractional" mode represents an eight-byte unsigned
8238     fractional number.  The default format is ".64".
8239
8240'UTQmode'
8241     "Unsigned Tetra Fractional" mode represents a sixteen-byte unsigned
8242     fractional number.  The default format is ".128".
8243
8244'HAmode'
8245     "Half-Accumulator" mode represents a two-byte signed accumulator.
8246     The default format is "s8.7".
8247
8248'SAmode'
8249     "Single Accumulator" mode represents a four-byte signed
8250     accumulator.  The default format is "s16.15".
8251
8252'DAmode'
8253     "Double Accumulator" mode represents an eight-byte signed
8254     accumulator.  The default format is "s32.31".
8255
8256'TAmode'
8257     "Tetra Accumulator" mode represents a sixteen-byte signed
8258     accumulator.  The default format is "s64.63".
8259
8260'UHAmode'
8261     "Unsigned Half-Accumulator" mode represents a two-byte unsigned
8262     accumulator.  The default format is "8.8".
8263
8264'USAmode'
8265     "Unsigned Single Accumulator" mode represents a four-byte unsigned
8266     accumulator.  The default format is "16.16".
8267
8268'UDAmode'
8269     "Unsigned Double Accumulator" mode represents an eight-byte
8270     unsigned accumulator.  The default format is "32.32".
8271
8272'UTAmode'
8273     "Unsigned Tetra Accumulator" mode represents a sixteen-byte
8274     unsigned accumulator.  The default format is "64.64".
8275
8276'CCmode'
8277     "Condition Code" mode represents the value of a condition code,
8278     which is a machine-specific set of bits used to represent the
8279     result of a comparison operation.  Other machine-specific modes may
8280     also be used for the condition code.  These modes are not used on
8281     machines that use 'cc0' (*note Condition Code::).
8282
8283'BLKmode'
8284     "Block" mode represents values that are aggregates to which none of
8285     the other modes apply.  In RTL, only memory references can have
8286     this mode, and only if they appear in string-move or vector
8287     instructions.  On machines which have no such instructions,
8288     'BLKmode' will not appear in RTL.
8289
8290'VOIDmode'
8291     Void mode means the absence of a mode or an unspecified mode.  For
8292     example, RTL expressions of code 'const_int' have mode 'VOIDmode'
8293     because they can be taken to have whatever mode the context
8294     requires.  In debugging dumps of RTL, 'VOIDmode' is expressed by
8295     the absence of any mode.
8296
8297'QCmode, HCmode, SCmode, DCmode, XCmode, TCmode'
8298     These modes stand for a complex number represented as a pair of
8299     floating point values.  The floating point values are in 'QFmode',
8300     'HFmode', 'SFmode', 'DFmode', 'XFmode', and 'TFmode', respectively.
8301
8302'CQImode, CHImode, CSImode, CDImode, CTImode, COImode'
8303     These modes stand for a complex number represented as a pair of
8304     integer values.  The integer values are in 'QImode', 'HImode',
8305     'SImode', 'DImode', 'TImode', and 'OImode', respectively.
8306
8307 The machine description defines 'Pmode' as a C macro which expands into
8308the machine mode used for addresses.  Normally this is the mode whose
8309size is 'BITS_PER_WORD', 'SImode' on 32-bit machines.
8310
8311 The only modes which a machine description must support are 'QImode',
8312and the modes corresponding to 'BITS_PER_WORD', 'FLOAT_TYPE_SIZE' and
8313'DOUBLE_TYPE_SIZE'.  The compiler will attempt to use 'DImode' for
83148-byte structures and unions, but this can be prevented by overriding
8315the definition of 'MAX_FIXED_MODE_SIZE'.  Alternatively, you can have
8316the compiler use 'TImode' for 16-byte structures and unions.  Likewise,
8317you can arrange for the C type 'short int' to avoid using 'HImode'.
8318
8319 Very few explicit references to machine modes remain in the compiler
8320and these few references will soon be removed.  Instead, the machine
8321modes are divided into mode classes.  These are represented by the
8322enumeration type 'enum mode_class' defined in 'machmode.h'.  The
8323possible mode classes are:
8324
8325'MODE_INT'
8326     Integer modes.  By default these are 'BImode', 'QImode', 'HImode',
8327     'SImode', 'DImode', 'TImode', and 'OImode'.
8328
8329'MODE_PARTIAL_INT'
8330     The "partial integer" modes, 'PQImode', 'PHImode', 'PSImode' and
8331     'PDImode'.
8332
8333'MODE_FLOAT'
8334     Floating point modes.  By default these are 'QFmode', 'HFmode',
8335     'TQFmode', 'SFmode', 'DFmode', 'XFmode' and 'TFmode'.
8336
8337'MODE_DECIMAL_FLOAT'
8338     Decimal floating point modes.  By default these are 'SDmode',
8339     'DDmode' and 'TDmode'.
8340
8341'MODE_FRACT'
8342     Signed fractional modes.  By default these are 'QQmode', 'HQmode',
8343     'SQmode', 'DQmode' and 'TQmode'.
8344
8345'MODE_UFRACT'
8346     Unsigned fractional modes.  By default these are 'UQQmode',
8347     'UHQmode', 'USQmode', 'UDQmode' and 'UTQmode'.
8348
8349'MODE_ACCUM'
8350     Signed accumulator modes.  By default these are 'HAmode', 'SAmode',
8351     'DAmode' and 'TAmode'.
8352
8353'MODE_UACCUM'
8354     Unsigned accumulator modes.  By default these are 'UHAmode',
8355     'USAmode', 'UDAmode' and 'UTAmode'.
8356
8357'MODE_COMPLEX_INT'
8358     Complex integer modes.  (These are not currently implemented).
8359
8360'MODE_COMPLEX_FLOAT'
8361     Complex floating point modes.  By default these are 'QCmode',
8362     'HCmode', 'SCmode', 'DCmode', 'XCmode', and 'TCmode'.
8363
8364'MODE_FUNCTION'
8365     Algol or Pascal function variables including a static chain.
8366     (These are not currently implemented).
8367
8368'MODE_CC'
8369     Modes representing condition code values.  These are 'CCmode' plus
8370     any 'CC_MODE' modes listed in the 'MACHINE-modes.def'.  *Note Jump
8371     Patterns::, also see *note Condition Code::.
8372
8373'MODE_RANDOM'
8374     This is a catchall mode class for modes which don't fit into the
8375     above classes.  Currently 'VOIDmode' and 'BLKmode' are in
8376     'MODE_RANDOM'.
8377
8378 Here are some C macros that relate to machine modes:
8379
8380'GET_MODE (X)'
8381     Returns the machine mode of the RTX X.
8382
8383'PUT_MODE (X, NEWMODE)'
8384     Alters the machine mode of the RTX X to be NEWMODE.
8385
8386'NUM_MACHINE_MODES'
8387     Stands for the number of machine modes available on the target
8388     machine.  This is one greater than the largest numeric value of any
8389     machine mode.
8390
8391'GET_MODE_NAME (M)'
8392     Returns the name of mode M as a string.
8393
8394'GET_MODE_CLASS (M)'
8395     Returns the mode class of mode M.
8396
8397'GET_MODE_WIDER_MODE (M)'
8398     Returns the next wider natural mode.  For example, the expression
8399     'GET_MODE_WIDER_MODE (QImode)' returns 'HImode'.
8400
8401'GET_MODE_SIZE (M)'
8402     Returns the size in bytes of a datum of mode M.
8403
8404'GET_MODE_BITSIZE (M)'
8405     Returns the size in bits of a datum of mode M.
8406
8407'GET_MODE_IBIT (M)'
8408     Returns the number of integral bits of a datum of fixed-point mode
8409     M.
8410
8411'GET_MODE_FBIT (M)'
8412     Returns the number of fractional bits of a datum of fixed-point
8413     mode M.
8414
8415'GET_MODE_MASK (M)'
8416     Returns a bitmask containing 1 for all bits in a word that fit
8417     within mode M.  This macro can only be used for modes whose bitsize
8418     is less than or equal to 'HOST_BITS_PER_INT'.
8419
8420'GET_MODE_ALIGNMENT (M)'
8421     Return the required alignment, in bits, for an object of mode M.
8422
8423'GET_MODE_UNIT_SIZE (M)'
8424     Returns the size in bytes of the subunits of a datum of mode M.
8425     This is the same as 'GET_MODE_SIZE' except in the case of complex
8426     modes.  For them, the unit size is the size of the real or
8427     imaginary part.
8428
8429'GET_MODE_NUNITS (M)'
8430     Returns the number of units contained in a mode, i.e.,
8431     'GET_MODE_SIZE' divided by 'GET_MODE_UNIT_SIZE'.
8432
8433'GET_CLASS_NARROWEST_MODE (C)'
8434     Returns the narrowest mode in mode class C.
8435
8436 The global variables 'byte_mode' and 'word_mode' contain modes whose
8437classes are 'MODE_INT' and whose bitsizes are either 'BITS_PER_UNIT' or
8438'BITS_PER_WORD', respectively.  On 32-bit machines, these are 'QImode'
8439and 'SImode', respectively.
8440
8441
8442File: gccint.info,  Node: Constants,  Next: Regs and Memory,  Prev: Machine Modes,  Up: RTL
8443
844410.7 Constant Expression Types
8445==============================
8446
8447The simplest RTL expressions are those that represent constant values.
8448
8449'(const_int I)'
8450     This type of expression represents the integer value I.  I is
8451     customarily accessed with the macro 'INTVAL' as in 'INTVAL (EXP)',
8452     which is equivalent to 'XWINT (EXP, 0)'.
8453
8454     Constants generated for modes with fewer bits than in
8455     'HOST_WIDE_INT' must be sign extended to full width (e.g., with
8456     'gen_int_mode').  For constants for modes with more bits than in
8457     'HOST_WIDE_INT' the implied high order bits of that constant are
8458     copies of the top bit.  Note however that values are neither
8459     inherently signed nor inherently unsigned; where necessary,
8460     signedness is determined by the rtl operation instead.
8461
8462     There is only one expression object for the integer value zero; it
8463     is the value of the variable 'const0_rtx'.  Likewise, the only
8464     expression for integer value one is found in 'const1_rtx', the only
8465     expression for integer value two is found in 'const2_rtx', and the
8466     only expression for integer value negative one is found in
8467     'constm1_rtx'.  Any attempt to create an expression of code
8468     'const_int' and value zero, one, two or negative one will return
8469     'const0_rtx', 'const1_rtx', 'const2_rtx' or 'constm1_rtx' as
8470     appropriate.
8471
8472     Similarly, there is only one object for the integer whose value is
8473     'STORE_FLAG_VALUE'.  It is found in 'const_true_rtx'.  If
8474     'STORE_FLAG_VALUE' is one, 'const_true_rtx' and 'const1_rtx' will
8475     point to the same object.  If 'STORE_FLAG_VALUE' is -1,
8476     'const_true_rtx' and 'constm1_rtx' will point to the same object.
8477
8478'(const_double:M I0 I1 ...)'
8479     Represents either a floating-point constant of mode M or an integer
8480     constant too large to fit into 'HOST_BITS_PER_WIDE_INT' bits but
8481     small enough to fit within twice that number of bits (GCC does not
8482     provide a mechanism to represent even larger constants).  In the
8483     latter case, M will be 'VOIDmode'.  For integral values constants
8484     for modes with more bits than twice the number in 'HOST_WIDE_INT'
8485     the implied high order bits of that constant are copies of the top
8486     bit of 'CONST_DOUBLE_HIGH'.  Note however that integral values are
8487     neither inherently signed nor inherently unsigned; where necessary,
8488     signedness is determined by the rtl operation instead.
8489
8490     If M is 'VOIDmode', the bits of the value are stored in I0 and I1.
8491     I0 is customarily accessed with the macro 'CONST_DOUBLE_LOW' and I1
8492     with 'CONST_DOUBLE_HIGH'.
8493
8494     If the constant is floating point (regardless of its precision),
8495     then the number of integers used to store the value depends on the
8496     size of 'REAL_VALUE_TYPE' (*note Floating Point::).  The integers
8497     represent a floating point number, but not precisely in the target
8498     machine's or host machine's floating point format.  To convert them
8499     to the precise bit pattern used by the target machine, use the
8500     macro 'REAL_VALUE_TO_TARGET_DOUBLE' and friends (*note Data
8501     Output::).
8502
8503'(const_fixed:M ...)'
8504     Represents a fixed-point constant of mode M.  The operand is a data
8505     structure of type 'struct fixed_value' and is accessed with the
8506     macro 'CONST_FIXED_VALUE'.  The high part of data is accessed with
8507     'CONST_FIXED_VALUE_HIGH'; the low part is accessed with
8508     'CONST_FIXED_VALUE_LOW'.
8509
8510'(const_vector:M [X0 X1 ...])'
8511     Represents a vector constant.  The square brackets stand for the
8512     vector containing the constant elements.  X0, X1 and so on are the
8513     'const_int', 'const_double' or 'const_fixed' elements.
8514
8515     The number of units in a 'const_vector' is obtained with the macro
8516     'CONST_VECTOR_NUNITS' as in 'CONST_VECTOR_NUNITS (V)'.
8517
8518     Individual elements in a vector constant are accessed with the
8519     macro 'CONST_VECTOR_ELT' as in 'CONST_VECTOR_ELT (V, N)' where V is
8520     the vector constant and N is the element desired.
8521
8522'(const_string STR)'
8523     Represents a constant string with value STR.  Currently this is
8524     used only for insn attributes (*note Insn Attributes::) since
8525     constant strings in C are placed in memory.
8526
8527'(symbol_ref:MODE SYMBOL)'
8528     Represents the value of an assembler label for data.  SYMBOL is a
8529     string that describes the name of the assembler label.  If it
8530     starts with a '*', the label is the rest of SYMBOL not including
8531     the '*'.  Otherwise, the label is SYMBOL, usually prefixed with
8532     '_'.
8533
8534     The 'symbol_ref' contains a mode, which is usually 'Pmode'.
8535     Usually that is the only mode for which a symbol is directly valid.
8536
8537'(label_ref:MODE LABEL)'
8538     Represents the value of an assembler label for code.  It contains
8539     one operand, an expression, which must be a 'code_label' or a
8540     'note' of type 'NOTE_INSN_DELETED_LABEL' that appears in the
8541     instruction sequence to identify the place where the label should
8542     go.
8543
8544     The reason for using a distinct expression type for code label
8545     references is so that jump optimization can distinguish them.
8546
8547     The 'label_ref' contains a mode, which is usually 'Pmode'.  Usually
8548     that is the only mode for which a label is directly valid.
8549
8550'(const:M EXP)'
8551     Represents a constant that is the result of an assembly-time
8552     arithmetic computation.  The operand, EXP, is an expression that
8553     contains only constants ('const_int', 'symbol_ref' and 'label_ref'
8554     expressions) combined with 'plus' and 'minus'.  However, not all
8555     combinations are valid, since the assembler cannot do arbitrary
8556     arithmetic on relocatable symbols.
8557
8558     M should be 'Pmode'.
8559
8560'(high:M EXP)'
8561     Represents the high-order bits of EXP, usually a 'symbol_ref'.  The
8562     number of bits is machine-dependent and is normally the number of
8563     bits specified in an instruction that initializes the high order
8564     bits of a register.  It is used with 'lo_sum' to represent the
8565     typical two-instruction sequence used in RISC machines to reference
8566     a global memory location.
8567
8568     M should be 'Pmode'.
8569
8570 The macro 'CONST0_RTX (MODE)' refers to an expression with value 0 in
8571mode MODE.  If mode MODE is of mode class 'MODE_INT', it returns
8572'const0_rtx'.  If mode MODE is of mode class 'MODE_FLOAT', it returns a
8573'CONST_DOUBLE' expression in mode MODE.  Otherwise, it returns a
8574'CONST_VECTOR' expression in mode MODE.  Similarly, the macro
8575'CONST1_RTX (MODE)' refers to an expression with value 1 in mode MODE
8576and similarly for 'CONST2_RTX'.  The 'CONST1_RTX' and 'CONST2_RTX'
8577macros are undefined for vector modes.
8578
8579
8580File: gccint.info,  Node: Regs and Memory,  Next: Arithmetic,  Prev: Constants,  Up: RTL
8581
858210.8 Registers and Memory
8583=========================
8584
8585Here are the RTL expression types for describing access to machine
8586registers and to main memory.
8587
8588'(reg:M N)'
8589     For small values of the integer N (those that are less than
8590     'FIRST_PSEUDO_REGISTER'), this stands for a reference to machine
8591     register number N: a "hard register".  For larger values of N, it
8592     stands for a temporary value or "pseudo register".  The compiler's
8593     strategy is to generate code assuming an unlimited number of such
8594     pseudo registers, and later convert them into hard registers or
8595     into memory references.
8596
8597     M is the machine mode of the reference.  It is necessary because
8598     machines can generally refer to each register in more than one
8599     mode.  For example, a register may contain a full word but there
8600     may be instructions to refer to it as a half word or as a single
8601     byte, as well as instructions to refer to it as a floating point
8602     number of various precisions.
8603
8604     Even for a register that the machine can access in only one mode,
8605     the mode must always be specified.
8606
8607     The symbol 'FIRST_PSEUDO_REGISTER' is defined by the machine
8608     description, since the number of hard registers on the machine is
8609     an invariant characteristic of the machine.  Note, however, that
8610     not all of the machine registers must be general registers.  All
8611     the machine registers that can be used for storage of data are
8612     given hard register numbers, even those that can be used only in
8613     certain instructions or can hold only certain types of data.
8614
8615     A hard register may be accessed in various modes throughout one
8616     function, but each pseudo register is given a natural mode and is
8617     accessed only in that mode.  When it is necessary to describe an
8618     access to a pseudo register using a nonnatural mode, a 'subreg'
8619     expression is used.
8620
8621     A 'reg' expression with a machine mode that specifies more than one
8622     word of data may actually stand for several consecutive registers.
8623     If in addition the register number specifies a hardware register,
8624     then it actually represents several consecutive hardware registers
8625     starting with the specified one.
8626
8627     Each pseudo register number used in a function's RTL code is
8628     represented by a unique 'reg' expression.
8629
8630     Some pseudo register numbers, those within the range of
8631     'FIRST_VIRTUAL_REGISTER' to 'LAST_VIRTUAL_REGISTER' only appear
8632     during the RTL generation phase and are eliminated before the
8633     optimization phases.  These represent locations in the stack frame
8634     that cannot be determined until RTL generation for the function has
8635     been completed.  The following virtual register numbers are
8636     defined:
8637
8638     'VIRTUAL_INCOMING_ARGS_REGNUM'
8639          This points to the first word of the incoming arguments passed
8640          on the stack.  Normally these arguments are placed there by
8641          the caller, but the callee may have pushed some arguments that
8642          were previously passed in registers.
8643
8644          When RTL generation is complete, this virtual register is
8645          replaced by the sum of the register given by
8646          'ARG_POINTER_REGNUM' and the value of 'FIRST_PARM_OFFSET'.
8647
8648     'VIRTUAL_STACK_VARS_REGNUM'
8649          If 'FRAME_GROWS_DOWNWARD' is defined to a nonzero value, this
8650          points to immediately above the first variable on the stack.
8651          Otherwise, it points to the first variable on the stack.
8652
8653          'VIRTUAL_STACK_VARS_REGNUM' is replaced with the sum of the
8654          register given by 'FRAME_POINTER_REGNUM' and the value
8655          'STARTING_FRAME_OFFSET'.
8656
8657     'VIRTUAL_STACK_DYNAMIC_REGNUM'
8658          This points to the location of dynamically allocated memory on
8659          the stack immediately after the stack pointer has been
8660          adjusted by the amount of memory desired.
8661
8662          This virtual register is replaced by the sum of the register
8663          given by 'STACK_POINTER_REGNUM' and the value
8664          'STACK_DYNAMIC_OFFSET'.
8665
8666     'VIRTUAL_OUTGOING_ARGS_REGNUM'
8667          This points to the location in the stack at which outgoing
8668          arguments should be written when the stack is pre-pushed
8669          (arguments pushed using push insns should always use
8670          'STACK_POINTER_REGNUM').
8671
8672          This virtual register is replaced by the sum of the register
8673          given by 'STACK_POINTER_REGNUM' and the value
8674          'STACK_POINTER_OFFSET'.
8675
8676'(subreg:M1 REG:M2 BYTENUM)'
8677
8678     'subreg' expressions are used to refer to a register in a machine
8679     mode other than its natural one, or to refer to one register of a
8680     multi-part 'reg' that actually refers to several registers.
8681
8682     Each pseudo register has a natural mode.  If it is necessary to
8683     operate on it in a different mode, the register must be enclosed in
8684     a 'subreg'.
8685
8686     There are currently three supported types for the first operand of
8687     a 'subreg':
8688        * pseudo registers This is the most common case.  Most 'subreg's
8689          have pseudo 'reg's as their first operand.
8690
8691        * mem 'subreg's of 'mem' were common in earlier versions of GCC
8692          and are still supported.  During the reload pass these are
8693          replaced by plain 'mem's.  On machines that do not do
8694          instruction scheduling, use of 'subreg's of 'mem' are still
8695          used, but this is no longer recommended.  Such 'subreg's are
8696          considered to be 'register_operand's rather than
8697          'memory_operand's before and during reload.  Because of this,
8698          the scheduling passes cannot properly schedule instructions
8699          with 'subreg's of 'mem', so for machines that do scheduling,
8700          'subreg's of 'mem' should never be used.  To support this, the
8701          combine and recog passes have explicit code to inhibit the
8702          creation of 'subreg's of 'mem' when 'INSN_SCHEDULING' is
8703          defined.
8704
8705          The use of 'subreg's of 'mem' after the reload pass is an area
8706          that is not well understood and should be avoided.  There is
8707          still some code in the compiler to support this, but this code
8708          has possibly rotted.  This use of 'subreg's is discouraged and
8709          will most likely not be supported in the future.
8710
8711        * hard registers It is seldom necessary to wrap hard registers
8712          in 'subreg's; such registers would normally reduce to a single
8713          'reg' rtx.  This use of 'subreg's is discouraged and may not
8714          be supported in the future.
8715
8716     'subreg's of 'subreg's are not supported.  Using
8717     'simplify_gen_subreg' is the recommended way to avoid this problem.
8718
8719     'subreg's come in two distinct flavors, each having its own usage
8720     and rules:
8721
8722     Paradoxical subregs
8723          When M1 is strictly wider than M2, the 'subreg' expression is
8724          called "paradoxical".  The canonical test for this class of
8725          'subreg' is:
8726
8727               GET_MODE_SIZE (M1) > GET_MODE_SIZE (M2)
8728
8729          Paradoxical 'subreg's can be used as both lvalues and rvalues.
8730          When used as an lvalue, the low-order bits of the source value
8731          are stored in REG and the high-order bits are discarded.  When
8732          used as an rvalue, the low-order bits of the 'subreg' are
8733          taken from REG while the high-order bits may or may not be
8734          defined.
8735
8736          The high-order bits of rvalues are in the following
8737          circumstances:
8738
8739             * 'subreg's of 'mem' When M2 is smaller than a word, the
8740               macro 'LOAD_EXTEND_OP', can control how the high-order
8741               bits are defined.
8742
8743             * 'subreg' of 'reg's The upper bits are defined when
8744               'SUBREG_PROMOTED_VAR_P' is true.
8745               'SUBREG_PROMOTED_UNSIGNED_P' describes what the upper
8746               bits hold.  Such subregs usually represent local
8747               variables, register variables and parameter pseudo
8748               variables that have been promoted to a wider mode.
8749
8750          BYTENUM is always zero for a paradoxical 'subreg', even on
8751          big-endian targets.
8752
8753          For example, the paradoxical 'subreg':
8754
8755               (set (subreg:SI (reg:HI X) 0) Y)
8756
8757          stores the lower 2 bytes of Y in X and discards the upper 2
8758          bytes.  A subsequent:
8759
8760               (set Z (subreg:SI (reg:HI X) 0))
8761
8762          would set the lower two bytes of Z to Y and set the upper two
8763          bytes to an unknown value assuming 'SUBREG_PROMOTED_VAR_P' is
8764          false.
8765
8766     Normal subregs
8767          When M1 is at least as narrow as M2 the 'subreg' expression is
8768          called "normal".
8769
8770          Normal 'subreg's restrict consideration to certain bits of
8771          REG.  There are two cases.  If M1 is smaller than a word, the
8772          'subreg' refers to the least-significant part (or "lowpart")
8773          of one word of REG.  If M1 is word-sized or greater, the
8774          'subreg' refers to one or more complete words.
8775
8776          When used as an lvalue, 'subreg' is a word-based accessor.
8777          Storing to a 'subreg' modifies all the words of REG that
8778          overlap the 'subreg', but it leaves the other words of REG
8779          alone.
8780
8781          When storing to a normal 'subreg' that is smaller than a word,
8782          the other bits of the referenced word are usually left in an
8783          undefined state.  This laxity makes it easier to generate
8784          efficient code for such instructions.  To represent an
8785          instruction that preserves all the bits outside of those in
8786          the 'subreg', use 'strict_low_part' or 'zero_extract' around
8787          the 'subreg'.
8788
8789          BYTENUM must identify the offset of the first byte of the
8790          'subreg' from the start of REG, assuming that REG is laid out
8791          in memory order.  The memory order of bytes is defined by two
8792          target macros, 'WORDS_BIG_ENDIAN' and 'BYTES_BIG_ENDIAN':
8793
8794             * 'WORDS_BIG_ENDIAN', if set to 1, says that byte number
8795               zero is part of the most significant word; otherwise, it
8796               is part of the least significant word.
8797
8798             * 'BYTES_BIG_ENDIAN', if set to 1, says that byte number
8799               zero is the most significant byte within a word;
8800               otherwise, it is the least significant byte within a
8801               word.
8802
8803          On a few targets, 'FLOAT_WORDS_BIG_ENDIAN' disagrees with
8804          'WORDS_BIG_ENDIAN'.  However, most parts of the compiler treat
8805          floating point values as if they had the same endianness as
8806          integer values.  This works because they handle them solely as
8807          a collection of integer values, with no particular numerical
8808          value.  Only real.c and the runtime libraries care about
8809          'FLOAT_WORDS_BIG_ENDIAN'.
8810
8811          Thus,
8812
8813               (subreg:HI (reg:SI X) 2)
8814
8815          on a 'BYTES_BIG_ENDIAN', 'UNITS_PER_WORD == 4' target is the
8816          same as
8817
8818               (subreg:HI (reg:SI X) 0)
8819
8820          on a little-endian, 'UNITS_PER_WORD == 4' target.  Both
8821          'subreg's access the lower two bytes of register X.
8822
8823     A 'MODE_PARTIAL_INT' mode behaves as if it were as wide as the
8824     corresponding 'MODE_INT' mode, except that it has an unknown number
8825     of undefined bits.  For example:
8826
8827          (subreg:PSI (reg:SI 0) 0)
8828
8829     accesses the whole of '(reg:SI 0)', but the exact relationship
8830     between the 'PSImode' value and the 'SImode' value is not defined.
8831     If we assume 'UNITS_PER_WORD <= 4', then the following two
8832     'subreg's:
8833
8834          (subreg:PSI (reg:DI 0) 0)
8835          (subreg:PSI (reg:DI 0) 4)
8836
8837     represent independent 4-byte accesses to the two halves of '(reg:DI
8838     0)'.  Both 'subreg's have an unknown number of undefined bits.
8839
8840     If 'UNITS_PER_WORD <= 2' then these two 'subreg's:
8841
8842          (subreg:HI (reg:PSI 0) 0)
8843          (subreg:HI (reg:PSI 0) 2)
8844
8845     represent independent 2-byte accesses that together span the whole
8846     of '(reg:PSI 0)'.  Storing to the first 'subreg' does not affect
8847     the value of the second, and vice versa.  '(reg:PSI 0)' has an
8848     unknown number of undefined bits, so the assignment:
8849
8850          (set (subreg:HI (reg:PSI 0) 0) (reg:HI 4))
8851
8852     does not guarantee that '(subreg:HI (reg:PSI 0) 0)' has the value
8853     '(reg:HI 4)'.
8854
8855     The rules above apply to both pseudo REGs and hard REGs.  If the
8856     semantics are not correct for particular combinations of M1, M2 and
8857     hard REG, the target-specific code must ensure that those
8858     combinations are never used.  For example:
8859
8860          CANNOT_CHANGE_MODE_CLASS (M2, M1, CLASS)
8861
8862     must be true for every class CLASS that includes REG.
8863
8864     The first operand of a 'subreg' expression is customarily accessed
8865     with the 'SUBREG_REG' macro and the second operand is customarily
8866     accessed with the 'SUBREG_BYTE' macro.
8867
8868     It has been several years since a platform in which
8869     'BYTES_BIG_ENDIAN' not equal to 'WORDS_BIG_ENDIAN' has been tested.
8870     Anyone wishing to support such a platform in the future may be
8871     confronted with code rot.
8872
8873'(scratch:M)'
8874     This represents a scratch register that will be required for the
8875     execution of a single instruction and not used subsequently.  It is
8876     converted into a 'reg' by either the local register allocator or
8877     the reload pass.
8878
8879     'scratch' is usually present inside a 'clobber' operation (*note
8880     Side Effects::).
8881
8882'(cc0)'
8883     This refers to the machine's condition code register.  It has no
8884     operands and may not have a machine mode.  There are two ways to
8885     use it:
8886
8887        * To stand for a complete set of condition code flags.  This is
8888          best on most machines, where each comparison sets the entire
8889          series of flags.
8890
8891          With this technique, '(cc0)' may be validly used in only two
8892          contexts: as the destination of an assignment (in test and
8893          compare instructions) and in comparison operators comparing
8894          against zero ('const_int' with value zero; that is to say,
8895          'const0_rtx').
8896
8897        * To stand for a single flag that is the result of a single
8898          condition.  This is useful on machines that have only a single
8899          flag bit, and in which comparison instructions must specify
8900          the condition to test.
8901
8902          With this technique, '(cc0)' may be validly used in only two
8903          contexts: as the destination of an assignment (in test and
8904          compare instructions) where the source is a comparison
8905          operator, and as the first operand of 'if_then_else' (in a
8906          conditional branch).
8907
8908     There is only one expression object of code 'cc0'; it is the value
8909     of the variable 'cc0_rtx'.  Any attempt to create an expression of
8910     code 'cc0' will return 'cc0_rtx'.
8911
8912     Instructions can set the condition code implicitly.  On many
8913     machines, nearly all instructions set the condition code based on
8914     the value that they compute or store.  It is not necessary to
8915     record these actions explicitly in the RTL because the machine
8916     description includes a prescription for recognizing the
8917     instructions that do so (by means of the macro 'NOTICE_UPDATE_CC').
8918     *Note Condition Code::.  Only instructions whose sole purpose is to
8919     set the condition code, and instructions that use the condition
8920     code, need mention '(cc0)'.
8921
8922     On some machines, the condition code register is given a register
8923     number and a 'reg' is used instead of '(cc0)'.  This is usually the
8924     preferable approach if only a small subset of instructions modify
8925     the condition code.  Other machines store condition codes in
8926     general registers; in such cases a pseudo register should be used.
8927
8928     Some machines, such as the SPARC and RS/6000, have two sets of
8929     arithmetic instructions, one that sets and one that does not set
8930     the condition code.  This is best handled by normally generating
8931     the instruction that does not set the condition code, and making a
8932     pattern that both performs the arithmetic and sets the condition
8933     code register (which would not be '(cc0)' in this case).  For
8934     examples, search for 'addcc' and 'andcc' in 'sparc.md'.
8935
8936'(pc)'
8937     This represents the machine's program counter.  It has no operands
8938     and may not have a machine mode.  '(pc)' may be validly used only
8939     in certain specific contexts in jump instructions.
8940
8941     There is only one expression object of code 'pc'; it is the value
8942     of the variable 'pc_rtx'.  Any attempt to create an expression of
8943     code 'pc' will return 'pc_rtx'.
8944
8945     All instructions that do not jump alter the program counter
8946     implicitly by incrementing it, but there is no need to mention this
8947     in the RTL.
8948
8949'(mem:M ADDR ALIAS)'
8950     This RTX represents a reference to main memory at an address
8951     represented by the expression ADDR.  M specifies how large a unit
8952     of memory is accessed.  ALIAS specifies an alias set for the
8953     reference.  In general two items are in different alias sets if
8954     they cannot reference the same memory address.
8955
8956     The construct '(mem:BLK (scratch))' is considered to alias all
8957     other memories.  Thus it may be used as a memory barrier in
8958     epilogue stack deallocation patterns.
8959
8960'(concatM RTX RTX)'
8961     This RTX represents the concatenation of two other RTXs.  This is
8962     used for complex values.  It should only appear in the RTL attached
8963     to declarations and during RTL generation.  It should not appear in
8964     the ordinary insn chain.
8965
8966'(concatnM [RTX ...])'
8967     This RTX represents the concatenation of all the RTX to make a
8968     single value.  Like 'concat', this should only appear in
8969     declarations, and not in the insn chain.
8970
8971
8972File: gccint.info,  Node: Arithmetic,  Next: Comparisons,  Prev: Regs and Memory,  Up: RTL
8973
897410.9 RTL Expressions for Arithmetic
8975===================================
8976
8977Unless otherwise specified, all the operands of arithmetic expressions
8978must be valid for mode M.  An operand is valid for mode M if it has mode
8979M, or if it is a 'const_int' or 'const_double' and M is a mode of class
8980'MODE_INT'.
8981
8982 For commutative binary operations, constants should be placed in the
8983second operand.
8984
8985'(plus:M X Y)'
8986'(ss_plus:M X Y)'
8987'(us_plus:M X Y)'
8988
8989     These three expressions all represent the sum of the values
8990     represented by X and Y carried out in machine mode M.  They differ
8991     in their behavior on overflow of integer modes.  'plus' wraps round
8992     modulo the width of M; 'ss_plus' saturates at the maximum signed
8993     value representable in M; 'us_plus' saturates at the maximum
8994     unsigned value.
8995
8996'(lo_sum:M X Y)'
8997
8998     This expression represents the sum of X and the low-order bits of
8999     Y.  It is used with 'high' (*note Constants::) to represent the
9000     typical two-instruction sequence used in RISC machines to reference
9001     a global memory location.
9002
9003     The number of low order bits is machine-dependent but is normally
9004     the number of bits in a 'Pmode' item minus the number of bits set
9005     by 'high'.
9006
9007     M should be 'Pmode'.
9008
9009'(minus:M X Y)'
9010'(ss_minus:M X Y)'
9011'(us_minus:M X Y)'
9012
9013     These three expressions represent the result of subtracting Y from
9014     X, carried out in mode M.  Behavior on overflow is the same as for
9015     the three variants of 'plus' (see above).
9016
9017'(compare:M X Y)'
9018     Represents the result of subtracting Y from X for purposes of
9019     comparison.  The result is computed without overflow, as if with
9020     infinite precision.
9021
9022     Of course, machines can't really subtract with infinite precision.
9023     However, they can pretend to do so when only the sign of the result
9024     will be used, which is the case when the result is stored in the
9025     condition code.  And that is the _only_ way this kind of expression
9026     may validly be used: as a value to be stored in the condition
9027     codes, either '(cc0)' or a register.  *Note Comparisons::.
9028
9029     The mode M is not related to the modes of X and Y, but instead is
9030     the mode of the condition code value.  If '(cc0)' is used, it is
9031     'VOIDmode'.  Otherwise it is some mode in class 'MODE_CC', often
9032     'CCmode'.  *Note Condition Code::.  If M is 'VOIDmode' or 'CCmode',
9033     the operation returns sufficient information (in an unspecified
9034     format) so that any comparison operator can be applied to the
9035     result of the 'COMPARE' operation.  For other modes in class
9036     'MODE_CC', the operation only returns a subset of this information.
9037
9038     Normally, X and Y must have the same mode.  Otherwise, 'compare' is
9039     valid only if the mode of X is in class 'MODE_INT' and Y is a
9040     'const_int' or 'const_double' with mode 'VOIDmode'.  The mode of X
9041     determines what mode the comparison is to be done in; thus it must
9042     not be 'VOIDmode'.
9043
9044     If one of the operands is a constant, it should be placed in the
9045     second operand and the comparison code adjusted as appropriate.
9046
9047     A 'compare' specifying two 'VOIDmode' constants is not valid since
9048     there is no way to know in what mode the comparison is to be
9049     performed; the comparison must either be folded during the
9050     compilation or the first operand must be loaded into a register
9051     while its mode is still known.
9052
9053'(neg:M X)'
9054'(ss_neg:M X)'
9055'(us_neg:M X)'
9056     These two expressions represent the negation (subtraction from
9057     zero) of the value represented by X, carried out in mode M.  They
9058     differ in the behavior on overflow of integer modes.  In the case
9059     of 'neg', the negation of the operand may be a number not
9060     representable in mode M, in which case it is truncated to M.
9061     'ss_neg' and 'us_neg' ensure that an out-of-bounds result saturates
9062     to the maximum or minimum signed or unsigned value.
9063
9064'(mult:M X Y)'
9065'(ss_mult:M X Y)'
9066'(us_mult:M X Y)'
9067     Represents the signed product of the values represented by X and Y
9068     carried out in machine mode M.  'ss_mult' and 'us_mult' ensure that
9069     an out-of-bounds result saturates to the maximum or minimum signed
9070     or unsigned value.
9071
9072     Some machines support a multiplication that generates a product
9073     wider than the operands.  Write the pattern for this as
9074
9075          (mult:M (sign_extend:M X) (sign_extend:M Y))
9076
9077     where M is wider than the modes of X and Y, which need not be the
9078     same.
9079
9080     For unsigned widening multiplication, use the same idiom, but with
9081     'zero_extend' instead of 'sign_extend'.
9082
9083'(fma:M X Y Z)'
9084     Represents the 'fma', 'fmaf', and 'fmal' builtin functions that do
9085     a combined multiply of X and Y and then adding toZ without doing an
9086     intermediate rounding step.
9087
9088'(div:M X Y)'
9089'(ss_div:M X Y)'
9090     Represents the quotient in signed division of X by Y, carried out
9091     in machine mode M.  If M is a floating point mode, it represents
9092     the exact quotient; otherwise, the integerized quotient.  'ss_div'
9093     ensures that an out-of-bounds result saturates to the maximum or
9094     minimum signed value.
9095
9096     Some machines have division instructions in which the operands and
9097     quotient widths are not all the same; you should represent such
9098     instructions using 'truncate' and 'sign_extend' as in,
9099
9100          (truncate:M1 (div:M2 X (sign_extend:M2 Y)))
9101
9102'(udiv:M X Y)'
9103'(us_div:M X Y)'
9104     Like 'div' but represents unsigned division.  'us_div' ensures that
9105     an out-of-bounds result saturates to the maximum or minimum
9106     unsigned value.
9107
9108'(mod:M X Y)'
9109'(umod:M X Y)'
9110     Like 'div' and 'udiv' but represent the remainder instead of the
9111     quotient.
9112
9113'(smin:M X Y)'
9114'(smax:M X Y)'
9115     Represents the smaller (for 'smin') or larger (for 'smax') of X and
9116     Y, interpreted as signed values in mode M.  When used with floating
9117     point, if both operands are zeros, or if either operand is 'NaN',
9118     then it is unspecified which of the two operands is returned as the
9119     result.
9120
9121'(umin:M X Y)'
9122'(umax:M X Y)'
9123     Like 'smin' and 'smax', but the values are interpreted as unsigned
9124     integers.
9125
9126'(not:M X)'
9127     Represents the bitwise complement of the value represented by X,
9128     carried out in mode M, which must be a fixed-point machine mode.
9129
9130'(and:M X Y)'
9131     Represents the bitwise logical-and of the values represented by X
9132     and Y, carried out in machine mode M, which must be a fixed-point
9133     machine mode.
9134
9135'(ior:M X Y)'
9136     Represents the bitwise inclusive-or of the values represented by X
9137     and Y, carried out in machine mode M, which must be a fixed-point
9138     mode.
9139
9140'(xor:M X Y)'
9141     Represents the bitwise exclusive-or of the values represented by X
9142     and Y, carried out in machine mode M, which must be a fixed-point
9143     mode.
9144
9145'(ashift:M X C)'
9146'(ss_ashift:M X C)'
9147'(us_ashift:M X C)'
9148     These three expressions represent the result of arithmetically
9149     shifting X left by C places.  They differ in their behavior on
9150     overflow of integer modes.  An 'ashift' operation is a plain shift
9151     with no special behavior in case of a change in the sign bit;
9152     'ss_ashift' and 'us_ashift' saturates to the minimum or maximum
9153     representable value if any of the bits shifted out differs from the
9154     final sign bit.
9155
9156     X have mode M, a fixed-point machine mode.  C be a fixed-point mode
9157     or be a constant with mode 'VOIDmode'; which mode is determined by
9158     the mode called for in the machine description entry for the
9159     left-shift instruction.  For example, on the VAX, the mode of C is
9160     'QImode' regardless of M.
9161
9162'(lshiftrt:M X C)'
9163'(ashiftrt:M X C)'
9164     Like 'ashift' but for right shift.  Unlike the case for left shift,
9165     these two operations are distinct.
9166
9167'(rotate:M X C)'
9168'(rotatert:M X C)'
9169     Similar but represent left and right rotate.  If C is a constant,
9170     use 'rotate'.
9171
9172'(abs:M X)'
9173'(ss_abs:M X)'
9174     Represents the absolute value of X, computed in mode M.  'ss_abs'
9175     ensures that an out-of-bounds result saturates to the maximum
9176     signed value.
9177
9178'(sqrt:M X)'
9179     Represents the square root of X, computed in mode M.  Most often M
9180     will be a floating point mode.
9181
9182'(ffs:M X)'
9183     Represents one plus the index of the least significant 1-bit in X,
9184     represented as an integer of mode M.  (The value is zero if X is
9185     zero.)  The mode of X must be M or 'VOIDmode'.
9186
9187'(clrsb:M X)'
9188     Represents the number of redundant leading sign bits in X,
9189     represented as an integer of mode M, starting at the most
9190     significant bit position.  This is one less than the number of
9191     leading sign bits (either 0 or 1), with no special cases.  The mode
9192     of X must be M or 'VOIDmode'.
9193
9194'(clz:M X)'
9195     Represents the number of leading 0-bits in X, represented as an
9196     integer of mode M, starting at the most significant bit position.
9197     If X is zero, the value is determined by
9198     'CLZ_DEFINED_VALUE_AT_ZERO' (*note Misc::).  Note that this is one
9199     of the few expressions that is not invariant under widening.  The
9200     mode of X must be M or 'VOIDmode'.
9201
9202'(ctz:M X)'
9203     Represents the number of trailing 0-bits in X, represented as an
9204     integer of mode M, starting at the least significant bit position.
9205     If X is zero, the value is determined by
9206     'CTZ_DEFINED_VALUE_AT_ZERO' (*note Misc::).  Except for this case,
9207     'ctz(x)' is equivalent to 'ffs(X) - 1'.  The mode of X must be M or
9208     'VOIDmode'.
9209
9210'(popcount:M X)'
9211     Represents the number of 1-bits in X, represented as an integer of
9212     mode M.  The mode of X must be M or 'VOIDmode'.
9213
9214'(parity:M X)'
9215     Represents the number of 1-bits modulo 2 in X, represented as an
9216     integer of mode M.  The mode of X must be M or 'VOIDmode'.
9217
9218'(bswap:M X)'
9219     Represents the value X with the order of bytes reversed, carried
9220     out in mode M, which must be a fixed-point machine mode.  The mode
9221     of X must be M or 'VOIDmode'.
9222
9223
9224File: gccint.info,  Node: Comparisons,  Next: Bit-Fields,  Prev: Arithmetic,  Up: RTL
9225
922610.10 Comparison Operations
9227===========================
9228
9229Comparison operators test a relation on two operands and are considered
9230to represent a machine-dependent nonzero value described by, but not
9231necessarily equal to, 'STORE_FLAG_VALUE' (*note Misc::) if the relation
9232holds, or zero if it does not, for comparison operators whose results
9233have a 'MODE_INT' mode, 'FLOAT_STORE_FLAG_VALUE' (*note Misc::) if the
9234relation holds, or zero if it does not, for comparison operators that
9235return floating-point values, and a vector of either
9236'VECTOR_STORE_FLAG_VALUE' (*note Misc::) if the relation holds, or of
9237zeros if it does not, for comparison operators that return vector
9238results.  The mode of the comparison operation is independent of the
9239mode of the data being compared.  If the comparison operation is being
9240tested (e.g., the first operand of an 'if_then_else'), the mode must be
9241'VOIDmode'.
9242
9243 There are two ways that comparison operations may be used.  The
9244comparison operators may be used to compare the condition codes '(cc0)'
9245against zero, as in '(eq (cc0) (const_int 0))'.  Such a construct
9246actually refers to the result of the preceding instruction in which the
9247condition codes were set.  The instruction setting the condition code
9248must be adjacent to the instruction using the condition code; only
9249'note' insns may separate them.
9250
9251 Alternatively, a comparison operation may directly compare two data
9252objects.  The mode of the comparison is determined by the operands; they
9253must both be valid for a common machine mode.  A comparison with both
9254operands constant would be invalid as the machine mode could not be
9255deduced from it, but such a comparison should never exist in RTL due to
9256constant folding.
9257
9258 In the example above, if '(cc0)' were last set to '(compare X Y)', the
9259comparison operation is identical to '(eq X Y)'.  Usually only one style
9260of comparisons is supported on a particular machine, but the combine
9261pass will try to merge the operations to produce the 'eq' shown in case
9262it exists in the context of the particular insn involved.
9263
9264 Inequality comparisons come in two flavors, signed and unsigned.  Thus,
9265there are distinct expression codes 'gt' and 'gtu' for signed and
9266unsigned greater-than.  These can produce different results for the same
9267pair of integer values: for example, 1 is signed greater-than -1 but not
9268unsigned greater-than, because -1 when regarded as unsigned is actually
9269'0xffffffff' which is greater than 1.
9270
9271 The signed comparisons are also used for floating point values.
9272Floating point comparisons are distinguished by the machine modes of the
9273operands.
9274
9275'(eq:M X Y)'
9276     'STORE_FLAG_VALUE' if the values represented by X and Y are equal,
9277     otherwise 0.
9278
9279'(ne:M X Y)'
9280     'STORE_FLAG_VALUE' if the values represented by X and Y are not
9281     equal, otherwise 0.
9282
9283'(gt:M X Y)'
9284     'STORE_FLAG_VALUE' if the X is greater than Y.  If they are
9285     fixed-point, the comparison is done in a signed sense.
9286
9287'(gtu:M X Y)'
9288     Like 'gt' but does unsigned comparison, on fixed-point numbers
9289     only.
9290
9291'(lt:M X Y)'
9292'(ltu:M X Y)'
9293     Like 'gt' and 'gtu' but test for "less than".
9294
9295'(ge:M X Y)'
9296'(geu:M X Y)'
9297     Like 'gt' and 'gtu' but test for "greater than or equal".
9298
9299'(le:M X Y)'
9300'(leu:M X Y)'
9301     Like 'gt' and 'gtu' but test for "less than or equal".
9302
9303'(if_then_else COND THEN ELSE)'
9304     This is not a comparison operation but is listed here because it is
9305     always used in conjunction with a comparison operation.  To be
9306     precise, COND is a comparison expression.  This expression
9307     represents a choice, according to COND, between the value
9308     represented by THEN and the one represented by ELSE.
9309
9310     On most machines, 'if_then_else' expressions are valid only to
9311     express conditional jumps.
9312
9313'(cond [TEST1 VALUE1 TEST2 VALUE2 ...] DEFAULT)'
9314     Similar to 'if_then_else', but more general.  Each of TEST1, TEST2,
9315     ... is performed in turn.  The result of this expression is the
9316     VALUE corresponding to the first nonzero test, or DEFAULT if none
9317     of the tests are nonzero expressions.
9318
9319     This is currently not valid for instruction patterns and is
9320     supported only for insn attributes.  *Note Insn Attributes::.
9321
9322
9323File: gccint.info,  Node: Bit-Fields,  Next: Vector Operations,  Prev: Comparisons,  Up: RTL
9324
932510.11 Bit-Fields
9326================
9327
9328Special expression codes exist to represent bit-field instructions.
9329
9330'(sign_extract:M LOC SIZE POS)'
9331     This represents a reference to a sign-extended bit-field contained
9332     or starting in LOC (a memory or register reference).  The bit-field
9333     is SIZE bits wide and starts at bit POS.  The compilation option
9334     'BITS_BIG_ENDIAN' says which end of the memory unit POS counts
9335     from.
9336
9337     If LOC is in memory, its mode must be a single-byte integer mode.
9338     If LOC is in a register, the mode to use is specified by the
9339     operand of the 'insv' or 'extv' pattern (*note Standard Names::)
9340     and is usually a full-word integer mode, which is the default if
9341     none is specified.
9342
9343     The mode of POS is machine-specific and is also specified in the
9344     'insv' or 'extv' pattern.
9345
9346     The mode M is the same as the mode that would be used for LOC if it
9347     were a register.
9348
9349     A 'sign_extract' can not appear as an lvalue, or part thereof, in
9350     RTL.
9351
9352'(zero_extract:M LOC SIZE POS)'
9353     Like 'sign_extract' but refers to an unsigned or zero-extended
9354     bit-field.  The same sequence of bits are extracted, but they are
9355     filled to an entire word with zeros instead of by sign-extension.
9356
9357     Unlike 'sign_extract', this type of expressions can be lvalues in
9358     RTL; they may appear on the left side of an assignment, indicating
9359     insertion of a value into the specified bit-field.
9360
9361
9362File: gccint.info,  Node: Vector Operations,  Next: Conversions,  Prev: Bit-Fields,  Up: RTL
9363
936410.12 Vector Operations
9365=======================
9366
9367All normal RTL expressions can be used with vector modes; they are
9368interpreted as operating on each part of the vector independently.
9369Additionally, there are a few new expressions to describe specific
9370vector operations.
9371
9372'(vec_merge:M VEC1 VEC2 ITEMS)'
9373     This describes a merge operation between two vectors.  The result
9374     is a vector of mode M; its elements are selected from either VEC1
9375     or VEC2.  Which elements are selected is described by ITEMS, which
9376     is a bit mask represented by a 'const_int'; a zero bit indicates
9377     the corresponding element in the result vector is taken from VEC2
9378     while a set bit indicates it is taken from VEC1.
9379
9380'(vec_select:M VEC1 SELECTION)'
9381     This describes an operation that selects parts of a vector.  VEC1
9382     is the source vector, and SELECTION is a 'parallel' that contains a
9383     'const_int' for each of the subparts of the result vector, giving
9384     the number of the source subpart that should be stored into it.
9385     The result mode M is either the submode for a single element of
9386     VEC1 (if only one subpart is selected), or another vector mode with
9387     that element submode (if multiple subparts are selected).
9388
9389'(vec_concat:M X1 X2)'
9390     Describes a vector concat operation.  The result is a concatenation
9391     of the vectors or scalars X1 and X2; its length is the sum of the
9392     lengths of the two inputs.
9393
9394'(vec_duplicate:M X)'
9395     This operation converts a scalar into a vector or a small vector
9396     into a larger one by duplicating the input values.  The output
9397     vector mode must have the same submodes as the input vector mode or
9398     the scalar modes, and the number of output parts must be an integer
9399     multiple of the number of input parts.
9400
9401
9402File: gccint.info,  Node: Conversions,  Next: RTL Declarations,  Prev: Vector Operations,  Up: RTL
9403
940410.13 Conversions
9405=================
9406
9407All conversions between machine modes must be represented by explicit
9408conversion operations.  For example, an expression which is the sum of a
9409byte and a full word cannot be written as '(plus:SI (reg:QI 34) (reg:SI
941080))' because the 'plus' operation requires two operands of the same
9411machine mode.  Therefore, the byte-sized operand is enclosed in a
9412conversion operation, as in
9413
9414     (plus:SI (sign_extend:SI (reg:QI 34)) (reg:SI 80))
9415
9416 The conversion operation is not a mere placeholder, because there may
9417be more than one way of converting from a given starting mode to the
9418desired final mode.  The conversion operation code says how to do it.
9419
9420 For all conversion operations, X must not be 'VOIDmode' because the
9421mode in which to do the conversion would not be known.  The conversion
9422must either be done at compile-time or X must be placed into a register.
9423
9424'(sign_extend:M X)'
9425     Represents the result of sign-extending the value X to machine mode
9426     M.  M must be a fixed-point mode and X a fixed-point value of a
9427     mode narrower than M.
9428
9429'(zero_extend:M X)'
9430     Represents the result of zero-extending the value X to machine mode
9431     M.  M must be a fixed-point mode and X a fixed-point value of a
9432     mode narrower than M.
9433
9434'(float_extend:M X)'
9435     Represents the result of extending the value X to machine mode M.
9436     M must be a floating point mode and X a floating point value of a
9437     mode narrower than M.
9438
9439'(truncate:M X)'
9440     Represents the result of truncating the value X to machine mode M.
9441     M must be a fixed-point mode and X a fixed-point value of a mode
9442     wider than M.
9443
9444'(ss_truncate:M X)'
9445     Represents the result of truncating the value X to machine mode M,
9446     using signed saturation in the case of overflow.  Both M and the
9447     mode of X must be fixed-point modes.
9448
9449'(us_truncate:M X)'
9450     Represents the result of truncating the value X to machine mode M,
9451     using unsigned saturation in the case of overflow.  Both M and the
9452     mode of X must be fixed-point modes.
9453
9454'(float_truncate:M X)'
9455     Represents the result of truncating the value X to machine mode M.
9456     M must be a floating point mode and X a floating point value of a
9457     mode wider than M.
9458
9459'(float:M X)'
9460     Represents the result of converting fixed point value X, regarded
9461     as signed, to floating point mode M.
9462
9463'(unsigned_float:M X)'
9464     Represents the result of converting fixed point value X, regarded
9465     as unsigned, to floating point mode M.
9466
9467'(fix:M X)'
9468     When M is a floating-point mode, represents the result of
9469     converting floating point value X (valid for mode M) to an integer,
9470     still represented in floating point mode M, by rounding towards
9471     zero.
9472
9473     When M is a fixed-point mode, represents the result of converting
9474     floating point value X to mode M, regarded as signed.  How rounding
9475     is done is not specified, so this operation may be used validly in
9476     compiling C code only for integer-valued operands.
9477
9478'(unsigned_fix:M X)'
9479     Represents the result of converting floating point value X to fixed
9480     point mode M, regarded as unsigned.  How rounding is done is not
9481     specified.
9482
9483'(fract_convert:M X)'
9484     Represents the result of converting fixed-point value X to
9485     fixed-point mode M, signed integer value X to fixed-point mode M,
9486     floating-point value X to fixed-point mode M, fixed-point value X
9487     to integer mode M regarded as signed, or fixed-point value X to
9488     floating-point mode M.  When overflows or underflows happen, the
9489     results are undefined.
9490
9491'(sat_fract:M X)'
9492     Represents the result of converting fixed-point value X to
9493     fixed-point mode M, signed integer value X to fixed-point mode M,
9494     or floating-point value X to fixed-point mode M.  When overflows or
9495     underflows happen, the results are saturated to the maximum or the
9496     minimum.
9497
9498'(unsigned_fract_convert:M X)'
9499     Represents the result of converting fixed-point value X to integer
9500     mode M regarded as unsigned, or unsigned integer value X to
9501     fixed-point mode M.  When overflows or underflows happen, the
9502     results are undefined.
9503
9504'(unsigned_sat_fract:M X)'
9505     Represents the result of converting unsigned integer value X to
9506     fixed-point mode M.  When overflows or underflows happen, the
9507     results are saturated to the maximum or the minimum.
9508
9509
9510File: gccint.info,  Node: RTL Declarations,  Next: Side Effects,  Prev: Conversions,  Up: RTL
9511
951210.14 Declarations
9513==================
9514
9515Declaration expression codes do not represent arithmetic operations but
9516rather state assertions about their operands.
9517
9518'(strict_low_part (subreg:M (reg:N R) 0))'
9519     This expression code is used in only one context: as the
9520     destination operand of a 'set' expression.  In addition, the
9521     operand of this expression must be a non-paradoxical 'subreg'
9522     expression.
9523
9524     The presence of 'strict_low_part' says that the part of the
9525     register which is meaningful in mode N, but is not part of mode M,
9526     is not to be altered.  Normally, an assignment to such a subreg is
9527     allowed to have undefined effects on the rest of the register when
9528     M is less than a word.
9529
9530
9531File: gccint.info,  Node: Side Effects,  Next: Incdec,  Prev: RTL Declarations,  Up: RTL
9532
953310.15 Side Effect Expressions
9534=============================
9535
9536The expression codes described so far represent values, not actions.
9537But machine instructions never produce values; they are meaningful only
9538for their side effects on the state of the machine.  Special expression
9539codes are used to represent side effects.
9540
9541 The body of an instruction is always one of these side effect codes;
9542the codes described above, which represent values, appear only as the
9543operands of these.
9544
9545'(set LVAL X)'
9546     Represents the action of storing the value of X into the place
9547     represented by LVAL.  LVAL must be an expression representing a
9548     place that can be stored in: 'reg' (or 'subreg', 'strict_low_part'
9549     or 'zero_extract'), 'mem', 'pc', 'parallel', or 'cc0'.
9550
9551     If LVAL is a 'reg', 'subreg' or 'mem', it has a machine mode; then
9552     X must be valid for that mode.
9553
9554     If LVAL is a 'reg' whose machine mode is less than the full width
9555     of the register, then it means that the part of the register
9556     specified by the machine mode is given the specified value and the
9557     rest of the register receives an undefined value.  Likewise, if
9558     LVAL is a 'subreg' whose machine mode is narrower than the mode of
9559     the register, the rest of the register can be changed in an
9560     undefined way.
9561
9562     If LVAL is a 'strict_low_part' of a subreg, then the part of the
9563     register specified by the machine mode of the 'subreg' is given the
9564     value X and the rest of the register is not changed.
9565
9566     If LVAL is a 'zero_extract', then the referenced part of the
9567     bit-field (a memory or register reference) specified by the
9568     'zero_extract' is given the value X and the rest of the bit-field
9569     is not changed.  Note that 'sign_extract' can not appear in LVAL.
9570
9571     If LVAL is '(cc0)', it has no machine mode, and X may be either a
9572     'compare' expression or a value that may have any mode.  The latter
9573     case represents a "test" instruction.  The expression '(set (cc0)
9574     (reg:M N))' is equivalent to '(set (cc0) (compare (reg:M N)
9575     (const_int 0)))'.  Use the former expression to save space during
9576     the compilation.
9577
9578     If LVAL is a 'parallel', it is used to represent the case of a
9579     function returning a structure in multiple registers.  Each element
9580     of the 'parallel' is an 'expr_list' whose first operand is a 'reg'
9581     and whose second operand is a 'const_int' representing the offset
9582     (in bytes) into the structure at which the data in that register
9583     corresponds.  The first element may be null to indicate that the
9584     structure is also passed partly in memory.
9585
9586     If LVAL is '(pc)', we have a jump instruction, and the
9587     possibilities for X are very limited.  It may be a 'label_ref'
9588     expression (unconditional jump).  It may be an 'if_then_else'
9589     (conditional jump), in which case either the second or the third
9590     operand must be '(pc)' (for the case which does not jump) and the
9591     other of the two must be a 'label_ref' (for the case which does
9592     jump).  X may also be a 'mem' or '(plus:SI (pc) Y)', where Y may be
9593     a 'reg' or a 'mem'; these unusual patterns are used to represent
9594     jumps through branch tables.
9595
9596     If LVAL is neither '(cc0)' nor '(pc)', the mode of LVAL must not be
9597     'VOIDmode' and the mode of X must be valid for the mode of LVAL.
9598
9599     LVAL is customarily accessed with the 'SET_DEST' macro and X with
9600     the 'SET_SRC' macro.
9601
9602'(return)'
9603     As the sole expression in a pattern, represents a return from the
9604     current function, on machines where this can be done with one
9605     instruction, such as VAXen.  On machines where a multi-instruction
9606     "epilogue" must be executed in order to return from the function,
9607     returning is done by jumping to a label which precedes the
9608     epilogue, and the 'return' expression code is never used.
9609
9610     Inside an 'if_then_else' expression, represents the value to be
9611     placed in 'pc' to return to the caller.
9612
9613     Note that an insn pattern of '(return)' is logically equivalent to
9614     '(set (pc) (return))', but the latter form is never used.
9615
9616'(simple_return)'
9617     Like '(return)', but truly represents only a function return, while
9618     '(return)' may represent an insn that also performs other functions
9619     of the function epilogue.  Like '(return)', this may also occur in
9620     conditional jumps.
9621
9622'(call FUNCTION NARGS)'
9623     Represents a function call.  FUNCTION is a 'mem' expression whose
9624     address is the address of the function to be called.  NARGS is an
9625     expression which can be used for two purposes: on some machines it
9626     represents the number of bytes of stack argument; on others, it
9627     represents the number of argument registers.
9628
9629     Each machine has a standard machine mode which FUNCTION must have.
9630     The machine description defines macro 'FUNCTION_MODE' to expand
9631     into the requisite mode name.  The purpose of this mode is to
9632     specify what kind of addressing is allowed, on machines where the
9633     allowed kinds of addressing depend on the machine mode being
9634     addressed.
9635
9636'(clobber X)'
9637     Represents the storing or possible storing of an unpredictable,
9638     undescribed value into X, which must be a 'reg', 'scratch',
9639     'parallel' or 'mem' expression.
9640
9641     One place this is used is in string instructions that store
9642     standard values into particular hard registers.  It may not be
9643     worth the trouble to describe the values that are stored, but it is
9644     essential to inform the compiler that the registers will be
9645     altered, lest it attempt to keep data in them across the string
9646     instruction.
9647
9648     If X is '(mem:BLK (const_int 0))' or '(mem:BLK (scratch))', it
9649     means that all memory locations must be presumed clobbered.  If X
9650     is a 'parallel', it has the same meaning as a 'parallel' in a 'set'
9651     expression.
9652
9653     Note that the machine description classifies certain hard registers
9654     as "call-clobbered".  All function call instructions are assumed by
9655     default to clobber these registers, so there is no need to use
9656     'clobber' expressions to indicate this fact.  Also, each function
9657     call is assumed to have the potential to alter any memory location,
9658     unless the function is declared 'const'.
9659
9660     If the last group of expressions in a 'parallel' are each a
9661     'clobber' expression whose arguments are 'reg' or 'match_scratch'
9662     (*note RTL Template::) expressions, the combiner phase can add the
9663     appropriate 'clobber' expressions to an insn it has constructed
9664     when doing so will cause a pattern to be matched.
9665
9666     This feature can be used, for example, on a machine that whose
9667     multiply and add instructions don't use an MQ register but which
9668     has an add-accumulate instruction that does clobber the MQ
9669     register.  Similarly, a combined instruction might require a
9670     temporary register while the constituent instructions might not.
9671
9672     When a 'clobber' expression for a register appears inside a
9673     'parallel' with other side effects, the register allocator
9674     guarantees that the register is unoccupied both before and after
9675     that insn if it is a hard register clobber.  For pseudo-register
9676     clobber, the register allocator and the reload pass do not assign
9677     the same hard register to the clobber and the input operands if
9678     there is an insn alternative containing the '&' constraint (*note
9679     Modifiers::) for the clobber and the hard register is in register
9680     classes of the clobber in the alternative.  You can clobber either
9681     a specific hard register, a pseudo register, or a 'scratch'
9682     expression; in the latter two cases, GCC will allocate a hard
9683     register that is available there for use as a temporary.
9684
9685     For instructions that require a temporary register, you should use
9686     'scratch' instead of a pseudo-register because this will allow the
9687     combiner phase to add the 'clobber' when required.  You do this by
9688     coding ('clobber' ('match_scratch' ...)).  If you do clobber a
9689     pseudo register, use one which appears nowhere else--generate a new
9690     one each time.  Otherwise, you may confuse CSE.
9691
9692     There is one other known use for clobbering a pseudo register in a
9693     'parallel': when one of the input operands of the insn is also
9694     clobbered by the insn.  In this case, using the same pseudo
9695     register in the clobber and elsewhere in the insn produces the
9696     expected results.
9697
9698'(use X)'
9699     Represents the use of the value of X.  It indicates that the value
9700     in X at this point in the program is needed, even though it may not
9701     be apparent why this is so.  Therefore, the compiler will not
9702     attempt to delete previous instructions whose only effect is to
9703     store a value in X.  X must be a 'reg' expression.
9704
9705     In some situations, it may be tempting to add a 'use' of a register
9706     in a 'parallel' to describe a situation where the value of a
9707     special register will modify the behavior of the instruction.  A
9708     hypothetical example might be a pattern for an addition that can
9709     either wrap around or use saturating addition depending on the
9710     value of a special control register:
9711
9712          (parallel [(set (reg:SI 2) (unspec:SI [(reg:SI 3)
9713                                                 (reg:SI 4)] 0))
9714                     (use (reg:SI 1))])
9715
9716     This will not work, several of the optimizers only look at
9717     expressions locally; it is very likely that if you have multiple
9718     insns with identical inputs to the 'unspec', they will be optimized
9719     away even if register 1 changes in between.
9720
9721     This means that 'use' can _only_ be used to describe that the
9722     register is live.  You should think twice before adding 'use'
9723     statements, more often you will want to use 'unspec' instead.  The
9724     'use' RTX is most commonly useful to describe that a fixed register
9725     is implicitly used in an insn.  It is also safe to use in patterns
9726     where the compiler knows for other reasons that the result of the
9727     whole pattern is variable, such as 'movmemM' or 'call' patterns.
9728
9729     During the reload phase, an insn that has a 'use' as pattern can
9730     carry a reg_equal note.  These 'use' insns will be deleted before
9731     the reload phase exits.
9732
9733     During the delayed branch scheduling phase, X may be an insn.  This
9734     indicates that X previously was located at this place in the code
9735     and its data dependencies need to be taken into account.  These
9736     'use' insns will be deleted before the delayed branch scheduling
9737     phase exits.
9738
9739'(parallel [X0 X1 ...])'
9740     Represents several side effects performed in parallel.  The square
9741     brackets stand for a vector; the operand of 'parallel' is a vector
9742     of expressions.  X0, X1 and so on are individual side effect
9743     expressions--expressions of code 'set', 'call', 'return',
9744     'simple_return', 'clobber' or 'use'.
9745
9746     "In parallel" means that first all the values used in the
9747     individual side-effects are computed, and second all the actual
9748     side-effects are performed.  For example,
9749
9750          (parallel [(set (reg:SI 1) (mem:SI (reg:SI 1)))
9751                     (set (mem:SI (reg:SI 1)) (reg:SI 1))])
9752
9753     says unambiguously that the values of hard register 1 and the
9754     memory location addressed by it are interchanged.  In both places
9755     where '(reg:SI 1)' appears as a memory address it refers to the
9756     value in register 1 _before_ the execution of the insn.
9757
9758     It follows that it is _incorrect_ to use 'parallel' and expect the
9759     result of one 'set' to be available for the next one.  For example,
9760     people sometimes attempt to represent a jump-if-zero instruction
9761     this way:
9762
9763          (parallel [(set (cc0) (reg:SI 34))
9764                     (set (pc) (if_then_else
9765                                  (eq (cc0) (const_int 0))
9766                                  (label_ref ...)
9767                                  (pc)))])
9768
9769     But this is incorrect, because it says that the jump condition
9770     depends on the condition code value _before_ this instruction, not
9771     on the new value that is set by this instruction.
9772
9773     Peephole optimization, which takes place together with final
9774     assembly code output, can produce insns whose patterns consist of a
9775     'parallel' whose elements are the operands needed to output the
9776     resulting assembler code--often 'reg', 'mem' or constant
9777     expressions.  This would not be well-formed RTL at any other stage
9778     in compilation, but it is ok then because no further optimization
9779     remains to be done.  However, the definition of the macro
9780     'NOTICE_UPDATE_CC', if any, must deal with such insns if you define
9781     any peephole optimizations.
9782
9783'(cond_exec [COND EXPR])'
9784     Represents a conditionally executed expression.  The EXPR is
9785     executed only if the COND is nonzero.  The COND expression must not
9786     have side-effects, but the EXPR may very well have side-effects.
9787
9788'(sequence [INSNS ...])'
9789     Represents a sequence of insns.  Each of the INSNS that appears in
9790     the vector is suitable for appearing in the chain of insns, so it
9791     must be an 'insn', 'jump_insn', 'call_insn', 'code_label',
9792     'barrier' or 'note'.
9793
9794     A 'sequence' RTX is never placed in an actual insn during RTL
9795     generation.  It represents the sequence of insns that result from a
9796     'define_expand' _before_ those insns are passed to 'emit_insn' to
9797     insert them in the chain of insns.  When actually inserted, the
9798     individual sub-insns are separated out and the 'sequence' is
9799     forgotten.
9800
9801     After delay-slot scheduling is completed, an insn and all the insns
9802     that reside in its delay slots are grouped together into a
9803     'sequence'.  The insn requiring the delay slot is the first insn in
9804     the vector; subsequent insns are to be placed in the delay slot.
9805
9806     'INSN_ANNULLED_BRANCH_P' is set on an insn in a delay slot to
9807     indicate that a branch insn should be used that will conditionally
9808     annul the effect of the insns in the delay slots.  In such a case,
9809     'INSN_FROM_TARGET_P' indicates that the insn is from the target of
9810     the branch and should be executed only if the branch is taken;
9811     otherwise the insn should be executed only if the branch is not
9812     taken.  *Note Delay Slots::.
9813
9814 These expression codes appear in place of a side effect, as the body of
9815an insn, though strictly speaking they do not always describe side
9816effects as such:
9817
9818'(asm_input S)'
9819     Represents literal assembler code as described by the string S.
9820
9821'(unspec [OPERANDS ...] INDEX)'
9822'(unspec_volatile [OPERANDS ...] INDEX)'
9823     Represents a machine-specific operation on OPERANDS.  INDEX selects
9824     between multiple machine-specific operations.  'unspec_volatile' is
9825     used for volatile operations and operations that may trap; 'unspec'
9826     is used for other operations.
9827
9828     These codes may appear inside a 'pattern' of an insn, inside a
9829     'parallel', or inside an expression.
9830
9831'(addr_vec:M [LR0 LR1 ...])'
9832     Represents a table of jump addresses.  The vector elements LR0,
9833     etc., are 'label_ref' expressions.  The mode M specifies how much
9834     space is given to each address; normally M would be 'Pmode'.
9835
9836'(addr_diff_vec:M BASE [LR0 LR1 ...] MIN MAX FLAGS)'
9837     Represents a table of jump addresses expressed as offsets from
9838     BASE.  The vector elements LR0, etc., are 'label_ref' expressions
9839     and so is BASE.  The mode M specifies how much space is given to
9840     each address-difference.  MIN and MAX are set up by branch
9841     shortening and hold a label with a minimum and a maximum address,
9842     respectively.  FLAGS indicates the relative position of BASE, MIN
9843     and MAX to the containing insn and of MIN and MAX to BASE.  See
9844     rtl.def for details.
9845
9846'(prefetch:M ADDR RW LOCALITY)'
9847     Represents prefetch of memory at address ADDR.  Operand RW is 1 if
9848     the prefetch is for data to be written, 0 otherwise; targets that
9849     do not support write prefetches should treat this as a normal
9850     prefetch.  Operand LOCALITY specifies the amount of temporal
9851     locality; 0 if there is none or 1, 2, or 3 for increasing levels of
9852     temporal locality; targets that do not support locality hints
9853     should ignore this.
9854
9855     This insn is used to minimize cache-miss latency by moving data
9856     into a cache before it is accessed.  It should use only
9857     non-faulting data prefetch instructions.
9858
9859
9860File: gccint.info,  Node: Incdec,  Next: Assembler,  Prev: Side Effects,  Up: RTL
9861
986210.16 Embedded Side-Effects on Addresses
9863========================================
9864
9865Six special side-effect expression codes appear as memory addresses.
9866
9867'(pre_dec:M X)'
9868     Represents the side effect of decrementing X by a standard amount
9869     and represents also the value that X has after being decremented.
9870     X must be a 'reg' or 'mem', but most machines allow only a 'reg'.
9871     M must be the machine mode for pointers on the machine in use.  The
9872     amount X is decremented by is the length in bytes of the machine
9873     mode of the containing memory reference of which this expression
9874     serves as the address.  Here is an example of its use:
9875
9876          (mem:DF (pre_dec:SI (reg:SI 39)))
9877
9878     This says to decrement pseudo register 39 by the length of a
9879     'DFmode' value and use the result to address a 'DFmode' value.
9880
9881'(pre_inc:M X)'
9882     Similar, but specifies incrementing X instead of decrementing it.
9883
9884'(post_dec:M X)'
9885     Represents the same side effect as 'pre_dec' but a different value.
9886     The value represented here is the value X has before being
9887     decremented.
9888
9889'(post_inc:M X)'
9890     Similar, but specifies incrementing X instead of decrementing it.
9891
9892'(post_modify:M X Y)'
9893
9894     Represents the side effect of setting X to Y and represents X
9895     before X is modified.  X must be a 'reg' or 'mem', but most
9896     machines allow only a 'reg'.  M must be the machine mode for
9897     pointers on the machine in use.
9898
9899     The expression Y must be one of three forms: '(plus:M X Z)',
9900     '(minus:M X Z)', or '(plus:M X I)', where Z is an index register
9901     and I is a constant.
9902
9903     Here is an example of its use:
9904
9905          (mem:SF (post_modify:SI (reg:SI 42) (plus (reg:SI 42)
9906                                                    (reg:SI 48))))
9907
9908     This says to modify pseudo register 42 by adding the contents of
9909     pseudo register 48 to it, after the use of what ever 42 points to.
9910
9911'(pre_modify:M X EXPR)'
9912     Similar except side effects happen before the use.
9913
9914 These embedded side effect expressions must be used with care.
9915Instruction patterns may not use them.  Until the 'flow' pass of the
9916compiler, they may occur only to represent pushes onto the stack.  The
9917'flow' pass finds cases where registers are incremented or decremented
9918in one instruction and used as an address shortly before or after; these
9919cases are then transformed to use pre- or post-increment or -decrement.
9920
9921 If a register used as the operand of these expressions is used in
9922another address in an insn, the original value of the register is used.
9923Uses of the register outside of an address are not permitted within the
9924same insn as a use in an embedded side effect expression because such
9925insns behave differently on different machines and hence must be treated
9926as ambiguous and disallowed.
9927
9928 An instruction that can be represented with an embedded side effect
9929could also be represented using 'parallel' containing an additional
9930'set' to describe how the address register is altered.  This is not done
9931because machines that allow these operations at all typically allow them
9932wherever a memory address is called for.  Describing them as additional
9933parallel stores would require doubling the number of entries in the
9934machine description.
9935
9936
9937File: gccint.info,  Node: Assembler,  Next: Debug Information,  Prev: Incdec,  Up: RTL
9938
993910.17 Assembler Instructions as Expressions
9940===========================================
9941
9942The RTX code 'asm_operands' represents a value produced by a
9943user-specified assembler instruction.  It is used to represent an 'asm'
9944statement with arguments.  An 'asm' statement with a single output
9945operand, like this:
9946
9947     asm ("foo %1,%2,%0" : "=a" (outputvar) : "g" (x + y), "di" (*z));
9948
9949is represented using a single 'asm_operands' RTX which represents the
9950value that is stored in 'outputvar':
9951
9952     (set RTX-FOR-OUTPUTVAR
9953          (asm_operands "foo %1,%2,%0" "a" 0
9954                        [RTX-FOR-ADDITION-RESULT RTX-FOR-*Z]
9955                        [(asm_input:M1 "g")
9956                         (asm_input:M2 "di")]))
9957
9958Here the operands of the 'asm_operands' RTX are the assembler template
9959string, the output-operand's constraint, the index-number of the output
9960operand among the output operands specified, a vector of input operand
9961RTX's, and a vector of input-operand modes and constraints.  The mode M1
9962is the mode of the sum 'x+y'; M2 is that of '*z'.
9963
9964 When an 'asm' statement has multiple output values, its insn has
9965several such 'set' RTX's inside of a 'parallel'.  Each 'set' contains an
9966'asm_operands'; all of these share the same assembler template and
9967vectors, but each contains the constraint for the respective output
9968operand.  They are also distinguished by the output-operand index
9969number, which is 0, 1, ... for successive output operands.
9970
9971
9972File: gccint.info,  Node: Debug Information,  Next: Insns,  Prev: Assembler,  Up: RTL
9973
997410.18 Variable Location Debug Information in RTL
9975================================================
9976
9977Variable tracking relies on 'MEM_EXPR' and 'REG_EXPR' annotations to
9978determine what user variables memory and register references refer to.
9979
9980 Variable tracking at assignments uses these notes only when they refer
9981to variables that live at fixed locations (e.g., addressable variables,
9982global non-automatic variables).  For variables whose location may vary,
9983it relies on the following types of notes.
9984
9985'(var_location:MODE VAR EXP STAT)'
9986     Binds variable 'var', a tree, to value EXP, an RTL expression.  It
9987     appears only in 'NOTE_INSN_VAR_LOCATION' and 'DEBUG_INSN's, with
9988     slightly different meanings.  MODE, if present, represents the mode
9989     of EXP, which is useful if it is a modeless expression.  STAT is
9990     only meaningful in notes, indicating whether the variable is known
9991     to be initialized or uninitialized.
9992
9993'(debug_expr:MODE DECL)'
9994     Stands for the value bound to the 'DEBUG_EXPR_DECL' DECL, that
9995     points back to it, within value expressions in 'VAR_LOCATION'
9996     nodes.
9997
9998
9999File: gccint.info,  Node: Insns,  Next: Calls,  Prev: Debug Information,  Up: RTL
10000
1000110.19 Insns
10002===========
10003
10004The RTL representation of the code for a function is a doubly-linked
10005chain of objects called "insns".  Insns are expressions with special
10006codes that are used for no other purpose.  Some insns are actual
10007instructions; others represent dispatch tables for 'switch' statements;
10008others represent labels to jump to or various sorts of declarative
10009information.
10010
10011 In addition to its own specific data, each insn must have a unique
10012id-number that distinguishes it from all other insns in the current
10013function (after delayed branch scheduling, copies of an insn with the
10014same id-number may be present in multiple places in a function, but
10015these copies will always be identical and will only appear inside a
10016'sequence'), and chain pointers to the preceding and following insns.
10017These three fields occupy the same position in every insn, independent
10018of the expression code of the insn.  They could be accessed with 'XEXP'
10019and 'XINT', but instead three special macros are always used:
10020
10021'INSN_UID (I)'
10022     Accesses the unique id of insn I.
10023
10024'PREV_INSN (I)'
10025     Accesses the chain pointer to the insn preceding I.  If I is the
10026     first insn, this is a null pointer.
10027
10028'NEXT_INSN (I)'
10029     Accesses the chain pointer to the insn following I.  If I is the
10030     last insn, this is a null pointer.
10031
10032 The first insn in the chain is obtained by calling 'get_insns'; the
10033last insn is the result of calling 'get_last_insn'.  Within the chain
10034delimited by these insns, the 'NEXT_INSN' and 'PREV_INSN' pointers must
10035always correspond: if INSN is not the first insn,
10036
10037     NEXT_INSN (PREV_INSN (INSN)) == INSN
10038
10039is always true and if INSN is not the last insn,
10040
10041     PREV_INSN (NEXT_INSN (INSN)) == INSN
10042
10043is always true.
10044
10045 After delay slot scheduling, some of the insns in the chain might be
10046'sequence' expressions, which contain a vector of insns.  The value of
10047'NEXT_INSN' in all but the last of these insns is the next insn in the
10048vector; the value of 'NEXT_INSN' of the last insn in the vector is the
10049same as the value of 'NEXT_INSN' for the 'sequence' in which it is
10050contained.  Similar rules apply for 'PREV_INSN'.
10051
10052 This means that the above invariants are not necessarily true for insns
10053inside 'sequence' expressions.  Specifically, if INSN is the first insn
10054in a 'sequence', 'NEXT_INSN (PREV_INSN (INSN))' is the insn containing
10055the 'sequence' expression, as is the value of 'PREV_INSN (NEXT_INSN
10056(INSN))' if INSN is the last insn in the 'sequence' expression.  You can
10057use these expressions to find the containing 'sequence' expression.
10058
10059 Every insn has one of the following expression codes:
10060
10061'insn'
10062     The expression code 'insn' is used for instructions that do not
10063     jump and do not do function calls.  'sequence' expressions are
10064     always contained in insns with code 'insn' even if one of those
10065     insns should jump or do function calls.
10066
10067     Insns with code 'insn' have four additional fields beyond the three
10068     mandatory ones listed above.  These four are described in a table
10069     below.
10070
10071'jump_insn'
10072     The expression code 'jump_insn' is used for instructions that may
10073     jump (or, more generally, may contain 'label_ref' expressions to
10074     which 'pc' can be set in that instruction).  If there is an
10075     instruction to return from the current function, it is recorded as
10076     a 'jump_insn'.
10077
10078     'jump_insn' insns have the same extra fields as 'insn' insns,
10079     accessed in the same way and in addition contain a field
10080     'JUMP_LABEL' which is defined once jump optimization has completed.
10081
10082     For simple conditional and unconditional jumps, this field contains
10083     the 'code_label' to which this insn will (possibly conditionally)
10084     branch.  In a more complex jump, 'JUMP_LABEL' records one of the
10085     labels that the insn refers to; other jump target labels are
10086     recorded as 'REG_LABEL_TARGET' notes.  The exception is 'addr_vec'
10087     and 'addr_diff_vec', where 'JUMP_LABEL' is 'NULL_RTX' and the only
10088     way to find the labels is to scan the entire body of the insn.
10089
10090     Return insns count as jumps, but since they do not refer to any
10091     labels, their 'JUMP_LABEL' is 'NULL_RTX'.
10092
10093'call_insn'
10094     The expression code 'call_insn' is used for instructions that may
10095     do function calls.  It is important to distinguish these
10096     instructions because they imply that certain registers and memory
10097     locations may be altered unpredictably.
10098
10099     'call_insn' insns have the same extra fields as 'insn' insns,
10100     accessed in the same way and in addition contain a field
10101     'CALL_INSN_FUNCTION_USAGE', which contains a list (chain of
10102     'expr_list' expressions) containing 'use', 'clobber' and sometimes
10103     'set' expressions that denote hard registers and 'mem's used or
10104     clobbered by the called function.
10105
10106     A 'mem' generally points to a stack slot in which arguments passed
10107     to the libcall by reference (*note TARGET_PASS_BY_REFERENCE:
10108     Register Arguments.) are stored.  If the argument is caller-copied
10109     (*note TARGET_CALLEE_COPIES: Register Arguments.), the stack slot
10110     will be mentioned in 'clobber' and 'use' entries; if it's
10111     callee-copied, only a 'use' will appear, and the 'mem' may point to
10112     addresses that are not stack slots.
10113
10114     Registers occurring inside a 'clobber' in this list augment
10115     registers specified in 'CALL_USED_REGISTERS' (*note Register
10116     Basics::).
10117
10118     If the list contains a 'set' involving two registers, it indicates
10119     that the function returns one of its arguments.  Such a 'set' may
10120     look like a no-op if the same register holds the argument and the
10121     return value.
10122
10123'code_label'
10124     A 'code_label' insn represents a label that a jump insn can jump
10125     to.  It contains two special fields of data in addition to the
10126     three standard ones.  'CODE_LABEL_NUMBER' is used to hold the
10127     "label number", a number that identifies this label uniquely among
10128     all the labels in the compilation (not just in the current
10129     function).  Ultimately, the label is represented in the assembler
10130     output as an assembler label, usually of the form 'LN' where N is
10131     the label number.
10132
10133     When a 'code_label' appears in an RTL expression, it normally
10134     appears within a 'label_ref' which represents the address of the
10135     label, as a number.
10136
10137     Besides as a 'code_label', a label can also be represented as a
10138     'note' of type 'NOTE_INSN_DELETED_LABEL'.
10139
10140     The field 'LABEL_NUSES' is only defined once the jump optimization
10141     phase is completed.  It contains the number of times this label is
10142     referenced in the current function.
10143
10144     The field 'LABEL_KIND' differentiates four different types of
10145     labels: 'LABEL_NORMAL', 'LABEL_STATIC_ENTRY', 'LABEL_GLOBAL_ENTRY',
10146     and 'LABEL_WEAK_ENTRY'.  The only labels that do not have type
10147     'LABEL_NORMAL' are "alternate entry points" to the current
10148     function.  These may be static (visible only in the containing
10149     translation unit), global (exposed to all translation units), or
10150     weak (global, but can be overridden by another symbol with the same
10151     name).
10152
10153     Much of the compiler treats all four kinds of label identically.
10154     Some of it needs to know whether or not a label is an alternate
10155     entry point; for this purpose, the macro 'LABEL_ALT_ENTRY_P' is
10156     provided.  It is equivalent to testing whether 'LABEL_KIND (label)
10157     == LABEL_NORMAL'.  The only place that cares about the distinction
10158     between static, global, and weak alternate entry points, besides
10159     the front-end code that creates them, is the function
10160     'output_alternate_entry_point', in 'final.c'.
10161
10162     To set the kind of a label, use the 'SET_LABEL_KIND' macro.
10163
10164'barrier'
10165     Barriers are placed in the instruction stream when control cannot
10166     flow past them.  They are placed after unconditional jump
10167     instructions to indicate that the jumps are unconditional and after
10168     calls to 'volatile' functions, which do not return (e.g., 'exit').
10169     They contain no information beyond the three standard fields.
10170
10171'note'
10172     'note' insns are used to represent additional debugging and
10173     declarative information.  They contain two nonstandard fields, an
10174     integer which is accessed with the macro 'NOTE_LINE_NUMBER' and a
10175     string accessed with 'NOTE_SOURCE_FILE'.
10176
10177     If 'NOTE_LINE_NUMBER' is positive, the note represents the position
10178     of a source line and 'NOTE_SOURCE_FILE' is the source file name
10179     that the line came from.  These notes control generation of line
10180     number data in the assembler output.
10181
10182     Otherwise, 'NOTE_LINE_NUMBER' is not really a line number but a
10183     code with one of the following values (and 'NOTE_SOURCE_FILE' must
10184     contain a null pointer):
10185
10186     'NOTE_INSN_DELETED'
10187          Such a note is completely ignorable.  Some passes of the
10188          compiler delete insns by altering them into notes of this
10189          kind.
10190
10191     'NOTE_INSN_DELETED_LABEL'
10192          This marks what used to be a 'code_label', but was not used
10193          for other purposes than taking its address and was transformed
10194          to mark that no code jumps to it.
10195
10196     'NOTE_INSN_BLOCK_BEG'
10197     'NOTE_INSN_BLOCK_END'
10198          These types of notes indicate the position of the beginning
10199          and end of a level of scoping of variable names.  They control
10200          the output of debugging information.
10201
10202     'NOTE_INSN_EH_REGION_BEG'
10203     'NOTE_INSN_EH_REGION_END'
10204          These types of notes indicate the position of the beginning
10205          and end of a level of scoping for exception handling.
10206          'NOTE_BLOCK_NUMBER' identifies which 'CODE_LABEL' or 'note' of
10207          type 'NOTE_INSN_DELETED_LABEL' is associated with the given
10208          region.
10209
10210     'NOTE_INSN_LOOP_BEG'
10211     'NOTE_INSN_LOOP_END'
10212          These types of notes indicate the position of the beginning
10213          and end of a 'while' or 'for' loop.  They enable the loop
10214          optimizer to find loops quickly.
10215
10216     'NOTE_INSN_LOOP_CONT'
10217          Appears at the place in a loop that 'continue' statements jump
10218          to.
10219
10220     'NOTE_INSN_LOOP_VTOP'
10221          This note indicates the place in a loop where the exit test
10222          begins for those loops in which the exit test has been
10223          duplicated.  This position becomes another virtual start of
10224          the loop when considering loop invariants.
10225
10226     'NOTE_INSN_FUNCTION_BEG'
10227          Appears at the start of the function body, after the function
10228          prologue.
10229
10230     'NOTE_INSN_VAR_LOCATION'
10231          This note is used to generate variable location debugging
10232          information.  It indicates that the user variable in its
10233          'VAR_LOCATION' operand is at the location given in the RTL
10234          expression, or holds a value that can be computed by
10235          evaluating the RTL expression from that static point in the
10236          program up to the next such note for the same user variable.
10237
10238     These codes are printed symbolically when they appear in debugging
10239     dumps.
10240
10241'debug_insn'
10242     The expression code 'debug_insn' is used for pseudo-instructions
10243     that hold debugging information for variable tracking at
10244     assignments (see '-fvar-tracking-assignments' option).  They are
10245     the RTL representation of 'GIMPLE_DEBUG' statements (*note
10246     'GIMPLE_DEBUG'::), with a 'VAR_LOCATION' operand that binds a user
10247     variable tree to an RTL representation of the 'value' in the
10248     corresponding statement.  A 'DEBUG_EXPR' in it stands for the value
10249     bound to the corresponding 'DEBUG_EXPR_DECL'.
10250
10251     Throughout optimization passes, binding information is kept in
10252     pseudo-instruction form, so that, unlike notes, it gets the same
10253     treatment and adjustments that regular instructions would.  It is
10254     the variable tracking pass that turns these pseudo-instructions
10255     into var location notes, analyzing control flow, value equivalences
10256     and changes to registers and memory referenced in value
10257     expressions, propagating the values of debug temporaries and
10258     determining expressions that can be used to compute the value of
10259     each user variable at as many points (ranges, actually) in the
10260     program as possible.
10261
10262     Unlike 'NOTE_INSN_VAR_LOCATION', the value expression in an
10263     'INSN_VAR_LOCATION' denotes a value at that specific point in the
10264     program, rather than an expression that can be evaluated at any
10265     later point before an overriding 'VAR_LOCATION' is encountered.
10266     E.g., if a user variable is bound to a 'REG' and then a subsequent
10267     insn modifies the 'REG', the note location would keep mapping the
10268     user variable to the register across the insn, whereas the insn
10269     location would keep the variable bound to the value, so that the
10270     variable tracking pass would emit another location note for the
10271     variable at the point in which the register is modified.
10272
10273 The machine mode of an insn is normally 'VOIDmode', but some phases use
10274the mode for various purposes.
10275
10276 The common subexpression elimination pass sets the mode of an insn to
10277'QImode' when it is the first insn in a block that has already been
10278processed.
10279
10280 The second Haifa scheduling pass, for targets that can multiple issue,
10281sets the mode of an insn to 'TImode' when it is believed that the
10282instruction begins an issue group.  That is, when the instruction cannot
10283issue simultaneously with the previous.  This may be relied on by later
10284passes, in particular machine-dependent reorg.
10285
10286 Here is a table of the extra fields of 'insn', 'jump_insn' and
10287'call_insn' insns:
10288
10289'PATTERN (I)'
10290     An expression for the side effect performed by this insn.  This
10291     must be one of the following codes: 'set', 'call', 'use',
10292     'clobber', 'return', 'simple_return', 'asm_input', 'asm_output',
10293     'addr_vec', 'addr_diff_vec', 'trap_if', 'unspec',
10294     'unspec_volatile', 'parallel', 'cond_exec', or 'sequence'.  If it
10295     is a 'parallel', each element of the 'parallel' must be one these
10296     codes, except that 'parallel' expressions cannot be nested and
10297     'addr_vec' and 'addr_diff_vec' are not permitted inside a
10298     'parallel' expression.
10299
10300'INSN_CODE (I)'
10301     An integer that says which pattern in the machine description
10302     matches this insn, or -1 if the matching has not yet been
10303     attempted.
10304
10305     Such matching is never attempted and this field remains -1 on an
10306     insn whose pattern consists of a single 'use', 'clobber',
10307     'asm_input', 'addr_vec' or 'addr_diff_vec' expression.
10308
10309     Matching is also never attempted on insns that result from an 'asm'
10310     statement.  These contain at least one 'asm_operands' expression.
10311     The function 'asm_noperands' returns a non-negative value for such
10312     insns.
10313
10314     In the debugging output, this field is printed as a number followed
10315     by a symbolic representation that locates the pattern in the 'md'
10316     file as some small positive or negative offset from a named
10317     pattern.
10318
10319'LOG_LINKS (I)'
10320     A list (chain of 'insn_list' expressions) giving information about
10321     dependencies between instructions within a basic block.  Neither a
10322     jump nor a label may come between the related insns.  These are
10323     only used by the schedulers and by combine.  This is a deprecated
10324     data structure.  Def-use and use-def chains are now preferred.
10325
10326'REG_NOTES (I)'
10327     A list (chain of 'expr_list' and 'insn_list' expressions) giving
10328     miscellaneous information about the insn.  It is often information
10329     pertaining to the registers used in this insn.
10330
10331 The 'LOG_LINKS' field of an insn is a chain of 'insn_list' expressions.
10332Each of these has two operands: the first is an insn, and the second is
10333another 'insn_list' expression (the next one in the chain).  The last
10334'insn_list' in the chain has a null pointer as second operand.  The
10335significant thing about the chain is which insns appear in it (as first
10336operands of 'insn_list' expressions).  Their order is not significant.
10337
10338 This list is originally set up by the flow analysis pass; it is a null
10339pointer until then.  Flow only adds links for those data dependencies
10340which can be used for instruction combination.  For each insn, the flow
10341analysis pass adds a link to insns which store into registers values
10342that are used for the first time in this insn.
10343
10344 The 'REG_NOTES' field of an insn is a chain similar to the 'LOG_LINKS'
10345field but it includes 'expr_list' expressions in addition to 'insn_list'
10346expressions.  There are several kinds of register notes, which are
10347distinguished by the machine mode, which in a register note is really
10348understood as being an 'enum reg_note'.  The first operand OP of the
10349note is data whose meaning depends on the kind of note.
10350
10351 The macro 'REG_NOTE_KIND (X)' returns the kind of register note.  Its
10352counterpart, the macro 'PUT_REG_NOTE_KIND (X, NEWKIND)' sets the
10353register note type of X to be NEWKIND.
10354
10355 Register notes are of three classes: They may say something about an
10356input to an insn, they may say something about an output of an insn, or
10357they may create a linkage between two insns.  There are also a set of
10358values that are only used in 'LOG_LINKS'.
10359
10360 These register notes annotate inputs to an insn:
10361
10362'REG_DEAD'
10363     The value in OP dies in this insn; that is to say, altering the
10364     value immediately after this insn would not affect the future
10365     behavior of the program.
10366
10367     It does not follow that the register OP has no useful value after
10368     this insn since OP is not necessarily modified by this insn.
10369     Rather, no subsequent instruction uses the contents of OP.
10370
10371'REG_UNUSED'
10372     The register OP being set by this insn will not be used in a
10373     subsequent insn.  This differs from a 'REG_DEAD' note, which
10374     indicates that the value in an input will not be used subsequently.
10375     These two notes are independent; both may be present for the same
10376     register.
10377
10378'REG_INC'
10379     The register OP is incremented (or decremented; at this level there
10380     is no distinction) by an embedded side effect inside this insn.
10381     This means it appears in a 'post_inc', 'pre_inc', 'post_dec' or
10382     'pre_dec' expression.
10383
10384'REG_NONNEG'
10385     The register OP is known to have a nonnegative value when this insn
10386     is reached.  This is used so that decrement and branch until zero
10387     instructions, such as the m68k dbra, can be matched.
10388
10389     The 'REG_NONNEG' note is added to insns only if the machine
10390     description has a 'decrement_and_branch_until_zero' pattern.
10391
10392'REG_LABEL_OPERAND'
10393     This insn uses OP, a 'code_label' or a 'note' of type
10394     'NOTE_INSN_DELETED_LABEL', but is not a 'jump_insn', or it is a
10395     'jump_insn' that refers to the operand as an ordinary operand.  The
10396     label may still eventually be a jump target, but if so in an
10397     indirect jump in a subsequent insn.  The presence of this note
10398     allows jump optimization to be aware that OP is, in fact, being
10399     used, and flow optimization to build an accurate flow graph.
10400
10401'REG_LABEL_TARGET'
10402     This insn is a 'jump_insn' but not an 'addr_vec' or
10403     'addr_diff_vec'.  It uses OP, a 'code_label' as a direct or
10404     indirect jump target.  Its purpose is similar to that of
10405     'REG_LABEL_OPERAND'.  This note is only present if the insn has
10406     multiple targets; the last label in the insn (in the highest
10407     numbered insn-field) goes into the 'JUMP_LABEL' field and does not
10408     have a 'REG_LABEL_TARGET' note.  *Note JUMP_LABEL: Insns.
10409
10410'REG_CROSSING_JUMP'
10411     This insn is a branching instruction (either an unconditional jump
10412     or an indirect jump) which crosses between hot and cold sections,
10413     which could potentially be very far apart in the executable.  The
10414     presence of this note indicates to other optimizations that this
10415     branching instruction should not be "collapsed" into a simpler
10416     branching construct.  It is used when the optimization to partition
10417     basic blocks into hot and cold sections is turned on.
10418
10419'REG_SETJMP'
10420     Appears attached to each 'CALL_INSN' to 'setjmp' or a related
10421     function.
10422
10423 The following notes describe attributes of outputs of an insn:
10424
10425'REG_EQUIV'
10426'REG_EQUAL'
10427     This note is only valid on an insn that sets only one register and
10428     indicates that that register will be equal to OP at run time; the
10429     scope of this equivalence differs between the two types of notes.
10430     The value which the insn explicitly copies into the register may
10431     look different from OP, but they will be equal at run time.  If the
10432     output of the single 'set' is a 'strict_low_part' expression, the
10433     note refers to the register that is contained in 'SUBREG_REG' of
10434     the 'subreg' expression.
10435
10436     For 'REG_EQUIV', the register is equivalent to OP throughout the
10437     entire function, and could validly be replaced in all its
10438     occurrences by OP.  ("Validly" here refers to the data flow of the
10439     program; simple replacement may make some insns invalid.)  For
10440     example, when a constant is loaded into a register that is never
10441     assigned any other value, this kind of note is used.
10442
10443     When a parameter is copied into a pseudo-register at entry to a
10444     function, a note of this kind records that the register is
10445     equivalent to the stack slot where the parameter was passed.
10446     Although in this case the register may be set by other insns, it is
10447     still valid to replace the register by the stack slot throughout
10448     the function.
10449
10450     A 'REG_EQUIV' note is also used on an instruction which copies a
10451     register parameter into a pseudo-register at entry to a function,
10452     if there is a stack slot where that parameter could be stored.
10453     Although other insns may set the pseudo-register, it is valid for
10454     the compiler to replace the pseudo-register by stack slot
10455     throughout the function, provided the compiler ensures that the
10456     stack slot is properly initialized by making the replacement in the
10457     initial copy instruction as well.  This is used on machines for
10458     which the calling convention allocates stack space for register
10459     parameters.  See 'REG_PARM_STACK_SPACE' in *note Stack Arguments::.
10460
10461     In the case of 'REG_EQUAL', the register that is set by this insn
10462     will be equal to OP at run time at the end of this insn but not
10463     necessarily elsewhere in the function.  In this case, OP is
10464     typically an arithmetic expression.  For example, when a sequence
10465     of insns such as a library call is used to perform an arithmetic
10466     operation, this kind of note is attached to the insn that produces
10467     or copies the final value.
10468
10469     These two notes are used in different ways by the compiler passes.
10470     'REG_EQUAL' is used by passes prior to register allocation (such as
10471     common subexpression elimination and loop optimization) to tell
10472     them how to think of that value.  'REG_EQUIV' notes are used by
10473     register allocation to indicate that there is an available
10474     substitute expression (either a constant or a 'mem' expression for
10475     the location of a parameter on the stack) that may be used in place
10476     of a register if insufficient registers are available.
10477
10478     Except for stack homes for parameters, which are indicated by a
10479     'REG_EQUIV' note and are not useful to the early optimization
10480     passes and pseudo registers that are equivalent to a memory
10481     location throughout their entire life, which is not detected until
10482     later in the compilation, all equivalences are initially indicated
10483     by an attached 'REG_EQUAL' note.  In the early stages of register
10484     allocation, a 'REG_EQUAL' note is changed into a 'REG_EQUIV' note
10485     if OP is a constant and the insn represents the only set of its
10486     destination register.
10487
10488     Thus, compiler passes prior to register allocation need only check
10489     for 'REG_EQUAL' notes and passes subsequent to register allocation
10490     need only check for 'REG_EQUIV' notes.
10491
10492 These notes describe linkages between insns.  They occur in pairs: one
10493insn has one of a pair of notes that points to a second insn, which has
10494the inverse note pointing back to the first insn.
10495
10496'REG_CC_SETTER'
10497'REG_CC_USER'
10498     On machines that use 'cc0', the insns which set and use 'cc0' set
10499     and use 'cc0' are adjacent.  However, when branch delay slot
10500     filling is done, this may no longer be true.  In this case a
10501     'REG_CC_USER' note will be placed on the insn setting 'cc0' to
10502     point to the insn using 'cc0' and a 'REG_CC_SETTER' note will be
10503     placed on the insn using 'cc0' to point to the insn setting 'cc0'.
10504
10505 These values are only used in the 'LOG_LINKS' field, and indicate the
10506type of dependency that each link represents.  Links which indicate a
10507data dependence (a read after write dependence) do not use any code,
10508they simply have mode 'VOIDmode', and are printed without any
10509descriptive text.
10510
10511'REG_DEP_TRUE'
10512     This indicates a true dependence (a read after write dependence).
10513
10514'REG_DEP_OUTPUT'
10515     This indicates an output dependence (a write after write
10516     dependence).
10517
10518'REG_DEP_ANTI'
10519     This indicates an anti dependence (a write after read dependence).
10520
10521 These notes describe information gathered from gcov profile data.  They
10522are stored in the 'REG_NOTES' field of an insn as an 'expr_list'.
10523
10524'REG_BR_PROB'
10525     This is used to specify the ratio of branches to non-branches of a
10526     branch insn according to the profile data.  The value is stored as
10527     a value between 0 and REG_BR_PROB_BASE; larger values indicate a
10528     higher probability that the branch will be taken.
10529
10530'REG_BR_PRED'
10531     These notes are found in JUMP insns after delayed branch scheduling
10532     has taken place.  They indicate both the direction and the
10533     likelihood of the JUMP.  The format is a bitmask of ATTR_FLAG_*
10534     values.
10535
10536'REG_FRAME_RELATED_EXPR'
10537     This is used on an RTX_FRAME_RELATED_P insn wherein the attached
10538     expression is used in place of the actual insn pattern.  This is
10539     done in cases where the pattern is either complex or misleading.
10540
10541 For convenience, the machine mode in an 'insn_list' or 'expr_list' is
10542printed using these symbolic codes in debugging dumps.
10543
10544 The only difference between the expression codes 'insn_list' and
10545'expr_list' is that the first operand of an 'insn_list' is assumed to be
10546an insn and is printed in debugging dumps as the insn's unique id; the
10547first operand of an 'expr_list' is printed in the ordinary way as an
10548expression.
10549
10550
10551File: gccint.info,  Node: Calls,  Next: Sharing,  Prev: Insns,  Up: RTL
10552
1055310.20 RTL Representation of Function-Call Insns
10554===============================================
10555
10556Insns that call subroutines have the RTL expression code 'call_insn'.
10557These insns must satisfy special rules, and their bodies must use a
10558special RTL expression code, 'call'.
10559
10560 A 'call' expression has two operands, as follows:
10561
10562     (call (mem:FM ADDR) NBYTES)
10563
10564Here NBYTES is an operand that represents the number of bytes of
10565argument data being passed to the subroutine, FM is a machine mode
10566(which must equal as the definition of the 'FUNCTION_MODE' macro in the
10567machine description) and ADDR represents the address of the subroutine.
10568
10569 For a subroutine that returns no value, the 'call' expression as shown
10570above is the entire body of the insn, except that the insn might also
10571contain 'use' or 'clobber' expressions.
10572
10573 For a subroutine that returns a value whose mode is not 'BLKmode', the
10574value is returned in a hard register.  If this register's number is R,
10575then the body of the call insn looks like this:
10576
10577     (set (reg:M R)
10578          (call (mem:FM ADDR) NBYTES))
10579
10580This RTL expression makes it clear (to the optimizer passes) that the
10581appropriate register receives a useful value in this insn.
10582
10583 When a subroutine returns a 'BLKmode' value, it is handled by passing
10584to the subroutine the address of a place to store the value.  So the
10585call insn itself does not "return" any value, and it has the same RTL
10586form as a call that returns nothing.
10587
10588 On some machines, the call instruction itself clobbers some register,
10589for example to contain the return address.  'call_insn' insns on these
10590machines should have a body which is a 'parallel' that contains both the
10591'call' expression and 'clobber' expressions that indicate which
10592registers are destroyed.  Similarly, if the call instruction requires
10593some register other than the stack pointer that is not explicitly
10594mentioned in its RTL, a 'use' subexpression should mention that
10595register.
10596
10597 Functions that are called are assumed to modify all registers listed in
10598the configuration macro 'CALL_USED_REGISTERS' (*note Register Basics::)
10599and, with the exception of 'const' functions and library calls, to
10600modify all of memory.
10601
10602 Insns containing just 'use' expressions directly precede the
10603'call_insn' insn to indicate which registers contain inputs to the
10604function.  Similarly, if registers other than those in
10605'CALL_USED_REGISTERS' are clobbered by the called function, insns
10606containing a single 'clobber' follow immediately after the call to
10607indicate which registers.
10608
10609
10610File: gccint.info,  Node: Sharing,  Next: Reading RTL,  Prev: Calls,  Up: RTL
10611
1061210.21 Structure Sharing Assumptions
10613===================================
10614
10615The compiler assumes that certain kinds of RTL expressions are unique;
10616there do not exist two distinct objects representing the same value.  In
10617other cases, it makes an opposite assumption: that no RTL expression
10618object of a certain kind appears in more than one place in the
10619containing structure.
10620
10621 These assumptions refer to a single function; except for the RTL
10622objects that describe global variables and external functions, and a few
10623standard objects such as small integer constants, no RTL objects are
10624common to two functions.
10625
10626   * Each pseudo-register has only a single 'reg' object to represent
10627     it, and therefore only a single machine mode.
10628
10629   * For any symbolic label, there is only one 'symbol_ref' object
10630     referring to it.
10631
10632   * All 'const_int' expressions with equal values are shared.
10633
10634   * There is only one 'pc' expression.
10635
10636   * There is only one 'cc0' expression.
10637
10638   * There is only one 'const_double' expression with value 0 for each
10639     floating point mode.  Likewise for values 1 and 2.
10640
10641   * There is only one 'const_vector' expression with value 0 for each
10642     vector mode, be it an integer or a double constant vector.
10643
10644   * No 'label_ref' or 'scratch' appears in more than one place in the
10645     RTL structure; in other words, it is safe to do a tree-walk of all
10646     the insns in the function and assume that each time a 'label_ref'
10647     or 'scratch' is seen it is distinct from all others that are seen.
10648
10649   * Only one 'mem' object is normally created for each static variable
10650     or stack slot, so these objects are frequently shared in all the
10651     places they appear.  However, separate but equal objects for these
10652     variables are occasionally made.
10653
10654   * When a single 'asm' statement has multiple output operands, a
10655     distinct 'asm_operands' expression is made for each output operand.
10656     However, these all share the vector which contains the sequence of
10657     input operands.  This sharing is used later on to test whether two
10658     'asm_operands' expressions come from the same statement, so all
10659     optimizations must carefully preserve the sharing if they copy the
10660     vector at all.
10661
10662   * No RTL object appears in more than one place in the RTL structure
10663     except as described above.  Many passes of the compiler rely on
10664     this by assuming that they can modify RTL objects in place without
10665     unwanted side-effects on other insns.
10666
10667   * During initial RTL generation, shared structure is freely
10668     introduced.  After all the RTL for a function has been generated,
10669     all shared structure is copied by 'unshare_all_rtl' in
10670     'emit-rtl.c', after which the above rules are guaranteed to be
10671     followed.
10672
10673   * During the combiner pass, shared structure within an insn can exist
10674     temporarily.  However, the shared structure is copied before the
10675     combiner is finished with the insn.  This is done by calling
10676     'copy_rtx_if_shared', which is a subroutine of 'unshare_all_rtl'.
10677
10678
10679File: gccint.info,  Node: Reading RTL,  Prev: Sharing,  Up: RTL
10680
1068110.22 Reading RTL
10682=================
10683
10684To read an RTL object from a file, call 'read_rtx'.  It takes one
10685argument, a stdio stream, and returns a single RTL object.  This routine
10686is defined in 'read-rtl.c'.  It is not available in the compiler itself,
10687only the various programs that generate the compiler back end from the
10688machine description.
10689
10690 People frequently have the idea of using RTL stored as text in a file
10691as an interface between a language front end and the bulk of GCC.  This
10692idea is not feasible.
10693
10694 GCC was designed to use RTL internally only.  Correct RTL for a given
10695program is very dependent on the particular target machine.  And the RTL
10696does not contain all the information about the program.
10697
10698 The proper way to interface GCC to a new language front end is with the
10699"tree" data structure, described in the files 'tree.h' and 'tree.def'.
10700The documentation for this structure (*note GENERIC::) is incomplete.
10701
10702
10703File: gccint.info,  Node: GENERIC,  Next: GIMPLE,  Prev: RTL,  Up: Top
10704
1070511 GENERIC
10706**********
10707
10708The purpose of GENERIC is simply to provide a language-independent way
10709of representing an entire function in trees.  To this end, it was
10710necessary to add a few new tree codes to the back end, but most
10711everything was already there.  If you can express it with the codes in
10712'gcc/tree.def', it's GENERIC.
10713
10714 Early on, there was a great deal of debate about how to think about
10715statements in a tree IL.  In GENERIC, a statement is defined as any
10716expression whose value, if any, is ignored.  A statement will always
10717have 'TREE_SIDE_EFFECTS' set (or it will be discarded), but a
10718non-statement expression may also have side effects.  A 'CALL_EXPR', for
10719instance.
10720
10721 It would be possible for some local optimizations to work on the
10722GENERIC form of a function; indeed, the adapted tree inliner works fine
10723on GENERIC, but the current compiler performs inlining after lowering to
10724GIMPLE (a restricted form described in the next section).  Indeed,
10725currently the frontends perform this lowering before handing off to
10726'tree_rest_of_compilation', but this seems inelegant.
10727
10728* Menu:
10729
10730* Deficiencies::                Topics net yet covered in this document.
10731* Tree overview::               All about 'tree's.
10732* Types::                       Fundamental and aggregate types.
10733* Declarations::                Type declarations and variables.
10734* Attributes::                  Declaration and type attributes.
10735* Expressions: Expression trees.            Operating on data.
10736* Statements::                  Control flow and related trees.
10737* Functions::           	Function bodies, linkage, and other aspects.
10738* Language-dependent trees::    Topics and trees specific to language front ends.
10739* C and C++ Trees::     	Trees specific to C and C++.
10740* Java Trees:: 	                Trees specific to Java.
10741
10742
10743File: gccint.info,  Node: Deficiencies,  Next: Tree overview,  Up: GENERIC
10744
1074511.1 Deficiencies
10746=================
10747
10748There are many places in which this document is incomplet and incorrekt.
10749It is, as of yet, only _preliminary_ documentation.
10750
10751
10752File: gccint.info,  Node: Tree overview,  Next: Types,  Prev: Deficiencies,  Up: GENERIC
10753
1075411.2 Overview
10755=============
10756
10757The central data structure used by the internal representation is the
10758'tree'.  These nodes, while all of the C type 'tree', are of many
10759varieties.  A 'tree' is a pointer type, but the object to which it
10760points may be of a variety of types.  From this point forward, we will
10761refer to trees in ordinary type, rather than in 'this font', except when
10762talking about the actual C type 'tree'.
10763
10764 You can tell what kind of node a particular tree is by using the
10765'TREE_CODE' macro.  Many, many macros take trees as input and return
10766trees as output.  However, most macros require a certain kind of tree
10767node as input.  In other words, there is a type-system for trees, but it
10768is not reflected in the C type-system.
10769
10770 For safety, it is useful to configure GCC with '--enable-checking'.
10771Although this results in a significant performance penalty (since all
10772tree types are checked at run-time), and is therefore inappropriate in a
10773release version, it is extremely helpful during the development process.
10774
10775 Many macros behave as predicates.  Many, although not all, of these
10776predicates end in '_P'.  Do not rely on the result type of these macros
10777being of any particular type.  You may, however, rely on the fact that
10778the type can be compared to '0', so that statements like
10779     if (TEST_P (t) && !TEST_P (y))
10780       x = 1;
10781and
10782     int i = (TEST_P (t) != 0);
10783are legal.  Macros that return 'int' values now may be changed to return
10784'tree' values, or other pointers in the future.  Even those that
10785continue to return 'int' may return multiple nonzero codes where
10786previously they returned only zero and one.  Therefore, you should not
10787write code like
10788     if (TEST_P (t) == 1)
10789as this code is not guaranteed to work correctly in the future.
10790
10791 You should not take the address of values returned by the macros or
10792functions described here.  In particular, no guarantee is given that the
10793values are lvalues.
10794
10795 In general, the names of macros are all in uppercase, while the names
10796of functions are entirely in lowercase.  There are rare exceptions to
10797this rule.  You should assume that any macro or function whose name is
10798made up entirely of uppercase letters may evaluate its arguments more
10799than once.  You may assume that a macro or function whose name is made
10800up entirely of lowercase letters will evaluate its arguments only once.
10801
10802 The 'error_mark_node' is a special tree.  Its tree code is
10803'ERROR_MARK', but since there is only ever one node with that code, the
10804usual practice is to compare the tree against 'error_mark_node'.  (This
10805test is just a test for pointer equality.)  If an error has occurred
10806during front-end processing the flag 'errorcount' will be set.  If the
10807front end has encountered code it cannot handle, it will issue a message
10808to the user and set 'sorrycount'.  When these flags are set, any macro
10809or function which normally returns a tree of a particular kind may
10810instead return the 'error_mark_node'.  Thus, if you intend to do any
10811processing of erroneous code, you must be prepared to deal with the
10812'error_mark_node'.
10813
10814 Occasionally, a particular tree slot (like an operand to an expression,
10815or a particular field in a declaration) will be referred to as "reserved
10816for the back end".  These slots are used to store RTL when the tree is
10817converted to RTL for use by the GCC back end.  However, if that process
10818is not taking place (e.g., if the front end is being hooked up to an
10819intelligent editor), then those slots may be used by the back end
10820presently in use.
10821
10822 If you encounter situations that do not match this documentation, such
10823as tree nodes of types not mentioned here, or macros documented to
10824return entities of a particular kind that instead return entities of
10825some different kind, you have found a bug, either in the front end or in
10826the documentation.  Please report these bugs as you would any other bug.
10827
10828* Menu:
10829
10830* Macros and Functions::Macros and functions that can be used with all trees.
10831* Identifiers::         The names of things.
10832* Containers::          Lists and vectors.
10833
10834
10835File: gccint.info,  Node: Macros and Functions,  Next: Identifiers,  Up: Tree overview
10836
1083711.2.1 Trees
10838------------
10839
10840All GENERIC trees have two fields in common.  First, 'TREE_CHAIN' is a
10841pointer that can be used as a singly-linked list to other trees.  The
10842other is 'TREE_TYPE'.  Many trees store the type of an expression or
10843declaration in this field.
10844
10845 These are some other functions for handling trees:
10846
10847'tree_size'
10848     Return the number of bytes a tree takes.
10849
10850'build0'
10851'build1'
10852'build2'
10853'build3'
10854'build4'
10855'build5'
10856'build6'
10857
10858     These functions build a tree and supply values to put in each
10859     parameter.  The basic signature is 'code, type, [operands]'.
10860     'code' is the 'TREE_CODE', and 'type' is a tree representing the
10861     'TREE_TYPE'.  These are followed by the operands, each of which is
10862     also a tree.
10863
10864
10865File: gccint.info,  Node: Identifiers,  Next: Containers,  Prev: Macros and Functions,  Up: Tree overview
10866
1086711.2.2 Identifiers
10868------------------
10869
10870An 'IDENTIFIER_NODE' represents a slightly more general concept that the
10871standard C or C++ concept of identifier.  In particular, an
10872'IDENTIFIER_NODE' may contain a '$', or other extraordinary characters.
10873
10874 There are never two distinct 'IDENTIFIER_NODE's representing the same
10875identifier.  Therefore, you may use pointer equality to compare
10876'IDENTIFIER_NODE's, rather than using a routine like 'strcmp'.  Use
10877'get_identifier' to obtain the unique 'IDENTIFIER_NODE' for a supplied
10878string.
10879
10880 You can use the following macros to access identifiers:
10881'IDENTIFIER_POINTER'
10882     The string represented by the identifier, represented as a 'char*'.
10883     This string is always 'NUL'-terminated, and contains no embedded
10884     'NUL' characters.
10885
10886'IDENTIFIER_LENGTH'
10887     The length of the string returned by 'IDENTIFIER_POINTER', not
10888     including the trailing 'NUL'.  This value of 'IDENTIFIER_LENGTH
10889     (x)' is always the same as 'strlen (IDENTIFIER_POINTER (x))'.
10890
10891'IDENTIFIER_OPNAME_P'
10892     This predicate holds if the identifier represents the name of an
10893     overloaded operator.  In this case, you should not depend on the
10894     contents of either the 'IDENTIFIER_POINTER' or the
10895     'IDENTIFIER_LENGTH'.
10896
10897'IDENTIFIER_TYPENAME_P'
10898     This predicate holds if the identifier represents the name of a
10899     user-defined conversion operator.  In this case, the 'TREE_TYPE' of
10900     the 'IDENTIFIER_NODE' holds the type to which the conversion
10901     operator converts.
10902
10903
10904File: gccint.info,  Node: Containers,  Prev: Identifiers,  Up: Tree overview
10905
1090611.2.3 Containers
10907-----------------
10908
10909Two common container data structures can be represented directly with
10910tree nodes.  A 'TREE_LIST' is a singly linked list containing two trees
10911per node.  These are the 'TREE_PURPOSE' and 'TREE_VALUE' of each node.
10912(Often, the 'TREE_PURPOSE' contains some kind of tag, or additional
10913information, while the 'TREE_VALUE' contains the majority of the
10914payload.  In other cases, the 'TREE_PURPOSE' is simply 'NULL_TREE',
10915while in still others both the 'TREE_PURPOSE' and 'TREE_VALUE' are of
10916equal stature.)  Given one 'TREE_LIST' node, the next node is found by
10917following the 'TREE_CHAIN'.  If the 'TREE_CHAIN' is 'NULL_TREE', then
10918you have reached the end of the list.
10919
10920 A 'TREE_VEC' is a simple vector.  The 'TREE_VEC_LENGTH' is an integer
10921(not a tree) giving the number of nodes in the vector.  The nodes
10922themselves are accessed using the 'TREE_VEC_ELT' macro, which takes two
10923arguments.  The first is the 'TREE_VEC' in question; the second is an
10924integer indicating which element in the vector is desired.  The elements
10925are indexed from zero.
10926
10927
10928File: gccint.info,  Node: Types,  Next: Declarations,  Prev: Tree overview,  Up: GENERIC
10929
1093011.3 Types
10931==========
10932
10933All types have corresponding tree nodes.  However, you should not assume
10934that there is exactly one tree node corresponding to each type.  There
10935are often multiple nodes corresponding to the same type.
10936
10937 For the most part, different kinds of types have different tree codes.
10938(For example, pointer types use a 'POINTER_TYPE' code while arrays use
10939an 'ARRAY_TYPE' code.)  However, pointers to member functions use the
10940'RECORD_TYPE' code.  Therefore, when writing a 'switch' statement that
10941depends on the code associated with a particular type, you should take
10942care to handle pointers to member functions under the 'RECORD_TYPE' case
10943label.
10944
10945 The following functions and macros deal with cv-qualification of types:
10946'TYPE_MAIN_VARIANT'
10947     This macro returns the unqualified version of a type.  It may be
10948     applied to an unqualified type, but it is not always the identity
10949     function in that case.
10950
10951 A few other macros and functions are usable with all types:
10952'TYPE_SIZE'
10953     The number of bits required to represent the type, represented as
10954     an 'INTEGER_CST'.  For an incomplete type, 'TYPE_SIZE' will be
10955     'NULL_TREE'.
10956
10957'TYPE_ALIGN'
10958     The alignment of the type, in bits, represented as an 'int'.
10959
10960'TYPE_NAME'
10961     This macro returns a declaration (in the form of a 'TYPE_DECL') for
10962     the type.  (Note this macro does _not_ return an 'IDENTIFIER_NODE',
10963     as you might expect, given its name!)  You can look at the
10964     'DECL_NAME' of the 'TYPE_DECL' to obtain the actual name of the
10965     type.  The 'TYPE_NAME' will be 'NULL_TREE' for a type that is not a
10966     built-in type, the result of a typedef, or a named class type.
10967
10968'TYPE_CANONICAL'
10969     This macro returns the "canonical" type for the given type node.
10970     Canonical types are used to improve performance in the C++ and
10971     Objective-C++ front ends by allowing efficient comparison between
10972     two type nodes in 'same_type_p': if the 'TYPE_CANONICAL' values of
10973     the types are equal, the types are equivalent; otherwise, the types
10974     are not equivalent.  The notion of equivalence for canonical types
10975     is the same as the notion of type equivalence in the language
10976     itself.  For instance,
10977
10978     When 'TYPE_CANONICAL' is 'NULL_TREE', there is no canonical type
10979     for the given type node.  In this case, comparison between this
10980     type and any other type requires the compiler to perform a deep,
10981     "structural" comparison to see if the two type nodes have the same
10982     form and properties.
10983
10984     The canonical type for a node is always the most fundamental type
10985     in the equivalence class of types.  For instance, 'int' is its own
10986     canonical type.  A typedef 'I' of 'int' will have 'int' as its
10987     canonical type.  Similarly, 'I*' and a typedef 'IP' (defined to
10988     'I*') will has 'int*' as their canonical type.  When building a new
10989     type node, be sure to set 'TYPE_CANONICAL' to the appropriate
10990     canonical type.  If the new type is a compound type (built from
10991     other types), and any of those other types require structural
10992     equality, use 'SET_TYPE_STRUCTURAL_EQUALITY' to ensure that the new
10993     type also requires structural equality.  Finally, if for some
10994     reason you cannot guarantee that 'TYPE_CANONICAL' will point to the
10995     canonical type, use 'SET_TYPE_STRUCTURAL_EQUALITY' to make sure
10996     that the new type-and any type constructed based on it-requires
10997     structural equality.  If you suspect that the canonical type system
10998     is miscomparing types, pass '--param verify-canonical-types=1' to
10999     the compiler or configure with '--enable-checking' to force the
11000     compiler to verify its canonical-type comparisons against the
11001     structural comparisons; the compiler will then print any warnings
11002     if the canonical types miscompare.
11003
11004'TYPE_STRUCTURAL_EQUALITY_P'
11005     This predicate holds when the node requires structural equality
11006     checks, e.g., when 'TYPE_CANONICAL' is 'NULL_TREE'.
11007
11008'SET_TYPE_STRUCTURAL_EQUALITY'
11009     This macro states that the type node it is given requires
11010     structural equality checks, e.g., it sets 'TYPE_CANONICAL' to
11011     'NULL_TREE'.
11012
11013'same_type_p'
11014     This predicate takes two types as input, and holds if they are the
11015     same type.  For example, if one type is a 'typedef' for the other,
11016     or both are 'typedef's for the same type.  This predicate also
11017     holds if the two trees given as input are simply copies of one
11018     another; i.e., there is no difference between them at the source
11019     level, but, for whatever reason, a duplicate has been made in the
11020     representation.  You should never use '==' (pointer equality) to
11021     compare types; always use 'same_type_p' instead.
11022
11023 Detailed below are the various kinds of types, and the macros that can
11024be used to access them.  Although other kinds of types are used
11025elsewhere in G++, the types described here are the only ones that you
11026will encounter while examining the intermediate representation.
11027
11028'VOID_TYPE'
11029     Used to represent the 'void' type.
11030
11031'INTEGER_TYPE'
11032     Used to represent the various integral types, including 'char',
11033     'short', 'int', 'long', and 'long long'.  This code is not used for
11034     enumeration types, nor for the 'bool' type.  The 'TYPE_PRECISION'
11035     is the number of bits used in the representation, represented as an
11036     'unsigned int'.  (Note that in the general case this is not the
11037     same value as 'TYPE_SIZE'; suppose that there were a 24-bit integer
11038     type, but that alignment requirements for the ABI required 32-bit
11039     alignment.  Then, 'TYPE_SIZE' would be an 'INTEGER_CST' for 32,
11040     while 'TYPE_PRECISION' would be 24.)  The integer type is unsigned
11041     if 'TYPE_UNSIGNED' holds; otherwise, it is signed.
11042
11043     The 'TYPE_MIN_VALUE' is an 'INTEGER_CST' for the smallest integer
11044     that may be represented by this type.  Similarly, the
11045     'TYPE_MAX_VALUE' is an 'INTEGER_CST' for the largest integer that
11046     may be represented by this type.
11047
11048'REAL_TYPE'
11049     Used to represent the 'float', 'double', and 'long double' types.
11050     The number of bits in the floating-point representation is given by
11051     'TYPE_PRECISION', as in the 'INTEGER_TYPE' case.
11052
11053'FIXED_POINT_TYPE'
11054     Used to represent the 'short _Fract', '_Fract', 'long _Fract',
11055     'long long _Fract', 'short _Accum', '_Accum', 'long _Accum', and
11056     'long long _Accum' types.  The number of bits in the fixed-point
11057     representation is given by 'TYPE_PRECISION', as in the
11058     'INTEGER_TYPE' case.  There may be padding bits, fractional bits
11059     and integral bits.  The number of fractional bits is given by
11060     'TYPE_FBIT', and the number of integral bits is given by
11061     'TYPE_IBIT'.  The fixed-point type is unsigned if 'TYPE_UNSIGNED'
11062     holds; otherwise, it is signed.  The fixed-point type is saturating
11063     if 'TYPE_SATURATING' holds; otherwise, it is not saturating.
11064
11065'COMPLEX_TYPE'
11066     Used to represent GCC built-in '__complex__' data types.  The
11067     'TREE_TYPE' is the type of the real and imaginary parts.
11068
11069'ENUMERAL_TYPE'
11070     Used to represent an enumeration type.  The 'TYPE_PRECISION' gives
11071     (as an 'int'), the number of bits used to represent the type.  If
11072     there are no negative enumeration constants, 'TYPE_UNSIGNED' will
11073     hold.  The minimum and maximum enumeration constants may be
11074     obtained with 'TYPE_MIN_VALUE' and 'TYPE_MAX_VALUE', respectively;
11075     each of these macros returns an 'INTEGER_CST'.
11076
11077     The actual enumeration constants themselves may be obtained by
11078     looking at the 'TYPE_VALUES'.  This macro will return a
11079     'TREE_LIST', containing the constants.  The 'TREE_PURPOSE' of each
11080     node will be an 'IDENTIFIER_NODE' giving the name of the constant;
11081     the 'TREE_VALUE' will be an 'INTEGER_CST' giving the value assigned
11082     to that constant.  These constants will appear in the order in
11083     which they were declared.  The 'TREE_TYPE' of each of these
11084     constants will be the type of enumeration type itself.
11085
11086'BOOLEAN_TYPE'
11087     Used to represent the 'bool' type.
11088
11089'POINTER_TYPE'
11090     Used to represent pointer types, and pointer to data member types.
11091     The 'TREE_TYPE' gives the type to which this type points.
11092
11093'REFERENCE_TYPE'
11094     Used to represent reference types.  The 'TREE_TYPE' gives the type
11095     to which this type refers.
11096
11097'FUNCTION_TYPE'
11098     Used to represent the type of non-member functions and of static
11099     member functions.  The 'TREE_TYPE' gives the return type of the
11100     function.  The 'TYPE_ARG_TYPES' are a 'TREE_LIST' of the argument
11101     types.  The 'TREE_VALUE' of each node in this list is the type of
11102     the corresponding argument; the 'TREE_PURPOSE' is an expression for
11103     the default argument value, if any.  If the last node in the list
11104     is 'void_list_node' (a 'TREE_LIST' node whose 'TREE_VALUE' is the
11105     'void_type_node'), then functions of this type do not take variable
11106     arguments.  Otherwise, they do take a variable number of arguments.
11107
11108     Note that in C (but not in C++) a function declared like 'void f()'
11109     is an unprototyped function taking a variable number of arguments;
11110     the 'TYPE_ARG_TYPES' of such a function will be 'NULL'.
11111
11112'METHOD_TYPE'
11113     Used to represent the type of a non-static member function.  Like a
11114     'FUNCTION_TYPE', the return type is given by the 'TREE_TYPE'.  The
11115     type of '*this', i.e., the class of which functions of this type
11116     are a member, is given by the 'TYPE_METHOD_BASETYPE'.  The
11117     'TYPE_ARG_TYPES' is the parameter list, as for a 'FUNCTION_TYPE',
11118     and includes the 'this' argument.
11119
11120'ARRAY_TYPE'
11121     Used to represent array types.  The 'TREE_TYPE' gives the type of
11122     the elements in the array.  If the array-bound is present in the
11123     type, the 'TYPE_DOMAIN' is an 'INTEGER_TYPE' whose 'TYPE_MIN_VALUE'
11124     and 'TYPE_MAX_VALUE' will be the lower and upper bounds of the
11125     array, respectively.  The 'TYPE_MIN_VALUE' will always be an
11126     'INTEGER_CST' for zero, while the 'TYPE_MAX_VALUE' will be one less
11127     than the number of elements in the array, i.e., the highest value
11128     which may be used to index an element in the array.
11129
11130'RECORD_TYPE'
11131     Used to represent 'struct' and 'class' types, as well as pointers
11132     to member functions and similar constructs in other languages.
11133     'TYPE_FIELDS' contains the items contained in this type, each of
11134     which can be a 'FIELD_DECL', 'VAR_DECL', 'CONST_DECL', or
11135     'TYPE_DECL'.  You may not make any assumptions about the ordering
11136     of the fields in the type or whether one or more of them overlap.
11137
11138'UNION_TYPE'
11139     Used to represent 'union' types.  Similar to 'RECORD_TYPE' except
11140     that all 'FIELD_DECL' nodes in 'TYPE_FIELD' start at bit position
11141     zero.
11142
11143'QUAL_UNION_TYPE'
11144     Used to represent part of a variant record in Ada.  Similar to
11145     'UNION_TYPE' except that each 'FIELD_DECL' has a 'DECL_QUALIFIER'
11146     field, which contains a boolean expression that indicates whether
11147     the field is present in the object.  The type will only have one
11148     field, so each field's 'DECL_QUALIFIER' is only evaluated if none
11149     of the expressions in the previous fields in 'TYPE_FIELDS' are
11150     nonzero.  Normally these expressions will reference a field in the
11151     outer object using a 'PLACEHOLDER_EXPR'.
11152
11153'LANG_TYPE'
11154     This node is used to represent a language-specific type.  The front
11155     end must handle it.
11156
11157'OFFSET_TYPE'
11158     This node is used to represent a pointer-to-data member.  For a
11159     data member 'X::m' the 'TYPE_OFFSET_BASETYPE' is 'X' and the
11160     'TREE_TYPE' is the type of 'm'.
11161
11162 There are variables whose values represent some of the basic types.
11163These include:
11164'void_type_node'
11165     A node for 'void'.
11166
11167'integer_type_node'
11168     A node for 'int'.
11169
11170'unsigned_type_node.'
11171     A node for 'unsigned int'.
11172
11173'char_type_node.'
11174     A node for 'char'.
11175It may sometimes be useful to compare one of these variables with a type
11176in hand, using 'same_type_p'.
11177
11178
11179File: gccint.info,  Node: Declarations,  Next: Attributes,  Prev: Types,  Up: GENERIC
11180
1118111.4 Declarations
11182=================
11183
11184This section covers the various kinds of declarations that appear in the
11185internal representation, except for declarations of functions
11186(represented by 'FUNCTION_DECL' nodes), which are described in *note
11187Functions::.
11188
11189* Menu:
11190
11191* Working with declarations::  Macros and functions that work on
11192declarations.
11193* Internal structure:: How declaration nodes are represented.
11194
11195
11196File: gccint.info,  Node: Working with declarations,  Next: Internal structure,  Up: Declarations
11197
1119811.4.1 Working with declarations
11199--------------------------------
11200
11201Some macros can be used with any kind of declaration.  These include:
11202'DECL_NAME'
11203     This macro returns an 'IDENTIFIER_NODE' giving the name of the
11204     entity.
11205
11206'TREE_TYPE'
11207     This macro returns the type of the entity declared.
11208
11209'EXPR_FILENAME'
11210     This macro returns the name of the file in which the entity was
11211     declared, as a 'char*'.  For an entity declared implicitly by the
11212     compiler (like '__builtin_memcpy'), this will be the string
11213     '"<internal>"'.
11214
11215'EXPR_LINENO'
11216     This macro returns the line number at which the entity was
11217     declared, as an 'int'.
11218
11219'DECL_ARTIFICIAL'
11220     This predicate holds if the declaration was implicitly generated by
11221     the compiler.  For example, this predicate will hold of an
11222     implicitly declared member function, or of the 'TYPE_DECL'
11223     implicitly generated for a class type.  Recall that in C++ code
11224     like:
11225          struct S {};
11226     is roughly equivalent to C code like:
11227          struct S {};
11228          typedef struct S S;
11229     The implicitly generated 'typedef' declaration is represented by a
11230     'TYPE_DECL' for which 'DECL_ARTIFICIAL' holds.
11231
11232 The various kinds of declarations include:
11233'LABEL_DECL'
11234     These nodes are used to represent labels in function bodies.  For
11235     more information, see *note Functions::.  These nodes only appear
11236     in block scopes.
11237
11238'CONST_DECL'
11239     These nodes are used to represent enumeration constants.  The value
11240     of the constant is given by 'DECL_INITIAL' which will be an
11241     'INTEGER_CST' with the same type as the 'TREE_TYPE' of the
11242     'CONST_DECL', i.e., an 'ENUMERAL_TYPE'.
11243
11244'RESULT_DECL'
11245     These nodes represent the value returned by a function.  When a
11246     value is assigned to a 'RESULT_DECL', that indicates that the value
11247     should be returned, via bitwise copy, by the function.  You can use
11248     'DECL_SIZE' and 'DECL_ALIGN' on a 'RESULT_DECL', just as with a
11249     'VAR_DECL'.
11250
11251'TYPE_DECL'
11252     These nodes represent 'typedef' declarations.  The 'TREE_TYPE' is
11253     the type declared to have the name given by 'DECL_NAME'.  In some
11254     cases, there is no associated name.
11255
11256'VAR_DECL'
11257     These nodes represent variables with namespace or block scope, as
11258     well as static data members.  The 'DECL_SIZE' and 'DECL_ALIGN' are
11259     analogous to 'TYPE_SIZE' and 'TYPE_ALIGN'.  For a declaration, you
11260     should always use the 'DECL_SIZE' and 'DECL_ALIGN' rather than the
11261     'TYPE_SIZE' and 'TYPE_ALIGN' given by the 'TREE_TYPE', since
11262     special attributes may have been applied to the variable to give it
11263     a particular size and alignment.  You may use the predicates
11264     'DECL_THIS_STATIC' or 'DECL_THIS_EXTERN' to test whether the
11265     storage class specifiers 'static' or 'extern' were used to declare
11266     a variable.
11267
11268     If this variable is initialized (but does not require a
11269     constructor), the 'DECL_INITIAL' will be an expression for the
11270     initializer.  The initializer should be evaluated, and a bitwise
11271     copy into the variable performed.  If the 'DECL_INITIAL' is the
11272     'error_mark_node', there is an initializer, but it is given by an
11273     explicit statement later in the code; no bitwise copy is required.
11274
11275     GCC provides an extension that allows either automatic variables,
11276     or global variables, to be placed in particular registers.  This
11277     extension is being used for a particular 'VAR_DECL' if
11278     'DECL_REGISTER' holds for the 'VAR_DECL', and if
11279     'DECL_ASSEMBLER_NAME' is not equal to 'DECL_NAME'.  In that case,
11280     'DECL_ASSEMBLER_NAME' is the name of the register into which the
11281     variable will be placed.
11282
11283'PARM_DECL'
11284     Used to represent a parameter to a function.  Treat these nodes
11285     similarly to 'VAR_DECL' nodes.  These nodes only appear in the
11286     'DECL_ARGUMENTS' for a 'FUNCTION_DECL'.
11287
11288     The 'DECL_ARG_TYPE' for a 'PARM_DECL' is the type that will
11289     actually be used when a value is passed to this function.  It may
11290     be a wider type than the 'TREE_TYPE' of the parameter; for example,
11291     the ordinary type might be 'short' while the 'DECL_ARG_TYPE' is
11292     'int'.
11293
11294'DEBUG_EXPR_DECL'
11295     Used to represent an anonymous debug-information temporary created
11296     to hold an expression as it is optimized away, so that its value
11297     can be referenced in debug bind statements.
11298
11299'FIELD_DECL'
11300     These nodes represent non-static data members.  The 'DECL_SIZE' and
11301     'DECL_ALIGN' behave as for 'VAR_DECL' nodes.  The position of the
11302     field within the parent record is specified by a combination of
11303     three attributes.  'DECL_FIELD_OFFSET' is the position, counting in
11304     bytes, of the 'DECL_OFFSET_ALIGN'-bit sized word containing the bit
11305     of the field closest to the beginning of the structure.
11306     'DECL_FIELD_BIT_OFFSET' is the bit offset of the first bit of the
11307     field within this word; this may be nonzero even for fields that
11308     are not bit-fields, since 'DECL_OFFSET_ALIGN' may be greater than
11309     the natural alignment of the field's type.
11310
11311     If 'DECL_C_BIT_FIELD' holds, this field is a bit-field.  In a
11312     bit-field, 'DECL_BIT_FIELD_TYPE' also contains the type that was
11313     originally specified for it, while DECL_TYPE may be a modified type
11314     with lesser precision, according to the size of the bit field.
11315
11316'NAMESPACE_DECL'
11317     Namespaces provide a name hierarchy for other declarations.  They
11318     appear in the 'DECL_CONTEXT' of other '_DECL' nodes.
11319
11320
11321File: gccint.info,  Node: Internal structure,  Prev: Working with declarations,  Up: Declarations
11322
1132311.4.2 Internal structure
11324-------------------------
11325
11326'DECL' nodes are represented internally as a hierarchy of structures.
11327
11328* Menu:
11329
11330* Current structure hierarchy::  The current DECL node structure
11331hierarchy.
11332* Adding new DECL node types:: How to add a new DECL node to a
11333frontend.
11334
11335
11336File: gccint.info,  Node: Current structure hierarchy,  Next: Adding new DECL node types,  Up: Internal structure
11337
1133811.4.2.1 Current structure hierarchy
11339....................................
11340
11341'struct tree_decl_minimal'
11342     This is the minimal structure to inherit from in order for common
11343     'DECL' macros to work.  The fields it contains are a unique ID,
11344     source location, context, and name.
11345
11346'struct tree_decl_common'
11347     This structure inherits from 'struct tree_decl_minimal'.  It
11348     contains fields that most 'DECL' nodes need, such as a field to
11349     store alignment, machine mode, size, and attributes.
11350
11351'struct tree_field_decl'
11352     This structure inherits from 'struct tree_decl_common'.  It is used
11353     to represent 'FIELD_DECL'.
11354
11355'struct tree_label_decl'
11356     This structure inherits from 'struct tree_decl_common'.  It is used
11357     to represent 'LABEL_DECL'.
11358
11359'struct tree_translation_unit_decl'
11360     This structure inherits from 'struct tree_decl_common'.  It is used
11361     to represent 'TRANSLATION_UNIT_DECL'.
11362
11363'struct tree_decl_with_rtl'
11364     This structure inherits from 'struct tree_decl_common'.  It
11365     contains a field to store the low-level RTL associated with a
11366     'DECL' node.
11367
11368'struct tree_result_decl'
11369     This structure inherits from 'struct tree_decl_with_rtl'.  It is
11370     used to represent 'RESULT_DECL'.
11371
11372'struct tree_const_decl'
11373     This structure inherits from 'struct tree_decl_with_rtl'.  It is
11374     used to represent 'CONST_DECL'.
11375
11376'struct tree_parm_decl'
11377     This structure inherits from 'struct tree_decl_with_rtl'.  It is
11378     used to represent 'PARM_DECL'.
11379
11380'struct tree_decl_with_vis'
11381     This structure inherits from 'struct tree_decl_with_rtl'.  It
11382     contains fields necessary to store visibility information, as well
11383     as a section name and assembler name.
11384
11385'struct tree_var_decl'
11386     This structure inherits from 'struct tree_decl_with_vis'.  It is
11387     used to represent 'VAR_DECL'.
11388
11389'struct tree_function_decl'
11390     This structure inherits from 'struct tree_decl_with_vis'.  It is
11391     used to represent 'FUNCTION_DECL'.
11392
11393
11394File: gccint.info,  Node: Adding new DECL node types,  Prev: Current structure hierarchy,  Up: Internal structure
11395
1139611.4.2.2 Adding new DECL node types
11397...................................
11398
11399Adding a new 'DECL' tree consists of the following steps
11400
11401Add a new tree code for the 'DECL' node
11402     For language specific 'DECL' nodes, there is a '.def' file in each
11403     frontend directory where the tree code should be added.  For 'DECL'
11404     nodes that are part of the middle-end, the code should be added to
11405     'tree.def'.
11406
11407Create a new structure type for the 'DECL' node
11408     These structures should inherit from one of the existing structures
11409     in the language hierarchy by using that structure as the first
11410     member.
11411
11412          struct tree_foo_decl
11413          {
11414             struct tree_decl_with_vis common;
11415          }
11416
11417     Would create a structure name 'tree_foo_decl' that inherits from
11418     'struct tree_decl_with_vis'.
11419
11420     For language specific 'DECL' nodes, this new structure type should
11421     go in the appropriate '.h' file.  For 'DECL' nodes that are part of
11422     the middle-end, the structure type should go in 'tree.h'.
11423
11424Add a member to the tree structure enumerator for the node
11425     For garbage collection and dynamic checking purposes, each 'DECL'
11426     node structure type is required to have a unique enumerator value
11427     specified with it.  For language specific 'DECL' nodes, this new
11428     enumerator value should go in the appropriate '.def' file.  For
11429     'DECL' nodes that are part of the middle-end, the enumerator values
11430     are specified in 'treestruct.def'.
11431
11432Update 'union tree_node'
11433     In order to make your new structure type usable, it must be added
11434     to 'union tree_node'.  For language specific 'DECL' nodes, a new
11435     entry should be added to the appropriate '.h' file of the form
11436            struct tree_foo_decl GTY ((tag ("TS_VAR_DECL"))) foo_decl;
11437     For 'DECL' nodes that are part of the middle-end, the additional
11438     member goes directly into 'union tree_node' in 'tree.h'.
11439
11440Update dynamic checking info
11441     In order to be able to check whether accessing a named portion of
11442     'union tree_node' is legal, and whether a certain 'DECL' node
11443     contains one of the enumerated 'DECL' node structures in the
11444     hierarchy, a simple lookup table is used.  This lookup table needs
11445     to be kept up to date with the tree structure hierarchy, or else
11446     checking and containment macros will fail inappropriately.
11447
11448     For language specific 'DECL' nodes, their is an 'init_ts' function
11449     in an appropriate '.c' file, which initializes the lookup table.
11450     Code setting up the table for new 'DECL' nodes should be added
11451     there.  For each 'DECL' tree code and enumerator value representing
11452     a member of the inheritance hierarchy, the table should contain 1
11453     if that tree code inherits (directly or indirectly) from that
11454     member.  Thus, a 'FOO_DECL' node derived from 'struct
11455     decl_with_rtl', and enumerator value 'TS_FOO_DECL', would be set up
11456     as follows
11457          tree_contains_struct[FOO_DECL][TS_FOO_DECL] = 1;
11458          tree_contains_struct[FOO_DECL][TS_DECL_WRTL] = 1;
11459          tree_contains_struct[FOO_DECL][TS_DECL_COMMON] = 1;
11460          tree_contains_struct[FOO_DECL][TS_DECL_MINIMAL] = 1;
11461
11462     For 'DECL' nodes that are part of the middle-end, the setup code
11463     goes into 'tree.c'.
11464
11465Add macros to access any new fields and flags
11466
11467     Each added field or flag should have a macro that is used to access
11468     it, that performs appropriate checking to ensure only the right
11469     type of 'DECL' nodes access the field.
11470
11471     These macros generally take the following form
11472          #define FOO_DECL_FIELDNAME(NODE) FOO_DECL_CHECK(NODE)->foo_decl.fieldname
11473     However, if the structure is simply a base class for further
11474     structures, something like the following should be used
11475          #define BASE_STRUCT_CHECK(T) CONTAINS_STRUCT_CHECK(T, TS_BASE_STRUCT)
11476          #define BASE_STRUCT_FIELDNAME(NODE) \
11477             (BASE_STRUCT_CHECK(NODE)->base_struct.fieldname
11478
11479
11480File: gccint.info,  Node: Attributes,  Next: Expression trees,  Prev: Declarations,  Up: GENERIC
11481
1148211.5 Attributes in trees
11483========================
11484
11485Attributes, as specified using the '__attribute__' keyword, are
11486represented internally as a 'TREE_LIST'.  The 'TREE_PURPOSE' is the name
11487of the attribute, as an 'IDENTIFIER_NODE'.  The 'TREE_VALUE' is a
11488'TREE_LIST' of the arguments of the attribute, if any, or 'NULL_TREE' if
11489there are no arguments; the arguments are stored as the 'TREE_VALUE' of
11490successive entries in the list, and may be identifiers or expressions.
11491The 'TREE_CHAIN' of the attribute is the next attribute in a list of
11492attributes applying to the same declaration or type, or 'NULL_TREE' if
11493there are no further attributes in the list.
11494
11495 Attributes may be attached to declarations and to types; these
11496attributes may be accessed with the following macros.  All attributes
11497are stored in this way, and many also cause other changes to the
11498declaration or type or to other internal compiler data structures.
11499
11500 -- Tree Macro: tree DECL_ATTRIBUTES (tree DECL)
11501     This macro returns the attributes on the declaration DECL.
11502
11503 -- Tree Macro: tree TYPE_ATTRIBUTES (tree TYPE)
11504     This macro returns the attributes on the type TYPE.
11505
11506
11507File: gccint.info,  Node: Expression trees,  Next: Statements,  Prev: Attributes,  Up: GENERIC
11508
1150911.6 Expressions
11510================
11511
11512The internal representation for expressions is for the most part quite
11513straightforward.  However, there are a few facts that one must bear in
11514mind.  In particular, the expression "tree" is actually a directed
11515acyclic graph.  (For example there may be many references to the integer
11516constant zero throughout the source program; many of these will be
11517represented by the same expression node.)  You should not rely on
11518certain kinds of node being shared, nor should you rely on certain kinds
11519of nodes being unshared.
11520
11521 The following macros can be used with all expression nodes:
11522
11523'TREE_TYPE'
11524     Returns the type of the expression.  This value may not be
11525     precisely the same type that would be given the expression in the
11526     original program.
11527
11528 In what follows, some nodes that one might expect to always have type
11529'bool' are documented to have either integral or boolean type.  At some
11530point in the future, the C front end may also make use of this same
11531intermediate representation, and at this point these nodes will
11532certainly have integral type.  The previous sentence is not meant to
11533imply that the C++ front end does not or will not give these nodes
11534integral type.
11535
11536 Below, we list the various kinds of expression nodes.  Except where
11537noted otherwise, the operands to an expression are accessed using the
11538'TREE_OPERAND' macro.  For example, to access the first operand to a
11539binary plus expression 'expr', use:
11540
11541     TREE_OPERAND (expr, 0)
11542
11543 As this example indicates, the operands are zero-indexed.
11544
11545* Menu:
11546
11547* Constants: Constant expressions.
11548* Storage References::
11549* Unary and Binary Expressions::
11550* Vectors::
11551
11552
11553File: gccint.info,  Node: Constant expressions,  Next: Storage References,  Up: Expression trees
11554
1155511.6.1 Constant expressions
11556---------------------------
11557
11558The table below begins with constants, moves on to unary expressions,
11559then proceeds to binary expressions, and concludes with various other
11560kinds of expressions:
11561
11562'INTEGER_CST'
11563     These nodes represent integer constants.  Note that the type of
11564     these constants is obtained with 'TREE_TYPE'; they are not always
11565     of type 'int'.  In particular, 'char' constants are represented
11566     with 'INTEGER_CST' nodes.  The value of the integer constant 'e' is
11567     given by
11568          ((TREE_INT_CST_HIGH (e) << HOST_BITS_PER_WIDE_INT)
11569          + TREE_INST_CST_LOW (e))
11570     HOST_BITS_PER_WIDE_INT is at least thirty-two on all platforms.
11571     Both 'TREE_INT_CST_HIGH' and 'TREE_INT_CST_LOW' return a
11572     'HOST_WIDE_INT'.  The value of an 'INTEGER_CST' is interpreted as a
11573     signed or unsigned quantity depending on the type of the constant.
11574     In general, the expression given above will overflow, so it should
11575     not be used to calculate the value of the constant.
11576
11577     The variable 'integer_zero_node' is an integer constant with value
11578     zero.  Similarly, 'integer_one_node' is an integer constant with
11579     value one.  The 'size_zero_node' and 'size_one_node' variables are
11580     analogous, but have type 'size_t' rather than 'int'.
11581
11582     The function 'tree_int_cst_lt' is a predicate which holds if its
11583     first argument is less than its second.  Both constants are assumed
11584     to have the same signedness (i.e., either both should be signed or
11585     both should be unsigned.)  The full width of the constant is used
11586     when doing the comparison; the usual rules about promotions and
11587     conversions are ignored.  Similarly, 'tree_int_cst_equal' holds if
11588     the two constants are equal.  The 'tree_int_cst_sgn' function
11589     returns the sign of a constant.  The value is '1', '0', or '-1'
11590     according on whether the constant is greater than, equal to, or
11591     less than zero.  Again, the signedness of the constant's type is
11592     taken into account; an unsigned constant is never less than zero,
11593     no matter what its bit-pattern.
11594
11595'REAL_CST'
11596
11597     FIXME: Talk about how to obtain representations of this constant,
11598     do comparisons, and so forth.
11599
11600'FIXED_CST'
11601
11602     These nodes represent fixed-point constants.  The type of these
11603     constants is obtained with 'TREE_TYPE'.  'TREE_FIXED_CST_PTR'
11604     points to a 'struct fixed_value'; 'TREE_FIXED_CST' returns the
11605     structure itself.  'struct fixed_value' contains 'data' with the
11606     size of two 'HOST_BITS_PER_WIDE_INT' and 'mode' as the associated
11607     fixed-point machine mode for 'data'.
11608
11609'COMPLEX_CST'
11610     These nodes are used to represent complex number constants, that is
11611     a '__complex__' whose parts are constant nodes.  The
11612     'TREE_REALPART' and 'TREE_IMAGPART' return the real and the
11613     imaginary parts respectively.
11614
11615'VECTOR_CST'
11616     These nodes are used to represent vector constants, whose parts are
11617     constant nodes.  Each individual constant node is either an integer
11618     or a double constant node.  The first operand is a 'TREE_LIST' of
11619     the constant nodes and is accessed through 'TREE_VECTOR_CST_ELTS'.
11620
11621'STRING_CST'
11622     These nodes represent string-constants.  The 'TREE_STRING_LENGTH'
11623     returns the length of the string, as an 'int'.  The
11624     'TREE_STRING_POINTER' is a 'char*' containing the string itself.
11625     The string may not be 'NUL'-terminated, and it may contain embedded
11626     'NUL' characters.  Therefore, the 'TREE_STRING_LENGTH' includes the
11627     trailing 'NUL' if it is present.
11628
11629     For wide string constants, the 'TREE_STRING_LENGTH' is the number
11630     of bytes in the string, and the 'TREE_STRING_POINTER' points to an
11631     array of the bytes of the string, as represented on the target
11632     system (that is, as integers in the target endianness).  Wide and
11633     non-wide string constants are distinguished only by the 'TREE_TYPE'
11634     of the 'STRING_CST'.
11635
11636     FIXME: The formats of string constants are not well-defined when
11637     the target system bytes are not the same width as host system
11638     bytes.
11639
11640
11641File: gccint.info,  Node: Storage References,  Next: Unary and Binary Expressions,  Prev: Constant expressions,  Up: Expression trees
11642
1164311.6.2 References to storage
11644----------------------------
11645
11646'ARRAY_REF'
11647     These nodes represent array accesses.  The first operand is the
11648     array; the second is the index.  To calculate the address of the
11649     memory accessed, you must scale the index by the size of the type
11650     of the array elements.  The type of these expressions must be the
11651     type of a component of the array.  The third and fourth operands
11652     are used after gimplification to represent the lower bound and
11653     component size but should not be used directly; call
11654     'array_ref_low_bound' and 'array_ref_element_size' instead.
11655
11656'ARRAY_RANGE_REF'
11657     These nodes represent access to a range (or "slice") of an array.
11658     The operands are the same as that for 'ARRAY_REF' and have the same
11659     meanings.  The type of these expressions must be an array whose
11660     component type is the same as that of the first operand.  The range
11661     of that array type determines the amount of data these expressions
11662     access.
11663
11664'TARGET_MEM_REF'
11665     These nodes represent memory accesses whose address directly map to
11666     an addressing mode of the target architecture.  The first argument
11667     is 'TMR_SYMBOL' and must be a 'VAR_DECL' of an object with a fixed
11668     address.  The second argument is 'TMR_BASE' and the third one is
11669     'TMR_INDEX'.  The fourth argument is 'TMR_STEP' and must be an
11670     'INTEGER_CST'.  The fifth argument is 'TMR_OFFSET' and must be an
11671     'INTEGER_CST'.  Any of the arguments may be NULL if the appropriate
11672     component does not appear in the address.  Address of the
11673     'TARGET_MEM_REF' is determined in the following way.
11674
11675          &TMR_SYMBOL + TMR_BASE + TMR_INDEX * TMR_STEP + TMR_OFFSET
11676
11677     The sixth argument is the reference to the original memory access,
11678     which is preserved for the purposes of the RTL alias analysis.  The
11679     seventh argument is a tag representing the results of tree level
11680     alias analysis.
11681
11682'ADDR_EXPR'
11683     These nodes are used to represent the address of an object.  (These
11684     expressions will always have pointer or reference type.)  The
11685     operand may be another expression, or it may be a declaration.
11686
11687     As an extension, GCC allows users to take the address of a label.
11688     In this case, the operand of the 'ADDR_EXPR' will be a
11689     'LABEL_DECL'.  The type of such an expression is 'void*'.
11690
11691     If the object addressed is not an lvalue, a temporary is created,
11692     and the address of the temporary is used.
11693
11694'INDIRECT_REF'
11695     These nodes are used to represent the object pointed to by a
11696     pointer.  The operand is the pointer being dereferenced; it will
11697     always have pointer or reference type.
11698
11699'MEM_REF'
11700     These nodes are used to represent the object pointed to by a
11701     pointer offset by a constant.  The first operand is the pointer
11702     being dereferenced; it will always have pointer or reference type.
11703     The second operand is a pointer constant.  Its type is specifying
11704     the type to be used for type-based alias analysis.
11705
11706'COMPONENT_REF'
11707     These nodes represent non-static data member accesses.  The first
11708     operand is the object (rather than a pointer to it); the second
11709     operand is the 'FIELD_DECL' for the data member.  The third operand
11710     represents the byte offset of the field, but should not be used
11711     directly; call 'component_ref_field_offset' instead.
11712
11713
11714File: gccint.info,  Node: Unary and Binary Expressions,  Next: Vectors,  Prev: Storage References,  Up: Expression trees
11715
1171611.6.3 Unary and Binary Expressions
11717-----------------------------------
11718
11719'NEGATE_EXPR'
11720     These nodes represent unary negation of the single operand, for
11721     both integer and floating-point types.  The type of negation can be
11722     determined by looking at the type of the expression.
11723
11724     The behavior of this operation on signed arithmetic overflow is
11725     controlled by the 'flag_wrapv' and 'flag_trapv' variables.
11726
11727'ABS_EXPR'
11728     These nodes represent the absolute value of the single operand, for
11729     both integer and floating-point types.  This is typically used to
11730     implement the 'abs', 'labs' and 'llabs' builtins for integer types,
11731     and the 'fabs', 'fabsf' and 'fabsl' builtins for floating point
11732     types.  The type of abs operation can be determined by looking at
11733     the type of the expression.
11734
11735     This node is not used for complex types.  To represent the modulus
11736     or complex abs of a complex value, use the 'BUILT_IN_CABS',
11737     'BUILT_IN_CABSF' or 'BUILT_IN_CABSL' builtins, as used to implement
11738     the C99 'cabs', 'cabsf' and 'cabsl' built-in functions.
11739
11740'BIT_NOT_EXPR'
11741     These nodes represent bitwise complement, and will always have
11742     integral type.  The only operand is the value to be complemented.
11743
11744'TRUTH_NOT_EXPR'
11745     These nodes represent logical negation, and will always have
11746     integral (or boolean) type.  The operand is the value being
11747     negated.  The type of the operand and that of the result are always
11748     of 'BOOLEAN_TYPE' or 'INTEGER_TYPE'.
11749
11750'PREDECREMENT_EXPR'
11751'PREINCREMENT_EXPR'
11752'POSTDECREMENT_EXPR'
11753'POSTINCREMENT_EXPR'
11754     These nodes represent increment and decrement expressions.  The
11755     value of the single operand is computed, and the operand
11756     incremented or decremented.  In the case of 'PREDECREMENT_EXPR' and
11757     'PREINCREMENT_EXPR', the value of the expression is the value
11758     resulting after the increment or decrement; in the case of
11759     'POSTDECREMENT_EXPR' and 'POSTINCREMENT_EXPR' is the value before
11760     the increment or decrement occurs.  The type of the operand, like
11761     that of the result, will be either integral, boolean, or
11762     floating-point.
11763
11764'FIX_TRUNC_EXPR'
11765     These nodes represent conversion of a floating-point value to an
11766     integer.  The single operand will have a floating-point type, while
11767     the complete expression will have an integral (or boolean) type.
11768     The operand is rounded towards zero.
11769
11770'FLOAT_EXPR'
11771     These nodes represent conversion of an integral (or boolean) value
11772     to a floating-point value.  The single operand will have integral
11773     type, while the complete expression will have a floating-point
11774     type.
11775
11776     FIXME: How is the operand supposed to be rounded?  Is this
11777     dependent on '-mieee'?
11778
11779'COMPLEX_EXPR'
11780     These nodes are used to represent complex numbers constructed from
11781     two expressions of the same (integer or real) type.  The first
11782     operand is the real part and the second operand is the imaginary
11783     part.
11784
11785'CONJ_EXPR'
11786     These nodes represent the conjugate of their operand.
11787
11788'REALPART_EXPR'
11789'IMAGPART_EXPR'
11790     These nodes represent respectively the real and the imaginary parts
11791     of complex numbers (their sole argument).
11792
11793'NON_LVALUE_EXPR'
11794     These nodes indicate that their one and only operand is not an
11795     lvalue.  A back end can treat these identically to the single
11796     operand.
11797
11798'NOP_EXPR'
11799     These nodes are used to represent conversions that do not require
11800     any code-generation.  For example, conversion of a 'char*' to an
11801     'int*' does not require any code be generated; such a conversion is
11802     represented by a 'NOP_EXPR'.  The single operand is the expression
11803     to be converted.  The conversion from a pointer to a reference is
11804     also represented with a 'NOP_EXPR'.
11805
11806'CONVERT_EXPR'
11807     These nodes are similar to 'NOP_EXPR's, but are used in those
11808     situations where code may need to be generated.  For example, if an
11809     'int*' is converted to an 'int' code may need to be generated on
11810     some platforms.  These nodes are never used for C++-specific
11811     conversions, like conversions between pointers to different classes
11812     in an inheritance hierarchy.  Any adjustments that need to be made
11813     in such cases are always indicated explicitly.  Similarly, a
11814     user-defined conversion is never represented by a 'CONVERT_EXPR';
11815     instead, the function calls are made explicit.
11816
11817'FIXED_CONVERT_EXPR'
11818     These nodes are used to represent conversions that involve
11819     fixed-point values.  For example, from a fixed-point value to
11820     another fixed-point value, from an integer to a fixed-point value,
11821     from a fixed-point value to an integer, from a floating-point value
11822     to a fixed-point value, or from a fixed-point value to a
11823     floating-point value.
11824
11825'LSHIFT_EXPR'
11826'RSHIFT_EXPR'
11827     These nodes represent left and right shifts, respectively.  The
11828     first operand is the value to shift; it will always be of integral
11829     type.  The second operand is an expression for the number of bits
11830     by which to shift.  Right shift should be treated as arithmetic,
11831     i.e., the high-order bits should be zero-filled when the expression
11832     has unsigned type and filled with the sign bit when the expression
11833     has signed type.  Note that the result is undefined if the second
11834     operand is larger than or equal to the first operand's type size.
11835     Unlike most nodes, these can have a vector as first operand and a
11836     scalar as second operand.
11837
11838'BIT_IOR_EXPR'
11839'BIT_XOR_EXPR'
11840'BIT_AND_EXPR'
11841     These nodes represent bitwise inclusive or, bitwise exclusive or,
11842     and bitwise and, respectively.  Both operands will always have
11843     integral type.
11844
11845'TRUTH_ANDIF_EXPR'
11846'TRUTH_ORIF_EXPR'
11847     These nodes represent logical "and" and logical "or", respectively.
11848     These operators are not strict; i.e., the second operand is
11849     evaluated only if the value of the expression is not determined by
11850     evaluation of the first operand.  The type of the operands and that
11851     of the result are always of 'BOOLEAN_TYPE' or 'INTEGER_TYPE'.
11852
11853'TRUTH_AND_EXPR'
11854'TRUTH_OR_EXPR'
11855'TRUTH_XOR_EXPR'
11856     These nodes represent logical and, logical or, and logical
11857     exclusive or.  They are strict; both arguments are always
11858     evaluated.  There are no corresponding operators in C or C++, but
11859     the front end will sometimes generate these expressions anyhow, if
11860     it can tell that strictness does not matter.  The type of the
11861     operands and that of the result are always of 'BOOLEAN_TYPE' or
11862     'INTEGER_TYPE'.
11863
11864'POINTER_PLUS_EXPR'
11865     This node represents pointer arithmetic.  The first operand is
11866     always a pointer/reference type.  The second operand is always an
11867     unsigned integer type compatible with sizetype.  This is the only
11868     binary arithmetic operand that can operate on pointer types.
11869
11870'PLUS_EXPR'
11871'MINUS_EXPR'
11872'MULT_EXPR'
11873     These nodes represent various binary arithmetic operations.
11874     Respectively, these operations are addition, subtraction (of the
11875     second operand from the first) and multiplication.  Their operands
11876     may have either integral or floating type, but there will never be
11877     case in which one operand is of floating type and the other is of
11878     integral type.
11879
11880     The behavior of these operations on signed arithmetic overflow is
11881     controlled by the 'flag_wrapv' and 'flag_trapv' variables.
11882
11883'MULT_HIGHPART_EXPR'
11884     This node represents the "high-part" of a widening multiplication.
11885     For an integral type with B bits of precision, the result is the
11886     most significant B bits of the full 2B product.
11887
11888'RDIV_EXPR'
11889     This node represents a floating point division operation.
11890
11891'TRUNC_DIV_EXPR'
11892'FLOOR_DIV_EXPR'
11893'CEIL_DIV_EXPR'
11894'ROUND_DIV_EXPR'
11895     These nodes represent integer division operations that return an
11896     integer result.  'TRUNC_DIV_EXPR' rounds towards zero,
11897     'FLOOR_DIV_EXPR' rounds towards negative infinity, 'CEIL_DIV_EXPR'
11898     rounds towards positive infinity and 'ROUND_DIV_EXPR' rounds to the
11899     closest integer.  Integer division in C and C++ is truncating, i.e.
11900     'TRUNC_DIV_EXPR'.
11901
11902     The behavior of these operations on signed arithmetic overflow,
11903     when dividing the minimum signed integer by minus one, is
11904     controlled by the 'flag_wrapv' and 'flag_trapv' variables.
11905
11906'TRUNC_MOD_EXPR'
11907'FLOOR_MOD_EXPR'
11908'CEIL_MOD_EXPR'
11909'ROUND_MOD_EXPR'
11910     These nodes represent the integer remainder or modulus operation.
11911     The integer modulus of two operands 'a' and 'b' is defined as 'a -
11912     (a/b)*b' where the division calculated using the corresponding
11913     division operator.  Hence for 'TRUNC_MOD_EXPR' this definition
11914     assumes division using truncation towards zero, i.e.
11915     'TRUNC_DIV_EXPR'.  Integer remainder in C and C++ uses truncating
11916     division, i.e. 'TRUNC_MOD_EXPR'.
11917
11918'EXACT_DIV_EXPR'
11919     The 'EXACT_DIV_EXPR' code is used to represent integer divisions
11920     where the numerator is known to be an exact multiple of the
11921     denominator.  This allows the backend to choose between the faster
11922     of 'TRUNC_DIV_EXPR', 'CEIL_DIV_EXPR' and 'FLOOR_DIV_EXPR' for the
11923     current target.
11924
11925'LT_EXPR'
11926'LE_EXPR'
11927'GT_EXPR'
11928'GE_EXPR'
11929'EQ_EXPR'
11930'NE_EXPR'
11931     These nodes represent the less than, less than or equal to, greater
11932     than, greater than or equal to, equal, and not equal comparison
11933     operators.  The first and second operands will either be both of
11934     integral type, both of floating type or both of vector type.  The
11935     result type of these expressions will always be of integral,
11936     boolean or signed integral vector type.  These operations return
11937     the result type's zero value for false, the result type's one value
11938     for true, and a vector whose elements are zero (false) or minus one
11939     (true) for vectors.
11940
11941     For floating point comparisons, if we honor IEEE NaNs and either
11942     operand is NaN, then 'NE_EXPR' always returns true and the
11943     remaining operators always return false.  On some targets,
11944     comparisons against an IEEE NaN, other than equality and
11945     inequality, may generate a floating point exception.
11946
11947'ORDERED_EXPR'
11948'UNORDERED_EXPR'
11949     These nodes represent non-trapping ordered and unordered comparison
11950     operators.  These operations take two floating point operands and
11951     determine whether they are ordered or unordered relative to each
11952     other.  If either operand is an IEEE NaN, their comparison is
11953     defined to be unordered, otherwise the comparison is defined to be
11954     ordered.  The result type of these expressions will always be of
11955     integral or boolean type.  These operations return the result
11956     type's zero value for false, and the result type's one value for
11957     true.
11958
11959'UNLT_EXPR'
11960'UNLE_EXPR'
11961'UNGT_EXPR'
11962'UNGE_EXPR'
11963'UNEQ_EXPR'
11964'LTGT_EXPR'
11965     These nodes represent the unordered comparison operators.  These
11966     operations take two floating point operands and determine whether
11967     the operands are unordered or are less than, less than or equal to,
11968     greater than, greater than or equal to, or equal respectively.  For
11969     example, 'UNLT_EXPR' returns true if either operand is an IEEE NaN
11970     or the first operand is less than the second.  With the possible
11971     exception of 'LTGT_EXPR', all of these operations are guaranteed
11972     not to generate a floating point exception.  The result type of
11973     these expressions will always be of integral or boolean type.
11974     These operations return the result type's zero value for false, and
11975     the result type's one value for true.
11976
11977'MODIFY_EXPR'
11978     These nodes represent assignment.  The left-hand side is the first
11979     operand; the right-hand side is the second operand.  The left-hand
11980     side will be a 'VAR_DECL', 'INDIRECT_REF', 'COMPONENT_REF', or
11981     other lvalue.
11982
11983     These nodes are used to represent not only assignment with '=' but
11984     also compound assignments (like '+='), by reduction to '='
11985     assignment.  In other words, the representation for 'i += 3' looks
11986     just like that for 'i = i + 3'.
11987
11988'INIT_EXPR'
11989     These nodes are just like 'MODIFY_EXPR', but are used only when a
11990     variable is initialized, rather than assigned to subsequently.
11991     This means that we can assume that the target of the initialization
11992     is not used in computing its own value; any reference to the lhs in
11993     computing the rhs is undefined.
11994
11995'COMPOUND_EXPR'
11996     These nodes represent comma-expressions.  The first operand is an
11997     expression whose value is computed and thrown away prior to the
11998     evaluation of the second operand.  The value of the entire
11999     expression is the value of the second operand.
12000
12001'COND_EXPR'
12002     These nodes represent '?:' expressions.  The first operand is of
12003     boolean or integral type.  If it evaluates to a nonzero value, the
12004     second operand should be evaluated, and returned as the value of
12005     the expression.  Otherwise, the third operand is evaluated, and
12006     returned as the value of the expression.
12007
12008     The second operand must have the same type as the entire
12009     expression, unless it unconditionally throws an exception or calls
12010     a noreturn function, in which case it should have void type.  The
12011     same constraints apply to the third operand.  This allows array
12012     bounds checks to be represented conveniently as '(i >= 0 && i < 10)
12013     ? i : abort()'.
12014
12015     As a GNU extension, the C language front-ends allow the second
12016     operand of the '?:' operator may be omitted in the source.  For
12017     example, 'x ? : 3' is equivalent to 'x ? x : 3', assuming that 'x'
12018     is an expression without side-effects.  In the tree representation,
12019     however, the second operand is always present, possibly protected
12020     by 'SAVE_EXPR' if the first argument does cause side-effects.
12021
12022'CALL_EXPR'
12023     These nodes are used to represent calls to functions, including
12024     non-static member functions.  'CALL_EXPR's are implemented as
12025     expression nodes with a variable number of operands.  Rather than
12026     using 'TREE_OPERAND' to extract them, it is preferable to use the
12027     specialized accessor macros and functions that operate specifically
12028     on 'CALL_EXPR' nodes.
12029
12030     'CALL_EXPR_FN' returns a pointer to the function to call; it is
12031     always an expression whose type is a 'POINTER_TYPE'.
12032
12033     The number of arguments to the call is returned by
12034     'call_expr_nargs', while the arguments themselves can be accessed
12035     with the 'CALL_EXPR_ARG' macro.  The arguments are zero-indexed and
12036     numbered left-to-right.  You can iterate over the arguments using
12037     'FOR_EACH_CALL_EXPR_ARG', as in:
12038
12039          tree call, arg;
12040          call_expr_arg_iterator iter;
12041          FOR_EACH_CALL_EXPR_ARG (arg, iter, call)
12042            /* arg is bound to successive arguments of call.  */
12043            ...;
12044
12045     For non-static member functions, there will be an operand
12046     corresponding to the 'this' pointer.  There will always be
12047     expressions corresponding to all of the arguments, even if the
12048     function is declared with default arguments and some arguments are
12049     not explicitly provided at the call sites.
12050
12051     'CALL_EXPR's also have a 'CALL_EXPR_STATIC_CHAIN' operand that is
12052     used to implement nested functions.  This operand is otherwise
12053     null.
12054
12055'CLEANUP_POINT_EXPR'
12056     These nodes represent full-expressions.  The single operand is an
12057     expression to evaluate.  Any destructor calls engendered by the
12058     creation of temporaries during the evaluation of that expression
12059     should be performed immediately after the expression is evaluated.
12060
12061'CONSTRUCTOR'
12062     These nodes represent the brace-enclosed initializers for a
12063     structure or array.  The first operand is reserved for use by the
12064     back end.  The second operand is a 'TREE_LIST'.  If the 'TREE_TYPE'
12065     of the 'CONSTRUCTOR' is a 'RECORD_TYPE' or 'UNION_TYPE', then the
12066     'TREE_PURPOSE' of each node in the 'TREE_LIST' will be a
12067     'FIELD_DECL' and the 'TREE_VALUE' of each node will be the
12068     expression used to initialize that field.
12069
12070     If the 'TREE_TYPE' of the 'CONSTRUCTOR' is an 'ARRAY_TYPE', then
12071     the 'TREE_PURPOSE' of each element in the 'TREE_LIST' will be an
12072     'INTEGER_CST' or a 'RANGE_EXPR' of two 'INTEGER_CST's.  A single
12073     'INTEGER_CST' indicates which element of the array (indexed from
12074     zero) is being assigned to.  A 'RANGE_EXPR' indicates an inclusive
12075     range of elements to initialize.  In both cases the 'TREE_VALUE' is
12076     the corresponding initializer.  It is re-evaluated for each element
12077     of a 'RANGE_EXPR'.  If the 'TREE_PURPOSE' is 'NULL_TREE', then the
12078     initializer is for the next available array element.
12079
12080     In the front end, you should not depend on the fields appearing in
12081     any particular order.  However, in the middle end, fields must
12082     appear in declaration order.  You should not assume that all fields
12083     will be represented.  Unrepresented fields will be set to zero.
12084
12085'COMPOUND_LITERAL_EXPR'
12086     These nodes represent ISO C99 compound literals.  The
12087     'COMPOUND_LITERAL_EXPR_DECL_EXPR' is a 'DECL_EXPR' containing an
12088     anonymous 'VAR_DECL' for the unnamed object represented by the
12089     compound literal; the 'DECL_INITIAL' of that 'VAR_DECL' is a
12090     'CONSTRUCTOR' representing the brace-enclosed list of initializers
12091     in the compound literal.  That anonymous 'VAR_DECL' can also be
12092     accessed directly by the 'COMPOUND_LITERAL_EXPR_DECL' macro.
12093
12094'SAVE_EXPR'
12095
12096     A 'SAVE_EXPR' represents an expression (possibly involving
12097     side-effects) that is used more than once.  The side-effects should
12098     occur only the first time the expression is evaluated.  Subsequent
12099     uses should just reuse the computed value.  The first operand to
12100     the 'SAVE_EXPR' is the expression to evaluate.  The side-effects
12101     should be executed where the 'SAVE_EXPR' is first encountered in a
12102     depth-first preorder traversal of the expression tree.
12103
12104'TARGET_EXPR'
12105     A 'TARGET_EXPR' represents a temporary object.  The first operand
12106     is a 'VAR_DECL' for the temporary variable.  The second operand is
12107     the initializer for the temporary.  The initializer is evaluated
12108     and, if non-void, copied (bitwise) into the temporary.  If the
12109     initializer is void, that means that it will perform the
12110     initialization itself.
12111
12112     Often, a 'TARGET_EXPR' occurs on the right-hand side of an
12113     assignment, or as the second operand to a comma-expression which is
12114     itself the right-hand side of an assignment, etc.  In this case, we
12115     say that the 'TARGET_EXPR' is "normal"; otherwise, we say it is
12116     "orphaned".  For a normal 'TARGET_EXPR' the temporary variable
12117     should be treated as an alias for the left-hand side of the
12118     assignment, rather than as a new temporary variable.
12119
12120     The third operand to the 'TARGET_EXPR', if present, is a
12121     cleanup-expression (i.e., destructor call) for the temporary.  If
12122     this expression is orphaned, then this expression must be executed
12123     when the statement containing this expression is complete.  These
12124     cleanups must always be executed in the order opposite to that in
12125     which they were encountered.  Note that if a temporary is created
12126     on one branch of a conditional operator (i.e., in the second or
12127     third operand to a 'COND_EXPR'), the cleanup must be run only if
12128     that branch is actually executed.
12129
12130'VA_ARG_EXPR'
12131     This node is used to implement support for the C/C++ variable
12132     argument-list mechanism.  It represents expressions like 'va_arg
12133     (ap, type)'.  Its 'TREE_TYPE' yields the tree representation for
12134     'type' and its sole argument yields the representation for 'ap'.
12135
12136
12137File: gccint.info,  Node: Vectors,  Prev: Unary and Binary Expressions,  Up: Expression trees
12138
1213911.6.4 Vectors
12140--------------
12141
12142'VEC_LSHIFT_EXPR'
12143'VEC_RSHIFT_EXPR'
12144     These nodes represent whole vector left and right shifts,
12145     respectively.  The first operand is the vector to shift; it will
12146     always be of vector type.  The second operand is an expression for
12147     the number of bits by which to shift.  Note that the result is
12148     undefined if the second operand is larger than or equal to the
12149     first operand's type size.
12150
12151'VEC_WIDEN_MULT_HI_EXPR'
12152'VEC_WIDEN_MULT_LO_EXPR'
12153     These nodes represent widening vector multiplication of the high
12154     and low parts of the two input vectors, respectively.  Their
12155     operands are vectors that contain the same number of elements ('N')
12156     of the same integral type.  The result is a vector that contains
12157     half as many elements, of an integral type whose size is twice as
12158     wide.  In the case of 'VEC_WIDEN_MULT_HI_EXPR' the high 'N/2'
12159     elements of the two vector are multiplied to produce the vector of
12160     'N/2' products.  In the case of 'VEC_WIDEN_MULT_LO_EXPR' the low
12161     'N/2' elements of the two vector are multiplied to produce the
12162     vector of 'N/2' products.
12163
12164'VEC_UNPACK_HI_EXPR'
12165'VEC_UNPACK_LO_EXPR'
12166     These nodes represent unpacking of the high and low parts of the
12167     input vector, respectively.  The single operand is a vector that
12168     contains 'N' elements of the same integral or floating point type.
12169     The result is a vector that contains half as many elements, of an
12170     integral or floating point type whose size is twice as wide.  In
12171     the case of 'VEC_UNPACK_HI_EXPR' the high 'N/2' elements of the
12172     vector are extracted and widened (promoted).  In the case of
12173     'VEC_UNPACK_LO_EXPR' the low 'N/2' elements of the vector are
12174     extracted and widened (promoted).
12175
12176'VEC_UNPACK_FLOAT_HI_EXPR'
12177'VEC_UNPACK_FLOAT_LO_EXPR'
12178     These nodes represent unpacking of the high and low parts of the
12179     input vector, where the values are converted from fixed point to
12180     floating point.  The single operand is a vector that contains 'N'
12181     elements of the same integral type.  The result is a vector that
12182     contains half as many elements of a floating point type whose size
12183     is twice as wide.  In the case of 'VEC_UNPACK_HI_EXPR' the high
12184     'N/2' elements of the vector are extracted, converted and widened.
12185     In the case of 'VEC_UNPACK_LO_EXPR' the low 'N/2' elements of the
12186     vector are extracted, converted and widened.
12187
12188'VEC_PACK_TRUNC_EXPR'
12189     This node represents packing of truncated elements of the two input
12190     vectors into the output vector.  Input operands are vectors that
12191     contain the same number of elements of the same integral or
12192     floating point type.  The result is a vector that contains twice as
12193     many elements of an integral or floating point type whose size is
12194     half as wide.  The elements of the two vectors are demoted and
12195     merged (concatenated) to form the output vector.
12196
12197'VEC_PACK_SAT_EXPR'
12198     This node represents packing of elements of the two input vectors
12199     into the output vector using saturation.  Input operands are
12200     vectors that contain the same number of elements of the same
12201     integral type.  The result is a vector that contains twice as many
12202     elements of an integral type whose size is half as wide.  The
12203     elements of the two vectors are demoted and merged (concatenated)
12204     to form the output vector.
12205
12206'VEC_PACK_FIX_TRUNC_EXPR'
12207     This node represents packing of elements of the two input vectors
12208     into the output vector, where the values are converted from
12209     floating point to fixed point.  Input operands are vectors that
12210     contain the same number of elements of a floating point type.  The
12211     result is a vector that contains twice as many elements of an
12212     integral type whose size is half as wide.  The elements of the two
12213     vectors are merged (concatenated) to form the output vector.
12214
12215'VEC_COND_EXPR'
12216     These nodes represent '?:' expressions.  The three operands must be
12217     vectors of the same size and number of elements.  The second and
12218     third operands must have the same type as the entire expression.
12219     The first operand is of signed integral vector type.  If an element
12220     of the first operand evaluates to a zero value, the corresponding
12221     element of the result is taken from the third operand.  If it
12222     evaluates to a minus one value, it is taken from the second
12223     operand.  It should never evaluate to any other value currently,
12224     but optimizations should not rely on that property.  In contrast
12225     with a 'COND_EXPR', all operands are always evaluated.
12226
12227
12228File: gccint.info,  Node: Statements,  Next: Functions,  Prev: Expression trees,  Up: GENERIC
12229
1223011.7 Statements
12231===============
12232
12233Most statements in GIMPLE are assignment statements, represented by
12234'GIMPLE_ASSIGN'.  No other C expressions can appear at statement level;
12235a reference to a volatile object is converted into a 'GIMPLE_ASSIGN'.
12236
12237 There are also several varieties of complex statements.
12238
12239* Menu:
12240
12241* Basic Statements::
12242* Blocks::
12243* Statement Sequences::
12244* Empty Statements::
12245* Jumps::
12246* Cleanups::
12247* OpenMP::
12248
12249
12250File: gccint.info,  Node: Basic Statements,  Next: Blocks,  Up: Statements
12251
1225211.7.1 Basic Statements
12253-----------------------
12254
12255'ASM_EXPR'
12256
12257     Used to represent an inline assembly statement.  For an inline
12258     assembly statement like:
12259          asm ("mov x, y");
12260     The 'ASM_STRING' macro will return a 'STRING_CST' node for '"mov x,
12261     y"'.  If the original statement made use of the extended-assembly
12262     syntax, then 'ASM_OUTPUTS', 'ASM_INPUTS', and 'ASM_CLOBBERS' will
12263     be the outputs, inputs, and clobbers for the statement, represented
12264     as 'STRING_CST' nodes.  The extended-assembly syntax looks like:
12265          asm ("fsinx %1,%0" : "=f" (result) : "f" (angle));
12266     The first string is the 'ASM_STRING', containing the instruction
12267     template.  The next two strings are the output and inputs,
12268     respectively; this statement has no clobbers.  As this example
12269     indicates, "plain" assembly statements are merely a special case of
12270     extended assembly statements; they have no cv-qualifiers, outputs,
12271     inputs, or clobbers.  All of the strings will be 'NUL'-terminated,
12272     and will contain no embedded 'NUL'-characters.
12273
12274     If the assembly statement is declared 'volatile', or if the
12275     statement was not an extended assembly statement, and is therefore
12276     implicitly volatile, then the predicate 'ASM_VOLATILE_P' will hold
12277     of the 'ASM_EXPR'.
12278
12279'DECL_EXPR'
12280
12281     Used to represent a local declaration.  The 'DECL_EXPR_DECL' macro
12282     can be used to obtain the entity declared.  This declaration may be
12283     a 'LABEL_DECL', indicating that the label declared is a local
12284     label.  (As an extension, GCC allows the declaration of labels with
12285     scope.)  In C, this declaration may be a 'FUNCTION_DECL',
12286     indicating the use of the GCC nested function extension.  For more
12287     information, *note Functions::.
12288
12289'LABEL_EXPR'
12290
12291     Used to represent a label.  The 'LABEL_DECL' declared by this
12292     statement can be obtained with the 'LABEL_EXPR_LABEL' macro.  The
12293     'IDENTIFIER_NODE' giving the name of the label can be obtained from
12294     the 'LABEL_DECL' with 'DECL_NAME'.
12295
12296'GOTO_EXPR'
12297
12298     Used to represent a 'goto' statement.  The 'GOTO_DESTINATION' will
12299     usually be a 'LABEL_DECL'.  However, if the "computed goto"
12300     extension has been used, the 'GOTO_DESTINATION' will be an
12301     arbitrary expression indicating the destination.  This expression
12302     will always have pointer type.
12303
12304'RETURN_EXPR'
12305
12306     Used to represent a 'return' statement.  Operand 0 represents the
12307     value to return.  It should either be the 'RESULT_DECL' for the
12308     containing function, or a 'MODIFY_EXPR' or 'INIT_EXPR' setting the
12309     function's 'RESULT_DECL'.  It will be 'NULL_TREE' if the statement
12310     was just
12311          return;
12312
12313'LOOP_EXPR'
12314     These nodes represent "infinite" loops.  The 'LOOP_EXPR_BODY'
12315     represents the body of the loop.  It should be executed forever,
12316     unless an 'EXIT_EXPR' is encountered.
12317
12318'EXIT_EXPR'
12319     These nodes represent conditional exits from the nearest enclosing
12320     'LOOP_EXPR'.  The single operand is the condition; if it is
12321     nonzero, then the loop should be exited.  An 'EXIT_EXPR' will only
12322     appear within a 'LOOP_EXPR'.
12323
12324'SWITCH_STMT'
12325
12326     Used to represent a 'switch' statement.  The 'SWITCH_STMT_COND' is
12327     the expression on which the switch is occurring.  See the
12328     documentation for an 'IF_STMT' for more information on the
12329     representation used for the condition.  The 'SWITCH_STMT_BODY' is
12330     the body of the switch statement.  The 'SWITCH_STMT_TYPE' is the
12331     original type of switch expression as given in the source, before
12332     any compiler conversions.
12333
12334'CASE_LABEL_EXPR'
12335
12336     Use to represent a 'case' label, range of 'case' labels, or a
12337     'default' label.  If 'CASE_LOW' is 'NULL_TREE', then this is a
12338     'default' label.  Otherwise, if 'CASE_HIGH' is 'NULL_TREE', then
12339     this is an ordinary 'case' label.  In this case, 'CASE_LOW' is an
12340     expression giving the value of the label.  Both 'CASE_LOW' and
12341     'CASE_HIGH' are 'INTEGER_CST' nodes.  These values will have the
12342     same type as the condition expression in the switch statement.
12343
12344     Otherwise, if both 'CASE_LOW' and 'CASE_HIGH' are defined, the
12345     statement is a range of case labels.  Such statements originate
12346     with the extension that allows users to write things of the form:
12347          case 2 ... 5:
12348     The first value will be 'CASE_LOW', while the second will be
12349     'CASE_HIGH'.
12350
12351
12352File: gccint.info,  Node: Blocks,  Next: Statement Sequences,  Prev: Basic Statements,  Up: Statements
12353
1235411.7.2 Blocks
12355-------------
12356
12357Block scopes and the variables they declare in GENERIC are expressed
12358using the 'BIND_EXPR' code, which in previous versions of GCC was
12359primarily used for the C statement-expression extension.
12360
12361 Variables in a block are collected into 'BIND_EXPR_VARS' in declaration
12362order through their 'TREE_CHAIN' field.  Any runtime initialization is
12363moved out of 'DECL_INITIAL' and into a statement in the controlled
12364block.  When gimplifying from C or C++, this initialization replaces the
12365'DECL_STMT'.  These variables will never require cleanups.  The scope of
12366these variables is just the body
12367
12368 Variable-length arrays (VLAs) complicate this process, as their size
12369often refers to variables initialized earlier in the block.  To handle
12370this, we currently split the block at that point, and move the VLA into
12371a new, inner 'BIND_EXPR'.  This strategy may change in the future.
12372
12373 A C++ program will usually contain more 'BIND_EXPR's than there are
12374syntactic blocks in the source code, since several C++ constructs have
12375implicit scopes associated with them.  On the other hand, although the
12376C++ front end uses pseudo-scopes to handle cleanups for objects with
12377destructors, these don't translate into the GIMPLE form; multiple
12378declarations at the same level use the same 'BIND_EXPR'.
12379
12380
12381File: gccint.info,  Node: Statement Sequences,  Next: Empty Statements,  Prev: Blocks,  Up: Statements
12382
1238311.7.3 Statement Sequences
12384--------------------------
12385
12386Multiple statements at the same nesting level are collected into a
12387'STATEMENT_LIST'.  Statement lists are modified and traversed using the
12388interface in 'tree-iterator.h'.
12389
12390
12391File: gccint.info,  Node: Empty Statements,  Next: Jumps,  Prev: Statement Sequences,  Up: Statements
12392
1239311.7.4 Empty Statements
12394-----------------------
12395
12396Whenever possible, statements with no effect are discarded.  But if they
12397are nested within another construct which cannot be discarded for some
12398reason, they are instead replaced with an empty statement, generated by
12399'build_empty_stmt'.  Initially, all empty statements were shared, after
12400the pattern of the Java front end, but this caused a lot of trouble in
12401practice.
12402
12403 An empty statement is represented as '(void)0'.
12404
12405
12406File: gccint.info,  Node: Jumps,  Next: Cleanups,  Prev: Empty Statements,  Up: Statements
12407
1240811.7.5 Jumps
12409------------
12410
12411Other jumps are expressed by either 'GOTO_EXPR' or 'RETURN_EXPR'.
12412
12413 The operand of a 'GOTO_EXPR' must be either a label or a variable
12414containing the address to jump to.
12415
12416 The operand of a 'RETURN_EXPR' is either 'NULL_TREE', 'RESULT_DECL', or
12417a 'MODIFY_EXPR' which sets the return value.  It would be nice to move
12418the 'MODIFY_EXPR' into a separate statement, but the special return
12419semantics in 'expand_return' make that difficult.  It may still happen
12420in the future, perhaps by moving most of that logic into
12421'expand_assignment'.
12422
12423
12424File: gccint.info,  Node: Cleanups,  Next: OpenMP,  Prev: Jumps,  Up: Statements
12425
1242611.7.6 Cleanups
12427---------------
12428
12429Destructors for local C++ objects and similar dynamic cleanups are
12430represented in GIMPLE by a 'TRY_FINALLY_EXPR'.  'TRY_FINALLY_EXPR' has
12431two operands, both of which are a sequence of statements to execute.
12432The first sequence is executed.  When it completes the second sequence
12433is executed.
12434
12435 The first sequence may complete in the following ways:
12436
12437  1. Execute the last statement in the sequence and fall off the end.
12438
12439  2. Execute a goto statement ('GOTO_EXPR') to an ordinary label outside
12440     the sequence.
12441
12442  3. Execute a return statement ('RETURN_EXPR').
12443
12444  4. Throw an exception.  This is currently not explicitly represented
12445     in GIMPLE.
12446
12447 The second sequence is not executed if the first sequence completes by
12448calling 'setjmp' or 'exit' or any other function that does not return.
12449The second sequence is also not executed if the first sequence completes
12450via a non-local goto or a computed goto (in general the compiler does
12451not know whether such a goto statement exits the first sequence or not,
12452so we assume that it doesn't).
12453
12454 After the second sequence is executed, if it completes normally by
12455falling off the end, execution continues wherever the first sequence
12456would have continued, by falling off the end, or doing a goto, etc.
12457
12458 'TRY_FINALLY_EXPR' complicates the flow graph, since the cleanup needs
12459to appear on every edge out of the controlled block; this reduces the
12460freedom to move code across these edges.  Therefore, the EH lowering
12461pass which runs before most of the optimization passes eliminates these
12462expressions by explicitly adding the cleanup to each edge.  Rethrowing
12463the exception is represented using 'RESX_EXPR'.
12464
12465
12466File: gccint.info,  Node: OpenMP,  Prev: Cleanups,  Up: Statements
12467
1246811.7.7 OpenMP
12469-------------
12470
12471All the statements starting with 'OMP_' represent directives and clauses
12472used by the OpenMP API <http://www.openmp.org/>.
12473
12474'OMP_PARALLEL'
12475
12476     Represents '#pragma omp parallel [clause1 ... clauseN]'.  It has
12477     four operands:
12478
12479     Operand 'OMP_PARALLEL_BODY' is valid while in GENERIC and High
12480     GIMPLE forms.  It contains the body of code to be executed by all
12481     the threads.  During GIMPLE lowering, this operand becomes 'NULL'
12482     and the body is emitted linearly after 'OMP_PARALLEL'.
12483
12484     Operand 'OMP_PARALLEL_CLAUSES' is the list of clauses associated
12485     with the directive.
12486
12487     Operand 'OMP_PARALLEL_FN' is created by 'pass_lower_omp', it
12488     contains the 'FUNCTION_DECL' for the function that will contain the
12489     body of the parallel region.
12490
12491     Operand 'OMP_PARALLEL_DATA_ARG' is also created by
12492     'pass_lower_omp'.  If there are shared variables to be communicated
12493     to the children threads, this operand will contain the 'VAR_DECL'
12494     that contains all the shared values and variables.
12495
12496'OMP_FOR'
12497
12498     Represents '#pragma omp for [clause1 ... clauseN]'.  It has 5
12499     operands:
12500
12501     Operand 'OMP_FOR_BODY' contains the loop body.
12502
12503     Operand 'OMP_FOR_CLAUSES' is the list of clauses associated with
12504     the directive.
12505
12506     Operand 'OMP_FOR_INIT' is the loop initialization code of the form
12507     'VAR = N1'.
12508
12509     Operand 'OMP_FOR_COND' is the loop conditional expression of the
12510     form 'VAR {<,>,<=,>=} N2'.
12511
12512     Operand 'OMP_FOR_INCR' is the loop index increment of the form 'VAR
12513     {+=,-=} INCR'.
12514
12515     Operand 'OMP_FOR_PRE_BODY' contains side-effect code from operands
12516     'OMP_FOR_INIT', 'OMP_FOR_COND' and 'OMP_FOR_INC'.  These
12517     side-effects are part of the 'OMP_FOR' block but must be evaluated
12518     before the start of loop body.
12519
12520     The loop index variable 'VAR' must be a signed integer variable,
12521     which is implicitly private to each thread.  Bounds 'N1' and 'N2'
12522     and the increment expression 'INCR' are required to be loop
12523     invariant integer expressions that are evaluated without any
12524     synchronization.  The evaluation order, frequency of evaluation and
12525     side-effects are unspecified by the standard.
12526
12527'OMP_SECTIONS'
12528
12529     Represents '#pragma omp sections [clause1 ... clauseN]'.
12530
12531     Operand 'OMP_SECTIONS_BODY' contains the sections body, which in
12532     turn contains a set of 'OMP_SECTION' nodes for each of the
12533     concurrent sections delimited by '#pragma omp section'.
12534
12535     Operand 'OMP_SECTIONS_CLAUSES' is the list of clauses associated
12536     with the directive.
12537
12538'OMP_SECTION'
12539
12540     Section delimiter for 'OMP_SECTIONS'.
12541
12542'OMP_SINGLE'
12543
12544     Represents '#pragma omp single'.
12545
12546     Operand 'OMP_SINGLE_BODY' contains the body of code to be executed
12547     by a single thread.
12548
12549     Operand 'OMP_SINGLE_CLAUSES' is the list of clauses associated with
12550     the directive.
12551
12552'OMP_MASTER'
12553
12554     Represents '#pragma omp master'.
12555
12556     Operand 'OMP_MASTER_BODY' contains the body of code to be executed
12557     by the master thread.
12558
12559'OMP_ORDERED'
12560
12561     Represents '#pragma omp ordered'.
12562
12563     Operand 'OMP_ORDERED_BODY' contains the body of code to be executed
12564     in the sequential order dictated by the loop index variable.
12565
12566'OMP_CRITICAL'
12567
12568     Represents '#pragma omp critical [name]'.
12569
12570     Operand 'OMP_CRITICAL_BODY' is the critical section.
12571
12572     Operand 'OMP_CRITICAL_NAME' is an optional identifier to label the
12573     critical section.
12574
12575'OMP_RETURN'
12576
12577     This does not represent any OpenMP directive, it is an artificial
12578     marker to indicate the end of the body of an OpenMP.  It is used by
12579     the flow graph ('tree-cfg.c') and OpenMP region building code
12580     ('omp-low.c').
12581
12582'OMP_CONTINUE'
12583
12584     Similarly, this instruction does not represent an OpenMP directive,
12585     it is used by 'OMP_FOR' and 'OMP_SECTIONS' to mark the place where
12586     the code needs to loop to the next iteration (in the case of
12587     'OMP_FOR') or the next section (in the case of 'OMP_SECTIONS').
12588
12589     In some cases, 'OMP_CONTINUE' is placed right before 'OMP_RETURN'.
12590     But if there are cleanups that need to occur right after the
12591     looping body, it will be emitted between 'OMP_CONTINUE' and
12592     'OMP_RETURN'.
12593
12594'OMP_ATOMIC'
12595
12596     Represents '#pragma omp atomic'.
12597
12598     Operand 0 is the address at which the atomic operation is to be
12599     performed.
12600
12601     Operand 1 is the expression to evaluate.  The gimplifier tries
12602     three alternative code generation strategies.  Whenever possible,
12603     an atomic update built-in is used.  If that fails, a
12604     compare-and-swap loop is attempted.  If that also fails, a regular
12605     critical section around the expression is used.
12606
12607'OMP_CLAUSE'
12608
12609     Represents clauses associated with one of the 'OMP_' directives.
12610     Clauses are represented by separate sub-codes defined in 'tree.h'.
12611     Clauses codes can be one of: 'OMP_CLAUSE_PRIVATE',
12612     'OMP_CLAUSE_SHARED', 'OMP_CLAUSE_FIRSTPRIVATE',
12613     'OMP_CLAUSE_LASTPRIVATE', 'OMP_CLAUSE_COPYIN',
12614     'OMP_CLAUSE_COPYPRIVATE', 'OMP_CLAUSE_IF',
12615     'OMP_CLAUSE_NUM_THREADS', 'OMP_CLAUSE_SCHEDULE',
12616     'OMP_CLAUSE_NOWAIT', 'OMP_CLAUSE_ORDERED', 'OMP_CLAUSE_DEFAULT',
12617     'OMP_CLAUSE_REDUCTION', 'OMP_CLAUSE_COLLAPSE', 'OMP_CLAUSE_UNTIED',
12618     'OMP_CLAUSE_FINAL', and 'OMP_CLAUSE_MERGEABLE'.  Each code
12619     represents the corresponding OpenMP clause.
12620
12621     Clauses associated with the same directive are chained together via
12622     'OMP_CLAUSE_CHAIN'.  Those clauses that accept a list of variables
12623     are restricted to exactly one, accessed with 'OMP_CLAUSE_VAR'.
12624     Therefore, multiple variables under the same clause 'C' need to be
12625     represented as multiple 'C' clauses chained together.  This
12626     facilitates adding new clauses during compilation.
12627
12628
12629File: gccint.info,  Node: Functions,  Next: Language-dependent trees,  Prev: Statements,  Up: GENERIC
12630
1263111.8 Functions
12632==============
12633
12634A function is represented by a 'FUNCTION_DECL' node.  It stores the
12635basic pieces of the function such as body, parameters, and return type
12636as well as information on the surrounding context, visibility, and
12637linkage.
12638
12639* Menu:
12640
12641* Function Basics::     Function names, body, and parameters.
12642* Function Properties:: Context, linkage, etc.
12643
12644
12645File: gccint.info,  Node: Function Basics,  Next: Function Properties,  Up: Functions
12646
1264711.8.1 Function Basics
12648----------------------
12649
12650A function has four core parts: the name, the parameters, the result,
12651and the body.  The following macros and functions access these parts of
12652a 'FUNCTION_DECL' as well as other basic features:
12653'DECL_NAME'
12654     This macro returns the unqualified name of the function, as an
12655     'IDENTIFIER_NODE'.  For an instantiation of a function template,
12656     the 'DECL_NAME' is the unqualified name of the template, not
12657     something like 'f<int>'.  The value of 'DECL_NAME' is undefined
12658     when used on a constructor, destructor, overloaded operator, or
12659     type-conversion operator, or any function that is implicitly
12660     generated by the compiler.  See below for macros that can be used
12661     to distinguish these cases.
12662
12663'DECL_ASSEMBLER_NAME'
12664     This macro returns the mangled name of the function, also an
12665     'IDENTIFIER_NODE'.  This name does not contain leading underscores
12666     on systems that prefix all identifiers with underscores.  The
12667     mangled name is computed in the same way on all platforms; if
12668     special processing is required to deal with the object file format
12669     used on a particular platform, it is the responsibility of the back
12670     end to perform those modifications.  (Of course, the back end
12671     should not modify 'DECL_ASSEMBLER_NAME' itself.)
12672
12673     Using 'DECL_ASSEMBLER_NAME' will cause additional memory to be
12674     allocated (for the mangled name of the entity) so it should be used
12675     only when emitting assembly code.  It should not be used within the
12676     optimizers to determine whether or not two declarations are the
12677     same, even though some of the existing optimizers do use it in that
12678     way.  These uses will be removed over time.
12679
12680'DECL_ARGUMENTS'
12681     This macro returns the 'PARM_DECL' for the first argument to the
12682     function.  Subsequent 'PARM_DECL' nodes can be obtained by
12683     following the 'TREE_CHAIN' links.
12684
12685'DECL_RESULT'
12686     This macro returns the 'RESULT_DECL' for the function.
12687
12688'DECL_SAVED_TREE'
12689     This macro returns the complete body of the function.
12690
12691'TREE_TYPE'
12692     This macro returns the 'FUNCTION_TYPE' or 'METHOD_TYPE' for the
12693     function.
12694
12695'DECL_INITIAL'
12696     A function that has a definition in the current translation unit
12697     will have a non-'NULL' 'DECL_INITIAL'.  However, back ends should
12698     not make use of the particular value given by 'DECL_INITIAL'.
12699
12700     It should contain a tree of 'BLOCK' nodes that mirrors the scopes
12701     that variables are bound in the function.  Each block contains a
12702     list of decls declared in a basic block, a pointer to a chain of
12703     blocks at the next lower scope level, then a pointer to the next
12704     block at the same level and a backpointer to the parent 'BLOCK' or
12705     'FUNCTION_DECL'.  So given a function as follows:
12706
12707          void foo()
12708          {
12709            int a;
12710            {
12711              int b;
12712            }
12713            int c;
12714          }
12715
12716     you would get the following:
12717
12718          tree foo = FUNCTION_DECL;
12719          tree decl_a = VAR_DECL;
12720          tree decl_b = VAR_DECL;
12721          tree decl_c = VAR_DECL;
12722          tree block_a = BLOCK;
12723          tree block_b = BLOCK;
12724          tree block_c = BLOCK;
12725          BLOCK_VARS(block_a) = decl_a;
12726          BLOCK_SUBBLOCKS(block_a) = block_b;
12727          BLOCK_CHAIN(block_a) = block_c;
12728          BLOCK_SUPERCONTEXT(block_a) = foo;
12729          BLOCK_VARS(block_b) = decl_b;
12730          BLOCK_SUPERCONTEXT(block_b) = block_a;
12731          BLOCK_VARS(block_c) = decl_c;
12732          BLOCK_SUPERCONTEXT(block_c) = foo;
12733          DECL_INITIAL(foo) = block_a;
12734
12735
12736File: gccint.info,  Node: Function Properties,  Prev: Function Basics,  Up: Functions
12737
1273811.8.2 Function Properties
12739--------------------------
12740
12741To determine the scope of a function, you can use the 'DECL_CONTEXT'
12742macro.  This macro will return the class (either a 'RECORD_TYPE' or a
12743'UNION_TYPE') or namespace (a 'NAMESPACE_DECL') of which the function is
12744a member.  For a virtual function, this macro returns the class in which
12745the function was actually defined, not the base class in which the
12746virtual declaration occurred.
12747
12748 In C, the 'DECL_CONTEXT' for a function maybe another function.  This
12749representation indicates that the GNU nested function extension is in
12750use.  For details on the semantics of nested functions, see the GCC
12751Manual.  The nested function can refer to local variables in its
12752containing function.  Such references are not explicitly marked in the
12753tree structure; back ends must look at the 'DECL_CONTEXT' for the
12754referenced 'VAR_DECL'.  If the 'DECL_CONTEXT' for the referenced
12755'VAR_DECL' is not the same as the function currently being processed,
12756and neither 'DECL_EXTERNAL' nor 'TREE_STATIC' hold, then the reference
12757is to a local variable in a containing function, and the back end must
12758take appropriate action.
12759
12760'DECL_EXTERNAL'
12761     This predicate holds if the function is undefined.
12762
12763'TREE_PUBLIC'
12764     This predicate holds if the function has external linkage.
12765
12766'TREE_STATIC'
12767     This predicate holds if the function has been defined.
12768
12769'TREE_THIS_VOLATILE'
12770     This predicate holds if the function does not return normally.
12771
12772'TREE_READONLY'
12773     This predicate holds if the function can only read its arguments.
12774
12775'DECL_PURE_P'
12776     This predicate holds if the function can only read its arguments,
12777     but may also read global memory.
12778
12779'DECL_VIRTUAL_P'
12780     This predicate holds if the function is virtual.
12781
12782'DECL_ARTIFICIAL'
12783     This macro holds if the function was implicitly generated by the
12784     compiler, rather than explicitly declared.  In addition to
12785     implicitly generated class member functions, this macro holds for
12786     the special functions created to implement static initialization
12787     and destruction, to compute run-time type information, and so
12788     forth.
12789
12790'DECL_FUNCTION_SPECIFIC_TARGET'
12791     This macro returns a tree node that holds the target options that
12792     are to be used to compile this particular function or 'NULL_TREE'
12793     if the function is to be compiled with the target options specified
12794     on the command line.
12795
12796'DECL_FUNCTION_SPECIFIC_OPTIMIZATION'
12797     This macro returns a tree node that holds the optimization options
12798     that are to be used to compile this particular function or
12799     'NULL_TREE' if the function is to be compiled with the optimization
12800     options specified on the command line.
12801
12802
12803File: gccint.info,  Node: Language-dependent trees,  Next: C and C++ Trees,  Prev: Functions,  Up: GENERIC
12804
1280511.9 Language-dependent trees
12806=============================
12807
12808Front ends may wish to keep some state associated with various GENERIC
12809trees while parsing.  To support this, trees provide a set of flags that
12810may be used by the front end.  They are accessed using
12811'TREE_LANG_FLAG_n' where 'n' is currently 0 through 6.
12812
12813 If necessary, a front end can use some language-dependent tree codes in
12814its GENERIC representation, so long as it provides a hook for converting
12815them to GIMPLE and doesn't expect them to work with any (hypothetical)
12816optimizers that run before the conversion to GIMPLE.  The intermediate
12817representation used while parsing C and C++ looks very little like
12818GENERIC, but the C and C++ gimplifier hooks are perfectly happy to take
12819it as input and spit out GIMPLE.
12820
12821
12822File: gccint.info,  Node: C and C++ Trees,  Next: Java Trees,  Prev: Language-dependent trees,  Up: GENERIC
12823
1282411.10 C and C++ Trees
12825=====================
12826
12827This section documents the internal representation used by GCC to
12828represent C and C++ source programs.  When presented with a C or C++
12829source program, GCC parses the program, performs semantic analysis
12830(including the generation of error messages), and then produces the
12831internal representation described here.  This representation contains a
12832complete representation for the entire translation unit provided as
12833input to the front end.  This representation is then typically processed
12834by a code-generator in order to produce machine code, but could also be
12835used in the creation of source browsers, intelligent editors, automatic
12836documentation generators, interpreters, and any other programs needing
12837the ability to process C or C++ code.
12838
12839 This section explains the internal representation.  In particular, it
12840documents the internal representation for C and C++ source constructs,
12841and the macros, functions, and variables that can be used to access
12842these constructs.  The C++ representation is largely a superset of the
12843representation used in the C front end.  There is only one construct
12844used in C that does not appear in the C++ front end and that is the GNU
12845"nested function" extension.  Many of the macros documented here do not
12846apply in C because the corresponding language constructs do not appear
12847in C.
12848
12849 The C and C++ front ends generate a mix of GENERIC trees and ones
12850specific to C and C++.  These language-specific trees are higher-level
12851constructs than the ones in GENERIC to make the parser's job easier.
12852This section describes those trees that aren't part of GENERIC as well
12853as aspects of GENERIC trees that are treated in a language-specific
12854manner.
12855
12856 If you are developing a "back end", be it is a code-generator or some
12857other tool, that uses this representation, you may occasionally find
12858that you need to ask questions not easily answered by the functions and
12859macros available here.  If that situation occurs, it is quite likely
12860that GCC already supports the functionality you desire, but that the
12861interface is simply not documented here.  In that case, you should ask
12862the GCC maintainers (via mail to <[email protected]>) about documenting
12863the functionality you require.  Similarly, if you find yourself writing
12864functions that do not deal directly with your back end, but instead
12865might be useful to other people using the GCC front end, you should
12866submit your patches for inclusion in GCC.
12867
12868* Menu:
12869
12870* Types for C++::               Fundamental and aggregate types.
12871* Namespaces::                  Namespaces.
12872* Classes::                     Classes.
12873* Functions for C++::           Overloading and accessors for C++.
12874* Statements for C++::          Statements specific to C and C++.
12875* C++ Expressions::    From 'typeid' to 'throw'.
12876
12877
12878File: gccint.info,  Node: Types for C++,  Next: Namespaces,  Up: C and C++ Trees
12879
1288011.10.1 Types for C++
12881---------------------
12882
12883In C++, an array type is not qualified; rather the type of the array
12884elements is qualified.  This situation is reflected in the intermediate
12885representation.  The macros described here will always examine the
12886qualification of the underlying element type when applied to an array
12887type.  (If the element type is itself an array, then the recursion
12888continues until a non-array type is found, and the qualification of this
12889type is examined.)  So, for example, 'CP_TYPE_CONST_P' will hold of the
12890type 'const int ()[7]', denoting an array of seven 'int's.
12891
12892 The following functions and macros deal with cv-qualification of types:
12893'cp_type_quals'
12894     This function returns the set of type qualifiers applied to this
12895     type.  This value is 'TYPE_UNQUALIFIED' if no qualifiers have been
12896     applied.  The 'TYPE_QUAL_CONST' bit is set if the type is
12897     'const'-qualified.  The 'TYPE_QUAL_VOLATILE' bit is set if the type
12898     is 'volatile'-qualified.  The 'TYPE_QUAL_RESTRICT' bit is set if
12899     the type is 'restrict'-qualified.
12900
12901'CP_TYPE_CONST_P'
12902     This macro holds if the type is 'const'-qualified.
12903
12904'CP_TYPE_VOLATILE_P'
12905     This macro holds if the type is 'volatile'-qualified.
12906
12907'CP_TYPE_RESTRICT_P'
12908     This macro holds if the type is 'restrict'-qualified.
12909
12910'CP_TYPE_CONST_NON_VOLATILE_P'
12911     This predicate holds for a type that is 'const'-qualified, but
12912     _not_ 'volatile'-qualified; other cv-qualifiers are ignored as
12913     well: only the 'const'-ness is tested.
12914
12915 A few other macros and functions are usable with all types:
12916'TYPE_SIZE'
12917     The number of bits required to represent the type, represented as
12918     an 'INTEGER_CST'.  For an incomplete type, 'TYPE_SIZE' will be
12919     'NULL_TREE'.
12920
12921'TYPE_ALIGN'
12922     The alignment of the type, in bits, represented as an 'int'.
12923
12924'TYPE_NAME'
12925     This macro returns a declaration (in the form of a 'TYPE_DECL') for
12926     the type.  (Note this macro does _not_ return an 'IDENTIFIER_NODE',
12927     as you might expect, given its name!)  You can look at the
12928     'DECL_NAME' of the 'TYPE_DECL' to obtain the actual name of the
12929     type.  The 'TYPE_NAME' will be 'NULL_TREE' for a type that is not a
12930     built-in type, the result of a typedef, or a named class type.
12931
12932'CP_INTEGRAL_TYPE'
12933     This predicate holds if the type is an integral type.  Notice that
12934     in C++, enumerations are _not_ integral types.
12935
12936'ARITHMETIC_TYPE_P'
12937     This predicate holds if the type is an integral type (in the C++
12938     sense) or a floating point type.
12939
12940'CLASS_TYPE_P'
12941     This predicate holds for a class-type.
12942
12943'TYPE_BUILT_IN'
12944     This predicate holds for a built-in type.
12945
12946'TYPE_PTRDATAMEM_P'
12947     This predicate holds if the type is a pointer to data member.
12948
12949'TYPE_PTR_P'
12950     This predicate holds if the type is a pointer type, and the pointee
12951     is not a data member.
12952
12953'TYPE_PTRFN_P'
12954     This predicate holds for a pointer to function type.
12955
12956'TYPE_PTROB_P'
12957     This predicate holds for a pointer to object type.  Note however
12958     that it does not hold for the generic pointer to object type 'void
12959     *'.  You may use 'TYPE_PTROBV_P' to test for a pointer to object
12960     type as well as 'void *'.
12961
12962 The table below describes types specific to C and C++ as well as
12963language-dependent info about GENERIC types.
12964
12965'POINTER_TYPE'
12966     Used to represent pointer types, and pointer to data member types.
12967     If 'TREE_TYPE' is a pointer to data member type, then
12968     'TYPE_PTRDATAMEM_P' will hold.  For a pointer to data member type
12969     of the form 'T X::*', 'TYPE_PTRMEM_CLASS_TYPE' will be the type
12970     'X', while 'TYPE_PTRMEM_POINTED_TO_TYPE' will be the type 'T'.
12971
12972'RECORD_TYPE'
12973     Used to represent 'struct' and 'class' types in C and C++.  If
12974     'TYPE_PTRMEMFUNC_P' holds, then this type is a pointer-to-member
12975     type.  In that case, the 'TYPE_PTRMEMFUNC_FN_TYPE' is a
12976     'POINTER_TYPE' pointing to a 'METHOD_TYPE'.  The 'METHOD_TYPE' is
12977     the type of a function pointed to by the pointer-to-member
12978     function.  If 'TYPE_PTRMEMFUNC_P' does not hold, this type is a
12979     class type.  For more information, *note Classes::.
12980
12981'UNKNOWN_TYPE'
12982     This node is used to represent a type the knowledge of which is
12983     insufficient for a sound processing.
12984
12985'TYPENAME_TYPE'
12986     Used to represent a construct of the form 'typename T::A'.  The
12987     'TYPE_CONTEXT' is 'T'; the 'TYPE_NAME' is an 'IDENTIFIER_NODE' for
12988     'A'.  If the type is specified via a template-id, then
12989     'TYPENAME_TYPE_FULLNAME' yields a 'TEMPLATE_ID_EXPR'.  The
12990     'TREE_TYPE' is non-'NULL' if the node is implicitly generated in
12991     support for the implicit typename extension; in which case the
12992     'TREE_TYPE' is a type node for the base-class.
12993
12994'TYPEOF_TYPE'
12995     Used to represent the '__typeof__' extension.  The 'TYPE_FIELDS' is
12996     the expression the type of which is being represented.
12997
12998
12999File: gccint.info,  Node: Namespaces,  Next: Classes,  Prev: Types for C++,  Up: C and C++ Trees
13000
1300111.10.2 Namespaces
13002------------------
13003
13004The root of the entire intermediate representation is the variable
13005'global_namespace'.  This is the namespace specified with '::' in C++
13006source code.  All other namespaces, types, variables, functions, and so
13007forth can be found starting with this namespace.
13008
13009 However, except for the fact that it is distinguished as the root of
13010the representation, the global namespace is no different from any other
13011namespace.  Thus, in what follows, we describe namespaces generally,
13012rather than the global namespace in particular.
13013
13014 A namespace is represented by a 'NAMESPACE_DECL' node.
13015
13016 The following macros and functions can be used on a 'NAMESPACE_DECL':
13017
13018'DECL_NAME'
13019     This macro is used to obtain the 'IDENTIFIER_NODE' corresponding to
13020     the unqualified name of the name of the namespace (*note
13021     Identifiers::).  The name of the global namespace is '::', even
13022     though in C++ the global namespace is unnamed.  However, you should
13023     use comparison with 'global_namespace', rather than 'DECL_NAME' to
13024     determine whether or not a namespace is the global one.  An unnamed
13025     namespace will have a 'DECL_NAME' equal to
13026     'anonymous_namespace_name'.  Within a single translation unit, all
13027     unnamed namespaces will have the same name.
13028
13029'DECL_CONTEXT'
13030     This macro returns the enclosing namespace.  The 'DECL_CONTEXT' for
13031     the 'global_namespace' is 'NULL_TREE'.
13032
13033'DECL_NAMESPACE_ALIAS'
13034     If this declaration is for a namespace alias, then
13035     'DECL_NAMESPACE_ALIAS' is the namespace for which this one is an
13036     alias.
13037
13038     Do not attempt to use 'cp_namespace_decls' for a namespace which is
13039     an alias.  Instead, follow 'DECL_NAMESPACE_ALIAS' links until you
13040     reach an ordinary, non-alias, namespace, and call
13041     'cp_namespace_decls' there.
13042
13043'DECL_NAMESPACE_STD_P'
13044     This predicate holds if the namespace is the special '::std'
13045     namespace.
13046
13047'cp_namespace_decls'
13048     This function will return the declarations contained in the
13049     namespace, including types, overloaded functions, other namespaces,
13050     and so forth.  If there are no declarations, this function will
13051     return 'NULL_TREE'.  The declarations are connected through their
13052     'TREE_CHAIN' fields.
13053
13054     Although most entries on this list will be declarations,
13055     'TREE_LIST' nodes may also appear.  In this case, the 'TREE_VALUE'
13056     will be an 'OVERLOAD'.  The value of the 'TREE_PURPOSE' is
13057     unspecified; back ends should ignore this value.  As with the other
13058     kinds of declarations returned by 'cp_namespace_decls', the
13059     'TREE_CHAIN' will point to the next declaration in this list.
13060
13061     For more information on the kinds of declarations that can occur on
13062     this list, *Note Declarations::.  Some declarations will not appear
13063     on this list.  In particular, no 'FIELD_DECL', 'LABEL_DECL', or
13064     'PARM_DECL' nodes will appear here.
13065
13066     This function cannot be used with namespaces that have
13067     'DECL_NAMESPACE_ALIAS' set.
13068
13069
13070File: gccint.info,  Node: Classes,  Next: Functions for C++,  Prev: Namespaces,  Up: C and C++ Trees
13071
1307211.10.3 Classes
13073---------------
13074
13075Besides namespaces, the other high-level scoping construct in C++ is the
13076class.  (Throughout this manual the term "class" is used to mean the
13077types referred to in the ANSI/ISO C++ Standard as classes; these include
13078types defined with the 'class', 'struct', and 'union' keywords.)
13079
13080 A class type is represented by either a 'RECORD_TYPE' or a
13081'UNION_TYPE'.  A class declared with the 'union' tag is represented by a
13082'UNION_TYPE', while classes declared with either the 'struct' or the
13083'class' tag are represented by 'RECORD_TYPE's.  You can use the
13084'CLASSTYPE_DECLARED_CLASS' macro to discern whether or not a particular
13085type is a 'class' as opposed to a 'struct'.  This macro will be true
13086only for classes declared with the 'class' tag.
13087
13088 Almost all non-function members are available on the 'TYPE_FIELDS'
13089list.  Given one member, the next can be found by following the
13090'TREE_CHAIN'.  You should not depend in any way on the order in which
13091fields appear on this list.  All nodes on this list will be 'DECL'
13092nodes.  A 'FIELD_DECL' is used to represent a non-static data member, a
13093'VAR_DECL' is used to represent a static data member, and a 'TYPE_DECL'
13094is used to represent a type.  Note that the 'CONST_DECL' for an
13095enumeration constant will appear on this list, if the enumeration type
13096was declared in the class.  (Of course, the 'TYPE_DECL' for the
13097enumeration type will appear here as well.)  There are no entries for
13098base classes on this list.  In particular, there is no 'FIELD_DECL' for
13099the "base-class portion" of an object.
13100
13101 The 'TYPE_VFIELD' is a compiler-generated field used to point to
13102virtual function tables.  It may or may not appear on the 'TYPE_FIELDS'
13103list.  However, back ends should handle the 'TYPE_VFIELD' just like all
13104the entries on the 'TYPE_FIELDS' list.
13105
13106 The function members are available on the 'TYPE_METHODS' list.  Again,
13107subsequent members are found by following the 'TREE_CHAIN' field.  If a
13108function is overloaded, each of the overloaded functions appears; no
13109'OVERLOAD' nodes appear on the 'TYPE_METHODS' list.  Implicitly declared
13110functions (including default constructors, copy constructors, assignment
13111operators, and destructors) will appear on this list as well.
13112
13113 Every class has an associated "binfo", which can be obtained with
13114'TYPE_BINFO'.  Binfos are used to represent base-classes.  The binfo
13115given by 'TYPE_BINFO' is the degenerate case, whereby every class is
13116considered to be its own base-class.  The base binfos for a particular
13117binfo are held in a vector, whose length is obtained with
13118'BINFO_N_BASE_BINFOS'.  The base binfos themselves are obtained with
13119'BINFO_BASE_BINFO' and 'BINFO_BASE_ITERATE'.  To add a new binfo, use
13120'BINFO_BASE_APPEND'.  The vector of base binfos can be obtained with
13121'BINFO_BASE_BINFOS', but normally you do not need to use that.  The
13122class type associated with a binfo is given by 'BINFO_TYPE'.  It is not
13123always the case that 'BINFO_TYPE (TYPE_BINFO (x))', because of typedefs
13124and qualified types.  Neither is it the case that 'TYPE_BINFO
13125(BINFO_TYPE (y))' is the same binfo as 'y'.  The reason is that if 'y'
13126is a binfo representing a base-class 'B' of a derived class 'D', then
13127'BINFO_TYPE (y)' will be 'B', and 'TYPE_BINFO (BINFO_TYPE (y))' will be
13128'B' as its own base-class, rather than as a base-class of 'D'.
13129
13130 The access to a base type can be found with 'BINFO_BASE_ACCESS'.  This
13131will produce 'access_public_node', 'access_private_node' or
13132'access_protected_node'.  If bases are always public,
13133'BINFO_BASE_ACCESSES' may be 'NULL'.
13134
13135 'BINFO_VIRTUAL_P' is used to specify whether the binfo is inherited
13136virtually or not.  The other flags, 'BINFO_MARKED_P' and 'BINFO_FLAG_1'
13137to 'BINFO_FLAG_6' can be used for language specific use.
13138
13139 The following macros can be used on a tree node representing a
13140class-type.
13141
13142'LOCAL_CLASS_P'
13143     This predicate holds if the class is local class _i.e._ declared
13144     inside a function body.
13145
13146'TYPE_POLYMORPHIC_P'
13147     This predicate holds if the class has at least one virtual function
13148     (declared or inherited).
13149
13150'TYPE_HAS_DEFAULT_CONSTRUCTOR'
13151     This predicate holds whenever its argument represents a class-type
13152     with default constructor.
13153
13154'CLASSTYPE_HAS_MUTABLE'
13155'TYPE_HAS_MUTABLE_P'
13156     These predicates hold for a class-type having a mutable data
13157     member.
13158
13159'CLASSTYPE_NON_POD_P'
13160     This predicate holds only for class-types that are not PODs.
13161
13162'TYPE_HAS_NEW_OPERATOR'
13163     This predicate holds for a class-type that defines 'operator new'.
13164
13165'TYPE_HAS_ARRAY_NEW_OPERATOR'
13166     This predicate holds for a class-type for which 'operator new[]' is
13167     defined.
13168
13169'TYPE_OVERLOADS_CALL_EXPR'
13170     This predicate holds for class-type for which the function call
13171     'operator()' is overloaded.
13172
13173'TYPE_OVERLOADS_ARRAY_REF'
13174     This predicate holds for a class-type that overloads 'operator[]'
13175
13176'TYPE_OVERLOADS_ARROW'
13177     This predicate holds for a class-type for which 'operator->' is
13178     overloaded.
13179
13180
13181File: gccint.info,  Node: Functions for C++,  Next: Statements for C++,  Prev: Classes,  Up: C and C++ Trees
13182
1318311.10.4 Functions for C++
13184-------------------------
13185
13186A function is represented by a 'FUNCTION_DECL' node.  A set of
13187overloaded functions is sometimes represented by an 'OVERLOAD' node.
13188
13189 An 'OVERLOAD' node is not a declaration, so none of the 'DECL_' macros
13190should be used on an 'OVERLOAD'.  An 'OVERLOAD' node is similar to a
13191'TREE_LIST'.  Use 'OVL_CURRENT' to get the function associated with an
13192'OVERLOAD' node; use 'OVL_NEXT' to get the next 'OVERLOAD' node in the
13193list of overloaded functions.  The macros 'OVL_CURRENT' and 'OVL_NEXT'
13194are actually polymorphic; you can use them to work with 'FUNCTION_DECL'
13195nodes as well as with overloads.  In the case of a 'FUNCTION_DECL',
13196'OVL_CURRENT' will always return the function itself, and 'OVL_NEXT'
13197will always be 'NULL_TREE'.
13198
13199 To determine the scope of a function, you can use the 'DECL_CONTEXT'
13200macro.  This macro will return the class (either a 'RECORD_TYPE' or a
13201'UNION_TYPE') or namespace (a 'NAMESPACE_DECL') of which the function is
13202a member.  For a virtual function, this macro returns the class in which
13203the function was actually defined, not the base class in which the
13204virtual declaration occurred.
13205
13206 If a friend function is defined in a class scope, the
13207'DECL_FRIEND_CONTEXT' macro can be used to determine the class in which
13208it was defined.  For example, in
13209     class C { friend void f() {} };
13210the 'DECL_CONTEXT' for 'f' will be the 'global_namespace', but the
13211'DECL_FRIEND_CONTEXT' will be the 'RECORD_TYPE' for 'C'.
13212
13213 The following macros and functions can be used on a 'FUNCTION_DECL':
13214'DECL_MAIN_P'
13215     This predicate holds for a function that is the program entry point
13216     '::code'.
13217
13218'DECL_LOCAL_FUNCTION_P'
13219     This predicate holds if the function was declared at block scope,
13220     even though it has a global scope.
13221
13222'DECL_ANTICIPATED'
13223     This predicate holds if the function is a built-in function but its
13224     prototype is not yet explicitly declared.
13225
13226'DECL_EXTERN_C_FUNCTION_P'
13227     This predicate holds if the function is declared as an ''extern
13228     "C"'' function.
13229
13230'DECL_LINKONCE_P'
13231     This macro holds if multiple copies of this function may be emitted
13232     in various translation units.  It is the responsibility of the
13233     linker to merge the various copies.  Template instantiations are
13234     the most common example of functions for which 'DECL_LINKONCE_P'
13235     holds; G++ instantiates needed templates in all translation units
13236     which require them, and then relies on the linker to remove
13237     duplicate instantiations.
13238
13239     FIXME: This macro is not yet implemented.
13240
13241'DECL_FUNCTION_MEMBER_P'
13242     This macro holds if the function is a member of a class, rather
13243     than a member of a namespace.
13244
13245'DECL_STATIC_FUNCTION_P'
13246     This predicate holds if the function a static member function.
13247
13248'DECL_NONSTATIC_MEMBER_FUNCTION_P'
13249     This macro holds for a non-static member function.
13250
13251'DECL_CONST_MEMFUNC_P'
13252     This predicate holds for a 'const'-member function.
13253
13254'DECL_VOLATILE_MEMFUNC_P'
13255     This predicate holds for a 'volatile'-member function.
13256
13257'DECL_CONSTRUCTOR_P'
13258     This macro holds if the function is a constructor.
13259
13260'DECL_NONCONVERTING_P'
13261     This predicate holds if the constructor is a non-converting
13262     constructor.
13263
13264'DECL_COMPLETE_CONSTRUCTOR_P'
13265     This predicate holds for a function which is a constructor for an
13266     object of a complete type.
13267
13268'DECL_BASE_CONSTRUCTOR_P'
13269     This predicate holds for a function which is a constructor for a
13270     base class sub-object.
13271
13272'DECL_COPY_CONSTRUCTOR_P'
13273     This predicate holds for a function which is a copy-constructor.
13274
13275'DECL_DESTRUCTOR_P'
13276     This macro holds if the function is a destructor.
13277
13278'DECL_COMPLETE_DESTRUCTOR_P'
13279     This predicate holds if the function is the destructor for an
13280     object a complete type.
13281
13282'DECL_OVERLOADED_OPERATOR_P'
13283     This macro holds if the function is an overloaded operator.
13284
13285'DECL_CONV_FN_P'
13286     This macro holds if the function is a type-conversion operator.
13287
13288'DECL_GLOBAL_CTOR_P'
13289     This predicate holds if the function is a file-scope initialization
13290     function.
13291
13292'DECL_GLOBAL_DTOR_P'
13293     This predicate holds if the function is a file-scope finalization
13294     function.
13295
13296'DECL_THUNK_P'
13297     This predicate holds if the function is a thunk.
13298
13299     These functions represent stub code that adjusts the 'this' pointer
13300     and then jumps to another function.  When the jumped-to function
13301     returns, control is transferred directly to the caller, without
13302     returning to the thunk.  The first parameter to the thunk is always
13303     the 'this' pointer; the thunk should add 'THUNK_DELTA' to this
13304     value.  (The 'THUNK_DELTA' is an 'int', not an 'INTEGER_CST'.)
13305
13306     Then, if 'THUNK_VCALL_OFFSET' (an 'INTEGER_CST') is nonzero the
13307     adjusted 'this' pointer must be adjusted again.  The complete
13308     calculation is given by the following pseudo-code:
13309
13310          this += THUNK_DELTA
13311          if (THUNK_VCALL_OFFSET)
13312            this += (*((ptrdiff_t **) this))[THUNK_VCALL_OFFSET]
13313
13314     Finally, the thunk should jump to the location given by
13315     'DECL_INITIAL'; this will always be an expression for the address
13316     of a function.
13317
13318'DECL_NON_THUNK_FUNCTION_P'
13319     This predicate holds if the function is _not_ a thunk function.
13320
13321'GLOBAL_INIT_PRIORITY'
13322     If either 'DECL_GLOBAL_CTOR_P' or 'DECL_GLOBAL_DTOR_P' holds, then
13323     this gives the initialization priority for the function.  The
13324     linker will arrange that all functions for which
13325     'DECL_GLOBAL_CTOR_P' holds are run in increasing order of priority
13326     before 'main' is called.  When the program exits, all functions for
13327     which 'DECL_GLOBAL_DTOR_P' holds are run in the reverse order.
13328
13329'TYPE_RAISES_EXCEPTIONS'
13330     This macro returns the list of exceptions that a (member-)function
13331     can raise.  The returned list, if non 'NULL', is comprised of nodes
13332     whose 'TREE_VALUE' represents a type.
13333
13334'TYPE_NOTHROW_P'
13335     This predicate holds when the exception-specification of its
13336     arguments is of the form ''()''.
13337
13338'DECL_ARRAY_DELETE_OPERATOR_P'
13339     This predicate holds if the function an overloaded 'operator
13340     delete[]'.
13341
13342
13343File: gccint.info,  Node: Statements for C++,  Next: C++ Expressions,  Prev: Functions for C++,  Up: C and C++ Trees
13344
1334511.10.5 Statements for C++
13346--------------------------
13347
13348A function that has a definition in the current translation unit will
13349have a non-'NULL' 'DECL_INITIAL'.  However, back ends should not make
13350use of the particular value given by 'DECL_INITIAL'.
13351
13352 The 'DECL_SAVED_TREE' macro will give the complete body of the
13353function.
13354
1335511.10.5.1 Statements
13356....................
13357
13358There are tree nodes corresponding to all of the source-level statement
13359constructs, used within the C and C++ frontends.  These are enumerated
13360here, together with a list of the various macros that can be used to
13361obtain information about them.  There are a few macros that can be used
13362with all statements:
13363
13364'STMT_IS_FULL_EXPR_P'
13365     In C++, statements normally constitute "full expressions";
13366     temporaries created during a statement are destroyed when the
13367     statement is complete.  However, G++ sometimes represents
13368     expressions by statements; these statements will not have
13369     'STMT_IS_FULL_EXPR_P' set.  Temporaries created during such
13370     statements should be destroyed when the innermost enclosing
13371     statement with 'STMT_IS_FULL_EXPR_P' set is exited.
13372
13373 Here is the list of the various statement nodes, and the macros used to
13374access them.  This documentation describes the use of these nodes in
13375non-template functions (including instantiations of template functions).
13376In template functions, the same nodes are used, but sometimes in
13377slightly different ways.
13378
13379 Many of the statements have substatements.  For example, a 'while' loop
13380will have a body, which is itself a statement.  If the substatement is
13381'NULL_TREE', it is considered equivalent to a statement consisting of a
13382single ';', i.e., an expression statement in which the expression has
13383been omitted.  A substatement may in fact be a list of statements,
13384connected via their 'TREE_CHAIN's.  So, you should always process the
13385statement tree by looping over substatements, like this:
13386     void process_stmt (stmt)
13387          tree stmt;
13388     {
13389       while (stmt)
13390         {
13391           switch (TREE_CODE (stmt))
13392             {
13393             case IF_STMT:
13394               process_stmt (THEN_CLAUSE (stmt));
13395               /* More processing here.  */
13396               break;
13397
13398             ...
13399             }
13400
13401           stmt = TREE_CHAIN (stmt);
13402         }
13403     }
13404 In other words, while the 'then' clause of an 'if' statement in C++ can
13405be only one statement (although that one statement may be a compound
13406statement), the intermediate representation will sometimes use several
13407statements chained together.
13408
13409'BREAK_STMT'
13410
13411     Used to represent a 'break' statement.  There are no additional
13412     fields.
13413
13414'CLEANUP_STMT'
13415
13416     Used to represent an action that should take place upon exit from
13417     the enclosing scope.  Typically, these actions are calls to
13418     destructors for local objects, but back ends cannot rely on this
13419     fact.  If these nodes are in fact representing such destructors,
13420     'CLEANUP_DECL' will be the 'VAR_DECL' destroyed.  Otherwise,
13421     'CLEANUP_DECL' will be 'NULL_TREE'.  In any case, the
13422     'CLEANUP_EXPR' is the expression to execute.  The cleanups executed
13423     on exit from a scope should be run in the reverse order of the
13424     order in which the associated 'CLEANUP_STMT's were encountered.
13425
13426'CONTINUE_STMT'
13427
13428     Used to represent a 'continue' statement.  There are no additional
13429     fields.
13430
13431'CTOR_STMT'
13432
13433     Used to mark the beginning (if 'CTOR_BEGIN_P' holds) or end (if
13434     'CTOR_END_P' holds of the main body of a constructor.  See also
13435     'SUBOBJECT' for more information on how to use these nodes.
13436
13437'DO_STMT'
13438
13439     Used to represent a 'do' loop.  The body of the loop is given by
13440     'DO_BODY' while the termination condition for the loop is given by
13441     'DO_COND'.  The condition for a 'do'-statement is always an
13442     expression.
13443
13444'EMPTY_CLASS_EXPR'
13445
13446     Used to represent a temporary object of a class with no data whose
13447     address is never taken.  (All such objects are interchangeable.)
13448     The 'TREE_TYPE' represents the type of the object.
13449
13450'EXPR_STMT'
13451
13452     Used to represent an expression statement.  Use 'EXPR_STMT_EXPR' to
13453     obtain the expression.
13454
13455'FOR_STMT'
13456
13457     Used to represent a 'for' statement.  The 'FOR_INIT_STMT' is the
13458     initialization statement for the loop.  The 'FOR_COND' is the
13459     termination condition.  The 'FOR_EXPR' is the expression executed
13460     right before the 'FOR_COND' on each loop iteration; often, this
13461     expression increments a counter.  The body of the loop is given by
13462     'FOR_BODY'.  Note that 'FOR_INIT_STMT' and 'FOR_BODY' return
13463     statements, while 'FOR_COND' and 'FOR_EXPR' return expressions.
13464
13465'HANDLER'
13466
13467     Used to represent a C++ 'catch' block.  The 'HANDLER_TYPE' is the
13468     type of exception that will be caught by this handler; it is equal
13469     (by pointer equality) to 'NULL' if this handler is for all types.
13470     'HANDLER_PARMS' is the 'DECL_STMT' for the catch parameter, and
13471     'HANDLER_BODY' is the code for the block itself.
13472
13473'IF_STMT'
13474
13475     Used to represent an 'if' statement.  The 'IF_COND' is the
13476     expression.
13477
13478     If the condition is a 'TREE_LIST', then the 'TREE_PURPOSE' is a
13479     statement (usually a 'DECL_STMT').  Each time the condition is
13480     evaluated, the statement should be executed.  Then, the
13481     'TREE_VALUE' should be used as the conditional expression itself.
13482     This representation is used to handle C++ code like this:
13483
13484     C++ distinguishes between this and 'COND_EXPR' for handling
13485     templates.
13486
13487          if (int i = 7) ...
13488
13489     where there is a new local variable (or variables) declared within
13490     the condition.
13491
13492     The 'THEN_CLAUSE' represents the statement given by the 'then'
13493     condition, while the 'ELSE_CLAUSE' represents the statement given
13494     by the 'else' condition.
13495
13496'SUBOBJECT'
13497
13498     In a constructor, these nodes are used to mark the point at which a
13499     subobject of 'this' is fully constructed.  If, after this point, an
13500     exception is thrown before a 'CTOR_STMT' with 'CTOR_END_P' set is
13501     encountered, the 'SUBOBJECT_CLEANUP' must be executed.  The
13502     cleanups must be executed in the reverse order in which they
13503     appear.
13504
13505'SWITCH_STMT'
13506
13507     Used to represent a 'switch' statement.  The 'SWITCH_STMT_COND' is
13508     the expression on which the switch is occurring.  See the
13509     documentation for an 'IF_STMT' for more information on the
13510     representation used for the condition.  The 'SWITCH_STMT_BODY' is
13511     the body of the switch statement.  The 'SWITCH_STMT_TYPE' is the
13512     original type of switch expression as given in the source, before
13513     any compiler conversions.
13514
13515'TRY_BLOCK'
13516     Used to represent a 'try' block.  The body of the try block is
13517     given by 'TRY_STMTS'.  Each of the catch blocks is a 'HANDLER'
13518     node.  The first handler is given by 'TRY_HANDLERS'.  Subsequent
13519     handlers are obtained by following the 'TREE_CHAIN' link from one
13520     handler to the next.  The body of the handler is given by
13521     'HANDLER_BODY'.
13522
13523     If 'CLEANUP_P' holds of the 'TRY_BLOCK', then the 'TRY_HANDLERS'
13524     will not be a 'HANDLER' node.  Instead, it will be an expression
13525     that should be executed if an exception is thrown in the try block.
13526     It must rethrow the exception after executing that code.  And, if
13527     an exception is thrown while the expression is executing,
13528     'terminate' must be called.
13529
13530'USING_STMT'
13531     Used to represent a 'using' directive.  The namespace is given by
13532     'USING_STMT_NAMESPACE', which will be a NAMESPACE_DECL.  This node
13533     is needed inside template functions, to implement using directives
13534     during instantiation.
13535
13536'WHILE_STMT'
13537
13538     Used to represent a 'while' loop.  The 'WHILE_COND' is the
13539     termination condition for the loop.  See the documentation for an
13540     'IF_STMT' for more information on the representation used for the
13541     condition.
13542
13543     The 'WHILE_BODY' is the body of the loop.
13544
13545
13546File: gccint.info,  Node: C++ Expressions,  Prev: Statements for C++,  Up: C and C++ Trees
13547
1354811.10.6 C++ Expressions
13549-----------------------
13550
13551This section describes expressions specific to the C and C++ front ends.
13552
13553'TYPEID_EXPR'
13554
13555     Used to represent a 'typeid' expression.
13556
13557'NEW_EXPR'
13558'VEC_NEW_EXPR'
13559
13560     Used to represent a call to 'new' and 'new[]' respectively.
13561
13562'DELETE_EXPR'
13563'VEC_DELETE_EXPR'
13564
13565     Used to represent a call to 'delete' and 'delete[]' respectively.
13566
13567'MEMBER_REF'
13568
13569     Represents a reference to a member of a class.
13570
13571'THROW_EXPR'
13572
13573     Represents an instance of 'throw' in the program.  Operand 0, which
13574     is the expression to throw, may be 'NULL_TREE'.
13575
13576'AGGR_INIT_EXPR'
13577     An 'AGGR_INIT_EXPR' represents the initialization as the return
13578     value of a function call, or as the result of a constructor.  An
13579     'AGGR_INIT_EXPR' will only appear as a full-expression, or as the
13580     second operand of a 'TARGET_EXPR'.  'AGGR_INIT_EXPR's have a
13581     representation similar to that of 'CALL_EXPR's.  You can use the
13582     'AGGR_INIT_EXPR_FN' and 'AGGR_INIT_EXPR_ARG' macros to access the
13583     function to call and the arguments to pass.
13584
13585     If 'AGGR_INIT_VIA_CTOR_P' holds of the 'AGGR_INIT_EXPR', then the
13586     initialization is via a constructor call.  The address of the
13587     'AGGR_INIT_EXPR_SLOT' operand, which is always a 'VAR_DECL', is
13588     taken, and this value replaces the first argument in the argument
13589     list.
13590
13591     In either case, the expression is void.
13592
13593
13594File: gccint.info,  Node: Java Trees,  Prev: C and C++ Trees,  Up: GENERIC
13595
1359611.11 Java Trees
13597================
13598
13599
13600File: gccint.info,  Node: GIMPLE,  Next: Tree SSA,  Prev: GENERIC,  Up: Top
13601
1360212 GIMPLE
13603*********
13604
13605GIMPLE is a three-address representation derived from GENERIC by
13606breaking down GENERIC expressions into tuples of no more than 3 operands
13607(with some exceptions like function calls).  GIMPLE was heavily
13608influenced by the SIMPLE IL used by the McCAT compiler project at McGill
13609University, though we have made some different choices.  For one thing,
13610SIMPLE doesn't support 'goto'.
13611
13612 Temporaries are introduced to hold intermediate values needed to
13613compute complex expressions.  Additionally, all the control structures
13614used in GENERIC are lowered into conditional jumps, lexical scopes are
13615removed and exception regions are converted into an on the side
13616exception region tree.
13617
13618 The compiler pass which converts GENERIC into GIMPLE is referred to as
13619the 'gimplifier'.  The gimplifier works recursively, generating GIMPLE
13620tuples out of the original GENERIC expressions.
13621
13622 One of the early implementation strategies used for the GIMPLE
13623representation was to use the same internal data structures used by
13624front ends to represent parse trees.  This simplified implementation
13625because we could leverage existing functionality and interfaces.
13626However, GIMPLE is a much more restrictive representation than abstract
13627syntax trees (AST), therefore it does not require the full structural
13628complexity provided by the main tree data structure.
13629
13630 The GENERIC representation of a function is stored in the
13631'DECL_SAVED_TREE' field of the associated 'FUNCTION_DECL' tree node.  It
13632is converted to GIMPLE by a call to 'gimplify_function_tree'.
13633
13634 If a front end wants to include language-specific tree codes in the
13635tree representation which it provides to the back end, it must provide a
13636definition of 'LANG_HOOKS_GIMPLIFY_EXPR' which knows how to convert the
13637front end trees to GIMPLE.  Usually such a hook will involve much of the
13638same code for expanding front end trees to RTL.  This function can
13639return fully lowered GIMPLE, or it can return GENERIC trees and let the
13640main gimplifier lower them the rest of the way; this is often simpler.
13641GIMPLE that is not fully lowered is known as "High GIMPLE" and consists
13642of the IL before the pass 'pass_lower_cf'.  High GIMPLE contains some
13643container statements like lexical scopes (represented by 'GIMPLE_BIND')
13644and nested expressions (e.g., 'GIMPLE_TRY'), while "Low GIMPLE" exposes
13645all of the implicit jumps for control and exception expressions directly
13646in the IL and EH region trees.
13647
13648 The C and C++ front ends currently convert directly from front end
13649trees to GIMPLE, and hand that off to the back end rather than first
13650converting to GENERIC.  Their gimplifier hooks know about all the
13651'_STMT' nodes and how to convert them to GENERIC forms.  There was some
13652work done on a genericization pass which would run first, but the
13653existence of 'STMT_EXPR' meant that in order to convert all of the C
13654statements into GENERIC equivalents would involve walking the entire
13655tree anyway, so it was simpler to lower all the way.  This might change
13656in the future if someone writes an optimization pass which would work
13657better with higher-level trees, but currently the optimizers all expect
13658GIMPLE.
13659
13660 You can request to dump a C-like representation of the GIMPLE form with
13661the flag '-fdump-tree-gimple'.
13662
13663* Menu:
13664
13665* Tuple representation::
13666* GIMPLE instruction set::
13667* GIMPLE Exception Handling::
13668* Temporaries::
13669* Operands::
13670* Manipulating GIMPLE statements::
13671* Tuple specific accessors::
13672* GIMPLE sequences::
13673* Sequence iterators::
13674* Adding a new GIMPLE statement code::
13675* Statement and operand traversals::
13676
13677
13678File: gccint.info,  Node: Tuple representation,  Next: GIMPLE instruction set,  Up: GIMPLE
13679
1368012.1 Tuple representation
13681=========================
13682
13683GIMPLE instructions are tuples of variable size divided in two groups: a
13684header describing the instruction and its locations, and a variable
13685length body with all the operands.  Tuples are organized into a
13686hierarchy with 3 main classes of tuples.
13687
1368812.1.1 'gimple_statement_base' (gsbase)
13689---------------------------------------
13690
13691This is the root of the hierarchy, it holds basic information needed by
13692most GIMPLE statements.  There are some fields that may not be relevant
13693to every GIMPLE statement, but those were moved into the base structure
13694to take advantage of holes left by other fields (thus making the
13695structure more compact).  The structure takes 4 words (32 bytes) on 64
13696bit hosts:
13697
13698Field                   Size (bits)
13699'code'                  8
13700'subcode'               16
13701'no_warning'            1
13702'visited'               1
13703'nontemporal_move'      1
13704'plf'                   2
13705'modified'              1
13706'has_volatile_ops'      1
13707'references_memory_p'   1
13708'uid'                   32
13709'location'              32
13710'num_ops'               32
13711'bb'                    64
13712'block'                 63
13713Total size              32 bytes
13714
13715   * 'code' Main identifier for a GIMPLE instruction.
13716
13717   * 'subcode' Used to distinguish different variants of the same basic
13718     instruction or provide flags applicable to a given code.  The
13719     'subcode' flags field has different uses depending on the code of
13720     the instruction, but mostly it distinguishes instructions of the
13721     same family.  The most prominent use of this field is in
13722     assignments, where subcode indicates the operation done on the RHS
13723     of the assignment.  For example, a = b + c is encoded as
13724     'GIMPLE_ASSIGN <PLUS_EXPR, a, b, c>'.
13725
13726   * 'no_warning' Bitflag to indicate whether a warning has already been
13727     issued on this statement.
13728
13729   * 'visited' General purpose "visited" marker.  Set and cleared by
13730     each pass when needed.
13731
13732   * 'nontemporal_move' Bitflag used in assignments that represent
13733     non-temporal moves.  Although this bitflag is only used in
13734     assignments, it was moved into the base to take advantage of the
13735     bit holes left by the previous fields.
13736
13737   * 'plf' Pass Local Flags.  This 2-bit mask can be used as general
13738     purpose markers by any pass.  Passes are responsible for clearing
13739     and setting these two flags accordingly.
13740
13741   * 'modified' Bitflag to indicate whether the statement has been
13742     modified.  Used mainly by the operand scanner to determine when to
13743     re-scan a statement for operands.
13744
13745   * 'has_volatile_ops' Bitflag to indicate whether this statement
13746     contains operands that have been marked volatile.
13747
13748   * 'references_memory_p' Bitflag to indicate whether this statement
13749     contains memory references (i.e., its operands are either global
13750     variables, or pointer dereferences or anything that must reside in
13751     memory).
13752
13753   * 'uid' This is an unsigned integer used by passes that want to
13754     assign IDs to every statement.  These IDs must be assigned and used
13755     by each pass.
13756
13757   * 'location' This is a 'location_t' identifier to specify source code
13758     location for this statement.  It is inherited from the front end.
13759
13760   * 'num_ops' Number of operands that this statement has.  This
13761     specifies the size of the operand vector embedded in the tuple.
13762     Only used in some tuples, but it is declared in the base tuple to
13763     take advantage of the 32-bit hole left by the previous fields.
13764
13765   * 'bb' Basic block holding the instruction.
13766
13767   * 'block' Lexical block holding this statement.  Also used for debug
13768     information generation.
13769
1377012.1.2 'gimple_statement_with_ops'
13771----------------------------------
13772
13773This tuple is actually split in two: 'gimple_statement_with_ops_base'
13774and 'gimple_statement_with_ops'.  This is needed to accommodate the way
13775the operand vector is allocated.  The operand vector is defined to be an
13776array of 1 element.  So, to allocate a dynamic number of operands, the
13777memory allocator ('gimple_alloc') simply allocates enough memory to hold
13778the structure itself plus 'N - 1' operands which run "off the end" of
13779the structure.  For example, to allocate space for a tuple with 3
13780operands, 'gimple_alloc' reserves 'sizeof (struct
13781gimple_statement_with_ops) + 2 * sizeof (tree)' bytes.
13782
13783 On the other hand, several fields in this tuple need to be shared with
13784the 'gimple_statement_with_memory_ops' tuple.  So, these common fields
13785are placed in 'gimple_statement_with_ops_base' which is then inherited
13786from the other two tuples.
13787
13788'gsbase'    256
13789'def_ops'   64
13790'use_ops'   64
13791'op'        'num_ops' * 64
13792Total       48 + 8 * 'num_ops' bytes
13793size
13794
13795   * 'gsbase' Inherited from 'struct gimple_statement_base'.
13796
13797   * 'def_ops' Array of pointers into the operand array indicating all
13798     the slots that contain a variable written-to by the statement.
13799     This array is also used for immediate use chaining.  Note that it
13800     would be possible to not rely on this array, but the changes
13801     required to implement this are pretty invasive.
13802
13803   * 'use_ops' Similar to 'def_ops' but for variables read by the
13804     statement.
13805
13806   * 'op' Array of trees with 'num_ops' slots.
13807
1380812.1.3 'gimple_statement_with_memory_ops'
13809-----------------------------------------
13810
13811This tuple is essentially identical to 'gimple_statement_with_ops',
13812except that it contains 4 additional fields to hold vectors related
13813memory stores and loads.  Similar to the previous case, the structure is
13814split in two to accommodate for the operand vector
13815('gimple_statement_with_memory_ops_base' and
13816'gimple_statement_with_memory_ops').
13817
13818Field        Size (bits)
13819'gsbase'     256
13820'def_ops'    64
13821'use_ops'    64
13822'vdef_ops'   64
13823'vuse_ops'   64
13824'stores'     64
13825'loads'      64
13826'op'         'num_ops' * 64
13827Total size   80 + 8 * 'num_ops' bytes
13828
13829   * 'vdef_ops' Similar to 'def_ops' but for 'VDEF' operators.  There is
13830     one entry per memory symbol written by this statement.  This is
13831     used to maintain the memory SSA use-def and def-def chains.
13832
13833   * 'vuse_ops' Similar to 'use_ops' but for 'VUSE' operators.  There is
13834     one entry per memory symbol loaded by this statement.  This is used
13835     to maintain the memory SSA use-def chains.
13836
13837   * 'stores' Bitset with all the UIDs for the symbols written-to by the
13838     statement.  This is different than 'vdef_ops' in that all the
13839     affected symbols are mentioned in this set.  If memory partitioning
13840     is enabled, the 'vdef_ops' vector will refer to memory partitions.
13841     Furthermore, no SSA information is stored in this set.
13842
13843   * 'loads' Similar to 'stores', but for memory loads.  (Note that
13844     there is some amount of redundancy here, it should be possible to
13845     reduce memory utilization further by removing these sets).
13846
13847 All the other tuples are defined in terms of these three basic ones.
13848Each tuple will add some fields.  The main gimple type is defined to be
13849the union of all these structures ('GTY' markers elided for clarity):
13850
13851     union gimple_statement_d
13852     {
13853       struct gimple_statement_base gsbase;
13854       struct gimple_statement_with_ops gsops;
13855       struct gimple_statement_with_memory_ops gsmem;
13856       struct gimple_statement_omp omp;
13857       struct gimple_statement_bind gimple_bind;
13858       struct gimple_statement_catch gimple_catch;
13859       struct gimple_statement_eh_filter gimple_eh_filter;
13860       struct gimple_statement_phi gimple_phi;
13861       struct gimple_statement_resx gimple_resx;
13862       struct gimple_statement_try gimple_try;
13863       struct gimple_statement_wce gimple_wce;
13864       struct gimple_statement_asm gimple_asm;
13865       struct gimple_statement_omp_critical gimple_omp_critical;
13866       struct gimple_statement_omp_for gimple_omp_for;
13867       struct gimple_statement_omp_parallel gimple_omp_parallel;
13868       struct gimple_statement_omp_task gimple_omp_task;
13869       struct gimple_statement_omp_sections gimple_omp_sections;
13870       struct gimple_statement_omp_single gimple_omp_single;
13871       struct gimple_statement_omp_continue gimple_omp_continue;
13872       struct gimple_statement_omp_atomic_load gimple_omp_atomic_load;
13873       struct gimple_statement_omp_atomic_store gimple_omp_atomic_store;
13874     };
13875
13876
13877File: gccint.info,  Node: GIMPLE instruction set,  Next: GIMPLE Exception Handling,  Prev: Tuple representation,  Up: GIMPLE
13878
1387912.2 GIMPLE instruction set
13880===========================
13881
13882The following table briefly describes the GIMPLE instruction set.
13883
13884Instruction                    High GIMPLE   Low GIMPLE
13885'GIMPLE_ASM'                   x             x
13886'GIMPLE_ASSIGN'                x             x
13887'GIMPLE_BIND'                  x
13888'GIMPLE_CALL'                  x             x
13889'GIMPLE_CATCH'                 x
13890'GIMPLE_COND'                  x             x
13891'GIMPLE_DEBUG'                 x             x
13892'GIMPLE_EH_FILTER'             x
13893'GIMPLE_GOTO'                  x             x
13894'GIMPLE_LABEL'                 x             x
13895'GIMPLE_NOP'                   x             x
13896'GIMPLE_OMP_ATOMIC_LOAD'       x             x
13897'GIMPLE_OMP_ATOMIC_STORE'      x             x
13898'GIMPLE_OMP_CONTINUE'          x             x
13899'GIMPLE_OMP_CRITICAL'          x             x
13900'GIMPLE_OMP_FOR'               x             x
13901'GIMPLE_OMP_MASTER'            x             x
13902'GIMPLE_OMP_ORDERED'           x             x
13903'GIMPLE_OMP_PARALLEL'          x             x
13904'GIMPLE_OMP_RETURN'            x             x
13905'GIMPLE_OMP_SECTION'           x             x
13906'GIMPLE_OMP_SECTIONS'          x             x
13907'GIMPLE_OMP_SECTIONS_SWITCH'   x             x
13908'GIMPLE_OMP_SINGLE'            x             x
13909'GIMPLE_PHI'                                 x
13910'GIMPLE_RESX'                                x
13911'GIMPLE_RETURN'                x             x
13912'GIMPLE_SWITCH'                x             x
13913'GIMPLE_TRY'                   x
13914
13915
13916File: gccint.info,  Node: GIMPLE Exception Handling,  Next: Temporaries,  Prev: GIMPLE instruction set,  Up: GIMPLE
13917
1391812.3 Exception Handling
13919=======================
13920
13921Other exception handling constructs are represented using
13922'GIMPLE_TRY_CATCH'.  'GIMPLE_TRY_CATCH' has two operands.  The first
13923operand is a sequence of statements to execute.  If executing these
13924statements does not throw an exception, then the second operand is
13925ignored.  Otherwise, if an exception is thrown, then the second operand
13926of the 'GIMPLE_TRY_CATCH' is checked.  The second operand may have the
13927following forms:
13928
13929  1. A sequence of statements to execute.  When an exception occurs,
13930     these statements are executed, and then the exception is rethrown.
13931
13932  2. A sequence of 'GIMPLE_CATCH' statements.  Each 'GIMPLE_CATCH' has a
13933     list of applicable exception types and handler code.  If the thrown
13934     exception matches one of the caught types, the associated handler
13935     code is executed.  If the handler code falls off the bottom,
13936     execution continues after the original 'GIMPLE_TRY_CATCH'.
13937
13938  3. A 'GIMPLE_EH_FILTER' statement.  This has a list of permitted
13939     exception types, and code to handle a match failure.  If the thrown
13940     exception does not match one of the allowed types, the associated
13941     match failure code is executed.  If the thrown exception does
13942     match, it continues unwinding the stack looking for the next
13943     handler.
13944
13945 Currently throwing an exception is not directly represented in GIMPLE,
13946since it is implemented by calling a function.  At some point in the
13947future we will want to add some way to express that the call will throw
13948an exception of a known type.
13949
13950 Just before running the optimizers, the compiler lowers the high-level
13951EH constructs above into a set of 'goto's, magic labels, and EH regions.
13952Continuing to unwind at the end of a cleanup is represented with a
13953'GIMPLE_RESX'.
13954
13955
13956File: gccint.info,  Node: Temporaries,  Next: Operands,  Prev: GIMPLE Exception Handling,  Up: GIMPLE
13957
1395812.4 Temporaries
13959================
13960
13961When gimplification encounters a subexpression that is too complex, it
13962creates a new temporary variable to hold the value of the subexpression,
13963and adds a new statement to initialize it before the current statement.
13964These special temporaries are known as 'expression temporaries', and are
13965allocated using 'get_formal_tmp_var'.  The compiler tries to always
13966evaluate identical expressions into the same temporary, to simplify
13967elimination of redundant calculations.
13968
13969 We can only use expression temporaries when we know that it will not be
13970reevaluated before its value is used, and that it will not be otherwise
13971modified(1).  Other temporaries can be allocated using
13972'get_initialized_tmp_var' or 'create_tmp_var'.
13973
13974 Currently, an expression like 'a = b + 5' is not reduced any further.
13975We tried converting it to something like
13976     T1 = b + 5;
13977     a = T1;
13978 but this bloated the representation for minimal benefit.  However, a
13979variable which must live in memory cannot appear in an expression; its
13980value is explicitly loaded into a temporary first.  Similarly, storing
13981the value of an expression to a memory variable goes through a
13982temporary.
13983
13984   ---------- Footnotes ----------
13985
13986   (1) These restrictions are derived from those in Morgan 4.8.
13987
13988
13989File: gccint.info,  Node: Operands,  Next: Manipulating GIMPLE statements,  Prev: Temporaries,  Up: GIMPLE
13990
1399112.5 Operands
13992=============
13993
13994In general, expressions in GIMPLE consist of an operation and the
13995appropriate number of simple operands; these operands must either be a
13996GIMPLE rvalue ('is_gimple_val'), i.e. a constant or a register variable.
13997More complex operands are factored out into temporaries, so that
13998     a = b + c + d
13999 becomes
14000     T1 = b + c;
14001     a = T1 + d;
14002
14003 The same rule holds for arguments to a 'GIMPLE_CALL'.
14004
14005 The target of an assignment is usually a variable, but can also be a
14006'MEM_REF' or a compound lvalue as described below.
14007
14008* Menu:
14009
14010* Compound Expressions::
14011* Compound Lvalues::
14012* Conditional Expressions::
14013* Logical Operators::
14014
14015
14016File: gccint.info,  Node: Compound Expressions,  Next: Compound Lvalues,  Up: Operands
14017
1401812.5.1 Compound Expressions
14019---------------------------
14020
14021The left-hand side of a C comma expression is simply moved into a
14022separate statement.
14023
14024
14025File: gccint.info,  Node: Compound Lvalues,  Next: Conditional Expressions,  Prev: Compound Expressions,  Up: Operands
14026
1402712.5.2 Compound Lvalues
14028-----------------------
14029
14030Currently compound lvalues involving array and structure field
14031references are not broken down; an expression like 'a.b[2] = 42' is not
14032reduced any further (though complex array subscripts are).  This
14033restriction is a workaround for limitations in later optimizers; if we
14034were to convert this to
14035
14036     T1 = &a.b;
14037     T1[2] = 42;
14038
14039 alias analysis would not remember that the reference to 'T1[2]' came by
14040way of 'a.b', so it would think that the assignment could alias another
14041member of 'a'; this broke 'struct-alias-1.c'.  Future optimizer
14042improvements may make this limitation unnecessary.
14043
14044
14045File: gccint.info,  Node: Conditional Expressions,  Next: Logical Operators,  Prev: Compound Lvalues,  Up: Operands
14046
1404712.5.3 Conditional Expressions
14048------------------------------
14049
14050A C '?:' expression is converted into an 'if' statement with each branch
14051assigning to the same temporary.  So,
14052
14053     a = b ? c : d;
14054 becomes
14055     if (b == 1)
14056       T1 = c;
14057     else
14058       T1 = d;
14059     a = T1;
14060
14061 The GIMPLE level if-conversion pass re-introduces '?:' expression, if
14062appropriate.  It is used to vectorize loops with conditions using vector
14063conditional operations.
14064
14065 Note that in GIMPLE, 'if' statements are represented using
14066'GIMPLE_COND', as described below.
14067
14068
14069File: gccint.info,  Node: Logical Operators,  Prev: Conditional Expressions,  Up: Operands
14070
1407112.5.4 Logical Operators
14072------------------------
14073
14074Except when they appear in the condition operand of a 'GIMPLE_COND',
14075logical 'and' and 'or' operators are simplified as follows: 'a = b && c'
14076becomes
14077
14078     T1 = (bool)b;
14079     if (T1 == true)
14080       T1 = (bool)c;
14081     a = T1;
14082
14083 Note that 'T1' in this example cannot be an expression temporary,
14084because it has two different assignments.
14085
1408612.5.5 Manipulating operands
14087----------------------------
14088
14089All gimple operands are of type 'tree'.  But only certain types of trees
14090are allowed to be used as operand tuples.  Basic validation is
14091controlled by the function 'get_gimple_rhs_class', which given a tree
14092code, returns an 'enum' with the following values of type 'enum
14093gimple_rhs_class'
14094
14095   * 'GIMPLE_INVALID_RHS' The tree cannot be used as a GIMPLE operand.
14096
14097   * 'GIMPLE_TERNARY_RHS' The tree is a valid GIMPLE ternary operation.
14098
14099   * 'GIMPLE_BINARY_RHS' The tree is a valid GIMPLE binary operation.
14100
14101   * 'GIMPLE_UNARY_RHS' The tree is a valid GIMPLE unary operation.
14102
14103   * 'GIMPLE_SINGLE_RHS' The tree is a single object, that cannot be
14104     split into simpler operands (for instance, 'SSA_NAME', 'VAR_DECL',
14105     'COMPONENT_REF', etc).
14106
14107     This operand class also acts as an escape hatch for tree nodes that
14108     may be flattened out into the operand vector, but would need more
14109     than two slots on the RHS. For instance, a 'COND_EXPR' expression
14110     of the form '(a op b) ? x : y' could be flattened out on the
14111     operand vector using 4 slots, but it would also require additional
14112     processing to distinguish 'c = a op b' from 'c = a op b ? x : y'.
14113     Something similar occurs with 'ASSERT_EXPR'.  In time, these
14114     special case tree expressions should be flattened into the operand
14115     vector.
14116
14117 For tree nodes in the categories 'GIMPLE_TERNARY_RHS',
14118'GIMPLE_BINARY_RHS' and 'GIMPLE_UNARY_RHS', they cannot be stored inside
14119tuples directly.  They first need to be flattened and separated into
14120individual components.  For instance, given the GENERIC expression
14121
14122     a = b + c
14123
14124 its tree representation is:
14125
14126     MODIFY_EXPR <VAR_DECL  <a>, PLUS_EXPR <VAR_DECL <b>, VAR_DECL <c>>>
14127
14128 In this case, the GIMPLE form for this statement is logically identical
14129to its GENERIC form but in GIMPLE, the 'PLUS_EXPR' on the RHS of the
14130assignment is not represented as a tree, instead the two operands are
14131taken out of the 'PLUS_EXPR' sub-tree and flattened into the GIMPLE
14132tuple as follows:
14133
14134     GIMPLE_ASSIGN <PLUS_EXPR, VAR_DECL <a>, VAR_DECL <b>, VAR_DECL <c>>
14135
1413612.5.6 Operand vector allocation
14137--------------------------------
14138
14139The operand vector is stored at the bottom of the three tuple structures
14140that accept operands.  This means, that depending on the code of a given
14141statement, its operand vector will be at different offsets from the base
14142of the structure.  To access tuple operands use the following accessors
14143
14144 -- GIMPLE function: unsigned gimple_num_ops (gimple g)
14145     Returns the number of operands in statement G.
14146
14147 -- GIMPLE function: tree gimple_op (gimple g, unsigned i)
14148     Returns operand 'I' from statement 'G'.
14149
14150 -- GIMPLE function: tree * gimple_ops (gimple g)
14151     Returns a pointer into the operand vector for statement 'G'.  This
14152     is computed using an internal table called 'gimple_ops_offset_'[].
14153     This table is indexed by the gimple code of 'G'.
14154
14155     When the compiler is built, this table is filled-in using the sizes
14156     of the structures used by each statement code defined in
14157     gimple.def.  Since the operand vector is at the bottom of the
14158     structure, for a gimple code 'C' the offset is computed as sizeof
14159     (struct-of 'C') - sizeof (tree).
14160
14161     This mechanism adds one memory indirection to every access when
14162     using 'gimple_op'(), if this becomes a bottleneck, a pass can
14163     choose to memoize the result from 'gimple_ops'() and use that to
14164     access the operands.
14165
1416612.5.7 Operand validation
14167-------------------------
14168
14169When adding a new operand to a gimple statement, the operand will be
14170validated according to what each tuple accepts in its operand vector.
14171These predicates are called by the 'gimple_NAME_set_...()'.  Each tuple
14172will use one of the following predicates (Note, this list is not
14173exhaustive):
14174
14175 -- GIMPLE function: bool is_gimple_val (tree t)
14176     Returns true if t is a "GIMPLE value", which are all the
14177     non-addressable stack variables (variables for which
14178     'is_gimple_reg' returns true) and constants (expressions for which
14179     'is_gimple_min_invariant' returns true).
14180
14181 -- GIMPLE function: bool is_gimple_addressable (tree t)
14182     Returns true if t is a symbol or memory reference whose address can
14183     be taken.
14184
14185 -- GIMPLE function: bool is_gimple_asm_val (tree t)
14186     Similar to 'is_gimple_val' but it also accepts hard registers.
14187
14188 -- GIMPLE function: bool is_gimple_call_addr (tree t)
14189     Return true if t is a valid expression to use as the function
14190     called by a 'GIMPLE_CALL'.
14191
14192 -- GIMPLE function: bool is_gimple_mem_ref_addr (tree t)
14193     Return true if t is a valid expression to use as first operand of a
14194     'MEM_REF' expression.
14195
14196 -- GIMPLE function: bool is_gimple_constant (tree t)
14197     Return true if t is a valid gimple constant.
14198
14199 -- GIMPLE function: bool is_gimple_min_invariant (tree t)
14200     Return true if t is a valid minimal invariant.  This is different
14201     from constants, in that the specific value of t may not be known at
14202     compile time, but it is known that it doesn't change (e.g., the
14203     address of a function local variable).
14204
14205 -- GIMPLE function: bool is_gimple_ip_invariant (tree t)
14206     Return true if t is an interprocedural invariant.  This means that
14207     t is a valid invariant in all functions (e.g.  it can be an address
14208     of a global variable but not of a local one).
14209
14210 -- GIMPLE function: bool is_gimple_ip_invariant_address (tree t)
14211     Return true if t is an 'ADDR_EXPR' that does not change once the
14212     program is running (and which is valid in all functions).
14213
1421412.5.8 Statement validation
14215---------------------------
14216
14217 -- GIMPLE function: bool is_gimple_assign (gimple g)
14218     Return true if the code of g is 'GIMPLE_ASSIGN'.
14219
14220 -- GIMPLE function: bool is_gimple_call (gimple g)
14221     Return true if the code of g is 'GIMPLE_CALL'.
14222
14223 -- GIMPLE function: bool is_gimple_debug (gimple g)
14224     Return true if the code of g is 'GIMPLE_DEBUG'.
14225
14226 -- GIMPLE function: bool gimple_assign_cast_p (gimple g)
14227     Return true if g is a 'GIMPLE_ASSIGN' that performs a type cast
14228     operation.
14229
14230 -- GIMPLE function: bool gimple_debug_bind_p (gimple g)
14231     Return true if g is a 'GIMPLE_DEBUG' that binds the value of an
14232     expression to a variable.
14233
14234
14235File: gccint.info,  Node: Manipulating GIMPLE statements,  Next: Tuple specific accessors,  Prev: Operands,  Up: GIMPLE
14236
1423712.6 Manipulating GIMPLE statements
14238===================================
14239
14240This section documents all the functions available to handle each of the
14241GIMPLE instructions.
14242
1424312.6.1 Common accessors
14244-----------------------
14245
14246The following are common accessors for gimple statements.
14247
14248 -- GIMPLE function: enum gimple_code gimple_code (gimple g)
14249     Return the code for statement 'G'.
14250
14251 -- GIMPLE function: basic_block gimple_bb (gimple g)
14252     Return the basic block to which statement 'G' belongs to.
14253
14254 -- GIMPLE function: tree gimple_block (gimple g)
14255     Return the lexical scope block holding statement 'G'.
14256
14257 -- GIMPLE function: tree gimple_expr_type (gimple stmt)
14258     Return the type of the main expression computed by 'STMT'.  Return
14259     'void_type_node' if 'STMT' computes nothing.  This will only return
14260     something meaningful for 'GIMPLE_ASSIGN', 'GIMPLE_COND' and
14261     'GIMPLE_CALL'.  For all other tuple codes, it will return
14262     'void_type_node'.
14263
14264 -- GIMPLE function: enum tree_code gimple_expr_code (gimple stmt)
14265     Return the tree code for the expression computed by 'STMT'.  This
14266     is only meaningful for 'GIMPLE_CALL', 'GIMPLE_ASSIGN' and
14267     'GIMPLE_COND'.  If 'STMT' is 'GIMPLE_CALL', it will return
14268     'CALL_EXPR'.  For 'GIMPLE_COND', it returns the code of the
14269     comparison predicate.  For 'GIMPLE_ASSIGN' it returns the code of
14270     the operation performed by the 'RHS' of the assignment.
14271
14272 -- GIMPLE function: void gimple_set_block (gimple g, tree block)
14273     Set the lexical scope block of 'G' to 'BLOCK'.
14274
14275 -- GIMPLE function: location_t gimple_locus (gimple g)
14276     Return locus information for statement 'G'.
14277
14278 -- GIMPLE function: void gimple_set_locus (gimple g, location_t locus)
14279     Set locus information for statement 'G'.
14280
14281 -- GIMPLE function: bool gimple_locus_empty_p (gimple g)
14282     Return true if 'G' does not have locus information.
14283
14284 -- GIMPLE function: bool gimple_no_warning_p (gimple stmt)
14285     Return true if no warnings should be emitted for statement 'STMT'.
14286
14287 -- GIMPLE function: void gimple_set_visited (gimple stmt, bool
14288          visited_p)
14289     Set the visited status on statement 'STMT' to 'VISITED_P'.
14290
14291 -- GIMPLE function: bool gimple_visited_p (gimple stmt)
14292     Return the visited status on statement 'STMT'.
14293
14294 -- GIMPLE function: void gimple_set_plf (gimple stmt, enum plf_mask
14295          plf, bool val_p)
14296     Set pass local flag 'PLF' on statement 'STMT' to 'VAL_P'.
14297
14298 -- GIMPLE function: unsigned int gimple_plf (gimple stmt, enum plf_mask
14299          plf)
14300     Return the value of pass local flag 'PLF' on statement 'STMT'.
14301
14302 -- GIMPLE function: bool gimple_has_ops (gimple g)
14303     Return true if statement 'G' has register or memory operands.
14304
14305 -- GIMPLE function: bool gimple_has_mem_ops (gimple g)
14306     Return true if statement 'G' has memory operands.
14307
14308 -- GIMPLE function: unsigned gimple_num_ops (gimple g)
14309     Return the number of operands for statement 'G'.
14310
14311 -- GIMPLE function: tree * gimple_ops (gimple g)
14312     Return the array of operands for statement 'G'.
14313
14314 -- GIMPLE function: tree gimple_op (gimple g, unsigned i)
14315     Return operand 'I' for statement 'G'.
14316
14317 -- GIMPLE function: tree * gimple_op_ptr (gimple g, unsigned i)
14318     Return a pointer to operand 'I' for statement 'G'.
14319
14320 -- GIMPLE function: void gimple_set_op (gimple g, unsigned i, tree op)
14321     Set operand 'I' of statement 'G' to 'OP'.
14322
14323 -- GIMPLE function: bitmap gimple_addresses_taken (gimple stmt)
14324     Return the set of symbols that have had their address taken by
14325     'STMT'.
14326
14327 -- GIMPLE function: struct def_optype_d * gimple_def_ops (gimple g)
14328     Return the set of 'DEF' operands for statement 'G'.
14329
14330 -- GIMPLE function: void gimple_set_def_ops (gimple g, struct
14331          def_optype_d *def)
14332     Set 'DEF' to be the set of 'DEF' operands for statement 'G'.
14333
14334 -- GIMPLE function: struct use_optype_d * gimple_use_ops (gimple g)
14335     Return the set of 'USE' operands for statement 'G'.
14336
14337 -- GIMPLE function: void gimple_set_use_ops (gimple g, struct
14338          use_optype_d *use)
14339     Set 'USE' to be the set of 'USE' operands for statement 'G'.
14340
14341 -- GIMPLE function: struct voptype_d * gimple_vuse_ops (gimple g)
14342     Return the set of 'VUSE' operands for statement 'G'.
14343
14344 -- GIMPLE function: void gimple_set_vuse_ops (gimple g, struct
14345          voptype_d *ops)
14346     Set 'OPS' to be the set of 'VUSE' operands for statement 'G'.
14347
14348 -- GIMPLE function: struct voptype_d * gimple_vdef_ops (gimple g)
14349     Return the set of 'VDEF' operands for statement 'G'.
14350
14351 -- GIMPLE function: void gimple_set_vdef_ops (gimple g, struct
14352          voptype_d *ops)
14353     Set 'OPS' to be the set of 'VDEF' operands for statement 'G'.
14354
14355 -- GIMPLE function: bitmap gimple_loaded_syms (gimple g)
14356     Return the set of symbols loaded by statement 'G'.  Each element of
14357     the set is the 'DECL_UID' of the corresponding symbol.
14358
14359 -- GIMPLE function: bitmap gimple_stored_syms (gimple g)
14360     Return the set of symbols stored by statement 'G'.  Each element of
14361     the set is the 'DECL_UID' of the corresponding symbol.
14362
14363 -- GIMPLE function: bool gimple_modified_p (gimple g)
14364     Return true if statement 'G' has operands and the modified field
14365     has been set.
14366
14367 -- GIMPLE function: bool gimple_has_volatile_ops (gimple stmt)
14368     Return true if statement 'STMT' contains volatile operands.
14369
14370 -- GIMPLE function: void gimple_set_has_volatile_ops (gimple stmt, bool
14371          volatilep)
14372     Return true if statement 'STMT' contains volatile operands.
14373
14374 -- GIMPLE function: void update_stmt (gimple s)
14375     Mark statement 'S' as modified, and update it.
14376
14377 -- GIMPLE function: void update_stmt_if_modified (gimple s)
14378     Update statement 'S' if it has been marked modified.
14379
14380 -- GIMPLE function: gimple gimple_copy (gimple stmt)
14381     Return a deep copy of statement 'STMT'.
14382
14383
14384File: gccint.info,  Node: Tuple specific accessors,  Next: GIMPLE sequences,  Prev: Manipulating GIMPLE statements,  Up: GIMPLE
14385
1438612.7 Tuple specific accessors
14387=============================
14388
14389* Menu:
14390
14391* 'GIMPLE_ASM'::
14392* 'GIMPLE_ASSIGN'::
14393* 'GIMPLE_BIND'::
14394* 'GIMPLE_CALL'::
14395* 'GIMPLE_CATCH'::
14396* 'GIMPLE_COND'::
14397* 'GIMPLE_DEBUG'::
14398* 'GIMPLE_EH_FILTER'::
14399* 'GIMPLE_LABEL'::
14400* 'GIMPLE_NOP'::
14401* 'GIMPLE_OMP_ATOMIC_LOAD'::
14402* 'GIMPLE_OMP_ATOMIC_STORE'::
14403* 'GIMPLE_OMP_CONTINUE'::
14404* 'GIMPLE_OMP_CRITICAL'::
14405* 'GIMPLE_OMP_FOR'::
14406* 'GIMPLE_OMP_MASTER'::
14407* 'GIMPLE_OMP_ORDERED'::
14408* 'GIMPLE_OMP_PARALLEL'::
14409* 'GIMPLE_OMP_RETURN'::
14410* 'GIMPLE_OMP_SECTION'::
14411* 'GIMPLE_OMP_SECTIONS'::
14412* 'GIMPLE_OMP_SINGLE'::
14413* 'GIMPLE_PHI'::
14414* 'GIMPLE_RESX'::
14415* 'GIMPLE_RETURN'::
14416* 'GIMPLE_SWITCH'::
14417* 'GIMPLE_TRY'::
14418* 'GIMPLE_WITH_CLEANUP_EXPR'::
14419
14420
14421File: gccint.info,  Node: 'GIMPLE_ASM',  Next: 'GIMPLE_ASSIGN',  Up: Tuple specific accessors
14422
1442312.7.1 'GIMPLE_ASM'
14424-------------------
14425
14426 -- GIMPLE function: gimple gimple_build_asm (const char *string,
14427          ninputs, noutputs, nclobbers, ...)
14428     Build a 'GIMPLE_ASM' statement.  This statement is used for
14429     building in-line assembly constructs.  'STRING' is the assembly
14430     code.  'NINPUT' is the number of register inputs.  'NOUTPUT' is the
14431     number of register outputs.  'NCLOBBERS' is the number of clobbered
14432     registers.  The rest of the arguments trees for each input, output,
14433     and clobbered registers.
14434
14435 -- GIMPLE function: gimple gimple_build_asm_vec (const char *,
14436          VEC(tree,gc) *, VEC(tree,gc) *, VEC(tree,gc) *)
14437     Identical to gimple_build_asm, but the arguments are passed in
14438     VECs.
14439
14440 -- GIMPLE function: unsigned gimple_asm_ninputs (gimple g)
14441     Return the number of input operands for 'GIMPLE_ASM' 'G'.
14442
14443 -- GIMPLE function: unsigned gimple_asm_noutputs (gimple g)
14444     Return the number of output operands for 'GIMPLE_ASM' 'G'.
14445
14446 -- GIMPLE function: unsigned gimple_asm_nclobbers (gimple g)
14447     Return the number of clobber operands for 'GIMPLE_ASM' 'G'.
14448
14449 -- GIMPLE function: tree gimple_asm_input_op (gimple g, unsigned index)
14450     Return input operand 'INDEX' of 'GIMPLE_ASM' 'G'.
14451
14452 -- GIMPLE function: void gimple_asm_set_input_op (gimple g, unsigned
14453          index, tree in_op)
14454     Set 'IN_OP' to be input operand 'INDEX' in 'GIMPLE_ASM' 'G'.
14455
14456 -- GIMPLE function: tree gimple_asm_output_op (gimple g, unsigned
14457          index)
14458     Return output operand 'INDEX' of 'GIMPLE_ASM' 'G'.
14459
14460 -- GIMPLE function: void gimple_asm_set_output_op (gimple g, unsigned
14461          index, tree out_op)
14462     Set 'OUT_OP' to be output operand 'INDEX' in 'GIMPLE_ASM' 'G'.
14463
14464 -- GIMPLE function: tree gimple_asm_clobber_op (gimple g, unsigned
14465          index)
14466     Return clobber operand 'INDEX' of 'GIMPLE_ASM' 'G'.
14467
14468 -- GIMPLE function: void gimple_asm_set_clobber_op (gimple g, unsigned
14469          index, tree clobber_op)
14470     Set 'CLOBBER_OP' to be clobber operand 'INDEX' in 'GIMPLE_ASM' 'G'.
14471
14472 -- GIMPLE function: const char * gimple_asm_string (gimple g)
14473     Return the string representing the assembly instruction in
14474     'GIMPLE_ASM' 'G'.
14475
14476 -- GIMPLE function: bool gimple_asm_volatile_p (gimple g)
14477     Return true if 'G' is an asm statement marked volatile.
14478
14479 -- GIMPLE function: void gimple_asm_set_volatile (gimple g)
14480     Mark asm statement 'G' as volatile.
14481
14482 -- GIMPLE function: void gimple_asm_clear_volatile (gimple g)
14483     Remove volatile marker from asm statement 'G'.
14484
14485
14486File: gccint.info,  Node: 'GIMPLE_ASSIGN',  Next: 'GIMPLE_BIND',  Prev: 'GIMPLE_ASM',  Up: Tuple specific accessors
14487
1448812.7.2 'GIMPLE_ASSIGN'
14489----------------------
14490
14491 -- GIMPLE function: gimple gimple_build_assign (tree lhs, tree rhs)
14492     Build a 'GIMPLE_ASSIGN' statement.  The left-hand side is an lvalue
14493     passed in lhs.  The right-hand side can be either a unary or binary
14494     tree expression.  The expression tree rhs will be flattened and its
14495     operands assigned to the corresponding operand slots in the new
14496     statement.  This function is useful when you already have a tree
14497     expression that you want to convert into a tuple.  However, try to
14498     avoid building expression trees for the sole purpose of calling
14499     this function.  If you already have the operands in separate trees,
14500     it is better to use 'gimple_build_assign_with_ops'.
14501
14502 -- GIMPLE function: gimple gimplify_assign (tree dst, tree src,
14503          gimple_seq *seq_p)
14504     Build a new 'GIMPLE_ASSIGN' tuple and append it to the end of
14505     '*SEQ_P'.
14506
14507 'DST'/'SRC' are the destination and source respectively.  You can pass
14508ungimplified trees in 'DST' or 'SRC', in which case they will be
14509converted to a gimple operand if necessary.
14510
14511 This function returns the newly created 'GIMPLE_ASSIGN' tuple.
14512
14513 -- GIMPLE function: gimple gimple_build_assign_with_ops (enum tree_code
14514          subcode, tree lhs, tree op1, tree op2)
14515     This function is similar to 'gimple_build_assign', but is used to
14516     build a 'GIMPLE_ASSIGN' statement when the operands of the
14517     right-hand side of the assignment are already split into different
14518     operands.
14519
14520     The left-hand side is an lvalue passed in lhs.  Subcode is the
14521     'tree_code' for the right-hand side of the assignment.  Op1 and op2
14522     are the operands.  If op2 is null, subcode must be a 'tree_code'
14523     for a unary expression.
14524
14525 -- GIMPLE function: enum tree_code gimple_assign_rhs_code (gimple g)
14526     Return the code of the expression computed on the 'RHS' of
14527     assignment statement 'G'.
14528
14529 -- GIMPLE function: enum gimple_rhs_class gimple_assign_rhs_class
14530          (gimple g)
14531     Return the gimple rhs class of the code for the expression computed
14532     on the rhs of assignment statement 'G'.  This will never return
14533     'GIMPLE_INVALID_RHS'.
14534
14535 -- GIMPLE function: tree gimple_assign_lhs (gimple g)
14536     Return the 'LHS' of assignment statement 'G'.
14537
14538 -- GIMPLE function: tree * gimple_assign_lhs_ptr (gimple g)
14539     Return a pointer to the 'LHS' of assignment statement 'G'.
14540
14541 -- GIMPLE function: tree gimple_assign_rhs1 (gimple g)
14542     Return the first operand on the 'RHS' of assignment statement 'G'.
14543
14544 -- GIMPLE function: tree * gimple_assign_rhs1_ptr (gimple g)
14545     Return the address of the first operand on the 'RHS' of assignment
14546     statement 'G'.
14547
14548 -- GIMPLE function: tree gimple_assign_rhs2 (gimple g)
14549     Return the second operand on the 'RHS' of assignment statement 'G'.
14550
14551 -- GIMPLE function: tree * gimple_assign_rhs2_ptr (gimple g)
14552     Return the address of the second operand on the 'RHS' of assignment
14553     statement 'G'.
14554
14555 -- GIMPLE function: tree gimple_assign_rhs3 (gimple g)
14556     Return the third operand on the 'RHS' of assignment statement 'G'.
14557
14558 -- GIMPLE function: tree * gimple_assign_rhs3_ptr (gimple g)
14559     Return the address of the third operand on the 'RHS' of assignment
14560     statement 'G'.
14561
14562 -- GIMPLE function: void gimple_assign_set_lhs (gimple g, tree lhs)
14563     Set 'LHS' to be the 'LHS' operand of assignment statement 'G'.
14564
14565 -- GIMPLE function: void gimple_assign_set_rhs1 (gimple g, tree rhs)
14566     Set 'RHS' to be the first operand on the 'RHS' of assignment
14567     statement 'G'.
14568
14569 -- GIMPLE function: void gimple_assign_set_rhs2 (gimple g, tree rhs)
14570     Set 'RHS' to be the second operand on the 'RHS' of assignment
14571     statement 'G'.
14572
14573 -- GIMPLE function: void gimple_assign_set_rhs3 (gimple g, tree rhs)
14574     Set 'RHS' to be the third operand on the 'RHS' of assignment
14575     statement 'G'.
14576
14577 -- GIMPLE function: bool gimple_assign_cast_p (gimple s)
14578     Return true if 'S' is a type-cast assignment.
14579
14580
14581File: gccint.info,  Node: 'GIMPLE_BIND',  Next: 'GIMPLE_CALL',  Prev: 'GIMPLE_ASSIGN',  Up: Tuple specific accessors
14582
1458312.7.3 'GIMPLE_BIND'
14584--------------------
14585
14586 -- GIMPLE function: gimple gimple_build_bind (tree vars, gimple_seq
14587          body)
14588     Build a 'GIMPLE_BIND' statement with a list of variables in 'VARS'
14589     and a body of statements in sequence 'BODY'.
14590
14591 -- GIMPLE function: tree gimple_bind_vars (gimple g)
14592     Return the variables declared in the 'GIMPLE_BIND' statement 'G'.
14593
14594 -- GIMPLE function: void gimple_bind_set_vars (gimple g, tree vars)
14595     Set 'VARS' to be the set of variables declared in the 'GIMPLE_BIND'
14596     statement 'G'.
14597
14598 -- GIMPLE function: void gimple_bind_append_vars (gimple g, tree vars)
14599     Append 'VARS' to the set of variables declared in the 'GIMPLE_BIND'
14600     statement 'G'.
14601
14602 -- GIMPLE function: gimple_seq gimple_bind_body (gimple g)
14603     Return the GIMPLE sequence contained in the 'GIMPLE_BIND' statement
14604     'G'.
14605
14606 -- GIMPLE function: void gimple_bind_set_body (gimple g, gimple_seq
14607          seq)
14608     Set 'SEQ' to be sequence contained in the 'GIMPLE_BIND' statement
14609     'G'.
14610
14611 -- GIMPLE function: void gimple_bind_add_stmt (gimple gs, gimple stmt)
14612     Append a statement to the end of a 'GIMPLE_BIND''s body.
14613
14614 -- GIMPLE function: void gimple_bind_add_seq (gimple gs, gimple_seq
14615          seq)
14616     Append a sequence of statements to the end of a 'GIMPLE_BIND''s
14617     body.
14618
14619 -- GIMPLE function: tree gimple_bind_block (gimple g)
14620     Return the 'TREE_BLOCK' node associated with 'GIMPLE_BIND'
14621     statement 'G'.  This is analogous to the 'BIND_EXPR_BLOCK' field in
14622     trees.
14623
14624 -- GIMPLE function: void gimple_bind_set_block (gimple g, tree block)
14625     Set 'BLOCK' to be the 'TREE_BLOCK' node associated with
14626     'GIMPLE_BIND' statement 'G'.
14627
14628
14629File: gccint.info,  Node: 'GIMPLE_CALL',  Next: 'GIMPLE_CATCH',  Prev: 'GIMPLE_BIND',  Up: Tuple specific accessors
14630
1463112.7.4 'GIMPLE_CALL'
14632--------------------
14633
14634 -- GIMPLE function: gimple gimple_build_call (tree fn, unsigned nargs,
14635          ...)
14636     Build a 'GIMPLE_CALL' statement to function 'FN'.  The argument
14637     'FN' must be either a 'FUNCTION_DECL' or a gimple call address as
14638     determined by 'is_gimple_call_addr'.  'NARGS' are the number of
14639     arguments.  The rest of the arguments follow the argument 'NARGS',
14640     and must be trees that are valid as rvalues in gimple (i.e., each
14641     operand is validated with 'is_gimple_operand').
14642
14643 -- GIMPLE function: gimple gimple_build_call_from_tree (tree call_expr)
14644     Build a 'GIMPLE_CALL' from a 'CALL_EXPR' node.  The arguments and
14645     the function are taken from the expression directly.  This routine
14646     assumes that 'call_expr' is already in GIMPLE form.  That is, its
14647     operands are GIMPLE values and the function call needs no further
14648     simplification.  All the call flags in 'call_expr' are copied over
14649     to the new 'GIMPLE_CALL'.
14650
14651 -- GIMPLE function: gimple gimple_build_call_vec (tree fn, 'VEC'(tree,
14652          heap) *args)
14653     Identical to 'gimple_build_call' but the arguments are stored in a
14654     'VEC'().
14655
14656 -- GIMPLE function: tree gimple_call_lhs (gimple g)
14657     Return the 'LHS' of call statement 'G'.
14658
14659 -- GIMPLE function: tree * gimple_call_lhs_ptr (gimple g)
14660     Return a pointer to the 'LHS' of call statement 'G'.
14661
14662 -- GIMPLE function: void gimple_call_set_lhs (gimple g, tree lhs)
14663     Set 'LHS' to be the 'LHS' operand of call statement 'G'.
14664
14665 -- GIMPLE function: tree gimple_call_fn (gimple g)
14666     Return the tree node representing the function called by call
14667     statement 'G'.
14668
14669 -- GIMPLE function: void gimple_call_set_fn (gimple g, tree fn)
14670     Set 'FN' to be the function called by call statement 'G'.  This has
14671     to be a gimple value specifying the address of the called function.
14672
14673 -- GIMPLE function: tree gimple_call_fndecl (gimple g)
14674     If a given 'GIMPLE_CALL''s callee is a 'FUNCTION_DECL', return it.
14675     Otherwise return 'NULL'.  This function is analogous to
14676     'get_callee_fndecl' in 'GENERIC'.
14677
14678 -- GIMPLE function: tree gimple_call_set_fndecl (gimple g, tree fndecl)
14679     Set the called function to 'FNDECL'.
14680
14681 -- GIMPLE function: tree gimple_call_return_type (gimple g)
14682     Return the type returned by call statement 'G'.
14683
14684 -- GIMPLE function: tree gimple_call_chain (gimple g)
14685     Return the static chain for call statement 'G'.
14686
14687 -- GIMPLE function: void gimple_call_set_chain (gimple g, tree chain)
14688     Set 'CHAIN' to be the static chain for call statement 'G'.
14689
14690 -- GIMPLE function: unsigned gimple_call_num_args (gimple g)
14691     Return the number of arguments used by call statement 'G'.
14692
14693 -- GIMPLE function: tree gimple_call_arg (gimple g, unsigned index)
14694     Return the argument at position 'INDEX' for call statement 'G'.
14695     The first argument is 0.
14696
14697 -- GIMPLE function: tree * gimple_call_arg_ptr (gimple g, unsigned
14698          index)
14699     Return a pointer to the argument at position 'INDEX' for call
14700     statement 'G'.
14701
14702 -- GIMPLE function: void gimple_call_set_arg (gimple g, unsigned index,
14703          tree arg)
14704     Set 'ARG' to be the argument at position 'INDEX' for call statement
14705     'G'.
14706
14707 -- GIMPLE function: void gimple_call_set_tail (gimple s)
14708     Mark call statement 'S' as being a tail call (i.e., a call just
14709     before the exit of a function).  These calls are candidate for tail
14710     call optimization.
14711
14712 -- GIMPLE function: bool gimple_call_tail_p (gimple s)
14713     Return true if 'GIMPLE_CALL' 'S' is marked as a tail call.
14714
14715 -- GIMPLE function: void gimple_call_mark_uninlinable (gimple s)
14716     Mark 'GIMPLE_CALL' 'S' as being uninlinable.
14717
14718 -- GIMPLE function: bool gimple_call_cannot_inline_p (gimple s)
14719     Return true if 'GIMPLE_CALL' 'S' cannot be inlined.
14720
14721 -- GIMPLE function: bool gimple_call_noreturn_p (gimple s)
14722     Return true if 'S' is a noreturn call.
14723
14724 -- GIMPLE function: gimple gimple_call_copy_skip_args (gimple stmt,
14725          bitmap args_to_skip)
14726     Build a 'GIMPLE_CALL' identical to 'STMT' but skipping the
14727     arguments in the positions marked by the set 'ARGS_TO_SKIP'.
14728
14729
14730File: gccint.info,  Node: 'GIMPLE_CATCH',  Next: 'GIMPLE_COND',  Prev: 'GIMPLE_CALL',  Up: Tuple specific accessors
14731
1473212.7.5 'GIMPLE_CATCH'
14733---------------------
14734
14735 -- GIMPLE function: gimple gimple_build_catch (tree types, gimple_seq
14736          handler)
14737     Build a 'GIMPLE_CATCH' statement.  'TYPES' are the tree types this
14738     catch handles.  'HANDLER' is a sequence of statements with the code
14739     for the handler.
14740
14741 -- GIMPLE function: tree gimple_catch_types (gimple g)
14742     Return the types handled by 'GIMPLE_CATCH' statement 'G'.
14743
14744 -- GIMPLE function: tree * gimple_catch_types_ptr (gimple g)
14745     Return a pointer to the types handled by 'GIMPLE_CATCH' statement
14746     'G'.
14747
14748 -- GIMPLE function: gimple_seq gimple_catch_handler (gimple g)
14749     Return the GIMPLE sequence representing the body of the handler of
14750     'GIMPLE_CATCH' statement 'G'.
14751
14752 -- GIMPLE function: void gimple_catch_set_types (gimple g, tree t)
14753     Set 'T' to be the set of types handled by 'GIMPLE_CATCH' 'G'.
14754
14755 -- GIMPLE function: void gimple_catch_set_handler (gimple g, gimple_seq
14756          handler)
14757     Set 'HANDLER' to be the body of 'GIMPLE_CATCH' 'G'.
14758
14759
14760File: gccint.info,  Node: 'GIMPLE_COND',  Next: 'GIMPLE_DEBUG',  Prev: 'GIMPLE_CATCH',  Up: Tuple specific accessors
14761
1476212.7.6 'GIMPLE_COND'
14763--------------------
14764
14765 -- GIMPLE function: gimple gimple_build_cond (enum tree_code pred_code,
14766          tree lhs, tree rhs, tree t_label, tree f_label)
14767     Build a 'GIMPLE_COND' statement.  'A' 'GIMPLE_COND' statement
14768     compares 'LHS' and 'RHS' and if the condition in 'PRED_CODE' is
14769     true, jump to the label in 't_label', otherwise jump to the label
14770     in 'f_label'.  'PRED_CODE' are relational operator tree codes like
14771     'EQ_EXPR', 'LT_EXPR', 'LE_EXPR', 'NE_EXPR', etc.
14772
14773 -- GIMPLE function: gimple gimple_build_cond_from_tree (tree cond, tree
14774          t_label, tree f_label)
14775     Build a 'GIMPLE_COND' statement from the conditional expression
14776     tree 'COND'.  'T_LABEL' and 'F_LABEL' are as in
14777     'gimple_build_cond'.
14778
14779 -- GIMPLE function: enum tree_code gimple_cond_code (gimple g)
14780     Return the code of the predicate computed by conditional statement
14781     'G'.
14782
14783 -- GIMPLE function: void gimple_cond_set_code (gimple g, enum tree_code
14784          code)
14785     Set 'CODE' to be the predicate code for the conditional statement
14786     'G'.
14787
14788 -- GIMPLE function: tree gimple_cond_lhs (gimple g)
14789     Return the 'LHS' of the predicate computed by conditional statement
14790     'G'.
14791
14792 -- GIMPLE function: void gimple_cond_set_lhs (gimple g, tree lhs)
14793     Set 'LHS' to be the 'LHS' operand of the predicate computed by
14794     conditional statement 'G'.
14795
14796 -- GIMPLE function: tree gimple_cond_rhs (gimple g)
14797     Return the 'RHS' operand of the predicate computed by conditional
14798     'G'.
14799
14800 -- GIMPLE function: void gimple_cond_set_rhs (gimple g, tree rhs)
14801     Set 'RHS' to be the 'RHS' operand of the predicate computed by
14802     conditional statement 'G'.
14803
14804 -- GIMPLE function: tree gimple_cond_true_label (gimple g)
14805     Return the label used by conditional statement 'G' when its
14806     predicate evaluates to true.
14807
14808 -- GIMPLE function: void gimple_cond_set_true_label (gimple g, tree
14809          label)
14810     Set 'LABEL' to be the label used by conditional statement 'G' when
14811     its predicate evaluates to true.
14812
14813 -- GIMPLE function: void gimple_cond_set_false_label (gimple g, tree
14814          label)
14815     Set 'LABEL' to be the label used by conditional statement 'G' when
14816     its predicate evaluates to false.
14817
14818 -- GIMPLE function: tree gimple_cond_false_label (gimple g)
14819     Return the label used by conditional statement 'G' when its
14820     predicate evaluates to false.
14821
14822 -- GIMPLE function: void gimple_cond_make_false (gimple g)
14823     Set the conditional 'COND_STMT' to be of the form 'if (1 == 0)'.
14824
14825 -- GIMPLE function: void gimple_cond_make_true (gimple g)
14826     Set the conditional 'COND_STMT' to be of the form 'if (1 == 1)'.
14827
14828
14829File: gccint.info,  Node: 'GIMPLE_DEBUG',  Next: 'GIMPLE_EH_FILTER',  Prev: 'GIMPLE_COND',  Up: Tuple specific accessors
14830
1483112.7.7 'GIMPLE_DEBUG'
14832---------------------
14833
14834 -- GIMPLE function: gimple gimple_build_debug_bind (tree var, tree
14835          value, gimple stmt)
14836     Build a 'GIMPLE_DEBUG' statement with 'GIMPLE_DEBUG_BIND' of
14837     'subcode'.  The effect of this statement is to tell debug
14838     information generation machinery that the value of user variable
14839     'var' is given by 'value' at that point, and to remain with that
14840     value until 'var' runs out of scope, a dynamically-subsequent debug
14841     bind statement overrides the binding, or conflicting values reach a
14842     control flow merge point.  Even if components of the 'value'
14843     expression change afterwards, the variable is supposed to retain
14844     the same value, though not necessarily the same location.
14845
14846     It is expected that 'var' be most often a tree for automatic user
14847     variables ('VAR_DECL' or 'PARM_DECL') that satisfy the requirements
14848     for gimple registers, but it may also be a tree for a scalarized
14849     component of a user variable ('ARRAY_REF', 'COMPONENT_REF'), or a
14850     debug temporary ('DEBUG_EXPR_DECL').
14851
14852     As for 'value', it can be an arbitrary tree expression, but it is
14853     recommended that it be in a suitable form for a gimple assignment
14854     'RHS'.  It is not expected that user variables that could appear as
14855     'var' ever appear in 'value', because in the latter we'd have their
14856     'SSA_NAME's instead, but even if they were not in SSA form, user
14857     variables appearing in 'value' are to be regarded as part of the
14858     executable code space, whereas those in 'var' are to be regarded as
14859     part of the source code space.  There is no way to refer to the
14860     value bound to a user variable within a 'value' expression.
14861
14862     If 'value' is 'GIMPLE_DEBUG_BIND_NOVALUE', debug information
14863     generation machinery is informed that the variable 'var' is
14864     unbound, i.e., that its value is indeterminate, which sometimes
14865     means it is really unavailable, and other times that the compiler
14866     could not keep track of it.
14867
14868     Block and location information for the newly-created stmt are taken
14869     from 'stmt', if given.
14870
14871 -- GIMPLE function: tree gimple_debug_bind_get_var (gimple stmt)
14872     Return the user variable VAR that is bound at 'stmt'.
14873
14874 -- GIMPLE function: tree gimple_debug_bind_get_value (gimple stmt)
14875     Return the value expression that is bound to a user variable at
14876     'stmt'.
14877
14878 -- GIMPLE function: tree * gimple_debug_bind_get_value_ptr (gimple
14879          stmt)
14880     Return a pointer to the value expression that is bound to a user
14881     variable at 'stmt'.
14882
14883 -- GIMPLE function: void gimple_debug_bind_set_var (gimple stmt, tree
14884          var)
14885     Modify the user variable bound at 'stmt' to VAR.
14886
14887 -- GIMPLE function: void gimple_debug_bind_set_value (gimple stmt, tree
14888          var)
14889     Modify the value bound to the user variable bound at 'stmt' to
14890     VALUE.
14891
14892 -- GIMPLE function: void gimple_debug_bind_reset_value (gimple stmt)
14893     Modify the value bound to the user variable bound at 'stmt' so that
14894     the variable becomes unbound.
14895
14896 -- GIMPLE function: bool gimple_debug_bind_has_value_p (gimple stmt)
14897     Return 'TRUE' if 'stmt' binds a user variable to a value, and
14898     'FALSE' if it unbinds the variable.
14899
14900
14901File: gccint.info,  Node: 'GIMPLE_EH_FILTER',  Next: 'GIMPLE_LABEL',  Prev: 'GIMPLE_DEBUG',  Up: Tuple specific accessors
14902
1490312.7.8 'GIMPLE_EH_FILTER'
14904-------------------------
14905
14906 -- GIMPLE function: gimple gimple_build_eh_filter (tree types,
14907          gimple_seq failure)
14908     Build a 'GIMPLE_EH_FILTER' statement.  'TYPES' are the filter's
14909     types.  'FAILURE' is a sequence with the filter's failure action.
14910
14911 -- GIMPLE function: tree gimple_eh_filter_types (gimple g)
14912     Return the types handled by 'GIMPLE_EH_FILTER' statement 'G'.
14913
14914 -- GIMPLE function: tree * gimple_eh_filter_types_ptr (gimple g)
14915     Return a pointer to the types handled by 'GIMPLE_EH_FILTER'
14916     statement 'G'.
14917
14918 -- GIMPLE function: gimple_seq gimple_eh_filter_failure (gimple g)
14919     Return the sequence of statement to execute when 'GIMPLE_EH_FILTER'
14920     statement fails.
14921
14922 -- GIMPLE function: void gimple_eh_filter_set_types (gimple g, tree
14923          types)
14924     Set 'TYPES' to be the set of types handled by 'GIMPLE_EH_FILTER'
14925     'G'.
14926
14927 -- GIMPLE function: void gimple_eh_filter_set_failure (gimple g,
14928          gimple_seq failure)
14929     Set 'FAILURE' to be the sequence of statements to execute on
14930     failure for 'GIMPLE_EH_FILTER' 'G'.
14931
14932 -- GIMPLE function: bool gimple_eh_filter_must_not_throw (gimple g)
14933     Return the 'EH_FILTER_MUST_NOT_THROW' flag.
14934
14935 -- GIMPLE function: void gimple_eh_filter_set_must_not_throw (gimple g,
14936          bool mntp)
14937     Set the 'EH_FILTER_MUST_NOT_THROW' flag.
14938
14939
14940File: gccint.info,  Node: 'GIMPLE_LABEL',  Next: 'GIMPLE_NOP',  Prev: 'GIMPLE_EH_FILTER',  Up: Tuple specific accessors
14941
1494212.7.9 'GIMPLE_LABEL'
14943---------------------
14944
14945 -- GIMPLE function: gimple gimple_build_label (tree label)
14946     Build a 'GIMPLE_LABEL' statement with corresponding to the tree
14947     label, 'LABEL'.
14948
14949 -- GIMPLE function: tree gimple_label_label (gimple g)
14950     Return the 'LABEL_DECL' node used by 'GIMPLE_LABEL' statement 'G'.
14951
14952 -- GIMPLE function: void gimple_label_set_label (gimple g, tree label)
14953     Set 'LABEL' to be the 'LABEL_DECL' node used by 'GIMPLE_LABEL'
14954     statement 'G'.
14955
14956 -- GIMPLE function: gimple gimple_build_goto (tree dest)
14957     Build a 'GIMPLE_GOTO' statement to label 'DEST'.
14958
14959 -- GIMPLE function: tree gimple_goto_dest (gimple g)
14960     Return the destination of the unconditional jump 'G'.
14961
14962 -- GIMPLE function: void gimple_goto_set_dest (gimple g, tree dest)
14963     Set 'DEST' to be the destination of the unconditional jump 'G'.
14964
14965
14966File: gccint.info,  Node: 'GIMPLE_NOP',  Next: 'GIMPLE_OMP_ATOMIC_LOAD',  Prev: 'GIMPLE_LABEL',  Up: Tuple specific accessors
14967
1496812.7.10 'GIMPLE_NOP'
14969--------------------
14970
14971 -- GIMPLE function: gimple gimple_build_nop (void)
14972     Build a 'GIMPLE_NOP' statement.
14973
14974 -- GIMPLE function: bool gimple_nop_p (gimple g)
14975     Returns 'TRUE' if statement 'G' is a 'GIMPLE_NOP'.
14976
14977
14978File: gccint.info,  Node: 'GIMPLE_OMP_ATOMIC_LOAD',  Next: 'GIMPLE_OMP_ATOMIC_STORE',  Prev: 'GIMPLE_NOP',  Up: Tuple specific accessors
14979
1498012.7.11 'GIMPLE_OMP_ATOMIC_LOAD'
14981--------------------------------
14982
14983 -- GIMPLE function: gimple gimple_build_omp_atomic_load (tree lhs, tree
14984          rhs)
14985     Build a 'GIMPLE_OMP_ATOMIC_LOAD' statement.  'LHS' is the left-hand
14986     side of the assignment.  'RHS' is the right-hand side of the
14987     assignment.
14988
14989 -- GIMPLE function: void gimple_omp_atomic_load_set_lhs (gimple g, tree
14990          lhs)
14991     Set the 'LHS' of an atomic load.
14992
14993 -- GIMPLE function: tree gimple_omp_atomic_load_lhs (gimple g)
14994     Get the 'LHS' of an atomic load.
14995
14996 -- GIMPLE function: void gimple_omp_atomic_load_set_rhs (gimple g, tree
14997          rhs)
14998     Set the 'RHS' of an atomic set.
14999
15000 -- GIMPLE function: tree gimple_omp_atomic_load_rhs (gimple g)
15001     Get the 'RHS' of an atomic set.
15002
15003
15004File: gccint.info,  Node: 'GIMPLE_OMP_ATOMIC_STORE',  Next: 'GIMPLE_OMP_CONTINUE',  Prev: 'GIMPLE_OMP_ATOMIC_LOAD',  Up: Tuple specific accessors
15005
1500612.7.12 'GIMPLE_OMP_ATOMIC_STORE'
15007---------------------------------
15008
15009 -- GIMPLE function: gimple gimple_build_omp_atomic_store (tree val)
15010     Build a 'GIMPLE_OMP_ATOMIC_STORE' statement.  'VAL' is the value to
15011     be stored.
15012
15013 -- GIMPLE function: void gimple_omp_atomic_store_set_val (gimple g,
15014          tree val)
15015     Set the value being stored in an atomic store.
15016
15017 -- GIMPLE function: tree gimple_omp_atomic_store_val (gimple g)
15018     Return the value being stored in an atomic store.
15019
15020
15021File: gccint.info,  Node: 'GIMPLE_OMP_CONTINUE',  Next: 'GIMPLE_OMP_CRITICAL',  Prev: 'GIMPLE_OMP_ATOMIC_STORE',  Up: Tuple specific accessors
15022
1502312.7.13 'GIMPLE_OMP_CONTINUE'
15024-----------------------------
15025
15026 -- GIMPLE function: gimple gimple_build_omp_continue (tree control_def,
15027          tree control_use)
15028     Build a 'GIMPLE_OMP_CONTINUE' statement.  'CONTROL_DEF' is the
15029     definition of the control variable.  'CONTROL_USE' is the use of
15030     the control variable.
15031
15032 -- GIMPLE function: tree gimple_omp_continue_control_def (gimple s)
15033     Return the definition of the control variable on a
15034     'GIMPLE_OMP_CONTINUE' in 'S'.
15035
15036 -- GIMPLE function: tree gimple_omp_continue_control_def_ptr (gimple s)
15037     Same as above, but return the pointer.
15038
15039 -- GIMPLE function: tree gimple_omp_continue_set_control_def (gimple s)
15040     Set the control variable definition for a 'GIMPLE_OMP_CONTINUE'
15041     statement in 'S'.
15042
15043 -- GIMPLE function: tree gimple_omp_continue_control_use (gimple s)
15044     Return the use of the control variable on a 'GIMPLE_OMP_CONTINUE'
15045     in 'S'.
15046
15047 -- GIMPLE function: tree gimple_omp_continue_control_use_ptr (gimple s)
15048     Same as above, but return the pointer.
15049
15050 -- GIMPLE function: tree gimple_omp_continue_set_control_use (gimple s)
15051     Set the control variable use for a 'GIMPLE_OMP_CONTINUE' statement
15052     in 'S'.
15053
15054
15055File: gccint.info,  Node: 'GIMPLE_OMP_CRITICAL',  Next: 'GIMPLE_OMP_FOR',  Prev: 'GIMPLE_OMP_CONTINUE',  Up: Tuple specific accessors
15056
1505712.7.14 'GIMPLE_OMP_CRITICAL'
15058-----------------------------
15059
15060 -- GIMPLE function: gimple gimple_build_omp_critical (gimple_seq body,
15061          tree name)
15062     Build a 'GIMPLE_OMP_CRITICAL' statement.  'BODY' is the sequence of
15063     statements for which only one thread can execute.  'NAME' is an
15064     optional identifier for this critical block.
15065
15066 -- GIMPLE function: tree gimple_omp_critical_name (gimple g)
15067     Return the name associated with 'OMP_CRITICAL' statement 'G'.
15068
15069 -- GIMPLE function: tree * gimple_omp_critical_name_ptr (gimple g)
15070     Return a pointer to the name associated with 'OMP' critical
15071     statement 'G'.
15072
15073 -- GIMPLE function: void gimple_omp_critical_set_name (gimple g, tree
15074          name)
15075     Set 'NAME' to be the name associated with 'OMP' critical statement
15076     'G'.
15077
15078
15079File: gccint.info,  Node: 'GIMPLE_OMP_FOR',  Next: 'GIMPLE_OMP_MASTER',  Prev: 'GIMPLE_OMP_CRITICAL',  Up: Tuple specific accessors
15080
1508112.7.15 'GIMPLE_OMP_FOR'
15082------------------------
15083
15084 -- GIMPLE function: gimple gimple_build_omp_for (gimple_seq body, tree
15085          clauses, tree index, tree initial, tree final, tree incr,
15086          gimple_seq pre_body, enum tree_code omp_for_cond)
15087     Build a 'GIMPLE_OMP_FOR' statement.  'BODY' is sequence of
15088     statements inside the for loop.  'CLAUSES', are any of the 'OMP'
15089     loop construct's clauses: private, firstprivate, lastprivate,
15090     reductions, ordered, schedule, and nowait.  'PRE_BODY' is the
15091     sequence of statements that are loop invariant.  'INDEX' is the
15092     index variable.  'INITIAL' is the initial value of 'INDEX'.
15093     'FINAL' is final value of 'INDEX'.  OMP_FOR_COND is the predicate
15094     used to compare 'INDEX' and 'FINAL'.  'INCR' is the increment
15095     expression.
15096
15097 -- GIMPLE function: tree gimple_omp_for_clauses (gimple g)
15098     Return the clauses associated with 'OMP_FOR' 'G'.
15099
15100 -- GIMPLE function: tree * gimple_omp_for_clauses_ptr (gimple g)
15101     Return a pointer to the 'OMP_FOR' 'G'.
15102
15103 -- GIMPLE function: void gimple_omp_for_set_clauses (gimple g, tree
15104          clauses)
15105     Set 'CLAUSES' to be the list of clauses associated with 'OMP_FOR'
15106     'G'.
15107
15108 -- GIMPLE function: tree gimple_omp_for_index (gimple g)
15109     Return the index variable for 'OMP_FOR' 'G'.
15110
15111 -- GIMPLE function: tree * gimple_omp_for_index_ptr (gimple g)
15112     Return a pointer to the index variable for 'OMP_FOR' 'G'.
15113
15114 -- GIMPLE function: void gimple_omp_for_set_index (gimple g, tree
15115          index)
15116     Set 'INDEX' to be the index variable for 'OMP_FOR' 'G'.
15117
15118 -- GIMPLE function: tree gimple_omp_for_initial (gimple g)
15119     Return the initial value for 'OMP_FOR' 'G'.
15120
15121 -- GIMPLE function: tree * gimple_omp_for_initial_ptr (gimple g)
15122     Return a pointer to the initial value for 'OMP_FOR' 'G'.
15123
15124 -- GIMPLE function: void gimple_omp_for_set_initial (gimple g, tree
15125          initial)
15126     Set 'INITIAL' to be the initial value for 'OMP_FOR' 'G'.
15127
15128 -- GIMPLE function: tree gimple_omp_for_final (gimple g)
15129     Return the final value for 'OMP_FOR' 'G'.
15130
15131 -- GIMPLE function: tree * gimple_omp_for_final_ptr (gimple g)
15132     turn a pointer to the final value for 'OMP_FOR' 'G'.
15133
15134 -- GIMPLE function: void gimple_omp_for_set_final (gimple g, tree
15135          final)
15136     Set 'FINAL' to be the final value for 'OMP_FOR' 'G'.
15137
15138 -- GIMPLE function: tree gimple_omp_for_incr (gimple g)
15139     Return the increment value for 'OMP_FOR' 'G'.
15140
15141 -- GIMPLE function: tree * gimple_omp_for_incr_ptr (gimple g)
15142     Return a pointer to the increment value for 'OMP_FOR' 'G'.
15143
15144 -- GIMPLE function: void gimple_omp_for_set_incr (gimple g, tree incr)
15145     Set 'INCR' to be the increment value for 'OMP_FOR' 'G'.
15146
15147 -- GIMPLE function: gimple_seq gimple_omp_for_pre_body (gimple g)
15148     Return the sequence of statements to execute before the 'OMP_FOR'
15149     statement 'G' starts.
15150
15151 -- GIMPLE function: void gimple_omp_for_set_pre_body (gimple g,
15152          gimple_seq pre_body)
15153     Set 'PRE_BODY' to be the sequence of statements to execute before
15154     the 'OMP_FOR' statement 'G' starts.
15155
15156 -- GIMPLE function: void gimple_omp_for_set_cond (gimple g, enum
15157          tree_code cond)
15158     Set 'COND' to be the condition code for 'OMP_FOR' 'G'.
15159
15160 -- GIMPLE function: enum tree_code gimple_omp_for_cond (gimple g)
15161     Return the condition code associated with 'OMP_FOR' 'G'.
15162
15163
15164File: gccint.info,  Node: 'GIMPLE_OMP_MASTER',  Next: 'GIMPLE_OMP_ORDERED',  Prev: 'GIMPLE_OMP_FOR',  Up: Tuple specific accessors
15165
1516612.7.16 'GIMPLE_OMP_MASTER'
15167---------------------------
15168
15169 -- GIMPLE function: gimple gimple_build_omp_master (gimple_seq body)
15170     Build a 'GIMPLE_OMP_MASTER' statement.  'BODY' is the sequence of
15171     statements to be executed by just the master.
15172
15173
15174File: gccint.info,  Node: 'GIMPLE_OMP_ORDERED',  Next: 'GIMPLE_OMP_PARALLEL',  Prev: 'GIMPLE_OMP_MASTER',  Up: Tuple specific accessors
15175
1517612.7.17 'GIMPLE_OMP_ORDERED'
15177----------------------------
15178
15179 -- GIMPLE function: gimple gimple_build_omp_ordered (gimple_seq body)
15180     Build a 'GIMPLE_OMP_ORDERED' statement.
15181
15182 'BODY' is the sequence of statements inside a loop that will executed
15183in sequence.
15184
15185
15186File: gccint.info,  Node: 'GIMPLE_OMP_PARALLEL',  Next: 'GIMPLE_OMP_RETURN',  Prev: 'GIMPLE_OMP_ORDERED',  Up: Tuple specific accessors
15187
1518812.7.18 'GIMPLE_OMP_PARALLEL'
15189-----------------------------
15190
15191 -- GIMPLE function: gimple gimple_build_omp_parallel (gimple_seq body,
15192          tree clauses, tree child_fn, tree data_arg)
15193     Build a 'GIMPLE_OMP_PARALLEL' statement.
15194
15195 'BODY' is sequence of statements which are executed in parallel.
15196'CLAUSES', are the 'OMP' parallel construct's clauses.  'CHILD_FN' is
15197the function created for the parallel threads to execute.  'DATA_ARG'
15198are the shared data argument(s).
15199
15200 -- GIMPLE function: bool gimple_omp_parallel_combined_p (gimple g)
15201     Return true if 'OMP' parallel statement 'G' has the
15202     'GF_OMP_PARALLEL_COMBINED' flag set.
15203
15204 -- GIMPLE function: void gimple_omp_parallel_set_combined_p (gimple g)
15205     Set the 'GF_OMP_PARALLEL_COMBINED' field in 'OMP' parallel
15206     statement 'G'.
15207
15208 -- GIMPLE function: gimple_seq gimple_omp_body (gimple g)
15209     Return the body for the 'OMP' statement 'G'.
15210
15211 -- GIMPLE function: void gimple_omp_set_body (gimple g, gimple_seq
15212          body)
15213     Set 'BODY' to be the body for the 'OMP' statement 'G'.
15214
15215 -- GIMPLE function: tree gimple_omp_parallel_clauses (gimple g)
15216     Return the clauses associated with 'OMP_PARALLEL' 'G'.
15217
15218 -- GIMPLE function: tree * gimple_omp_parallel_clauses_ptr (gimple g)
15219     Return a pointer to the clauses associated with 'OMP_PARALLEL' 'G'.
15220
15221 -- GIMPLE function: void gimple_omp_parallel_set_clauses (gimple g,
15222          tree clauses)
15223     Set 'CLAUSES' to be the list of clauses associated with
15224     'OMP_PARALLEL' 'G'.
15225
15226 -- GIMPLE function: tree gimple_omp_parallel_child_fn (gimple g)
15227     Return the child function used to hold the body of 'OMP_PARALLEL'
15228     'G'.
15229
15230 -- GIMPLE function: tree * gimple_omp_parallel_child_fn_ptr (gimple g)
15231     Return a pointer to the child function used to hold the body of
15232     'OMP_PARALLEL' 'G'.
15233
15234 -- GIMPLE function: void gimple_omp_parallel_set_child_fn (gimple g,
15235          tree child_fn)
15236     Set 'CHILD_FN' to be the child function for 'OMP_PARALLEL' 'G'.
15237
15238 -- GIMPLE function: tree gimple_omp_parallel_data_arg (gimple g)
15239     Return the artificial argument used to send variables and values
15240     from the parent to the children threads in 'OMP_PARALLEL' 'G'.
15241
15242 -- GIMPLE function: tree * gimple_omp_parallel_data_arg_ptr (gimple g)
15243     Return a pointer to the data argument for 'OMP_PARALLEL' 'G'.
15244
15245 -- GIMPLE function: void gimple_omp_parallel_set_data_arg (gimple g,
15246          tree data_arg)
15247     Set 'DATA_ARG' to be the data argument for 'OMP_PARALLEL' 'G'.
15248
15249 -- GIMPLE function: bool is_gimple_omp (gimple stmt)
15250     Returns true when the gimple statement 'STMT' is any of the OpenMP
15251     types.
15252
15253
15254File: gccint.info,  Node: 'GIMPLE_OMP_RETURN',  Next: 'GIMPLE_OMP_SECTION',  Prev: 'GIMPLE_OMP_PARALLEL',  Up: Tuple specific accessors
15255
1525612.7.19 'GIMPLE_OMP_RETURN'
15257---------------------------
15258
15259 -- GIMPLE function: gimple gimple_build_omp_return (bool wait_p)
15260     Build a 'GIMPLE_OMP_RETURN' statement.  'WAIT_P' is true if this is
15261     a non-waiting return.
15262
15263 -- GIMPLE function: void gimple_omp_return_set_nowait (gimple s)
15264     Set the nowait flag on 'GIMPLE_OMP_RETURN' statement 'S'.
15265
15266 -- GIMPLE function: bool gimple_omp_return_nowait_p (gimple g)
15267     Return true if 'OMP' return statement 'G' has the
15268     'GF_OMP_RETURN_NOWAIT' flag set.
15269
15270
15271File: gccint.info,  Node: 'GIMPLE_OMP_SECTION',  Next: 'GIMPLE_OMP_SECTIONS',  Prev: 'GIMPLE_OMP_RETURN',  Up: Tuple specific accessors
15272
1527312.7.20 'GIMPLE_OMP_SECTION'
15274----------------------------
15275
15276 -- GIMPLE function: gimple gimple_build_omp_section (gimple_seq body)
15277     Build a 'GIMPLE_OMP_SECTION' statement for a sections statement.
15278
15279 'BODY' is the sequence of statements in the section.
15280
15281 -- GIMPLE function: bool gimple_omp_section_last_p (gimple g)
15282     Return true if 'OMP' section statement 'G' has the
15283     'GF_OMP_SECTION_LAST' flag set.
15284
15285 -- GIMPLE function: void gimple_omp_section_set_last (gimple g)
15286     Set the 'GF_OMP_SECTION_LAST' flag on 'G'.
15287
15288
15289File: gccint.info,  Node: 'GIMPLE_OMP_SECTIONS',  Next: 'GIMPLE_OMP_SINGLE',  Prev: 'GIMPLE_OMP_SECTION',  Up: Tuple specific accessors
15290
1529112.7.21 'GIMPLE_OMP_SECTIONS'
15292-----------------------------
15293
15294 -- GIMPLE function: gimple gimple_build_omp_sections (gimple_seq body,
15295          tree clauses)
15296     Build a 'GIMPLE_OMP_SECTIONS' statement.  'BODY' is a sequence of
15297     section statements.  'CLAUSES' are any of the 'OMP' sections
15298     construct's clauses: private, firstprivate, lastprivate, reduction,
15299     and nowait.
15300
15301 -- GIMPLE function: gimple gimple_build_omp_sections_switch (void)
15302     Build a 'GIMPLE_OMP_SECTIONS_SWITCH' statement.
15303
15304 -- GIMPLE function: tree gimple_omp_sections_control (gimple g)
15305     Return the control variable associated with the
15306     'GIMPLE_OMP_SECTIONS' in 'G'.
15307
15308 -- GIMPLE function: tree * gimple_omp_sections_control_ptr (gimple g)
15309     Return a pointer to the clauses associated with the
15310     'GIMPLE_OMP_SECTIONS' in 'G'.
15311
15312 -- GIMPLE function: void gimple_omp_sections_set_control (gimple g,
15313          tree control)
15314     Set 'CONTROL' to be the set of clauses associated with the
15315     'GIMPLE_OMP_SECTIONS' in 'G'.
15316
15317 -- GIMPLE function: tree gimple_omp_sections_clauses (gimple g)
15318     Return the clauses associated with 'OMP_SECTIONS' 'G'.
15319
15320 -- GIMPLE function: tree * gimple_omp_sections_clauses_ptr (gimple g)
15321     Return a pointer to the clauses associated with 'OMP_SECTIONS' 'G'.
15322
15323 -- GIMPLE function: void gimple_omp_sections_set_clauses (gimple g,
15324          tree clauses)
15325     Set 'CLAUSES' to be the set of clauses associated with
15326     'OMP_SECTIONS' 'G'.
15327
15328
15329File: gccint.info,  Node: 'GIMPLE_OMP_SINGLE',  Next: 'GIMPLE_PHI',  Prev: 'GIMPLE_OMP_SECTIONS',  Up: Tuple specific accessors
15330
1533112.7.22 'GIMPLE_OMP_SINGLE'
15332---------------------------
15333
15334 -- GIMPLE function: gimple gimple_build_omp_single (gimple_seq body,
15335          tree clauses)
15336     Build a 'GIMPLE_OMP_SINGLE' statement.  'BODY' is the sequence of
15337     statements that will be executed once.  'CLAUSES' are any of the
15338     'OMP' single construct's clauses: private, firstprivate,
15339     copyprivate, nowait.
15340
15341 -- GIMPLE function: tree gimple_omp_single_clauses (gimple g)
15342     Return the clauses associated with 'OMP_SINGLE' 'G'.
15343
15344 -- GIMPLE function: tree * gimple_omp_single_clauses_ptr (gimple g)
15345     Return a pointer to the clauses associated with 'OMP_SINGLE' 'G'.
15346
15347 -- GIMPLE function: void gimple_omp_single_set_clauses (gimple g, tree
15348          clauses)
15349     Set 'CLAUSES' to be the clauses associated with 'OMP_SINGLE' 'G'.
15350
15351
15352File: gccint.info,  Node: 'GIMPLE_PHI',  Next: 'GIMPLE_RESX',  Prev: 'GIMPLE_OMP_SINGLE',  Up: Tuple specific accessors
15353
1535412.7.23 'GIMPLE_PHI'
15355--------------------
15356
15357 -- GIMPLE function: unsigned gimple_phi_capacity (gimple g)
15358     Return the maximum number of arguments supported by 'GIMPLE_PHI'
15359     'G'.
15360
15361 -- GIMPLE function: unsigned gimple_phi_num_args (gimple g)
15362     Return the number of arguments in 'GIMPLE_PHI' 'G'.  This must
15363     always be exactly the number of incoming edges for the basic block
15364     holding 'G'.
15365
15366 -- GIMPLE function: tree gimple_phi_result (gimple g)
15367     Return the 'SSA' name created by 'GIMPLE_PHI' 'G'.
15368
15369 -- GIMPLE function: tree * gimple_phi_result_ptr (gimple g)
15370     Return a pointer to the 'SSA' name created by 'GIMPLE_PHI' 'G'.
15371
15372 -- GIMPLE function: void gimple_phi_set_result (gimple g, tree result)
15373     Set 'RESULT' to be the 'SSA' name created by 'GIMPLE_PHI' 'G'.
15374
15375 -- GIMPLE function: struct phi_arg_d * gimple_phi_arg (gimple g, index)
15376     Return the 'PHI' argument corresponding to incoming edge 'INDEX'
15377     for 'GIMPLE_PHI' 'G'.
15378
15379 -- GIMPLE function: void gimple_phi_set_arg (gimple g, index, struct
15380          phi_arg_d * phiarg)
15381     Set 'PHIARG' to be the argument corresponding to incoming edge
15382     'INDEX' for 'GIMPLE_PHI' 'G'.
15383
15384
15385File: gccint.info,  Node: 'GIMPLE_RESX',  Next: 'GIMPLE_RETURN',  Prev: 'GIMPLE_PHI',  Up: Tuple specific accessors
15386
1538712.7.24 'GIMPLE_RESX'
15388---------------------
15389
15390 -- GIMPLE function: gimple gimple_build_resx (int region)
15391     Build a 'GIMPLE_RESX' statement which is a statement.  This
15392     statement is a placeholder for _Unwind_Resume before we know if a
15393     function call or a branch is needed.  'REGION' is the exception
15394     region from which control is flowing.
15395
15396 -- GIMPLE function: int gimple_resx_region (gimple g)
15397     Return the region number for 'GIMPLE_RESX' 'G'.
15398
15399 -- GIMPLE function: void gimple_resx_set_region (gimple g, int region)
15400     Set 'REGION' to be the region number for 'GIMPLE_RESX' 'G'.
15401
15402
15403File: gccint.info,  Node: 'GIMPLE_RETURN',  Next: 'GIMPLE_SWITCH',  Prev: 'GIMPLE_RESX',  Up: Tuple specific accessors
15404
1540512.7.25 'GIMPLE_RETURN'
15406-----------------------
15407
15408 -- GIMPLE function: gimple gimple_build_return (tree retval)
15409     Build a 'GIMPLE_RETURN' statement whose return value is retval.
15410
15411 -- GIMPLE function: tree gimple_return_retval (gimple g)
15412     Return the return value for 'GIMPLE_RETURN' 'G'.
15413
15414 -- GIMPLE function: void gimple_return_set_retval (gimple g, tree
15415          retval)
15416     Set 'RETVAL' to be the return value for 'GIMPLE_RETURN' 'G'.
15417
15418
15419File: gccint.info,  Node: 'GIMPLE_SWITCH',  Next: 'GIMPLE_TRY',  Prev: 'GIMPLE_RETURN',  Up: Tuple specific accessors
15420
1542112.7.26 'GIMPLE_SWITCH'
15422-----------------------
15423
15424 -- GIMPLE function: gimple gimple_build_switch (tree index, tree
15425          default_label, 'VEC'(tree,heap) *args)
15426     Build a 'GIMPLE_SWITCH' statement.  'INDEX' is the index variable
15427     to switch on, and 'DEFAULT_LABEL' represents the default label.
15428     'ARGS' is a vector of 'CASE_LABEL_EXPR' trees that contain the
15429     non-default case labels.  Each label is a tree of code
15430     'CASE_LABEL_EXPR'.
15431
15432 -- GIMPLE function: unsigned gimple_switch_num_labels (gimple g)
15433     Return the number of labels associated with the switch statement
15434     'G'.
15435
15436 -- GIMPLE function: void gimple_switch_set_num_labels (gimple g,
15437          unsigned nlabels)
15438     Set 'NLABELS' to be the number of labels for the switch statement
15439     'G'.
15440
15441 -- GIMPLE function: tree gimple_switch_index (gimple g)
15442     Return the index variable used by the switch statement 'G'.
15443
15444 -- GIMPLE function: void gimple_switch_set_index (gimple g, tree index)
15445     Set 'INDEX' to be the index variable for switch statement 'G'.
15446
15447 -- GIMPLE function: tree gimple_switch_label (gimple g, unsigned index)
15448     Return the label numbered 'INDEX'.  The default label is 0,
15449     followed by any labels in a switch statement.
15450
15451 -- GIMPLE function: void gimple_switch_set_label (gimple g, unsigned
15452          index, tree label)
15453     Set the label number 'INDEX' to 'LABEL'.  0 is always the default
15454     label.
15455
15456 -- GIMPLE function: tree gimple_switch_default_label (gimple g)
15457     Return the default label for a switch statement.
15458
15459 -- GIMPLE function: void gimple_switch_set_default_label (gimple g,
15460          tree label)
15461     Set the default label for a switch statement.
15462
15463
15464File: gccint.info,  Node: 'GIMPLE_TRY',  Next: 'GIMPLE_WITH_CLEANUP_EXPR',  Prev: 'GIMPLE_SWITCH',  Up: Tuple specific accessors
15465
1546612.7.27 'GIMPLE_TRY'
15467--------------------
15468
15469 -- GIMPLE function: gimple gimple_build_try (gimple_seq eval,
15470          gimple_seq cleanup, unsigned int kind)
15471     Build a 'GIMPLE_TRY' statement.  'EVAL' is a sequence with the
15472     expression to evaluate.  'CLEANUP' is a sequence of statements to
15473     run at clean-up time.  'KIND' is the enumeration value
15474     'GIMPLE_TRY_CATCH' if this statement denotes a try/catch construct
15475     or 'GIMPLE_TRY_FINALLY' if this statement denotes a try/finally
15476     construct.
15477
15478 -- GIMPLE function: enum gimple_try_flags gimple_try_kind (gimple g)
15479     Return the kind of try block represented by 'GIMPLE_TRY' 'G'.  This
15480     is either 'GIMPLE_TRY_CATCH' or 'GIMPLE_TRY_FINALLY'.
15481
15482 -- GIMPLE function: bool gimple_try_catch_is_cleanup (gimple g)
15483     Return the 'GIMPLE_TRY_CATCH_IS_CLEANUP' flag.
15484
15485 -- GIMPLE function: gimple_seq gimple_try_eval (gimple g)
15486     Return the sequence of statements used as the body for 'GIMPLE_TRY'
15487     'G'.
15488
15489 -- GIMPLE function: gimple_seq gimple_try_cleanup (gimple g)
15490     Return the sequence of statements used as the cleanup body for
15491     'GIMPLE_TRY' 'G'.
15492
15493 -- GIMPLE function: void gimple_try_set_catch_is_cleanup (gimple g,
15494          bool catch_is_cleanup)
15495     Set the 'GIMPLE_TRY_CATCH_IS_CLEANUP' flag.
15496
15497 -- GIMPLE function: void gimple_try_set_eval (gimple g, gimple_seq
15498          eval)
15499     Set 'EVAL' to be the sequence of statements to use as the body for
15500     'GIMPLE_TRY' 'G'.
15501
15502 -- GIMPLE function: void gimple_try_set_cleanup (gimple g, gimple_seq
15503          cleanup)
15504     Set 'CLEANUP' to be the sequence of statements to use as the
15505     cleanup body for 'GIMPLE_TRY' 'G'.
15506
15507
15508File: gccint.info,  Node: 'GIMPLE_WITH_CLEANUP_EXPR',  Prev: 'GIMPLE_TRY',  Up: Tuple specific accessors
15509
1551012.7.28 'GIMPLE_WITH_CLEANUP_EXPR'
15511----------------------------------
15512
15513 -- GIMPLE function: gimple gimple_build_wce (gimple_seq cleanup)
15514     Build a 'GIMPLE_WITH_CLEANUP_EXPR' statement.  'CLEANUP' is the
15515     clean-up expression.
15516
15517 -- GIMPLE function: gimple_seq gimple_wce_cleanup (gimple g)
15518     Return the cleanup sequence for cleanup statement 'G'.
15519
15520 -- GIMPLE function: void gimple_wce_set_cleanup (gimple g, gimple_seq
15521          cleanup)
15522     Set 'CLEANUP' to be the cleanup sequence for 'G'.
15523
15524 -- GIMPLE function: bool gimple_wce_cleanup_eh_only (gimple g)
15525     Return the 'CLEANUP_EH_ONLY' flag for a 'WCE' tuple.
15526
15527 -- GIMPLE function: void gimple_wce_set_cleanup_eh_only (gimple g, bool
15528          eh_only_p)
15529     Set the 'CLEANUP_EH_ONLY' flag for a 'WCE' tuple.
15530
15531
15532File: gccint.info,  Node: GIMPLE sequences,  Next: Sequence iterators,  Prev: Tuple specific accessors,  Up: GIMPLE
15533
1553412.8 GIMPLE sequences
15535=====================
15536
15537GIMPLE sequences are the tuple equivalent of 'STATEMENT_LIST''s used in
15538'GENERIC'.  They are used to chain statements together, and when used in
15539conjunction with sequence iterators, provide a framework for iterating
15540through statements.
15541
15542 GIMPLE sequences are of type struct 'gimple_sequence', but are more
15543commonly passed by reference to functions dealing with sequences.  The
15544type for a sequence pointer is 'gimple_seq' which is the same as struct
15545'gimple_sequence' *.  When declaring a local sequence, you can define a
15546local variable of type struct 'gimple_sequence'.  When declaring a
15547sequence allocated on the garbage collected heap, use the function
15548'gimple_seq_alloc' documented below.
15549
15550 There are convenience functions for iterating through sequences in the
15551section entitled Sequence Iterators.
15552
15553 Below is a list of functions to manipulate and query sequences.
15554
15555 -- GIMPLE function: void gimple_seq_add_stmt (gimple_seq *seq, gimple
15556          g)
15557     Link a gimple statement to the end of the sequence *'SEQ' if 'G' is
15558     not 'NULL'.  If *'SEQ' is 'NULL', allocate a sequence before
15559     linking.
15560
15561 -- GIMPLE function: void gimple_seq_add_seq (gimple_seq *dest,
15562          gimple_seq src)
15563     Append sequence 'SRC' to the end of sequence *'DEST' if 'SRC' is
15564     not 'NULL'.  If *'DEST' is 'NULL', allocate a new sequence before
15565     appending.
15566
15567 -- GIMPLE function: gimple_seq gimple_seq_deep_copy (gimple_seq src)
15568     Perform a deep copy of sequence 'SRC' and return the result.
15569
15570 -- GIMPLE function: gimple_seq gimple_seq_reverse (gimple_seq seq)
15571     Reverse the order of the statements in the sequence 'SEQ'.  Return
15572     'SEQ'.
15573
15574 -- GIMPLE function: gimple gimple_seq_first (gimple_seq s)
15575     Return the first statement in sequence 'S'.
15576
15577 -- GIMPLE function: gimple gimple_seq_last (gimple_seq s)
15578     Return the last statement in sequence 'S'.
15579
15580 -- GIMPLE function: void gimple_seq_set_last (gimple_seq s, gimple
15581          last)
15582     Set the last statement in sequence 'S' to the statement in 'LAST'.
15583
15584 -- GIMPLE function: void gimple_seq_set_first (gimple_seq s, gimple
15585          first)
15586     Set the first statement in sequence 'S' to the statement in
15587     'FIRST'.
15588
15589 -- GIMPLE function: void gimple_seq_init (gimple_seq s)
15590     Initialize sequence 'S' to an empty sequence.
15591
15592 -- GIMPLE function: gimple_seq gimple_seq_alloc (void)
15593     Allocate a new sequence in the garbage collected store and return
15594     it.
15595
15596 -- GIMPLE function: void gimple_seq_copy (gimple_seq dest, gimple_seq
15597          src)
15598     Copy the sequence 'SRC' into the sequence 'DEST'.
15599
15600 -- GIMPLE function: bool gimple_seq_empty_p (gimple_seq s)
15601     Return true if the sequence 'S' is empty.
15602
15603 -- GIMPLE function: gimple_seq bb_seq (basic_block bb)
15604     Returns the sequence of statements in 'BB'.
15605
15606 -- GIMPLE function: void set_bb_seq (basic_block bb, gimple_seq seq)
15607     Sets the sequence of statements in 'BB' to 'SEQ'.
15608
15609 -- GIMPLE function: bool gimple_seq_singleton_p (gimple_seq seq)
15610     Determine whether 'SEQ' contains exactly one statement.
15611
15612
15613File: gccint.info,  Node: Sequence iterators,  Next: Adding a new GIMPLE statement code,  Prev: GIMPLE sequences,  Up: GIMPLE
15614
1561512.9 Sequence iterators
15616=======================
15617
15618Sequence iterators are convenience constructs for iterating through
15619statements in a sequence.  Given a sequence 'SEQ', here is a typical use
15620of gimple sequence iterators:
15621
15622     gimple_stmt_iterator gsi;
15623
15624     for (gsi = gsi_start (seq); !gsi_end_p (gsi); gsi_next (&gsi))
15625       {
15626         gimple g = gsi_stmt (gsi);
15627         /* Do something with gimple statement G.  */
15628       }
15629
15630 Backward iterations are possible:
15631
15632             for (gsi = gsi_last (seq); !gsi_end_p (gsi); gsi_prev (&gsi))
15633
15634 Forward and backward iterations on basic blocks are possible with
15635'gsi_start_bb' and 'gsi_last_bb'.
15636
15637 In the documentation below we sometimes refer to enum
15638'gsi_iterator_update'.  The valid options for this enumeration are:
15639
15640   * 'GSI_NEW_STMT' Only valid when a single statement is added.  Move
15641     the iterator to it.
15642
15643   * 'GSI_SAME_STMT' Leave the iterator at the same statement.
15644
15645   * 'GSI_CONTINUE_LINKING' Move iterator to whatever position is
15646     suitable for linking other statements in the same direction.
15647
15648 Below is a list of the functions used to manipulate and use statement
15649iterators.
15650
15651 -- GIMPLE function: gimple_stmt_iterator gsi_start (gimple_seq seq)
15652     Return a new iterator pointing to the sequence 'SEQ''s first
15653     statement.  If 'SEQ' is empty, the iterator's basic block is
15654     'NULL'.  Use 'gsi_start_bb' instead when the iterator needs to
15655     always have the correct basic block set.
15656
15657 -- GIMPLE function: gimple_stmt_iterator gsi_start_bb (basic_block bb)
15658     Return a new iterator pointing to the first statement in basic
15659     block 'BB'.
15660
15661 -- GIMPLE function: gimple_stmt_iterator gsi_last (gimple_seq seq)
15662     Return a new iterator initially pointing to the last statement of
15663     sequence 'SEQ'.  If 'SEQ' is empty, the iterator's basic block is
15664     'NULL'.  Use 'gsi_last_bb' instead when the iterator needs to
15665     always have the correct basic block set.
15666
15667 -- GIMPLE function: gimple_stmt_iterator gsi_last_bb (basic_block bb)
15668     Return a new iterator pointing to the last statement in basic block
15669     'BB'.
15670
15671 -- GIMPLE function: bool gsi_end_p (gimple_stmt_iterator i)
15672     Return 'TRUE' if at the end of 'I'.
15673
15674 -- GIMPLE function: bool gsi_one_before_end_p (gimple_stmt_iterator i)
15675     Return 'TRUE' if we're one statement before the end of 'I'.
15676
15677 -- GIMPLE function: void gsi_next (gimple_stmt_iterator *i)
15678     Advance the iterator to the next gimple statement.
15679
15680 -- GIMPLE function: void gsi_prev (gimple_stmt_iterator *i)
15681     Advance the iterator to the previous gimple statement.
15682
15683 -- GIMPLE function: gimple gsi_stmt (gimple_stmt_iterator i)
15684     Return the current stmt.
15685
15686 -- GIMPLE function: gimple_stmt_iterator gsi_after_labels (basic_block
15687          bb)
15688     Return a block statement iterator that points to the first
15689     non-label statement in block 'BB'.
15690
15691 -- GIMPLE function: gimple * gsi_stmt_ptr (gimple_stmt_iterator *i)
15692     Return a pointer to the current stmt.
15693
15694 -- GIMPLE function: basic_block gsi_bb (gimple_stmt_iterator i)
15695     Return the basic block associated with this iterator.
15696
15697 -- GIMPLE function: gimple_seq gsi_seq (gimple_stmt_iterator i)
15698     Return the sequence associated with this iterator.
15699
15700 -- GIMPLE function: void gsi_remove (gimple_stmt_iterator *i, bool
15701          remove_eh_info)
15702     Remove the current stmt from the sequence.  The iterator is updated
15703     to point to the next statement.  When 'REMOVE_EH_INFO' is true we
15704     remove the statement pointed to by iterator 'I' from the 'EH'
15705     tables.  Otherwise we do not modify the 'EH' tables.  Generally,
15706     'REMOVE_EH_INFO' should be true when the statement is going to be
15707     removed from the 'IL' and not reinserted elsewhere.
15708
15709 -- GIMPLE function: void gsi_link_seq_before (gimple_stmt_iterator *i,
15710          gimple_seq seq, enum gsi_iterator_update mode)
15711     Links the sequence of statements 'SEQ' before the statement pointed
15712     by iterator 'I'.  'MODE' indicates what to do with the iterator
15713     after insertion (see 'enum gsi_iterator_update' above).
15714
15715 -- GIMPLE function: void gsi_link_before (gimple_stmt_iterator *i,
15716          gimple g, enum gsi_iterator_update mode)
15717     Links statement 'G' before the statement pointed-to by iterator
15718     'I'.  Updates iterator 'I' according to 'MODE'.
15719
15720 -- GIMPLE function: void gsi_link_seq_after (gimple_stmt_iterator *i,
15721          gimple_seq seq, enum gsi_iterator_update mode)
15722     Links sequence 'SEQ' after the statement pointed-to by iterator
15723     'I'.  'MODE' is as in 'gsi_insert_after'.
15724
15725 -- GIMPLE function: void gsi_link_after (gimple_stmt_iterator *i,
15726          gimple g, enum gsi_iterator_update mode)
15727     Links statement 'G' after the statement pointed-to by iterator 'I'.
15728     'MODE' is as in 'gsi_insert_after'.
15729
15730 -- GIMPLE function: gimple_seq gsi_split_seq_after
15731          (gimple_stmt_iterator i)
15732     Move all statements in the sequence after 'I' to a new sequence.
15733     Return this new sequence.
15734
15735 -- GIMPLE function: gimple_seq gsi_split_seq_before
15736          (gimple_stmt_iterator *i)
15737     Move all statements in the sequence before 'I' to a new sequence.
15738     Return this new sequence.
15739
15740 -- GIMPLE function: void gsi_replace (gimple_stmt_iterator *i, gimple
15741          stmt, bool update_eh_info)
15742     Replace the statement pointed-to by 'I' to 'STMT'.  If
15743     'UPDATE_EH_INFO' is true, the exception handling information of the
15744     original statement is moved to the new statement.
15745
15746 -- GIMPLE function: void gsi_insert_before (gimple_stmt_iterator *i,
15747          gimple stmt, enum gsi_iterator_update mode)
15748     Insert statement 'STMT' before the statement pointed-to by iterator
15749     'I', update 'STMT''s basic block and scan it for new operands.
15750     'MODE' specifies how to update iterator 'I' after insertion (see
15751     enum 'gsi_iterator_update').
15752
15753 -- GIMPLE function: void gsi_insert_seq_before (gimple_stmt_iterator
15754          *i, gimple_seq seq, enum gsi_iterator_update mode)
15755     Like 'gsi_insert_before', but for all the statements in 'SEQ'.
15756
15757 -- GIMPLE function: void gsi_insert_after (gimple_stmt_iterator *i,
15758          gimple stmt, enum gsi_iterator_update mode)
15759     Insert statement 'STMT' after the statement pointed-to by iterator
15760     'I', update 'STMT''s basic block and scan it for new operands.
15761     'MODE' specifies how to update iterator 'I' after insertion (see
15762     enum 'gsi_iterator_update').
15763
15764 -- GIMPLE function: void gsi_insert_seq_after (gimple_stmt_iterator *i,
15765          gimple_seq seq, enum gsi_iterator_update mode)
15766     Like 'gsi_insert_after', but for all the statements in 'SEQ'.
15767
15768 -- GIMPLE function: gimple_stmt_iterator gsi_for_stmt (gimple stmt)
15769     Finds iterator for 'STMT'.
15770
15771 -- GIMPLE function: void gsi_move_after (gimple_stmt_iterator *from,
15772          gimple_stmt_iterator *to)
15773     Move the statement at 'FROM' so it comes right after the statement
15774     at 'TO'.
15775
15776 -- GIMPLE function: void gsi_move_before (gimple_stmt_iterator *from,
15777          gimple_stmt_iterator *to)
15778     Move the statement at 'FROM' so it comes right before the statement
15779     at 'TO'.
15780
15781 -- GIMPLE function: void gsi_move_to_bb_end (gimple_stmt_iterator
15782          *from, basic_block bb)
15783     Move the statement at 'FROM' to the end of basic block 'BB'.
15784
15785 -- GIMPLE function: void gsi_insert_on_edge (edge e, gimple stmt)
15786     Add 'STMT' to the pending list of edge 'E'.  No actual insertion is
15787     made until a call to 'gsi_commit_edge_inserts'() is made.
15788
15789 -- GIMPLE function: void gsi_insert_seq_on_edge (edge e, gimple_seq
15790          seq)
15791     Add the sequence of statements in 'SEQ' to the pending list of edge
15792     'E'.  No actual insertion is made until a call to
15793     'gsi_commit_edge_inserts'() is made.
15794
15795 -- GIMPLE function: basic_block gsi_insert_on_edge_immediate (edge e,
15796          gimple stmt)
15797     Similar to 'gsi_insert_on_edge'+'gsi_commit_edge_inserts'.  If a
15798     new block has to be created, it is returned.
15799
15800 -- GIMPLE function: void gsi_commit_one_edge_insert (edge e,
15801          basic_block *new_bb)
15802     Commit insertions pending at edge 'E'.  If a new block is created,
15803     set 'NEW_BB' to this block, otherwise set it to 'NULL'.
15804
15805 -- GIMPLE function: void gsi_commit_edge_inserts (void)
15806     This routine will commit all pending edge insertions, creating any
15807     new basic blocks which are necessary.
15808
15809
15810File: gccint.info,  Node: Adding a new GIMPLE statement code,  Next: Statement and operand traversals,  Prev: Sequence iterators,  Up: GIMPLE
15811
1581212.10 Adding a new GIMPLE statement code
15813========================================
15814
15815The first step in adding a new GIMPLE statement code, is modifying the
15816file 'gimple.def', which contains all the GIMPLE codes.  Then you must
15817add a corresponding structure, and an entry in 'union
15818gimple_statement_d', both of which are located in 'gimple.h'.  This in
15819turn, will require you to add a corresponding 'GTY' tag in
15820'gsstruct.def', and code to handle this tag in 'gss_for_code' which is
15821located in 'gimple.c'.
15822
15823 In order for the garbage collector to know the size of the structure
15824you created in 'gimple.h', you need to add a case to handle your new
15825GIMPLE statement in 'gimple_size' which is located in 'gimple.c'.
15826
15827 You will probably want to create a function to build the new gimple
15828statement in 'gimple.c'.  The function should be called
15829'gimple_build_NEW-TUPLE-NAME', and should return the new tuple of type
15830gimple.
15831
15832 If your new statement requires accessors for any members or operands it
15833may have, put simple inline accessors in 'gimple.h' and any non-trivial
15834accessors in 'gimple.c' with a corresponding prototype in 'gimple.h'.
15835
15836
15837File: gccint.info,  Node: Statement and operand traversals,  Prev: Adding a new GIMPLE statement code,  Up: GIMPLE
15838
1583912.11 Statement and operand traversals
15840======================================
15841
15842There are two functions available for walking statements and sequences:
15843'walk_gimple_stmt' and 'walk_gimple_seq', accordingly, and a third
15844function for walking the operands in a statement: 'walk_gimple_op'.
15845
15846 -- GIMPLE function: tree walk_gimple_stmt (gimple_stmt_iterator *gsi,
15847          walk_stmt_fn callback_stmt, walk_tree_fn callback_op, struct
15848          walk_stmt_info *wi)
15849     This function is used to walk the current statement in 'GSI',
15850     optionally using traversal state stored in 'WI'.  If 'WI' is
15851     'NULL', no state is kept during the traversal.
15852
15853     The callback 'CALLBACK_STMT' is called.  If 'CALLBACK_STMT' returns
15854     true, it means that the callback function has handled all the
15855     operands of the statement and it is not necessary to walk its
15856     operands.
15857
15858     If 'CALLBACK_STMT' is 'NULL' or it returns false, 'CALLBACK_OP' is
15859     called on each operand of the statement via 'walk_gimple_op'.  If
15860     'walk_gimple_op' returns non-'NULL' for any operand, the remaining
15861     operands are not scanned.
15862
15863     The return value is that returned by the last call to
15864     'walk_gimple_op', or 'NULL_TREE' if no 'CALLBACK_OP' is specified.
15865
15866 -- GIMPLE function: tree walk_gimple_op (gimple stmt, walk_tree_fn
15867          callback_op, struct walk_stmt_info *wi)
15868     Use this function to walk the operands of statement 'STMT'.  Every
15869     operand is walked via 'walk_tree' with optional state information
15870     in 'WI'.
15871
15872     'CALLBACK_OP' is called on each operand of 'STMT' via 'walk_tree'.
15873     Additional parameters to 'walk_tree' must be stored in 'WI'.  For
15874     each operand 'OP', 'walk_tree' is called as:
15875
15876          walk_tree (&OP, CALLBACK_OP, WI, PSET)
15877
15878     If 'CALLBACK_OP' returns non-'NULL' for an operand, the remaining
15879     operands are not scanned.  The return value is that returned by the
15880     last call to 'walk_tree', or 'NULL_TREE' if no 'CALLBACK_OP' is
15881     specified.
15882
15883 -- GIMPLE function: tree walk_gimple_seq (gimple_seq seq, walk_stmt_fn
15884          callback_stmt, walk_tree_fn callback_op, struct walk_stmt_info
15885          *wi)
15886     This function walks all the statements in the sequence 'SEQ'
15887     calling 'walk_gimple_stmt' on each one.  'WI' is as in
15888     'walk_gimple_stmt'.  If 'walk_gimple_stmt' returns non-'NULL', the
15889     walk is stopped and the value returned.  Otherwise, all the
15890     statements are walked and 'NULL_TREE' returned.
15891
15892
15893File: gccint.info,  Node: Tree SSA,  Next: Loop Analysis and Representation,  Prev: GIMPLE,  Up: Top
15894
1589513 Analysis and Optimization of GIMPLE tuples
15896*********************************************
15897
15898GCC uses three main intermediate languages to represent the program
15899during compilation: GENERIC, GIMPLE and RTL.  GENERIC is a
15900language-independent representation generated by each front end.  It is
15901used to serve as an interface between the parser and optimizer.  GENERIC
15902is a common representation that is able to represent programs written in
15903all the languages supported by GCC.
15904
15905 GIMPLE and RTL are used to optimize the program.  GIMPLE is used for
15906target and language independent optimizations (e.g., inlining, constant
15907propagation, tail call elimination, redundancy elimination, etc).  Much
15908like GENERIC, GIMPLE is a language independent, tree based
15909representation.  However, it differs from GENERIC in that the GIMPLE
15910grammar is more restrictive: expressions contain no more than 3 operands
15911(except function calls), it has no control flow structures and
15912expressions with side-effects are only allowed on the right hand side of
15913assignments.  See the chapter describing GENERIC and GIMPLE for more
15914details.
15915
15916 This chapter describes the data structures and functions used in the
15917GIMPLE optimizers (also known as "tree optimizers" or "middle end").  In
15918particular, it focuses on all the macros, data structures, functions and
15919programming constructs needed to implement optimization passes for
15920GIMPLE.
15921
15922* Menu:
15923
15924* Annotations::         Attributes for variables.
15925* SSA Operands::        SSA names referenced by GIMPLE statements.
15926* SSA::                 Static Single Assignment representation.
15927* Alias analysis::      Representing aliased loads and stores.
15928* Memory model::        Memory model used by the middle-end.
15929
15930
15931File: gccint.info,  Node: Annotations,  Next: SSA Operands,  Up: Tree SSA
15932
1593313.1 Annotations
15934================
15935
15936The optimizers need to associate attributes with variables during the
15937optimization process.  For instance, we need to know whether a variable
15938has aliases.  All these attributes are stored in data structures called
15939annotations which are then linked to the field 'ann' in 'struct
15940tree_common'.
15941
15942 Presently, we define annotations for variables ('var_ann_t').
15943Annotations are defined and documented in 'tree-flow.h'.
15944
15945
15946File: gccint.info,  Node: SSA Operands,  Next: SSA,  Prev: Annotations,  Up: Tree SSA
15947
1594813.2 SSA Operands
15949=================
15950
15951Almost every GIMPLE statement will contain a reference to a variable or
15952memory location.  Since statements come in different shapes and sizes,
15953their operands are going to be located at various spots inside the
15954statement's tree.  To facilitate access to the statement's operands,
15955they are organized into lists associated inside each statement's
15956annotation.  Each element in an operand list is a pointer to a
15957'VAR_DECL', 'PARM_DECL' or 'SSA_NAME' tree node.  This provides a very
15958convenient way of examining and replacing operands.
15959
15960 Data flow analysis and optimization is done on all tree nodes
15961representing variables.  Any node for which 'SSA_VAR_P' returns nonzero
15962is considered when scanning statement operands.  However, not all
15963'SSA_VAR_P' variables are processed in the same way.  For the purposes
15964of optimization, we need to distinguish between references to local
15965scalar variables and references to globals, statics, structures, arrays,
15966aliased variables, etc.  The reason is simple, the compiler can gather
15967complete data flow information for a local scalar.  On the other hand, a
15968global variable may be modified by a function call, it may not be
15969possible to keep track of all the elements of an array or the fields of
15970a structure, etc.
15971
15972 The operand scanner gathers two kinds of operands: "real" and
15973"virtual".  An operand for which 'is_gimple_reg' returns true is
15974considered real, otherwise it is a virtual operand.  We also distinguish
15975between uses and definitions.  An operand is used if its value is loaded
15976by the statement (e.g., the operand at the RHS of an assignment).  If
15977the statement assigns a new value to the operand, the operand is
15978considered a definition (e.g., the operand at the LHS of an assignment).
15979
15980 Virtual and real operands also have very different data flow
15981properties.  Real operands are unambiguous references to the full object
15982that they represent.  For instance, given
15983
15984     {
15985       int a, b;
15986       a = b
15987     }
15988
15989 Since 'a' and 'b' are non-aliased locals, the statement 'a = b' will
15990have one real definition and one real use because variable 'a' is
15991completely modified with the contents of variable 'b'.  Real definition
15992are also known as "killing definitions".  Similarly, the use of 'b'
15993reads all its bits.
15994
15995 In contrast, virtual operands are used with variables that can have a
15996partial or ambiguous reference.  This includes structures, arrays,
15997globals, and aliased variables.  In these cases, we have two types of
15998definitions.  For globals, structures, and arrays, we can determine from
15999a statement whether a variable of these types has a killing definition.
16000If the variable does, then the statement is marked as having a "must
16001definition" of that variable.  However, if a statement is only defining
16002a part of the variable (i.e. a field in a structure), or if we know that
16003a statement might define the variable but we cannot say for sure, then
16004we mark that statement as having a "may definition".  For instance,
16005given
16006
16007     {
16008       int a, b, *p;
16009
16010       if (...)
16011         p = &a;
16012       else
16013         p = &b;
16014       *p = 5;
16015       return *p;
16016     }
16017
16018 The assignment '*p = 5' may be a definition of 'a' or 'b'.  If we
16019cannot determine statically where 'p' is pointing to at the time of the
16020store operation, we create virtual definitions to mark that statement as
16021a potential definition site for 'a' and 'b'.  Memory loads are similarly
16022marked with virtual use operands.  Virtual operands are shown in tree
16023dumps right before the statement that contains them.  To request a tree
16024dump with virtual operands, use the '-vops' option to '-fdump-tree':
16025
16026     {
16027       int a, b, *p;
16028
16029       if (...)
16030         p = &a;
16031       else
16032         p = &b;
16033       # a = VDEF <a>
16034       # b = VDEF <b>
16035       *p = 5;
16036
16037       # VUSE <a>
16038       # VUSE <b>
16039       return *p;
16040     }
16041
16042 Notice that 'VDEF' operands have two copies of the referenced variable.
16043This indicates that this is not a killing definition of that variable.
16044In this case we refer to it as a "may definition" or "aliased store".
16045The presence of the second copy of the variable in the 'VDEF' operand
16046will become important when the function is converted into SSA form.
16047This will be used to link all the non-killing definitions to prevent
16048optimizations from making incorrect assumptions about them.
16049
16050 Operands are updated as soon as the statement is finished via a call to
16051'update_stmt'.  If statement elements are changed via 'SET_USE' or
16052'SET_DEF', then no further action is required (i.e., those macros take
16053care of updating the statement).  If changes are made by manipulating
16054the statement's tree directly, then a call must be made to 'update_stmt'
16055when complete.  Calling one of the 'bsi_insert' routines or
16056'bsi_replace' performs an implicit call to 'update_stmt'.
16057
1605813.2.1 Operand Iterators And Access Routines
16059--------------------------------------------
16060
16061Operands are collected by 'tree-ssa-operands.c'.  They are stored inside
16062each statement's annotation and can be accessed through either the
16063operand iterators or an access routine.
16064
16065 The following access routines are available for examining operands:
16066
16067  1. 'SINGLE_SSA_{USE,DEF,TREE}_OPERAND': These accessors will return
16068     NULL unless there is exactly one operand matching the specified
16069     flags.  If there is exactly one operand, the operand is returned as
16070     either a 'tree', 'def_operand_p', or 'use_operand_p'.
16071
16072          tree t = SINGLE_SSA_TREE_OPERAND (stmt, flags);
16073          use_operand_p u = SINGLE_SSA_USE_OPERAND (stmt, SSA_ALL_VIRTUAL_USES);
16074          def_operand_p d = SINGLE_SSA_DEF_OPERAND (stmt, SSA_OP_ALL_DEFS);
16075
16076  2. 'ZERO_SSA_OPERANDS': This macro returns true if there are no
16077     operands matching the specified flags.
16078
16079          if (ZERO_SSA_OPERANDS (stmt, SSA_OP_ALL_VIRTUALS))
16080            return;
16081
16082  3. 'NUM_SSA_OPERANDS': This macro Returns the number of operands
16083     matching 'flags'.  This actually executes a loop to perform the
16084     count, so only use this if it is really needed.
16085
16086          int count = NUM_SSA_OPERANDS (stmt, flags)
16087
16088 If you wish to iterate over some or all operands, use the
16089'FOR_EACH_SSA_{USE,DEF,TREE}_OPERAND' iterator.  For example, to print
16090all the operands for a statement:
16091
16092     void
16093     print_ops (tree stmt)
16094     {
16095       ssa_op_iter;
16096       tree var;
16097
16098       FOR_EACH_SSA_TREE_OPERAND (var, stmt, iter, SSA_OP_ALL_OPERANDS)
16099         print_generic_expr (stderr, var, TDF_SLIM);
16100     }
16101
16102 How to choose the appropriate iterator:
16103
16104  1. Determine whether you are need to see the operand pointers, or just
16105     the trees, and choose the appropriate macro:
16106
16107          Need            Macro:
16108          ----            -------
16109          use_operand_p   FOR_EACH_SSA_USE_OPERAND
16110          def_operand_p   FOR_EACH_SSA_DEF_OPERAND
16111          tree            FOR_EACH_SSA_TREE_OPERAND
16112
16113  2. You need to declare a variable of the type you are interested in,
16114     and an ssa_op_iter structure which serves as the loop controlling
16115     variable.
16116
16117  3. Determine which operands you wish to use, and specify the flags of
16118     those you are interested in.  They are documented in
16119     'tree-ssa-operands.h':
16120
16121          #define SSA_OP_USE              0x01    /* Real USE operands.  */
16122          #define SSA_OP_DEF              0x02    /* Real DEF operands.  */
16123          #define SSA_OP_VUSE             0x04    /* VUSE operands.  */
16124          #define SSA_OP_VMAYUSE          0x08    /* USE portion of VDEFS.  */
16125          #define SSA_OP_VDEF             0x10    /* DEF portion of VDEFS.  */
16126
16127          /* These are commonly grouped operand flags.  */
16128          #define SSA_OP_VIRTUAL_USES     (SSA_OP_VUSE | SSA_OP_VMAYUSE)
16129          #define SSA_OP_VIRTUAL_DEFS     (SSA_OP_VDEF)
16130          #define SSA_OP_ALL_USES         (SSA_OP_VIRTUAL_USES | SSA_OP_USE)
16131          #define SSA_OP_ALL_DEFS         (SSA_OP_VIRTUAL_DEFS | SSA_OP_DEF)
16132          #define SSA_OP_ALL_OPERANDS     (SSA_OP_ALL_USES | SSA_OP_ALL_DEFS)
16133
16134 So if you want to look at the use pointers for all the 'USE' and 'VUSE'
16135operands, you would do something like:
16136
16137       use_operand_p use_p;
16138       ssa_op_iter iter;
16139
16140       FOR_EACH_SSA_USE_OPERAND (use_p, stmt, iter, (SSA_OP_USE | SSA_OP_VUSE))
16141         {
16142           process_use_ptr (use_p);
16143         }
16144
16145 The 'TREE' macro is basically the same as the 'USE' and 'DEF' macros,
16146only with the use or def dereferenced via 'USE_FROM_PTR (use_p)' and
16147'DEF_FROM_PTR (def_p)'.  Since we aren't using operand pointers, use and
16148defs flags can be mixed.
16149
16150       tree var;
16151       ssa_op_iter iter;
16152
16153       FOR_EACH_SSA_TREE_OPERAND (var, stmt, iter, SSA_OP_VUSE)
16154         {
16155            print_generic_expr (stderr, var, TDF_SLIM);
16156         }
16157
16158 'VDEF's are broken into two flags, one for the 'DEF' portion
16159('SSA_OP_VDEF') and one for the USE portion ('SSA_OP_VMAYUSE').  If all
16160you want to look at are the 'VDEF's together, there is a fourth iterator
16161macro for this, which returns both a def_operand_p and a use_operand_p
16162for each 'VDEF' in the statement.  Note that you don't need any flags
16163for this one.
16164
16165       use_operand_p use_p;
16166       def_operand_p def_p;
16167       ssa_op_iter iter;
16168
16169       FOR_EACH_SSA_MAYDEF_OPERAND (def_p, use_p, stmt, iter)
16170         {
16171           my_code;
16172         }
16173
16174 There are many examples in the code as well, as well as the
16175documentation in 'tree-ssa-operands.h'.
16176
16177 There are also a couple of variants on the stmt iterators regarding PHI
16178nodes.
16179
16180 'FOR_EACH_PHI_ARG' Works exactly like 'FOR_EACH_SSA_USE_OPERAND',
16181except it works over 'PHI' arguments instead of statement operands.
16182
16183     /* Look at every virtual PHI use.  */
16184     FOR_EACH_PHI_ARG (use_p, phi_stmt, iter, SSA_OP_VIRTUAL_USES)
16185     {
16186        my_code;
16187     }
16188
16189     /* Look at every real PHI use.  */
16190     FOR_EACH_PHI_ARG (use_p, phi_stmt, iter, SSA_OP_USES)
16191       my_code;
16192
16193     /* Look at every PHI use.  */
16194     FOR_EACH_PHI_ARG (use_p, phi_stmt, iter, SSA_OP_ALL_USES)
16195       my_code;
16196
16197 'FOR_EACH_PHI_OR_STMT_{USE,DEF}' works exactly like
16198'FOR_EACH_SSA_{USE,DEF}_OPERAND', except it will function on either a
16199statement or a 'PHI' node.  These should be used when it is appropriate
16200but they are not quite as efficient as the individual 'FOR_EACH_PHI' and
16201'FOR_EACH_SSA' routines.
16202
16203     FOR_EACH_PHI_OR_STMT_USE (use_operand_p, stmt, iter, flags)
16204       {
16205          my_code;
16206       }
16207
16208     FOR_EACH_PHI_OR_STMT_DEF (def_operand_p, phi, iter, flags)
16209       {
16210          my_code;
16211       }
16212
1621313.2.2 Immediate Uses
16214---------------------
16215
16216Immediate use information is now always available.  Using the immediate
16217use iterators, you may examine every use of any 'SSA_NAME'.  For
16218instance, to change each use of 'ssa_var' to 'ssa_var2' and call
16219fold_stmt on each stmt after that is done:
16220
16221       use_operand_p imm_use_p;
16222       imm_use_iterator iterator;
16223       tree ssa_var, stmt;
16224
16225
16226       FOR_EACH_IMM_USE_STMT (stmt, iterator, ssa_var)
16227         {
16228           FOR_EACH_IMM_USE_ON_STMT (imm_use_p, iterator)
16229             SET_USE (imm_use_p, ssa_var_2);
16230           fold_stmt (stmt);
16231         }
16232
16233 There are 2 iterators which can be used.  'FOR_EACH_IMM_USE_FAST' is
16234used when the immediate uses are not changed, i.e., you are looking at
16235the uses, but not setting them.
16236
16237 If they do get changed, then care must be taken that things are not
16238changed under the iterators, so use the 'FOR_EACH_IMM_USE_STMT' and
16239'FOR_EACH_IMM_USE_ON_STMT' iterators.  They attempt to preserve the
16240sanity of the use list by moving all the uses for a statement into a
16241controlled position, and then iterating over those uses.  Then the
16242optimization can manipulate the stmt when all the uses have been
16243processed.  This is a little slower than the FAST version since it adds
16244a placeholder element and must sort through the list a bit for each
16245statement.  This placeholder element must be also be removed if the loop
16246is terminated early.  The macro 'BREAK_FROM_IMM_USE_SAFE' is provided to
16247do this :
16248
16249       FOR_EACH_IMM_USE_STMT (stmt, iterator, ssa_var)
16250         {
16251           if (stmt == last_stmt)
16252             BREAK_FROM_SAFE_IMM_USE (iter);
16253
16254           FOR_EACH_IMM_USE_ON_STMT (imm_use_p, iterator)
16255             SET_USE (imm_use_p, ssa_var_2);
16256           fold_stmt (stmt);
16257         }
16258
16259 There are checks in 'verify_ssa' which verify that the immediate use
16260list is up to date, as well as checking that an optimization didn't
16261break from the loop without using this macro.  It is safe to simply
16262'break'; from a 'FOR_EACH_IMM_USE_FAST' traverse.
16263
16264 Some useful functions and macros:
16265  1. 'has_zero_uses (ssa_var)' : Returns true if there are no uses of
16266     'ssa_var'.
16267  2. 'has_single_use (ssa_var)' : Returns true if there is only a single
16268     use of 'ssa_var'.
16269  3. 'single_imm_use (ssa_var, use_operand_p *ptr, tree *stmt)' :
16270     Returns true if there is only a single use of 'ssa_var', and also
16271     returns the use pointer and statement it occurs in, in the second
16272     and third parameters.
16273  4. 'num_imm_uses (ssa_var)' : Returns the number of immediate uses of
16274     'ssa_var'.  It is better not to use this if possible since it
16275     simply utilizes a loop to count the uses.
16276  5. 'PHI_ARG_INDEX_FROM_USE (use_p)' : Given a use within a 'PHI' node,
16277     return the index number for the use.  An assert is triggered if the
16278     use isn't located in a 'PHI' node.
16279  6. 'USE_STMT (use_p)' : Return the statement a use occurs in.
16280
16281 Note that uses are not put into an immediate use list until their
16282statement is actually inserted into the instruction stream via a 'bsi_*'
16283routine.
16284
16285 It is also still possible to utilize lazy updating of statements, but
16286this should be used only when absolutely required.  Both alias analysis
16287and the dominator optimizations currently do this.
16288
16289 When lazy updating is being used, the immediate use information is out
16290of date and cannot be used reliably.  Lazy updating is achieved by
16291simply marking statements modified via calls to 'mark_stmt_modified'
16292instead of 'update_stmt'.  When lazy updating is no longer required, all
16293the modified statements must have 'update_stmt' called in order to bring
16294them up to date.  This must be done before the optimization is finished,
16295or 'verify_ssa' will trigger an abort.
16296
16297 This is done with a simple loop over the instruction stream:
16298       block_stmt_iterator bsi;
16299       basic_block bb;
16300       FOR_EACH_BB (bb)
16301         {
16302           for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
16303             update_stmt_if_modified (bsi_stmt (bsi));
16304         }
16305
16306
16307File: gccint.info,  Node: SSA,  Next: Alias analysis,  Prev: SSA Operands,  Up: Tree SSA
16308
1630913.3 Static Single Assignment
16310=============================
16311
16312Most of the tree optimizers rely on the data flow information provided
16313by the Static Single Assignment (SSA) form.  We implement the SSA form
16314as described in 'R. Cytron, J. Ferrante, B. Rosen, M. Wegman, and K.
16315Zadeck. Efficiently Computing Static Single Assignment Form and the
16316Control Dependence Graph. ACM Transactions on Programming Languages and
16317Systems, 13(4):451-490, October 1991'.
16318
16319 The SSA form is based on the premise that program variables are
16320assigned in exactly one location in the program.  Multiple assignments
16321to the same variable create new versions of that variable.  Naturally,
16322actual programs are seldom in SSA form initially because variables tend
16323to be assigned multiple times.  The compiler modifies the program
16324representation so that every time a variable is assigned in the code, a
16325new version of the variable is created.  Different versions of the same
16326variable are distinguished by subscripting the variable name with its
16327version number.  Variables used in the right-hand side of expressions
16328are renamed so that their version number matches that of the most recent
16329assignment.
16330
16331 We represent variable versions using 'SSA_NAME' nodes.  The renaming
16332process in 'tree-ssa.c' wraps every real and virtual operand with an
16333'SSA_NAME' node which contains the version number and the statement that
16334created the 'SSA_NAME'.  Only definitions and virtual definitions may
16335create new 'SSA_NAME' nodes.
16336
16337 Sometimes, flow of control makes it impossible to determine the most
16338recent version of a variable.  In these cases, the compiler inserts an
16339artificial definition for that variable called "PHI function" or "PHI
16340node".  This new definition merges all the incoming versions of the
16341variable to create a new name for it.  For instance,
16342
16343     if (...)
16344       a_1 = 5;
16345     else if (...)
16346       a_2 = 2;
16347     else
16348       a_3 = 13;
16349
16350     # a_4 = PHI <a_1, a_2, a_3>
16351     return a_4;
16352
16353 Since it is not possible to determine which of the three branches will
16354be taken at runtime, we don't know which of 'a_1', 'a_2' or 'a_3' to use
16355at the return statement.  So, the SSA renamer creates a new version
16356'a_4' which is assigned the result of "merging" 'a_1', 'a_2' and 'a_3'.
16357Hence, PHI nodes mean "one of these operands.  I don't know which".
16358
16359 The following macros can be used to examine PHI nodes
16360
16361 -- Macro: PHI_RESULT (PHI)
16362     Returns the 'SSA_NAME' created by PHI node PHI (i.e., PHI's LHS).
16363
16364 -- Macro: PHI_NUM_ARGS (PHI)
16365     Returns the number of arguments in PHI.  This number is exactly the
16366     number of incoming edges to the basic block holding PHI.
16367
16368 -- Macro: PHI_ARG_ELT (PHI, I)
16369     Returns a tuple representing the Ith argument of PHI.  Each element
16370     of this tuple contains an 'SSA_NAME' VAR and the incoming edge
16371     through which VAR flows.
16372
16373 -- Macro: PHI_ARG_EDGE (PHI, I)
16374     Returns the incoming edge for the Ith argument of PHI.
16375
16376 -- Macro: PHI_ARG_DEF (PHI, I)
16377     Returns the 'SSA_NAME' for the Ith argument of PHI.
16378
1637913.3.1 Preserving the SSA form
16380------------------------------
16381
16382Some optimization passes make changes to the function that invalidate
16383the SSA property.  This can happen when a pass has added new symbols or
16384changed the program so that variables that were previously aliased
16385aren't anymore.  Whenever something like this happens, the affected
16386symbols must be renamed into SSA form again.  Transformations that emit
16387new code or replicate existing statements will also need to update the
16388SSA form.
16389
16390 Since GCC implements two different SSA forms for register and virtual
16391variables, keeping the SSA form up to date depends on whether you are
16392updating register or virtual names.  In both cases, the general idea
16393behind incremental SSA updates is similar: when new SSA names are
16394created, they typically are meant to replace other existing names in the
16395program.
16396
16397 For instance, given the following code:
16398
16399          1  L0:
16400          2  x_1 = PHI (0, x_5)
16401          3  if (x_1 < 10)
16402          4    if (x_1 > 7)
16403          5      y_2 = 0
16404          6    else
16405          7      y_3 = x_1 + x_7
16406          8    endif
16407          9    x_5 = x_1 + 1
16408          10   goto L0;
16409          11 endif
16410
16411 Suppose that we insert new names 'x_10' and 'x_11' (lines '4' and '8').
16412
16413          1  L0:
16414          2  x_1 = PHI (0, x_5)
16415          3  if (x_1 < 10)
16416          4    x_10 = ...
16417          5    if (x_1 > 7)
16418          6      y_2 = 0
16419          7    else
16420          8      x_11 = ...
16421          9      y_3 = x_1 + x_7
16422          10   endif
16423          11   x_5 = x_1 + 1
16424          12   goto L0;
16425          13 endif
16426
16427 We want to replace all the uses of 'x_1' with the new definitions of
16428'x_10' and 'x_11'.  Note that the only uses that should be replaced are
16429those at lines '5', '9' and '11'.  Also, the use of 'x_7' at line '9'
16430should _not_ be replaced (this is why we cannot just mark symbol 'x' for
16431renaming).
16432
16433 Additionally, we may need to insert a PHI node at line '11' because
16434that is a merge point for 'x_10' and 'x_11'.  So the use of 'x_1' at
16435line '11' will be replaced with the new PHI node.  The insertion of PHI
16436nodes is optional.  They are not strictly necessary to preserve the SSA
16437form, and depending on what the caller inserted, they may not even be
16438useful for the optimizers.
16439
16440 Updating the SSA form is a two step process.  First, the pass has to
16441identify which names need to be updated and/or which symbols need to be
16442renamed into SSA form for the first time.  When new names are introduced
16443to replace existing names in the program, the mapping between the old
16444and the new names are registered by calling 'register_new_name_mapping'
16445(note that if your pass creates new code by duplicating basic blocks,
16446the call to 'tree_duplicate_bb' will set up the necessary mappings
16447automatically).
16448
16449 After the replacement mappings have been registered and new symbols
16450marked for renaming, a call to 'update_ssa' makes the registered
16451changes.  This can be done with an explicit call or by creating 'TODO'
16452flags in the 'tree_opt_pass' structure for your pass.  There are several
16453'TODO' flags that control the behavior of 'update_ssa':
16454
16455   * 'TODO_update_ssa'.  Update the SSA form inserting PHI nodes for
16456     newly exposed symbols and virtual names marked for updating.  When
16457     updating real names, only insert PHI nodes for a real name 'O_j' in
16458     blocks reached by all the new and old definitions for 'O_j'.  If
16459     the iterated dominance frontier for 'O_j' is not pruned, we may end
16460     up inserting PHI nodes in blocks that have one or more edges with
16461     no incoming definition for 'O_j'.  This would lead to uninitialized
16462     warnings for 'O_j''s symbol.
16463
16464   * 'TODO_update_ssa_no_phi'.  Update the SSA form without inserting
16465     any new PHI nodes at all.  This is used by passes that have either
16466     inserted all the PHI nodes themselves or passes that need only to
16467     patch use-def and def-def chains for virtuals (e.g., DCE).
16468
16469   * 'TODO_update_ssa_full_phi'.  Insert PHI nodes everywhere they are
16470     needed.  No pruning of the IDF is done.  This is used by passes
16471     that need the PHI nodes for 'O_j' even if it means that some
16472     arguments will come from the default definition of 'O_j''s symbol
16473     (e.g., 'pass_linear_transform').
16474
16475     WARNING: If you need to use this flag, chances are that your pass
16476     may be doing something wrong.  Inserting PHI nodes for an old name
16477     where not all edges carry a new replacement may lead to silent
16478     codegen errors or spurious uninitialized warnings.
16479
16480   * 'TODO_update_ssa_only_virtuals'.  Passes that update the SSA form
16481     on their own may want to delegate the updating of virtual names to
16482     the generic updater.  Since FUD chains are easier to maintain, this
16483     simplifies the work they need to do.  NOTE: If this flag is used,
16484     any OLD->NEW mappings for real names are explicitly destroyed and
16485     only the symbols marked for renaming are processed.
16486
1648713.3.2 Preserving the virtual SSA form
16488--------------------------------------
16489
16490The virtual SSA form is harder to preserve than the non-virtual SSA form
16491mainly because the set of virtual operands for a statement may change at
16492what some would consider unexpected times.  In general, statement
16493modifications should be bracketed between calls to 'push_stmt_changes'
16494and 'pop_stmt_changes'.  For example,
16495
16496         munge_stmt (tree stmt)
16497         {
16498            push_stmt_changes (&stmt);
16499            ... rewrite STMT ...
16500            pop_stmt_changes (&stmt);
16501         }
16502
16503 The call to 'push_stmt_changes' saves the current state of the
16504statement operands and the call to 'pop_stmt_changes' compares the saved
16505state with the current one and does the appropriate symbol marking for
16506the SSA renamer.
16507
16508 It is possible to modify several statements at a time, provided that
16509'push_stmt_changes' and 'pop_stmt_changes' are called in LIFO order, as
16510when processing a stack of statements.
16511
16512 Additionally, if the pass discovers that it did not need to make
16513changes to the statement after calling 'push_stmt_changes', it can
16514simply discard the topmost change buffer by calling
16515'discard_stmt_changes'.  This will avoid the expensive operand re-scan
16516operation and the buffer comparison that determines if symbols need to
16517be marked for renaming.
16518
1651913.3.3 Examining 'SSA_NAME' nodes
16520---------------------------------
16521
16522The following macros can be used to examine 'SSA_NAME' nodes
16523
16524 -- Macro: SSA_NAME_DEF_STMT (VAR)
16525     Returns the statement S that creates the 'SSA_NAME' VAR.  If S is
16526     an empty statement (i.e., 'IS_EMPTY_STMT (S)' returns 'true'), it
16527     means that the first reference to this variable is a USE or a VUSE.
16528
16529 -- Macro: SSA_NAME_VERSION (VAR)
16530     Returns the version number of the 'SSA_NAME' object VAR.
16531
1653213.3.4 Walking use-def chains
16533-----------------------------
16534
16535 -- Tree SSA function: void walk_use_def_chains (VAR, FN, DATA)
16536
16537     Walks use-def chains starting at the 'SSA_NAME' node VAR.  Calls
16538     function FN at each reaching definition found.  Function FN takes
16539     three arguments: VAR, its defining statement (DEF_STMT) and a
16540     generic pointer to whatever state information that FN may want to
16541     maintain (DATA).  Function FN is able to stop the walk by returning
16542     'true', otherwise in order to continue the walk, FN should return
16543     'false'.
16544
16545     Note, that if DEF_STMT is a 'PHI' node, the semantics are slightly
16546     different.  For each argument ARG of the PHI node, this function
16547     will:
16548
16549       1. Walk the use-def chains for ARG.
16550       2. Call 'FN (ARG, PHI, DATA)'.
16551
16552     Note how the first argument to FN is no longer the original
16553     variable VAR, but the PHI argument currently being examined.  If FN
16554     wants to get at VAR, it should call 'PHI_RESULT' (PHI).
16555
1655613.3.5 Walking the dominator tree
16557---------------------------------
16558
16559 -- Tree SSA function: void walk_dominator_tree (WALK_DATA, BB)
16560
16561     This function walks the dominator tree for the current CFG calling
16562     a set of callback functions defined in STRUCT DOM_WALK_DATA in
16563     'domwalk.h'.  The call back functions you need to define give you
16564     hooks to execute custom code at various points during traversal:
16565
16566       1. Once to initialize any local data needed while processing BB
16567          and its children.  This local data is pushed into an internal
16568          stack which is automatically pushed and popped as the walker
16569          traverses the dominator tree.
16570
16571       2. Once before traversing all the statements in the BB.
16572
16573       3. Once for every statement inside BB.
16574
16575       4. Once after traversing all the statements and before recursing
16576          into BB's dominator children.
16577
16578       5. It then recurses into all the dominator children of BB.
16579
16580       6. After recursing into all the dominator children of BB it can,
16581          optionally, traverse every statement in BB again (i.e.,
16582          repeating steps 2 and 3).
16583
16584       7. Once after walking the statements in BB and BB's dominator
16585          children.  At this stage, the block local data stack is
16586          popped.
16587
16588
16589File: gccint.info,  Node: Alias analysis,  Next: Memory model,  Prev: SSA,  Up: Tree SSA
16590
1659113.4 Alias analysis
16592===================
16593
16594Alias analysis in GIMPLE SSA form consists of two pieces.  First the
16595virtual SSA web ties conflicting memory accesses and provides a SSA
16596use-def chain and SSA immediate-use chains for walking possibly
16597dependent memory accesses.  Second an alias-oracle can be queried to
16598disambiguate explicit and implicit memory references.
16599
16600  1. Memory SSA form.
16601
16602     All statements that may use memory have exactly one accompanied use
16603     of a virtual SSA name that represents the state of memory at the
16604     given point in the IL.
16605
16606     All statements that may define memory have exactly one accompanied
16607     definition of a virtual SSA name using the previous state of memory
16608     and defining the new state of memory after the given point in the
16609     IL.
16610
16611          int i;
16612          int foo (void)
16613          {
16614            # .MEM_3 = VDEF <.MEM_2(D)>
16615            i = 1;
16616            # VUSE <.MEM_3>
16617            return i;
16618          }
16619
16620     The virtual SSA names in this case are '.MEM_2(D)' and '.MEM_3'.
16621     The store to the global variable 'i' defines '.MEM_3' invalidating
16622     '.MEM_2(D)'.  The load from 'i' uses that new state '.MEM_3'.
16623
16624     The virtual SSA web serves as constraints to SSA optimizers
16625     preventing illegitimate code-motion and optimization.  It also
16626     provides a way to walk related memory statements.
16627
16628  2. Points-to and escape analysis.
16629
16630     Points-to analysis builds a set of constraints from the GIMPLE SSA
16631     IL representing all pointer operations and facts we do or do not
16632     know about pointers.  Solving this set of constraints yields a
16633     conservatively correct solution for each pointer variable in the
16634     program (though we are only interested in SSA name pointers) as to
16635     what it may possibly point to.
16636
16637     This points-to solution for a given SSA name pointer is stored in
16638     the 'pt_solution' sub-structure of the 'SSA_NAME_PTR_INFO' record.
16639     The following accessor functions are available:
16640
16641        * 'pt_solution_includes'
16642        * 'pt_solutions_intersect'
16643
16644     Points-to analysis also computes the solution for two special set
16645     of pointers, 'ESCAPED' and 'CALLUSED'.  Those represent all memory
16646     that has escaped the scope of analysis or that is used by pure or
16647     nested const calls.
16648
16649  3. Type-based alias analysis
16650
16651     Type-based alias analysis is frontend dependent though generic
16652     support is provided by the middle-end in 'alias.c'.  TBAA code is
16653     used by both tree optimizers and RTL optimizers.
16654
16655     Every language that wishes to perform language-specific alias
16656     analysis should define a function that computes, given a 'tree'
16657     node, an alias set for the node.  Nodes in different alias sets are
16658     not allowed to alias.  For an example, see the C front-end function
16659     'c_get_alias_set'.
16660
16661  4. Tree alias-oracle
16662
16663     The tree alias-oracle provides means to disambiguate two memory
16664     references and memory references against statements.  The following
16665     queries are available:
16666
16667        * 'refs_may_alias_p'
16668        * 'ref_maybe_used_by_stmt_p'
16669        * 'stmt_may_clobber_ref_p'
16670
16671     In addition to those two kind of statement walkers are available
16672     walking statements related to a reference ref.
16673     'walk_non_aliased_vuses' walks over dominating memory defining
16674     statements and calls back if the statement does not clobber ref
16675     providing the non-aliased VUSE. The walk stops at the first
16676     clobbering statement or if asked to.  'walk_aliased_vdefs' walks
16677     over dominating memory defining statements and calls back on each
16678     statement clobbering ref providing its aliasing VDEF. The walk
16679     stops if asked to.
16680
16681
16682File: gccint.info,  Node: Memory model,  Prev: Alias analysis,  Up: Tree SSA
16683
1668413.5 Memory model
16685=================
16686
16687The memory model used by the middle-end models that of the C/C++
16688languages.  The middle-end has the notion of an effective type of a
16689memory region which is used for type-based alias analysis.
16690
16691 The following is a refinement of ISO C99 6.5/6, clarifying the block
16692copy case to follow common sense and extending the concept of a dynamic
16693effective type to objects with a declared type as required for C++.
16694
16695     The effective type of an object for an access to its stored value is
16696     the declared type of the object or the effective type determined by
16697     a previous store to it.  If a value is stored into an object through
16698     an lvalue having a type that is not a character type, then the
16699     type of the lvalue becomes the effective type of the object for that
16700     access and for subsequent accesses that do not modify the stored value.
16701     If a value is copied into an object using memcpy or memmove,
16702     or is copied as an array of character type, then the effective type
16703     of the modified object for that access and for subsequent accesses that
16704     do not modify the value is undetermined.  For all other accesses to an
16705     object, the effective type of the object is simply the type of the
16706     lvalue used for the access.
16707
16708
16709File: gccint.info,  Node: Loop Analysis and Representation,  Next: Control Flow,  Prev: Tree SSA,  Up: Top
16710
1671114 Analysis and Representation of Loops
16712***************************************
16713
16714GCC provides extensive infrastructure for work with natural loops, i.e.,
16715strongly connected components of CFG with only one entry block.  This
16716chapter describes representation of loops in GCC, both on GIMPLE and in
16717RTL, as well as the interfaces to loop-related analyses (induction
16718variable analysis and number of iterations analysis).
16719
16720* Menu:
16721
16722* Loop representation::         Representation and analysis of loops.
16723* Loop querying::               Getting information about loops.
16724* Loop manipulation::           Loop manipulation functions.
16725* LCSSA::                       Loop-closed SSA form.
16726* Scalar evolutions::           Induction variables on GIMPLE.
16727* loop-iv::                     Induction variables on RTL.
16728* Number of iterations::        Number of iterations analysis.
16729* Dependency analysis::         Data dependency analysis.
16730* Lambda::                      Linear loop transformations framework.
16731* Omega::                       A solver for linear programming problems.
16732
16733
16734File: gccint.info,  Node: Loop representation,  Next: Loop querying,  Up: Loop Analysis and Representation
16735
1673614.1 Loop representation
16737========================
16738
16739This chapter describes the representation of loops in GCC, and functions
16740that can be used to build, modify and analyze this representation.  Most
16741of the interfaces and data structures are declared in 'cfgloop.h'.  At
16742the moment, loop structures are analyzed and this information is updated
16743only by the optimization passes that deal with loops, but some efforts
16744are being made to make it available throughout most of the optimization
16745passes.
16746
16747 In general, a natural loop has one entry block (header) and possibly
16748several back edges (latches) leading to the header from the inside of
16749the loop.  Loops with several latches may appear if several loops share
16750a single header, or if there is a branching in the middle of the loop.
16751The representation of loops in GCC however allows only loops with a
16752single latch.  During loop analysis, headers of such loops are split and
16753forwarder blocks are created in order to disambiguate their structures.
16754Heuristic based on profile information and structure of the induction
16755variables in the loops is used to determine whether the latches
16756correspond to sub-loops or to control flow in a single loop.  This means
16757that the analysis sometimes changes the CFG, and if you run it in the
16758middle of an optimization pass, you must be able to deal with the new
16759blocks.  You may avoid CFG changes by passing
16760'LOOPS_MAY_HAVE_MULTIPLE_LATCHES' flag to the loop discovery, note
16761however that most other loop manipulation functions will not work
16762correctly for loops with multiple latch edges (the functions that only
16763query membership of blocks to loops and subloop relationships, or
16764enumerate and test loop exits, can be expected to work).
16765
16766 Body of the loop is the set of blocks that are dominated by its header,
16767and reachable from its latch against the direction of edges in CFG.  The
16768loops are organized in a containment hierarchy (tree) such that all the
16769loops immediately contained inside loop L are the children of L in the
16770tree.  This tree is represented by the 'struct loops' structure.  The
16771root of this tree is a fake loop that contains all blocks in the
16772function.  Each of the loops is represented in a 'struct loop'
16773structure.  Each loop is assigned an index ('num' field of the 'struct
16774loop' structure), and the pointer to the loop is stored in the
16775corresponding field of the 'larray' vector in the loops structure.  The
16776indices do not have to be continuous, there may be empty ('NULL')
16777entries in the 'larray' created by deleting loops.  Also, there is no
16778guarantee on the relative order of a loop and its subloops in the
16779numbering.  The index of a loop never changes.
16780
16781 The entries of the 'larray' field should not be accessed directly.  The
16782function 'get_loop' returns the loop description for a loop with the
16783given index.  'number_of_loops' function returns number of loops in the
16784function.  To traverse all loops, use 'FOR_EACH_LOOP' macro.  The
16785'flags' argument of the macro is used to determine the direction of
16786traversal and the set of loops visited.  Each loop is guaranteed to be
16787visited exactly once, regardless of the changes to the loop tree, and
16788the loops may be removed during the traversal.  The newly created loops
16789are never traversed, if they need to be visited, this must be done
16790separately after their creation.  The 'FOR_EACH_LOOP' macro allocates
16791temporary variables.  If the 'FOR_EACH_LOOP' loop were ended using break
16792or goto, they would not be released; 'FOR_EACH_LOOP_BREAK' macro must be
16793used instead.
16794
16795 Each basic block contains the reference to the innermost loop it
16796belongs to ('loop_father').  For this reason, it is only possible to
16797have one 'struct loops' structure initialized at the same time for each
16798CFG.  The global variable 'current_loops' contains the 'struct loops'
16799structure.  Many of the loop manipulation functions assume that
16800dominance information is up-to-date.
16801
16802 The loops are analyzed through 'loop_optimizer_init' function.  The
16803argument of this function is a set of flags represented in an integer
16804bitmask.  These flags specify what other properties of the loop
16805structures should be calculated/enforced and preserved later:
16806
16807   * 'LOOPS_MAY_HAVE_MULTIPLE_LATCHES': If this flag is set, no changes
16808     to CFG will be performed in the loop analysis, in particular, loops
16809     with multiple latch edges will not be disambiguated.  If a loop has
16810     multiple latches, its latch block is set to NULL.  Most of the loop
16811     manipulation functions will not work for loops in this shape.  No
16812     other flags that require CFG changes can be passed to
16813     loop_optimizer_init.
16814   * 'LOOPS_HAVE_PREHEADERS': Forwarder blocks are created in such a way
16815     that each loop has only one entry edge, and additionally, the
16816     source block of this entry edge has only one successor.  This
16817     creates a natural place where the code can be moved out of the
16818     loop, and ensures that the entry edge of the loop leads from its
16819     immediate super-loop.
16820   * 'LOOPS_HAVE_SIMPLE_LATCHES': Forwarder blocks are created to force
16821     the latch block of each loop to have only one successor.  This
16822     ensures that the latch of the loop does not belong to any of its
16823     sub-loops, and makes manipulation with the loops significantly
16824     easier.  Most of the loop manipulation functions assume that the
16825     loops are in this shape.  Note that with this flag, the "normal"
16826     loop without any control flow inside and with one exit consists of
16827     two basic blocks.
16828   * 'LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS': Basic blocks and edges in
16829     the strongly connected components that are not natural loops (have
16830     more than one entry block) are marked with 'BB_IRREDUCIBLE_LOOP'
16831     and 'EDGE_IRREDUCIBLE_LOOP' flags.  The flag is not set for blocks
16832     and edges that belong to natural loops that are in such an
16833     irreducible region (but it is set for the entry and exit edges of
16834     such a loop, if they lead to/from this region).
16835   * 'LOOPS_HAVE_RECORDED_EXITS': The lists of exits are recorded and
16836     updated for each loop.  This makes some functions (e.g.,
16837     'get_loop_exit_edges') more efficient.  Some functions (e.g.,
16838     'single_exit') can be used only if the lists of exits are recorded.
16839
16840 These properties may also be computed/enforced later, using functions
16841'create_preheaders', 'force_single_succ_latches',
16842'mark_irreducible_loops' and 'record_loop_exits'.
16843
16844 The memory occupied by the loops structures should be freed with
16845'loop_optimizer_finalize' function.
16846
16847 The CFG manipulation functions in general do not update loop
16848structures.  Specialized versions that additionally do so are provided
16849for the most common tasks.  On GIMPLE, 'cleanup_tree_cfg_loop' function
16850can be used to cleanup CFG while updating the loops structures if
16851'current_loops' is set.
16852
16853
16854File: gccint.info,  Node: Loop querying,  Next: Loop manipulation,  Prev: Loop representation,  Up: Loop Analysis and Representation
16855
1685614.2 Loop querying
16857==================
16858
16859The functions to query the information about loops are declared in
16860'cfgloop.h'.  Some of the information can be taken directly from the
16861structures.  'loop_father' field of each basic block contains the
16862innermost loop to that the block belongs.  The most useful fields of
16863loop structure (that are kept up-to-date at all times) are:
16864
16865   * 'header', 'latch': Header and latch basic blocks of the loop.
16866   * 'num_nodes': Number of basic blocks in the loop (including the
16867     basic blocks of the sub-loops).
16868   * 'depth': The depth of the loop in the loops tree, i.e., the number
16869     of super-loops of the loop.
16870   * 'outer', 'inner', 'next': The super-loop, the first sub-loop, and
16871     the sibling of the loop in the loops tree.
16872
16873 There are other fields in the loop structures, many of them used only
16874by some of the passes, or not updated during CFG changes; in general,
16875they should not be accessed directly.
16876
16877 The most important functions to query loop structures are:
16878
16879   * 'flow_loops_dump': Dumps the information about loops to a file.
16880   * 'verify_loop_structure': Checks consistency of the loop structures.
16881   * 'loop_latch_edge': Returns the latch edge of a loop.
16882   * 'loop_preheader_edge': If loops have preheaders, returns the
16883     preheader edge of a loop.
16884   * 'flow_loop_nested_p': Tests whether loop is a sub-loop of another
16885     loop.
16886   * 'flow_bb_inside_loop_p': Tests whether a basic block belongs to a
16887     loop (including its sub-loops).
16888   * 'find_common_loop': Finds the common super-loop of two loops.
16889   * 'superloop_at_depth': Returns the super-loop of a loop with the
16890     given depth.
16891   * 'tree_num_loop_insns', 'num_loop_insns': Estimates the number of
16892     insns in the loop, on GIMPLE and on RTL.
16893   * 'loop_exit_edge_p': Tests whether edge is an exit from a loop.
16894   * 'mark_loop_exit_edges': Marks all exit edges of all loops with
16895     'EDGE_LOOP_EXIT' flag.
16896   * 'get_loop_body', 'get_loop_body_in_dom_order',
16897     'get_loop_body_in_bfs_order': Enumerates the basic blocks in the
16898     loop in depth-first search order in reversed CFG, ordered by
16899     dominance relation, and breath-first search order, respectively.
16900   * 'single_exit': Returns the single exit edge of the loop, or 'NULL'
16901     if the loop has more than one exit.  You can only use this function
16902     if LOOPS_HAVE_MARKED_SINGLE_EXITS property is used.
16903   * 'get_loop_exit_edges': Enumerates the exit edges of a loop.
16904   * 'just_once_each_iteration_p': Returns true if the basic block is
16905     executed exactly once during each iteration of a loop (that is, it
16906     does not belong to a sub-loop, and it dominates the latch of the
16907     loop).
16908
16909
16910File: gccint.info,  Node: Loop manipulation,  Next: LCSSA,  Prev: Loop querying,  Up: Loop Analysis and Representation
16911
1691214.3 Loop manipulation
16913======================
16914
16915The loops tree can be manipulated using the following functions:
16916
16917   * 'flow_loop_tree_node_add': Adds a node to the tree.
16918   * 'flow_loop_tree_node_remove': Removes a node from the tree.
16919   * 'add_bb_to_loop': Adds a basic block to a loop.
16920   * 'remove_bb_from_loops': Removes a basic block from loops.
16921
16922 Most low-level CFG functions update loops automatically.  The following
16923functions handle some more complicated cases of CFG manipulations:
16924
16925   * 'remove_path': Removes an edge and all blocks it dominates.
16926   * 'split_loop_exit_edge': Splits exit edge of the loop, ensuring that
16927     PHI node arguments remain in the loop (this ensures that
16928     loop-closed SSA form is preserved).  Only useful on GIMPLE.
16929
16930 Finally, there are some higher-level loop transformations implemented.
16931While some of them are written so that they should work on non-innermost
16932loops, they are mostly untested in that case, and at the moment, they
16933are only reliable for the innermost loops:
16934
16935   * 'create_iv': Creates a new induction variable.  Only works on
16936     GIMPLE.  'standard_iv_increment_position' can be used to find a
16937     suitable place for the iv increment.
16938   * 'duplicate_loop_to_header_edge',
16939     'tree_duplicate_loop_to_header_edge': These functions (on RTL and
16940     on GIMPLE) duplicate the body of the loop prescribed number of
16941     times on one of the edges entering loop header, thus performing
16942     either loop unrolling or loop peeling.  'can_duplicate_loop_p'
16943     ('can_unroll_loop_p' on GIMPLE) must be true for the duplicated
16944     loop.
16945   * 'loop_version', 'tree_ssa_loop_version': These function create a
16946     copy of a loop, and a branch before them that selects one of them
16947     depending on the prescribed condition.  This is useful for
16948     optimizations that need to verify some assumptions in runtime (one
16949     of the copies of the loop is usually left unchanged, while the
16950     other one is transformed in some way).
16951   * 'tree_unroll_loop': Unrolls the loop, including peeling the extra
16952     iterations to make the number of iterations divisible by unroll
16953     factor, updating the exit condition, and removing the exits that
16954     now cannot be taken.  Works only on GIMPLE.
16955
16956
16957File: gccint.info,  Node: LCSSA,  Next: Scalar evolutions,  Prev: Loop manipulation,  Up: Loop Analysis and Representation
16958
1695914.4 Loop-closed SSA form
16960=========================
16961
16962Throughout the loop optimizations on tree level, one extra condition is
16963enforced on the SSA form: No SSA name is used outside of the loop in
16964that it is defined.  The SSA form satisfying this condition is called
16965"loop-closed SSA form" - LCSSA.  To enforce LCSSA, PHI nodes must be
16966created at the exits of the loops for the SSA names that are used
16967outside of them.  Only the real operands (not virtual SSA names) are
16968held in LCSSA, in order to save memory.
16969
16970 There are various benefits of LCSSA:
16971
16972   * Many optimizations (value range analysis, final value replacement)
16973     are interested in the values that are defined in the loop and used
16974     outside of it, i.e., exactly those for that we create new PHI
16975     nodes.
16976   * In induction variable analysis, it is not necessary to specify the
16977     loop in that the analysis should be performed - the scalar
16978     evolution analysis always returns the results with respect to the
16979     loop in that the SSA name is defined.
16980   * It makes updating of SSA form during loop transformations simpler.
16981     Without LCSSA, operations like loop unrolling may force creation of
16982     PHI nodes arbitrarily far from the loop, while in LCSSA, the SSA
16983     form can be updated locally.  However, since we only keep real
16984     operands in LCSSA, we cannot use this advantage (we could have
16985     local updating of real operands, but it is not much more efficient
16986     than to use generic SSA form updating for it as well; the amount of
16987     changes to SSA is the same).
16988
16989 However, it also means LCSSA must be updated.  This is usually
16990straightforward, unless you create a new value in loop and use it
16991outside, or unless you manipulate loop exit edges (functions are
16992provided to make these manipulations simple).
16993'rewrite_into_loop_closed_ssa' is used to rewrite SSA form to LCSSA, and
16994'verify_loop_closed_ssa' to check that the invariant of LCSSA is
16995preserved.
16996
16997
16998File: gccint.info,  Node: Scalar evolutions,  Next: loop-iv,  Prev: LCSSA,  Up: Loop Analysis and Representation
16999
1700014.5 Scalar evolutions
17001======================
17002
17003Scalar evolutions (SCEV) are used to represent results of induction
17004variable analysis on GIMPLE.  They enable us to represent variables with
17005complicated behavior in a simple and consistent way (we only use it to
17006express values of polynomial induction variables, but it is possible to
17007extend it).  The interfaces to SCEV analysis are declared in
17008'tree-scalar-evolution.h'.  To use scalar evolutions analysis,
17009'scev_initialize' must be used.  To stop using SCEV, 'scev_finalize'
17010should be used.  SCEV analysis caches results in order to save time and
17011memory.  This cache however is made invalid by most of the loop
17012transformations, including removal of code.  If such a transformation is
17013performed, 'scev_reset' must be called to clean the caches.
17014
17015 Given an SSA name, its behavior in loops can be analyzed using the
17016'analyze_scalar_evolution' function.  The returned SCEV however does not
17017have to be fully analyzed and it may contain references to other SSA
17018names defined in the loop.  To resolve these (potentially recursive)
17019references, 'instantiate_parameters' or 'resolve_mixers' functions must
17020be used.  'instantiate_parameters' is useful when you use the results of
17021SCEV only for some analysis, and when you work with whole nest of loops
17022at once.  It will try replacing all SSA names by their SCEV in all
17023loops, including the super-loops of the current loop, thus providing a
17024complete information about the behavior of the variable in the loop
17025nest.  'resolve_mixers' is useful if you work with only one loop at a
17026time, and if you possibly need to create code based on the value of the
17027induction variable.  It will only resolve the SSA names defined in the
17028current loop, leaving the SSA names defined outside unchanged, even if
17029their evolution in the outer loops is known.
17030
17031 The SCEV is a normal tree expression, except for the fact that it may
17032contain several special tree nodes.  One of them is 'SCEV_NOT_KNOWN',
17033used for SSA names whose value cannot be expressed.  The other one is
17034'POLYNOMIAL_CHREC'.  Polynomial chrec has three arguments - base, step
17035and loop (both base and step may contain further polynomial chrecs).
17036Type of the expression and of base and step must be the same.  A
17037variable has evolution 'POLYNOMIAL_CHREC(base, step, loop)' if it is (in
17038the specified loop) equivalent to 'x_1' in the following example
17039
17040     while (...)
17041       {
17042         x_1 = phi (base, x_2);
17043         x_2 = x_1 + step;
17044       }
17045
17046 Note that this includes the language restrictions on the operations.
17047For example, if we compile C code and 'x' has signed type, then the
17048overflow in addition would cause undefined behavior, and we may assume
17049that this does not happen.  Hence, the value with this SCEV cannot
17050overflow (which restricts the number of iterations of such a loop).
17051
17052 In many cases, one wants to restrict the attention just to affine
17053induction variables.  In this case, the extra expressive power of SCEV
17054is not useful, and may complicate the optimizations.  In this case,
17055'simple_iv' function may be used to analyze a value - the result is a
17056loop-invariant base and step.
17057
17058
17059File: gccint.info,  Node: loop-iv,  Next: Number of iterations,  Prev: Scalar evolutions,  Up: Loop Analysis and Representation
17060
1706114.6 IV analysis on RTL
17062=======================
17063
17064The induction variable on RTL is simple and only allows analysis of
17065affine induction variables, and only in one loop at once.  The interface
17066is declared in 'cfgloop.h'.  Before analyzing induction variables in a
17067loop L, 'iv_analysis_loop_init' function must be called on L. After the
17068analysis (possibly calling 'iv_analysis_loop_init' for several loops) is
17069finished, 'iv_analysis_done' should be called.  The following functions
17070can be used to access the results of the analysis:
17071
17072   * 'iv_analyze': Analyzes a single register used in the given insn.
17073     If no use of the register in this insn is found, the following
17074     insns are scanned, so that this function can be called on the insn
17075     returned by get_condition.
17076   * 'iv_analyze_result': Analyzes result of the assignment in the given
17077     insn.
17078   * 'iv_analyze_expr': Analyzes a more complicated expression.  All its
17079     operands are analyzed by 'iv_analyze', and hence they must be used
17080     in the specified insn or one of the following insns.
17081
17082 The description of the induction variable is provided in 'struct
17083rtx_iv'.  In order to handle subregs, the representation is a bit
17084complicated; if the value of the 'extend' field is not 'UNKNOWN', the
17085value of the induction variable in the i-th iteration is
17086
17087     delta + mult * extend_{extend_mode} (subreg_{mode} (base + i * step)),
17088
17089 with the following exception: if 'first_special' is true, then the
17090value in the first iteration (when 'i' is zero) is 'delta + mult *
17091base'.  However, if 'extend' is equal to 'UNKNOWN', then 'first_special'
17092must be false, 'delta' 0, 'mult' 1 and the value in the i-th iteration
17093is
17094
17095     subreg_{mode} (base + i * step)
17096
17097 The function 'get_iv_value' can be used to perform these calculations.
17098
17099
17100File: gccint.info,  Node: Number of iterations,  Next: Dependency analysis,  Prev: loop-iv,  Up: Loop Analysis and Representation
17101
1710214.7 Number of iterations analysis
17103==================================
17104
17105Both on GIMPLE and on RTL, there are functions available to determine
17106the number of iterations of a loop, with a similar interface.  The
17107number of iterations of a loop in GCC is defined as the number of
17108executions of the loop latch.  In many cases, it is not possible to
17109determine the number of iterations unconditionally - the determined
17110number is correct only if some assumptions are satisfied.  The analysis
17111tries to verify these conditions using the information contained in the
17112program; if it fails, the conditions are returned together with the
17113result.  The following information and conditions are provided by the
17114analysis:
17115
17116   * 'assumptions': If this condition is false, the rest of the
17117     information is invalid.
17118   * 'noloop_assumptions' on RTL, 'may_be_zero' on GIMPLE: If this
17119     condition is true, the loop exits in the first iteration.
17120   * 'infinite': If this condition is true, the loop is infinite.  This
17121     condition is only available on RTL.  On GIMPLE, conditions for
17122     finiteness of the loop are included in 'assumptions'.
17123   * 'niter_expr' on RTL, 'niter' on GIMPLE: The expression that gives
17124     number of iterations.  The number of iterations is defined as the
17125     number of executions of the loop latch.
17126
17127 Both on GIMPLE and on RTL, it necessary for the induction variable
17128analysis framework to be initialized (SCEV on GIMPLE, loop-iv on RTL).
17129On GIMPLE, the results are stored to 'struct tree_niter_desc' structure.
17130Number of iterations before the loop is exited through a given exit can
17131be determined using 'number_of_iterations_exit' function.  On RTL, the
17132results are returned in 'struct niter_desc' structure.  The
17133corresponding function is named 'check_simple_exit'.  There are also
17134functions that pass through all the exits of a loop and try to find one
17135with easy to determine number of iterations - 'find_loop_niter' on
17136GIMPLE and 'find_simple_exit' on RTL.  Finally, there are functions that
17137provide the same information, but additionally cache it, so that
17138repeated calls to number of iterations are not so costly -
17139'number_of_latch_executions' on GIMPLE and 'get_simple_loop_desc' on
17140RTL.
17141
17142 Note that some of these functions may behave slightly differently than
17143others - some of them return only the expression for the number of
17144iterations, and fail if there are some assumptions.  The function
17145'number_of_latch_executions' works only for single-exit loops.  The
17146function 'number_of_cond_exit_executions' can be used to determine
17147number of executions of the exit condition of a single-exit loop (i.e.,
17148the 'number_of_latch_executions' increased by one).
17149
17150
17151File: gccint.info,  Node: Dependency analysis,  Next: Lambda,  Prev: Number of iterations,  Up: Loop Analysis and Representation
17152
1715314.8 Data Dependency Analysis
17154=============================
17155
17156The code for the data dependence analysis can be found in
17157'tree-data-ref.c' and its interface and data structures are described in
17158'tree-data-ref.h'.  The function that computes the data dependences for
17159all the array and pointer references for a given loop is
17160'compute_data_dependences_for_loop'.  This function is currently used by
17161the linear loop transform and the vectorization passes.  Before calling
17162this function, one has to allocate two vectors: a first vector will
17163contain the set of data references that are contained in the analyzed
17164loop body, and the second vector will contain the dependence relations
17165between the data references.  Thus if the vector of data references is
17166of size 'n', the vector containing the dependence relations will contain
17167'n*n' elements.  However if the analyzed loop contains side effects,
17168such as calls that potentially can interfere with the data references in
17169the current analyzed loop, the analysis stops while scanning the loop
17170body for data references, and inserts a single 'chrec_dont_know' in the
17171dependence relation array.
17172
17173 The data references are discovered in a particular order during the
17174scanning of the loop body: the loop body is analyzed in execution order,
17175and the data references of each statement are pushed at the end of the
17176data reference array.  Two data references syntactically occur in the
17177program in the same order as in the array of data references.  This
17178syntactic order is important in some classical data dependence tests,
17179and mapping this order to the elements of this array avoids costly
17180queries to the loop body representation.
17181
17182 Three types of data references are currently handled: ARRAY_REF,
17183INDIRECT_REF and COMPONENT_REF.  The data structure for the data
17184reference is 'data_reference', where 'data_reference_p' is a name of a
17185pointer to the data reference structure.  The structure contains the
17186following elements:
17187
17188   * 'base_object_info': Provides information about the base object of
17189     the data reference and its access functions.  These access
17190     functions represent the evolution of the data reference in the loop
17191     relative to its base, in keeping with the classical meaning of the
17192     data reference access function for the support of arrays.  For
17193     example, for a reference 'a.b[i][j]', the base object is 'a.b' and
17194     the access functions, one for each array subscript, are: '{i_init,
17195     + i_step}_1, {j_init, +, j_step}_2'.
17196
17197   * 'first_location_in_loop': Provides information about the first
17198     location accessed by the data reference in the loop and about the
17199     access function used to represent evolution relative to this
17200     location.  This data is used to support pointers, and is not used
17201     for arrays (for which we have base objects).  Pointer accesses are
17202     represented as a one-dimensional access that starts from the first
17203     location accessed in the loop.  For example:
17204
17205                for1 i
17206                   for2 j
17207                    *((int *)p + i + j) = a[i][j];
17208
17209     The access function of the pointer access is '{0, + 4B}_for2'
17210     relative to 'p + i'.  The access functions of the array are
17211     '{i_init, + i_step}_for1' and '{j_init, +, j_step}_for2' relative
17212     to 'a'.
17213
17214     Usually, the object the pointer refers to is either unknown, or we
17215     can't prove that the access is confined to the boundaries of a
17216     certain object.
17217
17218     Two data references can be compared only if at least one of these
17219     two representations has all its fields filled for both data
17220     references.
17221
17222     The current strategy for data dependence tests is as follows: If
17223     both 'a' and 'b' are represented as arrays, compare 'a.base_object'
17224     and 'b.base_object'; if they are equal, apply dependence tests (use
17225     access functions based on base_objects).  Else if both 'a' and 'b'
17226     are represented as pointers, compare 'a.first_location' and
17227     'b.first_location'; if they are equal, apply dependence tests (use
17228     access functions based on first location).  However, if 'a' and 'b'
17229     are represented differently, only try to prove that the bases are
17230     definitely different.
17231
17232   * Aliasing information.
17233   * Alignment information.
17234
17235 The structure describing the relation between two data references is
17236'data_dependence_relation' and the shorter name for a pointer to such a
17237structure is 'ddr_p'.  This structure contains:
17238
17239   * a pointer to each data reference,
17240   * a tree node 'are_dependent' that is set to 'chrec_known' if the
17241     analysis has proved that there is no dependence between these two
17242     data references, 'chrec_dont_know' if the analysis was not able to
17243     determine any useful result and potentially there could exist a
17244     dependence between these data references, and 'are_dependent' is
17245     set to 'NULL_TREE' if there exist a dependence relation between the
17246     data references, and the description of this dependence relation is
17247     given in the 'subscripts', 'dir_vects', and 'dist_vects' arrays,
17248   * a boolean that determines whether the dependence relation can be
17249     represented by a classical distance vector,
17250   * an array 'subscripts' that contains a description of each subscript
17251     of the data references.  Given two array accesses a subscript is
17252     the tuple composed of the access functions for a given dimension.
17253     For example, given 'A[f1][f2][f3]' and 'B[g1][g2][g3]', there are
17254     three subscripts: '(f1, g1), (f2, g2), (f3, g3)'.
17255   * two arrays 'dir_vects' and 'dist_vects' that contain classical
17256     representations of the data dependences under the form of direction
17257     and distance dependence vectors,
17258   * an array of loops 'loop_nest' that contains the loops to which the
17259     distance and direction vectors refer to.
17260
17261 Several functions for pretty printing the information extracted by the
17262data dependence analysis are available: 'dump_ddrs' prints with a
17263maximum verbosity the details of a data dependence relations array,
17264'dump_dist_dir_vectors' prints only the classical distance and direction
17265vectors for a data dependence relations array, and
17266'dump_data_references' prints the details of the data references
17267contained in a data reference array.
17268
17269
17270File: gccint.info,  Node: Lambda,  Next: Omega,  Prev: Dependency analysis,  Up: Loop Analysis and Representation
17271
1727214.9 Linear loop transformations framework
17273==========================================
17274
17275Lambda is a framework that allows transformations of loops using
17276non-singular matrix based transformations of the iteration space and
17277loop bounds.  This allows compositions of skewing, scaling, interchange,
17278and reversal transformations.  These transformations are often used to
17279improve cache behavior or remove inner loop dependencies to allow
17280parallelization and vectorization to take place.
17281
17282 To perform these transformations, Lambda requires that the loopnest be
17283converted into an internal form that can be matrix transformed easily.
17284To do this conversion, the function 'gcc_loopnest_to_lambda_loopnest' is
17285provided.  If the loop cannot be transformed using lambda, this function
17286will return NULL.
17287
17288 Once a 'lambda_loopnest' is obtained from the conversion function, it
17289can be transformed by using 'lambda_loopnest_transform', which takes a
17290transformation matrix to apply.  Note that it is up to the caller to
17291verify that the transformation matrix is legal to apply to the loop
17292(dependence respecting, etc).  Lambda simply applies whatever matrix it
17293is told to provide.  It can be extended to make legal matrices out of
17294any non-singular matrix, but this is not currently implemented.
17295Legality of a matrix for a given loopnest can be verified using
17296'lambda_transform_legal_p'.
17297
17298 Given a transformed loopnest, conversion back into gcc IR is done by
17299'lambda_loopnest_to_gcc_loopnest'.  This function will modify the loops
17300so that they match the transformed loopnest.
17301
17302
17303File: gccint.info,  Node: Omega,  Prev: Lambda,  Up: Loop Analysis and Representation
17304
1730514.10 Omega a solver for linear programming problems
17306====================================================
17307
17308The data dependence analysis contains several solvers triggered
17309sequentially from the less complex ones to the more sophisticated.  For
17310ensuring the consistency of the results of these solvers, a data
17311dependence check pass has been implemented based on two different
17312solvers.  The second method that has been integrated to GCC is based on
17313the Omega dependence solver, written in the 1990's by William Pugh and
17314David Wonnacott.  Data dependence tests can be formulated using a subset
17315of the Presburger arithmetics that can be translated to linear
17316constraint systems.  These linear constraint systems can then be solved
17317using the Omega solver.
17318
17319 The Omega solver is using Fourier-Motzkin's algorithm for variable
17320elimination: a linear constraint system containing 'n' variables is
17321reduced to a linear constraint system with 'n-1' variables.  The Omega
17322solver can also be used for solving other problems that can be expressed
17323under the form of a system of linear equalities and inequalities.  The
17324Omega solver is known to have an exponential worst case, also known
17325under the name of "omega nightmare" in the literature, but in practice,
17326the omega test is known to be efficient for the common data dependence
17327tests.
17328
17329 The interface used by the Omega solver for describing the linear
17330programming problems is described in 'omega.h', and the solver is
17331'omega_solve_problem'.
17332
17333
17334File: gccint.info,  Node: Control Flow,  Next: Machine Desc,  Prev: Loop Analysis and Representation,  Up: Top
17335
1733615 Control Flow Graph
17337*********************
17338
17339A control flow graph (CFG) is a data structure built on top of the
17340intermediate code representation (the RTL or 'GIMPLE' instruction
17341stream) abstracting the control flow behavior of a function that is
17342being compiled.  The CFG is a directed graph where the vertices
17343represent basic blocks and edges represent possible transfer of control
17344flow from one basic block to another.  The data structures used to
17345represent the control flow graph are defined in 'basic-block.h'.
17346
17347 In GCC, the representation of control flow is maintained throughout the
17348compilation process, from constructing the CFG early in 'pass_build_cfg'
17349to 'pass_free_cfg' (see 'passes.c').  The CFG takes various different
17350modes and may undergo extensive manipulations, but the graph is always
17351valid between its construction and its release.  This way, transfer of
17352information such as data flow, a measured profile, or the loop tree, can
17353be propagated through the passes pipeline, and even from 'GIMPLE' to
17354'RTL'.
17355
17356 Often the CFG may be better viewed as integral part of instruction
17357chain, than structure built on the top of it.  Updating the compiler's
17358intermediate representation for instructions can not be easily done
17359without proper maintenance of the CFG simultaneously.
17360
17361* Menu:
17362
17363* Basic Blocks::           The definition and representation of basic blocks.
17364* Edges::                  Types of edges and their representation.
17365* Profile information::    Representation of frequencies and probabilities.
17366* Maintaining the CFG::    Keeping the control flow graph and up to date.
17367* Liveness information::   Using and maintaining liveness information.
17368
17369
17370File: gccint.info,  Node: Basic Blocks,  Next: Edges,  Up: Control Flow
17371
1737215.1 Basic Blocks
17373=================
17374
17375A basic block is a straight-line sequence of code with only one entry
17376point and only one exit.  In GCC, basic blocks are represented using the
17377'basic_block' data type.
17378
17379 Special basic blocks represent possible entry and exit points of a
17380function.  These blocks are called 'ENTRY_BLOCK_PTR' and
17381'EXIT_BLOCK_PTR'.  These blocks do not contain any code.
17382
17383 The 'BASIC_BLOCK' array contains all basic blocks in an unspecified
17384order.  Each 'basic_block' structure has a field that holds a unique
17385integer identifier 'index' that is the index of the block in the
17386'BASIC_BLOCK' array.  The total number of basic blocks in the function
17387is 'n_basic_blocks'.  Both the basic block indices and the total number
17388of basic blocks may vary during the compilation process, as passes
17389reorder, create, duplicate, and destroy basic blocks.  The index for any
17390block should never be greater than 'last_basic_block'.  The indices 0
17391and 1 are special codes reserved for 'ENTRY_BLOCK' and 'EXIT_BLOCK', the
17392indices of 'ENTRY_BLOCK_PTR' and 'EXIT_BLOCK_PTR'.
17393
17394 Two pointer members of the 'basic_block' structure are the pointers
17395'next_bb' and 'prev_bb'.  These are used to keep doubly linked chain of
17396basic blocks in the same order as the underlying instruction stream.
17397The chain of basic blocks is updated transparently by the provided API
17398for manipulating the CFG.  The macro 'FOR_EACH_BB' can be used to visit
17399all the basic blocks in lexicographical order, except 'ENTRY_BLOCK' and
17400'EXIT_BLOCK'.  The macro 'FOR_ALL_BB' also visits all basic blocks in
17401lexicographical order, including 'ENTRY_BLOCK' and 'EXIT_BLOCK'.
17402
17403 The functions 'post_order_compute' and 'inverted_post_order_compute'
17404can be used to compute topological orders of the CFG. The orders are
17405stored as vectors of basic block indices.  The 'BASIC_BLOCK' array can
17406be used to iterate each basic block by index.  Dominator traversals are
17407also possible using 'walk_dominator_tree'.  Given two basic blocks A and
17408B, block A dominates block B if A is _always_ executed before B.
17409
17410 Each 'basic_block' also contains pointers to the first instruction (the
17411"head") and the last instruction (the "tail") or "end" of the
17412instruction stream contained in a basic block.  In fact, since the
17413'basic_block' data type is used to represent blocks in both major
17414intermediate representations of GCC ('GIMPLE' and RTL), there are
17415pointers to the head and end of a basic block for both representations,
17416stored in intermediate representation specific data in the 'il' field of
17417'struct basic_block_def'.
17418
17419 For RTL, these pointers are 'BB_HEAD' and 'BB_END'.
17420
17421 In the RTL representation of a function, the instruction stream
17422contains not only the "real" instructions, but also "notes" or "insn
17423notes" (to distinguish them from "reg notes").  Any function that moves
17424or duplicates the basic blocks needs to take care of updating of these
17425notes.  Many of these notes expect that the instruction stream consists
17426of linear regions, so updating can sometimes be tedious.  All types of
17427insn notes are defined in 'insn-notes.def'.
17428
17429 In the RTL function representation, the instructions contained in a
17430basic block always follow a 'NOTE_INSN_BASIC_BLOCK', but zero or more
17431'CODE_LABEL' nodes can precede the block note.  A basic block ends with
17432a control flow instruction or with the last instruction before the next
17433'CODE_LABEL' or 'NOTE_INSN_BASIC_BLOCK'.  By definition, a 'CODE_LABEL'
17434cannot appear in the middle of the instruction stream of a basic block.
17435
17436 In addition to notes, the jump table vectors are also represented as
17437"pseudo-instructions" inside the insn stream.  These vectors never
17438appear in the basic block and should always be placed just after the
17439table jump instructions referencing them.  After removing the table-jump
17440it is often difficult to eliminate the code computing the address and
17441referencing the vector, so cleaning up these vectors is postponed until
17442after liveness analysis.  Thus the jump table vectors may appear in the
17443insn stream unreferenced and without any purpose.  Before any edge is
17444made "fall-thru", the existence of such construct in the way needs to be
17445checked by calling 'can_fallthru' function.
17446
17447 For the 'GIMPLE' representation, the PHI nodes and statements contained
17448in a basic block are in a 'gimple_seq' pointed to by the basic block
17449intermediate language specific pointers.  Abstract containers and
17450iterators are used to access the PHI nodes and statements in a basic
17451blocks.  These iterators are called "GIMPLE statement iterators" (GSIs).
17452Grep for '^gsi' in the various 'gimple-*' and 'tree-*' files.  The
17453following snippet will pretty-print all PHI nodes the statements of the
17454current function in the GIMPLE representation.
17455
17456     basic_block bb;
17457
17458     FOR_EACH_BB (bb)
17459       {
17460        gimple_stmt_iterator si;
17461
17462        for (si = gsi_start_phis (bb); !gsi_end_p (si); gsi_next (&si))
17463          {
17464            gimple phi = gsi_stmt (si);
17465            print_gimple_stmt (dump_file, phi, 0, TDF_SLIM);
17466          }
17467        for (si = gsi_start_bb (bb); !gsi_end_p (si); gsi_next (&si))
17468          {
17469            gimple stmt = gsi_stmt (si);
17470            print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM);
17471          }
17472       }
17473
17474
17475File: gccint.info,  Node: Edges,  Next: Profile information,  Prev: Basic Blocks,  Up: Control Flow
17476
1747715.2 Edges
17478==========
17479
17480Edges represent possible control flow transfers from the end of some
17481basic block A to the head of another basic block B.  We say that A is a
17482predecessor of B, and B is a successor of A.  Edges are represented in
17483GCC with the 'edge' data type.  Each 'edge' acts as a link between two
17484basic blocks: The 'src' member of an edge points to the predecessor
17485basic block of the 'dest' basic block.  The members 'preds' and 'succs'
17486of the 'basic_block' data type point to type-safe vectors of edges to
17487the predecessors and successors of the block.
17488
17489 When walking the edges in an edge vector, "edge iterators" should be
17490used.  Edge iterators are constructed using the 'edge_iterator' data
17491structure and several methods are available to operate on them:
17492
17493'ei_start'
17494     This function initializes an 'edge_iterator' that points to the
17495     first edge in a vector of edges.
17496
17497'ei_last'
17498     This function initializes an 'edge_iterator' that points to the
17499     last edge in a vector of edges.
17500
17501'ei_end_p'
17502     This predicate is 'true' if an 'edge_iterator' represents the last
17503     edge in an edge vector.
17504
17505'ei_one_before_end_p'
17506     This predicate is 'true' if an 'edge_iterator' represents the
17507     second last edge in an edge vector.
17508
17509'ei_next'
17510     This function takes a pointer to an 'edge_iterator' and makes it
17511     point to the next edge in the sequence.
17512
17513'ei_prev'
17514     This function takes a pointer to an 'edge_iterator' and makes it
17515     point to the previous edge in the sequence.
17516
17517'ei_edge'
17518     This function returns the 'edge' currently pointed to by an
17519     'edge_iterator'.
17520
17521'ei_safe_safe'
17522     This function returns the 'edge' currently pointed to by an
17523     'edge_iterator', but returns 'NULL' if the iterator is pointing at
17524     the end of the sequence.  This function has been provided for
17525     existing code makes the assumption that a 'NULL' edge indicates the
17526     end of the sequence.
17527
17528 The convenience macro 'FOR_EACH_EDGE' can be used to visit all of the
17529edges in a sequence of predecessor or successor edges.  It must not be
17530used when an element might be removed during the traversal, otherwise
17531elements will be missed.  Here is an example of how to use the macro:
17532
17533     edge e;
17534     edge_iterator ei;
17535
17536     FOR_EACH_EDGE (e, ei, bb->succs)
17537       {
17538          if (e->flags & EDGE_FALLTHRU)
17539            break;
17540       }
17541
17542 There are various reasons why control flow may transfer from one block
17543to another.  One possibility is that some instruction, for example a
17544'CODE_LABEL', in a linearized instruction stream just always starts a
17545new basic block.  In this case a "fall-thru" edge links the basic block
17546to the first following basic block.  But there are several other reasons
17547why edges may be created.  The 'flags' field of the 'edge' data type is
17548used to store information about the type of edge we are dealing with.
17549Each edge is of one of the following types:
17550
17551_jump_
17552     No type flags are set for edges corresponding to jump instructions.
17553     These edges are used for unconditional or conditional jumps and in
17554     RTL also for table jumps.  They are the easiest to manipulate as
17555     they may be freely redirected when the flow graph is not in SSA
17556     form.
17557
17558_fall-thru_
17559     Fall-thru edges are present in case where the basic block may
17560     continue execution to the following one without branching.  These
17561     edges have the 'EDGE_FALLTHRU' flag set.  Unlike other types of
17562     edges, these edges must come into the basic block immediately
17563     following in the instruction stream.  The function
17564     'force_nonfallthru' is available to insert an unconditional jump in
17565     the case that redirection is needed.  Note that this may require
17566     creation of a new basic block.
17567
17568_exception handling_
17569     Exception handling edges represent possible control transfers from
17570     a trapping instruction to an exception handler.  The definition of
17571     "trapping" varies.  In C++, only function calls can throw, but for
17572     Java and Ada, exceptions like division by zero or segmentation
17573     fault are defined and thus each instruction possibly throwing this
17574     kind of exception needs to be handled as control flow instruction.
17575     Exception edges have the 'EDGE_ABNORMAL' and 'EDGE_EH' flags set.
17576
17577     When updating the instruction stream it is easy to change possibly
17578     trapping instruction to non-trapping, by simply removing the
17579     exception edge.  The opposite conversion is difficult, but should
17580     not happen anyway.  The edges can be eliminated via
17581     'purge_dead_edges' call.
17582
17583     In the RTL representation, the destination of an exception edge is
17584     specified by 'REG_EH_REGION' note attached to the insn.  In case of
17585     a trapping call the 'EDGE_ABNORMAL_CALL' flag is set too.  In the
17586     'GIMPLE' representation, this extra flag is not set.
17587
17588     In the RTL representation, the predicate 'may_trap_p' may be used
17589     to check whether instruction still may trap or not.  For the tree
17590     representation, the 'tree_could_trap_p' predicate is available, but
17591     this predicate only checks for possible memory traps, as in
17592     dereferencing an invalid pointer location.
17593
17594_sibling calls_
17595     Sibling calls or tail calls terminate the function in a
17596     non-standard way and thus an edge to the exit must be present.
17597     'EDGE_SIBCALL' and 'EDGE_ABNORMAL' are set in such case.  These
17598     edges only exist in the RTL representation.
17599
17600_computed jumps_
17601     Computed jumps contain edges to all labels in the function
17602     referenced from the code.  All those edges have 'EDGE_ABNORMAL'
17603     flag set.  The edges used to represent computed jumps often cause
17604     compile time performance problems, since functions consisting of
17605     many taken labels and many computed jumps may have _very_ dense
17606     flow graphs, so these edges need to be handled with special care.
17607     During the earlier stages of the compilation process, GCC tries to
17608     avoid such dense flow graphs by factoring computed jumps.  For
17609     example, given the following series of jumps,
17610
17611            goto *x;
17612            [ ... ]
17613
17614            goto *x;
17615            [ ... ]
17616
17617            goto *x;
17618            [ ... ]
17619
17620     factoring the computed jumps results in the following code sequence
17621     which has a much simpler flow graph:
17622
17623            goto y;
17624            [ ... ]
17625
17626            goto y;
17627            [ ... ]
17628
17629            goto y;
17630            [ ... ]
17631
17632          y:
17633            goto *x;
17634
17635     However, the classic problem with this transformation is that it
17636     has a runtime cost in there resulting code: An extra jump.
17637     Therefore, the computed jumps are un-factored in the later passes
17638     of the compiler (in the pass called
17639     'pass_duplicate_computed_gotos').  Be aware of that when you work
17640     on passes in that area.  There have been numerous examples already
17641     where the compile time for code with unfactored computed jumps
17642     caused some serious headaches.
17643
17644_nonlocal goto handlers_
17645     GCC allows nested functions to return into caller using a 'goto' to
17646     a label passed to as an argument to the callee.  The labels passed
17647     to nested functions contain special code to cleanup after function
17648     call.  Such sections of code are referred to as "nonlocal goto
17649     receivers".  If a function contains such nonlocal goto receivers,
17650     an edge from the call to the label is created with the
17651     'EDGE_ABNORMAL' and 'EDGE_ABNORMAL_CALL' flags set.
17652
17653_function entry points_
17654     By definition, execution of function starts at basic block 0, so
17655     there is always an edge from the 'ENTRY_BLOCK_PTR' to basic block
17656     0.  There is no 'GIMPLE' representation for alternate entry points
17657     at this moment.  In RTL, alternate entry points are specified by
17658     'CODE_LABEL' with 'LABEL_ALTERNATE_NAME' defined.  This feature is
17659     currently used for multiple entry point prologues and is limited to
17660     post-reload passes only.  This can be used by back-ends to emit
17661     alternate prologues for functions called from different contexts.
17662     In future full support for multiple entry functions defined by
17663     Fortran 90 needs to be implemented.
17664
17665_function exits_
17666     In the pre-reload representation a function terminates after the
17667     last instruction in the insn chain and no explicit return
17668     instructions are used.  This corresponds to the fall-thru edge into
17669     exit block.  After reload, optimal RTL epilogues are used that use
17670     explicit (conditional) return instructions that are represented by
17671     edges with no flags set.
17672
17673
17674File: gccint.info,  Node: Profile information,  Next: Maintaining the CFG,  Prev: Edges,  Up: Control Flow
17675
1767615.3 Profile information
17677========================
17678
17679In many cases a compiler must make a choice whether to trade speed in
17680one part of code for speed in another, or to trade code size for code
17681speed.  In such cases it is useful to know information about how often
17682some given block will be executed.  That is the purpose for maintaining
17683profile within the flow graph.  GCC can handle profile information
17684obtained through "profile feedback", but it can also estimate branch
17685probabilities based on statics and heuristics.
17686
17687 The feedback based profile is produced by compiling the program with
17688instrumentation, executing it on a train run and reading the numbers of
17689executions of basic blocks and edges back to the compiler while
17690re-compiling the program to produce the final executable.  This method
17691provides very accurate information about where a program spends most of
17692its time on the train run.  Whether it matches the average run of course
17693depends on the choice of train data set, but several studies have shown
17694that the behavior of a program usually changes just marginally over
17695different data sets.
17696
17697 When profile feedback is not available, the compiler may be asked to
17698attempt to predict the behavior of each branch in the program using a
17699set of heuristics (see 'predict.def' for details) and compute estimated
17700frequencies of each basic block by propagating the probabilities over
17701the graph.
17702
17703 Each 'basic_block' contains two integer fields to represent profile
17704information: 'frequency' and 'count'.  The 'frequency' is an estimation
17705how often is basic block executed within a function.  It is represented
17706as an integer scaled in the range from 0 to 'BB_FREQ_BASE'.  The most
17707frequently executed basic block in function is initially set to
17708'BB_FREQ_BASE' and the rest of frequencies are scaled accordingly.
17709During optimization, the frequency of the most frequent basic block can
17710both decrease (for instance by loop unrolling) or grow (for instance by
17711cross-jumping optimization), so scaling sometimes has to be performed
17712multiple times.
17713
17714 The 'count' contains hard-counted numbers of execution measured during
17715training runs and is nonzero only when profile feedback is available.
17716This value is represented as the host's widest integer (typically a 64
17717bit integer) of the special type 'gcov_type'.
17718
17719 Most optimization passes can use only the frequency information of a
17720basic block, but a few passes may want to know hard execution counts.
17721The frequencies should always match the counts after scaling, however
17722during updating of the profile information numerical error may
17723accumulate into quite large errors.
17724
17725 Each edge also contains a branch probability field: an integer in the
17726range from 0 to 'REG_BR_PROB_BASE'.  It represents probability of
17727passing control from the end of the 'src' basic block to the 'dest'
17728basic block, i.e. the probability that control will flow along this
17729edge.  The 'EDGE_FREQUENCY' macro is available to compute how frequently
17730a given edge is taken.  There is a 'count' field for each edge as well,
17731representing same information as for a basic block.
17732
17733 The basic block frequencies are not represented in the instruction
17734stream, but in the RTL representation the edge frequencies are
17735represented for conditional jumps (via the 'REG_BR_PROB' macro) since
17736they are used when instructions are output to the assembly file and the
17737flow graph is no longer maintained.
17738
17739 The probability that control flow arrives via a given edge to its
17740destination basic block is called "reverse probability" and is not
17741directly represented, but it may be easily computed from frequencies of
17742basic blocks.
17743
17744 Updating profile information is a delicate task that can unfortunately
17745not be easily integrated with the CFG manipulation API.  Many of the
17746functions and hooks to modify the CFG, such as
17747'redirect_edge_and_branch', do not have enough information to easily
17748update the profile, so updating it is in the majority of cases left up
17749to the caller.  It is difficult to uncover bugs in the profile updating
17750code, because they manifest themselves only by producing worse code, and
17751checking profile consistency is not possible because of numeric error
17752accumulation.  Hence special attention needs to be given to this issue
17753in each pass that modifies the CFG.
17754
17755 It is important to point out that 'REG_BR_PROB_BASE' and 'BB_FREQ_BASE'
17756are both set low enough to be possible to compute second power of any
17757frequency or probability in the flow graph, it is not possible to even
17758square the 'count' field, as modern CPUs are fast enough to execute
17759$2^32$ operations quickly.
17760
17761
17762File: gccint.info,  Node: Maintaining the CFG,  Next: Liveness information,  Prev: Profile information,  Up: Control Flow
17763
1776415.4 Maintaining the CFG
17765========================
17766
17767An important task of each compiler pass is to keep both the control flow
17768graph and all profile information up-to-date.  Reconstruction of the
17769control flow graph after each pass is not an option, since it may be
17770very expensive and lost profile information cannot be reconstructed at
17771all.
17772
17773 GCC has two major intermediate representations, and both use the
17774'basic_block' and 'edge' data types to represent control flow.  Both
17775representations share as much of the CFG maintenance code as possible.
17776For each representation, a set of "hooks" is defined so that each
17777representation can provide its own implementation of CFG manipulation
17778routines when necessary.  These hooks are defined in 'cfghooks.h'.
17779There are hooks for almost all common CFG manipulations, including block
17780splitting and merging, edge redirection and creating and deleting basic
17781blocks.  These hooks should provide everything you need to maintain and
17782manipulate the CFG in both the RTL and 'GIMPLE' representation.
17783
17784 At the moment, the basic block boundaries are maintained transparently
17785when modifying instructions, so there rarely is a need to move them
17786manually (such as in case someone wants to output instruction outside
17787basic block explicitly).
17788
17789 In the RTL representation, each instruction has a 'BLOCK_FOR_INSN'
17790value that represents pointer to the basic block that contains the
17791instruction.  In the 'GIMPLE' representation, the function 'gimple_bb'
17792returns a pointer to the basic block containing the queried statement.
17793
17794 When changes need to be applied to a function in its 'GIMPLE'
17795representation, "GIMPLE statement iterators" should be used.  These
17796iterators provide an integrated abstraction of the flow graph and the
17797instruction stream.  Block statement iterators are constructed using the
17798'gimple_stmt_iterator' data structure and several modifier are
17799available, including the following:
17800
17801'gsi_start'
17802     This function initializes a 'gimple_stmt_iterator' that points to
17803     the first non-empty statement in a basic block.
17804
17805'gsi_last'
17806     This function initializes a 'gimple_stmt_iterator' that points to
17807     the last statement in a basic block.
17808
17809'gsi_end_p'
17810     This predicate is 'true' if a 'gimple_stmt_iterator' represents the
17811     end of a basic block.
17812
17813'gsi_next'
17814     This function takes a 'gimple_stmt_iterator' and makes it point to
17815     its successor.
17816
17817'gsi_prev'
17818     This function takes a 'gimple_stmt_iterator' and makes it point to
17819     its predecessor.
17820
17821'gsi_insert_after'
17822     This function inserts a statement after the 'gimple_stmt_iterator'
17823     passed in.  The final parameter determines whether the statement
17824     iterator is updated to point to the newly inserted statement, or
17825     left pointing to the original statement.
17826
17827'gsi_insert_before'
17828     This function inserts a statement before the 'gimple_stmt_iterator'
17829     passed in.  The final parameter determines whether the statement
17830     iterator is updated to point to the newly inserted statement, or
17831     left pointing to the original statement.
17832
17833'gsi_remove'
17834     This function removes the 'gimple_stmt_iterator' passed in and
17835     rechains the remaining statements in a basic block, if any.
17836
17837 In the RTL representation, the macros 'BB_HEAD' and 'BB_END' may be
17838used to get the head and end 'rtx' of a basic block.  No abstract
17839iterators are defined for traversing the insn chain, but you can just
17840use 'NEXT_INSN' and 'PREV_INSN' instead.  *Note Insns::.
17841
17842 Usually a code manipulating pass simplifies the instruction stream and
17843the flow of control, possibly eliminating some edges.  This may for
17844example happen when a conditional jump is replaced with an unconditional
17845jump, but also when simplifying possibly trapping instruction to
17846non-trapping while compiling Java.  Updating of edges is not transparent
17847and each optimization pass is required to do so manually.  However only
17848few cases occur in practice.  The pass may call 'purge_dead_edges' on a
17849given basic block to remove superfluous edges, if any.
17850
17851 Another common scenario is redirection of branch instructions, but this
17852is best modeled as redirection of edges in the control flow graph and
17853thus use of 'redirect_edge_and_branch' is preferred over more low level
17854functions, such as 'redirect_jump' that operate on RTL chain only.  The
17855CFG hooks defined in 'cfghooks.h' should provide the complete API
17856required for manipulating and maintaining the CFG.
17857
17858 It is also possible that a pass has to insert control flow instruction
17859into the middle of a basic block, thus creating an entry point in the
17860middle of the basic block, which is impossible by definition: The block
17861must be split to make sure it only has one entry point, i.e. the head of
17862the basic block.  The CFG hook 'split_block' may be used when an
17863instruction in the middle of a basic block has to become the target of a
17864jump or branch instruction.
17865
17866 For a global optimizer, a common operation is to split edges in the
17867flow graph and insert instructions on them.  In the RTL representation,
17868this can be easily done using the 'insert_insn_on_edge' function that
17869emits an instruction "on the edge", caching it for a later
17870'commit_edge_insertions' call that will take care of moving the inserted
17871instructions off the edge into the instruction stream contained in a
17872basic block.  This includes the creation of new basic blocks where
17873needed.  In the 'GIMPLE' representation, the equivalent functions are
17874'gsi_insert_on_edge' which inserts a block statement iterator on an
17875edge, and 'gsi_commit_edge_inserts' which flushes the instruction to
17876actual instruction stream.
17877
17878 While debugging the optimization pass, the 'verify_flow_info' function
17879may be useful to find bugs in the control flow graph updating code.
17880
17881
17882File: gccint.info,  Node: Liveness information,  Prev: Maintaining the CFG,  Up: Control Flow
17883
1788415.5 Liveness information
17885=========================
17886
17887Liveness information is useful to determine whether some register is
17888"live" at given point of program, i.e. that it contains a value that may
17889be used at a later point in the program.  This information is used, for
17890instance, during register allocation, as the pseudo registers only need
17891to be assigned to a unique hard register or to a stack slot if they are
17892live.  The hard registers and stack slots may be freely reused for other
17893values when a register is dead.
17894
17895 Liveness information is available in the back end starting with
17896'pass_df_initialize' and ending with 'pass_df_finish'.  Three flavors of
17897live analysis are available: With 'LR', it is possible to determine at
17898any point 'P' in the function if the register may be used on some path
17899from 'P' to the end of the function.  With 'UR', it is possible to
17900determine if there is a path from the beginning of the function to 'P'
17901that defines the variable.  'LIVE' is the intersection of the 'LR' and
17902'UR' and a variable is live at 'P' if there is both an assignment that
17903reaches it from the beginning of the function and a use that can be
17904reached on some path from 'P' to the end of the function.
17905
17906 In general 'LIVE' is the most useful of the three.  The macros
17907'DF_[LR,UR,LIVE]_[IN,OUT]' can be used to access this information.  The
17908macros take a basic block number and return a bitmap that is indexed by
17909the register number.  This information is only guaranteed to be up to
17910date after calls are made to 'df_analyze'.  See the file 'df-core.c' for
17911details on using the dataflow.
17912
17913 The liveness information is stored partly in the RTL instruction stream
17914and partly in the flow graph.  Local information is stored in the
17915instruction stream: Each instruction may contain 'REG_DEAD' notes
17916representing that the value of a given register is no longer needed, or
17917'REG_UNUSED' notes representing that the value computed by the
17918instruction is never used.  The second is useful for instructions
17919computing multiple values at once.
17920
17921
17922File: gccint.info,  Node: Machine Desc,  Next: Target Macros,  Prev: Control Flow,  Up: Top
17923
1792416 Machine Descriptions
17925***********************
17926
17927A machine description has two parts: a file of instruction patterns
17928('.md' file) and a C header file of macro definitions.
17929
17930 The '.md' file for a target machine contains a pattern for each
17931instruction that the target machine supports (or at least each
17932instruction that is worth telling the compiler about).  It may also
17933contain comments.  A semicolon causes the rest of the line to be a
17934comment, unless the semicolon is inside a quoted string.
17935
17936 See the next chapter for information on the C header file.
17937
17938* Menu:
17939
17940* Overview::            How the machine description is used.
17941* Patterns::            How to write instruction patterns.
17942* Example::             An explained example of a 'define_insn' pattern.
17943* RTL Template::        The RTL template defines what insns match a pattern.
17944* Output Template::     The output template says how to make assembler code
17945                        from such an insn.
17946* Output Statement::    For more generality, write C code to output
17947                        the assembler code.
17948* Predicates::          Controlling what kinds of operands can be used
17949                        for an insn.
17950* Constraints::         Fine-tuning operand selection.
17951* Standard Names::      Names mark patterns to use for code generation.
17952* Pattern Ordering::    When the order of patterns makes a difference.
17953* Dependent Patterns::  Having one pattern may make you need another.
17954* Jump Patterns::       Special considerations for patterns for jump insns.
17955* Looping Patterns::    How to define patterns for special looping insns.
17956* Insn Canonicalizations::Canonicalization of Instructions
17957* Expander Definitions::Generating a sequence of several RTL insns
17958                        for a standard operation.
17959* Insn Splitting::      Splitting Instructions into Multiple Instructions.
17960* Including Patterns::  Including Patterns in Machine Descriptions.
17961* Peephole Definitions::Defining machine-specific peephole optimizations.
17962* Insn Attributes::     Specifying the value of attributes for generated insns.
17963* Conditional Execution::Generating 'define_insn' patterns for
17964                         predication.
17965* Define Subst::	Generating 'define_insn' and 'define_expand'
17966			patterns from other patterns.
17967* Constant Definitions::Defining symbolic constants that can be used in the
17968                        md file.
17969* Iterators::           Using iterators to generate patterns from a template.
17970
17971
17972File: gccint.info,  Node: Overview,  Next: Patterns,  Up: Machine Desc
17973
1797416.1 Overview of How the Machine Description is Used
17975====================================================
17976
17977There are three main conversions that happen in the compiler:
17978
17979  1. The front end reads the source code and builds a parse tree.
17980
17981  2. The parse tree is used to generate an RTL insn list based on named
17982     instruction patterns.
17983
17984  3. The insn list is matched against the RTL templates to produce
17985     assembler code.
17986
17987 For the generate pass, only the names of the insns matter, from either
17988a named 'define_insn' or a 'define_expand'.  The compiler will choose
17989the pattern with the right name and apply the operands according to the
17990documentation later in this chapter, without regard for the RTL template
17991or operand constraints.  Note that the names the compiler looks for are
17992hard-coded in the compiler--it will ignore unnamed patterns and patterns
17993with names it doesn't know about, but if you don't provide a named
17994pattern it needs, it will abort.
17995
17996 If a 'define_insn' is used, the template given is inserted into the
17997insn list.  If a 'define_expand' is used, one of three things happens,
17998based on the condition logic.  The condition logic may manually create
17999new insns for the insn list, say via 'emit_insn()', and invoke 'DONE'.
18000For certain named patterns, it may invoke 'FAIL' to tell the compiler to
18001use an alternate way of performing that task.  If it invokes neither
18002'DONE' nor 'FAIL', the template given in the pattern is inserted, as if
18003the 'define_expand' were a 'define_insn'.
18004
18005 Once the insn list is generated, various optimization passes convert,
18006replace, and rearrange the insns in the insn list.  This is where the
18007'define_split' and 'define_peephole' patterns get used, for example.
18008
18009 Finally, the insn list's RTL is matched up with the RTL templates in
18010the 'define_insn' patterns, and those patterns are used to emit the
18011final assembly code.  For this purpose, each named 'define_insn' acts
18012like it's unnamed, since the names are ignored.
18013
18014
18015File: gccint.info,  Node: Patterns,  Next: Example,  Prev: Overview,  Up: Machine Desc
18016
1801716.2 Everything about Instruction Patterns
18018==========================================
18019
18020Each instruction pattern contains an incomplete RTL expression, with
18021pieces to be filled in later, operand constraints that restrict how the
18022pieces can be filled in, and an output pattern or C code to generate the
18023assembler output, all wrapped up in a 'define_insn' expression.
18024
18025 A 'define_insn' is an RTL expression containing four or five operands:
18026
18027  1. An optional name.  The presence of a name indicate that this
18028     instruction pattern can perform a certain standard job for the
18029     RTL-generation pass of the compiler.  This pass knows certain names
18030     and will use the instruction patterns with those names, if the
18031     names are defined in the machine description.
18032
18033     The absence of a name is indicated by writing an empty string where
18034     the name should go.  Nameless instruction patterns are never used
18035     for generating RTL code, but they may permit several simpler insns
18036     to be combined later on.
18037
18038     Names that are not thus known and used in RTL-generation have no
18039     effect; they are equivalent to no name at all.
18040
18041     For the purpose of debugging the compiler, you may also specify a
18042     name beginning with the '*' character.  Such a name is used only
18043     for identifying the instruction in RTL dumps; it is entirely
18044     equivalent to having a nameless pattern for all other purposes.
18045
18046  2. The "RTL template" (*note RTL Template::) is a vector of incomplete
18047     RTL expressions which show what the instruction should look like.
18048     It is incomplete because it may contain 'match_operand',
18049     'match_operator', and 'match_dup' expressions that stand for
18050     operands of the instruction.
18051
18052     If the vector has only one element, that element is the template
18053     for the instruction pattern.  If the vector has multiple elements,
18054     then the instruction pattern is a 'parallel' expression containing
18055     the elements described.
18056
18057  3. A condition.  This is a string which contains a C expression that
18058     is the final test to decide whether an insn body matches this
18059     pattern.
18060
18061     For a named pattern, the condition (if present) may not depend on
18062     the data in the insn being matched, but only the
18063     target-machine-type flags.  The compiler needs to test these
18064     conditions during initialization in order to learn exactly which
18065     named instructions are available in a particular run.
18066
18067     For nameless patterns, the condition is applied only when matching
18068     an individual insn, and only after the insn has matched the
18069     pattern's recognition template.  The insn's operands may be found
18070     in the vector 'operands'.  For an insn where the condition has once
18071     matched, it can't be used to control register allocation, for
18072     example by excluding certain hard registers or hard register
18073     combinations.
18074
18075  4. The "output template": a string that says how to output matching
18076     insns as assembler code.  '%' in this string specifies where to
18077     substitute the value of an operand.  *Note Output Template::.
18078
18079     When simple substitution isn't general enough, you can specify a
18080     piece of C code to compute the output.  *Note Output Statement::.
18081
18082  5. Optionally, a vector containing the values of attributes for insns
18083     matching this pattern.  *Note Insn Attributes::.
18084
18085
18086File: gccint.info,  Node: Example,  Next: RTL Template,  Prev: Patterns,  Up: Machine Desc
18087
1808816.3 Example of 'define_insn'
18089=============================
18090
18091Here is an actual example of an instruction pattern, for the
1809268000/68020.
18093
18094     (define_insn "tstsi"
18095       [(set (cc0)
18096             (match_operand:SI 0 "general_operand" "rm"))]
18097       ""
18098       "*
18099     {
18100       if (TARGET_68020 || ! ADDRESS_REG_P (operands[0]))
18101         return \"tstl %0\";
18102       return \"cmpl #0,%0\";
18103     }")
18104
18105This can also be written using braced strings:
18106
18107     (define_insn "tstsi"
18108       [(set (cc0)
18109             (match_operand:SI 0 "general_operand" "rm"))]
18110       ""
18111     {
18112       if (TARGET_68020 || ! ADDRESS_REG_P (operands[0]))
18113         return "tstl %0";
18114       return "cmpl #0,%0";
18115     })
18116
18117 This is an instruction that sets the condition codes based on the value
18118of a general operand.  It has no condition, so any insn whose RTL
18119description has the form shown may be handled according to this pattern.
18120The name 'tstsi' means "test a 'SImode' value" and tells the RTL
18121generation pass that, when it is necessary to test such a value, an insn
18122to do so can be constructed using this pattern.
18123
18124 The output control string is a piece of C code which chooses which
18125output template to return based on the kind of operand and the specific
18126type of CPU for which code is being generated.
18127
18128 '"rm"' is an operand constraint.  Its meaning is explained below.
18129
18130
18131File: gccint.info,  Node: RTL Template,  Next: Output Template,  Prev: Example,  Up: Machine Desc
18132
1813316.4 RTL Template
18134=================
18135
18136The RTL template is used to define which insns match the particular
18137pattern and how to find their operands.  For named patterns, the RTL
18138template also says how to construct an insn from specified operands.
18139
18140 Construction involves substituting specified operands into a copy of
18141the template.  Matching involves determining the values that serve as
18142the operands in the insn being matched.  Both of these activities are
18143controlled by special expression types that direct matching and
18144substitution of the operands.
18145
18146'(match_operand:M N PREDICATE CONSTRAINT)'
18147     This expression is a placeholder for operand number N of the insn.
18148     When constructing an insn, operand number N will be substituted at
18149     this point.  When matching an insn, whatever appears at this
18150     position in the insn will be taken as operand number N; but it must
18151     satisfy PREDICATE or this instruction pattern will not match at
18152     all.
18153
18154     Operand numbers must be chosen consecutively counting from zero in
18155     each instruction pattern.  There may be only one 'match_operand'
18156     expression in the pattern for each operand number.  Usually
18157     operands are numbered in the order of appearance in 'match_operand'
18158     expressions.  In the case of a 'define_expand', any operand numbers
18159     used only in 'match_dup' expressions have higher values than all
18160     other operand numbers.
18161
18162     PREDICATE is a string that is the name of a function that accepts
18163     two arguments, an expression and a machine mode.  *Note
18164     Predicates::.  During matching, the function will be called with
18165     the putative operand as the expression and M as the mode argument
18166     (if M is not specified, 'VOIDmode' will be used, which normally
18167     causes PREDICATE to accept any mode).  If it returns zero, this
18168     instruction pattern fails to match.  PREDICATE may be an empty
18169     string; then it means no test is to be done on the operand, so
18170     anything which occurs in this position is valid.
18171
18172     Most of the time, PREDICATE will reject modes other than M--but not
18173     always.  For example, the predicate 'address_operand' uses M as the
18174     mode of memory ref that the address should be valid for.  Many
18175     predicates accept 'const_int' nodes even though their mode is
18176     'VOIDmode'.
18177
18178     CONSTRAINT controls reloading and the choice of the best register
18179     class to use for a value, as explained later (*note Constraints::).
18180     If the constraint would be an empty string, it can be omitted.
18181
18182     People are often unclear on the difference between the constraint
18183     and the predicate.  The predicate helps decide whether a given insn
18184     matches the pattern.  The constraint plays no role in this
18185     decision; instead, it controls various decisions in the case of an
18186     insn which does match.
18187
18188'(match_scratch:M N CONSTRAINT)'
18189     This expression is also a placeholder for operand number N and
18190     indicates that operand must be a 'scratch' or 'reg' expression.
18191
18192     When matching patterns, this is equivalent to
18193
18194          (match_operand:M N "scratch_operand" PRED)
18195
18196     but, when generating RTL, it produces a ('scratch':M) expression.
18197
18198     If the last few expressions in a 'parallel' are 'clobber'
18199     expressions whose operands are either a hard register or
18200     'match_scratch', the combiner can add or delete them when
18201     necessary.  *Note Side Effects::.
18202
18203'(match_dup N)'
18204     This expression is also a placeholder for operand number N.  It is
18205     used when the operand needs to appear more than once in the insn.
18206
18207     In construction, 'match_dup' acts just like 'match_operand': the
18208     operand is substituted into the insn being constructed.  But in
18209     matching, 'match_dup' behaves differently.  It assumes that operand
18210     number N has already been determined by a 'match_operand' appearing
18211     earlier in the recognition template, and it matches only an
18212     identical-looking expression.
18213
18214     Note that 'match_dup' should not be used to tell the compiler that
18215     a particular register is being used for two operands (example:
18216     'add' that adds one register to another; the second register is
18217     both an input operand and the output operand).  Use a matching
18218     constraint (*note Simple Constraints::) for those.  'match_dup' is
18219     for the cases where one operand is used in two places in the
18220     template, such as an instruction that computes both a quotient and
18221     a remainder, where the opcode takes two input operands but the RTL
18222     template has to refer to each of those twice; once for the quotient
18223     pattern and once for the remainder pattern.
18224
18225'(match_operator:M N PREDICATE [OPERANDS...])'
18226     This pattern is a kind of placeholder for a variable RTL expression
18227     code.
18228
18229     When constructing an insn, it stands for an RTL expression whose
18230     expression code is taken from that of operand N, and whose operands
18231     are constructed from the patterns OPERANDS.
18232
18233     When matching an expression, it matches an expression if the
18234     function PREDICATE returns nonzero on that expression _and_ the
18235     patterns OPERANDS match the operands of the expression.
18236
18237     Suppose that the function 'commutative_operator' is defined as
18238     follows, to match any expression whose operator is one of the
18239     commutative arithmetic operators of RTL and whose mode is MODE:
18240
18241          int
18242          commutative_integer_operator (x, mode)
18243               rtx x;
18244               enum machine_mode mode;
18245          {
18246            enum rtx_code code = GET_CODE (x);
18247            if (GET_MODE (x) != mode)
18248              return 0;
18249            return (GET_RTX_CLASS (code) == RTX_COMM_ARITH
18250                    || code == EQ || code == NE);
18251          }
18252
18253     Then the following pattern will match any RTL expression consisting
18254     of a commutative operator applied to two general operands:
18255
18256          (match_operator:SI 3 "commutative_operator"
18257            [(match_operand:SI 1 "general_operand" "g")
18258             (match_operand:SI 2 "general_operand" "g")])
18259
18260     Here the vector '[OPERANDS...]' contains two patterns because the
18261     expressions to be matched all contain two operands.
18262
18263     When this pattern does match, the two operands of the commutative
18264     operator are recorded as operands 1 and 2 of the insn.  (This is
18265     done by the two instances of 'match_operand'.)  Operand 3 of the
18266     insn will be the entire commutative expression: use 'GET_CODE
18267     (operands[3])' to see which commutative operator was used.
18268
18269     The machine mode M of 'match_operator' works like that of
18270     'match_operand': it is passed as the second argument to the
18271     predicate function, and that function is solely responsible for
18272     deciding whether the expression to be matched "has" that mode.
18273
18274     When constructing an insn, argument 3 of the gen-function will
18275     specify the operation (i.e. the expression code) for the expression
18276     to be made.  It should be an RTL expression, whose expression code
18277     is copied into a new expression whose operands are arguments 1 and
18278     2 of the gen-function.  The subexpressions of argument 3 are not
18279     used; only its expression code matters.
18280
18281     When 'match_operator' is used in a pattern for matching an insn, it
18282     usually best if the operand number of the 'match_operator' is
18283     higher than that of the actual operands of the insn.  This improves
18284     register allocation because the register allocator often looks at
18285     operands 1 and 2 of insns to see if it can do register tying.
18286
18287     There is no way to specify constraints in 'match_operator'.  The
18288     operand of the insn which corresponds to the 'match_operator' never
18289     has any constraints because it is never reloaded as a whole.
18290     However, if parts of its OPERANDS are matched by 'match_operand'
18291     patterns, those parts may have constraints of their own.
18292
18293'(match_op_dup:M N[OPERANDS...])'
18294     Like 'match_dup', except that it applies to operators instead of
18295     operands.  When constructing an insn, operand number N will be
18296     substituted at this point.  But in matching, 'match_op_dup' behaves
18297     differently.  It assumes that operand number N has already been
18298     determined by a 'match_operator' appearing earlier in the
18299     recognition template, and it matches only an identical-looking
18300     expression.
18301
18302'(match_parallel N PREDICATE [SUBPAT...])'
18303     This pattern is a placeholder for an insn that consists of a
18304     'parallel' expression with a variable number of elements.  This
18305     expression should only appear at the top level of an insn pattern.
18306
18307     When constructing an insn, operand number N will be substituted at
18308     this point.  When matching an insn, it matches if the body of the
18309     insn is a 'parallel' expression with at least as many elements as
18310     the vector of SUBPAT expressions in the 'match_parallel', if each
18311     SUBPAT matches the corresponding element of the 'parallel', _and_
18312     the function PREDICATE returns nonzero on the 'parallel' that is
18313     the body of the insn.  It is the responsibility of the predicate to
18314     validate elements of the 'parallel' beyond those listed in the
18315     'match_parallel'.
18316
18317     A typical use of 'match_parallel' is to match load and store
18318     multiple expressions, which can contain a variable number of
18319     elements in a 'parallel'.  For example,
18320
18321          (define_insn ""
18322            [(match_parallel 0 "load_multiple_operation"
18323               [(set (match_operand:SI 1 "gpc_reg_operand" "=r")
18324                     (match_operand:SI 2 "memory_operand" "m"))
18325                (use (reg:SI 179))
18326                (clobber (reg:SI 179))])]
18327            ""
18328            "loadm 0,0,%1,%2")
18329
18330     This example comes from 'a29k.md'.  The function
18331     'load_multiple_operation' is defined in 'a29k.c' and checks that
18332     subsequent elements in the 'parallel' are the same as the 'set' in
18333     the pattern, except that they are referencing subsequent registers
18334     and memory locations.
18335
18336     An insn that matches this pattern might look like:
18337
18338          (parallel
18339           [(set (reg:SI 20) (mem:SI (reg:SI 100)))
18340            (use (reg:SI 179))
18341            (clobber (reg:SI 179))
18342            (set (reg:SI 21)
18343                 (mem:SI (plus:SI (reg:SI 100)
18344                                  (const_int 4))))
18345            (set (reg:SI 22)
18346                 (mem:SI (plus:SI (reg:SI 100)
18347                                  (const_int 8))))])
18348
18349'(match_par_dup N [SUBPAT...])'
18350     Like 'match_op_dup', but for 'match_parallel' instead of
18351     'match_operator'.
18352
18353
18354File: gccint.info,  Node: Output Template,  Next: Output Statement,  Prev: RTL Template,  Up: Machine Desc
18355
1835616.5 Output Templates and Operand Substitution
18357==============================================
18358
18359The "output template" is a string which specifies how to output the
18360assembler code for an instruction pattern.  Most of the template is a
18361fixed string which is output literally.  The character '%' is used to
18362specify where to substitute an operand; it can also be used to identify
18363places where different variants of the assembler require different
18364syntax.
18365
18366 In the simplest case, a '%' followed by a digit N says to output
18367operand N at that point in the string.
18368
18369 '%' followed by a letter and a digit says to output an operand in an
18370alternate fashion.  Four letters have standard, built-in meanings
18371described below.  The machine description macro 'PRINT_OPERAND' can
18372define additional letters with nonstandard meanings.
18373
18374 '%cDIGIT' can be used to substitute an operand that is a constant value
18375without the syntax that normally indicates an immediate operand.
18376
18377 '%nDIGIT' is like '%cDIGIT' except that the value of the constant is
18378negated before printing.
18379
18380 '%aDIGIT' can be used to substitute an operand as if it were a memory
18381reference, with the actual operand treated as the address.  This may be
18382useful when outputting a "load address" instruction, because often the
18383assembler syntax for such an instruction requires you to write the
18384operand as if it were a memory reference.
18385
18386 '%lDIGIT' is used to substitute a 'label_ref' into a jump instruction.
18387
18388 '%=' outputs a number which is unique to each instruction in the entire
18389compilation.  This is useful for making local labels to be referred to
18390more than once in a single template that generates multiple assembler
18391instructions.
18392
18393 '%' followed by a punctuation character specifies a substitution that
18394does not use an operand.  Only one case is standard: '%%' outputs a '%'
18395into the assembler code.  Other nonstandard cases can be defined in the
18396'PRINT_OPERAND' macro.  You must also define which punctuation
18397characters are valid with the 'PRINT_OPERAND_PUNCT_VALID_P' macro.
18398
18399 The template may generate multiple assembler instructions.  Write the
18400text for the instructions, with '\;' between them.
18401
18402 When the RTL contains two operands which are required by constraint to
18403match each other, the output template must refer only to the
18404lower-numbered operand.  Matching operands are not always identical, and
18405the rest of the compiler arranges to put the proper RTL expression for
18406printing into the lower-numbered operand.
18407
18408 One use of nonstandard letters or punctuation following '%' is to
18409distinguish between different assembler languages for the same machine;
18410for example, Motorola syntax versus MIT syntax for the 68000.  Motorola
18411syntax requires periods in most opcode names, while MIT syntax does not.
18412For example, the opcode 'movel' in MIT syntax is 'move.l' in Motorola
18413syntax.  The same file of patterns is used for both kinds of output
18414syntax, but the character sequence '%.' is used in each place where
18415Motorola syntax wants a period.  The 'PRINT_OPERAND' macro for Motorola
18416syntax defines the sequence to output a period; the macro for MIT syntax
18417defines it to do nothing.
18418
18419 As a special case, a template consisting of the single character '#'
18420instructs the compiler to first split the insn, and then output the
18421resulting instructions separately.  This helps eliminate redundancy in
18422the output templates.  If you have a 'define_insn' that needs to emit
18423multiple assembler instructions, and there is a matching 'define_split'
18424already defined, then you can simply use '#' as the output template
18425instead of writing an output template that emits the multiple assembler
18426instructions.
18427
18428 If the macro 'ASSEMBLER_DIALECT' is defined, you can use construct of
18429the form '{option0|option1|option2}' in the templates.  These describe
18430multiple variants of assembler language syntax.  *Note Instruction
18431Output::.
18432
18433
18434File: gccint.info,  Node: Output Statement,  Next: Predicates,  Prev: Output Template,  Up: Machine Desc
18435
1843616.6 C Statements for Assembler Output
18437======================================
18438
18439Often a single fixed template string cannot produce correct and
18440efficient assembler code for all the cases that are recognized by a
18441single instruction pattern.  For example, the opcodes may depend on the
18442kinds of operands; or some unfortunate combinations of operands may
18443require extra machine instructions.
18444
18445 If the output control string starts with a '@', then it is actually a
18446series of templates, each on a separate line.  (Blank lines and leading
18447spaces and tabs are ignored.)  The templates correspond to the pattern's
18448constraint alternatives (*note Multi-Alternative::).  For example, if a
18449target machine has a two-address add instruction 'addr' to add into a
18450register and another 'addm' to add a register to memory, you might write
18451this pattern:
18452
18453     (define_insn "addsi3"
18454       [(set (match_operand:SI 0 "general_operand" "=r,m")
18455             (plus:SI (match_operand:SI 1 "general_operand" "0,0")
18456                      (match_operand:SI 2 "general_operand" "g,r")))]
18457       ""
18458       "@
18459        addr %2,%0
18460        addm %2,%0")
18461
18462 If the output control string starts with a '*', then it is not an
18463output template but rather a piece of C program that should compute a
18464template.  It should execute a 'return' statement to return the
18465template-string you want.  Most such templates use C string literals,
18466which require doublequote characters to delimit them.  To include these
18467doublequote characters in the string, prefix each one with '\'.
18468
18469 If the output control string is written as a brace block instead of a
18470double-quoted string, it is automatically assumed to be C code.  In that
18471case, it is not necessary to put in a leading asterisk, or to escape the
18472doublequotes surrounding C string literals.
18473
18474 The operands may be found in the array 'operands', whose C data type is
18475'rtx []'.
18476
18477 It is very common to select different ways of generating assembler code
18478based on whether an immediate operand is within a certain range.  Be
18479careful when doing this, because the result of 'INTVAL' is an integer on
18480the host machine.  If the host machine has more bits in an 'int' than
18481the target machine has in the mode in which the constant will be used,
18482then some of the bits you get from 'INTVAL' will be superfluous.  For
18483proper results, you must carefully disregard the values of those bits.
18484
18485 It is possible to output an assembler instruction and then go on to
18486output or compute more of them, using the subroutine 'output_asm_insn'.
18487This receives two arguments: a template-string and a vector of operands.
18488The vector may be 'operands', or it may be another array of 'rtx' that
18489you declare locally and initialize yourself.
18490
18491 When an insn pattern has multiple alternatives in its constraints,
18492often the appearance of the assembler code is determined mostly by which
18493alternative was matched.  When this is so, the C code can test the
18494variable 'which_alternative', which is the ordinal number of the
18495alternative that was actually satisfied (0 for the first, 1 for the
18496second alternative, etc.).
18497
18498 For example, suppose there are two opcodes for storing zero, 'clrreg'
18499for registers and 'clrmem' for memory locations.  Here is how a pattern
18500could use 'which_alternative' to choose between them:
18501
18502     (define_insn ""
18503       [(set (match_operand:SI 0 "general_operand" "=r,m")
18504             (const_int 0))]
18505       ""
18506       {
18507       return (which_alternative == 0
18508               ? "clrreg %0" : "clrmem %0");
18509       })
18510
18511 The example above, where the assembler code to generate was _solely_
18512determined by the alternative, could also have been specified as
18513follows, having the output control string start with a '@':
18514
18515     (define_insn ""
18516       [(set (match_operand:SI 0 "general_operand" "=r,m")
18517             (const_int 0))]
18518       ""
18519       "@
18520        clrreg %0
18521        clrmem %0")
18522
18523 If you just need a little bit of C code in one (or a few) alternatives,
18524you can use '*' inside of a '@' multi-alternative template:
18525
18526     (define_insn ""
18527       [(set (match_operand:SI 0 "general_operand" "=r,<,m")
18528             (const_int 0))]
18529       ""
18530       "@
18531        clrreg %0
18532        * return stack_mem_p (operands[0]) ? \"push 0\" : \"clrmem %0\";
18533        clrmem %0")
18534
18535
18536File: gccint.info,  Node: Predicates,  Next: Constraints,  Prev: Output Statement,  Up: Machine Desc
18537
1853816.7 Predicates
18539===============
18540
18541A predicate determines whether a 'match_operand' or 'match_operator'
18542expression matches, and therefore whether the surrounding instruction
18543pattern will be used for that combination of operands.  GCC has a number
18544of machine-independent predicates, and you can define machine-specific
18545predicates as needed.  By convention, predicates used with
18546'match_operand' have names that end in '_operand', and those used with
18547'match_operator' have names that end in '_operator'.
18548
18549 All predicates are Boolean functions (in the mathematical sense) of two
18550arguments: the RTL expression that is being considered at that position
18551in the instruction pattern, and the machine mode that the
18552'match_operand' or 'match_operator' specifies.  In this section, the
18553first argument is called OP and the second argument MODE.  Predicates
18554can be called from C as ordinary two-argument functions; this can be
18555useful in output templates or other machine-specific code.
18556
18557 Operand predicates can allow operands that are not actually acceptable
18558to the hardware, as long as the constraints give reload the ability to
18559fix them up (*note Constraints::).  However, GCC will usually generate
18560better code if the predicates specify the requirements of the machine
18561instructions as closely as possible.  Reload cannot fix up operands that
18562must be constants ("immediate operands"); you must use a predicate that
18563allows only constants, or else enforce the requirement in the extra
18564condition.
18565
18566 Most predicates handle their MODE argument in a uniform manner.  If
18567MODE is 'VOIDmode' (unspecified), then OP can have any mode.  If MODE is
18568anything else, then OP must have the same mode, unless OP is a
18569'CONST_INT' or integer 'CONST_DOUBLE'.  These RTL expressions always
18570have 'VOIDmode', so it would be counterproductive to check that their
18571mode matches.  Instead, predicates that accept 'CONST_INT' and/or
18572integer 'CONST_DOUBLE' check that the value stored in the constant will
18573fit in the requested mode.
18574
18575 Predicates with this behavior are called "normal".  'genrecog' can
18576optimize the instruction recognizer based on knowledge of how normal
18577predicates treat modes.  It can also diagnose certain kinds of common
18578errors in the use of normal predicates; for instance, it is almost
18579always an error to use a normal predicate without specifying a mode.
18580
18581 Predicates that do something different with their MODE argument are
18582called "special".  The generic predicates 'address_operand' and
18583'pmode_register_operand' are special predicates.  'genrecog' does not do
18584any optimizations or diagnosis when special predicates are used.
18585
18586* Menu:
18587
18588* Machine-Independent Predicates::  Predicates available to all back ends.
18589* Defining Predicates::             How to write machine-specific predicate
18590                                    functions.
18591
18592
18593File: gccint.info,  Node: Machine-Independent Predicates,  Next: Defining Predicates,  Up: Predicates
18594
1859516.7.1 Machine-Independent Predicates
18596-------------------------------------
18597
18598These are the generic predicates available to all back ends.  They are
18599defined in 'recog.c'.  The first category of predicates allow only
18600constant, or "immediate", operands.
18601
18602 -- Function: immediate_operand
18603     This predicate allows any sort of constant that fits in MODE.  It
18604     is an appropriate choice for instructions that take operands that
18605     must be constant.
18606
18607 -- Function: const_int_operand
18608     This predicate allows any 'CONST_INT' expression that fits in MODE.
18609     It is an appropriate choice for an immediate operand that does not
18610     allow a symbol or label.
18611
18612 -- Function: const_double_operand
18613     This predicate accepts any 'CONST_DOUBLE' expression that has
18614     exactly MODE.  If MODE is 'VOIDmode', it will also accept
18615     'CONST_INT'.  It is intended for immediate floating point
18616     constants.
18617
18618The second category of predicates allow only some kind of machine
18619register.
18620
18621 -- Function: register_operand
18622     This predicate allows any 'REG' or 'SUBREG' expression that is
18623     valid for MODE.  It is often suitable for arithmetic instruction
18624     operands on a RISC machine.
18625
18626 -- Function: pmode_register_operand
18627     This is a slight variant on 'register_operand' which works around a
18628     limitation in the machine-description reader.
18629
18630          (match_operand N "pmode_register_operand" CONSTRAINT)
18631
18632     means exactly what
18633
18634          (match_operand:P N "register_operand" CONSTRAINT)
18635
18636     would mean, if the machine-description reader accepted ':P' mode
18637     suffixes.  Unfortunately, it cannot, because 'Pmode' is an alias
18638     for some other mode, and might vary with machine-specific options.
18639     *Note Misc::.
18640
18641 -- Function: scratch_operand
18642     This predicate allows hard registers and 'SCRATCH' expressions, but
18643     not pseudo-registers.  It is used internally by 'match_scratch'; it
18644     should not be used directly.
18645
18646The third category of predicates allow only some kind of memory
18647reference.
18648
18649 -- Function: memory_operand
18650     This predicate allows any valid reference to a quantity of mode
18651     MODE in memory, as determined by the weak form of
18652     'GO_IF_LEGITIMATE_ADDRESS' (*note Addressing Modes::).
18653
18654 -- Function: address_operand
18655     This predicate is a little unusual; it allows any operand that is a
18656     valid expression for the _address_ of a quantity of mode MODE,
18657     again determined by the weak form of 'GO_IF_LEGITIMATE_ADDRESS'.
18658     To first order, if '(mem:MODE (EXP))' is acceptable to
18659     'memory_operand', then EXP is acceptable to 'address_operand'.
18660     Note that EXP does not necessarily have the mode MODE.
18661
18662 -- Function: indirect_operand
18663     This is a stricter form of 'memory_operand' which allows only
18664     memory references with a 'general_operand' as the address
18665     expression.  New uses of this predicate are discouraged, because
18666     'general_operand' is very permissive, so it's hard to tell what an
18667     'indirect_operand' does or does not allow.  If a target has
18668     different requirements for memory operands for different
18669     instructions, it is better to define target-specific predicates
18670     which enforce the hardware's requirements explicitly.
18671
18672 -- Function: push_operand
18673     This predicate allows a memory reference suitable for pushing a
18674     value onto the stack.  This will be a 'MEM' which refers to
18675     'stack_pointer_rtx', with a side-effect in its address expression
18676     (*note Incdec::); which one is determined by the 'STACK_PUSH_CODE'
18677     macro (*note Frame Layout::).
18678
18679 -- Function: pop_operand
18680     This predicate allows a memory reference suitable for popping a
18681     value off the stack.  Again, this will be a 'MEM' referring to
18682     'stack_pointer_rtx', with a side-effect in its address expression.
18683     However, this time 'STACK_POP_CODE' is expected.
18684
18685The fourth category of predicates allow some combination of the above
18686operands.
18687
18688 -- Function: nonmemory_operand
18689     This predicate allows any immediate or register operand valid for
18690     MODE.
18691
18692 -- Function: nonimmediate_operand
18693     This predicate allows any register or memory operand valid for
18694     MODE.
18695
18696 -- Function: general_operand
18697     This predicate allows any immediate, register, or memory operand
18698     valid for MODE.
18699
18700Finally, there are two generic operator predicates.
18701
18702 -- Function: comparison_operator
18703     This predicate matches any expression which performs an arithmetic
18704     comparison in MODE; that is, 'COMPARISON_P' is true for the
18705     expression code.
18706
18707 -- Function: ordered_comparison_operator
18708     This predicate matches any expression which performs an arithmetic
18709     comparison in MODE and whose expression code is valid for integer
18710     modes; that is, the expression code will be one of 'eq', 'ne',
18711     'lt', 'ltu', 'le', 'leu', 'gt', 'gtu', 'ge', 'geu'.
18712
18713
18714File: gccint.info,  Node: Defining Predicates,  Prev: Machine-Independent Predicates,  Up: Predicates
18715
1871616.7.2 Defining Machine-Specific Predicates
18717-------------------------------------------
18718
18719Many machines have requirements for their operands that cannot be
18720expressed precisely using the generic predicates.  You can define
18721additional predicates using 'define_predicate' and
18722'define_special_predicate' expressions.  These expressions have three
18723operands:
18724
18725   * The name of the predicate, as it will be referred to in
18726     'match_operand' or 'match_operator' expressions.
18727
18728   * An RTL expression which evaluates to true if the predicate allows
18729     the operand OP, false if it does not.  This expression can only use
18730     the following RTL codes:
18731
18732     'MATCH_OPERAND'
18733          When written inside a predicate expression, a 'MATCH_OPERAND'
18734          expression evaluates to true if the predicate it names would
18735          allow OP.  The operand number and constraint are ignored.  Due
18736          to limitations in 'genrecog', you can only refer to generic
18737          predicates and predicates that have already been defined.
18738
18739     'MATCH_CODE'
18740          This expression evaluates to true if OP or a specified
18741          subexpression of OP has one of a given list of RTX codes.
18742
18743          The first operand of this expression is a string constant
18744          containing a comma-separated list of RTX code names (in lower
18745          case).  These are the codes for which the 'MATCH_CODE' will be
18746          true.
18747
18748          The second operand is a string constant which indicates what
18749          subexpression of OP to examine.  If it is absent or the empty
18750          string, OP itself is examined.  Otherwise, the string constant
18751          must be a sequence of digits and/or lowercase letters.  Each
18752          character indicates a subexpression to extract from the
18753          current expression; for the first character this is OP, for
18754          the second and subsequent characters it is the result of the
18755          previous character.  A digit N extracts 'XEXP (E, N)'; a
18756          letter L extracts 'XVECEXP (E, 0, N)' where N is the
18757          alphabetic ordinal of L (0 for 'a', 1 for 'b', and so on).
18758          The 'MATCH_CODE' then examines the RTX code of the
18759          subexpression extracted by the complete string.  It is not
18760          possible to extract components of an 'rtvec' that is not at
18761          position 0 within its RTX object.
18762
18763     'MATCH_TEST'
18764          This expression has one operand, a string constant containing
18765          a C expression.  The predicate's arguments, OP and MODE, are
18766          available with those names in the C expression.  The
18767          'MATCH_TEST' evaluates to true if the C expression evaluates
18768          to a nonzero value.  'MATCH_TEST' expressions must not have
18769          side effects.
18770
18771     'AND'
18772     'IOR'
18773     'NOT'
18774     'IF_THEN_ELSE'
18775          The basic 'MATCH_' expressions can be combined using these
18776          logical operators, which have the semantics of the C operators
18777          '&&', '||', '!', and '? :' respectively.  As in Common Lisp,
18778          you may give an 'AND' or 'IOR' expression an arbitrary number
18779          of arguments; this has exactly the same effect as writing a
18780          chain of two-argument 'AND' or 'IOR' expressions.
18781
18782   * An optional block of C code, which should execute 'return true' if
18783     the predicate is found to match and 'return false' if it does not.
18784     It must not have any side effects.  The predicate arguments, OP and
18785     MODE, are available with those names.
18786
18787     If a code block is present in a predicate definition, then the RTL
18788     expression must evaluate to true _and_ the code block must execute
18789     'return true' for the predicate to allow the operand.  The RTL
18790     expression is evaluated first; do not re-check anything in the code
18791     block that was checked in the RTL expression.
18792
18793 The program 'genrecog' scans 'define_predicate' and
18794'define_special_predicate' expressions to determine which RTX codes are
18795possibly allowed.  You should always make this explicit in the RTL
18796predicate expression, using 'MATCH_OPERAND' and 'MATCH_CODE'.
18797
18798 Here is an example of a simple predicate definition, from the IA64
18799machine description:
18800
18801     ;; True if OP is a 'SYMBOL_REF' which refers to the sdata section.
18802     (define_predicate "small_addr_symbolic_operand"
18803       (and (match_code "symbol_ref")
18804            (match_test "SYMBOL_REF_SMALL_ADDR_P (op)")))
18805
18806And here is another, showing the use of the C block.
18807
18808     ;; True if OP is a register operand that is (or could be) a GR reg.
18809     (define_predicate "gr_register_operand"
18810       (match_operand 0 "register_operand")
18811     {
18812       unsigned int regno;
18813       if (GET_CODE (op) == SUBREG)
18814         op = SUBREG_REG (op);
18815
18816       regno = REGNO (op);
18817       return (regno >= FIRST_PSEUDO_REGISTER || GENERAL_REGNO_P (regno));
18818     })
18819
18820 Predicates written with 'define_predicate' automatically include a test
18821that MODE is 'VOIDmode', or OP has the same mode as MODE, or OP is a
18822'CONST_INT' or 'CONST_DOUBLE'.  They do _not_ check specifically for
18823integer 'CONST_DOUBLE', nor do they test that the value of either kind
18824of constant fits in the requested mode.  This is because target-specific
18825predicates that take constants usually have to do more stringent value
18826checks anyway.  If you need the exact same treatment of 'CONST_INT' or
18827'CONST_DOUBLE' that the generic predicates provide, use a
18828'MATCH_OPERAND' subexpression to call 'const_int_operand',
18829'const_double_operand', or 'immediate_operand'.
18830
18831 Predicates written with 'define_special_predicate' do not get any
18832automatic mode checks, and are treated as having special mode handling
18833by 'genrecog'.
18834
18835 The program 'genpreds' is responsible for generating code to test
18836predicates.  It also writes a header file containing function
18837declarations for all machine-specific predicates.  It is not necessary
18838to declare these predicates in 'CPU-protos.h'.
18839
18840
18841File: gccint.info,  Node: Constraints,  Next: Standard Names,  Prev: Predicates,  Up: Machine Desc
18842
1884316.8 Operand Constraints
18844========================
18845
18846Each 'match_operand' in an instruction pattern can specify constraints
18847for the operands allowed.  The constraints allow you to fine-tune
18848matching within the set of operands allowed by the predicate.
18849
18850 Constraints can say whether an operand may be in a register, and which
18851kinds of register; whether the operand can be a memory reference, and
18852which kinds of address; whether the operand may be an immediate
18853constant, and which possible values it may have.  Constraints can also
18854require two operands to match.  Side-effects aren't allowed in operands
18855of inline 'asm', unless '<' or '>' constraints are used, because there
18856is no guarantee that the side-effects will happen exactly once in an
18857instruction that can update the addressing register.
18858
18859* Menu:
18860
18861* Simple Constraints::  Basic use of constraints.
18862* Multi-Alternative::   When an insn has two alternative constraint-patterns.
18863* Class Preferences::   Constraints guide which hard register to put things in.
18864* Modifiers::           More precise control over effects of constraints.
18865* Machine Constraints:: Existing constraints for some particular machines.
18866* Disable Insn Alternatives:: Disable insn alternatives using the 'enabled' attribute.
18867* Define Constraints::  How to define machine-specific constraints.
18868* C Constraint Interface:: How to test constraints from C code.
18869
18870
18871File: gccint.info,  Node: Simple Constraints,  Next: Multi-Alternative,  Up: Constraints
18872
1887316.8.1 Simple Constraints
18874-------------------------
18875
18876The simplest kind of constraint is a string full of letters, each of
18877which describes one kind of operand that is permitted.  Here are the
18878letters that are allowed:
18879
18880whitespace
18881     Whitespace characters are ignored and can be inserted at any
18882     position except the first.  This enables each alternative for
18883     different operands to be visually aligned in the machine
18884     description even if they have different number of constraints and
18885     modifiers.
18886
18887'm'
18888     A memory operand is allowed, with any kind of address that the
18889     machine supports in general.  Note that the letter used for the
18890     general memory constraint can be re-defined by a back end using the
18891     'TARGET_MEM_CONSTRAINT' macro.
18892
18893'o'
18894     A memory operand is allowed, but only if the address is
18895     "offsettable".  This means that adding a small integer (actually,
18896     the width in bytes of the operand, as determined by its machine
18897     mode) may be added to the address and the result is also a valid
18898     memory address.
18899
18900     For example, an address which is constant is offsettable; so is an
18901     address that is the sum of a register and a constant (as long as a
18902     slightly larger constant is also within the range of
18903     address-offsets supported by the machine); but an autoincrement or
18904     autodecrement address is not offsettable.  More complicated
18905     indirect/indexed addresses may or may not be offsettable depending
18906     on the other addressing modes that the machine supports.
18907
18908     Note that in an output operand which can be matched by another
18909     operand, the constraint letter 'o' is valid only when accompanied
18910     by both '<' (if the target machine has predecrement addressing) and
18911     '>' (if the target machine has preincrement addressing).
18912
18913'V'
18914     A memory operand that is not offsettable.  In other words, anything
18915     that would fit the 'm' constraint but not the 'o' constraint.
18916
18917'<'
18918     A memory operand with autodecrement addressing (either predecrement
18919     or postdecrement) is allowed.  In inline 'asm' this constraint is
18920     only allowed if the operand is used exactly once in an instruction
18921     that can handle the side-effects.  Not using an operand with '<' in
18922     constraint string in the inline 'asm' pattern at all or using it in
18923     multiple instructions isn't valid, because the side-effects
18924     wouldn't be performed or would be performed more than once.
18925     Furthermore, on some targets the operand with '<' in constraint
18926     string must be accompanied by special instruction suffixes like
18927     '%U0' instruction suffix on PowerPC or '%P0' on IA-64.
18928
18929'>'
18930     A memory operand with autoincrement addressing (either preincrement
18931     or postincrement) is allowed.  In inline 'asm' the same
18932     restrictions as for '<' apply.
18933
18934'r'
18935     A register operand is allowed provided that it is in a general
18936     register.
18937
18938'i'
18939     An immediate integer operand (one with constant value) is allowed.
18940     This includes symbolic constants whose values will be known only at
18941     assembly time or later.
18942
18943'n'
18944     An immediate integer operand with a known numeric value is allowed.
18945     Many systems cannot support assembly-time constants for operands
18946     less than a word wide.  Constraints for these operands should use
18947     'n' rather than 'i'.
18948
18949'I', 'J', 'K', ... 'P'
18950     Other letters in the range 'I' through 'P' may be defined in a
18951     machine-dependent fashion to permit immediate integer operands with
18952     explicit integer values in specified ranges.  For example, on the
18953     68000, 'I' is defined to stand for the range of values 1 to 8.
18954     This is the range permitted as a shift count in the shift
18955     instructions.
18956
18957'E'
18958     An immediate floating operand (expression code 'const_double') is
18959     allowed, but only if the target floating point format is the same
18960     as that of the host machine (on which the compiler is running).
18961
18962'F'
18963     An immediate floating operand (expression code 'const_double' or
18964     'const_vector') is allowed.
18965
18966'G', 'H'
18967     'G' and 'H' may be defined in a machine-dependent fashion to permit
18968     immediate floating operands in particular ranges of values.
18969
18970's'
18971     An immediate integer operand whose value is not an explicit integer
18972     is allowed.
18973
18974     This might appear strange; if an insn allows a constant operand
18975     with a value not known at compile time, it certainly must allow any
18976     known value.  So why use 's' instead of 'i'?  Sometimes it allows
18977     better code to be generated.
18978
18979     For example, on the 68000 in a fullword instruction it is possible
18980     to use an immediate operand; but if the immediate value is between
18981     -128 and 127, better code results from loading the value into a
18982     register and using the register.  This is because the load into the
18983     register can be done with a 'moveq' instruction.  We arrange for
18984     this to happen by defining the letter 'K' to mean "any integer
18985     outside the range -128 to 127", and then specifying 'Ks' in the
18986     operand constraints.
18987
18988'g'
18989     Any register, memory or immediate integer operand is allowed,
18990     except for registers that are not general registers.
18991
18992'X'
18993     Any operand whatsoever is allowed, even if it does not satisfy
18994     'general_operand'.  This is normally used in the constraint of a
18995     'match_scratch' when certain alternatives will not actually require
18996     a scratch register.
18997
18998'0', '1', '2', ... '9'
18999     An operand that matches the specified operand number is allowed.
19000     If a digit is used together with letters within the same
19001     alternative, the digit should come last.
19002
19003     This number is allowed to be more than a single digit.  If multiple
19004     digits are encountered consecutively, they are interpreted as a
19005     single decimal integer.  There is scant chance for ambiguity, since
19006     to-date it has never been desirable that '10' be interpreted as
19007     matching either operand 1 _or_ operand 0.  Should this be desired,
19008     one can use multiple alternatives instead.
19009
19010     This is called a "matching constraint" and what it really means is
19011     that the assembler has only a single operand that fills two roles
19012     considered separate in the RTL insn.  For example, an add insn has
19013     two input operands and one output operand in the RTL, but on most
19014     CISC machines an add instruction really has only two operands, one
19015     of them an input-output operand:
19016
19017          addl #35,r12
19018
19019     Matching constraints are used in these circumstances.  More
19020     precisely, the two operands that match must include one input-only
19021     operand and one output-only operand.  Moreover, the digit must be a
19022     smaller number than the number of the operand that uses it in the
19023     constraint.
19024
19025     For operands to match in a particular case usually means that they
19026     are identical-looking RTL expressions.  But in a few special cases
19027     specific kinds of dissimilarity are allowed.  For example, '*x' as
19028     an input operand will match '*x++' as an output operand.  For
19029     proper results in such cases, the output template should always use
19030     the output-operand's number when printing the operand.
19031
19032'p'
19033     An operand that is a valid memory address is allowed.  This is for
19034     "load address" and "push address" instructions.
19035
19036     'p' in the constraint must be accompanied by 'address_operand' as
19037     the predicate in the 'match_operand'.  This predicate interprets
19038     the mode specified in the 'match_operand' as the mode of the memory
19039     reference for which the address would be valid.
19040
19041OTHER-LETTERS
19042     Other letters can be defined in machine-dependent fashion to stand
19043     for particular classes of registers or other arbitrary operand
19044     types.  'd', 'a' and 'f' are defined on the 68000/68020 to stand
19045     for data, address and floating point registers.
19046
19047 In order to have valid assembler code, each operand must satisfy its
19048constraint.  But a failure to do so does not prevent the pattern from
19049applying to an insn.  Instead, it directs the compiler to modify the
19050code so that the constraint will be satisfied.  Usually this is done by
19051copying an operand into a register.
19052
19053 Contrast, therefore, the two instruction patterns that follow:
19054
19055     (define_insn ""
19056       [(set (match_operand:SI 0 "general_operand" "=r")
19057             (plus:SI (match_dup 0)
19058                      (match_operand:SI 1 "general_operand" "r")))]
19059       ""
19060       "...")
19061
19062which has two operands, one of which must appear in two places, and
19063
19064     (define_insn ""
19065       [(set (match_operand:SI 0 "general_operand" "=r")
19066             (plus:SI (match_operand:SI 1 "general_operand" "0")
19067                      (match_operand:SI 2 "general_operand" "r")))]
19068       ""
19069       "...")
19070
19071which has three operands, two of which are required by a constraint to
19072be identical.  If we are considering an insn of the form
19073
19074     (insn N PREV NEXT
19075       (set (reg:SI 3)
19076            (plus:SI (reg:SI 6) (reg:SI 109)))
19077       ...)
19078
19079the first pattern would not apply at all, because this insn does not
19080contain two identical subexpressions in the right place.  The pattern
19081would say, "That does not look like an add instruction; try other
19082patterns".  The second pattern would say, "Yes, that's an add
19083instruction, but there is something wrong with it".  It would direct the
19084reload pass of the compiler to generate additional insns to make the
19085constraint true.  The results might look like this:
19086
19087     (insn N2 PREV N
19088       (set (reg:SI 3) (reg:SI 6))
19089       ...)
19090
19091     (insn N N2 NEXT
19092       (set (reg:SI 3)
19093            (plus:SI (reg:SI 3) (reg:SI 109)))
19094       ...)
19095
19096 It is up to you to make sure that each operand, in each pattern, has
19097constraints that can handle any RTL expression that could be present for
19098that operand.  (When multiple alternatives are in use, each pattern
19099must, for each possible combination of operand expressions, have at
19100least one alternative which can handle that combination of operands.)
19101The constraints don't need to _allow_ any possible operand--when this is
19102the case, they do not constrain--but they must at least point the way to
19103reloading any possible operand so that it will fit.
19104
19105   * If the constraint accepts whatever operands the predicate permits,
19106     there is no problem: reloading is never necessary for this operand.
19107
19108     For example, an operand whose constraints permit everything except
19109     registers is safe provided its predicate rejects registers.
19110
19111     An operand whose predicate accepts only constant values is safe
19112     provided its constraints include the letter 'i'.  If any possible
19113     constant value is accepted, then nothing less than 'i' will do; if
19114     the predicate is more selective, then the constraints may also be
19115     more selective.
19116
19117   * Any operand expression can be reloaded by copying it into a
19118     register.  So if an operand's constraints allow some kind of
19119     register, it is certain to be safe.  It need not permit all classes
19120     of registers; the compiler knows how to copy a register into
19121     another register of the proper class in order to make an
19122     instruction valid.
19123
19124   * A nonoffsettable memory reference can be reloaded by copying the
19125     address into a register.  So if the constraint uses the letter 'o',
19126     all memory references are taken care of.
19127
19128   * A constant operand can be reloaded by allocating space in memory to
19129     hold it as preinitialized data.  Then the memory reference can be
19130     used in place of the constant.  So if the constraint uses the
19131     letters 'o' or 'm', constant operands are not a problem.
19132
19133   * If the constraint permits a constant and a pseudo register used in
19134     an insn was not allocated to a hard register and is equivalent to a
19135     constant, the register will be replaced with the constant.  If the
19136     predicate does not permit a constant and the insn is re-recognized
19137     for some reason, the compiler will crash.  Thus the predicate must
19138     always recognize any objects allowed by the constraint.
19139
19140 If the operand's predicate can recognize registers, but the constraint
19141does not permit them, it can make the compiler crash.  When this operand
19142happens to be a register, the reload pass will be stymied, because it
19143does not know how to copy a register temporarily into memory.
19144
19145 If the predicate accepts a unary operator, the constraint applies to
19146the operand.  For example, the MIPS processor at ISA level 3 supports an
19147instruction which adds two registers in 'SImode' to produce a 'DImode'
19148result, but only if the registers are correctly sign extended.  This
19149predicate for the input operands accepts a 'sign_extend' of an 'SImode'
19150register.  Write the constraint to indicate the type of register that is
19151required for the operand of the 'sign_extend'.
19152
19153
19154File: gccint.info,  Node: Multi-Alternative,  Next: Class Preferences,  Prev: Simple Constraints,  Up: Constraints
19155
1915616.8.2 Multiple Alternative Constraints
19157---------------------------------------
19158
19159Sometimes a single instruction has multiple alternative sets of possible
19160operands.  For example, on the 68000, a logical-or instruction can
19161combine register or an immediate value into memory, or it can combine
19162any kind of operand into a register; but it cannot combine one memory
19163location into another.
19164
19165 These constraints are represented as multiple alternatives.  An
19166alternative can be described by a series of letters for each operand.
19167The overall constraint for an operand is made from the letters for this
19168operand from the first alternative, a comma, the letters for this
19169operand from the second alternative, a comma, and so on until the last
19170alternative.  Here is how it is done for fullword logical-or on the
1917168000:
19172
19173     (define_insn "iorsi3"
19174       [(set (match_operand:SI 0 "general_operand" "=m,d")
19175             (ior:SI (match_operand:SI 1 "general_operand" "%0,0")
19176                     (match_operand:SI 2 "general_operand" "dKs,dmKs")))]
19177       ...)
19178
19179 The first alternative has 'm' (memory) for operand 0, '0' for operand 1
19180(meaning it must match operand 0), and 'dKs' for operand 2.  The second
19181alternative has 'd' (data register) for operand 0, '0' for operand 1,
19182and 'dmKs' for operand 2.  The '=' and '%' in the constraints apply to
19183all the alternatives; their meaning is explained in the next section
19184(*note Class Preferences::).
19185
19186 If all the operands fit any one alternative, the instruction is valid.
19187Otherwise, for each alternative, the compiler counts how many
19188instructions must be added to copy the operands so that that alternative
19189applies.  The alternative requiring the least copying is chosen.  If two
19190alternatives need the same amount of copying, the one that comes first
19191is chosen.  These choices can be altered with the '?' and '!'
19192characters:
19193
19194'?'
19195     Disparage slightly the alternative that the '?' appears in, as a
19196     choice when no alternative applies exactly.  The compiler regards
19197     this alternative as one unit more costly for each '?' that appears
19198     in it.
19199
19200'!'
19201     Disparage severely the alternative that the '!' appears in.  This
19202     alternative can still be used if it fits without reloading, but if
19203     reloading is needed, some other alternative will be used.
19204
19205 When an insn pattern has multiple alternatives in its constraints,
19206often the appearance of the assembler code is determined mostly by which
19207alternative was matched.  When this is so, the C code for writing the
19208assembler code can use the variable 'which_alternative', which is the
19209ordinal number of the alternative that was actually satisfied (0 for the
19210first, 1 for the second alternative, etc.).  *Note Output Statement::.
19211
19212
19213File: gccint.info,  Node: Class Preferences,  Next: Modifiers,  Prev: Multi-Alternative,  Up: Constraints
19214
1921516.8.3 Register Class Preferences
19216---------------------------------
19217
19218The operand constraints have another function: they enable the compiler
19219to decide which kind of hardware register a pseudo register is best
19220allocated to.  The compiler examines the constraints that apply to the
19221insns that use the pseudo register, looking for the machine-dependent
19222letters such as 'd' and 'a' that specify classes of registers.  The
19223pseudo register is put in whichever class gets the most "votes".  The
19224constraint letters 'g' and 'r' also vote: they vote in favor of a
19225general register.  The machine description says which registers are
19226considered general.
19227
19228 Of course, on some machines all registers are equivalent, and no
19229register classes are defined.  Then none of this complexity is relevant.
19230
19231
19232File: gccint.info,  Node: Modifiers,  Next: Machine Constraints,  Prev: Class Preferences,  Up: Constraints
19233
1923416.8.4 Constraint Modifier Characters
19235-------------------------------------
19236
19237Here are constraint modifier characters.
19238
19239'='
19240     Means that this operand is write-only for this instruction: the
19241     previous value is discarded and replaced by output data.
19242
19243'+'
19244     Means that this operand is both read and written by the
19245     instruction.
19246
19247     When the compiler fixes up the operands to satisfy the constraints,
19248     it needs to know which operands are inputs to the instruction and
19249     which are outputs from it.  '=' identifies an output; '+'
19250     identifies an operand that is both input and output; all other
19251     operands are assumed to be input only.
19252
19253     If you specify '=' or '+' in a constraint, you put it in the first
19254     character of the constraint string.
19255
19256'&'
19257     Means (in a particular alternative) that this operand is an
19258     "earlyclobber" operand, which is modified before the instruction is
19259     finished using the input operands.  Therefore, this operand may not
19260     lie in a register that is used as an input operand or as part of
19261     any memory address.
19262
19263     '&' applies only to the alternative in which it is written.  In
19264     constraints with multiple alternatives, sometimes one alternative
19265     requires '&' while others do not.  See, for example, the 'movdf'
19266     insn of the 68000.
19267
19268     An input operand can be tied to an earlyclobber operand if its only
19269     use as an input occurs before the early result is written.  Adding
19270     alternatives of this form often allows GCC to produce better code
19271     when only some of the inputs can be affected by the earlyclobber.
19272     See, for example, the 'mulsi3' insn of the ARM.
19273
19274     '&' does not obviate the need to write '='.
19275
19276'%'
19277     Declares the instruction to be commutative for this operand and the
19278     following operand.  This means that the compiler may interchange
19279     the two operands if that is the cheapest way to make all operands
19280     fit the constraints.  This is often used in patterns for addition
19281     instructions that really have only two operands: the result must go
19282     in one of the arguments.  Here for example, is how the 68000
19283     halfword-add instruction is defined:
19284
19285          (define_insn "addhi3"
19286            [(set (match_operand:HI 0 "general_operand" "=m,r")
19287               (plus:HI (match_operand:HI 1 "general_operand" "%0,0")
19288                        (match_operand:HI 2 "general_operand" "di,g")))]
19289            ...)
19290     GCC can only handle one commutative pair in an asm; if you use
19291     more, the compiler may fail.  Note that you need not use the
19292     modifier if the two alternatives are strictly identical; this would
19293     only waste time in the reload pass.  The modifier is not
19294     operational after register allocation, so the result of
19295     'define_peephole2' and 'define_split's performed after reload
19296     cannot rely on '%' to make the intended insn match.
19297
19298'#'
19299     Says that all following characters, up to the next comma, are to be
19300     ignored as a constraint.  They are significant only for choosing
19301     register preferences.
19302
19303'*'
19304     Says that the following character should be ignored when choosing
19305     register preferences.  '*' has no effect on the meaning of the
19306     constraint as a constraint, and no effect on reloading.  For LRA
19307     '*' additionally disparages slightly the alternative if the
19308     following character matches the operand.
19309
19310     Here is an example: the 68000 has an instruction to sign-extend a
19311     halfword in a data register, and can also sign-extend a value by
19312     copying it into an address register.  While either kind of register
19313     is acceptable, the constraints on an address-register destination
19314     are less strict, so it is best if register allocation makes an
19315     address register its goal.  Therefore, '*' is used so that the 'd'
19316     constraint letter (for data register) is ignored when computing
19317     register preferences.
19318
19319          (define_insn "extendhisi2"
19320            [(set (match_operand:SI 0 "general_operand" "=*d,a")
19321                  (sign_extend:SI
19322                   (match_operand:HI 1 "general_operand" "0,g")))]
19323            ...)
19324
19325
19326File: gccint.info,  Node: Machine Constraints,  Next: Disable Insn Alternatives,  Prev: Modifiers,  Up: Constraints
19327
1932816.8.5 Constraints for Particular Machines
19329------------------------------------------
19330
19331Whenever possible, you should use the general-purpose constraint letters
19332in 'asm' arguments, since they will convey meaning more readily to
19333people reading your code.  Failing that, use the constraint letters that
19334usually have very similar meanings across architectures.  The most
19335commonly used constraints are 'm' and 'r' (for memory and
19336general-purpose registers respectively; *note Simple Constraints::), and
19337'I', usually the letter indicating the most common immediate-constant
19338format.
19339
19340 Each architecture defines additional constraints.  These constraints
19341are used by the compiler itself for instruction generation, as well as
19342for 'asm' statements; therefore, some of the constraints are not
19343particularly useful for 'asm'.  Here is a summary of some of the
19344machine-dependent constraints available on some particular machines; it
19345includes both constraints that are useful for 'asm' and constraints that
19346aren't.  The compiler source file mentioned in the table heading for
19347each architecture is the definitive reference for the meanings of that
19348architecture's constraints.
19349
19350_AArch64 family--'config/aarch64/constraints.md'_
19351     'k'
19352          The stack pointer register ('SP')
19353
19354     'w'
19355          Floating point or SIMD vector register
19356
19357     'I'
19358          Integer constant that is valid as an immediate operand in an
19359          'ADD' instruction
19360
19361     'J'
19362          Integer constant that is valid as an immediate operand in a
19363          'SUB' instruction (once negated)
19364
19365     'K'
19366          Integer constant that can be used with a 32-bit logical
19367          instruction
19368
19369     'L'
19370          Integer constant that can be used with a 64-bit logical
19371          instruction
19372
19373     'M'
19374          Integer constant that is valid as an immediate operand in a
19375          32-bit 'MOV' pseudo instruction.  The 'MOV' may be assembled
19376          to one of several different machine instructions depending on
19377          the value
19378
19379     'N'
19380          Integer constant that is valid as an immediate operand in a
19381          64-bit 'MOV' pseudo instruction
19382
19383     'S'
19384          An absolute symbolic address or a label reference
19385
19386     'Y'
19387          Floating point constant zero
19388
19389     'Z'
19390          Integer constant zero
19391
19392     'Usa'
19393          An absolute symbolic address
19394
19395     'Ush'
19396          The high part (bits 12 and upwards) of the pc-relative address
19397          of a symbol within 4GB of the instruction
19398
19399     'Q'
19400          A memory address which uses a single base register with no
19401          offset
19402
19403     'Ump'
19404          A memory address suitable for a load/store pair instruction in
19405          SI, DI, SF and DF modes
19406
19407_ARM family--'config/arm/constraints.md'_
19408     'w'
19409          VFP floating-point register
19410
19411     'G'
19412          The floating-point constant 0.0
19413
19414     'I'
19415          Integer that is valid as an immediate operand in a data
19416          processing instruction.  That is, an integer in the range 0 to
19417          255 rotated by a multiple of 2
19418
19419     'J'
19420          Integer in the range -4095 to 4095
19421
19422     'K'
19423          Integer that satisfies constraint 'I' when inverted (ones
19424          complement)
19425
19426     'L'
19427          Integer that satisfies constraint 'I' when negated (twos
19428          complement)
19429
19430     'M'
19431          Integer in the range 0 to 32
19432
19433     'Q'
19434          A memory reference where the exact address is in a single
19435          register (''m'' is preferable for 'asm' statements)
19436
19437     'R'
19438          An item in the constant pool
19439
19440     'S'
19441          A symbol in the text segment of the current file
19442
19443     'Uv'
19444          A memory reference suitable for VFP load/store insns
19445          (reg+constant offset)
19446
19447     'Uy'
19448          A memory reference suitable for iWMMXt load/store
19449          instructions.
19450
19451     'Uq'
19452          A memory reference suitable for the ARMv4 ldrsb instruction.
19453
19454_AVR family--'config/avr/constraints.md'_
19455     'l'
19456          Registers from r0 to r15
19457
19458     'a'
19459          Registers from r16 to r23
19460
19461     'd'
19462          Registers from r16 to r31
19463
19464     'w'
19465          Registers from r24 to r31.  These registers can be used in
19466          'adiw' command
19467
19468     'e'
19469          Pointer register (r26-r31)
19470
19471     'b'
19472          Base pointer register (r28-r31)
19473
19474     'q'
19475          Stack pointer register (SPH:SPL)
19476
19477     't'
19478          Temporary register r0
19479
19480     'x'
19481          Register pair X (r27:r26)
19482
19483     'y'
19484          Register pair Y (r29:r28)
19485
19486     'z'
19487          Register pair Z (r31:r30)
19488
19489     'I'
19490          Constant greater than -1, less than 64
19491
19492     'J'
19493          Constant greater than -64, less than 1
19494
19495     'K'
19496          Constant integer 2
19497
19498     'L'
19499          Constant integer 0
19500
19501     'M'
19502          Constant that fits in 8 bits
19503
19504     'N'
19505          Constant integer -1
19506
19507     'O'
19508          Constant integer 8, 16, or 24
19509
19510     'P'
19511          Constant integer 1
19512
19513     'G'
19514          A floating point constant 0.0
19515
19516     'Q'
19517          A memory address based on Y or Z pointer with displacement.
19518
19519_Epiphany--'config/epiphany/constraints.md'_
19520     'U16'
19521          An unsigned 16-bit constant.
19522
19523     'K'
19524          An unsigned 5-bit constant.
19525
19526     'L'
19527          A signed 11-bit constant.
19528
19529     'Cm1'
19530          A signed 11-bit constant added to -1.  Can only match when the
19531          '-m1reg-REG' option is active.
19532
19533     'Cl1'
19534          Left-shift of -1, i.e., a bit mask with a block of leading
19535          ones, the rest being a block of trailing zeroes.  Can only
19536          match when the '-m1reg-REG' option is active.
19537
19538     'Cr1'
19539          Right-shift of -1, i.e., a bit mask with a trailing block of
19540          ones, the rest being zeroes.  Or to put it another way, one
19541          less than a power of two.  Can only match when the
19542          '-m1reg-REG' option is active.
19543
19544     'Cal'
19545          Constant for arithmetic/logical operations.  This is like 'i',
19546          except that for position independent code, no symbols /
19547          expressions needing relocations are allowed.
19548
19549     'Csy'
19550          Symbolic constant for call/jump instruction.
19551
19552     'Rcs'
19553          The register class usable in short insns.  This is a register
19554          class constraint, and can thus drive register allocation.
19555          This constraint won't match unless '-mprefer-short-insn-regs'
19556          is in effect.
19557
19558     'Rsc'
19559          The the register class of registers that can be used to hold a
19560          sibcall call address.  I.e., a caller-saved register.
19561
19562     'Rct'
19563          Core control register class.
19564
19565     'Rgs'
19566          The register group usable in short insns.  This constraint
19567          does not use a register class, so that it only passively
19568          matches suitable registers, and doesn't drive register
19569          allocation.
19570
19571     'Car'
19572          Constant suitable for the addsi3_r pattern.  This is a valid
19573          offset For byte, halfword, or word addressing.
19574
19575     'Rra'
19576          Matches the return address if it can be replaced with the link
19577          register.
19578
19579     'Rcc'
19580          Matches the integer condition code register.
19581
19582     'Sra'
19583          Matches the return address if it is in a stack slot.
19584
19585     'Cfm'
19586          Matches control register values to switch fp mode, which are
19587          encapsulated in 'UNSPEC_FP_MODE'.
19588
19589_CR16 Architecture--'config/cr16/cr16.h'_
19590
19591     'b'
19592          Registers from r0 to r14 (registers without stack pointer)
19593
19594     't'
19595          Register from r0 to r11 (all 16-bit registers)
19596
19597     'p'
19598          Register from r12 to r15 (all 32-bit registers)
19599
19600     'I'
19601          Signed constant that fits in 4 bits
19602
19603     'J'
19604          Signed constant that fits in 5 bits
19605
19606     'K'
19607          Signed constant that fits in 6 bits
19608
19609     'L'
19610          Unsigned constant that fits in 4 bits
19611
19612     'M'
19613          Signed constant that fits in 32 bits
19614
19615     'N'
19616          Check for 64 bits wide constants for add/sub instructions
19617
19618     'G'
19619          Floating point constant that is legal for store immediate
19620
19621_Hewlett-Packard PA-RISC--'config/pa/pa.h'_
19622     'a'
19623          General register 1
19624
19625     'f'
19626          Floating point register
19627
19628     'q'
19629          Shift amount register
19630
19631     'x'
19632          Floating point register (deprecated)
19633
19634     'y'
19635          Upper floating point register (32-bit), floating point
19636          register (64-bit)
19637
19638     'Z'
19639          Any register
19640
19641     'I'
19642          Signed 11-bit integer constant
19643
19644     'J'
19645          Signed 14-bit integer constant
19646
19647     'K'
19648          Integer constant that can be deposited with a 'zdepi'
19649          instruction
19650
19651     'L'
19652          Signed 5-bit integer constant
19653
19654     'M'
19655          Integer constant 0
19656
19657     'N'
19658          Integer constant that can be loaded with a 'ldil' instruction
19659
19660     'O'
19661          Integer constant whose value plus one is a power of 2
19662
19663     'P'
19664          Integer constant that can be used for 'and' operations in
19665          'depi' and 'extru' instructions
19666
19667     'S'
19668          Integer constant 31
19669
19670     'U'
19671          Integer constant 63
19672
19673     'G'
19674          Floating-point constant 0.0
19675
19676     'A'
19677          A 'lo_sum' data-linkage-table memory operand
19678
19679     'Q'
19680          A memory operand that can be used as the destination operand
19681          of an integer store instruction
19682
19683     'R'
19684          A scaled or unscaled indexed memory operand
19685
19686     'T'
19687          A memory operand for floating-point loads and stores
19688
19689     'W'
19690          A register indirect memory operand
19691
19692_picoChip family--'picochip.h'_
19693     'k'
19694          Stack register.
19695
19696     'f'
19697          Pointer register.  A register which can be used to access
19698          memory without supplying an offset.  Any other register can be
19699          used to access memory, but will need a constant offset.  In
19700          the case of the offset being zero, it is more efficient to use
19701          a pointer register, since this reduces code size.
19702
19703     't'
19704          A twin register.  A register which may be paired with an
19705          adjacent register to create a 32-bit register.
19706
19707     'a'
19708          Any absolute memory address (e.g., symbolic constant, symbolic
19709          constant + offset).
19710
19711     'I'
19712          4-bit signed integer.
19713
19714     'J'
19715          4-bit unsigned integer.
19716
19717     'K'
19718          8-bit signed integer.
19719
19720     'M'
19721          Any constant whose absolute value is no greater than 4-bits.
19722
19723     'N'
19724          10-bit signed integer
19725
19726     'O'
19727          16-bit signed integer.
19728
19729_PowerPC and IBM RS6000--'config/rs6000/constraints.md'_
19730     'b'
19731          Address base register
19732
19733     'd'
19734          Floating point register (containing 64-bit value)
19735
19736     'f'
19737          Floating point register (containing 32-bit value)
19738
19739     'v'
19740          Altivec vector register
19741
19742     'wa'
19743          Any VSX register if the -mvsx option was used or NO_REGS.
19744
19745     'wd'
19746          VSX vector register to hold vector double data or NO_REGS.
19747
19748     'wf'
19749          VSX vector register to hold vector float data or NO_REGS.
19750
19751     'wg'
19752          If '-mmfpgpr' was used, a floating point register or NO_REGS.
19753
19754     'wl'
19755          Floating point register if the LFIWAX instruction is enabled
19756          or NO_REGS.
19757
19758     'wm'
19759          VSX register if direct move instructions are enabled, or
19760          NO_REGS.
19761
19762     'wn'
19763          No register (NO_REGS).
19764
19765     'wr'
19766          General purpose register if 64-bit instructions are enabled or
19767          NO_REGS.
19768
19769     'ws'
19770          VSX vector register to hold scalar double values or NO_REGS.
19771
19772     'wt'
19773          VSX vector register to hold 128 bit integer or NO_REGS.
19774
19775     'wu'
19776          Altivec register to use for float/32-bit int loads/stores or
19777          NO_REGS.
19778
19779     'wv'
19780          Altivec register to use for double loads/stores or NO_REGS.
19781
19782     'ww'
19783          FP or VSX register to perform float operations under '-mvsx'
19784          or NO_REGS.
19785
19786     'wx'
19787          Floating point register if the STFIWX instruction is enabled
19788          or NO_REGS.
19789
19790     'wy'
19791          VSX vector register to hold scalar float values or NO_REGS.
19792
19793     'wz'
19794          Floating point register if the LFIWZX instruction is enabled
19795          or NO_REGS.
19796
19797     'wQ'
19798          A memory address that will work with the 'lq' and 'stq'
19799          instructions.
19800
19801     'h'
19802          'MQ', 'CTR', or 'LINK' register
19803
19804     'q'
19805          'MQ' register
19806
19807     'c'
19808          'CTR' register
19809
19810     'l'
19811          'LINK' register
19812
19813     'x'
19814          'CR' register (condition register) number 0
19815
19816     'y'
19817          'CR' register (condition register)
19818
19819     'z'
19820          'XER[CA]' carry bit (part of the XER register)
19821
19822     'I'
19823          Signed 16-bit constant
19824
19825     'J'
19826          Unsigned 16-bit constant shifted left 16 bits (use 'L' instead
19827          for 'SImode' constants)
19828
19829     'K'
19830          Unsigned 16-bit constant
19831
19832     'L'
19833          Signed 16-bit constant shifted left 16 bits
19834
19835     'M'
19836          Constant larger than 31
19837
19838     'N'
19839          Exact power of 2
19840
19841     'O'
19842          Zero
19843
19844     'P'
19845          Constant whose negation is a signed 16-bit constant
19846
19847     'G'
19848          Floating point constant that can be loaded into a register
19849          with one instruction per word
19850
19851     'H'
19852          Integer/Floating point constant that can be loaded into a
19853          register using three instructions
19854
19855     'm'
19856          Memory operand.  Normally, 'm' does not allow addresses that
19857          update the base register.  If '<' or '>' constraint is also
19858          used, they are allowed and therefore on PowerPC targets in
19859          that case it is only safe to use 'm<>' in an 'asm' statement
19860          if that 'asm' statement accesses the operand exactly once.
19861          The 'asm' statement must also use '%U<OPNO>' as a placeholder
19862          for the "update" flag in the corresponding load or store
19863          instruction.  For example:
19864
19865               asm ("st%U0 %1,%0" : "=m<>" (mem) : "r" (val));
19866
19867          is correct but:
19868
19869               asm ("st %1,%0" : "=m<>" (mem) : "r" (val));
19870
19871          is not.
19872
19873     'es'
19874          A "stable" memory operand; that is, one which does not include
19875          any automodification of the base register.  This used to be
19876          useful when 'm' allowed automodification of the base register,
19877          but as those are now only allowed when '<' or '>' is used,
19878          'es' is basically the same as 'm' without '<' and '>'.
19879
19880     'Q'
19881          Memory operand that is an offset from a register (it is
19882          usually better to use 'm' or 'es' in 'asm' statements)
19883
19884     'Z'
19885          Memory operand that is an indexed or indirect from a register
19886          (it is usually better to use 'm' or 'es' in 'asm' statements)
19887
19888     'R'
19889          AIX TOC entry
19890
19891     'a'
19892          Address operand that is an indexed or indirect from a register
19893          ('p' is preferable for 'asm' statements)
19894
19895     'S'
19896          Constant suitable as a 64-bit mask operand
19897
19898     'T'
19899          Constant suitable as a 32-bit mask operand
19900
19901     'U'
19902          System V Release 4 small data area reference
19903
19904     't'
19905          AND masks that can be performed by two rldic{l, r}
19906          instructions
19907
19908     'W'
19909          Vector constant that does not require memory
19910
19911     'j'
19912          Vector constant that is all zeros.
19913
19914_Intel 386--'config/i386/constraints.md'_
19915     'R'
19916          Legacy register--the eight integer registers available on all
19917          i386 processors ('a', 'b', 'c', 'd', 'si', 'di', 'bp', 'sp').
19918
19919     'q'
19920          Any register accessible as 'Rl'.  In 32-bit mode, 'a', 'b',
19921          'c', and 'd'; in 64-bit mode, any integer register.
19922
19923     'Q'
19924          Any register accessible as 'Rh': 'a', 'b', 'c', and 'd'.
19925
19926     'l'
19927          Any register that can be used as the index in a base+index
19928          memory access: that is, any general register except the stack
19929          pointer.
19930
19931     'a'
19932          The 'a' register.
19933
19934     'b'
19935          The 'b' register.
19936
19937     'c'
19938          The 'c' register.
19939
19940     'd'
19941          The 'd' register.
19942
19943     'S'
19944          The 'si' register.
19945
19946     'D'
19947          The 'di' register.
19948
19949     'A'
19950          The 'a' and 'd' registers.  This class is used for
19951          instructions that return double word results in the 'ax:dx'
19952          register pair.  Single word values will be allocated either in
19953          'ax' or 'dx'.  For example on i386 the following implements
19954          'rdtsc':
19955
19956               unsigned long long rdtsc (void)
19957               {
19958                 unsigned long long tick;
19959                 __asm__ __volatile__("rdtsc":"=A"(tick));
19960                 return tick;
19961               }
19962
19963          This is not correct on x86_64 as it would allocate tick in
19964          either 'ax' or 'dx'.  You have to use the following variant
19965          instead:
19966
19967               unsigned long long rdtsc (void)
19968               {
19969                 unsigned int tickl, tickh;
19970                 __asm__ __volatile__("rdtsc":"=a"(tickl),"=d"(tickh));
19971                 return ((unsigned long long)tickh << 32)|tickl;
19972               }
19973
19974     'f'
19975          Any 80387 floating-point (stack) register.
19976
19977     't'
19978          Top of 80387 floating-point stack ('%st(0)').
19979
19980     'u'
19981          Second from top of 80387 floating-point stack ('%st(1)').
19982
19983     'y'
19984          Any MMX register.
19985
19986     'x'
19987          Any SSE register.
19988
19989     'Yz'
19990          First SSE register ('%xmm0').
19991
19992     'Y2'
19993          Any SSE register, when SSE2 is enabled.
19994
19995     'Yi'
19996          Any SSE register, when SSE2 and inter-unit moves are enabled.
19997
19998     'Ym'
19999          Any MMX register, when inter-unit moves are enabled.
20000
20001     'I'
20002          Integer constant in the range 0 ... 31, for 32-bit shifts.
20003
20004     'J'
20005          Integer constant in the range 0 ... 63, for 64-bit shifts.
20006
20007     'K'
20008          Signed 8-bit integer constant.
20009
20010     'L'
20011          '0xFF' or '0xFFFF', for andsi as a zero-extending move.
20012
20013     'M'
20014          0, 1, 2, or 3 (shifts for the 'lea' instruction).
20015
20016     'N'
20017          Unsigned 8-bit integer constant (for 'in' and 'out'
20018          instructions).
20019
20020     'O'
20021          Integer constant in the range 0 ... 127, for 128-bit shifts.
20022
20023     'G'
20024          Standard 80387 floating point constant.
20025
20026     'C'
20027          Standard SSE floating point constant.
20028
20029     'e'
20030          32-bit signed integer constant, or a symbolic reference known
20031          to fit that range (for immediate operands in sign-extending
20032          x86-64 instructions).
20033
20034     'Z'
20035          32-bit unsigned integer constant, or a symbolic reference
20036          known to fit that range (for immediate operands in
20037          zero-extending x86-64 instructions).
20038
20039_Intel IA-64--'config/ia64/ia64.h'_
20040     'a'
20041          General register 'r0' to 'r3' for 'addl' instruction
20042
20043     'b'
20044          Branch register
20045
20046     'c'
20047          Predicate register ('c' as in "conditional")
20048
20049     'd'
20050          Application register residing in M-unit
20051
20052     'e'
20053          Application register residing in I-unit
20054
20055     'f'
20056          Floating-point register
20057
20058     'm'
20059          Memory operand.  If used together with '<' or '>', the operand
20060          can have postincrement and postdecrement which require
20061          printing with '%Pn' on IA-64.
20062
20063     'G'
20064          Floating-point constant 0.0 or 1.0
20065
20066     'I'
20067          14-bit signed integer constant
20068
20069     'J'
20070          22-bit signed integer constant
20071
20072     'K'
20073          8-bit signed integer constant for logical instructions
20074
20075     'L'
20076          8-bit adjusted signed integer constant for compare pseudo-ops
20077
20078     'M'
20079          6-bit unsigned integer constant for shift counts
20080
20081     'N'
20082          9-bit signed integer constant for load and store
20083          postincrements
20084
20085     'O'
20086          The constant zero
20087
20088     'P'
20089          0 or -1 for 'dep' instruction
20090
20091     'Q'
20092          Non-volatile memory for floating-point loads and stores
20093
20094     'R'
20095          Integer constant in the range 1 to 4 for 'shladd' instruction
20096
20097     'S'
20098          Memory operand except postincrement and postdecrement.  This
20099          is now roughly the same as 'm' when not used together with '<'
20100          or '>'.
20101
20102_FRV--'config/frv/frv.h'_
20103     'a'
20104          Register in the class 'ACC_REGS' ('acc0' to 'acc7').
20105
20106     'b'
20107          Register in the class 'EVEN_ACC_REGS' ('acc0' to 'acc7').
20108
20109     'c'
20110          Register in the class 'CC_REGS' ('fcc0' to 'fcc3' and 'icc0'
20111          to 'icc3').
20112
20113     'd'
20114          Register in the class 'GPR_REGS' ('gr0' to 'gr63').
20115
20116     'e'
20117          Register in the class 'EVEN_REGS' ('gr0' to 'gr63').  Odd
20118          registers are excluded not in the class but through the use of
20119          a machine mode larger than 4 bytes.
20120
20121     'f'
20122          Register in the class 'FPR_REGS' ('fr0' to 'fr63').
20123
20124     'h'
20125          Register in the class 'FEVEN_REGS' ('fr0' to 'fr63').  Odd
20126          registers are excluded not in the class but through the use of
20127          a machine mode larger than 4 bytes.
20128
20129     'l'
20130          Register in the class 'LR_REG' (the 'lr' register).
20131
20132     'q'
20133          Register in the class 'QUAD_REGS' ('gr2' to 'gr63').  Register
20134          numbers not divisible by 4 are excluded not in the class but
20135          through the use of a machine mode larger than 8 bytes.
20136
20137     't'
20138          Register in the class 'ICC_REGS' ('icc0' to 'icc3').
20139
20140     'u'
20141          Register in the class 'FCC_REGS' ('fcc0' to 'fcc3').
20142
20143     'v'
20144          Register in the class 'ICR_REGS' ('cc4' to 'cc7').
20145
20146     'w'
20147          Register in the class 'FCR_REGS' ('cc0' to 'cc3').
20148
20149     'x'
20150          Register in the class 'QUAD_FPR_REGS' ('fr0' to 'fr63').
20151          Register numbers not divisible by 4 are excluded not in the
20152          class but through the use of a machine mode larger than 8
20153          bytes.
20154
20155     'z'
20156          Register in the class 'SPR_REGS' ('lcr' and 'lr').
20157
20158     'A'
20159          Register in the class 'QUAD_ACC_REGS' ('acc0' to 'acc7').
20160
20161     'B'
20162          Register in the class 'ACCG_REGS' ('accg0' to 'accg7').
20163
20164     'C'
20165          Register in the class 'CR_REGS' ('cc0' to 'cc7').
20166
20167     'G'
20168          Floating point constant zero
20169
20170     'I'
20171          6-bit signed integer constant
20172
20173     'J'
20174          10-bit signed integer constant
20175
20176     'L'
20177          16-bit signed integer constant
20178
20179     'M'
20180          16-bit unsigned integer constant
20181
20182     'N'
20183          12-bit signed integer constant that is negative--i.e. in the
20184          range of -2048 to -1
20185
20186     'O'
20187          Constant zero
20188
20189     'P'
20190          12-bit signed integer constant that is greater than zero--i.e.
20191          in the range of 1 to 2047.
20192
20193_Blackfin family--'config/bfin/constraints.md'_
20194     'a'
20195          P register
20196
20197     'd'
20198          D register
20199
20200     'z'
20201          A call clobbered P register.
20202
20203     'qN'
20204          A single register.  If N is in the range 0 to 7, the
20205          corresponding D register.  If it is 'A', then the register P0.
20206
20207     'D'
20208          Even-numbered D register
20209
20210     'W'
20211          Odd-numbered D register
20212
20213     'e'
20214          Accumulator register.
20215
20216     'A'
20217          Even-numbered accumulator register.
20218
20219     'B'
20220          Odd-numbered accumulator register.
20221
20222     'b'
20223          I register
20224
20225     'v'
20226          B register
20227
20228     'f'
20229          M register
20230
20231     'c'
20232          Registers used for circular buffering, i.e.  I, B, or L
20233          registers.
20234
20235     'C'
20236          The CC register.
20237
20238     't'
20239          LT0 or LT1.
20240
20241     'k'
20242          LC0 or LC1.
20243
20244     'u'
20245          LB0 or LB1.
20246
20247     'x'
20248          Any D, P, B, M, I or L register.
20249
20250     'y'
20251          Additional registers typically used only in prologues and
20252          epilogues: RETS, RETN, RETI, RETX, RETE, ASTAT, SEQSTAT and
20253          USP.
20254
20255     'w'
20256          Any register except accumulators or CC.
20257
20258     'Ksh'
20259          Signed 16 bit integer (in the range -32768 to 32767)
20260
20261     'Kuh'
20262          Unsigned 16 bit integer (in the range 0 to 65535)
20263
20264     'Ks7'
20265          Signed 7 bit integer (in the range -64 to 63)
20266
20267     'Ku7'
20268          Unsigned 7 bit integer (in the range 0 to 127)
20269
20270     'Ku5'
20271          Unsigned 5 bit integer (in the range 0 to 31)
20272
20273     'Ks4'
20274          Signed 4 bit integer (in the range -8 to 7)
20275
20276     'Ks3'
20277          Signed 3 bit integer (in the range -3 to 4)
20278
20279     'Ku3'
20280          Unsigned 3 bit integer (in the range 0 to 7)
20281
20282     'PN'
20283          Constant N, where N is a single-digit constant in the range 0
20284          to 4.
20285
20286     'PA'
20287          An integer equal to one of the MACFLAG_XXX constants that is
20288          suitable for use with either accumulator.
20289
20290     'PB'
20291          An integer equal to one of the MACFLAG_XXX constants that is
20292          suitable for use only with accumulator A1.
20293
20294     'M1'
20295          Constant 255.
20296
20297     'M2'
20298          Constant 65535.
20299
20300     'J'
20301          An integer constant with exactly a single bit set.
20302
20303     'L'
20304          An integer constant with all bits set except exactly one.
20305
20306     'H'
20307
20308     'Q'
20309          Any SYMBOL_REF.
20310
20311_M32C--'config/m32c/m32c.c'_
20312     'Rsp'
20313     'Rfb'
20314     'Rsb'
20315          '$sp', '$fb', '$sb'.
20316
20317     'Rcr'
20318          Any control register, when they're 16 bits wide (nothing if
20319          control registers are 24 bits wide)
20320
20321     'Rcl'
20322          Any control register, when they're 24 bits wide.
20323
20324     'R0w'
20325     'R1w'
20326     'R2w'
20327     'R3w'
20328          $r0, $r1, $r2, $r3.
20329
20330     'R02'
20331          $r0 or $r2, or $r2r0 for 32 bit values.
20332
20333     'R13'
20334          $r1 or $r3, or $r3r1 for 32 bit values.
20335
20336     'Rdi'
20337          A register that can hold a 64 bit value.
20338
20339     'Rhl'
20340          $r0 or $r1 (registers with addressable high/low bytes)
20341
20342     'R23'
20343          $r2 or $r3
20344
20345     'Raa'
20346          Address registers
20347
20348     'Raw'
20349          Address registers when they're 16 bits wide.
20350
20351     'Ral'
20352          Address registers when they're 24 bits wide.
20353
20354     'Rqi'
20355          Registers that can hold QI values.
20356
20357     'Rad'
20358          Registers that can be used with displacements ($a0, $a1, $sb).
20359
20360     'Rsi'
20361          Registers that can hold 32 bit values.
20362
20363     'Rhi'
20364          Registers that can hold 16 bit values.
20365
20366     'Rhc'
20367          Registers chat can hold 16 bit values, including all control
20368          registers.
20369
20370     'Rra'
20371          $r0 through R1, plus $a0 and $a1.
20372
20373     'Rfl'
20374          The flags register.
20375
20376     'Rmm'
20377          The memory-based pseudo-registers $mem0 through $mem15.
20378
20379     'Rpi'
20380          Registers that can hold pointers (16 bit registers for r8c,
20381          m16c; 24 bit registers for m32cm, m32c).
20382
20383     'Rpa'
20384          Matches multiple registers in a PARALLEL to form a larger
20385          register.  Used to match function return values.
20386
20387     'Is3'
20388          -8 ... 7
20389
20390     'IS1'
20391          -128 ... 127
20392
20393     'IS2'
20394          -32768 ... 32767
20395
20396     'IU2'
20397          0 ... 65535
20398
20399     'In4'
20400          -8 ... -1 or 1 ... 8
20401
20402     'In5'
20403          -16 ... -1 or 1 ... 16
20404
20405     'In6'
20406          -32 ... -1 or 1 ... 32
20407
20408     'IM2'
20409          -65536 ... -1
20410
20411     'Ilb'
20412          An 8 bit value with exactly one bit set.
20413
20414     'Ilw'
20415          A 16 bit value with exactly one bit set.
20416
20417     'Sd'
20418          The common src/dest memory addressing modes.
20419
20420     'Sa'
20421          Memory addressed using $a0 or $a1.
20422
20423     'Si'
20424          Memory addressed with immediate addresses.
20425
20426     'Ss'
20427          Memory addressed using the stack pointer ($sp).
20428
20429     'Sf'
20430          Memory addressed using the frame base register ($fb).
20431
20432     'Ss'
20433          Memory addressed using the small base register ($sb).
20434
20435     'S1'
20436          $r1h
20437
20438_MeP--'config/mep/constraints.md'_
20439
20440     'a'
20441          The $sp register.
20442
20443     'b'
20444          The $tp register.
20445
20446     'c'
20447          Any control register.
20448
20449     'd'
20450          Either the $hi or the $lo register.
20451
20452     'em'
20453          Coprocessor registers that can be directly loaded ($c0-$c15).
20454
20455     'ex'
20456          Coprocessor registers that can be moved to each other.
20457
20458     'er'
20459          Coprocessor registers that can be moved to core registers.
20460
20461     'h'
20462          The $hi register.
20463
20464     'j'
20465          The $rpc register.
20466
20467     'l'
20468          The $lo register.
20469
20470     't'
20471          Registers which can be used in $tp-relative addressing.
20472
20473     'v'
20474          The $gp register.
20475
20476     'x'
20477          The coprocessor registers.
20478
20479     'y'
20480          The coprocessor control registers.
20481
20482     'z'
20483          The $0 register.
20484
20485     'A'
20486          User-defined register set A.
20487
20488     'B'
20489          User-defined register set B.
20490
20491     'C'
20492          User-defined register set C.
20493
20494     'D'
20495          User-defined register set D.
20496
20497     'I'
20498          Offsets for $gp-rel addressing.
20499
20500     'J'
20501          Constants that can be used directly with boolean insns.
20502
20503     'K'
20504          Constants that can be moved directly to registers.
20505
20506     'L'
20507          Small constants that can be added to registers.
20508
20509     'M'
20510          Long shift counts.
20511
20512     'N'
20513          Small constants that can be compared to registers.
20514
20515     'O'
20516          Constants that can be loaded into the top half of registers.
20517
20518     'S'
20519          Signed 8-bit immediates.
20520
20521     'T'
20522          Symbols encoded for $tp-rel or $gp-rel addressing.
20523
20524     'U'
20525          Non-constant addresses for loading/saving coprocessor
20526          registers.
20527
20528     'W'
20529          The top half of a symbol's value.
20530
20531     'Y'
20532          A register indirect address without offset.
20533
20534     'Z'
20535          Symbolic references to the control bus.
20536
20537_MicroBlaze--'config/microblaze/constraints.md'_
20538     'd'
20539          A general register ('r0' to 'r31').
20540
20541     'z'
20542          A status register ('rmsr', '$fcc1' to '$fcc7').
20543
20544_MIPS--'config/mips/constraints.md'_
20545     'd'
20546          An address register.  This is equivalent to 'r' unless
20547          generating MIPS16 code.
20548
20549     'f'
20550          A floating-point register (if available).
20551
20552     'h'
20553          Formerly the 'hi' register.  This constraint is no longer
20554          supported.
20555
20556     'l'
20557          The 'lo' register.  Use this register to store values that are
20558          no bigger than a word.
20559
20560     'x'
20561          The concatenated 'hi' and 'lo' registers.  Use this register
20562          to store doubleword values.
20563
20564     'c'
20565          A register suitable for use in an indirect jump.  This will
20566          always be '$25' for '-mabicalls'.
20567
20568     'v'
20569          Register '$3'.  Do not use this constraint in new code; it is
20570          retained only for compatibility with glibc.
20571
20572     'y'
20573          Equivalent to 'r'; retained for backwards compatibility.
20574
20575     'z'
20576          A floating-point condition code register.
20577
20578     'I'
20579          A signed 16-bit constant (for arithmetic instructions).
20580
20581     'J'
20582          Integer zero.
20583
20584     'K'
20585          An unsigned 16-bit constant (for logic instructions).
20586
20587     'L'
20588          A signed 32-bit constant in which the lower 16 bits are zero.
20589          Such constants can be loaded using 'lui'.
20590
20591     'M'
20592          A constant that cannot be loaded using 'lui', 'addiu' or
20593          'ori'.
20594
20595     'N'
20596          A constant in the range -65535 to -1 (inclusive).
20597
20598     'O'
20599          A signed 15-bit constant.
20600
20601     'P'
20602          A constant in the range 1 to 65535 (inclusive).
20603
20604     'G'
20605          Floating-point zero.
20606
20607     'R'
20608          An address that can be used in a non-macro load or store.
20609
20610_Motorola 680x0--'config/m68k/constraints.md'_
20611     'a'
20612          Address register
20613
20614     'd'
20615          Data register
20616
20617     'f'
20618          68881 floating-point register, if available
20619
20620     'I'
20621          Integer in the range 1 to 8
20622
20623     'J'
20624          16-bit signed number
20625
20626     'K'
20627          Signed number whose magnitude is greater than 0x80
20628
20629     'L'
20630          Integer in the range -8 to -1
20631
20632     'M'
20633          Signed number whose magnitude is greater than 0x100
20634
20635     'N'
20636          Range 24 to 31, rotatert:SI 8 to 1 expressed as rotate
20637
20638     'O'
20639          16 (for rotate using swap)
20640
20641     'P'
20642          Range 8 to 15, rotatert:HI 8 to 1 expressed as rotate
20643
20644     'R'
20645          Numbers that mov3q can handle
20646
20647     'G'
20648          Floating point constant that is not a 68881 constant
20649
20650     'S'
20651          Operands that satisfy 'm' when -mpcrel is in effect
20652
20653     'T'
20654          Operands that satisfy 's' when -mpcrel is not in effect
20655
20656     'Q'
20657          Address register indirect addressing mode
20658
20659     'U'
20660          Register offset addressing
20661
20662     'W'
20663          const_call_operand
20664
20665     'Cs'
20666          symbol_ref or const
20667
20668     'Ci'
20669          const_int
20670
20671     'C0'
20672          const_int 0
20673
20674     'Cj'
20675          Range of signed numbers that don't fit in 16 bits
20676
20677     'Cmvq'
20678          Integers valid for mvq
20679
20680     'Capsw'
20681          Integers valid for a moveq followed by a swap
20682
20683     'Cmvz'
20684          Integers valid for mvz
20685
20686     'Cmvs'
20687          Integers valid for mvs
20688
20689     'Ap'
20690          push_operand
20691
20692     'Ac'
20693          Non-register operands allowed in clr
20694
20695_Moxie--'config/moxie/constraints.md'_
20696     'A'
20697          An absolute address
20698
20699     'B'
20700          An offset address
20701
20702     'W'
20703          A register indirect memory operand
20704
20705     'I'
20706          A constant in the range of 0 to 255.
20707
20708     'N'
20709          A constant in the range of 0 to -255.
20710
20711_PDP-11--'config/pdp11/constraints.md'_
20712     'a'
20713          Floating point registers AC0 through AC3.  These can be loaded
20714          from/to memory with a single instruction.
20715
20716     'd'
20717          Odd numbered general registers (R1, R3, R5).  These are used
20718          for 16-bit multiply operations.
20719
20720     'f'
20721          Any of the floating point registers (AC0 through AC5).
20722
20723     'G'
20724          Floating point constant 0.
20725
20726     'I'
20727          An integer constant that fits in 16 bits.
20728
20729     'J'
20730          An integer constant whose low order 16 bits are zero.
20731
20732     'K'
20733          An integer constant that does not meet the constraints for
20734          codes 'I' or 'J'.
20735
20736     'L'
20737          The integer constant 1.
20738
20739     'M'
20740          The integer constant -1.
20741
20742     'N'
20743          The integer constant 0.
20744
20745     'O'
20746          Integer constants -4 through -1 and 1 through 4; shifts by
20747          these amounts are handled as multiple single-bit shifts rather
20748          than a single variable-length shift.
20749
20750     'Q'
20751          A memory reference which requires an additional word (address
20752          or offset) after the opcode.
20753
20754     'R'
20755          A memory reference that is encoded within the opcode.
20756
20757_RL78--'config/rl78/constraints.md'_
20758
20759     'Int3'
20760          An integer constant in the range 1 ... 7.
20761     'Int8'
20762          An integer constant in the range 0 ... 255.
20763     'J'
20764          An integer constant in the range -255 ... 0
20765     'K'
20766          The integer constant 1.
20767     'L'
20768          The integer constant -1.
20769     'M'
20770          The integer constant 0.
20771     'N'
20772          The integer constant 2.
20773     'O'
20774          The integer constant -2.
20775     'P'
20776          An integer constant in the range 1 ... 15.
20777     'Qbi'
20778          The built-in compare types-eq, ne, gtu, ltu, geu, and leu.
20779     'Qsc'
20780          The synthetic compare types-gt, lt, ge, and le.
20781     'Wab'
20782          A memory reference with an absolute address.
20783     'Wbc'
20784          A memory reference using 'BC' as a base register, with an
20785          optional offset.
20786     'Wca'
20787          A memory reference using 'AX', 'BC', 'DE', or 'HL' for the
20788          address, for calls.
20789     'Wcv'
20790          A memory reference using any 16-bit register pair for the
20791          address, for calls.
20792     'Wd2'
20793          A memory reference using 'DE' as a base register, with an
20794          optional offset.
20795     'Wde'
20796          A memory reference using 'DE' as a base register, without any
20797          offset.
20798     'Wfr'
20799          Any memory reference to an address in the far address space.
20800     'Wh1'
20801          A memory reference using 'HL' as a base register, with an
20802          optional one-byte offset.
20803     'Whb'
20804          A memory reference using 'HL' as a base register, with 'B' or
20805          'C' as the index register.
20806     'Whl'
20807          A memory reference using 'HL' as a base register, without any
20808          offset.
20809     'Ws1'
20810          A memory reference using 'SP' as a base register, with an
20811          optional one-byte offset.
20812     'Y'
20813          Any memory reference to an address in the near address space.
20814     'A'
20815          The 'AX' register.
20816     'B'
20817          The 'BC' register.
20818     'D'
20819          The 'DE' register.
20820     'R'
20821          'A' through 'L' registers.
20822     'S'
20823          The 'SP' register.
20824     'T'
20825          The 'HL' register.
20826     'Z08W'
20827          The 16-bit 'R8' register.
20828     'Z10W'
20829          The 16-bit 'R10' register.
20830     'Zint'
20831          The registers reserved for interrupts ('R24' to 'R31').
20832     'a'
20833          The 'A' register.
20834     'b'
20835          The 'B' register.
20836     'c'
20837          The 'C' register.
20838     'd'
20839          The 'D' register.
20840     'e'
20841          The 'E' register.
20842     'h'
20843          The 'H' register.
20844     'l'
20845          The 'L' register.
20846     'v'
20847          The virtual registers.
20848     'w'
20849          The 'PSW' register.
20850     'x'
20851          The 'X' register.
20852
20853_RX--'config/rx/constraints.md'_
20854     'Q'
20855          An address which does not involve register indirect addressing
20856          or pre/post increment/decrement addressing.
20857
20858     'Symbol'
20859          A symbol reference.
20860
20861     'Int08'
20862          A constant in the range -256 to 255, inclusive.
20863
20864     'Sint08'
20865          A constant in the range -128 to 127, inclusive.
20866
20867     'Sint16'
20868          A constant in the range -32768 to 32767, inclusive.
20869
20870     'Sint24'
20871          A constant in the range -8388608 to 8388607, inclusive.
20872
20873     'Uint04'
20874          A constant in the range 0 to 15, inclusive.
20875
20876_SPARC--'config/sparc/sparc.h'_
20877     'f'
20878          Floating-point register on the SPARC-V8 architecture and lower
20879          floating-point register on the SPARC-V9 architecture.
20880
20881     'e'
20882          Floating-point register.  It is equivalent to 'f' on the
20883          SPARC-V8 architecture and contains both lower and upper
20884          floating-point registers on the SPARC-V9 architecture.
20885
20886     'c'
20887          Floating-point condition code register.
20888
20889     'd'
20890          Lower floating-point register.  It is only valid on the
20891          SPARC-V9 architecture when the Visual Instruction Set is
20892          available.
20893
20894     'b'
20895          Floating-point register.  It is only valid on the SPARC-V9
20896          architecture when the Visual Instruction Set is available.
20897
20898     'h'
20899          64-bit global or out register for the SPARC-V8+ architecture.
20900
20901     'C'
20902          The constant all-ones, for floating-point.
20903
20904     'A'
20905          Signed 5-bit constant
20906
20907     'D'
20908          A vector constant
20909
20910     'I'
20911          Signed 13-bit constant
20912
20913     'J'
20914          Zero
20915
20916     'K'
20917          32-bit constant with the low 12 bits clear (a constant that
20918          can be loaded with the 'sethi' instruction)
20919
20920     'L'
20921          A constant in the range supported by 'movcc' instructions
20922          (11-bit signed immediate)
20923
20924     'M'
20925          A constant in the range supported by 'movrcc' instructions
20926          (10-bit signed immediate)
20927
20928     'N'
20929          Same as 'K', except that it verifies that bits that are not in
20930          the lower 32-bit range are all zero.  Must be used instead of
20931          'K' for modes wider than 'SImode'
20932
20933     'O'
20934          The constant 4096
20935
20936     'G'
20937          Floating-point zero
20938
20939     'H'
20940          Signed 13-bit constant, sign-extended to 32 or 64 bits
20941
20942     'P'
20943          The constant -1
20944
20945     'Q'
20946          Floating-point constant whose integral representation can be
20947          moved into an integer register using a single sethi
20948          instruction
20949
20950     'R'
20951          Floating-point constant whose integral representation can be
20952          moved into an integer register using a single mov instruction
20953
20954     'S'
20955          Floating-point constant whose integral representation can be
20956          moved into an integer register using a high/lo_sum instruction
20957          sequence
20958
20959     'T'
20960          Memory address aligned to an 8-byte boundary
20961
20962     'U'
20963          Even register
20964
20965     'W'
20966          Memory address for 'e' constraint registers
20967
20968     'w'
20969          Memory address with only a base register
20970
20971     'Y'
20972          Vector zero
20973
20974_SPU--'config/spu/spu.h'_
20975     'a'
20976          An immediate which can be loaded with the il/ila/ilh/ilhu
20977          instructions.  const_int is treated as a 64 bit value.
20978
20979     'c'
20980          An immediate for and/xor/or instructions.  const_int is
20981          treated as a 64 bit value.
20982
20983     'd'
20984          An immediate for the 'iohl' instruction.  const_int is treated
20985          as a 64 bit value.
20986
20987     'f'
20988          An immediate which can be loaded with 'fsmbi'.
20989
20990     'A'
20991          An immediate which can be loaded with the il/ila/ilh/ilhu
20992          instructions.  const_int is treated as a 32 bit value.
20993
20994     'B'
20995          An immediate for most arithmetic instructions.  const_int is
20996          treated as a 32 bit value.
20997
20998     'C'
20999          An immediate for and/xor/or instructions.  const_int is
21000          treated as a 32 bit value.
21001
21002     'D'
21003          An immediate for the 'iohl' instruction.  const_int is treated
21004          as a 32 bit value.
21005
21006     'I'
21007          A constant in the range [-64, 63] for shift/rotate
21008          instructions.
21009
21010     'J'
21011          An unsigned 7-bit constant for conversion/nop/channel
21012          instructions.
21013
21014     'K'
21015          A signed 10-bit constant for most arithmetic instructions.
21016
21017     'M'
21018          A signed 16 bit immediate for 'stop'.
21019
21020     'N'
21021          An unsigned 16-bit constant for 'iohl' and 'fsmbi'.
21022
21023     'O'
21024          An unsigned 7-bit constant whose 3 least significant bits are
21025          0.
21026
21027     'P'
21028          An unsigned 3-bit constant for 16-byte rotates and shifts
21029
21030     'R'
21031          Call operand, reg, for indirect calls
21032
21033     'S'
21034          Call operand, symbol, for relative calls.
21035
21036     'T'
21037          Call operand, const_int, for absolute calls.
21038
21039     'U'
21040          An immediate which can be loaded with the il/ila/ilh/ilhu
21041          instructions.  const_int is sign extended to 128 bit.
21042
21043     'W'
21044          An immediate for shift and rotate instructions.  const_int is
21045          treated as a 32 bit value.
21046
21047     'Y'
21048          An immediate for and/xor/or instructions.  const_int is sign
21049          extended as a 128 bit.
21050
21051     'Z'
21052          An immediate for the 'iohl' instruction.  const_int is sign
21053          extended to 128 bit.
21054
21055_S/390 and zSeries--'config/s390/s390.h'_
21056     'a'
21057          Address register (general purpose register except r0)
21058
21059     'c'
21060          Condition code register
21061
21062     'd'
21063          Data register (arbitrary general purpose register)
21064
21065     'f'
21066          Floating-point register
21067
21068     'I'
21069          Unsigned 8-bit constant (0-255)
21070
21071     'J'
21072          Unsigned 12-bit constant (0-4095)
21073
21074     'K'
21075          Signed 16-bit constant (-32768-32767)
21076
21077     'L'
21078          Value appropriate as displacement.
21079          '(0..4095)'
21080               for short displacement
21081          '(-524288..524287)'
21082               for long displacement
21083
21084     'M'
21085          Constant integer with a value of 0x7fffffff.
21086
21087     'N'
21088          Multiple letter constraint followed by 4 parameter letters.
21089          '0..9:'
21090               number of the part counting from most to least
21091               significant
21092          'H,Q:'
21093               mode of the part
21094          'D,S,H:'
21095               mode of the containing operand
21096          '0,F:'
21097               value of the other parts (F--all bits set)
21098          The constraint matches if the specified part of a constant has
21099          a value different from its other parts.
21100
21101     'Q'
21102          Memory reference without index register and with short
21103          displacement.
21104
21105     'R'
21106          Memory reference with index register and short displacement.
21107
21108     'S'
21109          Memory reference without index register but with long
21110          displacement.
21111
21112     'T'
21113          Memory reference with index register and long displacement.
21114
21115     'U'
21116          Pointer with short displacement.
21117
21118     'W'
21119          Pointer with long displacement.
21120
21121     'Y'
21122          Shift count operand.
21123
21124_Score family--'config/score/score.h'_
21125     'd'
21126          Registers from r0 to r32.
21127
21128     'e'
21129          Registers from r0 to r16.
21130
21131     't'
21132          r8--r11 or r22--r27 registers.
21133
21134     'h'
21135          hi register.
21136
21137     'l'
21138          lo register.
21139
21140     'x'
21141          hi + lo register.
21142
21143     'q'
21144          cnt register.
21145
21146     'y'
21147          lcb register.
21148
21149     'z'
21150          scb register.
21151
21152     'a'
21153          cnt + lcb + scb register.
21154
21155     'c'
21156          cr0--cr15 register.
21157
21158     'b'
21159          cp1 registers.
21160
21161     'f'
21162          cp2 registers.
21163
21164     'i'
21165          cp3 registers.
21166
21167     'j'
21168          cp1 + cp2 + cp3 registers.
21169
21170     'I'
21171          High 16-bit constant (32-bit constant with 16 LSBs zero).
21172
21173     'J'
21174          Unsigned 5 bit integer (in the range 0 to 31).
21175
21176     'K'
21177          Unsigned 16 bit integer (in the range 0 to 65535).
21178
21179     'L'
21180          Signed 16 bit integer (in the range -32768 to 32767).
21181
21182     'M'
21183          Unsigned 14 bit integer (in the range 0 to 16383).
21184
21185     'N'
21186          Signed 14 bit integer (in the range -8192 to 8191).
21187
21188     'Z'
21189          Any SYMBOL_REF.
21190
21191_Xstormy16--'config/stormy16/stormy16.h'_
21192     'a'
21193          Register r0.
21194
21195     'b'
21196          Register r1.
21197
21198     'c'
21199          Register r2.
21200
21201     'd'
21202          Register r8.
21203
21204     'e'
21205          Registers r0 through r7.
21206
21207     't'
21208          Registers r0 and r1.
21209
21210     'y'
21211          The carry register.
21212
21213     'z'
21214          Registers r8 and r9.
21215
21216     'I'
21217          A constant between 0 and 3 inclusive.
21218
21219     'J'
21220          A constant that has exactly one bit set.
21221
21222     'K'
21223          A constant that has exactly one bit clear.
21224
21225     'L'
21226          A constant between 0 and 255 inclusive.
21227
21228     'M'
21229          A constant between -255 and 0 inclusive.
21230
21231     'N'
21232          A constant between -3 and 0 inclusive.
21233
21234     'O'
21235          A constant between 1 and 4 inclusive.
21236
21237     'P'
21238          A constant between -4 and -1 inclusive.
21239
21240     'Q'
21241          A memory reference that is a stack push.
21242
21243     'R'
21244          A memory reference that is a stack pop.
21245
21246     'S'
21247          A memory reference that refers to a constant address of known
21248          value.
21249
21250     'T'
21251          The register indicated by Rx (not implemented yet).
21252
21253     'U'
21254          A constant that is not between 2 and 15 inclusive.
21255
21256     'Z'
21257          The constant 0.
21258
21259_TI C6X family--'config/c6x/constraints.md'_
21260     'a'
21261          Register file A (A0-A31).
21262
21263     'b'
21264          Register file B (B0-B31).
21265
21266     'A'
21267          Predicate registers in register file A (A0-A2 on C64X and
21268          higher, A1 and A2 otherwise).
21269
21270     'B'
21271          Predicate registers in register file B (B0-B2).
21272
21273     'C'
21274          A call-used register in register file B (B0-B9, B16-B31).
21275
21276     'Da'
21277          Register file A, excluding predicate registers (A3-A31, plus
21278          A0 if not C64X or higher).
21279
21280     'Db'
21281          Register file B, excluding predicate registers (B3-B31).
21282
21283     'Iu4'
21284          Integer constant in the range 0 ... 15.
21285
21286     'Iu5'
21287          Integer constant in the range 0 ... 31.
21288
21289     'In5'
21290          Integer constant in the range -31 ... 0.
21291
21292     'Is5'
21293          Integer constant in the range -16 ... 15.
21294
21295     'I5x'
21296          Integer constant that can be the operand of an ADDA or a SUBA
21297          insn.
21298
21299     'IuB'
21300          Integer constant in the range 0 ... 65535.
21301
21302     'IsB'
21303          Integer constant in the range -32768 ... 32767.
21304
21305     'IsC'
21306          Integer constant in the range -2^{20} ... 2^{20} - 1.
21307
21308     'Jc'
21309          Integer constant that is a valid mask for the clr instruction.
21310
21311     'Js'
21312          Integer constant that is a valid mask for the set instruction.
21313
21314     'Q'
21315          Memory location with A base register.
21316
21317     'R'
21318          Memory location with B base register.
21319
21320     'S0'
21321          On C64x+ targets, a GP-relative small data reference.
21322
21323     'S1'
21324          Any kind of 'SYMBOL_REF', for use in a call address.
21325
21326     'Si'
21327          Any kind of immediate operand, unless it matches the S0
21328          constraint.
21329
21330     'T'
21331          Memory location with B base register, but not using a long
21332          offset.
21333
21334     'W'
21335          A memory operand with an address that can't be used in an
21336          unaligned access.
21337
21338     'Z'
21339          Register B14 (aka DP).
21340
21341_TILE-Gx--'config/tilegx/constraints.md'_
21342     'R00'
21343     'R01'
21344     'R02'
21345     'R03'
21346     'R04'
21347     'R05'
21348     'R06'
21349     'R07'
21350     'R08'
21351     'R09'
21352     'R10'
21353          Each of these represents a register constraint for an
21354          individual register, from r0 to r10.
21355
21356     'I'
21357          Signed 8-bit integer constant.
21358
21359     'J'
21360          Signed 16-bit integer constant.
21361
21362     'K'
21363          Unsigned 16-bit integer constant.
21364
21365     'L'
21366          Integer constant that fits in one signed byte when incremented
21367          by one (-129 ... 126).
21368
21369     'm'
21370          Memory operand.  If used together with '<' or '>', the operand
21371          can have postincrement which requires printing with '%In' and
21372          '%in' on TILE-Gx.  For example:
21373
21374               asm ("st_add %I0,%1,%i0" : "=m<>" (*mem) : "r" (val));
21375
21376     'M'
21377          A bit mask suitable for the BFINS instruction.
21378
21379     'N'
21380          Integer constant that is a byte tiled out eight times.
21381
21382     'O'
21383          The integer zero constant.
21384
21385     'P'
21386          Integer constant that is a sign-extended byte tiled out as
21387          four shorts.
21388
21389     'Q'
21390          Integer constant that fits in one signed byte when incremented
21391          (-129 ... 126), but excluding -1.
21392
21393     'S'
21394          Integer constant that has all 1 bits consecutive and starting
21395          at bit 0.
21396
21397     'T'
21398          A 16-bit fragment of a got, tls, or pc-relative reference.
21399
21400     'U'
21401          Memory operand except postincrement.  This is roughly the same
21402          as 'm' when not used together with '<' or '>'.
21403
21404     'W'
21405          An 8-element vector constant with identical elements.
21406
21407     'Y'
21408          A 4-element vector constant with identical elements.
21409
21410     'Z0'
21411          The integer constant 0xffffffff.
21412
21413     'Z1'
21414          The integer constant 0xffffffff00000000.
21415
21416_TILEPro--'config/tilepro/constraints.md'_
21417     'R00'
21418     'R01'
21419     'R02'
21420     'R03'
21421     'R04'
21422     'R05'
21423     'R06'
21424     'R07'
21425     'R08'
21426     'R09'
21427     'R10'
21428          Each of these represents a register constraint for an
21429          individual register, from r0 to r10.
21430
21431     'I'
21432          Signed 8-bit integer constant.
21433
21434     'J'
21435          Signed 16-bit integer constant.
21436
21437     'K'
21438          Nonzero integer constant with low 16 bits zero.
21439
21440     'L'
21441          Integer constant that fits in one signed byte when incremented
21442          by one (-129 ... 126).
21443
21444     'm'
21445          Memory operand.  If used together with '<' or '>', the operand
21446          can have postincrement which requires printing with '%In' and
21447          '%in' on TILEPro.  For example:
21448
21449               asm ("swadd %I0,%1,%i0" : "=m<>" (mem) : "r" (val));
21450
21451     'M'
21452          A bit mask suitable for the MM instruction.
21453
21454     'N'
21455          Integer constant that is a byte tiled out four times.
21456
21457     'O'
21458          The integer zero constant.
21459
21460     'P'
21461          Integer constant that is a sign-extended byte tiled out as two
21462          shorts.
21463
21464     'Q'
21465          Integer constant that fits in one signed byte when incremented
21466          (-129 ... 126), but excluding -1.
21467
21468     'T'
21469          A symbolic operand, or a 16-bit fragment of a got, tls, or
21470          pc-relative reference.
21471
21472     'U'
21473          Memory operand except postincrement.  This is roughly the same
21474          as 'm' when not used together with '<' or '>'.
21475
21476     'W'
21477          A 4-element vector constant with identical elements.
21478
21479     'Y'
21480          A 2-element vector constant with identical elements.
21481
21482_Xtensa--'config/xtensa/constraints.md'_
21483     'a'
21484          General-purpose 32-bit register
21485
21486     'b'
21487          One-bit boolean register
21488
21489     'A'
21490          MAC16 40-bit accumulator register
21491
21492     'I'
21493          Signed 12-bit integer constant, for use in MOVI instructions
21494
21495     'J'
21496          Signed 8-bit integer constant, for use in ADDI instructions
21497
21498     'K'
21499          Integer constant valid for BccI instructions
21500
21501     'L'
21502          Unsigned constant valid for BccUI instructions
21503
21504
21505File: gccint.info,  Node: Disable Insn Alternatives,  Next: Define Constraints,  Prev: Machine Constraints,  Up: Constraints
21506
2150716.8.6 Disable insn alternatives using the 'enabled' attribute
21508--------------------------------------------------------------
21509
21510The 'enabled' insn attribute may be used to disable certain insn
21511alternatives for machine-specific reasons.  This is useful when adding
21512new instructions to an existing pattern which are only available for
21513certain cpu architecture levels as specified with the '-march=' option.
21514
21515 If an insn alternative is disabled, then it will never be used.  The
21516compiler treats the constraints for the disabled alternative as
21517unsatisfiable.
21518
21519 In order to make use of the 'enabled' attribute a back end has to add
21520in the machine description files:
21521
21522  1. A definition of the 'enabled' insn attribute.  The attribute is
21523     defined as usual using the 'define_attr' command.  This definition
21524     should be based on other insn attributes and/or target flags.  The
21525     'enabled' attribute is a numeric attribute and should evaluate to
21526     '(const_int 1)' for an enabled alternative and to '(const_int 0)'
21527     otherwise.
21528  2. A definition of another insn attribute used to describe for what
21529     reason an insn alternative might be available or not.  E.g.
21530     'cpu_facility' as in the example below.
21531  3. An assignment for the second attribute to each insn definition
21532     combining instructions which are not all available under the same
21533     circumstances.  (Note: It obviously only makes sense for
21534     definitions with more than one alternative.  Otherwise the insn
21535     pattern should be disabled or enabled using the insn condition.)
21536
21537 E.g.  the following two patterns could easily be merged using the
21538'enabled' attribute:
21539
21540
21541     (define_insn "*movdi_old"
21542       [(set (match_operand:DI 0 "register_operand" "=d")
21543             (match_operand:DI 1 "register_operand" " d"))]
21544       "!TARGET_NEW"
21545       "lgr %0,%1")
21546
21547     (define_insn "*movdi_new"
21548       [(set (match_operand:DI 0 "register_operand" "=d,f,d")
21549             (match_operand:DI 1 "register_operand" " d,d,f"))]
21550       "TARGET_NEW"
21551       "@
21552        lgr  %0,%1
21553        ldgr %0,%1
21554        lgdr %0,%1")
21555
21556
21557 to:
21558
21559
21560     (define_insn "*movdi_combined"
21561       [(set (match_operand:DI 0 "register_operand" "=d,f,d")
21562             (match_operand:DI 1 "register_operand" " d,d,f"))]
21563       ""
21564       "@
21565        lgr  %0,%1
21566        ldgr %0,%1
21567        lgdr %0,%1"
21568       [(set_attr "cpu_facility" "*,new,new")])
21569
21570
21571 with the 'enabled' attribute defined like this:
21572
21573
21574     (define_attr "cpu_facility" "standard,new" (const_string "standard"))
21575
21576     (define_attr "enabled" ""
21577       (cond [(eq_attr "cpu_facility" "standard") (const_int 1)
21578              (and (eq_attr "cpu_facility" "new")
21579                   (ne (symbol_ref "TARGET_NEW") (const_int 0)))
21580              (const_int 1)]
21581             (const_int 0)))
21582
21583
21584
21585File: gccint.info,  Node: Define Constraints,  Next: C Constraint Interface,  Prev: Disable Insn Alternatives,  Up: Constraints
21586
2158716.8.7 Defining Machine-Specific Constraints
21588--------------------------------------------
21589
21590Machine-specific constraints fall into two categories: register and
21591non-register constraints.  Within the latter category, constraints which
21592allow subsets of all possible memory or address operands should be
21593specially marked, to give 'reload' more information.
21594
21595 Machine-specific constraints can be given names of arbitrary length,
21596but they must be entirely composed of letters, digits, underscores
21597('_'), and angle brackets ('< >').  Like C identifiers, they must begin
21598with a letter or underscore.
21599
21600 In order to avoid ambiguity in operand constraint strings, no
21601constraint can have a name that begins with any other constraint's name.
21602For example, if 'x' is defined as a constraint name, 'xy' may not be,
21603and vice versa.  As a consequence of this rule, no constraint may begin
21604with one of the generic constraint letters: 'E F V X g i m n o p r s'.
21605
21606 Register constraints correspond directly to register classes.  *Note
21607Register Classes::.  There is thus not much flexibility in their
21608definitions.
21609
21610 -- MD Expression: define_register_constraint name regclass docstring
21611     All three arguments are string constants.  NAME is the name of the
21612     constraint, as it will appear in 'match_operand' expressions.  If
21613     NAME is a multi-letter constraint its length shall be the same for
21614     all constraints starting with the same letter.  REGCLASS can be
21615     either the name of the corresponding register class (*note Register
21616     Classes::), or a C expression which evaluates to the appropriate
21617     register class.  If it is an expression, it must have no side
21618     effects, and it cannot look at the operand.  The usual use of
21619     expressions is to map some register constraints to 'NO_REGS' when
21620     the register class is not available on a given subarchitecture.
21621
21622     DOCSTRING is a sentence documenting the meaning of the constraint.
21623     Docstrings are explained further below.
21624
21625 Non-register constraints are more like predicates: the constraint
21626definition gives a Boolean expression which indicates whether the
21627constraint matches.
21628
21629 -- MD Expression: define_constraint name docstring exp
21630     The NAME and DOCSTRING arguments are the same as for
21631     'define_register_constraint', but note that the docstring comes
21632     immediately after the name for these expressions.  EXP is an RTL
21633     expression, obeying the same rules as the RTL expressions in
21634     predicate definitions.  *Note Defining Predicates::, for details.
21635     If it evaluates true, the constraint matches; if it evaluates
21636     false, it doesn't.  Constraint expressions should indicate which
21637     RTL codes they might match, just like predicate expressions.
21638
21639     'match_test' C expressions have access to the following variables:
21640
21641     OP
21642          The RTL object defining the operand.
21643     MODE
21644          The machine mode of OP.
21645     IVAL
21646          'INTVAL (OP)', if OP is a 'const_int'.
21647     HVAL
21648          'CONST_DOUBLE_HIGH (OP)', if OP is an integer 'const_double'.
21649     LVAL
21650          'CONST_DOUBLE_LOW (OP)', if OP is an integer 'const_double'.
21651     RVAL
21652          'CONST_DOUBLE_REAL_VALUE (OP)', if OP is a floating-point
21653          'const_double'.
21654
21655     The *VAL variables should only be used once another piece of the
21656     expression has verified that OP is the appropriate kind of RTL
21657     object.
21658
21659 Most non-register constraints should be defined with
21660'define_constraint'.  The remaining two definition expressions are only
21661appropriate for constraints that should be handled specially by 'reload'
21662if they fail to match.
21663
21664 -- MD Expression: define_memory_constraint name docstring exp
21665     Use this expression for constraints that match a subset of all
21666     memory operands: that is, 'reload' can make them match by
21667     converting the operand to the form '(mem (reg X))', where X is a
21668     base register (from the register class specified by
21669     'BASE_REG_CLASS', *note Register Classes::).
21670
21671     For example, on the S/390, some instructions do not accept
21672     arbitrary memory references, but only those that do not make use of
21673     an index register.  The constraint letter 'Q' is defined to
21674     represent a memory address of this type.  If 'Q' is defined with
21675     'define_memory_constraint', a 'Q' constraint can handle any memory
21676     operand, because 'reload' knows it can simply copy the memory
21677     address into a base register if required.  This is analogous to the
21678     way an 'o' constraint can handle any memory operand.
21679
21680     The syntax and semantics are otherwise identical to
21681     'define_constraint'.
21682
21683 -- MD Expression: define_address_constraint name docstring exp
21684     Use this expression for constraints that match a subset of all
21685     address operands: that is, 'reload' can make the constraint match
21686     by converting the operand to the form '(reg X)', again with X a
21687     base register.
21688
21689     Constraints defined with 'define_address_constraint' can only be
21690     used with the 'address_operand' predicate, or machine-specific
21691     predicates that work the same way.  They are treated analogously to
21692     the generic 'p' constraint.
21693
21694     The syntax and semantics are otherwise identical to
21695     'define_constraint'.
21696
21697 For historical reasons, names beginning with the letters 'G H' are
21698reserved for constraints that match only 'const_double's, and names
21699beginning with the letters 'I J K L M N O P' are reserved for
21700constraints that match only 'const_int's.  This may change in the
21701future.  For the time being, constraints with these names must be
21702written in a stylized form, so that 'genpreds' can tell you did it
21703correctly:
21704
21705     (define_constraint "[GHIJKLMNOP]..."
21706       "DOC..."
21707       (and (match_code "const_int")  ; 'const_double' for G/H
21708            CONDITION...))            ; usually a 'match_test'
21709
21710 It is fine to use names beginning with other letters for constraints
21711that match 'const_double's or 'const_int's.
21712
21713 Each docstring in a constraint definition should be one or more
21714complete sentences, marked up in Texinfo format.  _They are currently
21715unused._  In the future they will be copied into the GCC manual, in
21716*note Machine Constraints::, replacing the hand-maintained tables
21717currently found in that section.  Also, in the future the compiler may
21718use this to give more helpful diagnostics when poor choice of 'asm'
21719constraints causes a reload failure.
21720
21721 If you put the pseudo-Texinfo directive '@internal' at the beginning of
21722a docstring, then (in the future) it will appear only in the internals
21723manual's version of the machine-specific constraint tables.  Use this
21724for constraints that should not appear in 'asm' statements.
21725
21726
21727File: gccint.info,  Node: C Constraint Interface,  Prev: Define Constraints,  Up: Constraints
21728
2172916.8.8 Testing constraints from C
21730---------------------------------
21731
21732It is occasionally useful to test a constraint from C code rather than
21733implicitly via the constraint string in a 'match_operand'.  The
21734generated file 'tm_p.h' declares a few interfaces for working with
21735machine-specific constraints.  None of these interfaces work with the
21736generic constraints described in *note Simple Constraints::.  This may
21737change in the future.
21738
21739 *Warning:* 'tm_p.h' may declare other functions that operate on
21740constraints, besides the ones documented here.  Do not use those
21741functions from machine-dependent code.  They exist to implement the old
21742constraint interface that machine-independent components of the compiler
21743still expect.  They will change or disappear in the future.
21744
21745 Some valid constraint names are not valid C identifiers, so there is a
21746mangling scheme for referring to them from C.  Constraint names that do
21747not contain angle brackets or underscores are left unchanged.
21748Underscores are doubled, each '<' is replaced with '_l', and each '>'
21749with '_g'.  Here are some examples:
21750
21751     *Original* *Mangled*
21752     x          x
21753     P42x       P42x
21754     P4_x       P4__x
21755     P4>x       P4_gx
21756     P4>>       P4_g_g
21757     P4_g>      P4__g_g
21758
21759 Throughout this section, the variable C is either a constraint in the
21760abstract sense, or a constant from 'enum constraint_num'; the variable M
21761is a mangled constraint name (usually as part of a larger identifier).
21762
21763 -- Enum: constraint_num
21764     For each machine-specific constraint, there is a corresponding
21765     enumeration constant: 'CONSTRAINT_' plus the mangled name of the
21766     constraint.  Functions that take an 'enum constraint_num' as an
21767     argument expect one of these constants.
21768
21769     Machine-independent constraints do not have associated constants.
21770     This may change in the future.
21771
21772 -- Function: inline bool satisfies_constraint_ M (rtx EXP)
21773     For each machine-specific, non-register constraint M, there is one
21774     of these functions; it returns 'true' if EXP satisfies the
21775     constraint.  These functions are only visible if 'rtl.h' was
21776     included before 'tm_p.h'.
21777
21778 -- Function: bool constraint_satisfied_p (rtx EXP, enum constraint_num
21779          C)
21780     Like the 'satisfies_constraint_M' functions, but the constraint to
21781     test is given as an argument, C.  If C specifies a register
21782     constraint, this function will always return 'false'.
21783
21784 -- Function: enum reg_class regclass_for_constraint (enum
21785          constraint_num C)
21786     Returns the register class associated with C.  If C is not a
21787     register constraint, or those registers are not available for the
21788     currently selected subtarget, returns 'NO_REGS'.
21789
21790 Here is an example use of 'satisfies_constraint_M'.  In peephole
21791optimizations (*note Peephole Definitions::), operand constraint strings
21792are ignored, so if there are relevant constraints, they must be tested
21793in the C condition.  In the example, the optimization is applied if
21794operand 2 does _not_ satisfy the 'K' constraint.  (This is a simplified
21795version of a peephole definition from the i386 machine description.)
21796
21797     (define_peephole2
21798       [(match_scratch:SI 3 "r")
21799        (set (match_operand:SI 0 "register_operand" "")
21800             (mult:SI (match_operand:SI 1 "memory_operand" "")
21801                      (match_operand:SI 2 "immediate_operand" "")))]
21802
21803       "!satisfies_constraint_K (operands[2])"
21804
21805       [(set (match_dup 3) (match_dup 1))
21806        (set (match_dup 0) (mult:SI (match_dup 3) (match_dup 2)))]
21807
21808       "")
21809
21810
21811File: gccint.info,  Node: Standard Names,  Next: Pattern Ordering,  Prev: Constraints,  Up: Machine Desc
21812
2181316.9 Standard Pattern Names For Generation
21814==========================================
21815
21816Here is a table of the instruction names that are meaningful in the RTL
21817generation pass of the compiler.  Giving one of these names to an
21818instruction pattern tells the RTL generation pass that it can use the
21819pattern to accomplish a certain task.
21820
21821'movM'
21822     Here M stands for a two-letter machine mode name, in lowercase.
21823     This instruction pattern moves data with that machine mode from
21824     operand 1 to operand 0.  For example, 'movsi' moves full-word data.
21825
21826     If operand 0 is a 'subreg' with mode M of a register whose own mode
21827     is wider than M, the effect of this instruction is to store the
21828     specified value in the part of the register that corresponds to
21829     mode M.  Bits outside of M, but which are within the same target
21830     word as the 'subreg' are undefined.  Bits which are outside the
21831     target word are left unchanged.
21832
21833     This class of patterns is special in several ways.  First of all,
21834     each of these names up to and including full word size _must_ be
21835     defined, because there is no other way to copy a datum from one
21836     place to another.  If there are patterns accepting operands in
21837     larger modes, 'movM' must be defined for integer modes of those
21838     sizes.
21839
21840     Second, these patterns are not used solely in the RTL generation
21841     pass.  Even the reload pass can generate move insns to copy values
21842     from stack slots into temporary registers.  When it does so, one of
21843     the operands is a hard register and the other is an operand that
21844     can need to be reloaded into a register.
21845
21846     Therefore, when given such a pair of operands, the pattern must
21847     generate RTL which needs no reloading and needs no temporary
21848     registers--no registers other than the operands.  For example, if
21849     you support the pattern with a 'define_expand', then in such a case
21850     the 'define_expand' mustn't call 'force_reg' or any other such
21851     function which might generate new pseudo registers.
21852
21853     This requirement exists even for subword modes on a RISC machine
21854     where fetching those modes from memory normally requires several
21855     insns and some temporary registers.
21856
21857     During reload a memory reference with an invalid address may be
21858     passed as an operand.  Such an address will be replaced with a
21859     valid address later in the reload pass.  In this case, nothing may
21860     be done with the address except to use it as it stands.  If it is
21861     copied, it will not be replaced with a valid address.  No attempt
21862     should be made to make such an address into a valid address and no
21863     routine (such as 'change_address') that will do so may be called.
21864     Note that 'general_operand' will fail when applied to such an
21865     address.
21866
21867     The global variable 'reload_in_progress' (which must be explicitly
21868     declared if required) can be used to determine whether such special
21869     handling is required.
21870
21871     The variety of operands that have reloads depends on the rest of
21872     the machine description, but typically on a RISC machine these can
21873     only be pseudo registers that did not get hard registers, while on
21874     other machines explicit memory references will get optional
21875     reloads.
21876
21877     If a scratch register is required to move an object to or from
21878     memory, it can be allocated using 'gen_reg_rtx' prior to life
21879     analysis.
21880
21881     If there are cases which need scratch registers during or after
21882     reload, you must provide an appropriate secondary_reload target
21883     hook.
21884
21885     The macro 'can_create_pseudo_p' can be used to determine if it is
21886     unsafe to create new pseudo registers.  If this variable is
21887     nonzero, then it is unsafe to call 'gen_reg_rtx' to allocate a new
21888     pseudo.
21889
21890     The constraints on a 'movM' must permit moving any hard register to
21891     any other hard register provided that 'HARD_REGNO_MODE_OK' permits
21892     mode M in both registers and 'TARGET_REGISTER_MOVE_COST' applied to
21893     their classes returns a value of 2.
21894
21895     It is obligatory to support floating point 'movM' instructions into
21896     and out of any registers that can hold fixed point values, because
21897     unions and structures (which have modes 'SImode' or 'DImode') can
21898     be in those registers and they may have floating point members.
21899
21900     There may also be a need to support fixed point 'movM' instructions
21901     in and out of floating point registers.  Unfortunately, I have
21902     forgotten why this was so, and I don't know whether it is still
21903     true.  If 'HARD_REGNO_MODE_OK' rejects fixed point values in
21904     floating point registers, then the constraints of the fixed point
21905     'movM' instructions must be designed to avoid ever trying to reload
21906     into a floating point register.
21907
21908'reload_inM'
21909'reload_outM'
21910     These named patterns have been obsoleted by the target hook
21911     'secondary_reload'.
21912
21913     Like 'movM', but used when a scratch register is required to move
21914     between operand 0 and operand 1.  Operand 2 describes the scratch
21915     register.  See the discussion of the 'SECONDARY_RELOAD_CLASS' macro
21916     in *note Register Classes::.
21917
21918     There are special restrictions on the form of the 'match_operand's
21919     used in these patterns.  First, only the predicate for the reload
21920     operand is examined, i.e., 'reload_in' examines operand 1, but not
21921     the predicates for operand 0 or 2.  Second, there may be only one
21922     alternative in the constraints.  Third, only a single register
21923     class letter may be used for the constraint; subsequent constraint
21924     letters are ignored.  As a special exception, an empty constraint
21925     string matches the 'ALL_REGS' register class.  This may relieve
21926     ports of the burden of defining an 'ALL_REGS' constraint letter
21927     just for these patterns.
21928
21929'movstrictM'
21930     Like 'movM' except that if operand 0 is a 'subreg' with mode M of a
21931     register whose natural mode is wider, the 'movstrictM' instruction
21932     is guaranteed not to alter any of the register except the part
21933     which belongs to mode M.
21934
21935'movmisalignM'
21936     This variant of a move pattern is designed to load or store a value
21937     from a memory address that is not naturally aligned for its mode.
21938     For a store, the memory will be in operand 0; for a load, the
21939     memory will be in operand 1.  The other operand is guaranteed not
21940     to be a memory, so that it's easy to tell whether this is a load or
21941     store.
21942
21943     This pattern is used by the autovectorizer, and when expanding a
21944     'MISALIGNED_INDIRECT_REF' expression.
21945
21946'load_multiple'
21947     Load several consecutive memory locations into consecutive
21948     registers.  Operand 0 is the first of the consecutive registers,
21949     operand 1 is the first memory location, and operand 2 is a
21950     constant: the number of consecutive registers.
21951
21952     Define this only if the target machine really has such an
21953     instruction; do not define this if the most efficient way of
21954     loading consecutive registers from memory is to do them one at a
21955     time.
21956
21957     On some machines, there are restrictions as to which consecutive
21958     registers can be stored into memory, such as particular starting or
21959     ending register numbers or only a range of valid counts.  For those
21960     machines, use a 'define_expand' (*note Expander Definitions::) and
21961     make the pattern fail if the restrictions are not met.
21962
21963     Write the generated insn as a 'parallel' with elements being a
21964     'set' of one register from the appropriate memory location (you may
21965     also need 'use' or 'clobber' elements).  Use a 'match_parallel'
21966     (*note RTL Template::) to recognize the insn.  See 'rs6000.md' for
21967     examples of the use of this insn pattern.
21968
21969'store_multiple'
21970     Similar to 'load_multiple', but store several consecutive registers
21971     into consecutive memory locations.  Operand 0 is the first of the
21972     consecutive memory locations, operand 1 is the first register, and
21973     operand 2 is a constant: the number of consecutive registers.
21974
21975'vec_load_lanesMN'
21976     Perform an interleaved load of several vectors from memory operand
21977     1 into register operand 0.  Both operands have mode M.  The
21978     register operand is viewed as holding consecutive vectors of mode
21979     N, while the memory operand is a flat array that contains the same
21980     number of elements.  The operation is equivalent to:
21981
21982          int c = GET_MODE_SIZE (M) / GET_MODE_SIZE (N);
21983          for (j = 0; j < GET_MODE_NUNITS (N); j++)
21984            for (i = 0; i < c; i++)
21985              operand0[i][j] = operand1[j * c + i];
21986
21987     For example, 'vec_load_lanestiv4hi' loads 8 16-bit values from
21988     memory into a register of mode 'TI'.  The register contains two
21989     consecutive vectors of mode 'V4HI'.
21990
21991     This pattern can only be used if:
21992          TARGET_ARRAY_MODE_SUPPORTED_P (N, C)
21993     is true.  GCC assumes that, if a target supports this kind of
21994     instruction for some mode N, it also supports unaligned loads for
21995     vectors of mode N.
21996
21997'vec_store_lanesMN'
21998     Equivalent to 'vec_load_lanesMN', with the memory and register
21999     operands reversed.  That is, the instruction is equivalent to:
22000
22001          int c = GET_MODE_SIZE (M) / GET_MODE_SIZE (N);
22002          for (j = 0; j < GET_MODE_NUNITS (N); j++)
22003            for (i = 0; i < c; i++)
22004              operand0[j * c + i] = operand1[i][j];
22005
22006     for a memory operand 0 and register operand 1.
22007
22008'vec_setM'
22009     Set given field in the vector value.  Operand 0 is the vector to
22010     modify, operand 1 is new value of field and operand 2 specify the
22011     field index.
22012
22013'vec_extractM'
22014     Extract given field from the vector value.  Operand 1 is the
22015     vector, operand 2 specify field index and operand 0 place to store
22016     value into.
22017
22018'vec_initM'
22019     Initialize the vector to given values.  Operand 0 is the vector to
22020     initialize and operand 1 is parallel containing values for
22021     individual fields.
22022
22023'vcondMN'
22024     Output a conditional vector move.  Operand 0 is the destination to
22025     receive a combination of operand 1 and operand 2, which are of mode
22026     M, dependent on the outcome of the predicate in operand 3 which is
22027     a vector comparison with operands of mode N in operands 4 and 5.
22028     The modes M and N should have the same size.  Operand 0 will be set
22029     to the value OP1 & MSK | OP2 & ~MSK where MSK is computed by
22030     element-wise evaluation of the vector comparison with a truth value
22031     of all-ones and a false value of all-zeros.
22032
22033'vec_permM'
22034     Output a (variable) vector permutation.  Operand 0 is the
22035     destination to receive elements from operand 1 and operand 2, which
22036     are of mode M.  Operand 3 is the "selector".  It is an integral
22037     mode vector of the same width and number of elements as mode M.
22038
22039     The input elements are numbered from 0 in operand 1 through 2*N-1
22040     in operand 2.  The elements of the selector must be computed modulo
22041     2*N.  Note that if 'rtx_equal_p(operand1, operand2)', this can be
22042     implemented with just operand 1 and selector elements modulo N.
22043
22044     In order to make things easy for a number of targets, if there is
22045     no 'vec_perm' pattern for mode M, but there is for mode Q where Q
22046     is a vector of 'QImode' of the same width as M, the middle-end will
22047     lower the mode M 'VEC_PERM_EXPR' to mode Q.
22048
22049'vec_perm_constM'
22050     Like 'vec_perm' except that the permutation is a compile-time
22051     constant.  That is, operand 3, the "selector", is a 'CONST_VECTOR'.
22052
22053     Some targets cannot perform a permutation with a variable selector,
22054     but can efficiently perform a constant permutation.  Further, the
22055     target hook 'vec_perm_ok' is queried to determine if the specific
22056     constant permutation is available efficiently; the named pattern is
22057     never expanded without 'vec_perm_ok' returning true.
22058
22059     There is no need for a target to supply both 'vec_permM' and
22060     'vec_perm_constM' if the former can trivially implement the
22061     operation with, say, the vector constant loaded into a register.
22062
22063'pushM1'
22064     Output a push instruction.  Operand 0 is value to push.  Used only
22065     when 'PUSH_ROUNDING' is defined.  For historical reason, this
22066     pattern may be missing and in such case an 'mov' expander is used
22067     instead, with a 'MEM' expression forming the push operation.  The
22068     'mov' expander method is deprecated.
22069
22070'addM3'
22071     Add operand 2 and operand 1, storing the result in operand 0.  All
22072     operands must have mode M.  This can be used even on two-address
22073     machines, by means of constraints requiring operands 1 and 0 to be
22074     the same location.
22075
22076'ssaddM3', 'usaddM3'
22077'subM3', 'sssubM3', 'ussubM3'
22078'mulM3', 'ssmulM3', 'usmulM3'
22079'divM3', 'ssdivM3'
22080'udivM3', 'usdivM3'
22081'modM3', 'umodM3'
22082'uminM3', 'umaxM3'
22083'andM3', 'iorM3', 'xorM3'
22084     Similar, for other arithmetic operations.
22085
22086'fmaM4'
22087     Multiply operand 2 and operand 1, then add operand 3, storing the
22088     result in operand 0 without doing an intermediate rounding step.
22089     All operands must have mode M.  This pattern is used to implement
22090     the 'fma', 'fmaf', and 'fmal' builtin functions from the ISO C99
22091     standard.
22092
22093'fmsM4'
22094     Like 'fmaM4', except operand 3 subtracted from the product instead
22095     of added to the product.  This is represented in the rtl as
22096
22097          (fma:M OP1 OP2 (neg:M OP3))
22098
22099'fnmaM4'
22100     Like 'fmaM4' except that the intermediate product is negated before
22101     being added to operand 3.  This is represented in the rtl as
22102
22103          (fma:M (neg:M OP1) OP2 OP3)
22104
22105'fnmsM4'
22106     Like 'fmsM4' except that the intermediate product is negated before
22107     subtracting operand 3.  This is represented in the rtl as
22108
22109          (fma:M (neg:M OP1) OP2 (neg:M OP3))
22110
22111'sminM3', 'smaxM3'
22112     Signed minimum and maximum operations.  When used with floating
22113     point, if both operands are zeros, or if either operand is 'NaN',
22114     then it is unspecified which of the two operands is returned as the
22115     result.
22116
22117'reduc_smin_M', 'reduc_smax_M'
22118     Find the signed minimum/maximum of the elements of a vector.  The
22119     vector is operand 1, and the scalar result is stored in the least
22120     significant bits of operand 0 (also a vector).  The output and
22121     input vector should have the same modes.
22122
22123'reduc_umin_M', 'reduc_umax_M'
22124     Find the unsigned minimum/maximum of the elements of a vector.  The
22125     vector is operand 1, and the scalar result is stored in the least
22126     significant bits of operand 0 (also a vector).  The output and
22127     input vector should have the same modes.
22128
22129'reduc_splus_M'
22130     Compute the sum of the signed elements of a vector.  The vector is
22131     operand 1, and the scalar result is stored in the least significant
22132     bits of operand 0 (also a vector).  The output and input vector
22133     should have the same modes.
22134
22135'reduc_uplus_M'
22136     Compute the sum of the unsigned elements of a vector.  The vector
22137     is operand 1, and the scalar result is stored in the least
22138     significant bits of operand 0 (also a vector).  The output and
22139     input vector should have the same modes.
22140
22141'sdot_prodM'
22142'udot_prodM'
22143     Compute the sum of the products of two signed/unsigned elements.
22144     Operand 1 and operand 2 are of the same mode.  Their product, which
22145     is of a wider mode, is computed and added to operand 3.  Operand 3
22146     is of a mode equal or wider than the mode of the product.  The
22147     result is placed in operand 0, which is of the same mode as operand
22148     3.
22149
22150'ssum_widenM3'
22151'usum_widenM3'
22152     Operands 0 and 2 are of the same mode, which is wider than the mode
22153     of operand 1.  Add operand 1 to operand 2 and place the widened
22154     result in operand 0.  (This is used express accumulation of
22155     elements into an accumulator of a wider mode.)
22156
22157'vec_shl_M', 'vec_shr_M'
22158     Whole vector left/right shift in bits.  Operand 1 is a vector to be
22159     shifted.  Operand 2 is an integer shift amount in bits.  Operand 0
22160     is where the resulting shifted vector is stored.  The output and
22161     input vectors should have the same modes.
22162
22163'vec_pack_trunc_M'
22164     Narrow (demote) and merge the elements of two vectors.  Operands 1
22165     and 2 are vectors of the same mode having N integral or floating
22166     point elements of size S.  Operand 0 is the resulting vector in
22167     which 2*N elements of size N/2 are concatenated after narrowing
22168     them down using truncation.
22169
22170'vec_pack_ssat_M', 'vec_pack_usat_M'
22171     Narrow (demote) and merge the elements of two vectors.  Operands 1
22172     and 2 are vectors of the same mode having N integral elements of
22173     size S. Operand 0 is the resulting vector in which the elements of
22174     the two input vectors are concatenated after narrowing them down
22175     using signed/unsigned saturating arithmetic.
22176
22177'vec_pack_sfix_trunc_M', 'vec_pack_ufix_trunc_M'
22178     Narrow, convert to signed/unsigned integral type and merge the
22179     elements of two vectors.  Operands 1 and 2 are vectors of the same
22180     mode having N floating point elements of size S.  Operand 0 is the
22181     resulting vector in which 2*N elements of size N/2 are
22182     concatenated.
22183
22184'vec_unpacks_hi_M', 'vec_unpacks_lo_M'
22185     Extract and widen (promote) the high/low part of a vector of signed
22186     integral or floating point elements.  The input vector (operand 1)
22187     has N elements of size S.  Widen (promote) the high/low elements of
22188     the vector using signed or floating point extension and place the
22189     resulting N/2 values of size 2*S in the output vector (operand 0).
22190
22191'vec_unpacku_hi_M', 'vec_unpacku_lo_M'
22192     Extract and widen (promote) the high/low part of a vector of
22193     unsigned integral elements.  The input vector (operand 1) has N
22194     elements of size S. Widen (promote) the high/low elements of the
22195     vector using zero extension and place the resulting N/2 values of
22196     size 2*S in the output vector (operand 0).
22197
22198'vec_unpacks_float_hi_M', 'vec_unpacks_float_lo_M'
22199'vec_unpacku_float_hi_M', 'vec_unpacku_float_lo_M'
22200     Extract, convert to floating point type and widen the high/low part
22201     of a vector of signed/unsigned integral elements.  The input vector
22202     (operand 1) has N elements of size S.  Convert the high/low
22203     elements of the vector using floating point conversion and place
22204     the resulting N/2 values of size 2*S in the output vector (operand
22205     0).
22206
22207'vec_widen_umult_hi_M', 'vec_widen_umult_lo_M'
22208'vec_widen_smult_hi_M', 'vec_widen_smult_lo_M'
22209'vec_widen_umult_even_M', 'vec_widen_umult_odd_M'
22210'vec_widen_smult_even_M', 'vec_widen_smult_odd_M'
22211     Signed/Unsigned widening multiplication.  The two inputs (operands
22212     1 and 2) are vectors with N signed/unsigned elements of size S.
22213     Multiply the high/low or even/odd elements of the two vectors, and
22214     put the N/2 products of size 2*S in the output vector (operand 0).
22215
22216'vec_widen_ushiftl_hi_M', 'vec_widen_ushiftl_lo_M'
22217'vec_widen_sshiftl_hi_M', 'vec_widen_sshiftl_lo_M'
22218     Signed/Unsigned widening shift left.  The first input (operand 1)
22219     is a vector with N signed/unsigned elements of size S.  Operand 2
22220     is a constant.  Shift the high/low elements of operand 1, and put
22221     the N/2 results of size 2*S in the output vector (operand 0).
22222
22223'mulhisi3'
22224     Multiply operands 1 and 2, which have mode 'HImode', and store a
22225     'SImode' product in operand 0.
22226
22227'mulqihi3', 'mulsidi3'
22228     Similar widening-multiplication instructions of other widths.
22229
22230'umulqihi3', 'umulhisi3', 'umulsidi3'
22231     Similar widening-multiplication instructions that do unsigned
22232     multiplication.
22233
22234'usmulqihi3', 'usmulhisi3', 'usmulsidi3'
22235     Similar widening-multiplication instructions that interpret the
22236     first operand as unsigned and the second operand as signed, then do
22237     a signed multiplication.
22238
22239'smulM3_highpart'
22240     Perform a signed multiplication of operands 1 and 2, which have
22241     mode M, and store the most significant half of the product in
22242     operand 0.  The least significant half of the product is discarded.
22243
22244'umulM3_highpart'
22245     Similar, but the multiplication is unsigned.
22246
22247'maddMN4'
22248     Multiply operands 1 and 2, sign-extend them to mode N, add operand
22249     3, and store the result in operand 0.  Operands 1 and 2 have mode M
22250     and operands 0 and 3 have mode N.  Both modes must be integer or
22251     fixed-point modes and N must be twice the size of M.
22252
22253     In other words, 'maddMN4' is like 'mulMN3' except that it also adds
22254     operand 3.
22255
22256     These instructions are not allowed to 'FAIL'.
22257
22258'umaddMN4'
22259     Like 'maddMN4', but zero-extend the multiplication operands instead
22260     of sign-extending them.
22261
22262'ssmaddMN4'
22263     Like 'maddMN4', but all involved operations must be
22264     signed-saturating.
22265
22266'usmaddMN4'
22267     Like 'umaddMN4', but all involved operations must be
22268     unsigned-saturating.
22269
22270'msubMN4'
22271     Multiply operands 1 and 2, sign-extend them to mode N, subtract the
22272     result from operand 3, and store the result in operand 0.  Operands
22273     1 and 2 have mode M and operands 0 and 3 have mode N.  Both modes
22274     must be integer or fixed-point modes and N must be twice the size
22275     of M.
22276
22277     In other words, 'msubMN4' is like 'mulMN3' except that it also
22278     subtracts the result from operand 3.
22279
22280     These instructions are not allowed to 'FAIL'.
22281
22282'umsubMN4'
22283     Like 'msubMN4', but zero-extend the multiplication operands instead
22284     of sign-extending them.
22285
22286'ssmsubMN4'
22287     Like 'msubMN4', but all involved operations must be
22288     signed-saturating.
22289
22290'usmsubMN4'
22291     Like 'umsubMN4', but all involved operations must be
22292     unsigned-saturating.
22293
22294'divmodM4'
22295     Signed division that produces both a quotient and a remainder.
22296     Operand 1 is divided by operand 2 to produce a quotient stored in
22297     operand 0 and a remainder stored in operand 3.
22298
22299     For machines with an instruction that produces both a quotient and
22300     a remainder, provide a pattern for 'divmodM4' but do not provide
22301     patterns for 'divM3' and 'modM3'.  This allows optimization in the
22302     relatively common case when both the quotient and remainder are
22303     computed.
22304
22305     If an instruction that just produces a quotient or just a remainder
22306     exists and is more efficient than the instruction that produces
22307     both, write the output routine of 'divmodM4' to call
22308     'find_reg_note' and look for a 'REG_UNUSED' note on the quotient or
22309     remainder and generate the appropriate instruction.
22310
22311'udivmodM4'
22312     Similar, but does unsigned division.
22313
22314'ashlM3', 'ssashlM3', 'usashlM3'
22315     Arithmetic-shift operand 1 left by a number of bits specified by
22316     operand 2, and store the result in operand 0.  Here M is the mode
22317     of operand 0 and operand 1; operand 2's mode is specified by the
22318     instruction pattern, and the compiler will convert the operand to
22319     that mode before generating the instruction.  The meaning of
22320     out-of-range shift counts can optionally be specified by
22321     'TARGET_SHIFT_TRUNCATION_MASK'.  *Note
22322     TARGET_SHIFT_TRUNCATION_MASK::.  Operand 2 is always a scalar type.
22323
22324'ashrM3', 'lshrM3', 'rotlM3', 'rotrM3'
22325     Other shift and rotate instructions, analogous to the 'ashlM3'
22326     instructions.  Operand 2 is always a scalar type.
22327
22328'vashlM3', 'vashrM3', 'vlshrM3', 'vrotlM3', 'vrotrM3'
22329     Vector shift and rotate instructions that take vectors as operand 2
22330     instead of a scalar type.
22331
22332'bswapM2'
22333     Reverse the order of bytes of operand 1 and store the result in
22334     operand 0.
22335
22336'negM2', 'ssnegM2', 'usnegM2'
22337     Negate operand 1 and store the result in operand 0.
22338
22339'absM2'
22340     Store the absolute value of operand 1 into operand 0.
22341
22342'sqrtM2'
22343     Store the square root of operand 1 into operand 0.
22344
22345     The 'sqrt' built-in function of C always uses the mode which
22346     corresponds to the C data type 'double' and the 'sqrtf' built-in
22347     function uses the mode which corresponds to the C data type
22348     'float'.
22349
22350'fmodM3'
22351     Store the remainder of dividing operand 1 by operand 2 into operand
22352     0, rounded towards zero to an integer.
22353
22354     The 'fmod' built-in function of C always uses the mode which
22355     corresponds to the C data type 'double' and the 'fmodf' built-in
22356     function uses the mode which corresponds to the C data type
22357     'float'.
22358
22359'remainderM3'
22360     Store the remainder of dividing operand 1 by operand 2 into operand
22361     0, rounded to the nearest integer.
22362
22363     The 'remainder' built-in function of C always uses the mode which
22364     corresponds to the C data type 'double' and the 'remainderf'
22365     built-in function uses the mode which corresponds to the C data
22366     type 'float'.
22367
22368'cosM2'
22369     Store the cosine of operand 1 into operand 0.
22370
22371     The 'cos' built-in function of C always uses the mode which
22372     corresponds to the C data type 'double' and the 'cosf' built-in
22373     function uses the mode which corresponds to the C data type
22374     'float'.
22375
22376'sinM2'
22377     Store the sine of operand 1 into operand 0.
22378
22379     The 'sin' built-in function of C always uses the mode which
22380     corresponds to the C data type 'double' and the 'sinf' built-in
22381     function uses the mode which corresponds to the C data type
22382     'float'.
22383
22384'sincosM3'
22385     Store the cosine of operand 2 into operand 0 and the sine of
22386     operand 2 into operand 1.
22387
22388     The 'sin' and 'cos' built-in functions of C always use the mode
22389     which corresponds to the C data type 'double' and the 'sinf' and
22390     'cosf' built-in function use the mode which corresponds to the C
22391     data type 'float'.  Targets that can calculate the sine and cosine
22392     simultaneously can implement this pattern as opposed to
22393     implementing individual 'sinM2' and 'cosM2' patterns.  The 'sin'
22394     and 'cos' built-in functions will then be expanded to the
22395     'sincosM3' pattern, with one of the output values left unused.
22396
22397'expM2'
22398     Store the exponential of operand 1 into operand 0.
22399
22400     The 'exp' built-in function of C always uses the mode which
22401     corresponds to the C data type 'double' and the 'expf' built-in
22402     function uses the mode which corresponds to the C data type
22403     'float'.
22404
22405'logM2'
22406     Store the natural logarithm of operand 1 into operand 0.
22407
22408     The 'log' built-in function of C always uses the mode which
22409     corresponds to the C data type 'double' and the 'logf' built-in
22410     function uses the mode which corresponds to the C data type
22411     'float'.
22412
22413'powM3'
22414     Store the value of operand 1 raised to the exponent operand 2 into
22415     operand 0.
22416
22417     The 'pow' built-in function of C always uses the mode which
22418     corresponds to the C data type 'double' and the 'powf' built-in
22419     function uses the mode which corresponds to the C data type
22420     'float'.
22421
22422'atan2M3'
22423     Store the arc tangent (inverse tangent) of operand 1 divided by
22424     operand 2 into operand 0, using the signs of both arguments to
22425     determine the quadrant of the result.
22426
22427     The 'atan2' built-in function of C always uses the mode which
22428     corresponds to the C data type 'double' and the 'atan2f' built-in
22429     function uses the mode which corresponds to the C data type
22430     'float'.
22431
22432'floorM2'
22433     Store the largest integral value not greater than argument.
22434
22435     The 'floor' built-in function of C always uses the mode which
22436     corresponds to the C data type 'double' and the 'floorf' built-in
22437     function uses the mode which corresponds to the C data type
22438     'float'.
22439
22440'btruncM2'
22441     Store the argument rounded to integer towards zero.
22442
22443     The 'trunc' built-in function of C always uses the mode which
22444     corresponds to the C data type 'double' and the 'truncf' built-in
22445     function uses the mode which corresponds to the C data type
22446     'float'.
22447
22448'roundM2'
22449     Store the argument rounded to integer away from zero.
22450
22451     The 'round' built-in function of C always uses the mode which
22452     corresponds to the C data type 'double' and the 'roundf' built-in
22453     function uses the mode which corresponds to the C data type
22454     'float'.
22455
22456'ceilM2'
22457     Store the argument rounded to integer away from zero.
22458
22459     The 'ceil' built-in function of C always uses the mode which
22460     corresponds to the C data type 'double' and the 'ceilf' built-in
22461     function uses the mode which corresponds to the C data type
22462     'float'.
22463
22464'nearbyintM2'
22465     Store the argument rounded according to the default rounding mode
22466
22467     The 'nearbyint' built-in function of C always uses the mode which
22468     corresponds to the C data type 'double' and the 'nearbyintf'
22469     built-in function uses the mode which corresponds to the C data
22470     type 'float'.
22471
22472'rintM2'
22473     Store the argument rounded according to the default rounding mode
22474     and raise the inexact exception when the result differs in value
22475     from the argument
22476
22477     The 'rint' built-in function of C always uses the mode which
22478     corresponds to the C data type 'double' and the 'rintf' built-in
22479     function uses the mode which corresponds to the C data type
22480     'float'.
22481
22482'lrintMN2'
22483     Convert operand 1 (valid for floating point mode M) to fixed point
22484     mode N as a signed number according to the current rounding mode
22485     and store in operand 0 (which has mode N).
22486
22487'lroundMN2'
22488     Convert operand 1 (valid for floating point mode M) to fixed point
22489     mode N as a signed number rounding to nearest and away from zero
22490     and store in operand 0 (which has mode N).
22491
22492'lfloorMN2'
22493     Convert operand 1 (valid for floating point mode M) to fixed point
22494     mode N as a signed number rounding down and store in operand 0
22495     (which has mode N).
22496
22497'lceilMN2'
22498     Convert operand 1 (valid for floating point mode M) to fixed point
22499     mode N as a signed number rounding up and store in operand 0 (which
22500     has mode N).
22501
22502'copysignM3'
22503     Store a value with the magnitude of operand 1 and the sign of
22504     operand 2 into operand 0.
22505
22506     The 'copysign' built-in function of C always uses the mode which
22507     corresponds to the C data type 'double' and the 'copysignf'
22508     built-in function uses the mode which corresponds to the C data
22509     type 'float'.
22510
22511'ffsM2'
22512     Store into operand 0 one plus the index of the least significant
22513     1-bit of operand 1.  If operand 1 is zero, store zero.  M is the
22514     mode of operand 0; operand 1's mode is specified by the instruction
22515     pattern, and the compiler will convert the operand to that mode
22516     before generating the instruction.
22517
22518     The 'ffs' built-in function of C always uses the mode which
22519     corresponds to the C data type 'int'.
22520
22521'clzM2'
22522     Store into operand 0 the number of leading 0-bits in X, starting at
22523     the most significant bit position.  If X is 0, the
22524     'CLZ_DEFINED_VALUE_AT_ZERO' (*note Misc::) macro defines if the
22525     result is undefined or has a useful value.  M is the mode of
22526     operand 0; operand 1's mode is specified by the instruction
22527     pattern, and the compiler will convert the operand to that mode
22528     before generating the instruction.
22529
22530'ctzM2'
22531     Store into operand 0 the number of trailing 0-bits in X, starting
22532     at the least significant bit position.  If X is 0, the
22533     'CTZ_DEFINED_VALUE_AT_ZERO' (*note Misc::) macro defines if the
22534     result is undefined or has a useful value.  M is the mode of
22535     operand 0; operand 1's mode is specified by the instruction
22536     pattern, and the compiler will convert the operand to that mode
22537     before generating the instruction.
22538
22539'popcountM2'
22540     Store into operand 0 the number of 1-bits in X.  M is the mode of
22541     operand 0; operand 1's mode is specified by the instruction
22542     pattern, and the compiler will convert the operand to that mode
22543     before generating the instruction.
22544
22545'parityM2'
22546     Store into operand 0 the parity of X, i.e. the number of 1-bits in
22547     X modulo 2.  M is the mode of operand 0; operand 1's mode is
22548     specified by the instruction pattern, and the compiler will convert
22549     the operand to that mode before generating the instruction.
22550
22551'one_cmplM2'
22552     Store the bitwise-complement of operand 1 into operand 0.
22553
22554'movmemM'
22555     Block move instruction.  The destination and source blocks of
22556     memory are the first two operands, and both are 'mem:BLK's with an
22557     address in mode 'Pmode'.
22558
22559     The number of bytes to move is the third operand, in mode M.
22560     Usually, you specify 'word_mode' for M.  However, if you can
22561     generate better code knowing the range of valid lengths is smaller
22562     than those representable in a full word, you should provide a
22563     pattern with a mode corresponding to the range of values you can
22564     handle efficiently (e.g., 'QImode' for values in the range 0-127;
22565     note we avoid numbers that appear negative) and also a pattern with
22566     'word_mode'.
22567
22568     The fourth operand is the known shared alignment of the source and
22569     destination, in the form of a 'const_int' rtx.  Thus, if the
22570     compiler knows that both source and destination are word-aligned,
22571     it may provide the value 4 for this operand.
22572
22573     Optional operands 5 and 6 specify expected alignment and size of
22574     block respectively.  The expected alignment differs from alignment
22575     in operand 4 in a way that the blocks are not required to be
22576     aligned according to it in all cases.  This expected alignment is
22577     also in bytes, just like operand 4.  Expected size, when unknown,
22578     is set to '(const_int -1)'.
22579
22580     Descriptions of multiple 'movmemM' patterns can only be beneficial
22581     if the patterns for smaller modes have fewer restrictions on their
22582     first, second and fourth operands.  Note that the mode M in
22583     'movmemM' does not impose any restriction on the mode of
22584     individually moved data units in the block.
22585
22586     These patterns need not give special consideration to the
22587     possibility that the source and destination strings might overlap.
22588
22589'movstr'
22590     String copy instruction, with 'stpcpy' semantics.  Operand 0 is an
22591     output operand in mode 'Pmode'.  The addresses of the destination
22592     and source strings are operands 1 and 2, and both are 'mem:BLK's
22593     with addresses in mode 'Pmode'.  The execution of the expansion of
22594     this pattern should store in operand 0 the address in which the
22595     'NUL' terminator was stored in the destination string.
22596
22597'setmemM'
22598     Block set instruction.  The destination string is the first
22599     operand, given as a 'mem:BLK' whose address is in mode 'Pmode'.
22600     The number of bytes to set is the second operand, in mode M.  The
22601     value to initialize the memory with is the third operand.  Targets
22602     that only support the clearing of memory should reject any value
22603     that is not the constant 0.  See 'movmemM' for a discussion of the
22604     choice of mode.
22605
22606     The fourth operand is the known alignment of the destination, in
22607     the form of a 'const_int' rtx.  Thus, if the compiler knows that
22608     the destination is word-aligned, it may provide the value 4 for
22609     this operand.
22610
22611     Optional operands 5 and 6 specify expected alignment and size of
22612     block respectively.  The expected alignment differs from alignment
22613     in operand 4 in a way that the blocks are not required to be
22614     aligned according to it in all cases.  This expected alignment is
22615     also in bytes, just like operand 4.  Expected size, when unknown,
22616     is set to '(const_int -1)'.
22617
22618     The use for multiple 'setmemM' is as for 'movmemM'.
22619
22620'cmpstrnM'
22621     String compare instruction, with five operands.  Operand 0 is the
22622     output; it has mode M.  The remaining four operands are like the
22623     operands of 'movmemM'.  The two memory blocks specified are
22624     compared byte by byte in lexicographic order starting at the
22625     beginning of each string.  The instruction is not allowed to
22626     prefetch more than one byte at a time since either string may end
22627     in the first byte and reading past that may access an invalid page
22628     or segment and cause a fault.  The comparison terminates early if
22629     the fetched bytes are different or if they are equal to zero.  The
22630     effect of the instruction is to store a value in operand 0 whose
22631     sign indicates the result of the comparison.
22632
22633'cmpstrM'
22634     String compare instruction, without known maximum length.  Operand
22635     0 is the output; it has mode M.  The second and third operand are
22636     the blocks of memory to be compared; both are 'mem:BLK' with an
22637     address in mode 'Pmode'.
22638
22639     The fourth operand is the known shared alignment of the source and
22640     destination, in the form of a 'const_int' rtx.  Thus, if the
22641     compiler knows that both source and destination are word-aligned,
22642     it may provide the value 4 for this operand.
22643
22644     The two memory blocks specified are compared byte by byte in
22645     lexicographic order starting at the beginning of each string.  The
22646     instruction is not allowed to prefetch more than one byte at a time
22647     since either string may end in the first byte and reading past that
22648     may access an invalid page or segment and cause a fault.  The
22649     comparison will terminate when the fetched bytes are different or
22650     if they are equal to zero.  The effect of the instruction is to
22651     store a value in operand 0 whose sign indicates the result of the
22652     comparison.
22653
22654'cmpmemM'
22655     Block compare instruction, with five operands like the operands of
22656     'cmpstrM'.  The two memory blocks specified are compared byte by
22657     byte in lexicographic order starting at the beginning of each
22658     block.  Unlike 'cmpstrM' the instruction can prefetch any bytes in
22659     the two memory blocks.  Also unlike 'cmpstrM' the comparison will
22660     not stop if both bytes are zero.  The effect of the instruction is
22661     to store a value in operand 0 whose sign indicates the result of
22662     the comparison.
22663
22664'strlenM'
22665     Compute the length of a string, with three operands.  Operand 0 is
22666     the result (of mode M), operand 1 is a 'mem' referring to the first
22667     character of the string, operand 2 is the character to search for
22668     (normally zero), and operand 3 is a constant describing the known
22669     alignment of the beginning of the string.
22670
22671'floatMN2'
22672     Convert signed integer operand 1 (valid for fixed point mode M) to
22673     floating point mode N and store in operand 0 (which has mode N).
22674
22675'floatunsMN2'
22676     Convert unsigned integer operand 1 (valid for fixed point mode M)
22677     to floating point mode N and store in operand 0 (which has mode N).
22678
22679'fixMN2'
22680     Convert operand 1 (valid for floating point mode M) to fixed point
22681     mode N as a signed number and store in operand 0 (which has mode
22682     N).  This instruction's result is defined only when the value of
22683     operand 1 is an integer.
22684
22685     If the machine description defines this pattern, it also needs to
22686     define the 'ftrunc' pattern.
22687
22688'fixunsMN2'
22689     Convert operand 1 (valid for floating point mode M) to fixed point
22690     mode N as an unsigned number and store in operand 0 (which has mode
22691     N).  This instruction's result is defined only when the value of
22692     operand 1 is an integer.
22693
22694'ftruncM2'
22695     Convert operand 1 (valid for floating point mode M) to an integer
22696     value, still represented in floating point mode M, and store it in
22697     operand 0 (valid for floating point mode M).
22698
22699'fix_truncMN2'
22700     Like 'fixMN2' but works for any floating point value of mode M by
22701     converting the value to an integer.
22702
22703'fixuns_truncMN2'
22704     Like 'fixunsMN2' but works for any floating point value of mode M
22705     by converting the value to an integer.
22706
22707'truncMN2'
22708     Truncate operand 1 (valid for mode M) to mode N and store in
22709     operand 0 (which has mode N).  Both modes must be fixed point or
22710     both floating point.
22711
22712'extendMN2'
22713     Sign-extend operand 1 (valid for mode M) to mode N and store in
22714     operand 0 (which has mode N).  Both modes must be fixed point or
22715     both floating point.
22716
22717'zero_extendMN2'
22718     Zero-extend operand 1 (valid for mode M) to mode N and store in
22719     operand 0 (which has mode N).  Both modes must be fixed point.
22720
22721'fractMN2'
22722     Convert operand 1 of mode M to mode N and store in operand 0 (which
22723     has mode N).  Mode M and mode N could be fixed-point to
22724     fixed-point, signed integer to fixed-point, fixed-point to signed
22725     integer, floating-point to fixed-point, or fixed-point to
22726     floating-point.  When overflows or underflows happen, the results
22727     are undefined.
22728
22729'satfractMN2'
22730     Convert operand 1 of mode M to mode N and store in operand 0 (which
22731     has mode N).  Mode M and mode N could be fixed-point to
22732     fixed-point, signed integer to fixed-point, or floating-point to
22733     fixed-point.  When overflows or underflows happen, the instruction
22734     saturates the results to the maximum or the minimum.
22735
22736'fractunsMN2'
22737     Convert operand 1 of mode M to mode N and store in operand 0 (which
22738     has mode N).  Mode M and mode N could be unsigned integer to
22739     fixed-point, or fixed-point to unsigned integer.  When overflows or
22740     underflows happen, the results are undefined.
22741
22742'satfractunsMN2'
22743     Convert unsigned integer operand 1 of mode M to fixed-point mode N
22744     and store in operand 0 (which has mode N).  When overflows or
22745     underflows happen, the instruction saturates the results to the
22746     maximum or the minimum.
22747
22748'extvM'
22749     Extract a bit-field from register operand 1, sign-extend it, and
22750     store it in operand 0.  Operand 2 specifies the width of the field
22751     in bits and operand 3 the starting bit, which counts from the most
22752     significant bit if 'BITS_BIG_ENDIAN' is true and from the least
22753     significant bit otherwise.
22754
22755     Operands 0 and 1 both have mode M.  Operands 2 and 3 have a
22756     target-specific mode.
22757
22758'extvmisalignM'
22759     Extract a bit-field from memory operand 1, sign extend it, and
22760     store it in operand 0.  Operand 2 specifies the width in bits and
22761     operand 3 the starting bit.  The starting bit is always somewhere
22762     in the first byte of operand 1; it counts from the most significant
22763     bit if 'BITS_BIG_ENDIAN' is true and from the least significant bit
22764     otherwise.
22765
22766     Operand 0 has mode M while operand 1 has 'BLK' mode.  Operands 2
22767     and 3 have a target-specific mode.
22768
22769     The instruction must not read beyond the last byte of the
22770     bit-field.
22771
22772'extzvM'
22773     Like 'extvM' except that the bit-field value is zero-extended.
22774
22775'extzvmisalignM'
22776     Like 'extvmisalignM' except that the bit-field value is
22777     zero-extended.
22778
22779'insvM'
22780     Insert operand 3 into a bit-field of register operand 0.  Operand 1
22781     specifies the width of the field in bits and operand 2 the starting
22782     bit, which counts from the most significant bit if
22783     'BITS_BIG_ENDIAN' is true and from the least significant bit
22784     otherwise.
22785
22786     Operands 0 and 3 both have mode M.  Operands 1 and 2 have a
22787     target-specific mode.
22788
22789'insvmisalignM'
22790     Insert operand 3 into a bit-field of memory operand 0.  Operand 1
22791     specifies the width of the field in bits and operand 2 the starting
22792     bit.  The starting bit is always somewhere in the first byte of
22793     operand 0; it counts from the most significant bit if
22794     'BITS_BIG_ENDIAN' is true and from the least significant bit
22795     otherwise.
22796
22797     Operand 3 has mode M while operand 0 has 'BLK' mode.  Operands 1
22798     and 2 have a target-specific mode.
22799
22800     The instruction must not read or write beyond the last byte of the
22801     bit-field.
22802
22803'extv'
22804     Extract a bit-field from operand 1 (a register or memory operand),
22805     where operand 2 specifies the width in bits and operand 3 the
22806     starting bit, and store it in operand 0.  Operand 0 must have mode
22807     'word_mode'.  Operand 1 may have mode 'byte_mode' or 'word_mode';
22808     often 'word_mode' is allowed only for registers.  Operands 2 and 3
22809     must be valid for 'word_mode'.
22810
22811     The RTL generation pass generates this instruction only with
22812     constants for operands 2 and 3 and the constant is never zero for
22813     operand 2.
22814
22815     The bit-field value is sign-extended to a full word integer before
22816     it is stored in operand 0.
22817
22818     This pattern is deprecated; please use 'extvM' and 'extvmisalignM'
22819     instead.
22820
22821'extzv'
22822     Like 'extv' except that the bit-field value is zero-extended.
22823
22824     This pattern is deprecated; please use 'extzvM' and
22825     'extzvmisalignM' instead.
22826
22827'insv'
22828     Store operand 3 (which must be valid for 'word_mode') into a
22829     bit-field in operand 0, where operand 1 specifies the width in bits
22830     and operand 2 the starting bit.  Operand 0 may have mode
22831     'byte_mode' or 'word_mode'; often 'word_mode' is allowed only for
22832     registers.  Operands 1 and 2 must be valid for 'word_mode'.
22833
22834     The RTL generation pass generates this instruction only with
22835     constants for operands 1 and 2 and the constant is never zero for
22836     operand 1.
22837
22838     This pattern is deprecated; please use 'insvM' and 'insvmisalignM'
22839     instead.
22840
22841'movMODEcc'
22842     Conditionally move operand 2 or operand 3 into operand 0 according
22843     to the comparison in operand 1.  If the comparison is true, operand
22844     2 is moved into operand 0, otherwise operand 3 is moved.
22845
22846     The mode of the operands being compared need not be the same as the
22847     operands being moved.  Some machines, sparc64 for example, have
22848     instructions that conditionally move an integer value based on the
22849     floating point condition codes and vice versa.
22850
22851     If the machine does not have conditional move instructions, do not
22852     define these patterns.
22853
22854'addMODEcc'
22855     Similar to 'movMODEcc' but for conditional addition.  Conditionally
22856     move operand 2 or (operands 2 + operand 3) into operand 0 according
22857     to the comparison in operand 1.  If the comparison is false,
22858     operand 2 is moved into operand 0, otherwise (operand 2 + operand
22859     3) is moved.
22860
22861'cstoreMODE4'
22862     Store zero or nonzero in operand 0 according to whether a
22863     comparison is true.  Operand 1 is a comparison operator.  Operand 2
22864     and operand 3 are the first and second operand of the comparison,
22865     respectively.  You specify the mode that operand 0 must have when
22866     you write the 'match_operand' expression.  The compiler
22867     automatically sees which mode you have used and supplies an operand
22868     of that mode.
22869
22870     The value stored for a true condition must have 1 as its low bit,
22871     or else must be negative.  Otherwise the instruction is not
22872     suitable and you should omit it from the machine description.  You
22873     describe to the compiler exactly which value is stored by defining
22874     the macro 'STORE_FLAG_VALUE' (*note Misc::).  If a description
22875     cannot be found that can be used for all the possible comparison
22876     operators, you should pick one and use a 'define_expand' to map all
22877     results onto the one you chose.
22878
22879     These operations may 'FAIL', but should do so only in relatively
22880     uncommon cases; if they would 'FAIL' for common cases involving
22881     integer comparisons, it is best to restrict the predicates to not
22882     allow these operands.  Likewise if a given comparison operator will
22883     always fail, independent of the operands (for floating-point modes,
22884     the 'ordered_comparison_operator' predicate is often useful in this
22885     case).
22886
22887     If this pattern is omitted, the compiler will generate a
22888     conditional branch--for example, it may copy a constant one to the
22889     target and branching around an assignment of zero to the target--or
22890     a libcall.  If the predicate for operand 1 only rejects some
22891     operators, it will also try reordering the operands and/or
22892     inverting the result value (e.g. by an exclusive OR). These
22893     possibilities could be cheaper or equivalent to the instructions
22894     used for the 'cstoreMODE4' pattern followed by those required to
22895     convert a positive result from 'STORE_FLAG_VALUE' to 1; in this
22896     case, you can and should make operand 1's predicate reject some
22897     operators in the 'cstoreMODE4' pattern, or remove the pattern
22898     altogether from the machine description.
22899
22900'cbranchMODE4'
22901     Conditional branch instruction combined with a compare instruction.
22902     Operand 0 is a comparison operator.  Operand 1 and operand 2 are
22903     the first and second operands of the comparison, respectively.
22904     Operand 3 is a 'label_ref' that refers to the label to jump to.
22905
22906'jump'
22907     A jump inside a function; an unconditional branch.  Operand 0 is
22908     the 'label_ref' of the label to jump to.  This pattern name is
22909     mandatory on all machines.
22910
22911'call'
22912     Subroutine call instruction returning no value.  Operand 0 is the
22913     function to call; operand 1 is the number of bytes of arguments
22914     pushed as a 'const_int'; operand 2 is the number of registers used
22915     as operands.
22916
22917     On most machines, operand 2 is not actually stored into the RTL
22918     pattern.  It is supplied for the sake of some RISC machines which
22919     need to put this information into the assembler code; they can put
22920     it in the RTL instead of operand 1.
22921
22922     Operand 0 should be a 'mem' RTX whose address is the address of the
22923     function.  Note, however, that this address can be a 'symbol_ref'
22924     expression even if it would not be a legitimate memory address on
22925     the target machine.  If it is also not a valid argument for a call
22926     instruction, the pattern for this operation should be a
22927     'define_expand' (*note Expander Definitions::) that places the
22928     address into a register and uses that register in the call
22929     instruction.
22930
22931'call_value'
22932     Subroutine call instruction returning a value.  Operand 0 is the
22933     hard register in which the value is returned.  There are three more
22934     operands, the same as the three operands of the 'call' instruction
22935     (but with numbers increased by one).
22936
22937     Subroutines that return 'BLKmode' objects use the 'call' insn.
22938
22939'call_pop', 'call_value_pop'
22940     Similar to 'call' and 'call_value', except used if defined and if
22941     'RETURN_POPS_ARGS' is nonzero.  They should emit a 'parallel' that
22942     contains both the function call and a 'set' to indicate the
22943     adjustment made to the frame pointer.
22944
22945     For machines where 'RETURN_POPS_ARGS' can be nonzero, the use of
22946     these patterns increases the number of functions for which the
22947     frame pointer can be eliminated, if desired.
22948
22949'untyped_call'
22950     Subroutine call instruction returning a value of any type.  Operand
22951     0 is the function to call; operand 1 is a memory location where the
22952     result of calling the function is to be stored; operand 2 is a
22953     'parallel' expression where each element is a 'set' expression that
22954     indicates the saving of a function return value into the result
22955     block.
22956
22957     This instruction pattern should be defined to support
22958     '__builtin_apply' on machines where special instructions are needed
22959     to call a subroutine with arbitrary arguments or to save the value
22960     returned.  This instruction pattern is required on machines that
22961     have multiple registers that can hold a return value (i.e.
22962     'FUNCTION_VALUE_REGNO_P' is true for more than one register).
22963
22964'return'
22965     Subroutine return instruction.  This instruction pattern name
22966     should be defined only if a single instruction can do all the work
22967     of returning from a function.
22968
22969     Like the 'movM' patterns, this pattern is also used after the RTL
22970     generation phase.  In this case it is to support machines where
22971     multiple instructions are usually needed to return from a function,
22972     but some class of functions only requires one instruction to
22973     implement a return.  Normally, the applicable functions are those
22974     which do not need to save any registers or allocate stack space.
22975
22976     It is valid for this pattern to expand to an instruction using
22977     'simple_return' if no epilogue is required.
22978
22979'simple_return'
22980     Subroutine return instruction.  This instruction pattern name
22981     should be defined only if a single instruction can do all the work
22982     of returning from a function on a path where no epilogue is
22983     required.  This pattern is very similar to the 'return' instruction
22984     pattern, but it is emitted only by the shrink-wrapping optimization
22985     on paths where the function prologue has not been executed, and a
22986     function return should occur without any of the effects of the
22987     epilogue.  Additional uses may be introduced on paths where both
22988     the prologue and the epilogue have executed.
22989
22990     For such machines, the condition specified in this pattern should
22991     only be true when 'reload_completed' is nonzero and the function's
22992     epilogue would only be a single instruction.  For machines with
22993     register windows, the routine 'leaf_function_p' may be used to
22994     determine if a register window push is required.
22995
22996     Machines that have conditional return instructions should define
22997     patterns such as
22998
22999          (define_insn ""
23000            [(set (pc)
23001                  (if_then_else (match_operator
23002                                   0 "comparison_operator"
23003                                   [(cc0) (const_int 0)])
23004                                (return)
23005                                (pc)))]
23006            "CONDITION"
23007            "...")
23008
23009     where CONDITION would normally be the same condition specified on
23010     the named 'return' pattern.
23011
23012'untyped_return'
23013     Untyped subroutine return instruction.  This instruction pattern
23014     should be defined to support '__builtin_return' on machines where
23015     special instructions are needed to return a value of any type.
23016
23017     Operand 0 is a memory location where the result of calling a
23018     function with '__builtin_apply' is stored; operand 1 is a
23019     'parallel' expression where each element is a 'set' expression that
23020     indicates the restoring of a function return value from the result
23021     block.
23022
23023'nop'
23024     No-op instruction.  This instruction pattern name should always be
23025     defined to output a no-op in assembler code.  '(const_int 0)' will
23026     do as an RTL pattern.
23027
23028'indirect_jump'
23029     An instruction to jump to an address which is operand zero.  This
23030     pattern name is mandatory on all machines.
23031
23032'casesi'
23033     Instruction to jump through a dispatch table, including bounds
23034     checking.  This instruction takes five operands:
23035
23036       1. The index to dispatch on, which has mode 'SImode'.
23037
23038       2. The lower bound for indices in the table, an integer constant.
23039
23040       3. The total range of indices in the table--the largest index
23041          minus the smallest one (both inclusive).
23042
23043       4. A label that precedes the table itself.
23044
23045       5. A label to jump to if the index has a value outside the
23046          bounds.
23047
23048     The table is an 'addr_vec' or 'addr_diff_vec' inside of a
23049     'jump_insn'.  The number of elements in the table is one plus the
23050     difference between the upper bound and the lower bound.
23051
23052'tablejump'
23053     Instruction to jump to a variable address.  This is a low-level
23054     capability which can be used to implement a dispatch table when
23055     there is no 'casesi' pattern.
23056
23057     This pattern requires two operands: the address or offset, and a
23058     label which should immediately precede the jump table.  If the
23059     macro 'CASE_VECTOR_PC_RELATIVE' evaluates to a nonzero value then
23060     the first operand is an offset which counts from the address of the
23061     table; otherwise, it is an absolute address to jump to.  In either
23062     case, the first operand has mode 'Pmode'.
23063
23064     The 'tablejump' insn is always the last insn before the jump table
23065     it uses.  Its assembler code normally has no need to use the second
23066     operand, but you should incorporate it in the RTL pattern so that
23067     the jump optimizer will not delete the table as unreachable code.
23068
23069'decrement_and_branch_until_zero'
23070     Conditional branch instruction that decrements a register and jumps
23071     if the register is nonzero.  Operand 0 is the register to decrement
23072     and test; operand 1 is the label to jump to if the register is
23073     nonzero.  *Note Looping Patterns::.
23074
23075     This optional instruction pattern is only used by the combiner,
23076     typically for loops reversed by the loop optimizer when strength
23077     reduction is enabled.
23078
23079'doloop_end'
23080     Conditional branch instruction that decrements a register and jumps
23081     if the register is nonzero.  This instruction takes five operands:
23082     Operand 0 is the register to decrement and test; operand 1 is the
23083     number of loop iterations as a 'const_int' or 'const0_rtx' if this
23084     cannot be determined until run-time; operand 2 is the actual or
23085     estimated maximum number of iterations as a 'const_int'; operand 3
23086     is the number of enclosed loops as a 'const_int' (an innermost loop
23087     has a value of 1); operand 4 is the label to jump to if the
23088     register is nonzero; operand 5 is const1_rtx if the loop in entered
23089     at its top, const0_rtx otherwise.  *Note Looping Patterns::.
23090
23091     This optional instruction pattern should be defined for machines
23092     with low-overhead looping instructions as the loop optimizer will
23093     try to modify suitable loops to utilize it.  If nested low-overhead
23094     looping is not supported, use a 'define_expand' (*note Expander
23095     Definitions::) and make the pattern fail if operand 3 is not
23096     'const1_rtx'.  Similarly, if the actual or estimated maximum number
23097     of iterations is too large for this instruction, make it fail.
23098
23099'doloop_begin'
23100     Companion instruction to 'doloop_end' required for machines that
23101     need to perform some initialization, such as loading special
23102     registers used by a low-overhead looping instruction.  If
23103     initialization insns do not always need to be emitted, use a
23104     'define_expand' (*note Expander Definitions::) and make it fail.
23105
23106'canonicalize_funcptr_for_compare'
23107     Canonicalize the function pointer in operand 1 and store the result
23108     into operand 0.
23109
23110     Operand 0 is always a 'reg' and has mode 'Pmode'; operand 1 may be
23111     a 'reg', 'mem', 'symbol_ref', 'const_int', etc and also has mode
23112     'Pmode'.
23113
23114     Canonicalization of a function pointer usually involves computing
23115     the address of the function which would be called if the function
23116     pointer were used in an indirect call.
23117
23118     Only define this pattern if function pointers on the target machine
23119     can have different values but still call the same function when
23120     used in an indirect call.
23121
23122'save_stack_block'
23123'save_stack_function'
23124'save_stack_nonlocal'
23125'restore_stack_block'
23126'restore_stack_function'
23127'restore_stack_nonlocal'
23128     Most machines save and restore the stack pointer by copying it to
23129     or from an object of mode 'Pmode'.  Do not define these patterns on
23130     such machines.
23131
23132     Some machines require special handling for stack pointer saves and
23133     restores.  On those machines, define the patterns corresponding to
23134     the non-standard cases by using a 'define_expand' (*note Expander
23135     Definitions::) that produces the required insns.  The three types
23136     of saves and restores are:
23137
23138       1. 'save_stack_block' saves the stack pointer at the start of a
23139          block that allocates a variable-sized object, and
23140          'restore_stack_block' restores the stack pointer when the
23141          block is exited.
23142
23143       2. 'save_stack_function' and 'restore_stack_function' do a
23144          similar job for the outermost block of a function and are used
23145          when the function allocates variable-sized objects or calls
23146          'alloca'.  Only the epilogue uses the restored stack pointer,
23147          allowing a simpler save or restore sequence on some machines.
23148
23149       3. 'save_stack_nonlocal' is used in functions that contain labels
23150          branched to by nested functions.  It saves the stack pointer
23151          in such a way that the inner function can use
23152          'restore_stack_nonlocal' to restore the stack pointer.  The
23153          compiler generates code to restore the frame and argument
23154          pointer registers, but some machines require saving and
23155          restoring additional data such as register window information
23156          or stack backchains.  Place insns in these patterns to save
23157          and restore any such required data.
23158
23159     When saving the stack pointer, operand 0 is the save area and
23160     operand 1 is the stack pointer.  The mode used to allocate the save
23161     area defaults to 'Pmode' but you can override that choice by
23162     defining the 'STACK_SAVEAREA_MODE' macro (*note Storage Layout::).
23163     You must specify an integral mode, or 'VOIDmode' if no save area is
23164     needed for a particular type of save (either because no save is
23165     needed or because a machine-specific save area can be used).
23166     Operand 0 is the stack pointer and operand 1 is the save area for
23167     restore operations.  If 'save_stack_block' is defined, operand 0
23168     must not be 'VOIDmode' since these saves can be arbitrarily nested.
23169
23170     A save area is a 'mem' that is at a constant offset from
23171     'virtual_stack_vars_rtx' when the stack pointer is saved for use by
23172     nonlocal gotos and a 'reg' in the other two cases.
23173
23174'allocate_stack'
23175     Subtract (or add if 'STACK_GROWS_DOWNWARD' is undefined) operand 1
23176     from the stack pointer to create space for dynamically allocated
23177     data.
23178
23179     Store the resultant pointer to this space into operand 0.  If you
23180     are allocating space from the main stack, do this by emitting a
23181     move insn to copy 'virtual_stack_dynamic_rtx' to operand 0.  If you
23182     are allocating the space elsewhere, generate code to copy the
23183     location of the space to operand 0.  In the latter case, you must
23184     ensure this space gets freed when the corresponding space on the
23185     main stack is free.
23186
23187     Do not define this pattern if all that must be done is the
23188     subtraction.  Some machines require other operations such as stack
23189     probes or maintaining the back chain.  Define this pattern to emit
23190     those operations in addition to updating the stack pointer.
23191
23192'check_stack'
23193     If stack checking (*note Stack Checking::) cannot be done on your
23194     system by probing the stack, define this pattern to perform the
23195     needed check and signal an error if the stack has overflowed.  The
23196     single operand is the address in the stack farthest from the
23197     current stack pointer that you need to validate.  Normally, on
23198     platforms where this pattern is needed, you would obtain the stack
23199     limit from a global or thread-specific variable or register.
23200
23201'probe_stack_address'
23202     If stack checking (*note Stack Checking::) can be done on your
23203     system by probing the stack but without the need to actually access
23204     it, define this pattern and signal an error if the stack has
23205     overflowed.  The single operand is the memory address in the stack
23206     that needs to be probed.
23207
23208'probe_stack'
23209     If stack checking (*note Stack Checking::) can be done on your
23210     system by probing the stack but doing it with a "store zero"
23211     instruction is not valid or optimal, define this pattern to do the
23212     probing differently and signal an error if the stack has
23213     overflowed.  The single operand is the memory reference in the
23214     stack that needs to be probed.
23215
23216'nonlocal_goto'
23217     Emit code to generate a non-local goto, e.g., a jump from one
23218     function to a label in an outer function.  This pattern has four
23219     arguments, each representing a value to be used in the jump.  The
23220     first argument is to be loaded into the frame pointer, the second
23221     is the address to branch to (code to dispatch to the actual label),
23222     the third is the address of a location where the stack is saved,
23223     and the last is the address of the label, to be placed in the
23224     location for the incoming static chain.
23225
23226     On most machines you need not define this pattern, since GCC will
23227     already generate the correct code, which is to load the frame
23228     pointer and static chain, restore the stack (using the
23229     'restore_stack_nonlocal' pattern, if defined), and jump indirectly
23230     to the dispatcher.  You need only define this pattern if this code
23231     will not work on your machine.
23232
23233'nonlocal_goto_receiver'
23234     This pattern, if defined, contains code needed at the target of a
23235     nonlocal goto after the code already generated by GCC.  You will
23236     not normally need to define this pattern.  A typical reason why you
23237     might need this pattern is if some value, such as a pointer to a
23238     global table, must be restored when the frame pointer is restored.
23239     Note that a nonlocal goto only occurs within a unit-of-translation,
23240     so a global table pointer that is shared by all functions of a
23241     given module need not be restored.  There are no arguments.
23242
23243'exception_receiver'
23244     This pattern, if defined, contains code needed at the site of an
23245     exception handler that isn't needed at the site of a nonlocal goto.
23246     You will not normally need to define this pattern.  A typical
23247     reason why you might need this pattern is if some value, such as a
23248     pointer to a global table, must be restored after control flow is
23249     branched to the handler of an exception.  There are no arguments.
23250
23251'builtin_setjmp_setup'
23252     This pattern, if defined, contains additional code needed to
23253     initialize the 'jmp_buf'.  You will not normally need to define
23254     this pattern.  A typical reason why you might need this pattern is
23255     if some value, such as a pointer to a global table, must be
23256     restored.  Though it is preferred that the pointer value be
23257     recalculated if possible (given the address of a label for
23258     instance).  The single argument is a pointer to the 'jmp_buf'.
23259     Note that the buffer is five words long and that the first three
23260     are normally used by the generic mechanism.
23261
23262'builtin_setjmp_receiver'
23263     This pattern, if defined, contains code needed at the site of a
23264     built-in setjmp that isn't needed at the site of a nonlocal goto.
23265     You will not normally need to define this pattern.  A typical
23266     reason why you might need this pattern is if some value, such as a
23267     pointer to a global table, must be restored.  It takes one
23268     argument, which is the label to which builtin_longjmp transferred
23269     control; this pattern may be emitted at a small offset from that
23270     label.
23271
23272'builtin_longjmp'
23273     This pattern, if defined, performs the entire action of the
23274     longjmp.  You will not normally need to define this pattern unless
23275     you also define 'builtin_setjmp_setup'.  The single argument is a
23276     pointer to the 'jmp_buf'.
23277
23278'eh_return'
23279     This pattern, if defined, affects the way '__builtin_eh_return',
23280     and thence the call frame exception handling library routines, are
23281     built.  It is intended to handle non-trivial actions needed along
23282     the abnormal return path.
23283
23284     The address of the exception handler to which the function should
23285     return is passed as operand to this pattern.  It will normally need
23286     to copied by the pattern to some special register or memory
23287     location.  If the pattern needs to determine the location of the
23288     target call frame in order to do so, it may use
23289     'EH_RETURN_STACKADJ_RTX', if defined; it will have already been
23290     assigned.
23291
23292     If this pattern is not defined, the default action will be to
23293     simply copy the return address to 'EH_RETURN_HANDLER_RTX'.  Either
23294     that macro or this pattern needs to be defined if call frame
23295     exception handling is to be used.
23296
23297'prologue'
23298     This pattern, if defined, emits RTL for entry to a function.  The
23299     function entry is responsible for setting up the stack frame,
23300     initializing the frame pointer register, saving callee saved
23301     registers, etc.
23302
23303     Using a prologue pattern is generally preferred over defining
23304     'TARGET_ASM_FUNCTION_PROLOGUE' to emit assembly code for the
23305     prologue.
23306
23307     The 'prologue' pattern is particularly useful for targets which
23308     perform instruction scheduling.
23309
23310'window_save'
23311     This pattern, if defined, emits RTL for a register window save.  It
23312     should be defined if the target machine has register windows but
23313     the window events are decoupled from calls to subroutines.  The
23314     canonical example is the SPARC architecture.
23315
23316'epilogue'
23317     This pattern emits RTL for exit from a function.  The function exit
23318     is responsible for deallocating the stack frame, restoring callee
23319     saved registers and emitting the return instruction.
23320
23321     Using an epilogue pattern is generally preferred over defining
23322     'TARGET_ASM_FUNCTION_EPILOGUE' to emit assembly code for the
23323     epilogue.
23324
23325     The 'epilogue' pattern is particularly useful for targets which
23326     perform instruction scheduling or which have delay slots for their
23327     return instruction.
23328
23329'sibcall_epilogue'
23330     This pattern, if defined, emits RTL for exit from a function
23331     without the final branch back to the calling function.  This
23332     pattern will be emitted before any sibling call (aka tail call)
23333     sites.
23334
23335     The 'sibcall_epilogue' pattern must not clobber any arguments used
23336     for parameter passing or any stack slots for arguments passed to
23337     the current function.
23338
23339'trap'
23340     This pattern, if defined, signals an error, typically by causing
23341     some kind of signal to be raised.  Among other places, it is used
23342     by the Java front end to signal 'invalid array index' exceptions.
23343
23344'ctrapMM4'
23345     Conditional trap instruction.  Operand 0 is a piece of RTL which
23346     performs a comparison, and operands 1 and 2 are the arms of the
23347     comparison.  Operand 3 is the trap code, an integer.
23348
23349     A typical 'ctrap' pattern looks like
23350
23351          (define_insn "ctrapsi4"
23352            [(trap_if (match_operator 0 "trap_operator"
23353                       [(match_operand 1 "register_operand")
23354                        (match_operand 2 "immediate_operand")])
23355                      (match_operand 3 "const_int_operand" "i"))]
23356            ""
23357            "...")
23358
23359'prefetch'
23360
23361     This pattern, if defined, emits code for a non-faulting data
23362     prefetch instruction.  Operand 0 is the address of the memory to
23363     prefetch.  Operand 1 is a constant 1 if the prefetch is preparing
23364     for a write to the memory address, or a constant 0 otherwise.
23365     Operand 2 is the expected degree of temporal locality of the data
23366     and is a value between 0 and 3, inclusive; 0 means that the data
23367     has no temporal locality, so it need not be left in the cache after
23368     the access; 3 means that the data has a high degree of temporal
23369     locality and should be left in all levels of cache possible; 1 and
23370     2 mean, respectively, a low or moderate degree of temporal
23371     locality.
23372
23373     Targets that do not support write prefetches or locality hints can
23374     ignore the values of operands 1 and 2.
23375
23376'blockage'
23377
23378     This pattern defines a pseudo insn that prevents the instruction
23379     scheduler and other passes from moving instructions and using
23380     register equivalences across the boundary defined by the blockage
23381     insn.  This needs to be an UNSPEC_VOLATILE pattern or a volatile
23382     ASM.
23383
23384'memory_barrier'
23385
23386     If the target memory model is not fully synchronous, then this
23387     pattern should be defined to an instruction that orders both loads
23388     and stores before the instruction with respect to loads and stores
23389     after the instruction.  This pattern has no operands.
23390
23391'sync_compare_and_swapMODE'
23392
23393     This pattern, if defined, emits code for an atomic compare-and-swap
23394     operation.  Operand 1 is the memory on which the atomic operation
23395     is performed.  Operand 2 is the "old" value to be compared against
23396     the current contents of the memory location.  Operand 3 is the
23397     "new" value to store in the memory if the compare succeeds.
23398     Operand 0 is the result of the operation; it should contain the
23399     contents of the memory before the operation.  If the compare
23400     succeeds, this should obviously be a copy of operand 2.
23401
23402     This pattern must show that both operand 0 and operand 1 are
23403     modified.
23404
23405     This pattern must issue any memory barrier instructions such that
23406     all memory operations before the atomic operation occur before the
23407     atomic operation and all memory operations after the atomic
23408     operation occur after the atomic operation.
23409
23410     For targets where the success or failure of the compare-and-swap
23411     operation is available via the status flags, it is possible to
23412     avoid a separate compare operation and issue the subsequent branch
23413     or store-flag operation immediately after the compare-and-swap.  To
23414     this end, GCC will look for a 'MODE_CC' set in the output of
23415     'sync_compare_and_swapMODE'; if the machine description includes
23416     such a set, the target should also define special 'cbranchcc4'
23417     and/or 'cstorecc4' instructions.  GCC will then be able to take the
23418     destination of the 'MODE_CC' set and pass it to the 'cbranchcc4' or
23419     'cstorecc4' pattern as the first operand of the comparison (the
23420     second will be '(const_int 0)').
23421
23422     For targets where the operating system may provide support for this
23423     operation via library calls, the 'sync_compare_and_swap_optab' may
23424     be initialized to a function with the same interface as the
23425     '__sync_val_compare_and_swap_N' built-in.  If the entire set of
23426     __SYNC builtins are supported via library calls, the target can
23427     initialize all of the optabs at once with 'init_sync_libfuncs'.
23428     For the purposes of C++11 'std::atomic::is_lock_free', it is
23429     assumed that these library calls do _not_ use any kind of
23430     interruptable locking.
23431
23432'sync_addMODE', 'sync_subMODE'
23433'sync_iorMODE', 'sync_andMODE'
23434'sync_xorMODE', 'sync_nandMODE'
23435
23436     These patterns emit code for an atomic operation on memory.
23437     Operand 0 is the memory on which the atomic operation is performed.
23438     Operand 1 is the second operand to the binary operator.
23439
23440     This pattern must issue any memory barrier instructions such that
23441     all memory operations before the atomic operation occur before the
23442     atomic operation and all memory operations after the atomic
23443     operation occur after the atomic operation.
23444
23445     If these patterns are not defined, the operation will be
23446     constructed from a compare-and-swap operation, if defined.
23447
23448'sync_old_addMODE', 'sync_old_subMODE'
23449'sync_old_iorMODE', 'sync_old_andMODE'
23450'sync_old_xorMODE', 'sync_old_nandMODE'
23451
23452     These patterns emit code for an atomic operation on memory, and
23453     return the value that the memory contained before the operation.
23454     Operand 0 is the result value, operand 1 is the memory on which the
23455     atomic operation is performed, and operand 2 is the second operand
23456     to the binary operator.
23457
23458     This pattern must issue any memory barrier instructions such that
23459     all memory operations before the atomic operation occur before the
23460     atomic operation and all memory operations after the atomic
23461     operation occur after the atomic operation.
23462
23463     If these patterns are not defined, the operation will be
23464     constructed from a compare-and-swap operation, if defined.
23465
23466'sync_new_addMODE', 'sync_new_subMODE'
23467'sync_new_iorMODE', 'sync_new_andMODE'
23468'sync_new_xorMODE', 'sync_new_nandMODE'
23469
23470     These patterns are like their 'sync_old_OP' counterparts, except
23471     that they return the value that exists in the memory location after
23472     the operation, rather than before the operation.
23473
23474'sync_lock_test_and_setMODE'
23475
23476     This pattern takes two forms, based on the capabilities of the
23477     target.  In either case, operand 0 is the result of the operand,
23478     operand 1 is the memory on which the atomic operation is performed,
23479     and operand 2 is the value to set in the lock.
23480
23481     In the ideal case, this operation is an atomic exchange operation,
23482     in which the previous value in memory operand is copied into the
23483     result operand, and the value operand is stored in the memory
23484     operand.
23485
23486     For less capable targets, any value operand that is not the
23487     constant 1 should be rejected with 'FAIL'.  In this case the target
23488     may use an atomic test-and-set bit operation.  The result operand
23489     should contain 1 if the bit was previously set and 0 if the bit was
23490     previously clear.  The true contents of the memory operand are
23491     implementation defined.
23492
23493     This pattern must issue any memory barrier instructions such that
23494     the pattern as a whole acts as an acquire barrier, that is all
23495     memory operations after the pattern do not occur until the lock is
23496     acquired.
23497
23498     If this pattern is not defined, the operation will be constructed
23499     from a compare-and-swap operation, if defined.
23500
23501'sync_lock_releaseMODE'
23502
23503     This pattern, if defined, releases a lock set by
23504     'sync_lock_test_and_setMODE'.  Operand 0 is the memory that
23505     contains the lock; operand 1 is the value to store in the lock.
23506
23507     If the target doesn't implement full semantics for
23508     'sync_lock_test_and_setMODE', any value operand which is not the
23509     constant 0 should be rejected with 'FAIL', and the true contents of
23510     the memory operand are implementation defined.
23511
23512     This pattern must issue any memory barrier instructions such that
23513     the pattern as a whole acts as a release barrier, that is the lock
23514     is released only after all previous memory operations have
23515     completed.
23516
23517     If this pattern is not defined, then a 'memory_barrier' pattern
23518     will be emitted, followed by a store of the value to the memory
23519     operand.
23520
23521'atomic_compare_and_swapMODE'
23522     This pattern, if defined, emits code for an atomic compare-and-swap
23523     operation with memory model semantics.  Operand 2 is the memory on
23524     which the atomic operation is performed.  Operand 0 is an output
23525     operand which is set to true or false based on whether the
23526     operation succeeded.  Operand 1 is an output operand which is set
23527     to the contents of the memory before the operation was attempted.
23528     Operand 3 is the value that is expected to be in memory.  Operand 4
23529     is the value to put in memory if the expected value is found there.
23530     Operand 5 is set to 1 if this compare and swap is to be treated as
23531     a weak operation.  Operand 6 is the memory model to be used if the
23532     operation is a success.  Operand 7 is the memory model to be used
23533     if the operation fails.
23534
23535     If memory referred to in operand 2 contains the value in operand 3,
23536     then operand 4 is stored in memory pointed to by operand 2 and
23537     fencing based on the memory model in operand 6 is issued.
23538
23539     If memory referred to in operand 2 does not contain the value in
23540     operand 3, then fencing based on the memory model in operand 7 is
23541     issued.
23542
23543     If a target does not support weak compare-and-swap operations, or
23544     the port elects not to implement weak operations, the argument in
23545     operand 5 can be ignored.  Note a strong implementation must be
23546     provided.
23547
23548     If this pattern is not provided, the '__atomic_compare_exchange'
23549     built-in functions will utilize the legacy 'sync_compare_and_swap'
23550     pattern with an '__ATOMIC_SEQ_CST' memory model.
23551
23552'atomic_loadMODE'
23553     This pattern implements an atomic load operation with memory model
23554     semantics.  Operand 1 is the memory address being loaded from.
23555     Operand 0 is the result of the load.  Operand 2 is the memory model
23556     to be used for the load operation.
23557
23558     If not present, the '__atomic_load' built-in function will either
23559     resort to a normal load with memory barriers, or a compare-and-swap
23560     operation if a normal load would not be atomic.
23561
23562'atomic_storeMODE'
23563     This pattern implements an atomic store operation with memory model
23564     semantics.  Operand 0 is the memory address being stored to.
23565     Operand 1 is the value to be written.  Operand 2 is the memory
23566     model to be used for the operation.
23567
23568     If not present, the '__atomic_store' built-in function will attempt
23569     to perform a normal store and surround it with any required memory
23570     fences.  If the store would not be atomic, then an
23571     '__atomic_exchange' is attempted with the result being ignored.
23572
23573'atomic_exchangeMODE'
23574     This pattern implements an atomic exchange operation with memory
23575     model semantics.  Operand 1 is the memory location the operation is
23576     performed on.  Operand 0 is an output operand which is set to the
23577     original value contained in the memory pointed to by operand 1.
23578     Operand 2 is the value to be stored.  Operand 3 is the memory model
23579     to be used.
23580
23581     If this pattern is not present, the built-in function
23582     '__atomic_exchange' will attempt to preform the operation with a
23583     compare and swap loop.
23584
23585'atomic_addMODE', 'atomic_subMODE'
23586'atomic_orMODE', 'atomic_andMODE'
23587'atomic_xorMODE', 'atomic_nandMODE'
23588
23589     These patterns emit code for an atomic operation on memory with
23590     memory model semantics.  Operand 0 is the memory on which the
23591     atomic operation is performed.  Operand 1 is the second operand to
23592     the binary operator.  Operand 2 is the memory model to be used by
23593     the operation.
23594
23595     If these patterns are not defined, attempts will be made to use
23596     legacy 'sync' patterns, or equivalent patterns which return a
23597     result.  If none of these are available a compare-and-swap loop
23598     will be used.
23599
23600'atomic_fetch_addMODE', 'atomic_fetch_subMODE'
23601'atomic_fetch_orMODE', 'atomic_fetch_andMODE'
23602'atomic_fetch_xorMODE', 'atomic_fetch_nandMODE'
23603
23604     These patterns emit code for an atomic operation on memory with
23605     memory model semantics, and return the original value.  Operand 0
23606     is an output operand which contains the value of the memory
23607     location before the operation was performed.  Operand 1 is the
23608     memory on which the atomic operation is performed.  Operand 2 is
23609     the second operand to the binary operator.  Operand 3 is the memory
23610     model to be used by the operation.
23611
23612     If these patterns are not defined, attempts will be made to use
23613     legacy 'sync' patterns.  If none of these are available a
23614     compare-and-swap loop will be used.
23615
23616'atomic_add_fetchMODE', 'atomic_sub_fetchMODE'
23617'atomic_or_fetchMODE', 'atomic_and_fetchMODE'
23618'atomic_xor_fetchMODE', 'atomic_nand_fetchMODE'
23619
23620     These patterns emit code for an atomic operation on memory with
23621     memory model semantics and return the result after the operation is
23622     performed.  Operand 0 is an output operand which contains the value
23623     after the operation.  Operand 1 is the memory on which the atomic
23624     operation is performed.  Operand 2 is the second operand to the
23625     binary operator.  Operand 3 is the memory model to be used by the
23626     operation.
23627
23628     If these patterns are not defined, attempts will be made to use
23629     legacy 'sync' patterns, or equivalent patterns which return the
23630     result before the operation followed by the arithmetic operation
23631     required to produce the result.  If none of these are available a
23632     compare-and-swap loop will be used.
23633
23634'atomic_test_and_set'
23635
23636     This pattern emits code for '__builtin_atomic_test_and_set'.
23637     Operand 0 is an output operand which is set to true if the previous
23638     previous contents of the byte was "set", and false otherwise.
23639     Operand 1 is the 'QImode' memory to be modified.  Operand 2 is the
23640     memory model to be used.
23641
23642     The specific value that defines "set" is implementation defined,
23643     and is normally based on what is performed by the native atomic
23644     test and set instruction.
23645
23646'mem_thread_fenceMODE'
23647     This pattern emits code required to implement a thread fence with
23648     memory model semantics.  Operand 0 is the memory model to be used.
23649
23650     If this pattern is not specified, all memory models except
23651     '__ATOMIC_RELAXED' will result in issuing a 'sync_synchronize'
23652     barrier pattern.
23653
23654'mem_signal_fenceMODE'
23655     This pattern emits code required to implement a signal fence with
23656     memory model semantics.  Operand 0 is the memory model to be used.
23657
23658     This pattern should impact the compiler optimizers the same way
23659     that mem_signal_fence does, but it does not need to issue any
23660     barrier instructions.
23661
23662     If this pattern is not specified, all memory models except
23663     '__ATOMIC_RELAXED' will result in issuing a 'sync_synchronize'
23664     barrier pattern.
23665
23666'get_thread_pointerMODE'
23667'set_thread_pointerMODE'
23668     These patterns emit code that reads/sets the TLS thread pointer.
23669     Currently, these are only needed if the target needs to support the
23670     '__builtin_thread_pointer' and '__builtin_set_thread_pointer'
23671     builtins.
23672
23673     The get/set patterns have a single output/input operand
23674     respectively, with MODE intended to be 'Pmode'.
23675
23676'stack_protect_set'
23677
23678     This pattern, if defined, moves a 'ptr_mode' value from the memory
23679     in operand 1 to the memory in operand 0 without leaving the value
23680     in a register afterward.  This is to avoid leaking the value some
23681     place that an attacker might use to rewrite the stack guard slot
23682     after having clobbered it.
23683
23684     If this pattern is not defined, then a plain move pattern is
23685     generated.
23686
23687'stack_protect_test'
23688
23689     This pattern, if defined, compares a 'ptr_mode' value from the
23690     memory in operand 1 with the memory in operand 0 without leaving
23691     the value in a register afterward and branches to operand 2 if the
23692     values were equal.
23693
23694     If this pattern is not defined, then a plain compare pattern and
23695     conditional branch pattern is used.
23696
23697'clear_cache'
23698
23699     This pattern, if defined, flushes the instruction cache for a
23700     region of memory.  The region is bounded to by the Pmode pointers
23701     in operand 0 inclusive and operand 1 exclusive.
23702
23703     If this pattern is not defined, a call to the library function
23704     '__clear_cache' is used.
23705
23706
23707File: gccint.info,  Node: Pattern Ordering,  Next: Dependent Patterns,  Prev: Standard Names,  Up: Machine Desc
23708
2370916.10 When the Order of Patterns Matters
23710========================================
23711
23712Sometimes an insn can match more than one instruction pattern.  Then the
23713pattern that appears first in the machine description is the one used.
23714Therefore, more specific patterns (patterns that will match fewer
23715things) and faster instructions (those that will produce better code
23716when they do match) should usually go first in the description.
23717
23718 In some cases the effect of ordering the patterns can be used to hide a
23719pattern when it is not valid.  For example, the 68000 has an instruction
23720for converting a fullword to floating point and another for converting a
23721byte to floating point.  An instruction converting an integer to
23722floating point could match either one.  We put the pattern to convert
23723the fullword first to make sure that one will be used rather than the
23724other.  (Otherwise a large integer might be generated as a single-byte
23725immediate quantity, which would not work.)  Instead of using this
23726pattern ordering it would be possible to make the pattern for
23727convert-a-byte smart enough to deal properly with any constant value.
23728
23729
23730File: gccint.info,  Node: Dependent Patterns,  Next: Jump Patterns,  Prev: Pattern Ordering,  Up: Machine Desc
23731
2373216.11 Interdependence of Patterns
23733=================================
23734
23735In some cases machines support instructions identical except for the
23736machine mode of one or more operands.  For example, there may be
23737"sign-extend halfword" and "sign-extend byte" instructions whose
23738patterns are
23739
23740     (set (match_operand:SI 0 ...)
23741          (extend:SI (match_operand:HI 1 ...)))
23742
23743     (set (match_operand:SI 0 ...)
23744          (extend:SI (match_operand:QI 1 ...)))
23745
23746Constant integers do not specify a machine mode, so an instruction to
23747extend a constant value could match either pattern.  The pattern it
23748actually will match is the one that appears first in the file.  For
23749correct results, this must be the one for the widest possible mode
23750('HImode', here).  If the pattern matches the 'QImode' instruction, the
23751results will be incorrect if the constant value does not actually fit
23752that mode.
23753
23754 Such instructions to extend constants are rarely generated because they
23755are optimized away, but they do occasionally happen in nonoptimized
23756compilations.
23757
23758 If a constraint in a pattern allows a constant, the reload pass may
23759replace a register with a constant permitted by the constraint in some
23760cases.  Similarly for memory references.  Because of this substitution,
23761you should not provide separate patterns for increment and decrement
23762instructions.  Instead, they should be generated from the same pattern
23763that supports register-register add insns by examining the operands and
23764generating the appropriate machine instruction.
23765
23766
23767File: gccint.info,  Node: Jump Patterns,  Next: Looping Patterns,  Prev: Dependent Patterns,  Up: Machine Desc
23768
2376916.12 Defining Jump Instruction Patterns
23770========================================
23771
23772GCC does not assume anything about how the machine realizes jumps.  The
23773machine description should define a single pattern, usually a
23774'define_expand', which expands to all the required insns.
23775
23776 Usually, this would be a comparison insn to set the condition code and
23777a separate branch insn testing the condition code and branching or not
23778according to its value.  For many machines, however, separating compares
23779and branches is limiting, which is why the more flexible approach with
23780one 'define_expand' is used in GCC. The machine description becomes
23781clearer for architectures that have compare-and-branch instructions but
23782no condition code.  It also works better when different sets of
23783comparison operators are supported by different kinds of conditional
23784branches (e.g.  integer vs.  floating-point), or by conditional branches
23785with respect to conditional stores.
23786
23787 Two separate insns are always used if the machine description
23788represents a condition code register using the legacy RTL expression
23789'(cc0)', and on most machines that use a separate condition code
23790register (*note Condition Code::).  For machines that use '(cc0)', in
23791fact, the set and use of the condition code must be separate and
23792adjacent(1), thus allowing flags in 'cc_status' to be used (*note
23793Condition Code::) and so that the comparison and branch insns could be
23794located from each other by using the functions 'prev_cc0_setter' and
23795'next_cc0_user'.
23796
23797 Even in this case having a single entry point for conditional branches
23798is advantageous, because it handles equally well the case where a single
23799comparison instruction records the results of both signed and unsigned
23800comparison of the given operands (with the branch insns coming in
23801distinct signed and unsigned flavors) as in the x86 or SPARC, and the
23802case where there are distinct signed and unsigned compare instructions
23803and only one set of conditional branch instructions as in the PowerPC.
23804
23805   ---------- Footnotes ----------
23806
23807   (1) 'note' insns can separate them, though.
23808
23809
23810File: gccint.info,  Node: Looping Patterns,  Next: Insn Canonicalizations,  Prev: Jump Patterns,  Up: Machine Desc
23811
2381216.13 Defining Looping Instruction Patterns
23813===========================================
23814
23815Some machines have special jump instructions that can be utilized to
23816make loops more efficient.  A common example is the 68000 'dbra'
23817instruction which performs a decrement of a register and a branch if the
23818result was greater than zero.  Other machines, in particular digital
23819signal processors (DSPs), have special block repeat instructions to
23820provide low-overhead loop support.  For example, the TI TMS320C3x/C4x
23821DSPs have a block repeat instruction that loads special registers to
23822mark the top and end of a loop and to count the number of loop
23823iterations.  This avoids the need for fetching and executing a
23824'dbra'-like instruction and avoids pipeline stalls associated with the
23825jump.
23826
23827 GCC has three special named patterns to support low overhead looping.
23828They are 'decrement_and_branch_until_zero', 'doloop_begin', and
23829'doloop_end'.  The first pattern, 'decrement_and_branch_until_zero', is
23830not emitted during RTL generation but may be emitted during the
23831instruction combination phase.  This requires the assistance of the loop
23832optimizer, using information collected during strength reduction, to
23833reverse a loop to count down to zero.  Some targets also require the
23834loop optimizer to add a 'REG_NONNEG' note to indicate that the iteration
23835count is always positive.  This is needed if the target performs a
23836signed loop termination test.  For example, the 68000 uses a pattern
23837similar to the following for its 'dbra' instruction:
23838
23839     (define_insn "decrement_and_branch_until_zero"
23840       [(set (pc)
23841             (if_then_else
23842               (ge (plus:SI (match_operand:SI 0 "general_operand" "+d*am")
23843                            (const_int -1))
23844                   (const_int 0))
23845               (label_ref (match_operand 1 "" ""))
23846               (pc)))
23847        (set (match_dup 0)
23848             (plus:SI (match_dup 0)
23849                      (const_int -1)))]
23850       "find_reg_note (insn, REG_NONNEG, 0)"
23851       "...")
23852
23853 Note that since the insn is both a jump insn and has an output, it must
23854deal with its own reloads, hence the 'm' constraints.  Also note that
23855since this insn is generated by the instruction combination phase
23856combining two sequential insns together into an implicit parallel insn,
23857the iteration counter needs to be biased by the same amount as the
23858decrement operation, in this case -1.  Note that the following similar
23859pattern will not be matched by the combiner.
23860
23861     (define_insn "decrement_and_branch_until_zero"
23862       [(set (pc)
23863             (if_then_else
23864               (ge (match_operand:SI 0 "general_operand" "+d*am")
23865                   (const_int 1))
23866               (label_ref (match_operand 1 "" ""))
23867               (pc)))
23868        (set (match_dup 0)
23869             (plus:SI (match_dup 0)
23870                      (const_int -1)))]
23871       "find_reg_note (insn, REG_NONNEG, 0)"
23872       "...")
23873
23874 The other two special looping patterns, 'doloop_begin' and
23875'doloop_end', are emitted by the loop optimizer for certain well-behaved
23876loops with a finite number of loop iterations using information
23877collected during strength reduction.
23878
23879 The 'doloop_end' pattern describes the actual looping instruction (or
23880the implicit looping operation) and the 'doloop_begin' pattern is an
23881optional companion pattern that can be used for initialization needed
23882for some low-overhead looping instructions.
23883
23884 Note that some machines require the actual looping instruction to be
23885emitted at the top of the loop (e.g., the TMS320C3x/C4x DSPs).  Emitting
23886the true RTL for a looping instruction at the top of the loop can cause
23887problems with flow analysis.  So instead, a dummy 'doloop' insn is
23888emitted at the end of the loop.  The machine dependent reorg pass checks
23889for the presence of this 'doloop' insn and then searches back to the top
23890of the loop, where it inserts the true looping insn (provided there are
23891no instructions in the loop which would cause problems).  Any additional
23892labels can be emitted at this point.  In addition, if the desired
23893special iteration counter register was not allocated, this machine
23894dependent reorg pass could emit a traditional compare and jump
23895instruction pair.
23896
23897 The essential difference between the 'decrement_and_branch_until_zero'
23898and the 'doloop_end' patterns is that the loop optimizer allocates an
23899additional pseudo register for the latter as an iteration counter.  This
23900pseudo register cannot be used within the loop (i.e., general induction
23901variables cannot be derived from it), however, in many cases the loop
23902induction variable may become redundant and removed by the flow pass.
23903
23904
23905File: gccint.info,  Node: Insn Canonicalizations,  Next: Expander Definitions,  Prev: Looping Patterns,  Up: Machine Desc
23906
2390716.14 Canonicalization of Instructions
23908======================================
23909
23910There are often cases where multiple RTL expressions could represent an
23911operation performed by a single machine instruction.  This situation is
23912most commonly encountered with logical, branch, and multiply-accumulate
23913instructions.  In such cases, the compiler attempts to convert these
23914multiple RTL expressions into a single canonical form to reduce the
23915number of insn patterns required.
23916
23917 In addition to algebraic simplifications, following canonicalizations
23918are performed:
23919
23920   * For commutative and comparison operators, a constant is always made
23921     the second operand.  If a machine only supports a constant as the
23922     second operand, only patterns that match a constant in the second
23923     operand need be supplied.
23924
23925   * For associative operators, a sequence of operators will always
23926     chain to the left; for instance, only the left operand of an
23927     integer 'plus' can itself be a 'plus'.  'and', 'ior', 'xor',
23928     'plus', 'mult', 'smin', 'smax', 'umin', and 'umax' are associative
23929     when applied to integers, and sometimes to floating-point.
23930
23931   * For these operators, if only one operand is a 'neg', 'not', 'mult',
23932     'plus', or 'minus' expression, it will be the first operand.
23933
23934   * In combinations of 'neg', 'mult', 'plus', and 'minus', the 'neg'
23935     operations (if any) will be moved inside the operations as far as
23936     possible.  For instance, '(neg (mult A B))' is canonicalized as
23937     '(mult (neg A) B)', but '(plus (mult (neg B) C) A)' is
23938     canonicalized as '(minus A (mult B C))'.
23939
23940   * For the 'compare' operator, a constant is always the second operand
23941     if the first argument is a condition code register or '(cc0)'.
23942
23943   * An operand of 'neg', 'not', 'mult', 'plus', or 'minus' is made the
23944     first operand under the same conditions as above.
23945
23946   * '(ltu (plus A B) B)' is converted to '(ltu (plus A B) A)'.
23947     Likewise with 'geu' instead of 'ltu'.
23948
23949   * '(minus X (const_int N))' is converted to '(plus X (const_int
23950     -N))'.
23951
23952   * Within address computations (i.e., inside 'mem'), a left shift is
23953     converted into the appropriate multiplication by a power of two.
23954
23955   * De Morgan's Law is used to move bitwise negation inside a bitwise
23956     logical-and or logical-or operation.  If this results in only one
23957     operand being a 'not' expression, it will be the first one.
23958
23959     A machine that has an instruction that performs a bitwise
23960     logical-and of one operand with the bitwise negation of the other
23961     should specify the pattern for that instruction as
23962
23963          (define_insn ""
23964            [(set (match_operand:M 0 ...)
23965                  (and:M (not:M (match_operand:M 1 ...))
23966                               (match_operand:M 2 ...)))]
23967            "..."
23968            "...")
23969
23970     Similarly, a pattern for a "NAND" instruction should be written
23971
23972          (define_insn ""
23973            [(set (match_operand:M 0 ...)
23974                  (ior:M (not:M (match_operand:M 1 ...))
23975                               (not:M (match_operand:M 2 ...))))]
23976            "..."
23977            "...")
23978
23979     In both cases, it is not necessary to include patterns for the many
23980     logically equivalent RTL expressions.
23981
23982   * The only possible RTL expressions involving both bitwise
23983     exclusive-or and bitwise negation are '(xor:M X Y)' and '(not:M
23984     (xor:M X Y))'.
23985
23986   * The sum of three items, one of which is a constant, will only
23987     appear in the form
23988
23989          (plus:M (plus:M X Y) CONSTANT)
23990
23991   * Equality comparisons of a group of bits (usually a single bit) with
23992     zero will be written using 'zero_extract' rather than the
23993     equivalent 'and' or 'sign_extract' operations.
23994
23995   * '(sign_extend:M1 (mult:M2 (sign_extend:M2 X) (sign_extend:M2 Y)))'
23996     is converted to '(mult:M1 (sign_extend:M1 X) (sign_extend:M1 Y))',
23997     and likewise for 'zero_extend'.
23998
23999   * '(sign_extend:M1 (mult:M2 (ashiftrt:M2 X S) (sign_extend:M2 Y)))'
24000     is converted to '(mult:M1 (sign_extend:M1 (ashiftrt:M2 X S))
24001     (sign_extend:M1 Y))', and likewise for patterns using 'zero_extend'
24002     and 'lshiftrt'.  If the second operand of 'mult' is also a shift,
24003     then that is extended also.  This transformation is only applied
24004     when it can be proven that the original operation had sufficient
24005     precision to prevent overflow.
24006
24007 Further canonicalization rules are defined in the function
24008'commutative_operand_precedence' in 'gcc/rtlanal.c'.
24009
24010
24011File: gccint.info,  Node: Expander Definitions,  Next: Insn Splitting,  Prev: Insn Canonicalizations,  Up: Machine Desc
24012
2401316.15 Defining RTL Sequences for Code Generation
24014================================================
24015
24016On some target machines, some standard pattern names for RTL generation
24017cannot be handled with single insn, but a sequence of RTL insns can
24018represent them.  For these target machines, you can write a
24019'define_expand' to specify how to generate the sequence of RTL.
24020
24021 A 'define_expand' is an RTL expression that looks almost like a
24022'define_insn'; but, unlike the latter, a 'define_expand' is used only
24023for RTL generation and it can produce more than one RTL insn.
24024
24025 A 'define_expand' RTX has four operands:
24026
24027   * The name.  Each 'define_expand' must have a name, since the only
24028     use for it is to refer to it by name.
24029
24030   * The RTL template.  This is a vector of RTL expressions representing
24031     a sequence of separate instructions.  Unlike 'define_insn', there
24032     is no implicit surrounding 'PARALLEL'.
24033
24034   * The condition, a string containing a C expression.  This expression
24035     is used to express how the availability of this pattern depends on
24036     subclasses of target machine, selected by command-line options when
24037     GCC is run.  This is just like the condition of a 'define_insn'
24038     that has a standard name.  Therefore, the condition (if present)
24039     may not depend on the data in the insn being matched, but only the
24040     target-machine-type flags.  The compiler needs to test these
24041     conditions during initialization in order to learn exactly which
24042     named instructions are available in a particular run.
24043
24044   * The preparation statements, a string containing zero or more C
24045     statements which are to be executed before RTL code is generated
24046     from the RTL template.
24047
24048     Usually these statements prepare temporary registers for use as
24049     internal operands in the RTL template, but they can also generate
24050     RTL insns directly by calling routines such as 'emit_insn', etc.
24051     Any such insns precede the ones that come from the RTL template.
24052
24053   * Optionally, a vector containing the values of attributes.  *Note
24054     Insn Attributes::.
24055
24056 Every RTL insn emitted by a 'define_expand' must match some
24057'define_insn' in the machine description.  Otherwise, the compiler will
24058crash when trying to generate code for the insn or trying to optimize
24059it.
24060
24061 The RTL template, in addition to controlling generation of RTL insns,
24062also describes the operands that need to be specified when this pattern
24063is used.  In particular, it gives a predicate for each operand.
24064
24065 A true operand, which needs to be specified in order to generate RTL
24066from the pattern, should be described with a 'match_operand' in its
24067first occurrence in the RTL template.  This enters information on the
24068operand's predicate into the tables that record such things.  GCC uses
24069the information to preload the operand into a register if that is
24070required for valid RTL code.  If the operand is referred to more than
24071once, subsequent references should use 'match_dup'.
24072
24073 The RTL template may also refer to internal "operands" which are
24074temporary registers or labels used only within the sequence made by the
24075'define_expand'.  Internal operands are substituted into the RTL
24076template with 'match_dup', never with 'match_operand'.  The values of
24077the internal operands are not passed in as arguments by the compiler
24078when it requests use of this pattern.  Instead, they are computed within
24079the pattern, in the preparation statements.  These statements compute
24080the values and store them into the appropriate elements of 'operands' so
24081that 'match_dup' can find them.
24082
24083 There are two special macros defined for use in the preparation
24084statements: 'DONE' and 'FAIL'.  Use them with a following semicolon, as
24085a statement.
24086
24087'DONE'
24088     Use the 'DONE' macro to end RTL generation for the pattern.  The
24089     only RTL insns resulting from the pattern on this occasion will be
24090     those already emitted by explicit calls to 'emit_insn' within the
24091     preparation statements; the RTL template will not be generated.
24092
24093'FAIL'
24094     Make the pattern fail on this occasion.  When a pattern fails, it
24095     means that the pattern was not truly available.  The calling
24096     routines in the compiler will try other strategies for code
24097     generation using other patterns.
24098
24099     Failure is currently supported only for binary (addition,
24100     multiplication, shifting, etc.)  and bit-field ('extv', 'extzv',
24101     and 'insv') operations.
24102
24103 If the preparation falls through (invokes neither 'DONE' nor 'FAIL'),
24104then the 'define_expand' acts like a 'define_insn' in that the RTL
24105template is used to generate the insn.
24106
24107 The RTL template is not used for matching, only for generating the
24108initial insn list.  If the preparation statement always invokes 'DONE'
24109or 'FAIL', the RTL template may be reduced to a simple list of operands,
24110such as this example:
24111
24112     (define_expand "addsi3"
24113       [(match_operand:SI 0 "register_operand" "")
24114        (match_operand:SI 1 "register_operand" "")
24115        (match_operand:SI 2 "register_operand" "")]
24116       ""
24117       "
24118     {
24119       handle_add (operands[0], operands[1], operands[2]);
24120       DONE;
24121     }")
24122
24123 Here is an example, the definition of left-shift for the SPUR chip:
24124
24125     (define_expand "ashlsi3"
24126       [(set (match_operand:SI 0 "register_operand" "")
24127             (ashift:SI
24128               (match_operand:SI 1 "register_operand" "")
24129               (match_operand:SI 2 "nonmemory_operand" "")))]
24130       ""
24131       "
24132
24133     {
24134       if (GET_CODE (operands[2]) != CONST_INT
24135           || (unsigned) INTVAL (operands[2]) > 3)
24136         FAIL;
24137     }")
24138
24139This example uses 'define_expand' so that it can generate an RTL insn
24140for shifting when the shift-count is in the supported range of 0 to 3
24141but fail in other cases where machine insns aren't available.  When it
24142fails, the compiler tries another strategy using different patterns
24143(such as, a library call).
24144
24145 If the compiler were able to handle nontrivial condition-strings in
24146patterns with names, then it would be possible to use a 'define_insn' in
24147that case.  Here is another case (zero-extension on the 68000) which
24148makes more use of the power of 'define_expand':
24149
24150     (define_expand "zero_extendhisi2"
24151       [(set (match_operand:SI 0 "general_operand" "")
24152             (const_int 0))
24153        (set (strict_low_part
24154               (subreg:HI
24155                 (match_dup 0)
24156                 0))
24157             (match_operand:HI 1 "general_operand" ""))]
24158       ""
24159       "operands[1] = make_safe_from (operands[1], operands[0]);")
24160
24161Here two RTL insns are generated, one to clear the entire output operand
24162and the other to copy the input operand into its low half.  This
24163sequence is incorrect if the input operand refers to [the old value of]
24164the output operand, so the preparation statement makes sure this isn't
24165so.  The function 'make_safe_from' copies the 'operands[1]' into a
24166temporary register if it refers to 'operands[0]'.  It does this by
24167emitting another RTL insn.
24168
24169 Finally, a third example shows the use of an internal operand.
24170Zero-extension on the SPUR chip is done by 'and'-ing the result against
24171a halfword mask.  But this mask cannot be represented by a 'const_int'
24172because the constant value is too large to be legitimate on this
24173machine.  So it must be copied into a register with 'force_reg' and then
24174the register used in the 'and'.
24175
24176     (define_expand "zero_extendhisi2"
24177       [(set (match_operand:SI 0 "register_operand" "")
24178             (and:SI (subreg:SI
24179                       (match_operand:HI 1 "register_operand" "")
24180                       0)
24181                     (match_dup 2)))]
24182       ""
24183       "operands[2]
24184          = force_reg (SImode, GEN_INT (65535)); ")
24185
24186 _Note:_ If the 'define_expand' is used to serve a standard binary or
24187unary arithmetic operation or a bit-field operation, then the last insn
24188it generates must not be a 'code_label', 'barrier' or 'note'.  It must
24189be an 'insn', 'jump_insn' or 'call_insn'.  If you don't need a real insn
24190at the end, emit an insn to copy the result of the operation into
24191itself.  Such an insn will generate no code, but it can avoid problems
24192in the compiler.
24193
24194
24195File: gccint.info,  Node: Insn Splitting,  Next: Including Patterns,  Prev: Expander Definitions,  Up: Machine Desc
24196
2419716.16 Defining How to Split Instructions
24198========================================
24199
24200There are two cases where you should specify how to split a pattern into
24201multiple insns.  On machines that have instructions requiring delay
24202slots (*note Delay Slots::) or that have instructions whose output is
24203not available for multiple cycles (*note Processor pipeline
24204description::), the compiler phases that optimize these cases need to be
24205able to move insns into one-instruction delay slots.  However, some
24206insns may generate more than one machine instruction.  These insns
24207cannot be placed into a delay slot.
24208
24209 Often you can rewrite the single insn as a list of individual insns,
24210each corresponding to one machine instruction.  The disadvantage of
24211doing so is that it will cause the compilation to be slower and require
24212more space.  If the resulting insns are too complex, it may also
24213suppress some optimizations.  The compiler splits the insn if there is a
24214reason to believe that it might improve instruction or delay slot
24215scheduling.
24216
24217 The insn combiner phase also splits putative insns.  If three insns are
24218merged into one insn with a complex expression that cannot be matched by
24219some 'define_insn' pattern, the combiner phase attempts to split the
24220complex pattern into two insns that are recognized.  Usually it can
24221break the complex pattern into two patterns by splitting out some
24222subexpression.  However, in some other cases, such as performing an
24223addition of a large constant in two insns on a RISC machine, the way to
24224split the addition into two insns is machine-dependent.
24225
24226 The 'define_split' definition tells the compiler how to split a complex
24227insn into several simpler insns.  It looks like this:
24228
24229     (define_split
24230       [INSN-PATTERN]
24231       "CONDITION"
24232       [NEW-INSN-PATTERN-1
24233        NEW-INSN-PATTERN-2
24234        ...]
24235       "PREPARATION-STATEMENTS")
24236
24237 INSN-PATTERN is a pattern that needs to be split and CONDITION is the
24238final condition to be tested, as in a 'define_insn'.  When an insn
24239matching INSN-PATTERN and satisfying CONDITION is found, it is replaced
24240in the insn list with the insns given by NEW-INSN-PATTERN-1,
24241NEW-INSN-PATTERN-2, etc.
24242
24243 The PREPARATION-STATEMENTS are similar to those statements that are
24244specified for 'define_expand' (*note Expander Definitions::) and are
24245executed before the new RTL is generated to prepare for the generated
24246code or emit some insns whose pattern is not fixed.  Unlike those in
24247'define_expand', however, these statements must not generate any new
24248pseudo-registers.  Once reload has completed, they also must not
24249allocate any space in the stack frame.
24250
24251 Patterns are matched against INSN-PATTERN in two different
24252circumstances.  If an insn needs to be split for delay slot scheduling
24253or insn scheduling, the insn is already known to be valid, which means
24254that it must have been matched by some 'define_insn' and, if
24255'reload_completed' is nonzero, is known to satisfy the constraints of
24256that 'define_insn'.  In that case, the new insn patterns must also be
24257insns that are matched by some 'define_insn' and, if 'reload_completed'
24258is nonzero, must also satisfy the constraints of those definitions.
24259
24260 As an example of this usage of 'define_split', consider the following
24261example from 'a29k.md', which splits a 'sign_extend' from 'HImode' to
24262'SImode' into a pair of shift insns:
24263
24264     (define_split
24265       [(set (match_operand:SI 0 "gen_reg_operand" "")
24266             (sign_extend:SI (match_operand:HI 1 "gen_reg_operand" "")))]
24267       ""
24268       [(set (match_dup 0)
24269             (ashift:SI (match_dup 1)
24270                        (const_int 16)))
24271        (set (match_dup 0)
24272             (ashiftrt:SI (match_dup 0)
24273                          (const_int 16)))]
24274       "
24275     { operands[1] = gen_lowpart (SImode, operands[1]); }")
24276
24277 When the combiner phase tries to split an insn pattern, it is always
24278the case that the pattern is _not_ matched by any 'define_insn'.  The
24279combiner pass first tries to split a single 'set' expression and then
24280the same 'set' expression inside a 'parallel', but followed by a
24281'clobber' of a pseudo-reg to use as a scratch register.  In these cases,
24282the combiner expects exactly two new insn patterns to be generated.  It
24283will verify that these patterns match some 'define_insn' definitions, so
24284you need not do this test in the 'define_split' (of course, there is no
24285point in writing a 'define_split' that will never produce insns that
24286match).
24287
24288 Here is an example of this use of 'define_split', taken from
24289'rs6000.md':
24290
24291     (define_split
24292       [(set (match_operand:SI 0 "gen_reg_operand" "")
24293             (plus:SI (match_operand:SI 1 "gen_reg_operand" "")
24294                      (match_operand:SI 2 "non_add_cint_operand" "")))]
24295       ""
24296       [(set (match_dup 0) (plus:SI (match_dup 1) (match_dup 3)))
24297        (set (match_dup 0) (plus:SI (match_dup 0) (match_dup 4)))]
24298     "
24299     {
24300       int low = INTVAL (operands[2]) & 0xffff;
24301       int high = (unsigned) INTVAL (operands[2]) >> 16;
24302
24303       if (low & 0x8000)
24304         high++, low |= 0xffff0000;
24305
24306       operands[3] = GEN_INT (high << 16);
24307       operands[4] = GEN_INT (low);
24308     }")
24309
24310 Here the predicate 'non_add_cint_operand' matches any 'const_int' that
24311is _not_ a valid operand of a single add insn.  The add with the smaller
24312displacement is written so that it can be substituted into the address
24313of a subsequent operation.
24314
24315 An example that uses a scratch register, from the same file, generates
24316an equality comparison of a register and a large constant:
24317
24318     (define_split
24319       [(set (match_operand:CC 0 "cc_reg_operand" "")
24320             (compare:CC (match_operand:SI 1 "gen_reg_operand" "")
24321                         (match_operand:SI 2 "non_short_cint_operand" "")))
24322        (clobber (match_operand:SI 3 "gen_reg_operand" ""))]
24323       "find_single_use (operands[0], insn, 0)
24324        && (GET_CODE (*find_single_use (operands[0], insn, 0)) == EQ
24325            || GET_CODE (*find_single_use (operands[0], insn, 0)) == NE)"
24326       [(set (match_dup 3) (xor:SI (match_dup 1) (match_dup 4)))
24327        (set (match_dup 0) (compare:CC (match_dup 3) (match_dup 5)))]
24328       "
24329     {
24330       /* Get the constant we are comparing against, C, and see what it
24331          looks like sign-extended to 16 bits.  Then see what constant
24332          could be XOR'ed with C to get the sign-extended value.  */
24333
24334       int c = INTVAL (operands[2]);
24335       int sextc = (c << 16) >> 16;
24336       int xorv = c ^ sextc;
24337
24338       operands[4] = GEN_INT (xorv);
24339       operands[5] = GEN_INT (sextc);
24340     }")
24341
24342 To avoid confusion, don't write a single 'define_split' that accepts
24343some insns that match some 'define_insn' as well as some insns that
24344don't.  Instead, write two separate 'define_split' definitions, one for
24345the insns that are valid and one for the insns that are not valid.
24346
24347 The splitter is allowed to split jump instructions into sequence of
24348jumps or create new jumps in while splitting non-jump instructions.  As
24349the central flowgraph and branch prediction information needs to be
24350updated, several restriction apply.
24351
24352 Splitting of jump instruction into sequence that over by another jump
24353instruction is always valid, as compiler expect identical behavior of
24354new jump.  When new sequence contains multiple jump instructions or new
24355labels, more assistance is needed.  Splitter is required to create only
24356unconditional jumps, or simple conditional jump instructions.
24357Additionally it must attach a 'REG_BR_PROB' note to each conditional
24358jump.  A global variable 'split_branch_probability' holds the
24359probability of the original branch in case it was a simple conditional
24360jump, -1 otherwise.  To simplify recomputing of edge frequencies, the
24361new sequence is required to have only forward jumps to the newly created
24362labels.
24363
24364 For the common case where the pattern of a define_split exactly matches
24365the pattern of a define_insn, use 'define_insn_and_split'.  It looks
24366like this:
24367
24368     (define_insn_and_split
24369       [INSN-PATTERN]
24370       "CONDITION"
24371       "OUTPUT-TEMPLATE"
24372       "SPLIT-CONDITION"
24373       [NEW-INSN-PATTERN-1
24374        NEW-INSN-PATTERN-2
24375        ...]
24376       "PREPARATION-STATEMENTS"
24377       [INSN-ATTRIBUTES])
24378
24379
24380 INSN-PATTERN, CONDITION, OUTPUT-TEMPLATE, and INSN-ATTRIBUTES are used
24381as in 'define_insn'.  The NEW-INSN-PATTERN vector and the
24382PREPARATION-STATEMENTS are used as in a 'define_split'.  The
24383SPLIT-CONDITION is also used as in 'define_split', with the additional
24384behavior that if the condition starts with '&&', the condition used for
24385the split will be the constructed as a logical "and" of the split
24386condition with the insn condition.  For example, from i386.md:
24387
24388     (define_insn_and_split "zero_extendhisi2_and"
24389       [(set (match_operand:SI 0 "register_operand" "=r")
24390          (zero_extend:SI (match_operand:HI 1 "register_operand" "0")))
24391        (clobber (reg:CC 17))]
24392       "TARGET_ZERO_EXTEND_WITH_AND && !optimize_size"
24393       "#"
24394       "&& reload_completed"
24395       [(parallel [(set (match_dup 0)
24396                        (and:SI (match_dup 0) (const_int 65535)))
24397                   (clobber (reg:CC 17))])]
24398       ""
24399       [(set_attr "type" "alu1")])
24400
24401
24402 In this case, the actual split condition will be
24403'TARGET_ZERO_EXTEND_WITH_AND && !optimize_size && reload_completed'.
24404
24405 The 'define_insn_and_split' construction provides exactly the same
24406functionality as two separate 'define_insn' and 'define_split' patterns.
24407It exists for compactness, and as a maintenance tool to prevent having
24408to ensure the two patterns' templates match.
24409
24410
24411File: gccint.info,  Node: Including Patterns,  Next: Peephole Definitions,  Prev: Insn Splitting,  Up: Machine Desc
24412
2441316.17 Including Patterns in Machine Descriptions.
24414=================================================
24415
24416The 'include' pattern tells the compiler tools where to look for
24417patterns that are in files other than in the file '.md'.  This is used
24418only at build time and there is no preprocessing allowed.
24419
24420 It looks like:
24421
24422
24423     (include
24424       PATHNAME)
24425
24426 For example:
24427
24428
24429     (include "filestuff")
24430
24431
24432 Where PATHNAME is a string that specifies the location of the file,
24433specifies the include file to be in 'gcc/config/target/filestuff'.  The
24434directory 'gcc/config/target' is regarded as the default directory.
24435
24436 Machine descriptions may be split up into smaller more manageable
24437subsections and placed into subdirectories.
24438
24439 By specifying:
24440
24441
24442     (include "BOGUS/filestuff")
24443
24444
24445 the include file is specified to be in
24446'gcc/config/TARGET/BOGUS/filestuff'.
24447
24448 Specifying an absolute path for the include file such as;
24449
24450     (include "/u2/BOGUS/filestuff")
24451
24452 is permitted but is not encouraged.
24453
2445416.17.1 RTL Generation Tool Options for Directory Search
24455--------------------------------------------------------
24456
24457The '-IDIR' option specifies directories to search for machine
24458descriptions.  For example:
24459
24460
24461     genrecog -I/p1/abc/proc1 -I/p2/abcd/pro2 target.md
24462
24463
24464 Add the directory DIR to the head of the list of directories to be
24465searched for header files.  This can be used to override a system
24466machine definition file, substituting your own version, since these
24467directories are searched before the default machine description file
24468directories.  If you use more than one '-I' option, the directories are
24469scanned in left-to-right order; the standard default directory come
24470after.
24471
24472
24473File: gccint.info,  Node: Peephole Definitions,  Next: Insn Attributes,  Prev: Including Patterns,  Up: Machine Desc
24474
2447516.18 Machine-Specific Peephole Optimizers
24476==========================================
24477
24478In addition to instruction patterns the 'md' file may contain
24479definitions of machine-specific peephole optimizations.
24480
24481 The combiner does not notice certain peephole optimizations when the
24482data flow in the program does not suggest that it should try them.  For
24483example, sometimes two consecutive insns related in purpose can be
24484combined even though the second one does not appear to use a register
24485computed in the first one.  A machine-specific peephole optimizer can
24486detect such opportunities.
24487
24488 There are two forms of peephole definitions that may be used.  The
24489original 'define_peephole' is run at assembly output time to match insns
24490and substitute assembly text.  Use of 'define_peephole' is deprecated.
24491
24492 A newer 'define_peephole2' matches insns and substitutes new insns.
24493The 'peephole2' pass is run after register allocation but before
24494scheduling, which may result in much better code for targets that do
24495scheduling.
24496
24497* Menu:
24498
24499* define_peephole::     RTL to Text Peephole Optimizers
24500* define_peephole2::    RTL to RTL Peephole Optimizers
24501
24502
24503File: gccint.info,  Node: define_peephole,  Next: define_peephole2,  Up: Peephole Definitions
24504
2450516.18.1 RTL to Text Peephole Optimizers
24506---------------------------------------
24507
24508A definition looks like this:
24509
24510     (define_peephole
24511       [INSN-PATTERN-1
24512        INSN-PATTERN-2
24513        ...]
24514       "CONDITION"
24515       "TEMPLATE"
24516       "OPTIONAL-INSN-ATTRIBUTES")
24517
24518The last string operand may be omitted if you are not using any
24519machine-specific information in this machine description.  If present,
24520it must obey the same rules as in a 'define_insn'.
24521
24522 In this skeleton, INSN-PATTERN-1 and so on are patterns to match
24523consecutive insns.  The optimization applies to a sequence of insns when
24524INSN-PATTERN-1 matches the first one, INSN-PATTERN-2 matches the next,
24525and so on.
24526
24527 Each of the insns matched by a peephole must also match a
24528'define_insn'.  Peepholes are checked only at the last stage just before
24529code generation, and only optionally.  Therefore, any insn which would
24530match a peephole but no 'define_insn' will cause a crash in code
24531generation in an unoptimized compilation, or at various optimization
24532stages.
24533
24534 The operands of the insns are matched with 'match_operands',
24535'match_operator', and 'match_dup', as usual.  What is not usual is that
24536the operand numbers apply to all the insn patterns in the definition.
24537So, you can check for identical operands in two insns by using
24538'match_operand' in one insn and 'match_dup' in the other.
24539
24540 The operand constraints used in 'match_operand' patterns do not have
24541any direct effect on the applicability of the peephole, but they will be
24542validated afterward, so make sure your constraints are general enough to
24543apply whenever the peephole matches.  If the peephole matches but the
24544constraints are not satisfied, the compiler will crash.
24545
24546 It is safe to omit constraints in all the operands of the peephole; or
24547you can write constraints which serve as a double-check on the criteria
24548previously tested.
24549
24550 Once a sequence of insns matches the patterns, the CONDITION is
24551checked.  This is a C expression which makes the final decision whether
24552to perform the optimization (we do so if the expression is nonzero).  If
24553CONDITION is omitted (in other words, the string is empty) then the
24554optimization is applied to every sequence of insns that matches the
24555patterns.
24556
24557 The defined peephole optimizations are applied after register
24558allocation is complete.  Therefore, the peephole definition can check
24559which operands have ended up in which kinds of registers, just by
24560looking at the operands.
24561
24562 The way to refer to the operands in CONDITION is to write 'operands[I]'
24563for operand number I (as matched by '(match_operand I ...)').  Use the
24564variable 'insn' to refer to the last of the insns being matched; use
24565'prev_active_insn' to find the preceding insns.
24566
24567 When optimizing computations with intermediate results, you can use
24568CONDITION to match only when the intermediate results are not used
24569elsewhere.  Use the C expression 'dead_or_set_p (INSN, OP)', where INSN
24570is the insn in which you expect the value to be used for the last time
24571(from the value of 'insn', together with use of 'prev_nonnote_insn'),
24572and OP is the intermediate value (from 'operands[I]').
24573
24574 Applying the optimization means replacing the sequence of insns with
24575one new insn.  The TEMPLATE controls ultimate output of assembler code
24576for this combined insn.  It works exactly like the template of a
24577'define_insn'.  Operand numbers in this template are the same ones used
24578in matching the original sequence of insns.
24579
24580 The result of a defined peephole optimizer does not need to match any
24581of the insn patterns in the machine description; it does not even have
24582an opportunity to match them.  The peephole optimizer definition itself
24583serves as the insn pattern to control how the insn is output.
24584
24585 Defined peephole optimizers are run as assembler code is being output,
24586so the insns they produce are never combined or rearranged in any way.
24587
24588 Here is an example, taken from the 68000 machine description:
24589
24590     (define_peephole
24591       [(set (reg:SI 15) (plus:SI (reg:SI 15) (const_int 4)))
24592        (set (match_operand:DF 0 "register_operand" "=f")
24593             (match_operand:DF 1 "register_operand" "ad"))]
24594       "FP_REG_P (operands[0]) && ! FP_REG_P (operands[1])"
24595     {
24596       rtx xoperands[2];
24597       xoperands[1] = gen_rtx_REG (SImode, REGNO (operands[1]) + 1);
24598     #ifdef MOTOROLA
24599       output_asm_insn ("move.l %1,(sp)", xoperands);
24600       output_asm_insn ("move.l %1,-(sp)", operands);
24601       return "fmove.d (sp)+,%0";
24602     #else
24603       output_asm_insn ("movel %1,sp@", xoperands);
24604       output_asm_insn ("movel %1,sp@-", operands);
24605       return "fmoved sp@+,%0";
24606     #endif
24607     })
24608
24609 The effect of this optimization is to change
24610
24611     jbsr _foobar
24612     addql #4,sp
24613     movel d1,sp@-
24614     movel d0,sp@-
24615     fmoved sp@+,fp0
24616
24617into
24618
24619     jbsr _foobar
24620     movel d1,sp@
24621     movel d0,sp@-
24622     fmoved sp@+,fp0
24623
24624 INSN-PATTERN-1 and so on look _almost_ like the second operand of
24625'define_insn'.  There is one important difference: the second operand of
24626'define_insn' consists of one or more RTX's enclosed in square brackets.
24627Usually, there is only one: then the same action can be written as an
24628element of a 'define_peephole'.  But when there are multiple actions in
24629a 'define_insn', they are implicitly enclosed in a 'parallel'.  Then you
24630must explicitly write the 'parallel', and the square brackets within it,
24631in the 'define_peephole'.  Thus, if an insn pattern looks like this,
24632
24633     (define_insn "divmodsi4"
24634       [(set (match_operand:SI 0 "general_operand" "=d")
24635             (div:SI (match_operand:SI 1 "general_operand" "0")
24636                     (match_operand:SI 2 "general_operand" "dmsK")))
24637        (set (match_operand:SI 3 "general_operand" "=d")
24638             (mod:SI (match_dup 1) (match_dup 2)))]
24639       "TARGET_68020"
24640       "divsl%.l %2,%3:%0")
24641
24642then the way to mention this insn in a peephole is as follows:
24643
24644     (define_peephole
24645       [...
24646        (parallel
24647         [(set (match_operand:SI 0 "general_operand" "=d")
24648               (div:SI (match_operand:SI 1 "general_operand" "0")
24649                       (match_operand:SI 2 "general_operand" "dmsK")))
24650          (set (match_operand:SI 3 "general_operand" "=d")
24651               (mod:SI (match_dup 1) (match_dup 2)))])
24652        ...]
24653       ...)
24654
24655
24656File: gccint.info,  Node: define_peephole2,  Prev: define_peephole,  Up: Peephole Definitions
24657
2465816.18.2 RTL to RTL Peephole Optimizers
24659--------------------------------------
24660
24661The 'define_peephole2' definition tells the compiler how to substitute
24662one sequence of instructions for another sequence, what additional
24663scratch registers may be needed and what their lifetimes must be.
24664
24665     (define_peephole2
24666       [INSN-PATTERN-1
24667        INSN-PATTERN-2
24668        ...]
24669       "CONDITION"
24670       [NEW-INSN-PATTERN-1
24671        NEW-INSN-PATTERN-2
24672        ...]
24673       "PREPARATION-STATEMENTS")
24674
24675 The definition is almost identical to 'define_split' (*note Insn
24676Splitting::) except that the pattern to match is not a single
24677instruction, but a sequence of instructions.
24678
24679 It is possible to request additional scratch registers for use in the
24680output template.  If appropriate registers are not free, the pattern
24681will simply not match.
24682
24683 Scratch registers are requested with a 'match_scratch' pattern at the
24684top level of the input pattern.  The allocated register (initially) will
24685be dead at the point requested within the original sequence.  If the
24686scratch is used at more than a single point, a 'match_dup' pattern at
24687the top level of the input pattern marks the last position in the input
24688sequence at which the register must be available.
24689
24690 Here is an example from the IA-32 machine description:
24691
24692     (define_peephole2
24693       [(match_scratch:SI 2 "r")
24694        (parallel [(set (match_operand:SI 0 "register_operand" "")
24695                        (match_operator:SI 3 "arith_or_logical_operator"
24696                          [(match_dup 0)
24697                           (match_operand:SI 1 "memory_operand" "")]))
24698                   (clobber (reg:CC 17))])]
24699       "! optimize_size && ! TARGET_READ_MODIFY"
24700       [(set (match_dup 2) (match_dup 1))
24701        (parallel [(set (match_dup 0)
24702                        (match_op_dup 3 [(match_dup 0) (match_dup 2)]))
24703                   (clobber (reg:CC 17))])]
24704       "")
24705
24706This pattern tries to split a load from its use in the hopes that we'll
24707be able to schedule around the memory load latency.  It allocates a
24708single 'SImode' register of class 'GENERAL_REGS' ('"r"') that needs to
24709be live only at the point just before the arithmetic.
24710
24711 A real example requiring extended scratch lifetimes is harder to come
24712by, so here's a silly made-up example:
24713
24714     (define_peephole2
24715       [(match_scratch:SI 4 "r")
24716        (set (match_operand:SI 0 "" "") (match_operand:SI 1 "" ""))
24717        (set (match_operand:SI 2 "" "") (match_dup 1))
24718        (match_dup 4)
24719        (set (match_operand:SI 3 "" "") (match_dup 1))]
24720       "/* determine 1 does not overlap 0 and 2 */"
24721       [(set (match_dup 4) (match_dup 1))
24722        (set (match_dup 0) (match_dup 4))
24723        (set (match_dup 2) (match_dup 4))]
24724        (set (match_dup 3) (match_dup 4))]
24725       "")
24726
24727If we had not added the '(match_dup 4)' in the middle of the input
24728sequence, it might have been the case that the register we chose at the
24729beginning of the sequence is killed by the first or second 'set'.
24730
24731
24732File: gccint.info,  Node: Insn Attributes,  Next: Conditional Execution,  Prev: Peephole Definitions,  Up: Machine Desc
24733
2473416.19 Instruction Attributes
24735============================
24736
24737In addition to describing the instruction supported by the target
24738machine, the 'md' file also defines a group of "attributes" and a set of
24739values for each.  Every generated insn is assigned a value for each
24740attribute.  One possible attribute would be the effect that the insn has
24741on the machine's condition code.  This attribute can then be used by
24742'NOTICE_UPDATE_CC' to track the condition codes.
24743
24744* Menu:
24745
24746* Defining Attributes:: Specifying attributes and their values.
24747* Expressions::         Valid expressions for attribute values.
24748* Tagging Insns::       Assigning attribute values to insns.
24749* Attr Example::        An example of assigning attributes.
24750* Insn Lengths::        Computing the length of insns.
24751* Constant Attributes:: Defining attributes that are constant.
24752* Delay Slots::         Defining delay slots required for a machine.
24753* Processor pipeline description:: Specifying information for insn scheduling.
24754
24755
24756File: gccint.info,  Node: Defining Attributes,  Next: Expressions,  Up: Insn Attributes
24757
2475816.19.1 Defining Attributes and their Values
24759--------------------------------------------
24760
24761The 'define_attr' expression is used to define each attribute required
24762by the target machine.  It looks like:
24763
24764     (define_attr NAME LIST-OF-VALUES DEFAULT)
24765
24766 NAME is a string specifying the name of the attribute being defined.
24767Some attributes are used in a special way by the rest of the compiler.
24768The 'enabled' attribute can be used to conditionally enable or disable
24769insn alternatives (*note Disable Insn Alternatives::).  The 'predicable'
24770attribute, together with a suitable 'define_cond_exec' (*note
24771Conditional Execution::), can be used to automatically generate
24772conditional variants of instruction patterns.  The compiler internally
24773uses the names 'ce_enabled' and 'nonce_enabled', so they should not be
24774used elsewhere as alternative names.
24775
24776 LIST-OF-VALUES is either a string that specifies a comma-separated list
24777of values that can be assigned to the attribute, or a null string to
24778indicate that the attribute takes numeric values.
24779
24780 DEFAULT is an attribute expression that gives the value of this
24781attribute for insns that match patterns whose definition does not
24782include an explicit value for this attribute.  *Note Attr Example::, for
24783more information on the handling of defaults.  *Note Constant
24784Attributes::, for information on attributes that do not depend on any
24785particular insn.
24786
24787 For each defined attribute, a number of definitions are written to the
24788'insn-attr.h' file.  For cases where an explicit set of values is
24789specified for an attribute, the following are defined:
24790
24791   * A '#define' is written for the symbol 'HAVE_ATTR_NAME'.
24792
24793   * An enumerated class is defined for 'attr_NAME' with elements of the
24794     form 'UPPER-NAME_UPPER-VALUE' where the attribute name and value
24795     are first converted to uppercase.
24796
24797   * A function 'get_attr_NAME' is defined that is passed an insn and
24798     returns the attribute value for that insn.
24799
24800 For example, if the following is present in the 'md' file:
24801
24802     (define_attr "type" "branch,fp,load,store,arith" ...)
24803
24804the following lines will be written to the file 'insn-attr.h'.
24805
24806     #define HAVE_ATTR_type 1
24807     enum attr_type {TYPE_BRANCH, TYPE_FP, TYPE_LOAD,
24808                      TYPE_STORE, TYPE_ARITH};
24809     extern enum attr_type get_attr_type ();
24810
24811 If the attribute takes numeric values, no 'enum' type will be defined
24812and the function to obtain the attribute's value will return 'int'.
24813
24814 There are attributes which are tied to a specific meaning.  These
24815attributes are not free to use for other purposes:
24816
24817'length'
24818     The 'length' attribute is used to calculate the length of emitted
24819     code chunks.  This is especially important when verifying branch
24820     distances.  *Note Insn Lengths::.
24821
24822'enabled'
24823     The 'enabled' attribute can be defined to prevent certain
24824     alternatives of an insn definition from being used during code
24825     generation.  *Note Disable Insn Alternatives::.
24826
24827 For each of these special attributes, the corresponding
24828'HAVE_ATTR_NAME' '#define' is also written when the attribute is not
24829defined; in that case, it is defined as '0'.
24830
24831 Another way of defining an attribute is to use:
24832
24833     (define_enum_attr "ATTR" "ENUM" DEFAULT)
24834
24835 This works in just the same way as 'define_attr', except that the list
24836of values is taken from a separate enumeration called ENUM (*note
24837define_enum::).  This form allows you to use the same list of values for
24838several attributes without having to repeat the list each time.  For
24839example:
24840
24841     (define_enum "processor" [
24842       model_a
24843       model_b
24844       ...
24845     ])
24846     (define_enum_attr "arch" "processor"
24847       (const (symbol_ref "target_arch")))
24848     (define_enum_attr "tune" "processor"
24849       (const (symbol_ref "target_tune")))
24850
24851 defines the same attributes as:
24852
24853     (define_attr "arch" "model_a,model_b,..."
24854       (const (symbol_ref "target_arch")))
24855     (define_attr "tune" "model_a,model_b,..."
24856       (const (symbol_ref "target_tune")))
24857
24858 but without duplicating the processor list.  The second example defines
24859two separate C enums ('attr_arch' and 'attr_tune') whereas the first
24860defines a single C enum ('processor').
24861
24862
24863File: gccint.info,  Node: Expressions,  Next: Tagging Insns,  Prev: Defining Attributes,  Up: Insn Attributes
24864
2486516.19.2 Attribute Expressions
24866-----------------------------
24867
24868RTL expressions used to define attributes use the codes described above
24869plus a few specific to attribute definitions, to be discussed below.
24870Attribute value expressions must have one of the following forms:
24871
24872'(const_int I)'
24873     The integer I specifies the value of a numeric attribute.  I must
24874     be non-negative.
24875
24876     The value of a numeric attribute can be specified either with a
24877     'const_int', or as an integer represented as a string in
24878     'const_string', 'eq_attr' (see below), 'attr', 'symbol_ref', simple
24879     arithmetic expressions, and 'set_attr' overrides on specific
24880     instructions (*note Tagging Insns::).
24881
24882'(const_string VALUE)'
24883     The string VALUE specifies a constant attribute value.  If VALUE is
24884     specified as '"*"', it means that the default value of the
24885     attribute is to be used for the insn containing this expression.
24886     '"*"' obviously cannot be used in the DEFAULT expression of a
24887     'define_attr'.
24888
24889     If the attribute whose value is being specified is numeric, VALUE
24890     must be a string containing a non-negative integer (normally
24891     'const_int' would be used in this case).  Otherwise, it must
24892     contain one of the valid values for the attribute.
24893
24894'(if_then_else TEST TRUE-VALUE FALSE-VALUE)'
24895     TEST specifies an attribute test, whose format is defined below.
24896     The value of this expression is TRUE-VALUE if TEST is true,
24897     otherwise it is FALSE-VALUE.
24898
24899'(cond [TEST1 VALUE1 ...] DEFAULT)'
24900     The first operand of this expression is a vector containing an even
24901     number of expressions and consisting of pairs of TEST and VALUE
24902     expressions.  The value of the 'cond' expression is that of the
24903     VALUE corresponding to the first true TEST expression.  If none of
24904     the TEST expressions are true, the value of the 'cond' expression
24905     is that of the DEFAULT expression.
24906
24907 TEST expressions can have one of the following forms:
24908
24909'(const_int I)'
24910     This test is true if I is nonzero and false otherwise.
24911
24912'(not TEST)'
24913'(ior TEST1 TEST2)'
24914'(and TEST1 TEST2)'
24915     These tests are true if the indicated logical function is true.
24916
24917'(match_operand:M N PRED CONSTRAINTS)'
24918     This test is true if operand N of the insn whose attribute value is
24919     being determined has mode M (this part of the test is ignored if M
24920     is 'VOIDmode') and the function specified by the string PRED
24921     returns a nonzero value when passed operand N and mode M (this part
24922     of the test is ignored if PRED is the null string).
24923
24924     The CONSTRAINTS operand is ignored and should be the null string.
24925
24926'(match_test C-EXPR)'
24927     The test is true if C expression C-EXPR is true.  In non-constant
24928     attributes, C-EXPR has access to the following variables:
24929
24930     INSN
24931          The rtl instruction under test.
24932     WHICH_ALTERNATIVE
24933          The 'define_insn' alternative that INSN matches.  *Note Output
24934          Statement::.
24935     OPERANDS
24936          An array of INSN's rtl operands.
24937
24938     C-EXPR behaves like the condition in a C 'if' statement, so there
24939     is no need to explicitly convert the expression into a boolean 0 or
24940     1 value.  For example, the following two tests are equivalent:
24941
24942          (match_test "x & 2")
24943          (match_test "(x & 2) != 0")
24944
24945'(le ARITH1 ARITH2)'
24946'(leu ARITH1 ARITH2)'
24947'(lt ARITH1 ARITH2)'
24948'(ltu ARITH1 ARITH2)'
24949'(gt ARITH1 ARITH2)'
24950'(gtu ARITH1 ARITH2)'
24951'(ge ARITH1 ARITH2)'
24952'(geu ARITH1 ARITH2)'
24953'(ne ARITH1 ARITH2)'
24954'(eq ARITH1 ARITH2)'
24955     These tests are true if the indicated comparison of the two
24956     arithmetic expressions is true.  Arithmetic expressions are formed
24957     with 'plus', 'minus', 'mult', 'div', 'mod', 'abs', 'neg', 'and',
24958     'ior', 'xor', 'not', 'ashift', 'lshiftrt', and 'ashiftrt'
24959     expressions.
24960
24961     'const_int' and 'symbol_ref' are always valid terms (*note Insn
24962     Lengths::,for additional forms).  'symbol_ref' is a string denoting
24963     a C expression that yields an 'int' when evaluated by the
24964     'get_attr_...' routine.  It should normally be a global variable.
24965
24966'(eq_attr NAME VALUE)'
24967     NAME is a string specifying the name of an attribute.
24968
24969     VALUE is a string that is either a valid value for attribute NAME,
24970     a comma-separated list of values, or '!' followed by a value or
24971     list.  If VALUE does not begin with a '!', this test is true if the
24972     value of the NAME attribute of the current insn is in the list
24973     specified by VALUE.  If VALUE begins with a '!', this test is true
24974     if the attribute's value is _not_ in the specified list.
24975
24976     For example,
24977
24978          (eq_attr "type" "load,store")
24979
24980     is equivalent to
24981
24982          (ior (eq_attr "type" "load") (eq_attr "type" "store"))
24983
24984     If NAME specifies an attribute of 'alternative', it refers to the
24985     value of the compiler variable 'which_alternative' (*note Output
24986     Statement::) and the values must be small integers.  For example,
24987
24988          (eq_attr "alternative" "2,3")
24989
24990     is equivalent to
24991
24992          (ior (eq (symbol_ref "which_alternative") (const_int 2))
24993               (eq (symbol_ref "which_alternative") (const_int 3)))
24994
24995     Note that, for most attributes, an 'eq_attr' test is simplified in
24996     cases where the value of the attribute being tested is known for
24997     all insns matching a particular pattern.  This is by far the most
24998     common case.
24999
25000'(attr_flag NAME)'
25001     The value of an 'attr_flag' expression is true if the flag
25002     specified by NAME is true for the 'insn' currently being scheduled.
25003
25004     NAME is a string specifying one of a fixed set of flags to test.
25005     Test the flags 'forward' and 'backward' to determine the direction
25006     of a conditional branch.
25007
25008     This example describes a conditional branch delay slot which can be
25009     nullified for forward branches that are taken (annul-true) or for
25010     backward branches which are not taken (annul-false).
25011
25012          (define_delay (eq_attr "type" "cbranch")
25013            [(eq_attr "in_branch_delay" "true")
25014             (and (eq_attr "in_branch_delay" "true")
25015                  (attr_flag "forward"))
25016             (and (eq_attr "in_branch_delay" "true")
25017                  (attr_flag "backward"))])
25018
25019     The 'forward' and 'backward' flags are false if the current 'insn'
25020     being scheduled is not a conditional branch.
25021
25022     'attr_flag' is only used during delay slot scheduling and has no
25023     meaning to other passes of the compiler.
25024
25025'(attr NAME)'
25026     The value of another attribute is returned.  This is most useful
25027     for numeric attributes, as 'eq_attr' and 'attr_flag' produce more
25028     efficient code for non-numeric attributes.
25029
25030
25031File: gccint.info,  Node: Tagging Insns,  Next: Attr Example,  Prev: Expressions,  Up: Insn Attributes
25032
2503316.19.3 Assigning Attribute Values to Insns
25034-------------------------------------------
25035
25036The value assigned to an attribute of an insn is primarily determined by
25037which pattern is matched by that insn (or which 'define_peephole'
25038generated it).  Every 'define_insn' and 'define_peephole' can have an
25039optional last argument to specify the values of attributes for matching
25040insns.  The value of any attribute not specified in a particular insn is
25041set to the default value for that attribute, as specified in its
25042'define_attr'.  Extensive use of default values for attributes permits
25043the specification of the values for only one or two attributes in the
25044definition of most insn patterns, as seen in the example in the next
25045section.
25046
25047 The optional last argument of 'define_insn' and 'define_peephole' is a
25048vector of expressions, each of which defines the value for a single
25049attribute.  The most general way of assigning an attribute's value is to
25050use a 'set' expression whose first operand is an 'attr' expression
25051giving the name of the attribute being set.  The second operand of the
25052'set' is an attribute expression (*note Expressions::) giving the value
25053of the attribute.
25054
25055 When the attribute value depends on the 'alternative' attribute (i.e.,
25056which is the applicable alternative in the constraint of the insn), the
25057'set_attr_alternative' expression can be used.  It allows the
25058specification of a vector of attribute expressions, one for each
25059alternative.
25060
25061 When the generality of arbitrary attribute expressions is not required,
25062the simpler 'set_attr' expression can be used, which allows specifying a
25063string giving either a single attribute value or a list of attribute
25064values, one for each alternative.
25065
25066 The form of each of the above specifications is shown below.  In each
25067case, NAME is a string specifying the attribute to be set.
25068
25069'(set_attr NAME VALUE-STRING)'
25070     VALUE-STRING is either a string giving the desired attribute value,
25071     or a string containing a comma-separated list giving the values for
25072     succeeding alternatives.  The number of elements must match the
25073     number of alternatives in the constraint of the insn pattern.
25074
25075     Note that it may be useful to specify '*' for some alternative, in
25076     which case the attribute will assume its default value for insns
25077     matching that alternative.
25078
25079'(set_attr_alternative NAME [VALUE1 VALUE2 ...])'
25080     Depending on the alternative of the insn, the value will be one of
25081     the specified values.  This is a shorthand for using a 'cond' with
25082     tests on the 'alternative' attribute.
25083
25084'(set (attr NAME) VALUE)'
25085     The first operand of this 'set' must be the special RTL expression
25086     'attr', whose sole operand is a string giving the name of the
25087     attribute being set.  VALUE is the value of the attribute.
25088
25089 The following shows three different ways of representing the same
25090attribute value specification:
25091
25092     (set_attr "type" "load,store,arith")
25093
25094     (set_attr_alternative "type"
25095                           [(const_string "load") (const_string "store")
25096                            (const_string "arith")])
25097
25098     (set (attr "type")
25099          (cond [(eq_attr "alternative" "1") (const_string "load")
25100                 (eq_attr "alternative" "2") (const_string "store")]
25101                (const_string "arith")))
25102
25103 The 'define_asm_attributes' expression provides a mechanism to specify
25104the attributes assigned to insns produced from an 'asm' statement.  It
25105has the form:
25106
25107     (define_asm_attributes [ATTR-SETS])
25108
25109where ATTR-SETS is specified the same as for both the 'define_insn' and
25110the 'define_peephole' expressions.
25111
25112 These values will typically be the "worst case" attribute values.  For
25113example, they might indicate that the condition code will be clobbered.
25114
25115 A specification for a 'length' attribute is handled specially.  The way
25116to compute the length of an 'asm' insn is to multiply the length
25117specified in the expression 'define_asm_attributes' by the number of
25118machine instructions specified in the 'asm' statement, determined by
25119counting the number of semicolons and newlines in the string.
25120Therefore, the value of the 'length' attribute specified in a
25121'define_asm_attributes' should be the maximum possible length of a
25122single machine instruction.
25123
25124
25125File: gccint.info,  Node: Attr Example,  Next: Insn Lengths,  Prev: Tagging Insns,  Up: Insn Attributes
25126
2512716.19.4 Example of Attribute Specifications
25128-------------------------------------------
25129
25130The judicious use of defaulting is important in the efficient use of
25131insn attributes.  Typically, insns are divided into "types" and an
25132attribute, customarily called 'type', is used to represent this value.
25133This attribute is normally used only to define the default value for
25134other attributes.  An example will clarify this usage.
25135
25136 Assume we have a RISC machine with a condition code and in which only
25137full-word operations are performed in registers.  Let us assume that we
25138can divide all insns into loads, stores, (integer) arithmetic
25139operations, floating point operations, and branches.
25140
25141 Here we will concern ourselves with determining the effect of an insn
25142on the condition code and will limit ourselves to the following possible
25143effects: The condition code can be set unpredictably (clobbered), not be
25144changed, be set to agree with the results of the operation, or only
25145changed if the item previously set into the condition code has been
25146modified.
25147
25148 Here is part of a sample 'md' file for such a machine:
25149
25150     (define_attr "type" "load,store,arith,fp,branch" (const_string "arith"))
25151
25152     (define_attr "cc" "clobber,unchanged,set,change0"
25153                  (cond [(eq_attr "type" "load")
25154                             (const_string "change0")
25155                         (eq_attr "type" "store,branch")
25156                             (const_string "unchanged")
25157                         (eq_attr "type" "arith")
25158                             (if_then_else (match_operand:SI 0 "" "")
25159                                           (const_string "set")
25160                                           (const_string "clobber"))]
25161                        (const_string "clobber")))
25162
25163     (define_insn ""
25164       [(set (match_operand:SI 0 "general_operand" "=r,r,m")
25165             (match_operand:SI 1 "general_operand" "r,m,r"))]
25166       ""
25167       "@
25168        move %0,%1
25169        load %0,%1
25170        store %0,%1"
25171       [(set_attr "type" "arith,load,store")])
25172
25173 Note that we assume in the above example that arithmetic operations
25174performed on quantities smaller than a machine word clobber the
25175condition code since they will set the condition code to a value
25176corresponding to the full-word result.
25177
25178
25179File: gccint.info,  Node: Insn Lengths,  Next: Constant Attributes,  Prev: Attr Example,  Up: Insn Attributes
25180
2518116.19.5 Computing the Length of an Insn
25182---------------------------------------
25183
25184For many machines, multiple types of branch instructions are provided,
25185each for different length branch displacements.  In most cases, the
25186assembler will choose the correct instruction to use.  However, when the
25187assembler cannot do so, GCC can when a special attribute, the 'length'
25188attribute, is defined.  This attribute must be defined to have numeric
25189values by specifying a null string in its 'define_attr'.
25190
25191 In the case of the 'length' attribute, two additional forms of
25192arithmetic terms are allowed in test expressions:
25193
25194'(match_dup N)'
25195     This refers to the address of operand N of the current insn, which
25196     must be a 'label_ref'.
25197
25198'(pc)'
25199     This refers to the address of the _current_ insn.  It might have
25200     been more consistent with other usage to make this the address of
25201     the _next_ insn but this would be confusing because the length of
25202     the current insn is to be computed.
25203
25204 For normal insns, the length will be determined by value of the
25205'length' attribute.  In the case of 'addr_vec' and 'addr_diff_vec' insn
25206patterns, the length is computed as the number of vectors multiplied by
25207the size of each vector.
25208
25209 Lengths are measured in addressable storage units (bytes).
25210
25211 The following macros can be used to refine the length computation:
25212
25213'ADJUST_INSN_LENGTH (INSN, LENGTH)'
25214     If defined, modifies the length assigned to instruction INSN as a
25215     function of the context in which it is used.  LENGTH is an lvalue
25216     that contains the initially computed length of the insn and should
25217     be updated with the correct length of the insn.
25218
25219     This macro will normally not be required.  A case in which it is
25220     required is the ROMP.  On this machine, the size of an 'addr_vec'
25221     insn must be increased by two to compensate for the fact that
25222     alignment may be required.
25223
25224 The routine that returns 'get_attr_length' (the value of the 'length'
25225attribute) can be used by the output routine to determine the form of
25226the branch instruction to be written, as the example below illustrates.
25227
25228 As an example of the specification of variable-length branches,
25229consider the IBM 360.  If we adopt the convention that a register will
25230be set to the starting address of a function, we can jump to labels
25231within 4k of the start using a four-byte instruction.  Otherwise, we
25232need a six-byte sequence to load the address from memory and then branch
25233to it.
25234
25235 On such a machine, a pattern for a branch instruction might be
25236specified as follows:
25237
25238     (define_insn "jump"
25239       [(set (pc)
25240             (label_ref (match_operand 0 "" "")))]
25241       ""
25242     {
25243        return (get_attr_length (insn) == 4
25244                ? "b %l0" : "l r15,=a(%l0); br r15");
25245     }
25246       [(set (attr "length")
25247             (if_then_else (lt (match_dup 0) (const_int 4096))
25248                           (const_int 4)
25249                           (const_int 6)))])
25250
25251
25252File: gccint.info,  Node: Constant Attributes,  Next: Delay Slots,  Prev: Insn Lengths,  Up: Insn Attributes
25253
2525416.19.6 Constant Attributes
25255---------------------------
25256
25257A special form of 'define_attr', where the expression for the default
25258value is a 'const' expression, indicates an attribute that is constant
25259for a given run of the compiler.  Constant attributes may be used to
25260specify which variety of processor is used.  For example,
25261
25262     (define_attr "cpu" "m88100,m88110,m88000"
25263      (const
25264       (cond [(symbol_ref "TARGET_88100") (const_string "m88100")
25265              (symbol_ref "TARGET_88110") (const_string "m88110")]
25266             (const_string "m88000"))))
25267
25268     (define_attr "memory" "fast,slow"
25269      (const
25270       (if_then_else (symbol_ref "TARGET_FAST_MEM")
25271                     (const_string "fast")
25272                     (const_string "slow"))))
25273
25274 The routine generated for constant attributes has no parameters as it
25275does not depend on any particular insn.  RTL expressions used to define
25276the value of a constant attribute may use the 'symbol_ref' form, but may
25277not use either the 'match_operand' form or 'eq_attr' forms involving
25278insn attributes.
25279
25280
25281File: gccint.info,  Node: Delay Slots,  Next: Processor pipeline description,  Prev: Constant Attributes,  Up: Insn Attributes
25282
2528316.19.7 Delay Slot Scheduling
25284-----------------------------
25285
25286The insn attribute mechanism can be used to specify the requirements for
25287delay slots, if any, on a target machine.  An instruction is said to
25288require a "delay slot" if some instructions that are physically after
25289the instruction are executed as if they were located before it.  Classic
25290examples are branch and call instructions, which often execute the
25291following instruction before the branch or call is performed.
25292
25293 On some machines, conditional branch instructions can optionally
25294"annul" instructions in the delay slot.  This means that the instruction
25295will not be executed for certain branch outcomes.  Both instructions
25296that annul if the branch is true and instructions that annul if the
25297branch is false are supported.
25298
25299 Delay slot scheduling differs from instruction scheduling in that
25300determining whether an instruction needs a delay slot is dependent only
25301on the type of instruction being generated, not on data flow between the
25302instructions.  See the next section for a discussion of data-dependent
25303instruction scheduling.
25304
25305 The requirement of an insn needing one or more delay slots is indicated
25306via the 'define_delay' expression.  It has the following form:
25307
25308     (define_delay TEST
25309                   [DELAY-1 ANNUL-TRUE-1 ANNUL-FALSE-1
25310                    DELAY-2 ANNUL-TRUE-2 ANNUL-FALSE-2
25311                    ...])
25312
25313 TEST is an attribute test that indicates whether this 'define_delay'
25314applies to a particular insn.  If so, the number of required delay slots
25315is determined by the length of the vector specified as the second
25316argument.  An insn placed in delay slot N must satisfy attribute test
25317DELAY-N.  ANNUL-TRUE-N is an attribute test that specifies which insns
25318may be annulled if the branch is true.  Similarly, ANNUL-FALSE-N
25319specifies which insns in the delay slot may be annulled if the branch is
25320false.  If annulling is not supported for that delay slot, '(nil)'
25321should be coded.
25322
25323 For example, in the common case where branch and call insns require a
25324single delay slot, which may contain any insn other than a branch or
25325call, the following would be placed in the 'md' file:
25326
25327     (define_delay (eq_attr "type" "branch,call")
25328                   [(eq_attr "type" "!branch,call") (nil) (nil)])
25329
25330 Multiple 'define_delay' expressions may be specified.  In this case,
25331each such expression specifies different delay slot requirements and
25332there must be no insn for which tests in two 'define_delay' expressions
25333are both true.
25334
25335 For example, if we have a machine that requires one delay slot for
25336branches but two for calls, no delay slot can contain a branch or call
25337insn, and any valid insn in the delay slot for the branch can be
25338annulled if the branch is true, we might represent this as follows:
25339
25340     (define_delay (eq_attr "type" "branch")
25341        [(eq_attr "type" "!branch,call")
25342         (eq_attr "type" "!branch,call")
25343         (nil)])
25344
25345     (define_delay (eq_attr "type" "call")
25346                   [(eq_attr "type" "!branch,call") (nil) (nil)
25347                    (eq_attr "type" "!branch,call") (nil) (nil)])
25348
25349
25350File: gccint.info,  Node: Processor pipeline description,  Prev: Delay Slots,  Up: Insn Attributes
25351
2535216.19.8 Specifying processor pipeline description
25353-------------------------------------------------
25354
25355To achieve better performance, most modern processors (super-pipelined,
25356superscalar RISC, and VLIW processors) have many "functional units" on
25357which several instructions can be executed simultaneously.  An
25358instruction starts execution if its issue conditions are satisfied.  If
25359not, the instruction is stalled until its conditions are satisfied.
25360Such "interlock (pipeline) delay" causes interruption of the fetching of
25361successor instructions (or demands nop instructions, e.g. for some MIPS
25362processors).
25363
25364 There are two major kinds of interlock delays in modern processors.
25365The first one is a data dependence delay determining "instruction
25366latency time".  The instruction execution is not started until all
25367source data have been evaluated by prior instructions (there are more
25368complex cases when the instruction execution starts even when the data
25369are not available but will be ready in given time after the instruction
25370execution start).  Taking the data dependence delays into account is
25371simple.  The data dependence (true, output, and anti-dependence) delay
25372between two instructions is given by a constant.  In most cases this
25373approach is adequate.  The second kind of interlock delays is a
25374reservation delay.  The reservation delay means that two instructions
25375under execution will be in need of shared processors resources, i.e.
25376buses, internal registers, and/or functional units, which are reserved
25377for some time.  Taking this kind of delay into account is complex
25378especially for modern RISC processors.
25379
25380 The task of exploiting more processor parallelism is solved by an
25381instruction scheduler.  For a better solution to this problem, the
25382instruction scheduler has to have an adequate description of the
25383processor parallelism (or "pipeline description").  GCC machine
25384descriptions describe processor parallelism and functional unit
25385reservations for groups of instructions with the aid of "regular
25386expressions".
25387
25388 The GCC instruction scheduler uses a "pipeline hazard recognizer" to
25389figure out the possibility of the instruction issue by the processor on
25390a given simulated processor cycle.  The pipeline hazard recognizer is
25391automatically generated from the processor pipeline description.  The
25392pipeline hazard recognizer generated from the machine description is
25393based on a deterministic finite state automaton (DFA): the instruction
25394issue is possible if there is a transition from one automaton state to
25395another one.  This algorithm is very fast, and furthermore, its speed is
25396not dependent on processor complexity(1).
25397
25398 The rest of this section describes the directives that constitute an
25399automaton-based processor pipeline description.  The order of these
25400constructions within the machine description file is not important.
25401
25402 The following optional construction describes names of automata
25403generated and used for the pipeline hazards recognition.  Sometimes the
25404generated finite state automaton used by the pipeline hazard recognizer
25405is large.  If we use more than one automaton and bind functional units
25406to the automata, the total size of the automata is usually less than the
25407size of the single automaton.  If there is no one such construction,
25408only one finite state automaton is generated.
25409
25410     (define_automaton AUTOMATA-NAMES)
25411
25412 AUTOMATA-NAMES is a string giving names of the automata.  The names are
25413separated by commas.  All the automata should have unique names.  The
25414automaton name is used in the constructions 'define_cpu_unit' and
25415'define_query_cpu_unit'.
25416
25417 Each processor functional unit used in the description of instruction
25418reservations should be described by the following construction.
25419
25420     (define_cpu_unit UNIT-NAMES [AUTOMATON-NAME])
25421
25422 UNIT-NAMES is a string giving the names of the functional units
25423separated by commas.  Don't use name 'nothing', it is reserved for other
25424goals.
25425
25426 AUTOMATON-NAME is a string giving the name of the automaton with which
25427the unit is bound.  The automaton should be described in construction
25428'define_automaton'.  You should give "automaton-name", if there is a
25429defined automaton.
25430
25431 The assignment of units to automata are constrained by the uses of the
25432units in insn reservations.  The most important constraint is: if a unit
25433reservation is present on a particular cycle of an alternative for an
25434insn reservation, then some unit from the same automaton must be present
25435on the same cycle for the other alternatives of the insn reservation.
25436The rest of the constraints are mentioned in the description of the
25437subsequent constructions.
25438
25439 The following construction describes CPU functional units analogously
25440to 'define_cpu_unit'.  The reservation of such units can be queried for
25441an automaton state.  The instruction scheduler never queries reservation
25442of functional units for given automaton state.  So as a rule, you don't
25443need this construction.  This construction could be used for future code
25444generation goals (e.g. to generate VLIW insn templates).
25445
25446     (define_query_cpu_unit UNIT-NAMES [AUTOMATON-NAME])
25447
25448 UNIT-NAMES is a string giving names of the functional units separated
25449by commas.
25450
25451 AUTOMATON-NAME is a string giving the name of the automaton with which
25452the unit is bound.
25453
25454 The following construction is the major one to describe pipeline
25455characteristics of an instruction.
25456
25457     (define_insn_reservation INSN-NAME DEFAULT_LATENCY
25458                              CONDITION REGEXP)
25459
25460 DEFAULT_LATENCY is a number giving latency time of the instruction.
25461There is an important difference between the old description and the
25462automaton based pipeline description.  The latency time is used for all
25463dependencies when we use the old description.  In the automaton based
25464pipeline description, the given latency time is only used for true
25465dependencies.  The cost of anti-dependencies is always zero and the cost
25466of output dependencies is the difference between latency times of the
25467producing and consuming insns (if the difference is negative, the cost
25468is considered to be zero).  You can always change the default costs for
25469any description by using the target hook 'TARGET_SCHED_ADJUST_COST'
25470(*note Scheduling::).
25471
25472 INSN-NAME is a string giving the internal name of the insn.  The
25473internal names are used in constructions 'define_bypass' and in the
25474automaton description file generated for debugging.  The internal name
25475has nothing in common with the names in 'define_insn'.  It is a good
25476practice to use insn classes described in the processor manual.
25477
25478 CONDITION defines what RTL insns are described by this construction.
25479You should remember that you will be in trouble if CONDITION for two or
25480more different 'define_insn_reservation' constructions is TRUE for an
25481insn.  In this case what reservation will be used for the insn is not
25482defined.  Such cases are not checked during generation of the pipeline
25483hazards recognizer because in general recognizing that two conditions
25484may have the same value is quite difficult (especially if the conditions
25485contain 'symbol_ref').  It is also not checked during the pipeline
25486hazard recognizer work because it would slow down the recognizer
25487considerably.
25488
25489 REGEXP is a string describing the reservation of the cpu's functional
25490units by the instruction.  The reservations are described by a regular
25491expression according to the following syntax:
25492
25493            regexp = regexp "," oneof
25494                   | oneof
25495
25496            oneof = oneof "|" allof
25497                  | allof
25498
25499            allof = allof "+" repeat
25500                  | repeat
25501
25502            repeat = element "*" number
25503                   | element
25504
25505            element = cpu_function_unit_name
25506                    | reservation_name
25507                    | result_name
25508                    | "nothing"
25509                    | "(" regexp ")"
25510
25511   * ',' is used for describing the start of the next cycle in the
25512     reservation.
25513
25514   * '|' is used for describing a reservation described by the first
25515     regular expression *or* a reservation described by the second
25516     regular expression *or* etc.
25517
25518   * '+' is used for describing a reservation described by the first
25519     regular expression *and* a reservation described by the second
25520     regular expression *and* etc.
25521
25522   * '*' is used for convenience and simply means a sequence in which
25523     the regular expression are repeated NUMBER times with cycle
25524     advancing (see ',').
25525
25526   * 'cpu_function_unit_name' denotes reservation of the named
25527     functional unit.
25528
25529   * 'reservation_name' -- see description of construction
25530     'define_reservation'.
25531
25532   * 'nothing' denotes no unit reservations.
25533
25534 Sometimes unit reservations for different insns contain common parts.
25535In such case, you can simplify the pipeline description by describing
25536the common part by the following construction
25537
25538     (define_reservation RESERVATION-NAME REGEXP)
25539
25540 RESERVATION-NAME is a string giving name of REGEXP.  Functional unit
25541names and reservation names are in the same name space.  So the
25542reservation names should be different from the functional unit names and
25543can not be the reserved name 'nothing'.
25544
25545 The following construction is used to describe exceptions in the
25546latency time for given instruction pair.  This is so called bypasses.
25547
25548     (define_bypass NUMBER OUT_INSN_NAMES IN_INSN_NAMES
25549                    [GUARD])
25550
25551 NUMBER defines when the result generated by the instructions given in
25552string OUT_INSN_NAMES will be ready for the instructions given in string
25553IN_INSN_NAMES.  Each of these strings is a comma-separated list of
25554filename-style globs and they refer to the names of
25555'define_insn_reservation's.  For example:
25556     (define_bypass 1 "cpu1_load_*, cpu1_store_*" "cpu1_load_*")
25557 defines a bypass between instructions that start with 'cpu1_load_' or
25558'cpu1_store_' and those that start with 'cpu1_load_'.
25559
25560 GUARD is an optional string giving the name of a C function which
25561defines an additional guard for the bypass.  The function will get the
25562two insns as parameters.  If the function returns zero the bypass will
25563be ignored for this case.  The additional guard is necessary to
25564recognize complicated bypasses, e.g. when the consumer is only an
25565address of insn 'store' (not a stored value).
25566
25567 If there are more one bypass with the same output and input insns, the
25568chosen bypass is the first bypass with a guard in description whose
25569guard function returns nonzero.  If there is no such bypass, then bypass
25570without the guard function is chosen.
25571
25572 The following five constructions are usually used to describe VLIW
25573processors, or more precisely, to describe a placement of small
25574instructions into VLIW instruction slots.  They can be used for RISC
25575processors, too.
25576
25577     (exclusion_set UNIT-NAMES UNIT-NAMES)
25578     (presence_set UNIT-NAMES PATTERNS)
25579     (final_presence_set UNIT-NAMES PATTERNS)
25580     (absence_set UNIT-NAMES PATTERNS)
25581     (final_absence_set UNIT-NAMES PATTERNS)
25582
25583 UNIT-NAMES is a string giving names of functional units separated by
25584commas.
25585
25586 PATTERNS is a string giving patterns of functional units separated by
25587comma.  Currently pattern is one unit or units separated by
25588white-spaces.
25589
25590 The first construction ('exclusion_set') means that each functional
25591unit in the first string can not be reserved simultaneously with a unit
25592whose name is in the second string and vice versa.  For example, the
25593construction is useful for describing processors (e.g. some SPARC
25594processors) with a fully pipelined floating point functional unit which
25595can execute simultaneously only single floating point insns or only
25596double floating point insns.
25597
25598 The second construction ('presence_set') means that each functional
25599unit in the first string can not be reserved unless at least one of
25600pattern of units whose names are in the second string is reserved.  This
25601is an asymmetric relation.  For example, it is useful for description
25602that VLIW 'slot1' is reserved after 'slot0' reservation.  We could
25603describe it by the following construction
25604
25605     (presence_set "slot1" "slot0")
25606
25607 Or 'slot1' is reserved only after 'slot0' and unit 'b0' reservation.
25608In this case we could write
25609
25610     (presence_set "slot1" "slot0 b0")
25611
25612 The third construction ('final_presence_set') is analogous to
25613'presence_set'.  The difference between them is when checking is done.
25614When an instruction is issued in given automaton state reflecting all
25615current and planned unit reservations, the automaton state is changed.
25616The first state is a source state, the second one is a result state.
25617Checking for 'presence_set' is done on the source state reservation,
25618checking for 'final_presence_set' is done on the result reservation.
25619This construction is useful to describe a reservation which is actually
25620two subsequent reservations.  For example, if we use
25621
25622     (presence_set "slot1" "slot0")
25623
25624 the following insn will be never issued (because 'slot1' requires
25625'slot0' which is absent in the source state).
25626
25627     (define_reservation "insn_and_nop" "slot0 + slot1")
25628
25629 but it can be issued if we use analogous 'final_presence_set'.
25630
25631 The forth construction ('absence_set') means that each functional unit
25632in the first string can be reserved only if each pattern of units whose
25633names are in the second string is not reserved.  This is an asymmetric
25634relation (actually 'exclusion_set' is analogous to this one but it is
25635symmetric).  For example it might be useful in a VLIW description to say
25636that 'slot0' cannot be reserved after either 'slot1' or 'slot2' have
25637been reserved.  This can be described as:
25638
25639     (absence_set "slot0" "slot1, slot2")
25640
25641 Or 'slot2' can not be reserved if 'slot0' and unit 'b0' are reserved or
25642'slot1' and unit 'b1' are reserved.  In this case we could write
25643
25644     (absence_set "slot2" "slot0 b0, slot1 b1")
25645
25646 All functional units mentioned in a set should belong to the same
25647automaton.
25648
25649 The last construction ('final_absence_set') is analogous to
25650'absence_set' but checking is done on the result (state) reservation.
25651See comments for 'final_presence_set'.
25652
25653 You can control the generator of the pipeline hazard recognizer with
25654the following construction.
25655
25656     (automata_option OPTIONS)
25657
25658 OPTIONS is a string giving options which affect the generated code.
25659Currently there are the following options:
25660
25661   * "no-minimization" makes no minimization of the automaton.  This is
25662     only worth to do when we are debugging the description and need to
25663     look more accurately at reservations of states.
25664
25665   * "time" means printing time statistics about the generation of
25666     automata.
25667
25668   * "stats" means printing statistics about the generated automata such
25669     as the number of DFA states, NDFA states and arcs.
25670
25671   * "v" means a generation of the file describing the result automata.
25672     The file has suffix '.dfa' and can be used for the description
25673     verification and debugging.
25674
25675   * "w" means a generation of warning instead of error for non-critical
25676     errors.
25677
25678   * "no-comb-vect" prevents the automaton generator from generating two
25679     data structures and comparing them for space efficiency.  Using a
25680     comb vector to represent transitions may be better, but it can be
25681     very expensive to construct.  This option is useful if the build
25682     process spends an unacceptably long time in genautomata.
25683
25684   * "ndfa" makes nondeterministic finite state automata.  This affects
25685     the treatment of operator '|' in the regular expressions.  The
25686     usual treatment of the operator is to try the first alternative
25687     and, if the reservation is not possible, the second alternative.
25688     The nondeterministic treatment means trying all alternatives, some
25689     of them may be rejected by reservations in the subsequent insns.
25690
25691   * "collapse-ndfa" modifies the behaviour of the generator when
25692     producing an automaton.  An additional state transition to collapse
25693     a nondeterministic NDFA state to a deterministic DFA state is
25694     generated.  It can be triggered by passing 'const0_rtx' to
25695     state_transition.  In such an automaton, cycle advance transitions
25696     are available only for these collapsed states.  This option is
25697     useful for ports that want to use the 'ndfa' option, but also want
25698     to use 'define_query_cpu_unit' to assign units to insns issued in a
25699     cycle.
25700
25701   * "progress" means output of a progress bar showing how many states
25702     were generated so far for automaton being processed.  This is
25703     useful during debugging a DFA description.  If you see too many
25704     generated states, you could interrupt the generator of the pipeline
25705     hazard recognizer and try to figure out a reason for generation of
25706     the huge automaton.
25707
25708 As an example, consider a superscalar RISC machine which can issue
25709three insns (two integer insns and one floating point insn) on the cycle
25710but can finish only two insns.  To describe this, we define the
25711following functional units.
25712
25713     (define_cpu_unit "i0_pipeline, i1_pipeline, f_pipeline")
25714     (define_cpu_unit "port0, port1")
25715
25716 All simple integer insns can be executed in any integer pipeline and
25717their result is ready in two cycles.  The simple integer insns are
25718issued into the first pipeline unless it is reserved, otherwise they are
25719issued into the second pipeline.  Integer division and multiplication
25720insns can be executed only in the second integer pipeline and their
25721results are ready correspondingly in 8 and 4 cycles.  The integer
25722division is not pipelined, i.e. the subsequent integer division insn can
25723not be issued until the current division insn finished.  Floating point
25724insns are fully pipelined and their results are ready in 3 cycles.
25725Where the result of a floating point insn is used by an integer insn, an
25726additional delay of one cycle is incurred.  To describe all of this we
25727could specify
25728
25729     (define_cpu_unit "div")
25730
25731     (define_insn_reservation "simple" 2 (eq_attr "type" "int")
25732                              "(i0_pipeline | i1_pipeline), (port0 | port1)")
25733
25734     (define_insn_reservation "mult" 4 (eq_attr "type" "mult")
25735                              "i1_pipeline, nothing*2, (port0 | port1)")
25736
25737     (define_insn_reservation "div" 8 (eq_attr "type" "div")
25738                              "i1_pipeline, div*7, div + (port0 | port1)")
25739
25740     (define_insn_reservation "float" 3 (eq_attr "type" "float")
25741                              "f_pipeline, nothing, (port0 | port1))
25742
25743     (define_bypass 4 "float" "simple,mult,div")
25744
25745 To simplify the description we could describe the following reservation
25746
25747     (define_reservation "finish" "port0|port1")
25748
25749 and use it in all 'define_insn_reservation' as in the following
25750construction
25751
25752     (define_insn_reservation "simple" 2 (eq_attr "type" "int")
25753                              "(i0_pipeline | i1_pipeline), finish")
25754
25755   ---------- Footnotes ----------
25756
25757   (1) However, the size of the automaton depends on processor
25758complexity.  To limit this effect, machine descriptions can split
25759orthogonal parts of the machine description among several automata: but
25760then, since each of these must be stepped independently, this does cause
25761a small decrease in the algorithm's performance.
25762
25763
25764File: gccint.info,  Node: Conditional Execution,  Next: Define Subst,  Prev: Insn Attributes,  Up: Machine Desc
25765
2576616.20 Conditional Execution
25767===========================
25768
25769A number of architectures provide for some form of conditional
25770execution, or predication.  The hallmark of this feature is the ability
25771to nullify most of the instructions in the instruction set.  When the
25772instruction set is large and not entirely symmetric, it can be quite
25773tedious to describe these forms directly in the '.md' file.  An
25774alternative is the 'define_cond_exec' template.
25775
25776     (define_cond_exec
25777       [PREDICATE-PATTERN]
25778       "CONDITION"
25779       "OUTPUT-TEMPLATE")
25780
25781 PREDICATE-PATTERN is the condition that must be true for the insn to be
25782executed at runtime and should match a relational operator.  One can use
25783'match_operator' to match several relational operators at once.  Any
25784'match_operand' operands must have no more than one alternative.
25785
25786 CONDITION is a C expression that must be true for the generated pattern
25787to match.
25788
25789 OUTPUT-TEMPLATE is a string similar to the 'define_insn' output
25790template (*note Output Template::), except that the '*' and '@' special
25791cases do not apply.  This is only useful if the assembly text for the
25792predicate is a simple prefix to the main insn.  In order to handle the
25793general case, there is a global variable 'current_insn_predicate' that
25794will contain the entire predicate if the current insn is predicated, and
25795will otherwise be 'NULL'.
25796
25797 When 'define_cond_exec' is used, an implicit reference to the
25798'predicable' instruction attribute is made.  *Note Insn Attributes::.
25799This attribute must be a boolean (i.e. have exactly two elements in its
25800LIST-OF-VALUES), with the possible values being 'no' and 'yes'.  The
25801default and all uses in the insns must be a simple constant, not a
25802complex expressions.  It may, however, depend on the alternative, by
25803using a comma-separated list of values.  If that is the case, the port
25804should also define an 'enabled' attribute (*note Disable Insn
25805Alternatives::), which should also allow only 'no' and 'yes' as its
25806values.
25807
25808 For each 'define_insn' for which the 'predicable' attribute is true, a
25809new 'define_insn' pattern will be generated that matches a predicated
25810version of the instruction.  For example,
25811
25812     (define_insn "addsi"
25813       [(set (match_operand:SI 0 "register_operand" "r")
25814             (plus:SI (match_operand:SI 1 "register_operand" "r")
25815                      (match_operand:SI 2 "register_operand" "r")))]
25816       "TEST1"
25817       "add %2,%1,%0")
25818
25819     (define_cond_exec
25820       [(ne (match_operand:CC 0 "register_operand" "c")
25821            (const_int 0))]
25822       "TEST2"
25823       "(%0)")
25824
25825generates a new pattern
25826
25827     (define_insn ""
25828       [(cond_exec
25829          (ne (match_operand:CC 3 "register_operand" "c") (const_int 0))
25830          (set (match_operand:SI 0 "register_operand" "r")
25831               (plus:SI (match_operand:SI 1 "register_operand" "r")
25832                        (match_operand:SI 2 "register_operand" "r"))))]
25833       "(TEST2) && (TEST1)"
25834       "(%3) add %2,%1,%0")
25835
25836
25837File: gccint.info,  Node: Define Subst,  Next: Constant Definitions,  Prev: Conditional Execution,  Up: Machine Desc
25838
2583916.21 RTL Templates Transformations
25840===================================
25841
25842For some hardware architectures there are common cases when the RTL
25843templates for the instructions can be derived from the other RTL
25844templates using simple transformations.  E.g., 'i386.md' contains an RTL
25845template for the ordinary 'sub' instruction-- '*subsi_1', and for the
25846'sub' instruction with subsequent zero-extension--'*subsi_1_zext'.  Such
25847cases can be easily implemented by a single meta-template capable of
25848generating a modified case based on the initial one:
25849
25850     (define_subst "NAME"
25851       [INPUT-TEMPLATE]
25852       "CONDITION"
25853       [OUTPUT-TEMPLATE])
25854 INPUT-TEMPLATE is a pattern describing the source RTL template, which
25855will be transformed.
25856
25857 CONDITION is a C expression that is conjunct with the condition from
25858the input-template to generate a condition to be used in the
25859output-template.
25860
25861 OUTPUT-TEMPLATE is a pattern that will be used in the resulting
25862template.
25863
25864 'define_subst' mechanism is tightly coupled with the notion of the
25865subst attribute (*note Subst Iterators::).  The use of 'define_subst' is
25866triggered by a reference to a subst attribute in the transforming RTL
25867template.  This reference initiates duplication of the source RTL
25868template and substitution of the attributes with their values.  The
25869source RTL template is left unchanged, while the copy is transformed by
25870'define_subst'.  This transformation can fail in the case when the
25871source RTL template is not matched against the input-template of the
25872'define_subst'.  In such case the copy is deleted.
25873
25874 'define_subst' can be used only in 'define_insn' and 'define_expand',
25875it cannot be used in other expressions (e.g.  in
25876'define_insn_and_split').
25877
25878* Menu:
25879
25880* Define Subst Example::	    Example of 'define_subst' work.
25881* Define Subst Pattern Matching::   Process of template comparison.
25882* Define Subst Output Template::    Generation of output template.
25883
25884
25885File: gccint.info,  Node: Define Subst Example,  Next: Define Subst Pattern Matching,  Up: Define Subst
25886
2588716.21.1 'define_subst' Example
25888------------------------------
25889
25890To illustrate how 'define_subst' works, let us examine a simple template
25891transformation.
25892
25893 Suppose there are two kinds of instructions: one that touches flags and
25894the other that does not.  The instructions of the second type could be
25895generated with the following 'define_subst':
25896
25897     (define_subst "add_clobber_subst"
25898       [(set (match_operand:SI 0 "" "")
25899             (match_operand:SI 1 "" ""))]
25900       ""
25901       [(set (match_dup 0)
25902             (match_dup 1))
25903        (clobber (reg:CC FLAGS_REG))]
25904
25905 This 'define_subst' can be applied to any RTL pattern containing 'set'
25906of mode SI and generates a copy with clobber when it is applied.
25907
25908 Assume there is an RTL template for a 'max' instruction to be used in
25909'define_subst' mentioned above:
25910
25911     (define_insn "maxsi"
25912       [(set (match_operand:SI 0 "register_operand" "=r")
25913             (max:SI
25914               (match_operand:SI 1 "register_operand" "r")
25915               (match_operand:SI 2 "register_operand" "r")))]
25916       ""
25917       "max\t{%2, %1, %0|%0, %1, %2}"
25918      [...])
25919
25920 To mark the RTL template for 'define_subst' application,
25921subst-attributes are used.  They should be declared in advance:
25922
25923     (define_subst_attr "add_clobber_name" "add_clobber_subst" "_noclobber" "_clobber")
25924
25925 Here 'add_clobber_name' is the attribute name, 'add_clobber_subst' is
25926the name of the corresponding 'define_subst', the third argument
25927('_noclobber') is the attribute value that would be substituted into the
25928unchanged version of the source RTL template, and the last argument
25929('_clobber') is the value that would be substituted into the second,
25930transformed, version of the RTL template.
25931
25932 Once the subst-attribute has been defined, it should be used in RTL
25933templates which need to be processed by the 'define_subst'.  So, the
25934original RTL template should be changed:
25935
25936     (define_insn "maxsi<add_clobber_name>"
25937       [(set (match_operand:SI 0 "register_operand" "=r")
25938             (max:SI
25939               (match_operand:SI 1 "register_operand" "r")
25940               (match_operand:SI 2 "register_operand" "r")))]
25941       ""
25942       "max\t{%2, %1, %0|%0, %1, %2}"
25943      [...])
25944
25945 The result of the 'define_subst' usage would look like the following:
25946
25947     (define_insn "maxsi_noclobber"
25948       [(set (match_operand:SI 0 "register_operand" "=r")
25949             (max:SI
25950               (match_operand:SI 1 "register_operand" "r")
25951               (match_operand:SI 2 "register_operand" "r")))]
25952       ""
25953       "max\t{%2, %1, %0|%0, %1, %2}"
25954      [...])
25955     (define_insn "maxsi_clobber"
25956       [(set (match_operand:SI 0 "register_operand" "=r")
25957             (max:SI
25958               (match_operand:SI 1 "register_operand" "r")
25959               (match_operand:SI 2 "register_operand" "r")))
25960        (clobber (reg:CC FLAGS_REG))]
25961       ""
25962       "max\t{%2, %1, %0|%0, %1, %2}"
25963      [...])
25964
25965
25966File: gccint.info,  Node: Define Subst Pattern Matching,  Next: Define Subst Output Template,  Prev: Define Subst Example,  Up: Define Subst
25967
2596816.21.2 Pattern Matching in 'define_subst'
25969------------------------------------------
25970
25971All expressions, allowed in 'define_insn' or 'define_expand', are
25972allowed in the input-template of 'define_subst', except 'match_par_dup',
25973'match_scratch', 'match_parallel'.  The meanings of expressions in the
25974input-template were changed:
25975
25976 'match_operand' matches any expression (possibly, a subtree in
25977RTL-template), if modes of the 'match_operand' and this expression are
25978the same, or mode of the 'match_operand' is 'VOIDmode', or this
25979expression is 'match_dup', 'match_op_dup'.  If the expression is
25980'match_operand' too, and predicate of 'match_operand' from the input
25981pattern is not empty, then the predicates are compared.  That can be
25982used for more accurate filtering of accepted RTL-templates.
25983
25984 'match_operator' matches common operators (like 'plus', 'minus'),
25985'unspec', 'unspec_volatile' operators and 'match_operator's from the
25986original pattern if the modes match and 'match_operator' from the input
25987pattern has the same number of operands as the operator from the
25988original pattern.
25989
25990
25991File: gccint.info,  Node: Define Subst Output Template,  Prev: Define Subst Pattern Matching,  Up: Define Subst
25992
2599316.21.3 Generation of output template in 'define_subst'
25994-------------------------------------------------------
25995
25996If all necessary checks for 'define_subst' application pass, a new
25997RTL-pattern, based on the output-template, is created to replace the old
25998template.  Like in input-patterns, meanings of some RTL expressions are
25999changed when they are used in output-patterns of a 'define_subst'.
26000Thus, 'match_dup' is used for copying the whole expression from the
26001original pattern, which matched corresponding 'match_operand' from the
26002input pattern.
26003
26004 'match_dup N' is used in the output template to be replaced with the
26005expression from the original pattern, which matched 'match_operand N'
26006from the input pattern.  As a consequence, 'match_dup' cannot be used to
26007point to 'match_operand's from the output pattern, it should always
26008refer to a 'match_operand' from the input pattern.
26009
26010 In the output template one can refer to the expressions from the
26011original pattern and create new ones.  For instance, some operands could
26012be added by means of standard 'match_operand'.
26013
26014 After replacing 'match_dup' with some RTL-subtree from the original
26015pattern, it could happen that several 'match_operand's in the output
26016pattern have the same indexes.  It is unknown, how many and what indexes
26017would be used in the expression which would replace 'match_dup', so such
26018conflicts in indexes are inevitable.  To overcome this issue,
26019'match_operands' and 'match_operators', which were introduced into the
26020output pattern, are renumerated when all 'match_dup's are replaced.
26021
26022 Number of alternatives in 'match_operand's introduced into the output
26023template 'M' could differ from the number of alternatives in the
26024original pattern 'N', so in the resultant pattern there would be 'N*M'
26025alternatives.  Thus, constraints from the original pattern would be
26026duplicated 'N' times, constraints from the output pattern would be
26027duplicated 'M' times, producing all possible combinations.
26028
26029
26030File: gccint.info,  Node: Constant Definitions,  Next: Iterators,  Prev: Define Subst,  Up: Machine Desc
26031
2603216.22 Constant Definitions
26033==========================
26034
26035Using literal constants inside instruction patterns reduces legibility
26036and can be a maintenance problem.
26037
26038 To overcome this problem, you may use the 'define_constants'
26039expression.  It contains a vector of name-value pairs.  From that point
26040on, wherever any of the names appears in the MD file, it is as if the
26041corresponding value had been written instead.  You may use
26042'define_constants' multiple times; each appearance adds more constants
26043to the table.  It is an error to redefine a constant with a different
26044value.
26045
26046 To come back to the a29k load multiple example, instead of
26047
26048     (define_insn ""
26049       [(match_parallel 0 "load_multiple_operation"
26050          [(set (match_operand:SI 1 "gpc_reg_operand" "=r")
26051                (match_operand:SI 2 "memory_operand" "m"))
26052           (use (reg:SI 179))
26053           (clobber (reg:SI 179))])]
26054       ""
26055       "loadm 0,0,%1,%2")
26056
26057 You could write:
26058
26059     (define_constants [
26060         (R_BP 177)
26061         (R_FC 178)
26062         (R_CR 179)
26063         (R_Q  180)
26064     ])
26065
26066     (define_insn ""
26067       [(match_parallel 0 "load_multiple_operation"
26068          [(set (match_operand:SI 1 "gpc_reg_operand" "=r")
26069                (match_operand:SI 2 "memory_operand" "m"))
26070           (use (reg:SI R_CR))
26071           (clobber (reg:SI R_CR))])]
26072       ""
26073       "loadm 0,0,%1,%2")
26074
26075 The constants that are defined with a define_constant are also output
26076in the insn-codes.h header file as #defines.
26077
26078 You can also use the machine description file to define enumerations.
26079Like the constants defined by 'define_constant', these enumerations are
26080visible to both the machine description file and the main C code.
26081
26082 The syntax is as follows:
26083
26084     (define_c_enum "NAME" [
26085       VALUE0
26086       VALUE1
26087       ...
26088       VALUEN
26089     ])
26090
26091 This definition causes the equivalent of the following C code to appear
26092in 'insn-constants.h':
26093
26094     enum NAME {
26095       VALUE0 = 0,
26096       VALUE1 = 1,
26097       ...
26098       VALUEN = N
26099     };
26100     #define NUM_CNAME_VALUES (N + 1)
26101
26102 where CNAME is the capitalized form of NAME.  It also makes each VALUEI
26103available in the machine description file, just as if it had been
26104declared with:
26105
26106     (define_constants [(VALUEI I)])
26107
26108 Each VALUEI is usually an upper-case identifier and usually begins with
26109CNAME.
26110
26111 You can split the enumeration definition into as many statements as you
26112like.  The above example is directly equivalent to:
26113
26114     (define_c_enum "NAME" [VALUE0])
26115     (define_c_enum "NAME" [VALUE1])
26116     ...
26117     (define_c_enum "NAME" [VALUEN])
26118
26119 Splitting the enumeration helps to improve the modularity of each
26120individual '.md' file.  For example, if a port defines its
26121synchronization instructions in a separate 'sync.md' file, it is
26122convenient to define all synchronization-specific enumeration values in
26123'sync.md' rather than in the main '.md' file.
26124
26125 Some enumeration names have special significance to GCC:
26126
26127'unspecv'
26128     If an enumeration called 'unspecv' is defined, GCC will use it when
26129     printing out 'unspec_volatile' expressions.  For example:
26130
26131          (define_c_enum "unspecv" [
26132            UNSPECV_BLOCKAGE
26133          ])
26134
26135     causes GCC to print '(unspec_volatile ... 0)' as:
26136
26137          (unspec_volatile ... UNSPECV_BLOCKAGE)
26138
26139'unspec'
26140     If an enumeration called 'unspec' is defined, GCC will use it when
26141     printing out 'unspec' expressions.  GCC will also use it when
26142     printing out 'unspec_volatile' expressions unless an 'unspecv'
26143     enumeration is also defined.  You can therefore decide whether to
26144     keep separate enumerations for volatile and non-volatile
26145     expressions or whether to use the same enumeration for both.
26146
26147 Another way of defining an enumeration is to use 'define_enum':
26148
26149     (define_enum "NAME" [
26150       VALUE0
26151       VALUE1
26152       ...
26153       VALUEN
26154     ])
26155
26156 This directive implies:
26157
26158     (define_c_enum "NAME" [
26159       CNAME_CVALUE0
26160       CNAME_CVALUE1
26161       ...
26162       CNAME_CVALUEN
26163     ])
26164
26165 where CVALUEI is the capitalized form of VALUEI.  However, unlike
26166'define_c_enum', the enumerations defined by 'define_enum' can be used
26167in attribute specifications (*note define_enum_attr::).
26168
26169
26170File: gccint.info,  Node: Iterators,  Prev: Constant Definitions,  Up: Machine Desc
26171
2617216.23 Iterators
26173===============
26174
26175Ports often need to define similar patterns for more than one machine
26176mode or for more than one rtx code.  GCC provides some simple iterator
26177facilities to make this process easier.
26178
26179* Menu:
26180
26181* Mode Iterators::         Generating variations of patterns for different modes.
26182* Code Iterators::         Doing the same for codes.
26183* Int Iterators::          Doing the same for integers.
26184* Subst Iterators::	   Generating variations of patterns for define_subst.
26185
26186
26187File: gccint.info,  Node: Mode Iterators,  Next: Code Iterators,  Up: Iterators
26188
2618916.23.1 Mode Iterators
26190----------------------
26191
26192Ports often need to define similar patterns for two or more different
26193modes.  For example:
26194
26195   * If a processor has hardware support for both single and double
26196     floating-point arithmetic, the 'SFmode' patterns tend to be very
26197     similar to the 'DFmode' ones.
26198
26199   * If a port uses 'SImode' pointers in one configuration and 'DImode'
26200     pointers in another, it will usually have very similar 'SImode' and
26201     'DImode' patterns for manipulating pointers.
26202
26203 Mode iterators allow several patterns to be instantiated from one '.md'
26204file template.  They can be used with any type of rtx-based construct,
26205such as a 'define_insn', 'define_split', or 'define_peephole2'.
26206
26207* Menu:
26208
26209* Defining Mode Iterators:: Defining a new mode iterator.
26210* Substitutions::           Combining mode iterators with substitutions
26211* Examples::                Examples
26212
26213
26214File: gccint.info,  Node: Defining Mode Iterators,  Next: Substitutions,  Up: Mode Iterators
26215
2621616.23.1.1 Defining Mode Iterators
26217.................................
26218
26219The syntax for defining a mode iterator is:
26220
26221     (define_mode_iterator NAME [(MODE1 "COND1") ... (MODEN "CONDN")])
26222
26223 This allows subsequent '.md' file constructs to use the mode suffix
26224':NAME'.  Every construct that does so will be expanded N times, once
26225with every use of ':NAME' replaced by ':MODE1', once with every use
26226replaced by ':MODE2', and so on.  In the expansion for a particular
26227MODEI, every C condition will also require that CONDI be true.
26228
26229 For example:
26230
26231     (define_mode_iterator P [(SI "Pmode == SImode") (DI "Pmode == DImode")])
26232
26233 defines a new mode suffix ':P'.  Every construct that uses ':P' will be
26234expanded twice, once with every ':P' replaced by ':SI' and once with
26235every ':P' replaced by ':DI'.  The ':SI' version will only apply if
26236'Pmode == SImode' and the ':DI' version will only apply if 'Pmode ==
26237DImode'.
26238
26239 As with other '.md' conditions, an empty string is treated as "always
26240true".  '(MODE "")' can also be abbreviated to 'MODE'.  For example:
26241
26242     (define_mode_iterator GPR [SI (DI "TARGET_64BIT")])
26243
26244 means that the ':DI' expansion only applies if 'TARGET_64BIT' but that
26245the ':SI' expansion has no such constraint.
26246
26247 Iterators are applied in the order they are defined.  This can be
26248significant if two iterators are used in a construct that requires
26249substitutions.  *Note Substitutions::.
26250
26251
26252File: gccint.info,  Node: Substitutions,  Next: Examples,  Prev: Defining Mode Iterators,  Up: Mode Iterators
26253
2625416.23.1.2 Substitution in Mode Iterators
26255........................................
26256
26257If an '.md' file construct uses mode iterators, each version of the
26258construct will often need slightly different strings or modes.  For
26259example:
26260
26261   * When a 'define_expand' defines several 'addM3' patterns (*note
26262     Standard Names::), each expander will need to use the appropriate
26263     mode name for M.
26264
26265   * When a 'define_insn' defines several instruction patterns, each
26266     instruction will often use a different assembler mnemonic.
26267
26268   * When a 'define_insn' requires operands with different modes, using
26269     an iterator for one of the operand modes usually requires a
26270     specific mode for the other operand(s).
26271
26272 GCC supports such variations through a system of "mode attributes".
26273There are two standard attributes: 'mode', which is the name of the mode
26274in lower case, and 'MODE', which is the same thing in upper case.  You
26275can define other attributes using:
26276
26277     (define_mode_attr NAME [(MODE1 "VALUE1") ... (MODEN "VALUEN")])
26278
26279 where NAME is the name of the attribute and VALUEI is the value
26280associated with MODEI.
26281
26282 When GCC replaces some :ITERATOR with :MODE, it will scan each string
26283and mode in the pattern for sequences of the form '<ITERATOR:ATTR>',
26284where ATTR is the name of a mode attribute.  If the attribute is defined
26285for MODE, the whole '<...>' sequence will be replaced by the appropriate
26286attribute value.
26287
26288 For example, suppose an '.md' file has:
26289
26290     (define_mode_iterator P [(SI "Pmode == SImode") (DI "Pmode == DImode")])
26291     (define_mode_attr load [(SI "lw") (DI "ld")])
26292
26293 If one of the patterns that uses ':P' contains the string
26294'"<P:load>\t%0,%1"', the 'SI' version of that pattern will use
26295'"lw\t%0,%1"' and the 'DI' version will use '"ld\t%0,%1"'.
26296
26297 Here is an example of using an attribute for a mode:
26298
26299     (define_mode_iterator LONG [SI DI])
26300     (define_mode_attr SHORT [(SI "HI") (DI "SI")])
26301     (define_insn ...
26302       (sign_extend:LONG (match_operand:<LONG:SHORT> ...)) ...)
26303
26304 The 'ITERATOR:' prefix may be omitted, in which case the substitution
26305will be attempted for every iterator expansion.
26306
26307
26308File: gccint.info,  Node: Examples,  Prev: Substitutions,  Up: Mode Iterators
26309
2631016.23.1.3 Mode Iterator Examples
26311................................
26312
26313Here is an example from the MIPS port.  It defines the following modes
26314and attributes (among others):
26315
26316     (define_mode_iterator GPR [SI (DI "TARGET_64BIT")])
26317     (define_mode_attr d [(SI "") (DI "d")])
26318
26319 and uses the following template to define both 'subsi3' and 'subdi3':
26320
26321     (define_insn "sub<mode>3"
26322       [(set (match_operand:GPR 0 "register_operand" "=d")
26323             (minus:GPR (match_operand:GPR 1 "register_operand" "d")
26324                        (match_operand:GPR 2 "register_operand" "d")))]
26325       ""
26326       "<d>subu\t%0,%1,%2"
26327       [(set_attr "type" "arith")
26328        (set_attr "mode" "<MODE>")])
26329
26330 This is exactly equivalent to:
26331
26332     (define_insn "subsi3"
26333       [(set (match_operand:SI 0 "register_operand" "=d")
26334             (minus:SI (match_operand:SI 1 "register_operand" "d")
26335                       (match_operand:SI 2 "register_operand" "d")))]
26336       ""
26337       "subu\t%0,%1,%2"
26338       [(set_attr "type" "arith")
26339        (set_attr "mode" "SI")])
26340
26341     (define_insn "subdi3"
26342       [(set (match_operand:DI 0 "register_operand" "=d")
26343             (minus:DI (match_operand:DI 1 "register_operand" "d")
26344                       (match_operand:DI 2 "register_operand" "d")))]
26345       ""
26346       "dsubu\t%0,%1,%2"
26347       [(set_attr "type" "arith")
26348        (set_attr "mode" "DI")])
26349
26350
26351File: gccint.info,  Node: Code Iterators,  Next: Int Iterators,  Prev: Mode Iterators,  Up: Iterators
26352
2635316.23.2 Code Iterators
26354----------------------
26355
26356Code iterators operate in a similar way to mode iterators.  *Note Mode
26357Iterators::.
26358
26359 The construct:
26360
26361     (define_code_iterator NAME [(CODE1 "COND1") ... (CODEN "CONDN")])
26362
26363 defines a pseudo rtx code NAME that can be instantiated as CODEI if
26364condition CONDI is true.  Each CODEI must have the same rtx format.
26365*Note RTL Classes::.
26366
26367 As with mode iterators, each pattern that uses NAME will be expanded N
26368times, once with all uses of NAME replaced by CODE1, once with all uses
26369replaced by CODE2, and so on.  *Note Defining Mode Iterators::.
26370
26371 It is possible to define attributes for codes as well as for modes.
26372There are two standard code attributes: 'code', the name of the code in
26373lower case, and 'CODE', the name of the code in upper case.  Other
26374attributes are defined using:
26375
26376     (define_code_attr NAME [(CODE1 "VALUE1") ... (CODEN "VALUEN")])
26377
26378 Here's an example of code iterators in action, taken from the MIPS
26379port:
26380
26381     (define_code_iterator any_cond [unordered ordered unlt unge uneq ltgt unle ungt
26382                                     eq ne gt ge lt le gtu geu ltu leu])
26383
26384     (define_expand "b<code>"
26385       [(set (pc)
26386             (if_then_else (any_cond:CC (cc0)
26387                                        (const_int 0))
26388                           (label_ref (match_operand 0 ""))
26389                           (pc)))]
26390       ""
26391     {
26392       gen_conditional_branch (operands, <CODE>);
26393       DONE;
26394     })
26395
26396 This is equivalent to:
26397
26398     (define_expand "bunordered"
26399       [(set (pc)
26400             (if_then_else (unordered:CC (cc0)
26401                                         (const_int 0))
26402                           (label_ref (match_operand 0 ""))
26403                           (pc)))]
26404       ""
26405     {
26406       gen_conditional_branch (operands, UNORDERED);
26407       DONE;
26408     })
26409
26410     (define_expand "bordered"
26411       [(set (pc)
26412             (if_then_else (ordered:CC (cc0)
26413                                       (const_int 0))
26414                           (label_ref (match_operand 0 ""))
26415                           (pc)))]
26416       ""
26417     {
26418       gen_conditional_branch (operands, ORDERED);
26419       DONE;
26420     })
26421
26422     ...
26423
26424
26425File: gccint.info,  Node: Int Iterators,  Next: Subst Iterators,  Prev: Code Iterators,  Up: Iterators
26426
2642716.23.3 Int Iterators
26428---------------------
26429
26430Int iterators operate in a similar way to code iterators.  *Note Code
26431Iterators::.
26432
26433 The construct:
26434
26435     (define_int_iterator NAME [(INT1 "COND1") ... (INTN "CONDN")])
26436
26437 defines a pseudo integer constant NAME that can be instantiated as INTI
26438if condition CONDI is true.  Each INT must have the same rtx format.
26439*Note RTL Classes::.  Int iterators can appear in only those rtx fields
26440that have 'i' as the specifier.  This means that each INT has to be a
26441constant defined using define_constant or define_c_enum.
26442
26443 As with mode and code iterators, each pattern that uses NAME will be
26444expanded N times, once with all uses of NAME replaced by INT1, once with
26445all uses replaced by INT2, and so on.  *Note Defining Mode Iterators::.
26446
26447 It is possible to define attributes for ints as well as for codes and
26448modes.  Attributes are defined using:
26449
26450     (define_int_attr NAME [(INT1 "VALUE1") ... (INTN "VALUEN")])
26451
26452 Here's an example of int iterators in action, taken from the ARM port:
26453
26454     (define_int_iterator QABSNEG [UNSPEC_VQABS UNSPEC_VQNEG])
26455
26456     (define_int_attr absneg [(UNSPEC_VQABS "abs") (UNSPEC_VQNEG "neg")])
26457
26458     (define_insn "neon_vq<absneg><mode>"
26459       [(set (match_operand:VDQIW 0 "s_register_operand" "=w")
26460     	(unspec:VDQIW [(match_operand:VDQIW 1 "s_register_operand" "w")
26461     		       (match_operand:SI 2 "immediate_operand" "i")]
26462     		      QABSNEG))]
26463       "TARGET_NEON"
26464       "vq<absneg>.<V_s_elem>\t%<V_reg>0, %<V_reg>1"
26465       [(set_attr "neon_type" "neon_vqneg_vqabs")]
26466     )
26467
26468
26469 This is equivalent to:
26470
26471     (define_insn "neon_vqabs<mode>"
26472       [(set (match_operand:VDQIW 0 "s_register_operand" "=w")
26473     	(unspec:VDQIW [(match_operand:VDQIW 1 "s_register_operand" "w")
26474     		       (match_operand:SI 2 "immediate_operand" "i")]
26475     		      UNSPEC_VQABS))]
26476       "TARGET_NEON"
26477       "vqabs.<V_s_elem>\t%<V_reg>0, %<V_reg>1"
26478       [(set_attr "neon_type" "neon_vqneg_vqabs")]
26479     )
26480
26481     (define_insn "neon_vqneg<mode>"
26482       [(set (match_operand:VDQIW 0 "s_register_operand" "=w")
26483     	(unspec:VDQIW [(match_operand:VDQIW 1 "s_register_operand" "w")
26484     		       (match_operand:SI 2 "immediate_operand" "i")]
26485     		      UNSPEC_VQNEG))]
26486       "TARGET_NEON"
26487       "vqneg.<V_s_elem>\t%<V_reg>0, %<V_reg>1"
26488       [(set_attr "neon_type" "neon_vqneg_vqabs")]
26489     )
26490
26491
26492
26493File: gccint.info,  Node: Subst Iterators,  Prev: Int Iterators,  Up: Iterators
26494
2649516.23.4 Subst Iterators
26496-----------------------
26497
26498Subst iterators are special type of iterators with the following
26499restrictions: they could not be declared explicitly, they always have
26500only two values, and they do not have explicit dedicated name.
26501Subst-iterators are triggered only when corresponding subst-attribute is
26502used in RTL-pattern.
26503
26504 Subst iterators transform templates in the following way: the templates
26505are duplicated, the subst-attributes in these templates are replaced
26506with the corresponding values, and a new attribute is implicitly added
26507to the given 'define_insn'/'define_expand'.  The name of the added
26508attribute matches the name of 'define_subst'.  Such attributes are
26509declared implicitly, and it is not allowed to have a 'define_attr' named
26510as a 'define_subst'.
26511
26512 Each subst iterator is linked to a 'define_subst'.  It is declared
26513implicitly by the first appearance of the corresponding
26514'define_subst_attr', and it is not allowed to define it explicitly.
26515
26516 Declarations of subst-attributes have the following syntax:
26517
26518     (define_subst_attr "NAME"
26519       "SUBST-NAME"
26520       "NO-SUBST-VALUE"
26521       "SUBST-APPLIED-VALUE")
26522
26523 NAME is a string with which the given subst-attribute could be referred
26524to.
26525
26526 SUBST-NAME shows which 'define_subst' should be applied to an
26527RTL-template if the given subst-attribute is present in the
26528RTL-template.
26529
26530 NO-SUBST-VALUE is a value with which subst-attribute would be replaced
26531in the first copy of the original RTL-template.
26532
26533 SUBST-APPLIED-VALUE is a value with which subst-attribute would be
26534replaced in the second copy of the original RTL-template.
26535
26536
26537File: gccint.info,  Node: Target Macros,  Next: Host Config,  Prev: Machine Desc,  Up: Top
26538
2653917 Target Description Macros and Functions
26540******************************************
26541
26542In addition to the file 'MACHINE.md', a machine description includes a C
26543header file conventionally given the name 'MACHINE.h' and a C source
26544file named 'MACHINE.c'.  The header file defines numerous macros that
26545convey the information about the target machine that does not fit into
26546the scheme of the '.md' file.  The file 'tm.h' should be a link to
26547'MACHINE.h'.  The header file 'config.h' includes 'tm.h' and most
26548compiler source files include 'config.h'.  The source file defines a
26549variable 'targetm', which is a structure containing pointers to
26550functions and data relating to the target machine.  'MACHINE.c' should
26551also contain their definitions, if they are not defined elsewhere in
26552GCC, and other functions called through the macros defined in the '.h'
26553file.
26554
26555* Menu:
26556
26557* Target Structure::    The 'targetm' variable.
26558* Driver::              Controlling how the driver runs the compilation passes.
26559* Run-time Target::     Defining '-m' options like '-m68000' and '-m68020'.
26560* Per-Function Data::   Defining data structures for per-function information.
26561* Storage Layout::      Defining sizes and alignments of data.
26562* Type Layout::         Defining sizes and properties of basic user data types.
26563* Registers::           Naming and describing the hardware registers.
26564* Register Classes::    Defining the classes of hardware registers.
26565* Old Constraints::     The old way to define machine-specific constraints.
26566* Stack and Calling::   Defining which way the stack grows and by how much.
26567* Varargs::             Defining the varargs macros.
26568* Trampolines::         Code set up at run time to enter a nested function.
26569* Library Calls::       Controlling how library routines are implicitly called.
26570* Addressing Modes::    Defining addressing modes valid for memory operands.
26571* Anchored Addresses::  Defining how '-fsection-anchors' should work.
26572* Condition Code::      Defining how insns update the condition code.
26573* Costs::               Defining relative costs of different operations.
26574* Scheduling::          Adjusting the behavior of the instruction scheduler.
26575* Sections::            Dividing storage into text, data, and other sections.
26576* PIC::                 Macros for position independent code.
26577* Assembler Format::    Defining how to write insns and pseudo-ops to output.
26578* Debugging Info::      Defining the format of debugging output.
26579* Floating Point::      Handling floating point for cross-compilers.
26580* Mode Switching::      Insertion of mode-switching instructions.
26581* Target Attributes::   Defining target-specific uses of '__attribute__'.
26582* Emulated TLS::        Emulated TLS support.
26583* MIPS Coprocessors::   MIPS coprocessor support and how to customize it.
26584* PCH Target::          Validity checking for precompiled headers.
26585* C++ ABI::             Controlling C++ ABI changes.
26586* Named Address Spaces:: Adding support for named address spaces
26587* Misc::                Everything else.
26588
26589
26590File: gccint.info,  Node: Target Structure,  Next: Driver,  Up: Target Macros
26591
2659217.1 The Global 'targetm' Variable
26593==================================
26594
26595 -- Variable: struct gcc_target targetm
26596     The target '.c' file must define the global 'targetm' variable
26597     which contains pointers to functions and data relating to the
26598     target machine.  The variable is declared in 'target.h';
26599     'target-def.h' defines the macro 'TARGET_INITIALIZER' which is used
26600     to initialize the variable, and macros for the default initializers
26601     for elements of the structure.  The '.c' file should override those
26602     macros for which the default definition is inappropriate.  For
26603     example:
26604          #include "target.h"
26605          #include "target-def.h"
26606
26607          /* Initialize the GCC target structure.  */
26608
26609          #undef TARGET_COMP_TYPE_ATTRIBUTES
26610          #define TARGET_COMP_TYPE_ATTRIBUTES MACHINE_comp_type_attributes
26611
26612          struct gcc_target targetm = TARGET_INITIALIZER;
26613
26614 Where a macro should be defined in the '.c' file in this manner to form
26615part of the 'targetm' structure, it is documented below as a "Target
26616Hook" with a prototype.  Many macros will change in future from being
26617defined in the '.h' file to being part of the 'targetm' structure.
26618
26619 Similarly, there is a 'targetcm' variable for hooks that are specific
26620to front ends for C-family languages, documented as "C Target Hook".
26621This is declared in 'c-family/c-target.h', the initializer
26622'TARGETCM_INITIALIZER' in 'c-family/c-target-def.h'.  If targets
26623initialize 'targetcm' themselves, they should set
26624'target_has_targetcm=yes' in 'config.gcc'; otherwise a default
26625definition is used.
26626
26627 Similarly, there is a 'targetm_common' variable for hooks that are
26628shared between the compiler driver and the compilers proper, documented
26629as "Common Target Hook".  This is declared in 'common/common-target.h',
26630the initializer 'TARGETM_COMMON_INITIALIZER' in
26631'common/common-target-def.h'.  If targets initialize 'targetm_common'
26632themselves, they should set 'target_has_targetm_common=yes' in
26633'config.gcc'; otherwise a default definition is used.
26634
26635
26636File: gccint.info,  Node: Driver,  Next: Run-time Target,  Prev: Target Structure,  Up: Target Macros
26637
2663817.2 Controlling the Compilation Driver, 'gcc'
26639==============================================
26640
26641You can control the compilation driver.
26642
26643 -- Macro: DRIVER_SELF_SPECS
26644     A list of specs for the driver itself.  It should be a suitable
26645     initializer for an array of strings, with no surrounding braces.
26646
26647     The driver applies these specs to its own command line between
26648     loading default 'specs' files (but not command-line specified ones)
26649     and choosing the multilib directory or running any subcommands.  It
26650     applies them in the order given, so each spec can depend on the
26651     options added by earlier ones.  It is also possible to remove
26652     options using '%<OPTION' in the usual way.
26653
26654     This macro can be useful when a port has several interdependent
26655     target options.  It provides a way of standardizing the command
26656     line so that the other specs are easier to write.
26657
26658     Do not define this macro if it does not need to do anything.
26659
26660 -- Macro: OPTION_DEFAULT_SPECS
26661     A list of specs used to support configure-time default options
26662     (i.e. '--with' options) in the driver.  It should be a suitable
26663     initializer for an array of structures, each containing two
26664     strings, without the outermost pair of surrounding braces.
26665
26666     The first item in the pair is the name of the default.  This must
26667     match the code in 'config.gcc' for the target.  The second item is
26668     a spec to apply if a default with this name was specified.  The
26669     string '%(VALUE)' in the spec will be replaced by the value of the
26670     default everywhere it occurs.
26671
26672     The driver will apply these specs to its own command line between
26673     loading default 'specs' files and processing 'DRIVER_SELF_SPECS',
26674     using the same mechanism as 'DRIVER_SELF_SPECS'.
26675
26676     Do not define this macro if it does not need to do anything.
26677
26678 -- Macro: CPP_SPEC
26679     A C string constant that tells the GCC driver program options to
26680     pass to CPP.  It can also specify how to translate options you give
26681     to GCC into options for GCC to pass to the CPP.
26682
26683     Do not define this macro if it does not need to do anything.
26684
26685 -- Macro: CPLUSPLUS_CPP_SPEC
26686     This macro is just like 'CPP_SPEC', but is used for C++, rather
26687     than C.  If you do not define this macro, then the value of
26688     'CPP_SPEC' (if any) will be used instead.
26689
26690 -- Macro: CC1_SPEC
26691     A C string constant that tells the GCC driver program options to
26692     pass to 'cc1', 'cc1plus', 'f771', and the other language front
26693     ends.  It can also specify how to translate options you give to GCC
26694     into options for GCC to pass to front ends.
26695
26696     Do not define this macro if it does not need to do anything.
26697
26698 -- Macro: CC1PLUS_SPEC
26699     A C string constant that tells the GCC driver program options to
26700     pass to 'cc1plus'.  It can also specify how to translate options
26701     you give to GCC into options for GCC to pass to the 'cc1plus'.
26702
26703     Do not define this macro if it does not need to do anything.  Note
26704     that everything defined in CC1_SPEC is already passed to 'cc1plus'
26705     so there is no need to duplicate the contents of CC1_SPEC in
26706     CC1PLUS_SPEC.
26707
26708 -- Macro: ASM_SPEC
26709     A C string constant that tells the GCC driver program options to
26710     pass to the assembler.  It can also specify how to translate
26711     options you give to GCC into options for GCC to pass to the
26712     assembler.  See the file 'sun3.h' for an example of this.
26713
26714     Do not define this macro if it does not need to do anything.
26715
26716 -- Macro: ASM_FINAL_SPEC
26717     A C string constant that tells the GCC driver program how to run
26718     any programs which cleanup after the normal assembler.  Normally,
26719     this is not needed.  See the file 'mips.h' for an example of this.
26720
26721     Do not define this macro if it does not need to do anything.
26722
26723 -- Macro: AS_NEEDS_DASH_FOR_PIPED_INPUT
26724     Define this macro, with no value, if the driver should give the
26725     assembler an argument consisting of a single dash, '-', to instruct
26726     it to read from its standard input (which will be a pipe connected
26727     to the output of the compiler proper).  This argument is given
26728     after any '-o' option specifying the name of the output file.
26729
26730     If you do not define this macro, the assembler is assumed to read
26731     its standard input if given no non-option arguments.  If your
26732     assembler cannot read standard input at all, use a '%{pipe:%e}'
26733     construct; see 'mips.h' for instance.
26734
26735 -- Macro: LINK_SPEC
26736     A C string constant that tells the GCC driver program options to
26737     pass to the linker.  It can also specify how to translate options
26738     you give to GCC into options for GCC to pass to the linker.
26739
26740     Do not define this macro if it does not need to do anything.
26741
26742 -- Macro: LIB_SPEC
26743     Another C string constant used much like 'LINK_SPEC'.  The
26744     difference between the two is that 'LIB_SPEC' is used at the end of
26745     the command given to the linker.
26746
26747     If this macro is not defined, a default is provided that loads the
26748     standard C library from the usual place.  See 'gcc.c'.
26749
26750 -- Macro: LIBGCC_SPEC
26751     Another C string constant that tells the GCC driver program how and
26752     when to place a reference to 'libgcc.a' into the linker command
26753     line.  This constant is placed both before and after the value of
26754     'LIB_SPEC'.
26755
26756     If this macro is not defined, the GCC driver provides a default
26757     that passes the string '-lgcc' to the linker.
26758
26759 -- Macro: REAL_LIBGCC_SPEC
26760     By default, if 'ENABLE_SHARED_LIBGCC' is defined, the 'LIBGCC_SPEC'
26761     is not directly used by the driver program but is instead modified
26762     to refer to different versions of 'libgcc.a' depending on the
26763     values of the command line flags '-static', '-shared',
26764     '-static-libgcc', and '-shared-libgcc'.  On targets where these
26765     modifications are inappropriate, define 'REAL_LIBGCC_SPEC' instead.
26766     'REAL_LIBGCC_SPEC' tells the driver how to place a reference to
26767     'libgcc' on the link command line, but, unlike 'LIBGCC_SPEC', it is
26768     used unmodified.
26769
26770 -- Macro: USE_LD_AS_NEEDED
26771     A macro that controls the modifications to 'LIBGCC_SPEC' mentioned
26772     in 'REAL_LIBGCC_SPEC'.  If nonzero, a spec will be generated that
26773     uses -as-needed and the shared libgcc in place of the static
26774     exception handler library, when linking without any of '-static',
26775     '-static-libgcc', or '-shared-libgcc'.
26776
26777 -- Macro: LINK_EH_SPEC
26778     If defined, this C string constant is added to 'LINK_SPEC'.  When
26779     'USE_LD_AS_NEEDED' is zero or undefined, it also affects the
26780     modifications to 'LIBGCC_SPEC' mentioned in 'REAL_LIBGCC_SPEC'.
26781
26782 -- Macro: STARTFILE_SPEC
26783     Another C string constant used much like 'LINK_SPEC'.  The
26784     difference between the two is that 'STARTFILE_SPEC' is used at the
26785     very beginning of the command given to the linker.
26786
26787     If this macro is not defined, a default is provided that loads the
26788     standard C startup file from the usual place.  See 'gcc.c'.
26789
26790 -- Macro: ENDFILE_SPEC
26791     Another C string constant used much like 'LINK_SPEC'.  The
26792     difference between the two is that 'ENDFILE_SPEC' is used at the
26793     very end of the command given to the linker.
26794
26795     Do not define this macro if it does not need to do anything.
26796
26797 -- Macro: THREAD_MODEL_SPEC
26798     GCC '-v' will print the thread model GCC was configured to use.
26799     However, this doesn't work on platforms that are multilibbed on
26800     thread models, such as AIX 4.3.  On such platforms, define
26801     'THREAD_MODEL_SPEC' such that it evaluates to a string without
26802     blanks that names one of the recognized thread models.  '%*', the
26803     default value of this macro, will expand to the value of
26804     'thread_file' set in 'config.gcc'.
26805
26806 -- Macro: SYSROOT_SUFFIX_SPEC
26807     Define this macro to add a suffix to the target sysroot when GCC is
26808     configured with a sysroot.  This will cause GCC to search for
26809     usr/lib, et al, within sysroot+suffix.
26810
26811 -- Macro: SYSROOT_HEADERS_SUFFIX_SPEC
26812     Define this macro to add a headers_suffix to the target sysroot
26813     when GCC is configured with a sysroot.  This will cause GCC to pass
26814     the updated sysroot+headers_suffix to CPP, causing it to search for
26815     usr/include, et al, within sysroot+headers_suffix.
26816
26817 -- Macro: EXTRA_SPECS
26818     Define this macro to provide additional specifications to put in
26819     the 'specs' file that can be used in various specifications like
26820     'CC1_SPEC'.
26821
26822     The definition should be an initializer for an array of structures,
26823     containing a string constant, that defines the specification name,
26824     and a string constant that provides the specification.
26825
26826     Do not define this macro if it does not need to do anything.
26827
26828     'EXTRA_SPECS' is useful when an architecture contains several
26829     related targets, which have various '..._SPECS' which are similar
26830     to each other, and the maintainer would like one central place to
26831     keep these definitions.
26832
26833     For example, the PowerPC System V.4 targets use 'EXTRA_SPECS' to
26834     define either '_CALL_SYSV' when the System V calling sequence is
26835     used or '_CALL_AIX' when the older AIX-based calling sequence is
26836     used.
26837
26838     The 'config/rs6000/rs6000.h' target file defines:
26839
26840          #define EXTRA_SPECS \
26841            { "cpp_sysv_default", CPP_SYSV_DEFAULT },
26842
26843          #define CPP_SYS_DEFAULT ""
26844
26845     The 'config/rs6000/sysv.h' target file defines:
26846          #undef CPP_SPEC
26847          #define CPP_SPEC \
26848          "%{posix: -D_POSIX_SOURCE } \
26849          %{mcall-sysv: -D_CALL_SYSV } \
26850          %{!mcall-sysv: %(cpp_sysv_default) } \
26851          %{msoft-float: -D_SOFT_FLOAT} %{mcpu=403: -D_SOFT_FLOAT}"
26852
26853          #undef CPP_SYSV_DEFAULT
26854          #define CPP_SYSV_DEFAULT "-D_CALL_SYSV"
26855
26856     while the 'config/rs6000/eabiaix.h' target file defines
26857     'CPP_SYSV_DEFAULT' as:
26858
26859          #undef CPP_SYSV_DEFAULT
26860          #define CPP_SYSV_DEFAULT "-D_CALL_AIX"
26861
26862 -- Macro: LINK_LIBGCC_SPECIAL_1
26863     Define this macro if the driver program should find the library
26864     'libgcc.a'.  If you do not define this macro, the driver program
26865     will pass the argument '-lgcc' to tell the linker to do the search.
26866
26867 -- Macro: LINK_GCC_C_SEQUENCE_SPEC
26868     The sequence in which libgcc and libc are specified to the linker.
26869     By default this is '%G %L %G'.
26870
26871 -- Macro: LINK_COMMAND_SPEC
26872     A C string constant giving the complete command line need to
26873     execute the linker.  When you do this, you will need to update your
26874     port each time a change is made to the link command line within
26875     'gcc.c'.  Therefore, define this macro only if you need to
26876     completely redefine the command line for invoking the linker and
26877     there is no other way to accomplish the effect you need.
26878     Overriding this macro may be avoidable by overriding
26879     'LINK_GCC_C_SEQUENCE_SPEC' instead.
26880
26881 -- Common Target Hook: bool TARGET_ALWAYS_STRIP_DOTDOT
26882     True if '..' components should always be removed from directory
26883     names computed relative to GCC's internal directories, false
26884     (default) if such components should be preserved and directory
26885     names containing them passed to other tools such as the linker.
26886
26887 -- Macro: MULTILIB_DEFAULTS
26888     Define this macro as a C expression for the initializer of an array
26889     of string to tell the driver program which options are defaults for
26890     this target and thus do not need to be handled specially when using
26891     'MULTILIB_OPTIONS'.
26892
26893     Do not define this macro if 'MULTILIB_OPTIONS' is not defined in
26894     the target makefile fragment or if none of the options listed in
26895     'MULTILIB_OPTIONS' are set by default.  *Note Target Fragment::.
26896
26897 -- Macro: RELATIVE_PREFIX_NOT_LINKDIR
26898     Define this macro to tell 'gcc' that it should only translate a
26899     '-B' prefix into a '-L' linker option if the prefix indicates an
26900     absolute file name.
26901
26902 -- Macro: MD_EXEC_PREFIX
26903     If defined, this macro is an additional prefix to try after
26904     'STANDARD_EXEC_PREFIX'.  'MD_EXEC_PREFIX' is not searched when the
26905     compiler is built as a cross compiler.  If you define
26906     'MD_EXEC_PREFIX', then be sure to add it to the list of directories
26907     used to find the assembler in 'configure.in'.
26908
26909 -- Macro: STANDARD_STARTFILE_PREFIX
26910     Define this macro as a C string constant if you wish to override
26911     the standard choice of 'libdir' as the default prefix to try when
26912     searching for startup files such as 'crt0.o'.
26913     'STANDARD_STARTFILE_PREFIX' is not searched when the compiler is
26914     built as a cross compiler.
26915
26916 -- Macro: STANDARD_STARTFILE_PREFIX_1
26917     Define this macro as a C string constant if you wish to override
26918     the standard choice of '/lib' as a prefix to try after the default
26919     prefix when searching for startup files such as 'crt0.o'.
26920     'STANDARD_STARTFILE_PREFIX_1' is not searched when the compiler is
26921     built as a cross compiler.
26922
26923 -- Macro: STANDARD_STARTFILE_PREFIX_2
26924     Define this macro as a C string constant if you wish to override
26925     the standard choice of '/lib' as yet another prefix to try after
26926     the default prefix when searching for startup files such as
26927     'crt0.o'.  'STANDARD_STARTFILE_PREFIX_2' is not searched when the
26928     compiler is built as a cross compiler.
26929
26930 -- Macro: MD_STARTFILE_PREFIX
26931     If defined, this macro supplies an additional prefix to try after
26932     the standard prefixes.  'MD_EXEC_PREFIX' is not searched when the
26933     compiler is built as a cross compiler.
26934
26935 -- Macro: MD_STARTFILE_PREFIX_1
26936     If defined, this macro supplies yet another prefix to try after the
26937     standard prefixes.  It is not searched when the compiler is built
26938     as a cross compiler.
26939
26940 -- Macro: INIT_ENVIRONMENT
26941     Define this macro as a C string constant if you wish to set
26942     environment variables for programs called by the driver, such as
26943     the assembler and loader.  The driver passes the value of this
26944     macro to 'putenv' to initialize the necessary environment
26945     variables.
26946
26947 -- Macro: LOCAL_INCLUDE_DIR
26948     Define this macro as a C string constant if you wish to override
26949     the standard choice of '/usr/local/include' as the default prefix
26950     to try when searching for local header files.  'LOCAL_INCLUDE_DIR'
26951     comes before 'NATIVE_SYSTEM_HEADER_DIR' (set in 'config.gcc',
26952     normally '/usr/include') in the search order.
26953
26954     Cross compilers do not search either '/usr/local/include' or its
26955     replacement.
26956
26957 -- Macro: NATIVE_SYSTEM_HEADER_COMPONENT
26958     The "component" corresponding to 'NATIVE_SYSTEM_HEADER_DIR'.  See
26959     'INCLUDE_DEFAULTS', below, for the description of components.  If
26960     you do not define this macro, no component is used.
26961
26962 -- Macro: INCLUDE_DEFAULTS
26963     Define this macro if you wish to override the entire default search
26964     path for include files.  For a native compiler, the default search
26965     path usually consists of 'GCC_INCLUDE_DIR', 'LOCAL_INCLUDE_DIR',
26966     'GPLUSPLUS_INCLUDE_DIR', and 'NATIVE_SYSTEM_HEADER_DIR'.  In
26967     addition, 'GPLUSPLUS_INCLUDE_DIR' and 'GCC_INCLUDE_DIR' are defined
26968     automatically by 'Makefile', and specify private search areas for
26969     GCC.  The directory 'GPLUSPLUS_INCLUDE_DIR' is used only for C++
26970     programs.
26971
26972     The definition should be an initializer for an array of structures.
26973     Each array element should have four elements: the directory name (a
26974     string constant), the component name (also a string constant), a
26975     flag for C++-only directories, and a flag showing that the includes
26976     in the directory don't need to be wrapped in 'extern 'C'' when
26977     compiling C++.  Mark the end of the array with a null element.
26978
26979     The component name denotes what GNU package the include file is
26980     part of, if any, in all uppercase letters.  For example, it might
26981     be 'GCC' or 'BINUTILS'.  If the package is part of a
26982     vendor-supplied operating system, code the component name as '0'.
26983
26984     For example, here is the definition used for VAX/VMS:
26985
26986          #define INCLUDE_DEFAULTS \
26987          {                                       \
26988            { "GNU_GXX_INCLUDE:", "G++", 1, 1},   \
26989            { "GNU_CC_INCLUDE:", "GCC", 0, 0},    \
26990            { "SYS$SYSROOT:[SYSLIB.]", 0, 0, 0},  \
26991            { ".", 0, 0, 0},                      \
26992            { 0, 0, 0, 0}                         \
26993          }
26994
26995 Here is the order of prefixes tried for exec files:
26996
26997  1. Any prefixes specified by the user with '-B'.
26998
26999  2. The environment variable 'GCC_EXEC_PREFIX' or, if 'GCC_EXEC_PREFIX'
27000     is not set and the compiler has not been installed in the
27001     configure-time PREFIX, the location in which the compiler has
27002     actually been installed.
27003
27004  3. The directories specified by the environment variable
27005     'COMPILER_PATH'.
27006
27007  4. The macro 'STANDARD_EXEC_PREFIX', if the compiler has been
27008     installed in the configured-time PREFIX.
27009
27010  5. The location '/usr/libexec/gcc/', but only if this is a native
27011     compiler.
27012
27013  6. The location '/usr/lib/gcc/', but only if this is a native
27014     compiler.
27015
27016  7. The macro 'MD_EXEC_PREFIX', if defined, but only if this is a
27017     native compiler.
27018
27019 Here is the order of prefixes tried for startfiles:
27020
27021  1. Any prefixes specified by the user with '-B'.
27022
27023  2. The environment variable 'GCC_EXEC_PREFIX' or its automatically
27024     determined value based on the installed toolchain location.
27025
27026  3. The directories specified by the environment variable
27027     'LIBRARY_PATH' (or port-specific name; native only, cross compilers
27028     do not use this).
27029
27030  4. The macro 'STANDARD_EXEC_PREFIX', but only if the toolchain is
27031     installed in the configured PREFIX or this is a native compiler.
27032
27033  5. The location '/usr/lib/gcc/', but only if this is a native
27034     compiler.
27035
27036  6. The macro 'MD_EXEC_PREFIX', if defined, but only if this is a
27037     native compiler.
27038
27039  7. The macro 'MD_STARTFILE_PREFIX', if defined, but only if this is a
27040     native compiler, or we have a target system root.
27041
27042  8. The macro 'MD_STARTFILE_PREFIX_1', if defined, but only if this is
27043     a native compiler, or we have a target system root.
27044
27045  9. The macro 'STANDARD_STARTFILE_PREFIX', with any sysroot
27046     modifications.  If this path is relative it will be prefixed by
27047     'GCC_EXEC_PREFIX' and the machine suffix or 'STANDARD_EXEC_PREFIX'
27048     and the machine suffix.
27049
27050  10. The macro 'STANDARD_STARTFILE_PREFIX_1', but only if this is a
27051     native compiler, or we have a target system root.  The default for
27052     this macro is '/lib/'.
27053
27054  11. The macro 'STANDARD_STARTFILE_PREFIX_2', but only if this is a
27055     native compiler, or we have a target system root.  The default for
27056     this macro is '/usr/lib/'.
27057
27058
27059File: gccint.info,  Node: Run-time Target,  Next: Per-Function Data,  Prev: Driver,  Up: Target Macros
27060
2706117.3 Run-time Target Specification
27062==================================
27063
27064Here are run-time target specifications.
27065
27066 -- Macro: TARGET_CPU_CPP_BUILTINS ()
27067     This function-like macro expands to a block of code that defines
27068     built-in preprocessor macros and assertions for the target CPU,
27069     using the functions 'builtin_define', 'builtin_define_std' and
27070     'builtin_assert'.  When the front end calls this macro it provides
27071     a trailing semicolon, and since it has finished command line option
27072     processing your code can use those results freely.
27073
27074     'builtin_assert' takes a string in the form you pass to the
27075     command-line option '-A', such as 'cpu=mips', and creates the
27076     assertion.  'builtin_define' takes a string in the form accepted by
27077     option '-D' and unconditionally defines the macro.
27078
27079     'builtin_define_std' takes a string representing the name of an
27080     object-like macro.  If it doesn't lie in the user's namespace,
27081     'builtin_define_std' defines it unconditionally.  Otherwise, it
27082     defines a version with two leading underscores, and another version
27083     with two leading and trailing underscores, and defines the original
27084     only if an ISO standard was not requested on the command line.  For
27085     example, passing 'unix' defines '__unix', '__unix__' and possibly
27086     'unix'; passing '_mips' defines '__mips', '__mips__' and possibly
27087     '_mips', and passing '_ABI64' defines only '_ABI64'.
27088
27089     You can also test for the C dialect being compiled.  The variable
27090     'c_language' is set to one of 'clk_c', 'clk_cplusplus' or
27091     'clk_objective_c'.  Note that if we are preprocessing assembler,
27092     this variable will be 'clk_c' but the function-like macro
27093     'preprocessing_asm_p()' will return true, so you might want to
27094     check for that first.  If you need to check for strict ANSI, the
27095     variable 'flag_iso' can be used.  The function-like macro
27096     'preprocessing_trad_p()' can be used to check for traditional
27097     preprocessing.
27098
27099 -- Macro: TARGET_OS_CPP_BUILTINS ()
27100     Similarly to 'TARGET_CPU_CPP_BUILTINS' but this macro is optional
27101     and is used for the target operating system instead.
27102
27103 -- Macro: TARGET_OBJFMT_CPP_BUILTINS ()
27104     Similarly to 'TARGET_CPU_CPP_BUILTINS' but this macro is optional
27105     and is used for the target object format.  'elfos.h' uses this
27106     macro to define '__ELF__', so you probably do not need to define it
27107     yourself.
27108
27109 -- Variable: extern int target_flags
27110     This variable is declared in 'options.h', which is included before
27111     any target-specific headers.
27112
27113 -- Common Target Hook: int TARGET_DEFAULT_TARGET_FLAGS
27114     This variable specifies the initial value of 'target_flags'.  Its
27115     default setting is 0.
27116
27117 -- Common Target Hook: bool TARGET_HANDLE_OPTION (struct gcc_options
27118          *OPTS, struct gcc_options *OPTS_SET, const struct
27119          cl_decoded_option *DECODED, location_t LOC)
27120     This hook is called whenever the user specifies one of the
27121     target-specific options described by the '.opt' definition files
27122     (*note Options::).  It has the opportunity to do some
27123     option-specific processing and should return true if the option is
27124     valid.  The default definition does nothing but return true.
27125
27126     DECODED specifies the option and its arguments.  OPTS and OPTS_SET
27127     are the 'gcc_options' structures to be used for storing option
27128     state, and LOC is the location at which the option was passed
27129     ('UNKNOWN_LOCATION' except for options passed via attributes).
27130
27131 -- C Target Hook: bool TARGET_HANDLE_C_OPTION (size_t CODE, const char
27132          *ARG, int VALUE)
27133     This target hook is called whenever the user specifies one of the
27134     target-specific C language family options described by the '.opt'
27135     definition files(*note Options::).  It has the opportunity to do
27136     some option-specific processing and should return true if the
27137     option is valid.  The arguments are like for
27138     'TARGET_HANDLE_OPTION'.  The default definition does nothing but
27139     return false.
27140
27141     In general, you should use 'TARGET_HANDLE_OPTION' to handle
27142     options.  However, if processing an option requires routines that
27143     are only available in the C (and related language) front ends, then
27144     you should use 'TARGET_HANDLE_C_OPTION' instead.
27145
27146 -- C Target Hook: tree TARGET_OBJC_CONSTRUCT_STRING_OBJECT (tree
27147          STRING)
27148     Targets may provide a string object type that can be used within
27149     and between C, C++ and their respective Objective-C dialects.  A
27150     string object might, for example, embed encoding and length
27151     information.  These objects are considered opaque to the compiler
27152     and handled as references.  An ideal implementation makes the
27153     composition of the string object match that of the Objective-C
27154     'NSString' ('NXString' for GNUStep), allowing efficient
27155     interworking between C-only and Objective-C code.  If a target
27156     implements string objects then this hook should return a reference
27157     to such an object constructed from the normal 'C' string
27158     representation provided in STRING.  At present, the hook is used by
27159     Objective-C only, to obtain a common-format string object when the
27160     target provides one.
27161
27162 -- C Target Hook: void TARGET_OBJC_DECLARE_UNRESOLVED_CLASS_REFERENCE
27163          (const char *CLASSNAME)
27164     Declare that Objective C class CLASSNAME is referenced by the
27165     current TU.
27166
27167 -- C Target Hook: void TARGET_OBJC_DECLARE_CLASS_DEFINITION (const char
27168          *CLASSNAME)
27169     Declare that Objective C class CLASSNAME is defined by the current
27170     TU.
27171
27172 -- C Target Hook: bool TARGET_STRING_OBJECT_REF_TYPE_P (const_tree
27173          STRINGREF)
27174     If a target implements string objects then this hook should return
27175     'true' if STRINGREF is a valid reference to such an object.
27176
27177 -- C Target Hook: void TARGET_CHECK_STRING_OBJECT_FORMAT_ARG (tree
27178          FORMAT_ARG, tree ARGS_LIST)
27179     If a target implements string objects then this hook should should
27180     provide a facility to check the function arguments in ARGS_LIST
27181     against the format specifiers in FORMAT_ARG where the type of
27182     FORMAT_ARG is one recognized as a valid string reference type.
27183
27184 -- Target Hook: void TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE (void)
27185     This target function is similar to the hook
27186     'TARGET_OPTION_OVERRIDE' but is called when the optimize level is
27187     changed via an attribute or pragma or when it is reset at the end
27188     of the code affected by the attribute or pragma.  It is not called
27189     at the beginning of compilation when 'TARGET_OPTION_OVERRIDE' is
27190     called so if you want to perform these actions then, you should
27191     have 'TARGET_OPTION_OVERRIDE' call
27192     'TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE'.
27193
27194 -- Macro: C_COMMON_OVERRIDE_OPTIONS
27195     This is similar to the 'TARGET_OPTION_OVERRIDE' hook but is only
27196     used in the C language frontends (C, Objective-C, C++,
27197     Objective-C++) and so can be used to alter option flag variables
27198     which only exist in those frontends.
27199
27200 -- Common Target Hook: const struct default_options *
27201          TARGET_OPTION_OPTIMIZATION_TABLE
27202     Some machines may desire to change what optimizations are performed
27203     for various optimization levels.  This variable, if defined,
27204     describes options to enable at particular sets of optimization
27205     levels.  These options are processed once just after the
27206     optimization level is determined and before the remainder of the
27207     command options have been parsed, so may be overridden by other
27208     options passed explicitly.
27209
27210     This processing is run once at program startup and when the
27211     optimization options are changed via '#pragma GCC optimize' or by
27212     using the 'optimize' attribute.
27213
27214 -- Common Target Hook: void TARGET_OPTION_INIT_STRUCT (struct
27215          gcc_options *OPTS)
27216     Set target-dependent initial values of fields in OPTS.
27217
27218 -- Common Target Hook: void TARGET_OPTION_DEFAULT_PARAMS (void)
27219     Set target-dependent default values for '--param' settings, using
27220     calls to 'set_default_param_value'.
27221
27222 -- Macro: SWITCHABLE_TARGET
27223     Some targets need to switch between substantially different
27224     subtargets during compilation.  For example, the MIPS target has
27225     one subtarget for the traditional MIPS architecture and another for
27226     MIPS16.  Source code can switch between these two subarchitectures
27227     using the 'mips16' and 'nomips16' attributes.
27228
27229     Such subtargets can differ in things like the set of available
27230     registers, the set of available instructions, the costs of various
27231     operations, and so on.  GCC caches a lot of this type of
27232     information in global variables, and recomputing them for each
27233     subtarget takes a significant amount of time.  The compiler
27234     therefore provides a facility for maintaining several versions of
27235     the global variables and quickly switching between them; see
27236     'target-globals.h' for details.
27237
27238     Define this macro to 1 if your target needs this facility.  The
27239     default is 0.
27240
27241
27242File: gccint.info,  Node: Per-Function Data,  Next: Storage Layout,  Prev: Run-time Target,  Up: Target Macros
27243
2724417.4 Defining data structures for per-function information.
27245===========================================================
27246
27247If the target needs to store information on a per-function basis, GCC
27248provides a macro and a couple of variables to allow this.  Note, just
27249using statics to store the information is a bad idea, since GCC supports
27250nested functions, so you can be halfway through encoding one function
27251when another one comes along.
27252
27253 GCC defines a data structure called 'struct function' which contains
27254all of the data specific to an individual function.  This structure
27255contains a field called 'machine' whose type is 'struct machine_function
27256*', which can be used by targets to point to their own specific data.
27257
27258 If a target needs per-function specific data it should define the type
27259'struct machine_function' and also the macro 'INIT_EXPANDERS'.  This
27260macro should be used to initialize the function pointer
27261'init_machine_status'.  This pointer is explained below.
27262
27263 One typical use of per-function, target specific data is to create an
27264RTX to hold the register containing the function's return address.  This
27265RTX can then be used to implement the '__builtin_return_address'
27266function, for level 0.
27267
27268 Note--earlier implementations of GCC used a single data area to hold
27269all of the per-function information.  Thus when processing of a nested
27270function began the old per-function data had to be pushed onto a stack,
27271and when the processing was finished, it had to be popped off the stack.
27272GCC used to provide function pointers called 'save_machine_status' and
27273'restore_machine_status' to handle the saving and restoring of the
27274target specific information.  Since the single data area approach is no
27275longer used, these pointers are no longer supported.
27276
27277 -- Macro: INIT_EXPANDERS
27278     Macro called to initialize any target specific information.  This
27279     macro is called once per function, before generation of any RTL has
27280     begun.  The intention of this macro is to allow the initialization
27281     of the function pointer 'init_machine_status'.
27282
27283 -- Variable: void (*)(struct function *) init_machine_status
27284     If this function pointer is non-'NULL' it will be called once per
27285     function, before function compilation starts, in order to allow the
27286     target to perform any target specific initialization of the 'struct
27287     function' structure.  It is intended that this would be used to
27288     initialize the 'machine' of that structure.
27289
27290     'struct machine_function' structures are expected to be freed by
27291     GC.  Generally, any memory that they reference must be allocated by
27292     using GC allocation, including the structure itself.
27293
27294
27295File: gccint.info,  Node: Storage Layout,  Next: Type Layout,  Prev: Per-Function Data,  Up: Target Macros
27296
2729717.5 Storage Layout
27298===================
27299
27300Note that the definitions of the macros in this table which are sizes or
27301alignments measured in bits do not need to be constant.  They can be C
27302expressions that refer to static variables, such as the 'target_flags'.
27303*Note Run-time Target::.
27304
27305 -- Macro: BITS_BIG_ENDIAN
27306     Define this macro to have the value 1 if the most significant bit
27307     in a byte has the lowest number; otherwise define it to have the
27308     value zero.  This means that bit-field instructions count from the
27309     most significant bit.  If the machine has no bit-field
27310     instructions, then this must still be defined, but it doesn't
27311     matter which value it is defined to.  This macro need not be a
27312     constant.
27313
27314     This macro does not affect the way structure fields are packed into
27315     bytes or words; that is controlled by 'BYTES_BIG_ENDIAN'.
27316
27317 -- Macro: BYTES_BIG_ENDIAN
27318     Define this macro to have the value 1 if the most significant byte
27319     in a word has the lowest number.  This macro need not be a
27320     constant.
27321
27322 -- Macro: WORDS_BIG_ENDIAN
27323     Define this macro to have the value 1 if, in a multiword object,
27324     the most significant word has the lowest number.  This applies to
27325     both memory locations and registers; see 'REG_WORDS_BIG_ENDIAN' if
27326     the order of words in memory is not the same as the order in
27327     registers.  This macro need not be a constant.
27328
27329 -- Macro: REG_WORDS_BIG_ENDIAN
27330     On some machines, the order of words in a multiword object differs
27331     between registers in memory.  In such a situation, define this
27332     macro to describe the order of words in a register.  The macro
27333     'WORDS_BIG_ENDIAN' controls the order of words in memory.
27334
27335 -- Macro: FLOAT_WORDS_BIG_ENDIAN
27336     Define this macro to have the value 1 if 'DFmode', 'XFmode' or
27337     'TFmode' floating point numbers are stored in memory with the word
27338     containing the sign bit at the lowest address; otherwise define it
27339     to have the value 0.  This macro need not be a constant.
27340
27341     You need not define this macro if the ordering is the same as for
27342     multi-word integers.
27343
27344 -- Macro: BITS_PER_UNIT
27345     Define this macro to be the number of bits in an addressable
27346     storage unit (byte).  If you do not define this macro the default
27347     is 8.
27348
27349 -- Macro: BITS_PER_WORD
27350     Number of bits in a word.  If you do not define this macro, the
27351     default is 'BITS_PER_UNIT * UNITS_PER_WORD'.
27352
27353 -- Macro: MAX_BITS_PER_WORD
27354     Maximum number of bits in a word.  If this is undefined, the
27355     default is 'BITS_PER_WORD'.  Otherwise, it is the constant value
27356     that is the largest value that 'BITS_PER_WORD' can have at
27357     run-time.
27358
27359 -- Macro: UNITS_PER_WORD
27360     Number of storage units in a word; normally the size of a
27361     general-purpose register, a power of two from 1 or 8.
27362
27363 -- Macro: MIN_UNITS_PER_WORD
27364     Minimum number of units in a word.  If this is undefined, the
27365     default is 'UNITS_PER_WORD'.  Otherwise, it is the constant value
27366     that is the smallest value that 'UNITS_PER_WORD' can have at
27367     run-time.
27368
27369 -- Macro: POINTER_SIZE
27370     Width of a pointer, in bits.  You must specify a value no wider
27371     than the width of 'Pmode'.  If it is not equal to the width of
27372     'Pmode', you must define 'POINTERS_EXTEND_UNSIGNED'.  If you do not
27373     specify a value the default is 'BITS_PER_WORD'.
27374
27375 -- Macro: POINTERS_EXTEND_UNSIGNED
27376     A C expression that determines how pointers should be extended from
27377     'ptr_mode' to either 'Pmode' or 'word_mode'.  It is greater than
27378     zero if pointers should be zero-extended, zero if they should be
27379     sign-extended, and negative if some other sort of conversion is
27380     needed.  In the last case, the extension is done by the target's
27381     'ptr_extend' instruction.
27382
27383     You need not define this macro if the 'ptr_mode', 'Pmode' and
27384     'word_mode' are all the same width.
27385
27386 -- Macro: PROMOTE_MODE (M, UNSIGNEDP, TYPE)
27387     A macro to update M and UNSIGNEDP when an object whose type is TYPE
27388     and which has the specified mode and signedness is to be stored in
27389     a register.  This macro is only called when TYPE is a scalar type.
27390
27391     On most RISC machines, which only have operations that operate on a
27392     full register, define this macro to set M to 'word_mode' if M is an
27393     integer mode narrower than 'BITS_PER_WORD'.  In most cases, only
27394     integer modes should be widened because wider-precision
27395     floating-point operations are usually more expensive than their
27396     narrower counterparts.
27397
27398     For most machines, the macro definition does not change UNSIGNEDP.
27399     However, some machines, have instructions that preferentially
27400     handle either signed or unsigned quantities of certain modes.  For
27401     example, on the DEC Alpha, 32-bit loads from memory and 32-bit add
27402     instructions sign-extend the result to 64 bits.  On such machines,
27403     set UNSIGNEDP according to which kind of extension is more
27404     efficient.
27405
27406     Do not define this macro if it would never modify M.
27407
27408 -- Target Hook: enum machine_mode TARGET_PROMOTE_FUNCTION_MODE
27409          (const_tree TYPE, enum machine_mode MODE, int *PUNSIGNEDP,
27410          const_tree FUNTYPE, int FOR_RETURN)
27411     Like 'PROMOTE_MODE', but it is applied to outgoing function
27412     arguments or function return values.  The target hook should return
27413     the new mode and possibly change '*PUNSIGNEDP' if the promotion
27414     should change signedness.  This function is called only for scalar
27415     _or pointer_ types.
27416
27417     FOR_RETURN allows to distinguish the promotion of arguments and
27418     return values.  If it is '1', a return value is being promoted and
27419     'TARGET_FUNCTION_VALUE' must perform the same promotions done here.
27420     If it is '2', the returned mode should be that of the register in
27421     which an incoming parameter is copied, or the outgoing result is
27422     computed; then the hook should return the same mode as
27423     'promote_mode', though the signedness may be different.
27424
27425     TYPE can be NULL when promoting function arguments of libcalls.
27426
27427     The default is to not promote arguments and return values.  You can
27428     also define the hook to
27429     'default_promote_function_mode_always_promote' if you would like to
27430     apply the same rules given by 'PROMOTE_MODE'.
27431
27432 -- Macro: PARM_BOUNDARY
27433     Normal alignment required for function parameters on the stack, in
27434     bits.  All stack parameters receive at least this much alignment
27435     regardless of data type.  On most machines, this is the same as the
27436     size of an integer.
27437
27438 -- Macro: STACK_BOUNDARY
27439     Define this macro to the minimum alignment enforced by hardware for
27440     the stack pointer on this machine.  The definition is a C
27441     expression for the desired alignment (measured in bits).  This
27442     value is used as a default if 'PREFERRED_STACK_BOUNDARY' is not
27443     defined.  On most machines, this should be the same as
27444     'PARM_BOUNDARY'.
27445
27446 -- Macro: PREFERRED_STACK_BOUNDARY
27447     Define this macro if you wish to preserve a certain alignment for
27448     the stack pointer, greater than what the hardware enforces.  The
27449     definition is a C expression for the desired alignment (measured in
27450     bits).  This macro must evaluate to a value equal to or larger than
27451     'STACK_BOUNDARY'.
27452
27453 -- Macro: INCOMING_STACK_BOUNDARY
27454     Define this macro if the incoming stack boundary may be different
27455     from 'PREFERRED_STACK_BOUNDARY'.  This macro must evaluate to a
27456     value equal to or larger than 'STACK_BOUNDARY'.
27457
27458 -- Macro: FUNCTION_BOUNDARY
27459     Alignment required for a function entry point, in bits.
27460
27461 -- Macro: BIGGEST_ALIGNMENT
27462     Biggest alignment that any data type can require on this machine,
27463     in bits.  Note that this is not the biggest alignment that is
27464     supported, just the biggest alignment that, when violated, may
27465     cause a fault.
27466
27467 -- Macro: MALLOC_ABI_ALIGNMENT
27468     Alignment, in bits, a C conformant malloc implementation has to
27469     provide.  If not defined, the default value is 'BITS_PER_WORD'.
27470
27471 -- Macro: ATTRIBUTE_ALIGNED_VALUE
27472     Alignment used by the '__attribute__ ((aligned))' construct.  If
27473     not defined, the default value is 'BIGGEST_ALIGNMENT'.
27474
27475 -- Macro: MINIMUM_ATOMIC_ALIGNMENT
27476     If defined, the smallest alignment, in bits, that can be given to
27477     an object that can be referenced in one operation, without
27478     disturbing any nearby object.  Normally, this is 'BITS_PER_UNIT',
27479     but may be larger on machines that don't have byte or half-word
27480     store operations.
27481
27482 -- Macro: BIGGEST_FIELD_ALIGNMENT
27483     Biggest alignment that any structure or union field can require on
27484     this machine, in bits.  If defined, this overrides
27485     'BIGGEST_ALIGNMENT' for structure and union fields only, unless the
27486     field alignment has been set by the '__attribute__ ((aligned (N)))'
27487     construct.
27488
27489 -- Macro: ADJUST_FIELD_ALIGN (FIELD, COMPUTED)
27490     An expression for the alignment of a structure field FIELD if the
27491     alignment computed in the usual way (including applying of
27492     'BIGGEST_ALIGNMENT' and 'BIGGEST_FIELD_ALIGNMENT' to the alignment)
27493     is COMPUTED.  It overrides alignment only if the field alignment
27494     has not been set by the '__attribute__ ((aligned (N)))' construct.
27495
27496 -- Macro: MAX_STACK_ALIGNMENT
27497     Biggest stack alignment guaranteed by the backend.  Use this macro
27498     to specify the maximum alignment of a variable on stack.
27499
27500     If not defined, the default value is 'STACK_BOUNDARY'.
27501
27502 -- Macro: MAX_OFILE_ALIGNMENT
27503     Biggest alignment supported by the object file format of this
27504     machine.  Use this macro to limit the alignment which can be
27505     specified using the '__attribute__ ((aligned (N)))' construct.  If
27506     not defined, the default value is 'BIGGEST_ALIGNMENT'.
27507
27508     On systems that use ELF, the default (in 'config/elfos.h') is the
27509     largest supported 32-bit ELF section alignment representable on a
27510     32-bit host e.g.  '(((unsigned HOST_WIDEST_INT) 1 << 28) * 8)'.  On
27511     32-bit ELF the largest supported section alignment in bits is
27512     '(0x80000000 * 8)', but this is not representable on 32-bit hosts.
27513
27514 -- Macro: DATA_ALIGNMENT (TYPE, BASIC-ALIGN)
27515     If defined, a C expression to compute the alignment for a variable
27516     in the static store.  TYPE is the data type, and BASIC-ALIGN is the
27517     alignment that the object would ordinarily have.  The value of this
27518     macro is used instead of that alignment to align the object.
27519
27520     If this macro is not defined, then BASIC-ALIGN is used.
27521
27522     One use of this macro is to increase alignment of medium-size data
27523     to make it all fit in fewer cache lines.  Another is to cause
27524     character arrays to be word-aligned so that 'strcpy' calls that
27525     copy constants to character arrays can be done inline.
27526
27527 -- Macro: CONSTANT_ALIGNMENT (CONSTANT, BASIC-ALIGN)
27528     If defined, a C expression to compute the alignment given to a
27529     constant that is being placed in memory.  CONSTANT is the constant
27530     and BASIC-ALIGN is the alignment that the object would ordinarily
27531     have.  The value of this macro is used instead of that alignment to
27532     align the object.
27533
27534     If this macro is not defined, then BASIC-ALIGN is used.
27535
27536     The typical use of this macro is to increase alignment for string
27537     constants to be word aligned so that 'strcpy' calls that copy
27538     constants can be done inline.
27539
27540 -- Macro: LOCAL_ALIGNMENT (TYPE, BASIC-ALIGN)
27541     If defined, a C expression to compute the alignment for a variable
27542     in the local store.  TYPE is the data type, and BASIC-ALIGN is the
27543     alignment that the object would ordinarily have.  The value of this
27544     macro is used instead of that alignment to align the object.
27545
27546     If this macro is not defined, then BASIC-ALIGN is used.
27547
27548     One use of this macro is to increase alignment of medium-size data
27549     to make it all fit in fewer cache lines.
27550
27551     If the value of this macro has a type, it should be an unsigned
27552     type.
27553
27554 -- Target Hook: HOST_WIDE_INT TARGET_VECTOR_ALIGNMENT (const_tree TYPE)
27555     This hook can be used to define the alignment for a vector of type
27556     TYPE, in order to comply with a platform ABI. The default is to
27557     require natural alignment for vector types.  The alignment returned
27558     by this hook must be a power-of-two multiple of the default
27559     alignment of the vector element type.
27560
27561 -- Macro: STACK_SLOT_ALIGNMENT (TYPE, MODE, BASIC-ALIGN)
27562     If defined, a C expression to compute the alignment for stack slot.
27563     TYPE is the data type, MODE is the widest mode available, and
27564     BASIC-ALIGN is the alignment that the slot would ordinarily have.
27565     The value of this macro is used instead of that alignment to align
27566     the slot.
27567
27568     If this macro is not defined, then BASIC-ALIGN is used when TYPE is
27569     'NULL'.  Otherwise, 'LOCAL_ALIGNMENT' will be used.
27570
27571     This macro is to set alignment of stack slot to the maximum
27572     alignment of all possible modes which the slot may have.
27573
27574     If the value of this macro has a type, it should be an unsigned
27575     type.
27576
27577 -- Macro: LOCAL_DECL_ALIGNMENT (DECL)
27578     If defined, a C expression to compute the alignment for a local
27579     variable DECL.
27580
27581     If this macro is not defined, then 'LOCAL_ALIGNMENT (TREE_TYPE
27582     (DECL), DECL_ALIGN (DECL))' is used.
27583
27584     One use of this macro is to increase alignment of medium-size data
27585     to make it all fit in fewer cache lines.
27586
27587     If the value of this macro has a type, it should be an unsigned
27588     type.
27589
27590 -- Macro: MINIMUM_ALIGNMENT (EXP, MODE, ALIGN)
27591     If defined, a C expression to compute the minimum required
27592     alignment for dynamic stack realignment purposes for EXP (a type or
27593     decl), MODE, assuming normal alignment ALIGN.
27594
27595     If this macro is not defined, then ALIGN will be used.
27596
27597 -- Macro: EMPTY_FIELD_BOUNDARY
27598     Alignment in bits to be given to a structure bit-field that follows
27599     an empty field such as 'int : 0;'.
27600
27601     If 'PCC_BITFIELD_TYPE_MATTERS' is true, it overrides this macro.
27602
27603 -- Macro: STRUCTURE_SIZE_BOUNDARY
27604     Number of bits which any structure or union's size must be a
27605     multiple of.  Each structure or union's size is rounded up to a
27606     multiple of this.
27607
27608     If you do not define this macro, the default is the same as
27609     'BITS_PER_UNIT'.
27610
27611 -- Macro: STRICT_ALIGNMENT
27612     Define this macro to be the value 1 if instructions will fail to
27613     work if given data not on the nominal alignment.  If instructions
27614     will merely go slower in that case, define this macro as 0.
27615
27616 -- Macro: PCC_BITFIELD_TYPE_MATTERS
27617     Define this if you wish to imitate the way many other C compilers
27618     handle alignment of bit-fields and the structures that contain
27619     them.
27620
27621     The behavior is that the type written for a named bit-field ('int',
27622     'short', or other integer type) imposes an alignment for the entire
27623     structure, as if the structure really did contain an ordinary field
27624     of that type.  In addition, the bit-field is placed within the
27625     structure so that it would fit within such a field, not crossing a
27626     boundary for it.
27627
27628     Thus, on most machines, a named bit-field whose type is written as
27629     'int' would not cross a four-byte boundary, and would force
27630     four-byte alignment for the whole structure.  (The alignment used
27631     may not be four bytes; it is controlled by the other alignment
27632     parameters.)
27633
27634     An unnamed bit-field will not affect the alignment of the
27635     containing structure.
27636
27637     If the macro is defined, its definition should be a C expression; a
27638     nonzero value for the expression enables this behavior.
27639
27640     Note that if this macro is not defined, or its value is zero, some
27641     bit-fields may cross more than one alignment boundary.  The
27642     compiler can support such references if there are 'insv', 'extv',
27643     and 'extzv' insns that can directly reference memory.
27644
27645     The other known way of making bit-fields work is to define
27646     'STRUCTURE_SIZE_BOUNDARY' as large as 'BIGGEST_ALIGNMENT'.  Then
27647     every structure can be accessed with fullwords.
27648
27649     Unless the machine has bit-field instructions or you define
27650     'STRUCTURE_SIZE_BOUNDARY' that way, you must define
27651     'PCC_BITFIELD_TYPE_MATTERS' to have a nonzero value.
27652
27653     If your aim is to make GCC use the same conventions for laying out
27654     bit-fields as are used by another compiler, here is how to
27655     investigate what the other compiler does.  Compile and run this
27656     program:
27657
27658          struct foo1
27659          {
27660            char x;
27661            char :0;
27662            char y;
27663          };
27664
27665          struct foo2
27666          {
27667            char x;
27668            int :0;
27669            char y;
27670          };
27671
27672          main ()
27673          {
27674            printf ("Size of foo1 is %d\n",
27675                    sizeof (struct foo1));
27676            printf ("Size of foo2 is %d\n",
27677                    sizeof (struct foo2));
27678            exit (0);
27679          }
27680
27681     If this prints 2 and 5, then the compiler's behavior is what you
27682     would get from 'PCC_BITFIELD_TYPE_MATTERS'.
27683
27684 -- Macro: BITFIELD_NBYTES_LIMITED
27685     Like 'PCC_BITFIELD_TYPE_MATTERS' except that its effect is limited
27686     to aligning a bit-field within the structure.
27687
27688 -- Target Hook: bool TARGET_ALIGN_ANON_BITFIELD (void)
27689     When 'PCC_BITFIELD_TYPE_MATTERS' is true this hook will determine
27690     whether unnamed bitfields affect the alignment of the containing
27691     structure.  The hook should return true if the structure should
27692     inherit the alignment requirements of an unnamed bitfield's type.
27693
27694 -- Target Hook: bool TARGET_NARROW_VOLATILE_BITFIELD (void)
27695     This target hook should return 'true' if accesses to volatile
27696     bitfields should use the narrowest mode possible.  It should return
27697     'false' if these accesses should use the bitfield container type.
27698
27699     The default is '!TARGET_STRICT_ALIGN'.
27700
27701 -- Target Hook: bool TARGET_MEMBER_TYPE_FORCES_BLK (const_tree FIELD,
27702          enum machine_mode MODE)
27703     Return true if a structure, union or array containing FIELD should
27704     be accessed using 'BLKMODE'.
27705
27706     If FIELD is the only field in the structure, MODE is its mode,
27707     otherwise MODE is VOIDmode.  MODE is provided in the case where
27708     structures of one field would require the structure's mode to
27709     retain the field's mode.
27710
27711     Normally, this is not needed.
27712
27713 -- Macro: ROUND_TYPE_ALIGN (TYPE, COMPUTED, SPECIFIED)
27714     Define this macro as an expression for the alignment of a type
27715     (given by TYPE as a tree node) if the alignment computed in the
27716     usual way is COMPUTED and the alignment explicitly specified was
27717     SPECIFIED.
27718
27719     The default is to use SPECIFIED if it is larger; otherwise, use the
27720     smaller of COMPUTED and 'BIGGEST_ALIGNMENT'
27721
27722 -- Macro: MAX_FIXED_MODE_SIZE
27723     An integer expression for the size in bits of the largest integer
27724     machine mode that should actually be used.  All integer machine
27725     modes of this size or smaller can be used for structures and unions
27726     with the appropriate sizes.  If this macro is undefined,
27727     'GET_MODE_BITSIZE (DImode)' is assumed.
27728
27729 -- Macro: STACK_SAVEAREA_MODE (SAVE_LEVEL)
27730     If defined, an expression of type 'enum machine_mode' that
27731     specifies the mode of the save area operand of a 'save_stack_LEVEL'
27732     named pattern (*note Standard Names::).  SAVE_LEVEL is one of
27733     'SAVE_BLOCK', 'SAVE_FUNCTION', or 'SAVE_NONLOCAL' and selects which
27734     of the three named patterns is having its mode specified.
27735
27736     You need not define this macro if it always returns 'Pmode'.  You
27737     would most commonly define this macro if the 'save_stack_LEVEL'
27738     patterns need to support both a 32- and a 64-bit mode.
27739
27740 -- Macro: STACK_SIZE_MODE
27741     If defined, an expression of type 'enum machine_mode' that
27742     specifies the mode of the size increment operand of an
27743     'allocate_stack' named pattern (*note Standard Names::).
27744
27745     You need not define this macro if it always returns 'word_mode'.
27746     You would most commonly define this macro if the 'allocate_stack'
27747     pattern needs to support both a 32- and a 64-bit mode.
27748
27749 -- Target Hook: enum machine_mode TARGET_LIBGCC_CMP_RETURN_MODE (void)
27750     This target hook should return the mode to be used for the return
27751     value of compare instructions expanded to libgcc calls.  If not
27752     defined 'word_mode' is returned which is the right choice for a
27753     majority of targets.
27754
27755 -- Target Hook: enum machine_mode TARGET_LIBGCC_SHIFT_COUNT_MODE (void)
27756     This target hook should return the mode to be used for the shift
27757     count operand of shift instructions expanded to libgcc calls.  If
27758     not defined 'word_mode' is returned which is the right choice for a
27759     majority of targets.
27760
27761 -- Target Hook: enum machine_mode TARGET_UNWIND_WORD_MODE (void)
27762     Return machine mode to be used for '_Unwind_Word' type.  The
27763     default is to use 'word_mode'.
27764
27765 -- Macro: ROUND_TOWARDS_ZERO
27766     If defined, this macro should be true if the prevailing rounding
27767     mode is towards zero.
27768
27769     Defining this macro only affects the way 'libgcc.a' emulates
27770     floating-point arithmetic.
27771
27772     Not defining this macro is equivalent to returning zero.
27773
27774 -- Macro: LARGEST_EXPONENT_IS_NORMAL (SIZE)
27775     This macro should return true if floats with SIZE bits do not have
27776     a NaN or infinity representation, but use the largest exponent for
27777     normal numbers instead.
27778
27779     Defining this macro only affects the way 'libgcc.a' emulates
27780     floating-point arithmetic.
27781
27782     The default definition of this macro returns false for all sizes.
27783
27784 -- Target Hook: bool TARGET_MS_BITFIELD_LAYOUT_P (const_tree
27785          RECORD_TYPE)
27786     This target hook returns 'true' if bit-fields in the given
27787     RECORD_TYPE are to be laid out following the rules of Microsoft
27788     Visual C/C++, namely: (i) a bit-field won't share the same storage
27789     unit with the previous bit-field if their underlying types have
27790     different sizes, and the bit-field will be aligned to the highest
27791     alignment of the underlying types of itself and of the previous
27792     bit-field; (ii) a zero-sized bit-field will affect the alignment of
27793     the whole enclosing structure, even if it is unnamed; except that
27794     (iii) a zero-sized bit-field will be disregarded unless it follows
27795     another bit-field of nonzero size.  If this hook returns 'true',
27796     other macros that control bit-field layout are ignored.
27797
27798     When a bit-field is inserted into a packed record, the whole size
27799     of the underlying type is used by one or more same-size adjacent
27800     bit-fields (that is, if its long:3, 32 bits is used in the record,
27801     and any additional adjacent long bit-fields are packed into the
27802     same chunk of 32 bits.  However, if the size changes, a new field
27803     of that size is allocated).  In an unpacked record, this is the
27804     same as using alignment, but not equivalent when packing.
27805
27806     If both MS bit-fields and '__attribute__((packed))' are used, the
27807     latter will take precedence.  If '__attribute__((packed))' is used
27808     on a single field when MS bit-fields are in use, it will take
27809     precedence for that field, but the alignment of the rest of the
27810     structure may affect its placement.
27811
27812 -- Target Hook: bool TARGET_DECIMAL_FLOAT_SUPPORTED_P (void)
27813     Returns true if the target supports decimal floating point.
27814
27815 -- Target Hook: bool TARGET_FIXED_POINT_SUPPORTED_P (void)
27816     Returns true if the target supports fixed-point arithmetic.
27817
27818 -- Target Hook: void TARGET_EXPAND_TO_RTL_HOOK (void)
27819     This hook is called just before expansion into rtl, allowing the
27820     target to perform additional initializations or analysis before the
27821     expansion.  For example, the rs6000 port uses it to allocate a
27822     scratch stack slot for use in copying SDmode values between memory
27823     and floating point registers whenever the function being expanded
27824     has any SDmode usage.
27825
27826 -- Target Hook: void TARGET_INSTANTIATE_DECLS (void)
27827     This hook allows the backend to perform additional instantiations
27828     on rtl that are not actually in any insns yet, but will be later.
27829
27830 -- Target Hook: const char * TARGET_MANGLE_TYPE (const_tree TYPE)
27831     If your target defines any fundamental types, or any types your
27832     target uses should be mangled differently from the default, define
27833     this hook to return the appropriate encoding for these types as
27834     part of a C++ mangled name.  The TYPE argument is the tree
27835     structure representing the type to be mangled.  The hook may be
27836     applied to trees which are not target-specific fundamental types;
27837     it should return 'NULL' for all such types, as well as arguments it
27838     does not recognize.  If the return value is not 'NULL', it must
27839     point to a statically-allocated string constant.
27840
27841     Target-specific fundamental types might be new fundamental types or
27842     qualified versions of ordinary fundamental types.  Encode new
27843     fundamental types as 'u N NAME', where NAME is the name used for
27844     the type in source code, and N is the length of NAME in decimal.
27845     Encode qualified versions of ordinary types as 'U N NAME CODE',
27846     where NAME is the name used for the type qualifier in source code,
27847     N is the length of NAME as above, and CODE is the code used to
27848     represent the unqualified version of this type.  (See
27849     'write_builtin_type' in 'cp/mangle.c' for the list of codes.)  In
27850     both cases the spaces are for clarity; do not include any spaces in
27851     your string.
27852
27853     This hook is applied to types prior to typedef resolution.  If the
27854     mangled name for a particular type depends only on that type's main
27855     variant, you can perform typedef resolution yourself using
27856     'TYPE_MAIN_VARIANT' before mangling.
27857
27858     The default version of this hook always returns 'NULL', which is
27859     appropriate for a target that does not define any new fundamental
27860     types.
27861
27862
27863File: gccint.info,  Node: Type Layout,  Next: Registers,  Prev: Storage Layout,  Up: Target Macros
27864
2786517.6 Layout of Source Language Data Types
27866=========================================
27867
27868These macros define the sizes and other characteristics of the standard
27869basic data types used in programs being compiled.  Unlike the macros in
27870the previous section, these apply to specific features of C and related
27871languages, rather than to fundamental aspects of storage layout.
27872
27873 -- Macro: INT_TYPE_SIZE
27874     A C expression for the size in bits of the type 'int' on the target
27875     machine.  If you don't define this, the default is one word.
27876
27877 -- Macro: SHORT_TYPE_SIZE
27878     A C expression for the size in bits of the type 'short' on the
27879     target machine.  If you don't define this, the default is half a
27880     word.  (If this would be less than one storage unit, it is rounded
27881     up to one unit.)
27882
27883 -- Macro: LONG_TYPE_SIZE
27884     A C expression for the size in bits of the type 'long' on the
27885     target machine.  If you don't define this, the default is one word.
27886
27887 -- Macro: ADA_LONG_TYPE_SIZE
27888     On some machines, the size used for the Ada equivalent of the type
27889     'long' by a native Ada compiler differs from that used by C.  In
27890     that situation, define this macro to be a C expression to be used
27891     for the size of that type.  If you don't define this, the default
27892     is the value of 'LONG_TYPE_SIZE'.
27893
27894 -- Macro: LONG_LONG_TYPE_SIZE
27895     A C expression for the size in bits of the type 'long long' on the
27896     target machine.  If you don't define this, the default is two
27897     words.  If you want to support GNU Ada on your machine, the value
27898     of this macro must be at least 64.
27899
27900 -- Macro: CHAR_TYPE_SIZE
27901     A C expression for the size in bits of the type 'char' on the
27902     target machine.  If you don't define this, the default is
27903     'BITS_PER_UNIT'.
27904
27905 -- Macro: BOOL_TYPE_SIZE
27906     A C expression for the size in bits of the C++ type 'bool' and C99
27907     type '_Bool' on the target machine.  If you don't define this, and
27908     you probably shouldn't, the default is 'CHAR_TYPE_SIZE'.
27909
27910 -- Macro: FLOAT_TYPE_SIZE
27911     A C expression for the size in bits of the type 'float' on the
27912     target machine.  If you don't define this, the default is one word.
27913
27914 -- Macro: DOUBLE_TYPE_SIZE
27915     A C expression for the size in bits of the type 'double' on the
27916     target machine.  If you don't define this, the default is two
27917     words.
27918
27919 -- Macro: LONG_DOUBLE_TYPE_SIZE
27920     A C expression for the size in bits of the type 'long double' on
27921     the target machine.  If you don't define this, the default is two
27922     words.
27923
27924 -- Macro: SHORT_FRACT_TYPE_SIZE
27925     A C expression for the size in bits of the type 'short _Fract' on
27926     the target machine.  If you don't define this, the default is
27927     'BITS_PER_UNIT'.
27928
27929 -- Macro: FRACT_TYPE_SIZE
27930     A C expression for the size in bits of the type '_Fract' on the
27931     target machine.  If you don't define this, the default is
27932     'BITS_PER_UNIT * 2'.
27933
27934 -- Macro: LONG_FRACT_TYPE_SIZE
27935     A C expression for the size in bits of the type 'long _Fract' on
27936     the target machine.  If you don't define this, the default is
27937     'BITS_PER_UNIT * 4'.
27938
27939 -- Macro: LONG_LONG_FRACT_TYPE_SIZE
27940     A C expression for the size in bits of the type 'long long _Fract'
27941     on the target machine.  If you don't define this, the default is
27942     'BITS_PER_UNIT * 8'.
27943
27944 -- Macro: SHORT_ACCUM_TYPE_SIZE
27945     A C expression for the size in bits of the type 'short _Accum' on
27946     the target machine.  If you don't define this, the default is
27947     'BITS_PER_UNIT * 2'.
27948
27949 -- Macro: ACCUM_TYPE_SIZE
27950     A C expression for the size in bits of the type '_Accum' on the
27951     target machine.  If you don't define this, the default is
27952     'BITS_PER_UNIT * 4'.
27953
27954 -- Macro: LONG_ACCUM_TYPE_SIZE
27955     A C expression for the size in bits of the type 'long _Accum' on
27956     the target machine.  If you don't define this, the default is
27957     'BITS_PER_UNIT * 8'.
27958
27959 -- Macro: LONG_LONG_ACCUM_TYPE_SIZE
27960     A C expression for the size in bits of the type 'long long _Accum'
27961     on the target machine.  If you don't define this, the default is
27962     'BITS_PER_UNIT * 16'.
27963
27964 -- Macro: LIBGCC2_LONG_DOUBLE_TYPE_SIZE
27965     Define this macro if 'LONG_DOUBLE_TYPE_SIZE' is not constant or if
27966     you want routines in 'libgcc2.a' for a size other than
27967     'LONG_DOUBLE_TYPE_SIZE'.  If you don't define this, the default is
27968     'LONG_DOUBLE_TYPE_SIZE'.
27969
27970 -- Macro: LIBGCC2_HAS_DF_MODE
27971     Define this macro if neither 'DOUBLE_TYPE_SIZE' nor
27972     'LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is 'DFmode' but you want 'DFmode'
27973     routines in 'libgcc2.a' anyway.  If you don't define this and
27974     either 'DOUBLE_TYPE_SIZE' or 'LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is 64
27975     then the default is 1, otherwise it is 0.
27976
27977 -- Macro: LIBGCC2_HAS_XF_MODE
27978     Define this macro if 'LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is not
27979     'XFmode' but you want 'XFmode' routines in 'libgcc2.a' anyway.  If
27980     you don't define this and 'LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is 80
27981     then the default is 1, otherwise it is 0.
27982
27983 -- Macro: LIBGCC2_HAS_TF_MODE
27984     Define this macro if 'LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is not
27985     'TFmode' but you want 'TFmode' routines in 'libgcc2.a' anyway.  If
27986     you don't define this and 'LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is 128
27987     then the default is 1, otherwise it is 0.
27988
27989 -- Macro: LIBGCC2_GNU_PREFIX
27990     This macro corresponds to the 'TARGET_LIBFUNC_GNU_PREFIX' target
27991     hook and should be defined if that hook is overriden to be true.
27992     It causes function names in libgcc to be changed to use a '__gnu_'
27993     prefix for their name rather than the default '__'.  A port which
27994     uses this macro should also arrange to use 't-gnu-prefix' in the
27995     libgcc 'config.host'.
27996
27997 -- Macro: SF_SIZE
27998 -- Macro: DF_SIZE
27999 -- Macro: XF_SIZE
28000 -- Macro: TF_SIZE
28001     Define these macros to be the size in bits of the mantissa of
28002     'SFmode', 'DFmode', 'XFmode' and 'TFmode' values, if the defaults
28003     in 'libgcc2.h' are inappropriate.  By default, 'FLT_MANT_DIG' is
28004     used for 'SF_SIZE', 'LDBL_MANT_DIG' for 'XF_SIZE' and 'TF_SIZE',
28005     and 'DBL_MANT_DIG' or 'LDBL_MANT_DIG' for 'DF_SIZE' according to
28006     whether 'DOUBLE_TYPE_SIZE' or 'LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is
28007     64.
28008
28009 -- Macro: TARGET_FLT_EVAL_METHOD
28010     A C expression for the value for 'FLT_EVAL_METHOD' in 'float.h',
28011     assuming, if applicable, that the floating-point control word is in
28012     its default state.  If you do not define this macro the value of
28013     'FLT_EVAL_METHOD' will be zero.
28014
28015 -- Macro: WIDEST_HARDWARE_FP_SIZE
28016     A C expression for the size in bits of the widest floating-point
28017     format supported by the hardware.  If you define this macro, you
28018     must specify a value less than or equal to the value of
28019     'LONG_DOUBLE_TYPE_SIZE'.  If you do not define this macro, the
28020     value of 'LONG_DOUBLE_TYPE_SIZE' is the default.
28021
28022 -- Macro: DEFAULT_SIGNED_CHAR
28023     An expression whose value is 1 or 0, according to whether the type
28024     'char' should be signed or unsigned by default.  The user can
28025     always override this default with the options '-fsigned-char' and
28026     '-funsigned-char'.
28027
28028 -- Target Hook: bool TARGET_DEFAULT_SHORT_ENUMS (void)
28029     This target hook should return true if the compiler should give an
28030     'enum' type only as many bytes as it takes to represent the range
28031     of possible values of that type.  It should return false if all
28032     'enum' types should be allocated like 'int'.
28033
28034     The default is to return false.
28035
28036 -- Macro: SIZE_TYPE
28037     A C expression for a string describing the name of the data type to
28038     use for size values.  The typedef name 'size_t' is defined using
28039     the contents of the string.
28040
28041     The string can contain more than one keyword.  If so, separate them
28042     with spaces, and write first any length keyword, then 'unsigned' if
28043     appropriate, and finally 'int'.  The string must exactly match one
28044     of the data type names defined in the function
28045     'c_common_nodes_and_builtins' in the file 'c-family/c-common.c'.
28046     You may not omit 'int' or change the order--that would cause the
28047     compiler to crash on startup.
28048
28049     If you don't define this macro, the default is '"long unsigned
28050     int"'.
28051
28052 -- Macro: SIZETYPE
28053     GCC defines internal types ('sizetype', 'ssizetype', 'bitsizetype'
28054     and 'sbitsizetype') for expressions dealing with size.  This macro
28055     is a C expression for a string describing the name of the data type
28056     from which the precision of 'sizetype' is extracted.
28057
28058     The string has the same restrictions as 'SIZE_TYPE' string.
28059
28060     If you don't define this macro, the default is 'SIZE_TYPE'.
28061
28062 -- Macro: PTRDIFF_TYPE
28063     A C expression for a string describing the name of the data type to
28064     use for the result of subtracting two pointers.  The typedef name
28065     'ptrdiff_t' is defined using the contents of the string.  See
28066     'SIZE_TYPE' above for more information.
28067
28068     If you don't define this macro, the default is '"long int"'.
28069
28070 -- Macro: WCHAR_TYPE
28071     A C expression for a string describing the name of the data type to
28072     use for wide characters.  The typedef name 'wchar_t' is defined
28073     using the contents of the string.  See 'SIZE_TYPE' above for more
28074     information.
28075
28076     If you don't define this macro, the default is '"int"'.
28077
28078 -- Macro: WCHAR_TYPE_SIZE
28079     A C expression for the size in bits of the data type for wide
28080     characters.  This is used in 'cpp', which cannot make use of
28081     'WCHAR_TYPE'.
28082
28083 -- Macro: WINT_TYPE
28084     A C expression for a string describing the name of the data type to
28085     use for wide characters passed to 'printf' and returned from
28086     'getwc'.  The typedef name 'wint_t' is defined using the contents
28087     of the string.  See 'SIZE_TYPE' above for more information.
28088
28089     If you don't define this macro, the default is '"unsigned int"'.
28090
28091 -- Macro: INTMAX_TYPE
28092     A C expression for a string describing the name of the data type
28093     that can represent any value of any standard or extended signed
28094     integer type.  The typedef name 'intmax_t' is defined using the
28095     contents of the string.  See 'SIZE_TYPE' above for more
28096     information.
28097
28098     If you don't define this macro, the default is the first of
28099     '"int"', '"long int"', or '"long long int"' that has as much
28100     precision as 'long long int'.
28101
28102 -- Macro: UINTMAX_TYPE
28103     A C expression for a string describing the name of the data type
28104     that can represent any value of any standard or extended unsigned
28105     integer type.  The typedef name 'uintmax_t' is defined using the
28106     contents of the string.  See 'SIZE_TYPE' above for more
28107     information.
28108
28109     If you don't define this macro, the default is the first of
28110     '"unsigned int"', '"long unsigned int"', or '"long long unsigned
28111     int"' that has as much precision as 'long long unsigned int'.
28112
28113 -- Macro: SIG_ATOMIC_TYPE
28114 -- Macro: INT8_TYPE
28115 -- Macro: INT16_TYPE
28116 -- Macro: INT32_TYPE
28117 -- Macro: INT64_TYPE
28118 -- Macro: UINT8_TYPE
28119 -- Macro: UINT16_TYPE
28120 -- Macro: UINT32_TYPE
28121 -- Macro: UINT64_TYPE
28122 -- Macro: INT_LEAST8_TYPE
28123 -- Macro: INT_LEAST16_TYPE
28124 -- Macro: INT_LEAST32_TYPE
28125 -- Macro: INT_LEAST64_TYPE
28126 -- Macro: UINT_LEAST8_TYPE
28127 -- Macro: UINT_LEAST16_TYPE
28128 -- Macro: UINT_LEAST32_TYPE
28129 -- Macro: UINT_LEAST64_TYPE
28130 -- Macro: INT_FAST8_TYPE
28131 -- Macro: INT_FAST16_TYPE
28132 -- Macro: INT_FAST32_TYPE
28133 -- Macro: INT_FAST64_TYPE
28134 -- Macro: UINT_FAST8_TYPE
28135 -- Macro: UINT_FAST16_TYPE
28136 -- Macro: UINT_FAST32_TYPE
28137 -- Macro: UINT_FAST64_TYPE
28138 -- Macro: INTPTR_TYPE
28139 -- Macro: UINTPTR_TYPE
28140     C expressions for the standard types 'sig_atomic_t', 'int8_t',
28141     'int16_t', 'int32_t', 'int64_t', 'uint8_t', 'uint16_t', 'uint32_t',
28142     'uint64_t', 'int_least8_t', 'int_least16_t', 'int_least32_t',
28143     'int_least64_t', 'uint_least8_t', 'uint_least16_t',
28144     'uint_least32_t', 'uint_least64_t', 'int_fast8_t', 'int_fast16_t',
28145     'int_fast32_t', 'int_fast64_t', 'uint_fast8_t', 'uint_fast16_t',
28146     'uint_fast32_t', 'uint_fast64_t', 'intptr_t', and 'uintptr_t'.  See
28147     'SIZE_TYPE' above for more information.
28148
28149     If any of these macros evaluates to a null pointer, the
28150     corresponding type is not supported; if GCC is configured to
28151     provide '<stdint.h>' in such a case, the header provided may not
28152     conform to C99, depending on the type in question.  The defaults
28153     for all of these macros are null pointers.
28154
28155 -- Macro: TARGET_PTRMEMFUNC_VBIT_LOCATION
28156     The C++ compiler represents a pointer-to-member-function with a
28157     struct that looks like:
28158
28159            struct {
28160              union {
28161                void (*fn)();
28162                ptrdiff_t vtable_index;
28163              };
28164              ptrdiff_t delta;
28165            };
28166
28167     The C++ compiler must use one bit to indicate whether the function
28168     that will be called through a pointer-to-member-function is
28169     virtual.  Normally, we assume that the low-order bit of a function
28170     pointer must always be zero.  Then, by ensuring that the
28171     vtable_index is odd, we can distinguish which variant of the union
28172     is in use.  But, on some platforms function pointers can be odd,
28173     and so this doesn't work.  In that case, we use the low-order bit
28174     of the 'delta' field, and shift the remainder of the 'delta' field
28175     to the left.
28176
28177     GCC will automatically make the right selection about where to
28178     store this bit using the 'FUNCTION_BOUNDARY' setting for your
28179     platform.  However, some platforms such as ARM/Thumb have
28180     'FUNCTION_BOUNDARY' set such that functions always start at even
28181     addresses, but the lowest bit of pointers to functions indicate
28182     whether the function at that address is in ARM or Thumb mode.  If
28183     this is the case of your architecture, you should define this macro
28184     to 'ptrmemfunc_vbit_in_delta'.
28185
28186     In general, you should not have to define this macro.  On
28187     architectures in which function addresses are always even,
28188     according to 'FUNCTION_BOUNDARY', GCC will automatically define
28189     this macro to 'ptrmemfunc_vbit_in_pfn'.
28190
28191 -- Macro: TARGET_VTABLE_USES_DESCRIPTORS
28192     Normally, the C++ compiler uses function pointers in vtables.  This
28193     macro allows the target to change to use "function descriptors"
28194     instead.  Function descriptors are found on targets for whom a
28195     function pointer is actually a small data structure.  Normally the
28196     data structure consists of the actual code address plus a data
28197     pointer to which the function's data is relative.
28198
28199     If vtables are used, the value of this macro should be the number
28200     of words that the function descriptor occupies.
28201
28202 -- Macro: TARGET_VTABLE_ENTRY_ALIGN
28203     By default, the vtable entries are void pointers, the so the
28204     alignment is the same as pointer alignment.  The value of this
28205     macro specifies the alignment of the vtable entry in bits.  It
28206     should be defined only when special alignment is necessary.  */
28207
28208 -- Macro: TARGET_VTABLE_DATA_ENTRY_DISTANCE
28209     There are a few non-descriptor entries in the vtable at offsets
28210     below zero.  If these entries must be padded (say, to preserve the
28211     alignment specified by 'TARGET_VTABLE_ENTRY_ALIGN'), set this to
28212     the number of words in each data entry.
28213
28214
28215File: gccint.info,  Node: Registers,  Next: Register Classes,  Prev: Type Layout,  Up: Target Macros
28216
2821717.7 Register Usage
28218===================
28219
28220This section explains how to describe what registers the target machine
28221has, and how (in general) they can be used.
28222
28223 The description of which registers a specific instruction can use is
28224done with register classes; see *note Register Classes::.  For
28225information on using registers to access a stack frame, see *note Frame
28226Registers::.  For passing values in registers, see *note Register
28227Arguments::.  For returning values in registers, see *note Scalar
28228Return::.
28229
28230* Menu:
28231
28232* Register Basics::             Number and kinds of registers.
28233* Allocation Order::            Order in which registers are allocated.
28234* Values in Registers::         What kinds of values each reg can hold.
28235* Leaf Functions::              Renumbering registers for leaf functions.
28236* Stack Registers::             Handling a register stack such as 80387.
28237
28238
28239File: gccint.info,  Node: Register Basics,  Next: Allocation Order,  Up: Registers
28240
2824117.7.1 Basic Characteristics of Registers
28242-----------------------------------------
28243
28244Registers have various characteristics.
28245
28246 -- Macro: FIRST_PSEUDO_REGISTER
28247     Number of hardware registers known to the compiler.  They receive
28248     numbers 0 through 'FIRST_PSEUDO_REGISTER-1'; thus, the first pseudo
28249     register's number really is assigned the number
28250     'FIRST_PSEUDO_REGISTER'.
28251
28252 -- Macro: FIXED_REGISTERS
28253     An initializer that says which registers are used for fixed
28254     purposes all throughout the compiled code and are therefore not
28255     available for general allocation.  These would include the stack
28256     pointer, the frame pointer (except on machines where that can be
28257     used as a general register when no frame pointer is needed), the
28258     program counter on machines where that is considered one of the
28259     addressable registers, and any other numbered register with a
28260     standard use.
28261
28262     This information is expressed as a sequence of numbers, separated
28263     by commas and surrounded by braces.  The Nth number is 1 if
28264     register N is fixed, 0 otherwise.
28265
28266     The table initialized from this macro, and the table initialized by
28267     the following one, may be overridden at run time either
28268     automatically, by the actions of the macro
28269     'CONDITIONAL_REGISTER_USAGE', or by the user with the command
28270     options '-ffixed-REG', '-fcall-used-REG' and '-fcall-saved-REG'.
28271
28272 -- Macro: CALL_USED_REGISTERS
28273     Like 'FIXED_REGISTERS' but has 1 for each register that is
28274     clobbered (in general) by function calls as well as for fixed
28275     registers.  This macro therefore identifies the registers that are
28276     not available for general allocation of values that must live
28277     across function calls.
28278
28279     If a register has 0 in 'CALL_USED_REGISTERS', the compiler
28280     automatically saves it on function entry and restores it on
28281     function exit, if the register is used within the function.
28282
28283 -- Macro: CALL_REALLY_USED_REGISTERS
28284     Like 'CALL_USED_REGISTERS' except this macro doesn't require that
28285     the entire set of 'FIXED_REGISTERS' be included.
28286     ('CALL_USED_REGISTERS' must be a superset of 'FIXED_REGISTERS').
28287     This macro is optional.  If not specified, it defaults to the value
28288     of 'CALL_USED_REGISTERS'.
28289
28290 -- Macro: HARD_REGNO_CALL_PART_CLOBBERED (REGNO, MODE)
28291     A C expression that is nonzero if it is not permissible to store a
28292     value of mode MODE in hard register number REGNO across a call
28293     without some part of it being clobbered.  For most machines this
28294     macro need not be defined.  It is only required for machines that
28295     do not preserve the entire contents of a register across a call.
28296
28297 -- Target Hook: void TARGET_CONDITIONAL_REGISTER_USAGE (void)
28298     This hook may conditionally modify five variables 'fixed_regs',
28299     'call_used_regs', 'global_regs', 'reg_names', and
28300     'reg_class_contents', to take into account any dependence of these
28301     register sets on target flags.  The first three of these are of
28302     type 'char []' (interpreted as Boolean vectors).  'global_regs' is
28303     a 'const char *[]', and 'reg_class_contents' is a 'HARD_REG_SET'.
28304     Before the macro is called, 'fixed_regs', 'call_used_regs',
28305     'reg_class_contents', and 'reg_names' have been initialized from
28306     'FIXED_REGISTERS', 'CALL_USED_REGISTERS', 'REG_CLASS_CONTENTS', and
28307     'REGISTER_NAMES', respectively.  'global_regs' has been cleared,
28308     and any '-ffixed-REG', '-fcall-used-REG' and '-fcall-saved-REG'
28309     command options have been applied.
28310
28311     If the usage of an entire class of registers depends on the target
28312     flags, you may indicate this to GCC by using this macro to modify
28313     'fixed_regs' and 'call_used_regs' to 1 for each of the registers in
28314     the classes which should not be used by GCC.  Also define the macro
28315     'REG_CLASS_FROM_LETTER' / 'REG_CLASS_FROM_CONSTRAINT' to return
28316     'NO_REGS' if it is called with a letter for a class that shouldn't
28317     be used.
28318
28319     (However, if this class is not included in 'GENERAL_REGS' and all
28320     of the insn patterns whose constraints permit this class are
28321     controlled by target switches, then GCC will automatically avoid
28322     using these registers when the target switches are opposed to
28323     them.)
28324
28325 -- Macro: INCOMING_REGNO (OUT)
28326     Define this macro if the target machine has register windows.  This
28327     C expression returns the register number as seen by the called
28328     function corresponding to the register number OUT as seen by the
28329     calling function.  Return OUT if register number OUT is not an
28330     outbound register.
28331
28332 -- Macro: OUTGOING_REGNO (IN)
28333     Define this macro if the target machine has register windows.  This
28334     C expression returns the register number as seen by the calling
28335     function corresponding to the register number IN as seen by the
28336     called function.  Return IN if register number IN is not an inbound
28337     register.
28338
28339 -- Macro: LOCAL_REGNO (REGNO)
28340     Define this macro if the target machine has register windows.  This
28341     C expression returns true if the register is call-saved but is in
28342     the register window.  Unlike most call-saved registers, such
28343     registers need not be explicitly restored on function exit or
28344     during non-local gotos.
28345
28346 -- Macro: PC_REGNUM
28347     If the program counter has a register number, define this as that
28348     register number.  Otherwise, do not define it.
28349
28350
28351File: gccint.info,  Node: Allocation Order,  Next: Values in Registers,  Prev: Register Basics,  Up: Registers
28352
2835317.7.2 Order of Allocation of Registers
28354---------------------------------------
28355
28356Registers are allocated in order.
28357
28358 -- Macro: REG_ALLOC_ORDER
28359     If defined, an initializer for a vector of integers, containing the
28360     numbers of hard registers in the order in which GCC should prefer
28361     to use them (from most preferred to least).
28362
28363     If this macro is not defined, registers are used lowest numbered
28364     first (all else being equal).
28365
28366     One use of this macro is on machines where the highest numbered
28367     registers must always be saved and the save-multiple-registers
28368     instruction supports only sequences of consecutive registers.  On
28369     such machines, define 'REG_ALLOC_ORDER' to be an initializer that
28370     lists the highest numbered allocable register first.
28371
28372 -- Macro: ADJUST_REG_ALLOC_ORDER
28373     A C statement (sans semicolon) to choose the order in which to
28374     allocate hard registers for pseudo-registers local to a basic
28375     block.
28376
28377     Store the desired register order in the array 'reg_alloc_order'.
28378     Element 0 should be the register to allocate first; element 1, the
28379     next register; and so on.
28380
28381     The macro body should not assume anything about the contents of
28382     'reg_alloc_order' before execution of the macro.
28383
28384     On most machines, it is not necessary to define this macro.
28385
28386 -- Macro: HONOR_REG_ALLOC_ORDER
28387     Normally, IRA tries to estimate the costs for saving a register in
28388     the prologue and restoring it in the epilogue.  This discourages it
28389     from using call-saved registers.  If a machine wants to ensure that
28390     IRA allocates registers in the order given by REG_ALLOC_ORDER even
28391     if some call-saved registers appear earlier than call-used ones,
28392     this macro should be defined.
28393
28394 -- Macro: IRA_HARD_REGNO_ADD_COST_MULTIPLIER (REGNO)
28395     In some case register allocation order is not enough for the
28396     Integrated Register Allocator (IRA) to generate a good code.  If
28397     this macro is defined, it should return a floating point value
28398     based on REGNO.  The cost of using REGNO for a pseudo will be
28399     increased by approximately the pseudo's usage frequency times the
28400     value returned by this macro.  Not defining this macro is
28401     equivalent to having it always return '0.0'.
28402
28403     On most machines, it is not necessary to define this macro.
28404
28405
28406File: gccint.info,  Node: Values in Registers,  Next: Leaf Functions,  Prev: Allocation Order,  Up: Registers
28407
2840817.7.3 How Values Fit in Registers
28409----------------------------------
28410
28411This section discusses the macros that describe which kinds of values
28412(specifically, which machine modes) each register can hold, and how many
28413consecutive registers are needed for a given mode.
28414
28415 -- Macro: HARD_REGNO_NREGS (REGNO, MODE)
28416     A C expression for the number of consecutive hard registers,
28417     starting at register number REGNO, required to hold a value of mode
28418     MODE.  This macro must never return zero, even if a register cannot
28419     hold the requested mode - indicate that with HARD_REGNO_MODE_OK
28420     and/or CANNOT_CHANGE_MODE_CLASS instead.
28421
28422     On a machine where all registers are exactly one word, a suitable
28423     definition of this macro is
28424
28425          #define HARD_REGNO_NREGS(REGNO, MODE)            \
28426             ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1)  \
28427              / UNITS_PER_WORD)
28428
28429 -- Macro: HARD_REGNO_NREGS_HAS_PADDING (REGNO, MODE)
28430     A C expression that is nonzero if a value of mode MODE, stored in
28431     memory, ends with padding that causes it to take up more space than
28432     in registers starting at register number REGNO (as determined by
28433     multiplying GCC's notion of the size of the register when
28434     containing this mode by the number of registers returned by
28435     'HARD_REGNO_NREGS').  By default this is zero.
28436
28437     For example, if a floating-point value is stored in three 32-bit
28438     registers but takes up 128 bits in memory, then this would be
28439     nonzero.
28440
28441     This macros only needs to be defined if there are cases where
28442     'subreg_get_info' would otherwise wrongly determine that a 'subreg'
28443     can be represented by an offset to the register number, when in
28444     fact such a 'subreg' would contain some of the padding not stored
28445     in registers and so not be representable.
28446
28447 -- Macro: HARD_REGNO_NREGS_WITH_PADDING (REGNO, MODE)
28448     For values of REGNO and MODE for which
28449     'HARD_REGNO_NREGS_HAS_PADDING' returns nonzero, a C expression
28450     returning the greater number of registers required to hold the
28451     value including any padding.  In the example above, the value would
28452     be four.
28453
28454 -- Macro: REGMODE_NATURAL_SIZE (MODE)
28455     Define this macro if the natural size of registers that hold values
28456     of mode MODE is not the word size.  It is a C expression that
28457     should give the natural size in bytes for the specified mode.  It
28458     is used by the register allocator to try to optimize its results.
28459     This happens for example on SPARC 64-bit where the natural size of
28460     floating-point registers is still 32-bit.
28461
28462 -- Macro: HARD_REGNO_MODE_OK (REGNO, MODE)
28463     A C expression that is nonzero if it is permissible to store a
28464     value of mode MODE in hard register number REGNO (or in several
28465     registers starting with that one).  For a machine where all
28466     registers are equivalent, a suitable definition is
28467
28468          #define HARD_REGNO_MODE_OK(REGNO, MODE) 1
28469
28470     You need not include code to check for the numbers of fixed
28471     registers, because the allocation mechanism considers them to be
28472     always occupied.
28473
28474     On some machines, double-precision values must be kept in even/odd
28475     register pairs.  You can implement that by defining this macro to
28476     reject odd register numbers for such modes.
28477
28478     The minimum requirement for a mode to be OK in a register is that
28479     the 'movMODE' instruction pattern support moves between the
28480     register and other hard register in the same class and that moving
28481     a value into the register and back out not alter it.
28482
28483     Since the same instruction used to move 'word_mode' will work for
28484     all narrower integer modes, it is not necessary on any machine for
28485     'HARD_REGNO_MODE_OK' to distinguish between these modes, provided
28486     you define patterns 'movhi', etc., to take advantage of this.  This
28487     is useful because of the interaction between 'HARD_REGNO_MODE_OK'
28488     and 'MODES_TIEABLE_P'; it is very desirable for all integer modes
28489     to be tieable.
28490
28491     Many machines have special registers for floating point arithmetic.
28492     Often people assume that floating point machine modes are allowed
28493     only in floating point registers.  This is not true.  Any registers
28494     that can hold integers can safely _hold_ a floating point machine
28495     mode, whether or not floating arithmetic can be done on it in those
28496     registers.  Integer move instructions can be used to move the
28497     values.
28498
28499     On some machines, though, the converse is true: fixed-point machine
28500     modes may not go in floating registers.  This is true if the
28501     floating registers normalize any value stored in them, because
28502     storing a non-floating value there would garble it.  In this case,
28503     'HARD_REGNO_MODE_OK' should reject fixed-point machine modes in
28504     floating registers.  But if the floating registers do not
28505     automatically normalize, if you can store any bit pattern in one
28506     and retrieve it unchanged without a trap, then any machine mode may
28507     go in a floating register, so you can define this macro to say so.
28508
28509     The primary significance of special floating registers is rather
28510     that they are the registers acceptable in floating point arithmetic
28511     instructions.  However, this is of no concern to
28512     'HARD_REGNO_MODE_OK'.  You handle it by writing the proper
28513     constraints for those instructions.
28514
28515     On some machines, the floating registers are especially slow to
28516     access, so that it is better to store a value in a stack frame than
28517     in such a register if floating point arithmetic is not being done.
28518     As long as the floating registers are not in class 'GENERAL_REGS',
28519     they will not be used unless some pattern's constraint asks for
28520     one.
28521
28522 -- Macro: HARD_REGNO_RENAME_OK (FROM, TO)
28523     A C expression that is nonzero if it is OK to rename a hard
28524     register FROM to another hard register TO.
28525
28526     One common use of this macro is to prevent renaming of a register
28527     to another register that is not saved by a prologue in an interrupt
28528     handler.
28529
28530     The default is always nonzero.
28531
28532 -- Macro: MODES_TIEABLE_P (MODE1, MODE2)
28533     A C expression that is nonzero if a value of mode MODE1 is
28534     accessible in mode MODE2 without copying.
28535
28536     If 'HARD_REGNO_MODE_OK (R, MODE1)' and 'HARD_REGNO_MODE_OK (R,
28537     MODE2)' are always the same for any R, then 'MODES_TIEABLE_P
28538     (MODE1, MODE2)' should be nonzero.  If they differ for any R, you
28539     should define this macro to return zero unless some other mechanism
28540     ensures the accessibility of the value in a narrower mode.
28541
28542     You should define this macro to return nonzero in as many cases as
28543     possible since doing so will allow GCC to perform better register
28544     allocation.
28545
28546 -- Target Hook: bool TARGET_HARD_REGNO_SCRATCH_OK (unsigned int REGNO)
28547     This target hook should return 'true' if it is OK to use a hard
28548     register REGNO as scratch reg in peephole2.
28549
28550     One common use of this macro is to prevent using of a register that
28551     is not saved by a prologue in an interrupt handler.
28552
28553     The default version of this hook always returns 'true'.
28554
28555 -- Macro: AVOID_CCMODE_COPIES
28556     Define this macro if the compiler should avoid copies to/from
28557     'CCmode' registers.  You should only define this macro if support
28558     for copying to/from 'CCmode' is incomplete.
28559
28560
28561File: gccint.info,  Node: Leaf Functions,  Next: Stack Registers,  Prev: Values in Registers,  Up: Registers
28562
2856317.7.4 Handling Leaf Functions
28564------------------------------
28565
28566On some machines, a leaf function (i.e., one which makes no calls) can
28567run more efficiently if it does not make its own register window.  Often
28568this means it is required to receive its arguments in the registers
28569where they are passed by the caller, instead of the registers where they
28570would normally arrive.
28571
28572 The special treatment for leaf functions generally applies only when
28573other conditions are met; for example, often they may use only those
28574registers for its own variables and temporaries.  We use the term "leaf
28575function" to mean a function that is suitable for this special handling,
28576so that functions with no calls are not necessarily "leaf functions".
28577
28578 GCC assigns register numbers before it knows whether the function is
28579suitable for leaf function treatment.  So it needs to renumber the
28580registers in order to output a leaf function.  The following macros
28581accomplish this.
28582
28583 -- Macro: LEAF_REGISTERS
28584     Name of a char vector, indexed by hard register number, which
28585     contains 1 for a register that is allowable in a candidate for leaf
28586     function treatment.
28587
28588     If leaf function treatment involves renumbering the registers, then
28589     the registers marked here should be the ones before
28590     renumbering--those that GCC would ordinarily allocate.  The
28591     registers which will actually be used in the assembler code, after
28592     renumbering, should not be marked with 1 in this vector.
28593
28594     Define this macro only if the target machine offers a way to
28595     optimize the treatment of leaf functions.
28596
28597 -- Macro: LEAF_REG_REMAP (REGNO)
28598     A C expression whose value is the register number to which REGNO
28599     should be renumbered, when a function is treated as a leaf
28600     function.
28601
28602     If REGNO is a register number which should not appear in a leaf
28603     function before renumbering, then the expression should yield -1,
28604     which will cause the compiler to abort.
28605
28606     Define this macro only if the target machine offers a way to
28607     optimize the treatment of leaf functions, and registers need to be
28608     renumbered to do this.
28609
28610 'TARGET_ASM_FUNCTION_PROLOGUE' and 'TARGET_ASM_FUNCTION_EPILOGUE' must
28611usually treat leaf functions specially.  They can test the C variable
28612'current_function_is_leaf' which is nonzero for leaf functions.
28613'current_function_is_leaf' is set prior to local register allocation and
28614is valid for the remaining compiler passes.  They can also test the C
28615variable 'current_function_uses_only_leaf_regs' which is nonzero for
28616leaf functions which only use leaf registers.
28617'current_function_uses_only_leaf_regs' is valid after all passes that
28618modify the instructions have been run and is only useful if
28619'LEAF_REGISTERS' is defined.
28620
28621
28622File: gccint.info,  Node: Stack Registers,  Prev: Leaf Functions,  Up: Registers
28623
2862417.7.5 Registers That Form a Stack
28625----------------------------------
28626
28627There are special features to handle computers where some of the
28628"registers" form a stack.  Stack registers are normally written by
28629pushing onto the stack, and are numbered relative to the top of the
28630stack.
28631
28632 Currently, GCC can only handle one group of stack-like registers, and
28633they must be consecutively numbered.  Furthermore, the existing support
28634for stack-like registers is specific to the 80387 floating point
28635coprocessor.  If you have a new architecture that uses stack-like
28636registers, you will need to do substantial work on 'reg-stack.c' and
28637write your machine description to cooperate with it, as well as defining
28638these macros.
28639
28640 -- Macro: STACK_REGS
28641     Define this if the machine has any stack-like registers.
28642
28643 -- Macro: STACK_REG_COVER_CLASS
28644     This is a cover class containing the stack registers.  Define this
28645     if the machine has any stack-like registers.
28646
28647 -- Macro: FIRST_STACK_REG
28648     The number of the first stack-like register.  This one is the top
28649     of the stack.
28650
28651 -- Macro: LAST_STACK_REG
28652     The number of the last stack-like register.  This one is the bottom
28653     of the stack.
28654
28655
28656File: gccint.info,  Node: Register Classes,  Next: Old Constraints,  Prev: Registers,  Up: Target Macros
28657
2865817.8 Register Classes
28659=====================
28660
28661On many machines, the numbered registers are not all equivalent.  For
28662example, certain registers may not be allowed for indexed addressing;
28663certain registers may not be allowed in some instructions.  These
28664machine restrictions are described to the compiler using "register
28665classes".
28666
28667 You define a number of register classes, giving each one a name and
28668saying which of the registers belong to it.  Then you can specify
28669register classes that are allowed as operands to particular instruction
28670patterns.
28671
28672 In general, each register will belong to several classes.  In fact, one
28673class must be named 'ALL_REGS' and contain all the registers.  Another
28674class must be named 'NO_REGS' and contain no registers.  Often the union
28675of two classes will be another class; however, this is not required.
28676
28677 One of the classes must be named 'GENERAL_REGS'.  There is nothing
28678terribly special about the name, but the operand constraint letters 'r'
28679and 'g' specify this class.  If 'GENERAL_REGS' is the same as
28680'ALL_REGS', just define it as a macro which expands to 'ALL_REGS'.
28681
28682 Order the classes so that if class X is contained in class Y then X has
28683a lower class number than Y.
28684
28685 The way classes other than 'GENERAL_REGS' are specified in operand
28686constraints is through machine-dependent operand constraint letters.
28687You can define such letters to correspond to various classes, then use
28688them in operand constraints.
28689
28690 You must define the narrowest register classes for allocatable
28691registers, so that each class either has no subclasses, or that for some
28692mode, the move cost between registers within the class is cheaper than
28693moving a register in the class to or from memory (*note Costs::).
28694
28695 You should define a class for the union of two classes whenever some
28696instruction allows both classes.  For example, if an instruction allows
28697either a floating point (coprocessor) register or a general register for
28698a certain operand, you should define a class 'FLOAT_OR_GENERAL_REGS'
28699which includes both of them.  Otherwise you will get suboptimal code, or
28700even internal compiler errors when reload cannot find a register in the
28701class computed via 'reg_class_subunion'.
28702
28703 You must also specify certain redundant information about the register
28704classes: for each class, which classes contain it and which ones are
28705contained in it; for each pair of classes, the largest class contained
28706in their union.
28707
28708 When a value occupying several consecutive registers is expected in a
28709certain class, all the registers used must belong to that class.
28710Therefore, register classes cannot be used to enforce a requirement for
28711a register pair to start with an even-numbered register.  The way to
28712specify this requirement is with 'HARD_REGNO_MODE_OK'.
28713
28714 Register classes used for input-operands of bitwise-and or shift
28715instructions have a special requirement: each such class must have, for
28716each fixed-point machine mode, a subclass whose registers can transfer
28717that mode to or from memory.  For example, on some machines, the
28718operations for single-byte values ('QImode') are limited to certain
28719registers.  When this is so, each register class that is used in a
28720bitwise-and or shift instruction must have a subclass consisting of
28721registers from which single-byte values can be loaded or stored.  This
28722is so that 'PREFERRED_RELOAD_CLASS' can always have a possible value to
28723return.
28724
28725 -- Data type: enum reg_class
28726     An enumerated type that must be defined with all the register class
28727     names as enumerated values.  'NO_REGS' must be first.  'ALL_REGS'
28728     must be the last register class, followed by one more enumerated
28729     value, 'LIM_REG_CLASSES', which is not a register class but rather
28730     tells how many classes there are.
28731
28732     Each register class has a number, which is the value of casting the
28733     class name to type 'int'.  The number serves as an index in many of
28734     the tables described below.
28735
28736 -- Macro: N_REG_CLASSES
28737     The number of distinct register classes, defined as follows:
28738
28739          #define N_REG_CLASSES (int) LIM_REG_CLASSES
28740
28741 -- Macro: REG_CLASS_NAMES
28742     An initializer containing the names of the register classes as C
28743     string constants.  These names are used in writing some of the
28744     debugging dumps.
28745
28746 -- Macro: REG_CLASS_CONTENTS
28747     An initializer containing the contents of the register classes, as
28748     integers which are bit masks.  The Nth integer specifies the
28749     contents of class N.  The way the integer MASK is interpreted is
28750     that register R is in the class if 'MASK & (1 << R)' is 1.
28751
28752     When the machine has more than 32 registers, an integer does not
28753     suffice.  Then the integers are replaced by sub-initializers,
28754     braced groupings containing several integers.  Each sub-initializer
28755     must be suitable as an initializer for the type 'HARD_REG_SET'
28756     which is defined in 'hard-reg-set.h'.  In this situation, the first
28757     integer in each sub-initializer corresponds to registers 0 through
28758     31, the second integer to registers 32 through 63, and so on.
28759
28760 -- Macro: REGNO_REG_CLASS (REGNO)
28761     A C expression whose value is a register class containing hard
28762     register REGNO.  In general there is more than one such class;
28763     choose a class which is "minimal", meaning that no smaller class
28764     also contains the register.
28765
28766 -- Macro: BASE_REG_CLASS
28767     A macro whose definition is the name of the class to which a valid
28768     base register must belong.  A base register is one used in an
28769     address which is the register value plus a displacement.
28770
28771 -- Macro: MODE_BASE_REG_CLASS (MODE)
28772     This is a variation of the 'BASE_REG_CLASS' macro which allows the
28773     selection of a base register in a mode dependent manner.  If MODE
28774     is VOIDmode then it should return the same value as
28775     'BASE_REG_CLASS'.
28776
28777 -- Macro: MODE_BASE_REG_REG_CLASS (MODE)
28778     A C expression whose value is the register class to which a valid
28779     base register must belong in order to be used in a base plus index
28780     register address.  You should define this macro if base plus index
28781     addresses have different requirements than other base register
28782     uses.
28783
28784 -- Macro: MODE_CODE_BASE_REG_CLASS (MODE, ADDRESS_SPACE, OUTER_CODE,
28785          INDEX_CODE)
28786     A C expression whose value is the register class to which a valid
28787     base register for a memory reference in mode MODE to address space
28788     ADDRESS_SPACE must belong.  OUTER_CODE and INDEX_CODE define the
28789     context in which the base register occurs.  OUTER_CODE is the code
28790     of the immediately enclosing expression ('MEM' for the top level of
28791     an address, 'ADDRESS' for something that occurs in an
28792     'address_operand').  INDEX_CODE is the code of the corresponding
28793     index expression if OUTER_CODE is 'PLUS'; 'SCRATCH' otherwise.
28794
28795 -- Macro: INDEX_REG_CLASS
28796     A macro whose definition is the name of the class to which a valid
28797     index register must belong.  An index register is one used in an
28798     address where its value is either multiplied by a scale factor or
28799     added to another register (as well as added to a displacement).
28800
28801 -- Macro: REGNO_OK_FOR_BASE_P (NUM)
28802     A C expression which is nonzero if register number NUM is suitable
28803     for use as a base register in operand addresses.
28804
28805 -- Macro: REGNO_MODE_OK_FOR_BASE_P (NUM, MODE)
28806     A C expression that is just like 'REGNO_OK_FOR_BASE_P', except that
28807     that expression may examine the mode of the memory reference in
28808     MODE.  You should define this macro if the mode of the memory
28809     reference affects whether a register may be used as a base
28810     register.  If you define this macro, the compiler will use it
28811     instead of 'REGNO_OK_FOR_BASE_P'.  The mode may be 'VOIDmode' for
28812     addresses that appear outside a 'MEM', i.e., as an
28813     'address_operand'.
28814
28815 -- Macro: REGNO_MODE_OK_FOR_REG_BASE_P (NUM, MODE)
28816     A C expression which is nonzero if register number NUM is suitable
28817     for use as a base register in base plus index operand addresses,
28818     accessing memory in mode MODE.  It may be either a suitable hard
28819     register or a pseudo register that has been allocated such a hard
28820     register.  You should define this macro if base plus index
28821     addresses have different requirements than other base register
28822     uses.
28823
28824     Use of this macro is deprecated; please use the more general
28825     'REGNO_MODE_CODE_OK_FOR_BASE_P'.
28826
28827 -- Macro: REGNO_MODE_CODE_OK_FOR_BASE_P (NUM, MODE, ADDRESS_SPACE,
28828          OUTER_CODE, INDEX_CODE)
28829     A C expression which is nonzero if register number NUM is suitable
28830     for use as a base register in operand addresses, accessing memory
28831     in mode MODE in address space ADDRESS_SPACE.  This is similar to
28832     'REGNO_MODE_OK_FOR_BASE_P', except that that expression may examine
28833     the context in which the register appears in the memory reference.
28834     OUTER_CODE is the code of the immediately enclosing expression
28835     ('MEM' if at the top level of the address, 'ADDRESS' for something
28836     that occurs in an 'address_operand').  INDEX_CODE is the code of
28837     the corresponding index expression if OUTER_CODE is 'PLUS';
28838     'SCRATCH' otherwise.  The mode may be 'VOIDmode' for addresses that
28839     appear outside a 'MEM', i.e., as an 'address_operand'.
28840
28841 -- Macro: REGNO_OK_FOR_INDEX_P (NUM)
28842     A C expression which is nonzero if register number NUM is suitable
28843     for use as an index register in operand addresses.  It may be
28844     either a suitable hard register or a pseudo register that has been
28845     allocated such a hard register.
28846
28847     The difference between an index register and a base register is
28848     that the index register may be scaled.  If an address involves the
28849     sum of two registers, neither one of them scaled, then either one
28850     may be labeled the "base" and the other the "index"; but whichever
28851     labeling is used must fit the machine's constraints of which
28852     registers may serve in each capacity.  The compiler will try both
28853     labelings, looking for one that is valid, and will reload one or
28854     both registers only if neither labeling works.
28855
28856 -- Target Hook: reg_class_t TARGET_PREFERRED_RENAME_CLASS (reg_class_t
28857          RCLASS)
28858     A target hook that places additional preference on the register
28859     class to use when it is necessary to rename a register in class
28860     RCLASS to another class, or perhaps NO_REGS, if no preferred
28861     register class is found or hook 'preferred_rename_class' is not
28862     implemented.  Sometimes returning a more restrictive class makes
28863     better code.  For example, on ARM, thumb-2 instructions using
28864     'LO_REGS' may be smaller than instructions using 'GENERIC_REGS'.
28865     By returning 'LO_REGS' from 'preferred_rename_class', code size can
28866     be reduced.
28867
28868 -- Target Hook: reg_class_t TARGET_PREFERRED_RELOAD_CLASS (rtx X,
28869          reg_class_t RCLASS)
28870     A target hook that places additional restrictions on the register
28871     class to use when it is necessary to copy value X into a register
28872     in class RCLASS.  The value is a register class; perhaps RCLASS, or
28873     perhaps another, smaller class.
28874
28875     The default version of this hook always returns value of 'rclass'
28876     argument.
28877
28878     Sometimes returning a more restrictive class makes better code.
28879     For example, on the 68000, when X is an integer constant that is in
28880     range for a 'moveq' instruction, the value of this macro is always
28881     'DATA_REGS' as long as RCLASS includes the data registers.
28882     Requiring a data register guarantees that a 'moveq' will be used.
28883
28884     One case where 'TARGET_PREFERRED_RELOAD_CLASS' must not return
28885     RCLASS is if X is a legitimate constant which cannot be loaded into
28886     some register class.  By returning 'NO_REGS' you can force X into a
28887     memory location.  For example, rs6000 can load immediate values
28888     into general-purpose registers, but does not have an instruction
28889     for loading an immediate value into a floating-point register, so
28890     'TARGET_PREFERRED_RELOAD_CLASS' returns 'NO_REGS' when X is a
28891     floating-point constant.  If the constant can't be loaded into any
28892     kind of register, code generation will be better if
28893     'TARGET_LEGITIMATE_CONSTANT_P' makes the constant illegitimate
28894     instead of using 'TARGET_PREFERRED_RELOAD_CLASS'.
28895
28896     If an insn has pseudos in it after register allocation, reload will
28897     go through the alternatives and call repeatedly
28898     'TARGET_PREFERRED_RELOAD_CLASS' to find the best one.  Returning
28899     'NO_REGS', in this case, makes reload add a '!' in front of the
28900     constraint: the x86 back-end uses this feature to discourage usage
28901     of 387 registers when math is done in the SSE registers (and vice
28902     versa).
28903
28904 -- Macro: PREFERRED_RELOAD_CLASS (X, CLASS)
28905     A C expression that places additional restrictions on the register
28906     class to use when it is necessary to copy value X into a register
28907     in class CLASS.  The value is a register class; perhaps CLASS, or
28908     perhaps another, smaller class.  On many machines, the following
28909     definition is safe:
28910
28911          #define PREFERRED_RELOAD_CLASS(X,CLASS) CLASS
28912
28913     Sometimes returning a more restrictive class makes better code.
28914     For example, on the 68000, when X is an integer constant that is in
28915     range for a 'moveq' instruction, the value of this macro is always
28916     'DATA_REGS' as long as CLASS includes the data registers.
28917     Requiring a data register guarantees that a 'moveq' will be used.
28918
28919     One case where 'PREFERRED_RELOAD_CLASS' must not return CLASS is if
28920     X is a legitimate constant which cannot be loaded into some
28921     register class.  By returning 'NO_REGS' you can force X into a
28922     memory location.  For example, rs6000 can load immediate values
28923     into general-purpose registers, but does not have an instruction
28924     for loading an immediate value into a floating-point register, so
28925     'PREFERRED_RELOAD_CLASS' returns 'NO_REGS' when X is a
28926     floating-point constant.  If the constant can't be loaded into any
28927     kind of register, code generation will be better if
28928     'TARGET_LEGITIMATE_CONSTANT_P' makes the constant illegitimate
28929     instead of using 'TARGET_PREFERRED_RELOAD_CLASS'.
28930
28931     If an insn has pseudos in it after register allocation, reload will
28932     go through the alternatives and call repeatedly
28933     'PREFERRED_RELOAD_CLASS' to find the best one.  Returning
28934     'NO_REGS', in this case, makes reload add a '!' in front of the
28935     constraint: the x86 back-end uses this feature to discourage usage
28936     of 387 registers when math is done in the SSE registers (and vice
28937     versa).
28938
28939 -- Target Hook: reg_class_t TARGET_PREFERRED_OUTPUT_RELOAD_CLASS (rtx
28940          X, reg_class_t RCLASS)
28941     Like 'TARGET_PREFERRED_RELOAD_CLASS', but for output reloads
28942     instead of input reloads.
28943
28944     The default version of this hook always returns value of 'rclass'
28945     argument.
28946
28947     You can also use 'TARGET_PREFERRED_OUTPUT_RELOAD_CLASS' to
28948     discourage reload from using some alternatives, like
28949     'TARGET_PREFERRED_RELOAD_CLASS'.
28950
28951 -- Macro: LIMIT_RELOAD_CLASS (MODE, CLASS)
28952     A C expression that places additional restrictions on the register
28953     class to use when it is necessary to be able to hold a value of
28954     mode MODE in a reload register for which class CLASS would
28955     ordinarily be used.
28956
28957     Unlike 'PREFERRED_RELOAD_CLASS', this macro should be used when
28958     there are certain modes that simply can't go in certain reload
28959     classes.
28960
28961     The value is a register class; perhaps CLASS, or perhaps another,
28962     smaller class.
28963
28964     Don't define this macro unless the target machine has limitations
28965     which require the macro to do something nontrivial.
28966
28967 -- Target Hook: reg_class_t TARGET_SECONDARY_RELOAD (bool IN_P, rtx X,
28968          reg_class_t RELOAD_CLASS, enum machine_mode RELOAD_MODE,
28969          secondary_reload_info *SRI)
28970     Many machines have some registers that cannot be copied directly to
28971     or from memory or even from other types of registers.  An example
28972     is the 'MQ' register, which on most machines, can only be copied to
28973     or from general registers, but not memory.  Below, we shall be
28974     using the term 'intermediate register' when a move operation cannot
28975     be performed directly, but has to be done by copying the source
28976     into the intermediate register first, and then copying the
28977     intermediate register to the destination.  An intermediate register
28978     always has the same mode as source and destination.  Since it holds
28979     the actual value being copied, reload might apply optimizations to
28980     re-use an intermediate register and eliding the copy from the
28981     source when it can determine that the intermediate register still
28982     holds the required value.
28983
28984     Another kind of secondary reload is required on some machines which
28985     allow copying all registers to and from memory, but require a
28986     scratch register for stores to some memory locations (e.g., those
28987     with symbolic address on the RT, and those with certain symbolic
28988     address on the SPARC when compiling PIC).  Scratch registers need
28989     not have the same mode as the value being copied, and usually hold
28990     a different value than that being copied.  Special patterns in the
28991     md file are needed to describe how the copy is performed with the
28992     help of the scratch register; these patterns also describe the
28993     number, register class(es) and mode(s) of the scratch register(s).
28994
28995     In some cases, both an intermediate and a scratch register are
28996     required.
28997
28998     For input reloads, this target hook is called with nonzero IN_P,
28999     and X is an rtx that needs to be copied to a register of class
29000     RELOAD_CLASS in RELOAD_MODE.  For output reloads, this target hook
29001     is called with zero IN_P, and a register of class RELOAD_CLASS
29002     needs to be copied to rtx X in RELOAD_MODE.
29003
29004     If copying a register of RELOAD_CLASS from/to X requires an
29005     intermediate register, the hook 'secondary_reload' should return
29006     the register class required for this intermediate register.  If no
29007     intermediate register is required, it should return NO_REGS. If
29008     more than one intermediate register is required, describe the one
29009     that is closest in the copy chain to the reload register.
29010
29011     If scratch registers are needed, you also have to describe how to
29012     perform the copy from/to the reload register to/from this closest
29013     intermediate register.  Or if no intermediate register is required,
29014     but still a scratch register is needed, describe the copy from/to
29015     the reload register to/from the reload operand X.
29016
29017     You do this by setting 'sri->icode' to the instruction code of a
29018     pattern in the md file which performs the move.  Operands 0 and 1
29019     are the output and input of this copy, respectively.  Operands from
29020     operand 2 onward are for scratch operands.  These scratch operands
29021     must have a mode, and a single-register-class output constraint.
29022
29023     When an intermediate register is used, the 'secondary_reload' hook
29024     will be called again to determine how to copy the intermediate
29025     register to/from the reload operand X, so your hook must also have
29026     code to handle the register class of the intermediate operand.
29027
29028     X might be a pseudo-register or a 'subreg' of a pseudo-register,
29029     which could either be in a hard register or in memory.  Use
29030     'true_regnum' to find out; it will return -1 if the pseudo is in
29031     memory and the hard register number if it is in a register.
29032
29033     Scratch operands in memory (constraint '"=m"' / '"=&m"') are
29034     currently not supported.  For the time being, you will have to
29035     continue to use 'SECONDARY_MEMORY_NEEDED' for that purpose.
29036
29037     'copy_cost' also uses this target hook to find out how values are
29038     copied.  If you want it to include some extra cost for the need to
29039     allocate (a) scratch register(s), set 'sri->extra_cost' to the
29040     additional cost.  Or if two dependent moves are supposed to have a
29041     lower cost than the sum of the individual moves due to expected
29042     fortuitous scheduling and/or special forwarding logic, you can set
29043     'sri->extra_cost' to a negative amount.
29044
29045 -- Macro: SECONDARY_RELOAD_CLASS (CLASS, MODE, X)
29046 -- Macro: SECONDARY_INPUT_RELOAD_CLASS (CLASS, MODE, X)
29047 -- Macro: SECONDARY_OUTPUT_RELOAD_CLASS (CLASS, MODE, X)
29048     These macros are obsolete, new ports should use the target hook
29049     'TARGET_SECONDARY_RELOAD' instead.
29050
29051     These are obsolete macros, replaced by the
29052     'TARGET_SECONDARY_RELOAD' target hook.  Older ports still define
29053     these macros to indicate to the reload phase that it may need to
29054     allocate at least one register for a reload in addition to the
29055     register to contain the data.  Specifically, if copying X to a
29056     register CLASS in MODE requires an intermediate register, you were
29057     supposed to define 'SECONDARY_INPUT_RELOAD_CLASS' to return the
29058     largest register class all of whose registers can be used as
29059     intermediate registers or scratch registers.
29060
29061     If copying a register CLASS in MODE to X requires an intermediate
29062     or scratch register, 'SECONDARY_OUTPUT_RELOAD_CLASS' was supposed
29063     to be defined be defined to return the largest register class
29064     required.  If the requirements for input and output reloads were
29065     the same, the macro 'SECONDARY_RELOAD_CLASS' should have been used
29066     instead of defining both macros identically.
29067
29068     The values returned by these macros are often 'GENERAL_REGS'.
29069     Return 'NO_REGS' if no spare register is needed; i.e., if X can be
29070     directly copied to or from a register of CLASS in MODE without
29071     requiring a scratch register.  Do not define this macro if it would
29072     always return 'NO_REGS'.
29073
29074     If a scratch register is required (either with or without an
29075     intermediate register), you were supposed to define patterns for
29076     'reload_inM' or 'reload_outM', as required (*note Standard Names::.
29077     These patterns, which were normally implemented with a
29078     'define_expand', should be similar to the 'movM' patterns, except
29079     that operand 2 is the scratch register.
29080
29081     These patterns need constraints for the reload register and scratch
29082     register that contain a single register class.  If the original
29083     reload register (whose class is CLASS) can meet the constraint
29084     given in the pattern, the value returned by these macros is used
29085     for the class of the scratch register.  Otherwise, two additional
29086     reload registers are required.  Their classes are obtained from the
29087     constraints in the insn pattern.
29088
29089     X might be a pseudo-register or a 'subreg' of a pseudo-register,
29090     which could either be in a hard register or in memory.  Use
29091     'true_regnum' to find out; it will return -1 if the pseudo is in
29092     memory and the hard register number if it is in a register.
29093
29094     These macros should not be used in the case where a particular
29095     class of registers can only be copied to memory and not to another
29096     class of registers.  In that case, secondary reload registers are
29097     not needed and would not be helpful.  Instead, a stack location
29098     must be used to perform the copy and the 'movM' pattern should use
29099     memory as an intermediate storage.  This case often occurs between
29100     floating-point and general registers.
29101
29102 -- Macro: SECONDARY_MEMORY_NEEDED (CLASS1, CLASS2, M)
29103     Certain machines have the property that some registers cannot be
29104     copied to some other registers without using memory.  Define this
29105     macro on those machines to be a C expression that is nonzero if
29106     objects of mode M in registers of CLASS1 can only be copied to
29107     registers of class CLASS2 by storing a register of CLASS1 into
29108     memory and loading that memory location into a register of CLASS2.
29109
29110     Do not define this macro if its value would always be zero.
29111
29112 -- Macro: SECONDARY_MEMORY_NEEDED_RTX (MODE)
29113     Normally when 'SECONDARY_MEMORY_NEEDED' is defined, the compiler
29114     allocates a stack slot for a memory location needed for register
29115     copies.  If this macro is defined, the compiler instead uses the
29116     memory location defined by this macro.
29117
29118     Do not define this macro if you do not define
29119     'SECONDARY_MEMORY_NEEDED'.
29120
29121 -- Macro: SECONDARY_MEMORY_NEEDED_MODE (MODE)
29122     When the compiler needs a secondary memory location to copy between
29123     two registers of mode MODE, it normally allocates sufficient memory
29124     to hold a quantity of 'BITS_PER_WORD' bits and performs the store
29125     and load operations in a mode that many bits wide and whose class
29126     is the same as that of MODE.
29127
29128     This is right thing to do on most machines because it ensures that
29129     all bits of the register are copied and prevents accesses to the
29130     registers in a narrower mode, which some machines prohibit for
29131     floating-point registers.
29132
29133     However, this default behavior is not correct on some machines,
29134     such as the DEC Alpha, that store short integers in floating-point
29135     registers differently than in integer registers.  On those
29136     machines, the default widening will not work correctly and you must
29137     define this macro to suppress that widening in some cases.  See the
29138     file 'alpha.h' for details.
29139
29140     Do not define this macro if you do not define
29141     'SECONDARY_MEMORY_NEEDED' or if widening MODE to a mode that is
29142     'BITS_PER_WORD' bits wide is correct for your machine.
29143
29144 -- Target Hook: bool TARGET_CLASS_LIKELY_SPILLED_P (reg_class_t RCLASS)
29145     A target hook which returns 'true' if pseudos that have been
29146     assigned to registers of class RCLASS would likely be spilled
29147     because registers of RCLASS are needed for spill registers.
29148
29149     The default version of this target hook returns 'true' if RCLASS
29150     has exactly one register and 'false' otherwise.  On most machines,
29151     this default should be used.  For generally register-starved
29152     machines, such as i386, or machines with right register
29153     constraints, such as SH, this hook can be used to avoid excessive
29154     spilling.
29155
29156     This hook is also used by some of the global intra-procedural code
29157     transformations to throtle code motion, to avoid increasing
29158     register pressure.
29159
29160 -- Target Hook: unsigned char TARGET_CLASS_MAX_NREGS (reg_class_t
29161          RCLASS, enum machine_mode MODE)
29162     A target hook returns the maximum number of consecutive registers
29163     of class RCLASS needed to hold a value of mode MODE.
29164
29165     This is closely related to the macro 'HARD_REGNO_NREGS'.  In fact,
29166     the value returned by 'TARGET_CLASS_MAX_NREGS (RCLASS, MODE)'
29167     target hook should be the maximum value of 'HARD_REGNO_NREGS
29168     (REGNO, MODE)' for all REGNO values in the class RCLASS.
29169
29170     This target hook helps control the handling of multiple-word values
29171     in the reload pass.
29172
29173     The default version of this target hook returns the size of MODE in
29174     words.
29175
29176 -- Macro: CLASS_MAX_NREGS (CLASS, MODE)
29177     A C expression for the maximum number of consecutive registers of
29178     class CLASS needed to hold a value of mode MODE.
29179
29180     This is closely related to the macro 'HARD_REGNO_NREGS'.  In fact,
29181     the value of the macro 'CLASS_MAX_NREGS (CLASS, MODE)' should be
29182     the maximum value of 'HARD_REGNO_NREGS (REGNO, MODE)' for all REGNO
29183     values in the class CLASS.
29184
29185     This macro helps control the handling of multiple-word values in
29186     the reload pass.
29187
29188 -- Macro: CANNOT_CHANGE_MODE_CLASS (FROM, TO, CLASS)
29189     If defined, a C expression that returns nonzero for a CLASS for
29190     which a change from mode FROM to mode TO is invalid.
29191
29192     For the example, loading 32-bit integer or floating-point objects
29193     into floating-point registers on the Alpha extends them to 64 bits.
29194     Therefore loading a 64-bit object and then storing it as a 32-bit
29195     object does not store the low-order 32 bits, as would be the case
29196     for a normal register.  Therefore, 'alpha.h' defines
29197     'CANNOT_CHANGE_MODE_CLASS' as below:
29198
29199          #define CANNOT_CHANGE_MODE_CLASS(FROM, TO, CLASS) \
29200            (GET_MODE_SIZE (FROM) != GET_MODE_SIZE (TO) \
29201             ? reg_classes_intersect_p (FLOAT_REGS, (CLASS)) : 0)
29202
29203 -- Target Hook: bool TARGET_LRA_P (void)
29204     A target hook which returns true if we use LRA instead of reload
29205     pass.  It means that LRA was ported to the target.  The default
29206     version of this target hook returns always false.
29207
29208 -- Target Hook: int TARGET_REGISTER_PRIORITY (int)
29209     A target hook which returns the register priority number to which
29210     the register HARD_REGNO belongs to.  The bigger the number, the
29211     more preferable the hard register usage (when all other conditions
29212     are the same).  This hook can be used to prefer some hard register
29213     over others in LRA. For example, some x86-64 register usage needs
29214     additional prefix which makes instructions longer.  The hook can
29215     return lower priority number for such registers make them less
29216     favorable and as result making the generated code smaller.  The
29217     default version of this target hook returns always zero.
29218
29219 -- Target Hook: bool TARGET_DIFFERENT_ADDR_DISPLACEMENT_P (void)
29220     A target hook which returns true if an address with the same
29221     structure can have different maximal legitimate displacement.  For
29222     example, the displacement can depend on memory mode or on operand
29223     combinations in the insn.  The default version of this target hook
29224     returns always false.
29225
29226 -- Target Hook: reg_class_t TARGET_SPILL_CLASS (reg_class_t, enum
29227          MACHINE_MODE)
29228     This hook defines a class of registers which could be used for
29229     spilling pseudos of the given mode and class, or 'NO_REGS' if only
29230     memory should be used.  Not defining this hook is equivalent to
29231     returning 'NO_REGS' for all inputs.
29232
29233
29234File: gccint.info,  Node: Old Constraints,  Next: Stack and Calling,  Prev: Register Classes,  Up: Target Macros
29235
2923617.9 Obsolete Macros for Defining Constraints
29237=============================================
29238
29239Machine-specific constraints can be defined with these macros instead of
29240the machine description constructs described in *note Define
29241Constraints::.  This mechanism is obsolete.  New ports should not use
29242it; old ports should convert to the new mechanism.
29243
29244 -- Macro: CONSTRAINT_LEN (CHAR, STR)
29245     For the constraint at the start of STR, which starts with the
29246     letter C, return the length.  This allows you to have register
29247     class / constant / extra constraints that are longer than a single
29248     letter; you don't need to define this macro if you can do with
29249     single-letter constraints only.  The definition of this macro
29250     should use DEFAULT_CONSTRAINT_LEN for all the characters that you
29251     don't want to handle specially.  There are some sanity checks in
29252     genoutput.c that check the constraint lengths for the md file, so
29253     you can also use this macro to help you while you are transitioning
29254     from a byzantine single-letter-constraint scheme: when you return a
29255     negative length for a constraint you want to re-use, genoutput will
29256     complain about every instance where it is used in the md file.
29257
29258 -- Macro: REG_CLASS_FROM_LETTER (CHAR)
29259     A C expression which defines the machine-dependent operand
29260     constraint letters for register classes.  If CHAR is such a letter,
29261     the value should be the register class corresponding to it.
29262     Otherwise, the value should be 'NO_REGS'.  The register letter 'r',
29263     corresponding to class 'GENERAL_REGS', will not be passed to this
29264     macro; you do not need to handle it.
29265
29266 -- Macro: REG_CLASS_FROM_CONSTRAINT (CHAR, STR)
29267     Like 'REG_CLASS_FROM_LETTER', but you also get the constraint
29268     string passed in STR, so that you can use suffixes to distinguish
29269     between different variants.
29270
29271 -- Macro: CONST_OK_FOR_LETTER_P (VALUE, C)
29272     A C expression that defines the machine-dependent operand
29273     constraint letters ('I', 'J', 'K', ... 'P') that specify particular
29274     ranges of integer values.  If C is one of those letters, the
29275     expression should check that VALUE, an integer, is in the
29276     appropriate range and return 1 if so, 0 otherwise.  If C is not one
29277     of those letters, the value should be 0 regardless of VALUE.
29278
29279 -- Macro: CONST_OK_FOR_CONSTRAINT_P (VALUE, C, STR)
29280     Like 'CONST_OK_FOR_LETTER_P', but you also get the constraint
29281     string passed in STR, so that you can use suffixes to distinguish
29282     between different variants.
29283
29284 -- Macro: CONST_DOUBLE_OK_FOR_LETTER_P (VALUE, C)
29285     A C expression that defines the machine-dependent operand
29286     constraint letters that specify particular ranges of 'const_double'
29287     values ('G' or 'H').
29288
29289     If C is one of those letters, the expression should check that
29290     VALUE, an RTX of code 'const_double', is in the appropriate range
29291     and return 1 if so, 0 otherwise.  If C is not one of those letters,
29292     the value should be 0 regardless of VALUE.
29293
29294     'const_double' is used for all floating-point constants and for
29295     'DImode' fixed-point constants.  A given letter can accept either
29296     or both kinds of values.  It can use 'GET_MODE' to distinguish
29297     between these kinds.
29298
29299 -- Macro: CONST_DOUBLE_OK_FOR_CONSTRAINT_P (VALUE, C, STR)
29300     Like 'CONST_DOUBLE_OK_FOR_LETTER_P', but you also get the
29301     constraint string passed in STR, so that you can use suffixes to
29302     distinguish between different variants.
29303
29304 -- Macro: EXTRA_CONSTRAINT (VALUE, C)
29305     A C expression that defines the optional machine-dependent
29306     constraint letters that can be used to segregate specific types of
29307     operands, usually memory references, for the target machine.  Any
29308     letter that is not elsewhere defined and not matched by
29309     'REG_CLASS_FROM_LETTER' / 'REG_CLASS_FROM_CONSTRAINT' may be used.
29310     Normally this macro will not be defined.
29311
29312     If it is required for a particular target machine, it should return
29313     1 if VALUE corresponds to the operand type represented by the
29314     constraint letter C.  If C is not defined as an extra constraint,
29315     the value returned should be 0 regardless of VALUE.
29316
29317     For example, on the ROMP, load instructions cannot have their
29318     output in r0 if the memory reference contains a symbolic address.
29319     Constraint letter 'Q' is defined as representing a memory address
29320     that does _not_ contain a symbolic address.  An alternative is
29321     specified with a 'Q' constraint on the input and 'r' on the output.
29322     The next alternative specifies 'm' on the input and a register
29323     class that does not include r0 on the output.
29324
29325 -- Macro: EXTRA_CONSTRAINT_STR (VALUE, C, STR)
29326     Like 'EXTRA_CONSTRAINT', but you also get the constraint string
29327     passed in STR, so that you can use suffixes to distinguish between
29328     different variants.
29329
29330 -- Macro: EXTRA_MEMORY_CONSTRAINT (C, STR)
29331     A C expression that defines the optional machine-dependent
29332     constraint letters, amongst those accepted by 'EXTRA_CONSTRAINT',
29333     that should be treated like memory constraints by the reload pass.
29334
29335     It should return 1 if the operand type represented by the
29336     constraint at the start of STR, the first letter of which is the
29337     letter C, comprises a subset of all memory references including all
29338     those whose address is simply a base register.  This allows the
29339     reload pass to reload an operand, if it does not directly
29340     correspond to the operand type of C, by copying its address into a
29341     base register.
29342
29343     For example, on the S/390, some instructions do not accept
29344     arbitrary memory references, but only those that do not make use of
29345     an index register.  The constraint letter 'Q' is defined via
29346     'EXTRA_CONSTRAINT' as representing a memory address of this type.
29347     If the letter 'Q' is marked as 'EXTRA_MEMORY_CONSTRAINT', a 'Q'
29348     constraint can handle any memory operand, because the reload pass
29349     knows it can be reloaded by copying the memory address into a base
29350     register if required.  This is analogous to the way an 'o'
29351     constraint can handle any memory operand.
29352
29353 -- Macro: EXTRA_ADDRESS_CONSTRAINT (C, STR)
29354     A C expression that defines the optional machine-dependent
29355     constraint letters, amongst those accepted by 'EXTRA_CONSTRAINT' /
29356     'EXTRA_CONSTRAINT_STR', that should be treated like address
29357     constraints by the reload pass.
29358
29359     It should return 1 if the operand type represented by the
29360     constraint at the start of STR, which starts with the letter C,
29361     comprises a subset of all memory addresses including all those that
29362     consist of just a base register.  This allows the reload pass to
29363     reload an operand, if it does not directly correspond to the
29364     operand type of STR, by copying it into a base register.
29365
29366     Any constraint marked as 'EXTRA_ADDRESS_CONSTRAINT' can only be
29367     used with the 'address_operand' predicate.  It is treated
29368     analogously to the 'p' constraint.
29369
29370
29371File: gccint.info,  Node: Stack and Calling,  Next: Varargs,  Prev: Old Constraints,  Up: Target Macros
29372
2937317.10 Stack Layout and Calling Conventions
29374==========================================
29375
29376This describes the stack layout and calling conventions.
29377
29378* Menu:
29379
29380* Frame Layout::
29381* Exception Handling::
29382* Stack Checking::
29383* Frame Registers::
29384* Elimination::
29385* Stack Arguments::
29386* Register Arguments::
29387* Scalar Return::
29388* Aggregate Return::
29389* Caller Saves::
29390* Function Entry::
29391* Profiling::
29392* Tail Calls::
29393* Stack Smashing Protection::
29394
29395
29396File: gccint.info,  Node: Frame Layout,  Next: Exception Handling,  Up: Stack and Calling
29397
2939817.10.1 Basic Stack Layout
29399--------------------------
29400
29401Here is the basic stack layout.
29402
29403 -- Macro: STACK_GROWS_DOWNWARD
29404     Define this macro if pushing a word onto the stack moves the stack
29405     pointer to a smaller address.
29406
29407     When we say, "define this macro if ...", it means that the compiler
29408     checks this macro only with '#ifdef' so the precise definition used
29409     does not matter.
29410
29411 -- Macro: STACK_PUSH_CODE
29412     This macro defines the operation used when something is pushed on
29413     the stack.  In RTL, a push operation will be '(set (mem
29414     (STACK_PUSH_CODE (reg sp))) ...)'
29415
29416     The choices are 'PRE_DEC', 'POST_DEC', 'PRE_INC', and 'POST_INC'.
29417     Which of these is correct depends on the stack direction and on
29418     whether the stack pointer points to the last item on the stack or
29419     whether it points to the space for the next item on the stack.
29420
29421     The default is 'PRE_DEC' when 'STACK_GROWS_DOWNWARD' is defined,
29422     which is almost always right, and 'PRE_INC' otherwise, which is
29423     often wrong.
29424
29425 -- Macro: FRAME_GROWS_DOWNWARD
29426     Define this macro to nonzero value if the addresses of local
29427     variable slots are at negative offsets from the frame pointer.
29428
29429 -- Macro: ARGS_GROW_DOWNWARD
29430     Define this macro if successive arguments to a function occupy
29431     decreasing addresses on the stack.
29432
29433 -- Macro: STARTING_FRAME_OFFSET
29434     Offset from the frame pointer to the first local variable slot to
29435     be allocated.
29436
29437     If 'FRAME_GROWS_DOWNWARD', find the next slot's offset by
29438     subtracting the first slot's length from 'STARTING_FRAME_OFFSET'.
29439     Otherwise, it is found by adding the length of the first slot to
29440     the value 'STARTING_FRAME_OFFSET'.
29441
29442 -- Macro: STACK_ALIGNMENT_NEEDED
29443     Define to zero to disable final alignment of the stack during
29444     reload.  The nonzero default for this macro is suitable for most
29445     ports.
29446
29447     On ports where 'STARTING_FRAME_OFFSET' is nonzero or where there is
29448     a register save block following the local block that doesn't
29449     require alignment to 'STACK_BOUNDARY', it may be beneficial to
29450     disable stack alignment and do it in the backend.
29451
29452 -- Macro: STACK_POINTER_OFFSET
29453     Offset from the stack pointer register to the first location at
29454     which outgoing arguments are placed.  If not specified, the default
29455     value of zero is used.  This is the proper value for most machines.
29456
29457     If 'ARGS_GROW_DOWNWARD', this is the offset to the location above
29458     the first location at which outgoing arguments are placed.
29459
29460 -- Macro: FIRST_PARM_OFFSET (FUNDECL)
29461     Offset from the argument pointer register to the first argument's
29462     address.  On some machines it may depend on the data type of the
29463     function.
29464
29465     If 'ARGS_GROW_DOWNWARD', this is the offset to the location above
29466     the first argument's address.
29467
29468 -- Macro: STACK_DYNAMIC_OFFSET (FUNDECL)
29469     Offset from the stack pointer register to an item dynamically
29470     allocated on the stack, e.g., by 'alloca'.
29471
29472     The default value for this macro is 'STACK_POINTER_OFFSET' plus the
29473     length of the outgoing arguments.  The default is correct for most
29474     machines.  See 'function.c' for details.
29475
29476 -- Macro: INITIAL_FRAME_ADDRESS_RTX
29477     A C expression whose value is RTL representing the address of the
29478     initial stack frame.  This address is passed to 'RETURN_ADDR_RTX'
29479     and 'DYNAMIC_CHAIN_ADDRESS'.  If you don't define this macro, a
29480     reasonable default value will be used.  Define this macro in order
29481     to make frame pointer elimination work in the presence of
29482     '__builtin_frame_address (count)' and '__builtin_return_address
29483     (count)' for 'count' not equal to zero.
29484
29485 -- Macro: DYNAMIC_CHAIN_ADDRESS (FRAMEADDR)
29486     A C expression whose value is RTL representing the address in a
29487     stack frame where the pointer to the caller's frame is stored.
29488     Assume that FRAMEADDR is an RTL expression for the address of the
29489     stack frame itself.
29490
29491     If you don't define this macro, the default is to return the value
29492     of FRAMEADDR--that is, the stack frame address is also the address
29493     of the stack word that points to the previous frame.
29494
29495 -- Macro: SETUP_FRAME_ADDRESSES
29496     If defined, a C expression that produces the machine-specific code
29497     to setup the stack so that arbitrary frames can be accessed.  For
29498     example, on the SPARC, we must flush all of the register windows to
29499     the stack before we can access arbitrary stack frames.  You will
29500     seldom need to define this macro.
29501
29502 -- Target Hook: rtx TARGET_BUILTIN_SETJMP_FRAME_VALUE (void)
29503     This target hook should return an rtx that is used to store the
29504     address of the current frame into the built in 'setjmp' buffer.
29505     The default value, 'virtual_stack_vars_rtx', is correct for most
29506     machines.  One reason you may need to define this target hook is if
29507     'hard_frame_pointer_rtx' is the appropriate value on your machine.
29508
29509 -- Macro: FRAME_ADDR_RTX (FRAMEADDR)
29510     A C expression whose value is RTL representing the value of the
29511     frame address for the current frame.  FRAMEADDR is the frame
29512     pointer of the current frame.  This is used for
29513     __builtin_frame_address.  You need only define this macro if the
29514     frame address is not the same as the frame pointer.  Most machines
29515     do not need to define it.
29516
29517 -- Macro: RETURN_ADDR_RTX (COUNT, FRAMEADDR)
29518     A C expression whose value is RTL representing the value of the
29519     return address for the frame COUNT steps up from the current frame,
29520     after the prologue.  FRAMEADDR is the frame pointer of the COUNT
29521     frame, or the frame pointer of the COUNT - 1 frame if
29522     'RETURN_ADDR_IN_PREVIOUS_FRAME' is defined.
29523
29524     The value of the expression must always be the correct address when
29525     COUNT is zero, but may be 'NULL_RTX' if there is no way to
29526     determine the return address of other frames.
29527
29528 -- Macro: RETURN_ADDR_IN_PREVIOUS_FRAME
29529     Define this if the return address of a particular stack frame is
29530     accessed from the frame pointer of the previous stack frame.
29531
29532 -- Macro: INCOMING_RETURN_ADDR_RTX
29533     A C expression whose value is RTL representing the location of the
29534     incoming return address at the beginning of any function, before
29535     the prologue.  This RTL is either a 'REG', indicating that the
29536     return value is saved in 'REG', or a 'MEM' representing a location
29537     in the stack.
29538
29539     You only need to define this macro if you want to support call
29540     frame debugging information like that provided by DWARF 2.
29541
29542     If this RTL is a 'REG', you should also define
29543     'DWARF_FRAME_RETURN_COLUMN' to 'DWARF_FRAME_REGNUM (REGNO)'.
29544
29545 -- Macro: DWARF_ALT_FRAME_RETURN_COLUMN
29546     A C expression whose value is an integer giving a DWARF 2 column
29547     number that may be used as an alternative return column.  The
29548     column must not correspond to any gcc hard register (that is, it
29549     must not be in the range of 'DWARF_FRAME_REGNUM').
29550
29551     This macro can be useful if 'DWARF_FRAME_RETURN_COLUMN' is set to a
29552     general register, but an alternative column needs to be used for
29553     signal frames.  Some targets have also used different frame return
29554     columns over time.
29555
29556 -- Macro: DWARF_ZERO_REG
29557     A C expression whose value is an integer giving a DWARF 2 register
29558     number that is considered to always have the value zero.  This
29559     should only be defined if the target has an architected zero
29560     register, and someone decided it was a good idea to use that
29561     register number to terminate the stack backtrace.  New ports should
29562     avoid this.
29563
29564 -- Target Hook: void TARGET_DWARF_HANDLE_FRAME_UNSPEC (const char
29565          *LABEL, rtx PATTERN, int INDEX)
29566     This target hook allows the backend to emit frame-related insns
29567     that contain UNSPECs or UNSPEC_VOLATILEs.  The DWARF 2 call frame
29568     debugging info engine will invoke it on insns of the form
29569          (set (reg) (unspec [...] UNSPEC_INDEX))
29570     and
29571          (set (reg) (unspec_volatile [...] UNSPECV_INDEX)).
29572     to let the backend emit the call frame instructions.  LABEL is the
29573     CFI label attached to the insn, PATTERN is the pattern of the insn
29574     and INDEX is 'UNSPEC_INDEX' or 'UNSPECV_INDEX'.
29575
29576 -- Macro: INCOMING_FRAME_SP_OFFSET
29577     A C expression whose value is an integer giving the offset, in
29578     bytes, from the value of the stack pointer register to the top of
29579     the stack frame at the beginning of any function, before the
29580     prologue.  The top of the frame is defined to be the value of the
29581     stack pointer in the previous frame, just before the call
29582     instruction.
29583
29584     You only need to define this macro if you want to support call
29585     frame debugging information like that provided by DWARF 2.
29586
29587 -- Macro: ARG_POINTER_CFA_OFFSET (FUNDECL)
29588     A C expression whose value is an integer giving the offset, in
29589     bytes, from the argument pointer to the canonical frame address
29590     (cfa).  The final value should coincide with that calculated by
29591     'INCOMING_FRAME_SP_OFFSET'.  Which is unfortunately not usable
29592     during virtual register instantiation.
29593
29594     The default value for this macro is 'FIRST_PARM_OFFSET (fundecl) +
29595     crtl->args.pretend_args_size', which is correct for most machines;
29596     in general, the arguments are found immediately before the stack
29597     frame.  Note that this is not the case on some targets that save
29598     registers into the caller's frame, such as SPARC and rs6000, and so
29599     such targets need to define this macro.
29600
29601     You only need to define this macro if the default is incorrect, and
29602     you want to support call frame debugging information like that
29603     provided by DWARF 2.
29604
29605 -- Macro: FRAME_POINTER_CFA_OFFSET (FUNDECL)
29606     If defined, a C expression whose value is an integer giving the
29607     offset in bytes from the frame pointer to the canonical frame
29608     address (cfa).  The final value should coincide with that
29609     calculated by 'INCOMING_FRAME_SP_OFFSET'.
29610
29611     Normally the CFA is calculated as an offset from the argument
29612     pointer, via 'ARG_POINTER_CFA_OFFSET', but if the argument pointer
29613     is variable due to the ABI, this may not be possible.  If this
29614     macro is defined, it implies that the virtual register
29615     instantiation should be based on the frame pointer instead of the
29616     argument pointer.  Only one of 'FRAME_POINTER_CFA_OFFSET' and
29617     'ARG_POINTER_CFA_OFFSET' should be defined.
29618
29619 -- Macro: CFA_FRAME_BASE_OFFSET (FUNDECL)
29620     If defined, a C expression whose value is an integer giving the
29621     offset in bytes from the canonical frame address (cfa) to the frame
29622     base used in DWARF 2 debug information.  The default is zero.  A
29623     different value may reduce the size of debug information on some
29624     ports.
29625
29626
29627File: gccint.info,  Node: Exception Handling,  Next: Stack Checking,  Prev: Frame Layout,  Up: Stack and Calling
29628
2962917.10.2 Exception Handling Support
29630----------------------------------
29631
29632 -- Macro: EH_RETURN_DATA_REGNO (N)
29633     A C expression whose value is the Nth register number used for data
29634     by exception handlers, or 'INVALID_REGNUM' if fewer than N
29635     registers are usable.
29636
29637     The exception handling library routines communicate with the
29638     exception handlers via a set of agreed upon registers.  Ideally
29639     these registers should be call-clobbered; it is possible to use
29640     call-saved registers, but may negatively impact code size.  The
29641     target must support at least 2 data registers, but should define 4
29642     if there are enough free registers.
29643
29644     You must define this macro if you want to support call frame
29645     exception handling like that provided by DWARF 2.
29646
29647 -- Macro: EH_RETURN_STACKADJ_RTX
29648     A C expression whose value is RTL representing a location in which
29649     to store a stack adjustment to be applied before function return.
29650     This is used to unwind the stack to an exception handler's call
29651     frame.  It will be assigned zero on code paths that return
29652     normally.
29653
29654     Typically this is a call-clobbered hard register that is otherwise
29655     untouched by the epilogue, but could also be a stack slot.
29656
29657     Do not define this macro if the stack pointer is saved and restored
29658     by the regular prolog and epilog code in the call frame itself; in
29659     this case, the exception handling library routines will update the
29660     stack location to be restored in place.  Otherwise, you must define
29661     this macro if you want to support call frame exception handling
29662     like that provided by DWARF 2.
29663
29664 -- Macro: EH_RETURN_HANDLER_RTX
29665     A C expression whose value is RTL representing a location in which
29666     to store the address of an exception handler to which we should
29667     return.  It will not be assigned on code paths that return
29668     normally.
29669
29670     Typically this is the location in the call frame at which the
29671     normal return address is stored.  For targets that return by
29672     popping an address off the stack, this might be a memory address
29673     just below the _target_ call frame rather than inside the current
29674     call frame.  If defined, 'EH_RETURN_STACKADJ_RTX' will have already
29675     been assigned, so it may be used to calculate the location of the
29676     target call frame.
29677
29678     Some targets have more complex requirements than storing to an
29679     address calculable during initial code generation.  In that case
29680     the 'eh_return' instruction pattern should be used instead.
29681
29682     If you want to support call frame exception handling, you must
29683     define either this macro or the 'eh_return' instruction pattern.
29684
29685 -- Macro: RETURN_ADDR_OFFSET
29686     If defined, an integer-valued C expression for which rtl will be
29687     generated to add it to the exception handler address before it is
29688     searched in the exception handling tables, and to subtract it again
29689     from the address before using it to return to the exception
29690     handler.
29691
29692 -- Macro: ASM_PREFERRED_EH_DATA_FORMAT (CODE, GLOBAL)
29693     This macro chooses the encoding of pointers embedded in the
29694     exception handling sections.  If at all possible, this should be
29695     defined such that the exception handling section will not require
29696     dynamic relocations, and so may be read-only.
29697
29698     CODE is 0 for data, 1 for code labels, 2 for function pointers.
29699     GLOBAL is true if the symbol may be affected by dynamic
29700     relocations.  The macro should return a combination of the
29701     'DW_EH_PE_*' defines as found in 'dwarf2.h'.
29702
29703     If this macro is not defined, pointers will not be encoded but
29704     represented directly.
29705
29706 -- Macro: ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX (FILE, ENCODING, SIZE,
29707          ADDR, DONE)
29708     This macro allows the target to emit whatever special magic is
29709     required to represent the encoding chosen by
29710     'ASM_PREFERRED_EH_DATA_FORMAT'.  Generic code takes care of
29711     pc-relative and indirect encodings; this must be defined if the
29712     target uses text-relative or data-relative encodings.
29713
29714     This is a C statement that branches to DONE if the format was
29715     handled.  ENCODING is the format chosen, SIZE is the number of
29716     bytes that the format occupies, ADDR is the 'SYMBOL_REF' to be
29717     emitted.
29718
29719 -- Macro: MD_FALLBACK_FRAME_STATE_FOR (CONTEXT, FS)
29720     This macro allows the target to add CPU and operating system
29721     specific code to the call-frame unwinder for use when there is no
29722     unwind data available.  The most common reason to implement this
29723     macro is to unwind through signal frames.
29724
29725     This macro is called from 'uw_frame_state_for' in 'unwind-dw2.c',
29726     'unwind-dw2-xtensa.c' and 'unwind-ia64.c'.  CONTEXT is an
29727     '_Unwind_Context'; FS is an '_Unwind_FrameState'.  Examine
29728     'context->ra' for the address of the code being executed and
29729     'context->cfa' for the stack pointer value.  If the frame can be
29730     decoded, the register save addresses should be updated in FS and
29731     the macro should evaluate to '_URC_NO_REASON'.  If the frame cannot
29732     be decoded, the macro should evaluate to '_URC_END_OF_STACK'.
29733
29734     For proper signal handling in Java this macro is accompanied by
29735     'MAKE_THROW_FRAME', defined in 'libjava/include/*-signal.h'
29736     headers.
29737
29738 -- Macro: MD_HANDLE_UNWABI (CONTEXT, FS)
29739     This macro allows the target to add operating system specific code
29740     to the call-frame unwinder to handle the IA-64 '.unwabi' unwinding
29741     directive, usually used for signal or interrupt frames.
29742
29743     This macro is called from 'uw_update_context' in libgcc's
29744     'unwind-ia64.c'.  CONTEXT is an '_Unwind_Context'; FS is an
29745     '_Unwind_FrameState'.  Examine 'fs->unwabi' for the abi and context
29746     in the '.unwabi' directive.  If the '.unwabi' directive can be
29747     handled, the register save addresses should be updated in FS.
29748
29749 -- Macro: TARGET_USES_WEAK_UNWIND_INFO
29750     A C expression that evaluates to true if the target requires unwind
29751     info to be given comdat linkage.  Define it to be '1' if comdat
29752     linkage is necessary.  The default is '0'.
29753
29754
29755File: gccint.info,  Node: Stack Checking,  Next: Frame Registers,  Prev: Exception Handling,  Up: Stack and Calling
29756
2975717.10.3 Specifying How Stack Checking is Done
29758---------------------------------------------
29759
29760GCC will check that stack references are within the boundaries of the
29761stack, if the option '-fstack-check' is specified, in one of three ways:
29762
29763  1. If the value of the 'STACK_CHECK_BUILTIN' macro is nonzero, GCC
29764     will assume that you have arranged for full stack checking to be
29765     done at appropriate places in the configuration files.  GCC will
29766     not do other special processing.
29767
29768  2. If 'STACK_CHECK_BUILTIN' is zero and the value of the
29769     'STACK_CHECK_STATIC_BUILTIN' macro is nonzero, GCC will assume that
29770     you have arranged for static stack checking (checking of the static
29771     stack frame of functions) to be done at appropriate places in the
29772     configuration files.  GCC will only emit code to do dynamic stack
29773     checking (checking on dynamic stack allocations) using the third
29774     approach below.
29775
29776  3. If neither of the above are true, GCC will generate code to
29777     periodically "probe" the stack pointer using the values of the
29778     macros defined below.
29779
29780 If neither STACK_CHECK_BUILTIN nor STACK_CHECK_STATIC_BUILTIN is
29781defined, GCC will change its allocation strategy for large objects if
29782the option '-fstack-check' is specified: they will always be allocated
29783dynamically if their size exceeds 'STACK_CHECK_MAX_VAR_SIZE' bytes.
29784
29785 -- Macro: STACK_CHECK_BUILTIN
29786     A nonzero value if stack checking is done by the configuration
29787     files in a machine-dependent manner.  You should define this macro
29788     if stack checking is required by the ABI of your machine or if you
29789     would like to do stack checking in some more efficient way than the
29790     generic approach.  The default value of this macro is zero.
29791
29792 -- Macro: STACK_CHECK_STATIC_BUILTIN
29793     A nonzero value if static stack checking is done by the
29794     configuration files in a machine-dependent manner.  You should
29795     define this macro if you would like to do static stack checking in
29796     some more efficient way than the generic approach.  The default
29797     value of this macro is zero.
29798
29799 -- Macro: STACK_CHECK_PROBE_INTERVAL_EXP
29800     An integer specifying the interval at which GCC must generate stack
29801     probe instructions, defined as 2 raised to this integer.  You will
29802     normally define this macro so that the interval be no larger than
29803     the size of the "guard pages" at the end of a stack area.  The
29804     default value of 12 (4096-byte interval) is suitable for most
29805     systems.
29806
29807 -- Macro: STACK_CHECK_MOVING_SP
29808     An integer which is nonzero if GCC should move the stack pointer
29809     page by page when doing probes.  This can be necessary on systems
29810     where the stack pointer contains the bottom address of the memory
29811     area accessible to the executing thread at any point in time.  In
29812     this situation an alternate signal stack is required in order to be
29813     able to recover from a stack overflow.  The default value of this
29814     macro is zero.
29815
29816 -- Macro: STACK_CHECK_PROTECT
29817     The number of bytes of stack needed to recover from a stack
29818     overflow, for languages where such a recovery is supported.  The
29819     default value of 75 words with the 'setjmp'/'longjmp'-based
29820     exception handling mechanism and 8192 bytes with other exception
29821     handling mechanisms should be adequate for most machines.
29822
29823 The following macros are relevant only if neither STACK_CHECK_BUILTIN
29824nor STACK_CHECK_STATIC_BUILTIN is defined; you can omit them altogether
29825in the opposite case.
29826
29827 -- Macro: STACK_CHECK_MAX_FRAME_SIZE
29828     The maximum size of a stack frame, in bytes.  GCC will generate
29829     probe instructions in non-leaf functions to ensure at least this
29830     many bytes of stack are available.  If a stack frame is larger than
29831     this size, stack checking will not be reliable and GCC will issue a
29832     warning.  The default is chosen so that GCC only generates one
29833     instruction on most systems.  You should normally not change the
29834     default value of this macro.
29835
29836 -- Macro: STACK_CHECK_FIXED_FRAME_SIZE
29837     GCC uses this value to generate the above warning message.  It
29838     represents the amount of fixed frame used by a function, not
29839     including space for any callee-saved registers, temporaries and
29840     user variables.  You need only specify an upper bound for this
29841     amount and will normally use the default of four words.
29842
29843 -- Macro: STACK_CHECK_MAX_VAR_SIZE
29844     The maximum size, in bytes, of an object that GCC will place in the
29845     fixed area of the stack frame when the user specifies
29846     '-fstack-check'.  GCC computed the default from the values of the
29847     above macros and you will normally not need to override that
29848     default.
29849
29850
29851File: gccint.info,  Node: Frame Registers,  Next: Elimination,  Prev: Stack Checking,  Up: Stack and Calling
29852
2985317.10.4 Registers That Address the Stack Frame
29854----------------------------------------------
29855
29856This discusses registers that address the stack frame.
29857
29858 -- Macro: STACK_POINTER_REGNUM
29859     The register number of the stack pointer register, which must also
29860     be a fixed register according to 'FIXED_REGISTERS'.  On most
29861     machines, the hardware determines which register this is.
29862
29863 -- Macro: FRAME_POINTER_REGNUM
29864     The register number of the frame pointer register, which is used to
29865     access automatic variables in the stack frame.  On some machines,
29866     the hardware determines which register this is.  On other machines,
29867     you can choose any register you wish for this purpose.
29868
29869 -- Macro: HARD_FRAME_POINTER_REGNUM
29870     On some machines the offset between the frame pointer and starting
29871     offset of the automatic variables is not known until after register
29872     allocation has been done (for example, because the saved registers
29873     are between these two locations).  On those machines, define
29874     'FRAME_POINTER_REGNUM' the number of a special, fixed register to
29875     be used internally until the offset is known, and define
29876     'HARD_FRAME_POINTER_REGNUM' to be the actual hard register number
29877     used for the frame pointer.
29878
29879     You should define this macro only in the very rare circumstances
29880     when it is not possible to calculate the offset between the frame
29881     pointer and the automatic variables until after register allocation
29882     has been completed.  When this macro is defined, you must also
29883     indicate in your definition of 'ELIMINABLE_REGS' how to eliminate
29884     'FRAME_POINTER_REGNUM' into either 'HARD_FRAME_POINTER_REGNUM' or
29885     'STACK_POINTER_REGNUM'.
29886
29887     Do not define this macro if it would be the same as
29888     'FRAME_POINTER_REGNUM'.
29889
29890 -- Macro: ARG_POINTER_REGNUM
29891     The register number of the arg pointer register, which is used to
29892     access the function's argument list.  On some machines, this is the
29893     same as the frame pointer register.  On some machines, the hardware
29894     determines which register this is.  On other machines, you can
29895     choose any register you wish for this purpose.  If this is not the
29896     same register as the frame pointer register, then you must mark it
29897     as a fixed register according to 'FIXED_REGISTERS', or arrange to
29898     be able to eliminate it (*note Elimination::).
29899
29900 -- Macro: HARD_FRAME_POINTER_IS_FRAME_POINTER
29901     Define this to a preprocessor constant that is nonzero if
29902     'hard_frame_pointer_rtx' and 'frame_pointer_rtx' should be the
29903     same.  The default definition is '(HARD_FRAME_POINTER_REGNUM ==
29904     FRAME_POINTER_REGNUM)'; you only need to define this macro if that
29905     definition is not suitable for use in preprocessor conditionals.
29906
29907 -- Macro: HARD_FRAME_POINTER_IS_ARG_POINTER
29908     Define this to a preprocessor constant that is nonzero if
29909     'hard_frame_pointer_rtx' and 'arg_pointer_rtx' should be the same.
29910     The default definition is '(HARD_FRAME_POINTER_REGNUM ==
29911     ARG_POINTER_REGNUM)'; you only need to define this macro if that
29912     definition is not suitable for use in preprocessor conditionals.
29913
29914 -- Macro: RETURN_ADDRESS_POINTER_REGNUM
29915     The register number of the return address pointer register, which
29916     is used to access the current function's return address from the
29917     stack.  On some machines, the return address is not at a fixed
29918     offset from the frame pointer or stack pointer or argument pointer.
29919     This register can be defined to point to the return address on the
29920     stack, and then be converted by 'ELIMINABLE_REGS' into either the
29921     frame pointer or stack pointer.
29922
29923     Do not define this macro unless there is no other way to get the
29924     return address from the stack.
29925
29926 -- Macro: STATIC_CHAIN_REGNUM
29927 -- Macro: STATIC_CHAIN_INCOMING_REGNUM
29928     Register numbers used for passing a function's static chain
29929     pointer.  If register windows are used, the register number as seen
29930     by the called function is 'STATIC_CHAIN_INCOMING_REGNUM', while the
29931     register number as seen by the calling function is
29932     'STATIC_CHAIN_REGNUM'.  If these registers are the same,
29933     'STATIC_CHAIN_INCOMING_REGNUM' need not be defined.
29934
29935     The static chain register need not be a fixed register.
29936
29937     If the static chain is passed in memory, these macros should not be
29938     defined; instead, the 'TARGET_STATIC_CHAIN' hook should be used.
29939
29940 -- Target Hook: rtx TARGET_STATIC_CHAIN (const_tree FNDECL, bool
29941          INCOMING_P)
29942     This hook replaces the use of 'STATIC_CHAIN_REGNUM' et al for
29943     targets that may use different static chain locations for different
29944     nested functions.  This may be required if the target has function
29945     attributes that affect the calling conventions of the function and
29946     those calling conventions use different static chain locations.
29947
29948     The default version of this hook uses 'STATIC_CHAIN_REGNUM' et al.
29949
29950     If the static chain is passed in memory, this hook should be used
29951     to provide rtx giving 'mem' expressions that denote where they are
29952     stored.  Often the 'mem' expression as seen by the caller will be
29953     at an offset from the stack pointer and the 'mem' expression as
29954     seen by the callee will be at an offset from the frame pointer.
29955     The variables 'stack_pointer_rtx', 'frame_pointer_rtx', and
29956     'arg_pointer_rtx' will have been initialized and should be used to
29957     refer to those items.
29958
29959 -- Macro: DWARF_FRAME_REGISTERS
29960     This macro specifies the maximum number of hard registers that can
29961     be saved in a call frame.  This is used to size data structures
29962     used in DWARF2 exception handling.
29963
29964     Prior to GCC 3.0, this macro was needed in order to establish a
29965     stable exception handling ABI in the face of adding new hard
29966     registers for ISA extensions.  In GCC 3.0 and later, the EH ABI is
29967     insulated from changes in the number of hard registers.
29968     Nevertheless, this macro can still be used to reduce the runtime
29969     memory requirements of the exception handling routines, which can
29970     be substantial if the ISA contains a lot of registers that are not
29971     call-saved.
29972
29973     If this macro is not defined, it defaults to
29974     'FIRST_PSEUDO_REGISTER'.
29975
29976 -- Macro: PRE_GCC3_DWARF_FRAME_REGISTERS
29977
29978     This macro is similar to 'DWARF_FRAME_REGISTERS', but is provided
29979     for backward compatibility in pre GCC 3.0 compiled code.
29980
29981     If this macro is not defined, it defaults to
29982     'DWARF_FRAME_REGISTERS'.
29983
29984 -- Macro: DWARF_REG_TO_UNWIND_COLUMN (REGNO)
29985
29986     Define this macro if the target's representation for dwarf
29987     registers is different than the internal representation for unwind
29988     column.  Given a dwarf register, this macro should return the
29989     internal unwind column number to use instead.
29990
29991     See the PowerPC's SPE target for an example.
29992
29993 -- Macro: DWARF_FRAME_REGNUM (REGNO)
29994
29995     Define this macro if the target's representation for dwarf
29996     registers used in .eh_frame or .debug_frame is different from that
29997     used in other debug info sections.  Given a GCC hard register
29998     number, this macro should return the .eh_frame register number.
29999     The default is 'DBX_REGISTER_NUMBER (REGNO)'.
30000
30001 -- Macro: DWARF2_FRAME_REG_OUT (REGNO, FOR_EH)
30002
30003     Define this macro to map register numbers held in the call frame
30004     info that GCC has collected using 'DWARF_FRAME_REGNUM' to those
30005     that should be output in .debug_frame ('FOR_EH' is zero) and
30006     .eh_frame ('FOR_EH' is nonzero).  The default is to return 'REGNO'.
30007
30008 -- Macro: REG_VALUE_IN_UNWIND_CONTEXT
30009
30010     Define this macro if the target stores register values as
30011     '_Unwind_Word' type in unwind context.  It should be defined if
30012     target register size is larger than the size of 'void *'.  The
30013     default is to store register values as 'void *' type.
30014
30015 -- Macro: ASSUME_EXTENDED_UNWIND_CONTEXT
30016
30017     Define this macro to be 1 if the target always uses extended unwind
30018     context with version, args_size and by_value fields.  If it is
30019     undefined, it will be defined to 1 when
30020     'REG_VALUE_IN_UNWIND_CONTEXT' is defined and 0 otherwise.
30021
30022
30023File: gccint.info,  Node: Elimination,  Next: Stack Arguments,  Prev: Frame Registers,  Up: Stack and Calling
30024
3002517.10.5 Eliminating Frame Pointer and Arg Pointer
30026-------------------------------------------------
30027
30028This is about eliminating the frame pointer and arg pointer.
30029
30030 -- Target Hook: bool TARGET_FRAME_POINTER_REQUIRED (void)
30031     This target hook should return 'true' if a function must have and
30032     use a frame pointer.  This target hook is called in the reload
30033     pass.  If its return value is 'true' the function will have a frame
30034     pointer.
30035
30036     This target hook can in principle examine the current function and
30037     decide according to the facts, but on most machines the constant
30038     'false' or the constant 'true' suffices.  Use 'false' when the
30039     machine allows code to be generated with no frame pointer, and
30040     doing so saves some time or space.  Use 'true' when there is no
30041     possible advantage to avoiding a frame pointer.
30042
30043     In certain cases, the compiler does not know how to produce valid
30044     code without a frame pointer.  The compiler recognizes those cases
30045     and automatically gives the function a frame pointer regardless of
30046     what 'TARGET_FRAME_POINTER_REQUIRED' returns.  You don't need to
30047     worry about them.
30048
30049     In a function that does not require a frame pointer, the frame
30050     pointer register can be allocated for ordinary usage, unless you
30051     mark it as a fixed register.  See 'FIXED_REGISTERS' for more
30052     information.
30053
30054     Default return value is 'false'.
30055
30056 -- Macro: INITIAL_FRAME_POINTER_OFFSET (DEPTH-VAR)
30057     A C statement to store in the variable DEPTH-VAR the difference
30058     between the frame pointer and the stack pointer values immediately
30059     after the function prologue.  The value would be computed from
30060     information such as the result of 'get_frame_size ()' and the
30061     tables of registers 'regs_ever_live' and 'call_used_regs'.
30062
30063     If 'ELIMINABLE_REGS' is defined, this macro will be not be used and
30064     need not be defined.  Otherwise, it must be defined even if
30065     'TARGET_FRAME_POINTER_REQUIRED' always returns true; in that case,
30066     you may set DEPTH-VAR to anything.
30067
30068 -- Macro: ELIMINABLE_REGS
30069     If defined, this macro specifies a table of register pairs used to
30070     eliminate unneeded registers that point into the stack frame.  If
30071     it is not defined, the only elimination attempted by the compiler
30072     is to replace references to the frame pointer with references to
30073     the stack pointer.
30074
30075     The definition of this macro is a list of structure
30076     initializations, each of which specifies an original and
30077     replacement register.
30078
30079     On some machines, the position of the argument pointer is not known
30080     until the compilation is completed.  In such a case, a separate
30081     hard register must be used for the argument pointer.  This register
30082     can be eliminated by replacing it with either the frame pointer or
30083     the argument pointer, depending on whether or not the frame pointer
30084     has been eliminated.
30085
30086     In this case, you might specify:
30087          #define ELIMINABLE_REGS  \
30088          {{ARG_POINTER_REGNUM, STACK_POINTER_REGNUM}, \
30089           {ARG_POINTER_REGNUM, FRAME_POINTER_REGNUM}, \
30090           {FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM}}
30091
30092     Note that the elimination of the argument pointer with the stack
30093     pointer is specified first since that is the preferred elimination.
30094
30095 -- Target Hook: bool TARGET_CAN_ELIMINATE (const int FROM_REG, const
30096          int TO_REG)
30097     This target hook should returns 'true' if the compiler is allowed
30098     to try to replace register number FROM_REG with register number
30099     TO_REG.  This target hook need only be defined if 'ELIMINABLE_REGS'
30100     is defined, and will usually be 'true', since most of the cases
30101     preventing register elimination are things that the compiler
30102     already knows about.
30103
30104     Default return value is 'true'.
30105
30106 -- Macro: INITIAL_ELIMINATION_OFFSET (FROM-REG, TO-REG, OFFSET-VAR)
30107     This macro is similar to 'INITIAL_FRAME_POINTER_OFFSET'.  It
30108     specifies the initial difference between the specified pair of
30109     registers.  This macro must be defined if 'ELIMINABLE_REGS' is
30110     defined.
30111
30112
30113File: gccint.info,  Node: Stack Arguments,  Next: Register Arguments,  Prev: Elimination,  Up: Stack and Calling
30114
3011517.10.6 Passing Function Arguments on the Stack
30116-----------------------------------------------
30117
30118The macros in this section control how arguments are passed on the
30119stack.  See the following section for other macros that control passing
30120certain arguments in registers.
30121
30122 -- Target Hook: bool TARGET_PROMOTE_PROTOTYPES (const_tree FNTYPE)
30123     This target hook returns 'true' if an argument declared in a
30124     prototype as an integral type smaller than 'int' should actually be
30125     passed as an 'int'.  In addition to avoiding errors in certain
30126     cases of mismatch, it also makes for better code on certain
30127     machines.  The default is to not promote prototypes.
30128
30129 -- Macro: PUSH_ARGS
30130     A C expression.  If nonzero, push insns will be used to pass
30131     outgoing arguments.  If the target machine does not have a push
30132     instruction, set it to zero.  That directs GCC to use an alternate
30133     strategy: to allocate the entire argument block and then store the
30134     arguments into it.  When 'PUSH_ARGS' is nonzero, 'PUSH_ROUNDING'
30135     must be defined too.
30136
30137 -- Macro: PUSH_ARGS_REVERSED
30138     A C expression.  If nonzero, function arguments will be evaluated
30139     from last to first, rather than from first to last.  If this macro
30140     is not defined, it defaults to 'PUSH_ARGS' on targets where the
30141     stack and args grow in opposite directions, and 0 otherwise.
30142
30143 -- Macro: PUSH_ROUNDING (NPUSHED)
30144     A C expression that is the number of bytes actually pushed onto the
30145     stack when an instruction attempts to push NPUSHED bytes.
30146
30147     On some machines, the definition
30148
30149          #define PUSH_ROUNDING(BYTES) (BYTES)
30150
30151     will suffice.  But on other machines, instructions that appear to
30152     push one byte actually push two bytes in an attempt to maintain
30153     alignment.  Then the definition should be
30154
30155          #define PUSH_ROUNDING(BYTES) (((BYTES) + 1) & ~1)
30156
30157     If the value of this macro has a type, it should be an unsigned
30158     type.
30159
30160 -- Macro: ACCUMULATE_OUTGOING_ARGS
30161     A C expression.  If nonzero, the maximum amount of space required
30162     for outgoing arguments will be computed and placed into
30163     'crtl->outgoing_args_size'.  No space will be pushed onto the stack
30164     for each call; instead, the function prologue should increase the
30165     stack frame size by this amount.
30166
30167     Setting both 'PUSH_ARGS' and 'ACCUMULATE_OUTGOING_ARGS' is not
30168     proper.
30169
30170 -- Macro: REG_PARM_STACK_SPACE (FNDECL)
30171     Define this macro if functions should assume that stack space has
30172     been allocated for arguments even when their values are passed in
30173     registers.
30174
30175     The value of this macro is the size, in bytes, of the area reserved
30176     for arguments passed in registers for the function represented by
30177     FNDECL, which can be zero if GCC is calling a library function.
30178     The argument FNDECL can be the FUNCTION_DECL, or the type itself of
30179     the function.
30180
30181     This space can be allocated by the caller, or be a part of the
30182     machine-dependent stack frame: 'OUTGOING_REG_PARM_STACK_SPACE' says
30183     which.
30184
30185 -- Macro: OUTGOING_REG_PARM_STACK_SPACE (FNTYPE)
30186     Define this to a nonzero value if it is the responsibility of the
30187     caller to allocate the area reserved for arguments passed in
30188     registers when calling a function of FNTYPE.  FNTYPE may be NULL if
30189     the function called is a library function.
30190
30191     If 'ACCUMULATE_OUTGOING_ARGS' is defined, this macro controls
30192     whether the space for these arguments counts in the value of
30193     'crtl->outgoing_args_size'.
30194
30195 -- Macro: STACK_PARMS_IN_REG_PARM_AREA
30196     Define this macro if 'REG_PARM_STACK_SPACE' is defined, but the
30197     stack parameters don't skip the area specified by it.
30198
30199     Normally, when a parameter is not passed in registers, it is placed
30200     on the stack beyond the 'REG_PARM_STACK_SPACE' area.  Defining this
30201     macro suppresses this behavior and causes the parameter to be
30202     passed on the stack in its natural location.
30203
30204 -- Target Hook: int TARGET_RETURN_POPS_ARGS (tree FUNDECL, tree
30205          FUNTYPE, int SIZE)
30206     This target hook returns the number of bytes of its own arguments
30207     that a function pops on returning, or 0 if the function pops no
30208     arguments and the caller must therefore pop them all after the
30209     function returns.
30210
30211     FUNDECL is a C variable whose value is a tree node that describes
30212     the function in question.  Normally it is a node of type
30213     'FUNCTION_DECL' that describes the declaration of the function.
30214     From this you can obtain the 'DECL_ATTRIBUTES' of the function.
30215
30216     FUNTYPE is a C variable whose value is a tree node that describes
30217     the function in question.  Normally it is a node of type
30218     'FUNCTION_TYPE' that describes the data type of the function.  From
30219     this it is possible to obtain the data types of the value and
30220     arguments (if known).
30221
30222     When a call to a library function is being considered, FUNDECL will
30223     contain an identifier node for the library function.  Thus, if you
30224     need to distinguish among various library functions, you can do so
30225     by their names.  Note that "library function" in this context means
30226     a function used to perform arithmetic, whose name is known
30227     specially in the compiler and was not mentioned in the C code being
30228     compiled.
30229
30230     SIZE is the number of bytes of arguments passed on the stack.  If a
30231     variable number of bytes is passed, it is zero, and argument
30232     popping will always be the responsibility of the calling function.
30233
30234     On the VAX, all functions always pop their arguments, so the
30235     definition of this macro is SIZE.  On the 68000, using the standard
30236     calling convention, no functions pop their arguments, so the value
30237     of the macro is always 0 in this case.  But an alternative calling
30238     convention is available in which functions that take a fixed number
30239     of arguments pop them but other functions (such as 'printf') pop
30240     nothing (the caller pops all).  When this convention is in use,
30241     FUNTYPE is examined to determine whether a function takes a fixed
30242     number of arguments.
30243
30244 -- Macro: CALL_POPS_ARGS (CUM)
30245     A C expression that should indicate the number of bytes a call
30246     sequence pops off the stack.  It is added to the value of
30247     'RETURN_POPS_ARGS' when compiling a function call.
30248
30249     CUM is the variable in which all arguments to the called function
30250     have been accumulated.
30251
30252     On certain architectures, such as the SH5, a call trampoline is
30253     used that pops certain registers off the stack, depending on the
30254     arguments that have been passed to the function.  Since this is a
30255     property of the call site, not of the called function,
30256     'RETURN_POPS_ARGS' is not appropriate.
30257
30258
30259File: gccint.info,  Node: Register Arguments,  Next: Scalar Return,  Prev: Stack Arguments,  Up: Stack and Calling
30260
3026117.10.7 Passing Arguments in Registers
30262--------------------------------------
30263
30264This section describes the macros which let you control how various
30265types of arguments are passed in registers or how they are arranged in
30266the stack.
30267
30268 -- Target Hook: rtx TARGET_FUNCTION_ARG (cumulative_args_t CA, enum
30269          machine_mode MODE, const_tree TYPE, bool NAMED)
30270     Return an RTX indicating whether a function argument is passed in a
30271     register and if so, which register.
30272
30273     The arguments are CA, which summarizes all the previous arguments;
30274     MODE, the machine mode of the argument; TYPE, the data type of the
30275     argument as a tree node or 0 if that is not known (which happens
30276     for C support library functions); and NAMED, which is 'true' for an
30277     ordinary argument and 'false' for nameless arguments that
30278     correspond to '...' in the called function's prototype.  TYPE can
30279     be an incomplete type if a syntax error has previously occurred.
30280
30281     The return value is usually either a 'reg' RTX for the hard
30282     register in which to pass the argument, or zero to pass the
30283     argument on the stack.
30284
30285     The value of the expression can also be a 'parallel' RTX.  This is
30286     used when an argument is passed in multiple locations.  The mode of
30287     the 'parallel' should be the mode of the entire argument.  The
30288     'parallel' holds any number of 'expr_list' pairs; each one
30289     describes where part of the argument is passed.  In each
30290     'expr_list' the first operand must be a 'reg' RTX for the hard
30291     register in which to pass this part of the argument, and the mode
30292     of the register RTX indicates how large this part of the argument
30293     is.  The second operand of the 'expr_list' is a 'const_int' which
30294     gives the offset in bytes into the entire argument of where this
30295     part starts.  As a special exception the first 'expr_list' in the
30296     'parallel' RTX may have a first operand of zero.  This indicates
30297     that the entire argument is also stored on the stack.
30298
30299     The last time this hook is called, it is called with 'MODE ==
30300     VOIDmode', and its result is passed to the 'call' or 'call_value'
30301     pattern as operands 2 and 3 respectively.
30302
30303     The usual way to make the ISO library 'stdarg.h' work on a machine
30304     where some arguments are usually passed in registers, is to cause
30305     nameless arguments to be passed on the stack instead.  This is done
30306     by making 'TARGET_FUNCTION_ARG' return 0 whenever NAMED is 'false'.
30307
30308     You may use the hook 'targetm.calls.must_pass_in_stack' in the
30309     definition of this macro to determine if this argument is of a type
30310     that must be passed in the stack.  If 'REG_PARM_STACK_SPACE' is not
30311     defined and 'TARGET_FUNCTION_ARG' returns nonzero for such an
30312     argument, the compiler will abort.  If 'REG_PARM_STACK_SPACE' is
30313     defined, the argument will be computed in the stack and then loaded
30314     into a register.
30315
30316 -- Target Hook: bool TARGET_MUST_PASS_IN_STACK (enum machine_mode MODE,
30317          const_tree TYPE)
30318     This target hook should return 'true' if we should not pass TYPE
30319     solely in registers.  The file 'expr.h' defines a definition that
30320     is usually appropriate, refer to 'expr.h' for additional
30321     documentation.
30322
30323 -- Target Hook: rtx TARGET_FUNCTION_INCOMING_ARG (cumulative_args_t CA,
30324          enum machine_mode MODE, const_tree TYPE, bool NAMED)
30325     Define this hook if the target machine has "register windows", so
30326     that the register in which a function sees an arguments is not
30327     necessarily the same as the one in which the caller passed the
30328     argument.
30329
30330     For such machines, 'TARGET_FUNCTION_ARG' computes the register in
30331     which the caller passes the value, and
30332     'TARGET_FUNCTION_INCOMING_ARG' should be defined in a similar
30333     fashion to tell the function being called where the arguments will
30334     arrive.
30335
30336     If 'TARGET_FUNCTION_INCOMING_ARG' is not defined,
30337     'TARGET_FUNCTION_ARG' serves both purposes.
30338
30339 -- Target Hook: int TARGET_ARG_PARTIAL_BYTES (cumulative_args_t CUM,
30340          enum machine_mode MODE, tree TYPE, bool NAMED)
30341     This target hook returns the number of bytes at the beginning of an
30342     argument that must be put in registers.  The value must be zero for
30343     arguments that are passed entirely in registers or that are
30344     entirely pushed on the stack.
30345
30346     On some machines, certain arguments must be passed partially in
30347     registers and partially in memory.  On these machines, typically
30348     the first few words of arguments are passed in registers, and the
30349     rest on the stack.  If a multi-word argument (a 'double' or a
30350     structure) crosses that boundary, its first few words must be
30351     passed in registers and the rest must be pushed.  This macro tells
30352     the compiler when this occurs, and how many bytes should go in
30353     registers.
30354
30355     'TARGET_FUNCTION_ARG' for these arguments should return the first
30356     register to be used by the caller for this argument; likewise
30357     'TARGET_FUNCTION_INCOMING_ARG', for the called function.
30358
30359 -- Target Hook: bool TARGET_PASS_BY_REFERENCE (cumulative_args_t CUM,
30360          enum machine_mode MODE, const_tree TYPE, bool NAMED)
30361     This target hook should return 'true' if an argument at the
30362     position indicated by CUM should be passed by reference.  This
30363     predicate is queried after target independent reasons for being
30364     passed by reference, such as 'TREE_ADDRESSABLE (type)'.
30365
30366     If the hook returns true, a copy of that argument is made in memory
30367     and a pointer to the argument is passed instead of the argument
30368     itself.  The pointer is passed in whatever way is appropriate for
30369     passing a pointer to that type.
30370
30371 -- Target Hook: bool TARGET_CALLEE_COPIES (cumulative_args_t CUM, enum
30372          machine_mode MODE, const_tree TYPE, bool NAMED)
30373     The function argument described by the parameters to this hook is
30374     known to be passed by reference.  The hook should return true if
30375     the function argument should be copied by the callee instead of
30376     copied by the caller.
30377
30378     For any argument for which the hook returns true, if it can be
30379     determined that the argument is not modified, then a copy need not
30380     be generated.
30381
30382     The default version of this hook always returns false.
30383
30384 -- Macro: CUMULATIVE_ARGS
30385     A C type for declaring a variable that is used as the first
30386     argument of 'TARGET_FUNCTION_ARG' and other related values.  For
30387     some target machines, the type 'int' suffices and can hold the
30388     number of bytes of argument so far.
30389
30390     There is no need to record in 'CUMULATIVE_ARGS' anything about the
30391     arguments that have been passed on the stack.  The compiler has
30392     other variables to keep track of that.  For target machines on
30393     which all arguments are passed on the stack, there is no need to
30394     store anything in 'CUMULATIVE_ARGS'; however, the data structure
30395     must exist and should not be empty, so use 'int'.
30396
30397 -- Macro: OVERRIDE_ABI_FORMAT (FNDECL)
30398     If defined, this macro is called before generating any code for a
30399     function, but after the CFUN descriptor for the function has been
30400     created.  The back end may use this macro to update CFUN to reflect
30401     an ABI other than that which would normally be used by default.  If
30402     the compiler is generating code for a compiler-generated function,
30403     FNDECL may be 'NULL'.
30404
30405 -- Macro: INIT_CUMULATIVE_ARGS (CUM, FNTYPE, LIBNAME, FNDECL,
30406          N_NAMED_ARGS)
30407     A C statement (sans semicolon) for initializing the variable CUM
30408     for the state at the beginning of the argument list.  The variable
30409     has type 'CUMULATIVE_ARGS'.  The value of FNTYPE is the tree node
30410     for the data type of the function which will receive the args, or 0
30411     if the args are to a compiler support library function.  For direct
30412     calls that are not libcalls, FNDECL contain the declaration node of
30413     the function.  FNDECL is also set when 'INIT_CUMULATIVE_ARGS' is
30414     used to find arguments for the function being compiled.
30415     N_NAMED_ARGS is set to the number of named arguments, including a
30416     structure return address if it is passed as a parameter, when
30417     making a call.  When processing incoming arguments, N_NAMED_ARGS is
30418     set to -1.
30419
30420     When processing a call to a compiler support library function,
30421     LIBNAME identifies which one.  It is a 'symbol_ref' rtx which
30422     contains the name of the function, as a string.  LIBNAME is 0 when
30423     an ordinary C function call is being processed.  Thus, each time
30424     this macro is called, either LIBNAME or FNTYPE is nonzero, but
30425     never both of them at once.
30426
30427 -- Macro: INIT_CUMULATIVE_LIBCALL_ARGS (CUM, MODE, LIBNAME)
30428     Like 'INIT_CUMULATIVE_ARGS' but only used for outgoing libcalls, it
30429     gets a 'MODE' argument instead of FNTYPE, that would be 'NULL'.
30430     INDIRECT would always be zero, too.  If this macro is not defined,
30431     'INIT_CUMULATIVE_ARGS (cum, NULL_RTX, libname, 0)' is used instead.
30432
30433 -- Macro: INIT_CUMULATIVE_INCOMING_ARGS (CUM, FNTYPE, LIBNAME)
30434     Like 'INIT_CUMULATIVE_ARGS' but overrides it for the purposes of
30435     finding the arguments for the function being compiled.  If this
30436     macro is undefined, 'INIT_CUMULATIVE_ARGS' is used instead.
30437
30438     The value passed for LIBNAME is always 0, since library routines
30439     with special calling conventions are never compiled with GCC.  The
30440     argument LIBNAME exists for symmetry with 'INIT_CUMULATIVE_ARGS'.
30441
30442 -- Target Hook: void TARGET_FUNCTION_ARG_ADVANCE (cumulative_args_t CA,
30443          enum machine_mode MODE, const_tree TYPE, bool NAMED)
30444     This hook updates the summarizer variable pointed to by CA to
30445     advance past an argument in the argument list.  The values MODE,
30446     TYPE and NAMED describe that argument.  Once this is done, the
30447     variable CUM is suitable for analyzing the _following_ argument
30448     with 'TARGET_FUNCTION_ARG', etc.
30449
30450     This hook need not do anything if the argument in question was
30451     passed on the stack.  The compiler knows how to track the amount of
30452     stack space used for arguments without any special help.
30453
30454 -- Macro: FUNCTION_ARG_OFFSET (MODE, TYPE)
30455     If defined, a C expression that is the number of bytes to add to
30456     the offset of the argument passed in memory.  This is needed for
30457     the SPU, which passes 'char' and 'short' arguments in the preferred
30458     slot that is in the middle of the quad word instead of starting at
30459     the top.
30460
30461 -- Macro: FUNCTION_ARG_PADDING (MODE, TYPE)
30462     If defined, a C expression which determines whether, and in which
30463     direction, to pad out an argument with extra space.  The value
30464     should be of type 'enum direction': either 'upward' to pad above
30465     the argument, 'downward' to pad below, or 'none' to inhibit
30466     padding.
30467
30468     The _amount_ of padding is not controlled by this macro, but by the
30469     target hook 'TARGET_FUNCTION_ARG_ROUND_BOUNDARY'.  It is always
30470     just enough to reach the next multiple of that boundary.
30471
30472     This macro has a default definition which is right for most
30473     systems.  For little-endian machines, the default is to pad upward.
30474     For big-endian machines, the default is to pad downward for an
30475     argument of constant size shorter than an 'int', and upward
30476     otherwise.
30477
30478 -- Macro: PAD_VARARGS_DOWN
30479     If defined, a C expression which determines whether the default
30480     implementation of va_arg will attempt to pad down before reading
30481     the next argument, if that argument is smaller than its aligned
30482     space as controlled by 'PARM_BOUNDARY'.  If this macro is not
30483     defined, all such arguments are padded down if 'BYTES_BIG_ENDIAN'
30484     is true.
30485
30486 -- Macro: BLOCK_REG_PADDING (MODE, TYPE, FIRST)
30487     Specify padding for the last element of a block move between
30488     registers and memory.  FIRST is nonzero if this is the only
30489     element.  Defining this macro allows better control of register
30490     function parameters on big-endian machines, without using
30491     'PARALLEL' rtl.  In particular, 'MUST_PASS_IN_STACK' need not test
30492     padding and mode of types in registers, as there is no longer a
30493     "wrong" part of a register; For example, a three byte aggregate may
30494     be passed in the high part of a register if so required.
30495
30496 -- Target Hook: unsigned int TARGET_FUNCTION_ARG_BOUNDARY (enum
30497          machine_mode MODE, const_tree TYPE)
30498     This hook returns the alignment boundary, in bits, of an argument
30499     with the specified mode and type.  The default hook returns
30500     'PARM_BOUNDARY' for all arguments.
30501
30502 -- Target Hook: unsigned int TARGET_FUNCTION_ARG_ROUND_BOUNDARY (enum
30503          machine_mode MODE, const_tree TYPE)
30504     Normally, the size of an argument is rounded up to 'PARM_BOUNDARY',
30505     which is the default value for this hook.  You can define this hook
30506     to return a different value if an argument size must be rounded to
30507     a larger value.
30508
30509 -- Macro: FUNCTION_ARG_REGNO_P (REGNO)
30510     A C expression that is nonzero if REGNO is the number of a hard
30511     register in which function arguments are sometimes passed.  This
30512     does _not_ include implicit arguments such as the static chain and
30513     the structure-value address.  On many machines, no registers can be
30514     used for this purpose since all function arguments are pushed on
30515     the stack.
30516
30517 -- Target Hook: bool TARGET_SPLIT_COMPLEX_ARG (const_tree TYPE)
30518     This hook should return true if parameter of type TYPE are passed
30519     as two scalar parameters.  By default, GCC will attempt to pack
30520     complex arguments into the target's word size.  Some ABIs require
30521     complex arguments to be split and treated as their individual
30522     components.  For example, on AIX64, complex floats should be passed
30523     in a pair of floating point registers, even though a complex float
30524     would fit in one 64-bit floating point register.
30525
30526     The default value of this hook is 'NULL', which is treated as
30527     always false.
30528
30529 -- Target Hook: tree TARGET_BUILD_BUILTIN_VA_LIST (void)
30530     This hook returns a type node for 'va_list' for the target.  The
30531     default version of the hook returns 'void*'.
30532
30533 -- Target Hook: int TARGET_ENUM_VA_LIST_P (int IDX, const char **PNAME,
30534          tree *PTREE)
30535     This target hook is used in function 'c_common_nodes_and_builtins'
30536     to iterate through the target specific builtin types for va_list.
30537     The variable IDX is used as iterator.  PNAME has to be a pointer to
30538     a 'const char *' and PTREE a pointer to a 'tree' typed variable.
30539     The arguments PNAME and PTREE are used to store the result of this
30540     macro and are set to the name of the va_list builtin type and its
30541     internal type.  If the return value of this macro is zero, then
30542     there is no more element.  Otherwise the IDX should be increased
30543     for the next call of this macro to iterate through all types.
30544
30545 -- Target Hook: tree TARGET_FN_ABI_VA_LIST (tree FNDECL)
30546     This hook returns the va_list type of the calling convention
30547     specified by FNDECL.  The default version of this hook returns
30548     'va_list_type_node'.
30549
30550 -- Target Hook: tree TARGET_CANONICAL_VA_LIST_TYPE (tree TYPE)
30551     This hook returns the va_list type of the calling convention
30552     specified by the type of TYPE.  If TYPE is not a valid va_list
30553     type, it returns 'NULL_TREE'.
30554
30555 -- Target Hook: tree TARGET_GIMPLIFY_VA_ARG_EXPR (tree VALIST, tree
30556          TYPE, gimple_seq *PRE_P, gimple_seq *POST_P)
30557     This hook performs target-specific gimplification of 'VA_ARG_EXPR'.
30558     The first two parameters correspond to the arguments to 'va_arg';
30559     the latter two are as in 'gimplify.c:gimplify_expr'.
30560
30561 -- Target Hook: bool TARGET_VALID_POINTER_MODE (enum machine_mode MODE)
30562     Define this to return nonzero if the port can handle pointers with
30563     machine mode MODE.  The default version of this hook returns true
30564     for both 'ptr_mode' and 'Pmode'.
30565
30566 -- Target Hook: bool TARGET_REF_MAY_ALIAS_ERRNO (struct ao_ref_s *REF)
30567     Define this to return nonzero if the memory reference REF may alias
30568     with the system C library errno location.  The default version of
30569     this hook assumes the system C library errno location is either a
30570     declaration of type int or accessed by dereferencing a pointer to
30571     int.
30572
30573 -- Target Hook: bool TARGET_SCALAR_MODE_SUPPORTED_P (enum machine_mode
30574          MODE)
30575     Define this to return nonzero if the port is prepared to handle
30576     insns involving scalar mode MODE.  For a scalar mode to be
30577     considered supported, all the basic arithmetic and comparisons must
30578     work.
30579
30580     The default version of this hook returns true for any mode required
30581     to handle the basic C types (as defined by the port).  Included
30582     here are the double-word arithmetic supported by the code in
30583     'optabs.c'.
30584
30585 -- Target Hook: bool TARGET_VECTOR_MODE_SUPPORTED_P (enum machine_mode
30586          MODE)
30587     Define this to return nonzero if the port is prepared to handle
30588     insns involving vector mode MODE.  At the very least, it must have
30589     move patterns for this mode.
30590
30591 -- Target Hook: bool TARGET_ARRAY_MODE_SUPPORTED_P (enum machine_mode
30592          MODE, unsigned HOST_WIDE_INT NELEMS)
30593     Return true if GCC should try to use a scalar mode to store an
30594     array of NELEMS elements, given that each element has mode MODE.
30595     Returning true here overrides the usual 'MAX_FIXED_MODE' limit and
30596     allows GCC to use any defined integer mode.
30597
30598     One use of this hook is to support vector load and store operations
30599     that operate on several homogeneous vectors.  For example, ARM NEON
30600     has operations like:
30601
30602          int8x8x3_t vld3_s8 (const int8_t *)
30603
30604     where the return type is defined as:
30605
30606          typedef struct int8x8x3_t
30607          {
30608            int8x8_t val[3];
30609          } int8x8x3_t;
30610
30611     If this hook allows 'val' to have a scalar mode, then 'int8x8x3_t'
30612     can have the same mode.  GCC can then store 'int8x8x3_t's in
30613     registers rather than forcing them onto the stack.
30614
30615 -- Target Hook: bool TARGET_SMALL_REGISTER_CLASSES_FOR_MODE_P (enum
30616          machine_mode MODE)
30617     Define this to return nonzero for machine modes for which the port
30618     has small register classes.  If this target hook returns nonzero
30619     for a given MODE, the compiler will try to minimize the lifetime of
30620     registers in MODE.  The hook may be called with 'VOIDmode' as
30621     argument.  In this case, the hook is expected to return nonzero if
30622     it returns nonzero for any mode.
30623
30624     On some machines, it is risky to let hard registers live across
30625     arbitrary insns.  Typically, these machines have instructions that
30626     require values to be in specific registers (like an accumulator),
30627     and reload will fail if the required hard register is used for
30628     another purpose across such an insn.
30629
30630     Passes before reload do not know which hard registers will be used
30631     in an instruction, but the machine modes of the registers set or
30632     used in the instruction are already known.  And for some machines,
30633     register classes are small for, say, integer registers but not for
30634     floating point registers.  For example, the AMD x86-64 architecture
30635     requires specific registers for the legacy x86 integer
30636     instructions, but there are many SSE registers for floating point
30637     operations.  On such targets, a good strategy may be to return
30638     nonzero from this hook for 'INTEGRAL_MODE_P' machine modes but zero
30639     for the SSE register classes.
30640
30641     The default version of this hook returns false for any mode.  It is
30642     always safe to redefine this hook to return with a nonzero value.
30643     But if you unnecessarily define it, you will reduce the amount of
30644     optimizations that can be performed in some cases.  If you do not
30645     define this hook to return a nonzero value when it is required, the
30646     compiler will run out of spill registers and print a fatal error
30647     message.
30648
30649 -- Target Hook: unsigned int TARGET_FLAGS_REGNUM
30650     If the target has a dedicated flags register, and it needs to use
30651     the post-reload comparison elimination pass, then this value should
30652     be set appropriately.
30653
30654
30655File: gccint.info,  Node: Scalar Return,  Next: Aggregate Return,  Prev: Register Arguments,  Up: Stack and Calling
30656
3065717.10.8 How Scalar Function Values Are Returned
30658-----------------------------------------------
30659
30660This section discusses the macros that control returning scalars as
30661values--values that can fit in registers.
30662
30663 -- Target Hook: rtx TARGET_FUNCTION_VALUE (const_tree RET_TYPE,
30664          const_tree FN_DECL_OR_TYPE, bool OUTGOING)
30665
30666     Define this to return an RTX representing the place where a
30667     function returns or receives a value of data type RET_TYPE, a tree
30668     node representing a data type.  FN_DECL_OR_TYPE is a tree node
30669     representing 'FUNCTION_DECL' or 'FUNCTION_TYPE' of a function being
30670     called.  If OUTGOING is false, the hook should compute the register
30671     in which the caller will see the return value.  Otherwise, the hook
30672     should return an RTX representing the place where a function
30673     returns a value.
30674
30675     On many machines, only 'TYPE_MODE (RET_TYPE)' is relevant.
30676     (Actually, on most machines, scalar values are returned in the same
30677     place regardless of mode.)  The value of the expression is usually
30678     a 'reg' RTX for the hard register where the return value is stored.
30679     The value can also be a 'parallel' RTX, if the return value is in
30680     multiple places.  See 'TARGET_FUNCTION_ARG' for an explanation of
30681     the 'parallel' form.  Note that the callee will populate every
30682     location specified in the 'parallel', but if the first element of
30683     the 'parallel' contains the whole return value, callers will use
30684     that element as the canonical location and ignore the others.  The
30685     m68k port uses this type of 'parallel' to return pointers in both
30686     '%a0' (the canonical location) and '%d0'.
30687
30688     If 'TARGET_PROMOTE_FUNCTION_RETURN' returns true, you must apply
30689     the same promotion rules specified in 'PROMOTE_MODE' if VALTYPE is
30690     a scalar type.
30691
30692     If the precise function being called is known, FUNC is a tree node
30693     ('FUNCTION_DECL') for it; otherwise, FUNC is a null pointer.  This
30694     makes it possible to use a different value-returning convention for
30695     specific functions when all their calls are known.
30696
30697     Some target machines have "register windows" so that the register
30698     in which a function returns its value is not the same as the one in
30699     which the caller sees the value.  For such machines, you should
30700     return different RTX depending on OUTGOING.
30701
30702     'TARGET_FUNCTION_VALUE' is not used for return values with
30703     aggregate data types, because these are returned in another way.
30704     See 'TARGET_STRUCT_VALUE_RTX' and related macros, below.
30705
30706 -- Macro: FUNCTION_VALUE (VALTYPE, FUNC)
30707     This macro has been deprecated.  Use 'TARGET_FUNCTION_VALUE' for a
30708     new target instead.
30709
30710 -- Macro: LIBCALL_VALUE (MODE)
30711     A C expression to create an RTX representing the place where a
30712     library function returns a value of mode MODE.
30713
30714     Note that "library function" in this context means a compiler
30715     support routine, used to perform arithmetic, whose name is known
30716     specially by the compiler and was not mentioned in the C code being
30717     compiled.
30718
30719 -- Target Hook: rtx TARGET_LIBCALL_VALUE (enum machine_mode MODE,
30720          const_rtx FUN)
30721     Define this hook if the back-end needs to know the name of the
30722     libcall function in order to determine where the result should be
30723     returned.
30724
30725     The mode of the result is given by MODE and the name of the called
30726     library function is given by FUN.  The hook should return an RTX
30727     representing the place where the library function result will be
30728     returned.
30729
30730     If this hook is not defined, then LIBCALL_VALUE will be used.
30731
30732 -- Macro: FUNCTION_VALUE_REGNO_P (REGNO)
30733     A C expression that is nonzero if REGNO is the number of a hard
30734     register in which the values of called function may come back.
30735
30736     A register whose use for returning values is limited to serving as
30737     the second of a pair (for a value of type 'double', say) need not
30738     be recognized by this macro.  So for most machines, this definition
30739     suffices:
30740
30741          #define FUNCTION_VALUE_REGNO_P(N) ((N) == 0)
30742
30743     If the machine has register windows, so that the caller and the
30744     called function use different registers for the return value, this
30745     macro should recognize only the caller's register numbers.
30746
30747     This macro has been deprecated.  Use
30748     'TARGET_FUNCTION_VALUE_REGNO_P' for a new target instead.
30749
30750 -- Target Hook: bool TARGET_FUNCTION_VALUE_REGNO_P (const unsigned int
30751          REGNO)
30752     A target hook that return 'true' if REGNO is the number of a hard
30753     register in which the values of called function may come back.
30754
30755     A register whose use for returning values is limited to serving as
30756     the second of a pair (for a value of type 'double', say) need not
30757     be recognized by this target hook.
30758
30759     If the machine has register windows, so that the caller and the
30760     called function use different registers for the return value, this
30761     target hook should recognize only the caller's register numbers.
30762
30763     If this hook is not defined, then FUNCTION_VALUE_REGNO_P will be
30764     used.
30765
30766 -- Macro: APPLY_RESULT_SIZE
30767     Define this macro if 'untyped_call' and 'untyped_return' need more
30768     space than is implied by 'FUNCTION_VALUE_REGNO_P' for saving and
30769     restoring an arbitrary return value.
30770
30771 -- Target Hook: bool TARGET_RETURN_IN_MSB (const_tree TYPE)
30772     This hook should return true if values of type TYPE are returned at
30773     the most significant end of a register (in other words, if they are
30774     padded at the least significant end).  You can assume that TYPE is
30775     returned in a register; the caller is required to check this.
30776
30777     Note that the register provided by 'TARGET_FUNCTION_VALUE' must be
30778     able to hold the complete return value.  For example, if a 1-, 2-
30779     or 3-byte structure is returned at the most significant end of a
30780     4-byte register, 'TARGET_FUNCTION_VALUE' should provide an 'SImode'
30781     rtx.
30782
30783
30784File: gccint.info,  Node: Aggregate Return,  Next: Caller Saves,  Prev: Scalar Return,  Up: Stack and Calling
30785
3078617.10.9 How Large Values Are Returned
30787-------------------------------------
30788
30789When a function value's mode is 'BLKmode' (and in some other cases), the
30790value is not returned according to 'TARGET_FUNCTION_VALUE' (*note Scalar
30791Return::).  Instead, the caller passes the address of a block of memory
30792in which the value should be stored.  This address is called the
30793"structure value address".
30794
30795 This section describes how to control returning structure values in
30796memory.
30797
30798 -- Target Hook: bool TARGET_RETURN_IN_MEMORY (const_tree TYPE,
30799          const_tree FNTYPE)
30800     This target hook should return a nonzero value to say to return the
30801     function value in memory, just as large structures are always
30802     returned.  Here TYPE will be the data type of the value, and FNTYPE
30803     will be the type of the function doing the returning, or 'NULL' for
30804     libcalls.
30805
30806     Note that values of mode 'BLKmode' must be explicitly handled by
30807     this function.  Also, the option '-fpcc-struct-return' takes effect
30808     regardless of this macro.  On most systems, it is possible to leave
30809     the hook undefined; this causes a default definition to be used,
30810     whose value is the constant 1 for 'BLKmode' values, and 0
30811     otherwise.
30812
30813     Do not use this hook to indicate that structures and unions should
30814     always be returned in memory.  You should instead use
30815     'DEFAULT_PCC_STRUCT_RETURN' to indicate this.
30816
30817 -- Macro: DEFAULT_PCC_STRUCT_RETURN
30818     Define this macro to be 1 if all structure and union return values
30819     must be in memory.  Since this results in slower code, this should
30820     be defined only if needed for compatibility with other compilers or
30821     with an ABI.  If you define this macro to be 0, then the
30822     conventions used for structure and union return values are decided
30823     by the 'TARGET_RETURN_IN_MEMORY' target hook.
30824
30825     If not defined, this defaults to the value 1.
30826
30827 -- Target Hook: rtx TARGET_STRUCT_VALUE_RTX (tree FNDECL, int INCOMING)
30828     This target hook should return the location of the structure value
30829     address (normally a 'mem' or 'reg'), or 0 if the address is passed
30830     as an "invisible" first argument.  Note that FNDECL may be 'NULL',
30831     for libcalls.  You do not need to define this target hook if the
30832     address is always passed as an "invisible" first argument.
30833
30834     On some architectures the place where the structure value address
30835     is found by the called function is not the same place that the
30836     caller put it.  This can be due to register windows, or it could be
30837     because the function prologue moves it to a different place.
30838     INCOMING is '1' or '2' when the location is needed in the context
30839     of the called function, and '0' in the context of the caller.
30840
30841     If INCOMING is nonzero and the address is to be found on the stack,
30842     return a 'mem' which refers to the frame pointer.  If INCOMING is
30843     '2', the result is being used to fetch the structure value address
30844     at the beginning of a function.  If you need to emit adjusting
30845     code, you should do it at this point.
30846
30847 -- Macro: PCC_STATIC_STRUCT_RETURN
30848     Define this macro if the usual system convention on the target
30849     machine for returning structures and unions is for the called
30850     function to return the address of a static variable containing the
30851     value.
30852
30853     Do not define this if the usual system convention is for the caller
30854     to pass an address to the subroutine.
30855
30856     This macro has effect in '-fpcc-struct-return' mode, but it does
30857     nothing when you use '-freg-struct-return' mode.
30858
30859 -- Target Hook: enum machine_mode TARGET_GET_RAW_RESULT_MODE (int
30860          REGNO)
30861     This target hook returns the mode to be used when accessing raw
30862     return registers in '__builtin_return'.  Define this macro if the
30863     value in REG_RAW_MODE is not correct.
30864
30865 -- Target Hook: enum machine_mode TARGET_GET_RAW_ARG_MODE (int REGNO)
30866     This target hook returns the mode to be used when accessing raw
30867     argument registers in '__builtin_apply_args'.  Define this macro if
30868     the value in REG_RAW_MODE is not correct.
30869
30870
30871File: gccint.info,  Node: Caller Saves,  Next: Function Entry,  Prev: Aggregate Return,  Up: Stack and Calling
30872
3087317.10.10 Caller-Saves Register Allocation
30874-----------------------------------------
30875
30876If you enable it, GCC can save registers around function calls.  This
30877makes it possible to use call-clobbered registers to hold variables that
30878must live across calls.
30879
30880 -- Macro: CALLER_SAVE_PROFITABLE (REFS, CALLS)
30881     A C expression to determine whether it is worthwhile to consider
30882     placing a pseudo-register in a call-clobbered hard register and
30883     saving and restoring it around each function call.  The expression
30884     should be 1 when this is worth doing, and 0 otherwise.
30885
30886     If you don't define this macro, a default is used which is good on
30887     most machines: '4 * CALLS < REFS'.
30888
30889 -- Macro: HARD_REGNO_CALLER_SAVE_MODE (REGNO, NREGS)
30890     A C expression specifying which mode is required for saving NREGS
30891     of a pseudo-register in call-clobbered hard register REGNO.  If
30892     REGNO is unsuitable for caller save, 'VOIDmode' should be returned.
30893     For most machines this macro need not be defined since GCC will
30894     select the smallest suitable mode.
30895
30896
30897File: gccint.info,  Node: Function Entry,  Next: Profiling,  Prev: Caller Saves,  Up: Stack and Calling
30898
3089917.10.11 Function Entry and Exit
30900--------------------------------
30901
30902This section describes the macros that output function entry
30903("prologue") and exit ("epilogue") code.
30904
30905 -- Target Hook: void TARGET_ASM_FUNCTION_PROLOGUE (FILE *FILE,
30906          HOST_WIDE_INT SIZE)
30907     If defined, a function that outputs the assembler code for entry to
30908     a function.  The prologue is responsible for setting up the stack
30909     frame, initializing the frame pointer register, saving registers
30910     that must be saved, and allocating SIZE additional bytes of storage
30911     for the local variables.  SIZE is an integer.  FILE is a stdio
30912     stream to which the assembler code should be output.
30913
30914     The label for the beginning of the function need not be output by
30915     this macro.  That has already been done when the macro is run.
30916
30917     To determine which registers to save, the macro can refer to the
30918     array 'regs_ever_live': element R is nonzero if hard register R is
30919     used anywhere within the function.  This implies the function
30920     prologue should save register R, provided it is not one of the
30921     call-used registers.  ('TARGET_ASM_FUNCTION_EPILOGUE' must likewise
30922     use 'regs_ever_live'.)
30923
30924     On machines that have "register windows", the function entry code
30925     does not save on the stack the registers that are in the windows,
30926     even if they are supposed to be preserved by function calls;
30927     instead it takes appropriate steps to "push" the register stack, if
30928     any non-call-used registers are used in the function.
30929
30930     On machines where functions may or may not have frame-pointers, the
30931     function entry code must vary accordingly; it must set up the frame
30932     pointer if one is wanted, and not otherwise.  To determine whether
30933     a frame pointer is in wanted, the macro can refer to the variable
30934     'frame_pointer_needed'.  The variable's value will be 1 at run time
30935     in a function that needs a frame pointer.  *Note Elimination::.
30936
30937     The function entry code is responsible for allocating any stack
30938     space required for the function.  This stack space consists of the
30939     regions listed below.  In most cases, these regions are allocated
30940     in the order listed, with the last listed region closest to the top
30941     of the stack (the lowest address if 'STACK_GROWS_DOWNWARD' is
30942     defined, and the highest address if it is not defined).  You can
30943     use a different order for a machine if doing so is more convenient
30944     or required for compatibility reasons.  Except in cases where
30945     required by standard or by a debugger, there is no reason why the
30946     stack layout used by GCC need agree with that used by other
30947     compilers for a machine.
30948
30949 -- Target Hook: void TARGET_ASM_FUNCTION_END_PROLOGUE (FILE *FILE)
30950     If defined, a function that outputs assembler code at the end of a
30951     prologue.  This should be used when the function prologue is being
30952     emitted as RTL, and you have some extra assembler that needs to be
30953     emitted.  *Note prologue instruction pattern::.
30954
30955 -- Target Hook: void TARGET_ASM_FUNCTION_BEGIN_EPILOGUE (FILE *FILE)
30956     If defined, a function that outputs assembler code at the start of
30957     an epilogue.  This should be used when the function epilogue is
30958     being emitted as RTL, and you have some extra assembler that needs
30959     to be emitted.  *Note epilogue instruction pattern::.
30960
30961 -- Target Hook: void TARGET_ASM_FUNCTION_EPILOGUE (FILE *FILE,
30962          HOST_WIDE_INT SIZE)
30963     If defined, a function that outputs the assembler code for exit
30964     from a function.  The epilogue is responsible for restoring the
30965     saved registers and stack pointer to their values when the function
30966     was called, and returning control to the caller.  This macro takes
30967     the same arguments as the macro 'TARGET_ASM_FUNCTION_PROLOGUE', and
30968     the registers to restore are determined from 'regs_ever_live' and
30969     'CALL_USED_REGISTERS' in the same way.
30970
30971     On some machines, there is a single instruction that does all the
30972     work of returning from the function.  On these machines, give that
30973     instruction the name 'return' and do not define the macro
30974     'TARGET_ASM_FUNCTION_EPILOGUE' at all.
30975
30976     Do not define a pattern named 'return' if you want the
30977     'TARGET_ASM_FUNCTION_EPILOGUE' to be used.  If you want the target
30978     switches to control whether return instructions or epilogues are
30979     used, define a 'return' pattern with a validity condition that
30980     tests the target switches appropriately.  If the 'return' pattern's
30981     validity condition is false, epilogues will be used.
30982
30983     On machines where functions may or may not have frame-pointers, the
30984     function exit code must vary accordingly.  Sometimes the code for
30985     these two cases is completely different.  To determine whether a
30986     frame pointer is wanted, the macro can refer to the variable
30987     'frame_pointer_needed'.  The variable's value will be 1 when
30988     compiling a function that needs a frame pointer.
30989
30990     Normally, 'TARGET_ASM_FUNCTION_PROLOGUE' and
30991     'TARGET_ASM_FUNCTION_EPILOGUE' must treat leaf functions specially.
30992     The C variable 'current_function_is_leaf' is nonzero for such a
30993     function.  *Note Leaf Functions::.
30994
30995     On some machines, some functions pop their arguments on exit while
30996     others leave that for the caller to do.  For example, the 68020
30997     when given '-mrtd' pops arguments in functions that take a fixed
30998     number of arguments.
30999
31000     Your definition of the macro 'RETURN_POPS_ARGS' decides which
31001     functions pop their own arguments.  'TARGET_ASM_FUNCTION_EPILOGUE'
31002     needs to know what was decided.  The number of bytes of the current
31003     function's arguments that this function should pop is available in
31004     'crtl->args.pops_args'.  *Note Scalar Return::.
31005
31006   * A region of 'crtl->args.pretend_args_size' bytes of uninitialized
31007     space just underneath the first argument arriving on the stack.
31008     (This may not be at the very start of the allocated stack region if
31009     the calling sequence has pushed anything else since pushing the
31010     stack arguments.  But usually, on such machines, nothing else has
31011     been pushed yet, because the function prologue itself does all the
31012     pushing.)  This region is used on machines where an argument may be
31013     passed partly in registers and partly in memory, and, in some cases
31014     to support the features in '<stdarg.h>'.
31015
31016   * An area of memory used to save certain registers used by the
31017     function.  The size of this area, which may also include space for
31018     such things as the return address and pointers to previous stack
31019     frames, is machine-specific and usually depends on which registers
31020     have been used in the function.  Machines with register windows
31021     often do not require a save area.
31022
31023   * A region of at least SIZE bytes, possibly rounded up to an
31024     allocation boundary, to contain the local variables of the
31025     function.  On some machines, this region and the save area may
31026     occur in the opposite order, with the save area closer to the top
31027     of the stack.
31028
31029   * Optionally, when 'ACCUMULATE_OUTGOING_ARGS' is defined, a region of
31030     'crtl->outgoing_args_size' bytes to be used for outgoing argument
31031     lists of the function.  *Note Stack Arguments::.
31032
31033 -- Macro: EXIT_IGNORE_STACK
31034     Define this macro as a C expression that is nonzero if the return
31035     instruction or the function epilogue ignores the value of the stack
31036     pointer; in other words, if it is safe to delete an instruction to
31037     adjust the stack pointer before a return from the function.  The
31038     default is 0.
31039
31040     Note that this macro's value is relevant only for functions for
31041     which frame pointers are maintained.  It is never safe to delete a
31042     final stack adjustment in a function that has no frame pointer, and
31043     the compiler knows this regardless of 'EXIT_IGNORE_STACK'.
31044
31045 -- Macro: EPILOGUE_USES (REGNO)
31046     Define this macro as a C expression that is nonzero for registers
31047     that are used by the epilogue or the 'return' pattern.  The stack
31048     and frame pointer registers are already assumed to be used as
31049     needed.
31050
31051 -- Macro: EH_USES (REGNO)
31052     Define this macro as a C expression that is nonzero for registers
31053     that are used by the exception handling mechanism, and so should be
31054     considered live on entry to an exception edge.
31055
31056 -- Target Hook: void TARGET_ASM_OUTPUT_MI_THUNK (FILE *FILE, tree
31057          THUNK_FNDECL, HOST_WIDE_INT DELTA, HOST_WIDE_INT VCALL_OFFSET,
31058          tree FUNCTION)
31059     A function that outputs the assembler code for a thunk function,
31060     used to implement C++ virtual function calls with multiple
31061     inheritance.  The thunk acts as a wrapper around a virtual
31062     function, adjusting the implicit object parameter before handing
31063     control off to the real function.
31064
31065     First, emit code to add the integer DELTA to the location that
31066     contains the incoming first argument.  Assume that this argument
31067     contains a pointer, and is the one used to pass the 'this' pointer
31068     in C++.  This is the incoming argument _before_ the function
31069     prologue, e.g. '%o0' on a sparc.  The addition must preserve the
31070     values of all other incoming arguments.
31071
31072     Then, if VCALL_OFFSET is nonzero, an additional adjustment should
31073     be made after adding 'delta'.  In particular, if P is the adjusted
31074     pointer, the following adjustment should be made:
31075
31076          p += (*((ptrdiff_t **)p))[vcall_offset/sizeof(ptrdiff_t)]
31077
31078     After the additions, emit code to jump to FUNCTION, which is a
31079     'FUNCTION_DECL'.  This is a direct pure jump, not a call, and does
31080     not touch the return address.  Hence returning from FUNCTION will
31081     return to whoever called the current 'thunk'.
31082
31083     The effect must be as if FUNCTION had been called directly with the
31084     adjusted first argument.  This macro is responsible for emitting
31085     all of the code for a thunk function;
31086     'TARGET_ASM_FUNCTION_PROLOGUE' and 'TARGET_ASM_FUNCTION_EPILOGUE'
31087     are not invoked.
31088
31089     The THUNK_FNDECL is redundant.  (DELTA and FUNCTION have already
31090     been extracted from it.)  It might possibly be useful on some
31091     targets, but probably not.
31092
31093     If you do not define this macro, the target-independent code in the
31094     C++ front end will generate a less efficient heavyweight thunk that
31095     calls FUNCTION instead of jumping to it.  The generic approach does
31096     not support varargs.
31097
31098 -- Target Hook: bool TARGET_ASM_CAN_OUTPUT_MI_THUNK (const_tree
31099          THUNK_FNDECL, HOST_WIDE_INT DELTA, HOST_WIDE_INT VCALL_OFFSET,
31100          const_tree FUNCTION)
31101     A function that returns true if TARGET_ASM_OUTPUT_MI_THUNK would be
31102     able to output the assembler code for the thunk function specified
31103     by the arguments it is passed, and false otherwise.  In the latter
31104     case, the generic approach will be used by the C++ front end, with
31105     the limitations previously exposed.
31106
31107
31108File: gccint.info,  Node: Profiling,  Next: Tail Calls,  Prev: Function Entry,  Up: Stack and Calling
31109
3111017.10.12 Generating Code for Profiling
31111--------------------------------------
31112
31113These macros will help you generate code for profiling.
31114
31115 -- Macro: FUNCTION_PROFILER (FILE, LABELNO)
31116     A C statement or compound statement to output to FILE some
31117     assembler code to call the profiling subroutine 'mcount'.
31118
31119     The details of how 'mcount' expects to be called are determined by
31120     your operating system environment, not by GCC.  To figure them out,
31121     compile a small program for profiling using the system's installed
31122     C compiler and look at the assembler code that results.
31123
31124     Older implementations of 'mcount' expect the address of a counter
31125     variable to be loaded into some register.  The name of this
31126     variable is 'LP' followed by the number LABELNO, so you would
31127     generate the name using 'LP%d' in a 'fprintf'.
31128
31129 -- Macro: PROFILE_HOOK
31130     A C statement or compound statement to output to FILE some assembly
31131     code to call the profiling subroutine 'mcount' even the target does
31132     not support profiling.
31133
31134 -- Macro: NO_PROFILE_COUNTERS
31135     Define this macro to be an expression with a nonzero value if the
31136     'mcount' subroutine on your system does not need a counter variable
31137     allocated for each function.  This is true for almost all modern
31138     implementations.  If you define this macro, you must not use the
31139     LABELNO argument to 'FUNCTION_PROFILER'.
31140
31141 -- Macro: PROFILE_BEFORE_PROLOGUE
31142     Define this macro if the code for function profiling should come
31143     before the function prologue.  Normally, the profiling code comes
31144     after.
31145
31146
31147File: gccint.info,  Node: Tail Calls,  Next: Stack Smashing Protection,  Prev: Profiling,  Up: Stack and Calling
31148
3114917.10.13 Permitting tail calls
31150------------------------------
31151
31152 -- Target Hook: bool TARGET_FUNCTION_OK_FOR_SIBCALL (tree DECL, tree
31153          EXP)
31154     True if it is ok to do sibling call optimization for the specified
31155     call expression EXP.  DECL will be the called function, or 'NULL'
31156     if this is an indirect call.
31157
31158     It is not uncommon for limitations of calling conventions to
31159     prevent tail calls to functions outside the current unit of
31160     translation, or during PIC compilation.  The hook is used to
31161     enforce these restrictions, as the 'sibcall' md pattern can not
31162     fail, or fall over to a "normal" call.  The criteria for successful
31163     sibling call optimization may vary greatly between different
31164     architectures.
31165
31166 -- Target Hook: void TARGET_EXTRA_LIVE_ON_ENTRY (bitmap REGS)
31167     Add any hard registers to REGS that are live on entry to the
31168     function.  This hook only needs to be defined to provide registers
31169     that cannot be found by examination of FUNCTION_ARG_REGNO_P, the
31170     callee saved registers, STATIC_CHAIN_INCOMING_REGNUM,
31171     STATIC_CHAIN_REGNUM, TARGET_STRUCT_VALUE_RTX, FRAME_POINTER_REGNUM,
31172     EH_USES, FRAME_POINTER_REGNUM, ARG_POINTER_REGNUM, and the
31173     PIC_OFFSET_TABLE_REGNUM.
31174
31175 -- Target Hook: void TARGET_SET_UP_BY_PROLOGUE (struct
31176          hard_reg_set_container *)
31177     This hook should add additional registers that are computed by the
31178     prologue to the hard regset for shrink-wrapping optimization
31179     purposes.
31180
31181 -- Target Hook: bool TARGET_WARN_FUNC_RETURN (tree)
31182     True if a function's return statements should be checked for
31183     matching the function's return type.  This includes checking for
31184     falling off the end of a non-void function.  Return false if no
31185     such check should be made.
31186
31187
31188File: gccint.info,  Node: Stack Smashing Protection,  Prev: Tail Calls,  Up: Stack and Calling
31189
3119017.10.14 Stack smashing protection
31191----------------------------------
31192
31193 -- Target Hook: tree TARGET_STACK_PROTECT_GUARD (void)
31194     This hook returns a 'DECL' node for the external variable to use
31195     for the stack protection guard.  This variable is initialized by
31196     the runtime to some random value and is used to initialize the
31197     guard value that is placed at the top of the local stack frame.
31198     The type of this variable must be 'ptr_type_node'.
31199
31200     The default version of this hook creates a variable called
31201     '__stack_chk_guard', which is normally defined in 'libgcc2.c'.
31202
31203 -- Target Hook: tree TARGET_STACK_PROTECT_FAIL (void)
31204     This hook returns a 'CALL_EXPR' that alerts the runtime that the
31205     stack protect guard variable has been modified.  This expression
31206     should involve a call to a 'noreturn' function.
31207
31208     The default version of this hook invokes a function called
31209     '__stack_chk_fail', taking no arguments.  This function is normally
31210     defined in 'libgcc2.c'.
31211
31212 -- Common Target Hook: bool TARGET_SUPPORTS_SPLIT_STACK (bool REPORT,
31213          struct gcc_options *OPTS)
31214     Whether this target supports splitting the stack when the options
31215     described in OPTS have been passed.  This is called after options
31216     have been parsed, so the target may reject splitting the stack in
31217     some configurations.  The default version of this hook returns
31218     false.  If REPORT is true, this function may issue a warning or
31219     error; if REPORT is false, it must simply return a value
31220
31221
31222File: gccint.info,  Node: Varargs,  Next: Trampolines,  Prev: Stack and Calling,  Up: Target Macros
31223
3122417.11 Implementing the Varargs Macros
31225=====================================
31226
31227GCC comes with an implementation of '<varargs.h>' and '<stdarg.h>' that
31228work without change on machines that pass arguments on the stack.  Other
31229machines require their own implementations of varargs, and the two
31230machine independent header files must have conditionals to include it.
31231
31232 ISO '<stdarg.h>' differs from traditional '<varargs.h>' mainly in the
31233calling convention for 'va_start'.  The traditional implementation takes
31234just one argument, which is the variable in which to store the argument
31235pointer.  The ISO implementation of 'va_start' takes an additional
31236second argument.  The user is supposed to write the last named argument
31237of the function here.
31238
31239 However, 'va_start' should not use this argument.  The way to find the
31240end of the named arguments is with the built-in functions described
31241below.
31242
31243 -- Macro: __builtin_saveregs ()
31244     Use this built-in function to save the argument registers in memory
31245     so that the varargs mechanism can access them.  Both ISO and
31246     traditional versions of 'va_start' must use '__builtin_saveregs',
31247     unless you use 'TARGET_SETUP_INCOMING_VARARGS' (see below) instead.
31248
31249     On some machines, '__builtin_saveregs' is open-coded under the
31250     control of the target hook 'TARGET_EXPAND_BUILTIN_SAVEREGS'.  On
31251     other machines, it calls a routine written in assembler language,
31252     found in 'libgcc2.c'.
31253
31254     Code generated for the call to '__builtin_saveregs' appears at the
31255     beginning of the function, as opposed to where the call to
31256     '__builtin_saveregs' is written, regardless of what the code is.
31257     This is because the registers must be saved before the function
31258     starts to use them for its own purposes.
31259
31260 -- Macro: __builtin_next_arg (LASTARG)
31261     This builtin returns the address of the first anonymous stack
31262     argument, as type 'void *'.  If 'ARGS_GROW_DOWNWARD', it returns
31263     the address of the location above the first anonymous stack
31264     argument.  Use it in 'va_start' to initialize the pointer for
31265     fetching arguments from the stack.  Also use it in 'va_start' to
31266     verify that the second parameter LASTARG is the last named argument
31267     of the current function.
31268
31269 -- Macro: __builtin_classify_type (OBJECT)
31270     Since each machine has its own conventions for which data types are
31271     passed in which kind of register, your implementation of 'va_arg'
31272     has to embody these conventions.  The easiest way to categorize the
31273     specified data type is to use '__builtin_classify_type' together
31274     with 'sizeof' and '__alignof__'.
31275
31276     '__builtin_classify_type' ignores the value of OBJECT, considering
31277     only its data type.  It returns an integer describing what kind of
31278     type that is--integer, floating, pointer, structure, and so on.
31279
31280     The file 'typeclass.h' defines an enumeration that you can use to
31281     interpret the values of '__builtin_classify_type'.
31282
31283 These machine description macros help implement varargs:
31284
31285 -- Target Hook: rtx TARGET_EXPAND_BUILTIN_SAVEREGS (void)
31286     If defined, this hook produces the machine-specific code for a call
31287     to '__builtin_saveregs'.  This code will be moved to the very
31288     beginning of the function, before any parameter access are made.
31289     The return value of this function should be an RTX that contains
31290     the value to use as the return of '__builtin_saveregs'.
31291
31292 -- Target Hook: void TARGET_SETUP_INCOMING_VARARGS (cumulative_args_t
31293          ARGS_SO_FAR, enum machine_mode MODE, tree TYPE, int
31294          *PRETEND_ARGS_SIZE, int SECOND_TIME)
31295     This target hook offers an alternative to using
31296     '__builtin_saveregs' and defining the hook
31297     'TARGET_EXPAND_BUILTIN_SAVEREGS'.  Use it to store the anonymous
31298     register arguments into the stack so that all the arguments appear
31299     to have been passed consecutively on the stack.  Once this is done,
31300     you can use the standard implementation of varargs that works for
31301     machines that pass all their arguments on the stack.
31302
31303     The argument ARGS_SO_FAR points to the 'CUMULATIVE_ARGS' data
31304     structure, containing the values that are obtained after processing
31305     the named arguments.  The arguments MODE and TYPE describe the last
31306     named argument--its machine mode and its data type as a tree node.
31307
31308     The target hook should do two things: first, push onto the stack
31309     all the argument registers _not_ used for the named arguments, and
31310     second, store the size of the data thus pushed into the
31311     'int'-valued variable pointed to by PRETEND_ARGS_SIZE.  The value
31312     that you store here will serve as additional offset for setting up
31313     the stack frame.
31314
31315     Because you must generate code to push the anonymous arguments at
31316     compile time without knowing their data types,
31317     'TARGET_SETUP_INCOMING_VARARGS' is only useful on machines that
31318     have just a single category of argument register and use it
31319     uniformly for all data types.
31320
31321     If the argument SECOND_TIME is nonzero, it means that the arguments
31322     of the function are being analyzed for the second time.  This
31323     happens for an inline function, which is not actually compiled
31324     until the end of the source file.  The hook
31325     'TARGET_SETUP_INCOMING_VARARGS' should not generate any
31326     instructions in this case.
31327
31328 -- Target Hook: bool TARGET_STRICT_ARGUMENT_NAMING (cumulative_args_t
31329          CA)
31330     Define this hook to return 'true' if the location where a function
31331     argument is passed depends on whether or not it is a named
31332     argument.
31333
31334     This hook controls how the NAMED argument to 'TARGET_FUNCTION_ARG'
31335     is set for varargs and stdarg functions.  If this hook returns
31336     'true', the NAMED argument is always true for named arguments, and
31337     false for unnamed arguments.  If it returns 'false', but
31338     'TARGET_PRETEND_OUTGOING_VARARGS_NAMED' returns 'true', then all
31339     arguments are treated as named.  Otherwise, all named arguments
31340     except the last are treated as named.
31341
31342     You need not define this hook if it always returns 'false'.
31343
31344 -- Target Hook: bool TARGET_PRETEND_OUTGOING_VARARGS_NAMED
31345          (cumulative_args_t CA)
31346     If you need to conditionally change ABIs so that one works with
31347     'TARGET_SETUP_INCOMING_VARARGS', but the other works like neither
31348     'TARGET_SETUP_INCOMING_VARARGS' nor 'TARGET_STRICT_ARGUMENT_NAMING'
31349     was defined, then define this hook to return 'true' if
31350     'TARGET_SETUP_INCOMING_VARARGS' is used, 'false' otherwise.
31351     Otherwise, you should not define this hook.
31352
31353
31354File: gccint.info,  Node: Trampolines,  Next: Library Calls,  Prev: Varargs,  Up: Target Macros
31355
3135617.12 Trampolines for Nested Functions
31357======================================
31358
31359A "trampoline" is a small piece of code that is created at run time when
31360the address of a nested function is taken.  It normally resides on the
31361stack, in the stack frame of the containing function.  These macros tell
31362GCC how to generate code to allocate and initialize a trampoline.
31363
31364 The instructions in the trampoline must do two things: load a constant
31365address into the static chain register, and jump to the real address of
31366the nested function.  On CISC machines such as the m68k, this requires
31367two instructions, a move immediate and a jump.  Then the two addresses
31368exist in the trampoline as word-long immediate operands.  On RISC
31369machines, it is often necessary to load each address into a register in
31370two parts.  Then pieces of each address form separate immediate
31371operands.
31372
31373 The code generated to initialize the trampoline must store the variable
31374parts--the static chain value and the function address--into the
31375immediate operands of the instructions.  On a CISC machine, this is
31376simply a matter of copying each address to a memory reference at the
31377proper offset from the start of the trampoline.  On a RISC machine, it
31378may be necessary to take out pieces of the address and store them
31379separately.
31380
31381 -- Target Hook: void TARGET_ASM_TRAMPOLINE_TEMPLATE (FILE *F)
31382     This hook is called by 'assemble_trampoline_template' to output, on
31383     the stream F, assembler code for a block of data that contains the
31384     constant parts of a trampoline.  This code should not include a
31385     label--the label is taken care of automatically.
31386
31387     If you do not define this hook, it means no template is needed for
31388     the target.  Do not define this hook on systems where the block
31389     move code to copy the trampoline into place would be larger than
31390     the code to generate it on the spot.
31391
31392 -- Macro: TRAMPOLINE_SECTION
31393     Return the section into which the trampoline template is to be
31394     placed (*note Sections::).  The default value is
31395     'readonly_data_section'.
31396
31397 -- Macro: TRAMPOLINE_SIZE
31398     A C expression for the size in bytes of the trampoline, as an
31399     integer.
31400
31401 -- Macro: TRAMPOLINE_ALIGNMENT
31402     Alignment required for trampolines, in bits.
31403
31404     If you don't define this macro, the value of 'FUNCTION_ALIGNMENT'
31405     is used for aligning trampolines.
31406
31407 -- Target Hook: void TARGET_TRAMPOLINE_INIT (rtx M_TRAMP, tree FNDECL,
31408          rtx STATIC_CHAIN)
31409     This hook is called to initialize a trampoline.  M_TRAMP is an RTX
31410     for the memory block for the trampoline; FNDECL is the
31411     'FUNCTION_DECL' for the nested function; STATIC_CHAIN is an RTX for
31412     the static chain value that should be passed to the function when
31413     it is called.
31414
31415     If the target defines 'TARGET_ASM_TRAMPOLINE_TEMPLATE', then the
31416     first thing this hook should do is emit a block move into M_TRAMP
31417     from the memory block returned by 'assemble_trampoline_template'.
31418     Note that the block move need only cover the constant parts of the
31419     trampoline.  If the target isolates the variable parts of the
31420     trampoline to the end, not all 'TRAMPOLINE_SIZE' bytes need be
31421     copied.
31422
31423     If the target requires any other actions, such as flushing caches
31424     or enabling stack execution, these actions should be performed
31425     after initializing the trampoline proper.
31426
31427 -- Target Hook: rtx TARGET_TRAMPOLINE_ADJUST_ADDRESS (rtx ADDR)
31428     This hook should perform any machine-specific adjustment in the
31429     address of the trampoline.  Its argument contains the address of
31430     the memory block that was passed to 'TARGET_TRAMPOLINE_INIT'.  In
31431     case the address to be used for a function call should be different
31432     from the address at which the template was stored, the different
31433     address should be returned; otherwise ADDR should be returned
31434     unchanged.  If this hook is not defined, ADDR will be used for
31435     function calls.
31436
31437 Implementing trampolines is difficult on many machines because they
31438have separate instruction and data caches.  Writing into a stack
31439location fails to clear the memory in the instruction cache, so when the
31440program jumps to that location, it executes the old contents.
31441
31442 Here are two possible solutions.  One is to clear the relevant parts of
31443the instruction cache whenever a trampoline is set up.  The other is to
31444make all trampolines identical, by having them jump to a standard
31445subroutine.  The former technique makes trampoline execution faster; the
31446latter makes initialization faster.
31447
31448 To clear the instruction cache when a trampoline is initialized, define
31449the following macro.
31450
31451 -- Macro: CLEAR_INSN_CACHE (BEG, END)
31452     If defined, expands to a C expression clearing the _instruction
31453     cache_ in the specified interval.  The definition of this macro
31454     would typically be a series of 'asm' statements.  Both BEG and END
31455     are both pointer expressions.
31456
31457 To use a standard subroutine, define the following macro.  In addition,
31458you must make sure that the instructions in a trampoline fill an entire
31459cache line with identical instructions, or else ensure that the
31460beginning of the trampoline code is always aligned at the same point in
31461its cache line.  Look in 'm68k.h' as a guide.
31462
31463 -- Macro: TRANSFER_FROM_TRAMPOLINE
31464     Define this macro if trampolines need a special subroutine to do
31465     their work.  The macro should expand to a series of 'asm'
31466     statements which will be compiled with GCC.  They go in a library
31467     function named '__transfer_from_trampoline'.
31468
31469     If you need to avoid executing the ordinary prologue code of a
31470     compiled C function when you jump to the subroutine, you can do so
31471     by placing a special label of your own in the assembler code.  Use
31472     one 'asm' statement to generate an assembler label, and another to
31473     make the label global.  Then trampolines can use that label to jump
31474     directly to your special assembler code.
31475
31476
31477File: gccint.info,  Node: Library Calls,  Next: Addressing Modes,  Prev: Trampolines,  Up: Target Macros
31478
3147917.13 Implicit Calls to Library Routines
31480========================================
31481
31482Here is an explanation of implicit calls to library routines.
31483
31484 -- Macro: DECLARE_LIBRARY_RENAMES
31485     This macro, if defined, should expand to a piece of C code that
31486     will get expanded when compiling functions for libgcc.a.  It can be
31487     used to provide alternate names for GCC's internal library
31488     functions if there are ABI-mandated names that the compiler should
31489     provide.
31490
31491 -- Target Hook: void TARGET_INIT_LIBFUNCS (void)
31492     This hook should declare additional library routines or rename
31493     existing ones, using the functions 'set_optab_libfunc' and
31494     'init_one_libfunc' defined in 'optabs.c'.  'init_optabs' calls this
31495     macro after initializing all the normal library routines.
31496
31497     The default is to do nothing.  Most ports don't need to define this
31498     hook.
31499
31500 -- Target Hook: bool TARGET_LIBFUNC_GNU_PREFIX
31501     If false (the default), internal library routines start with two
31502     underscores.  If set to true, these routines start with '__gnu_'
31503     instead.  E.g., '__muldi3' changes to '__gnu_muldi3'.  This
31504     currently only affects functions defined in 'libgcc2.c'.  If this
31505     is set to true, the 'tm.h' file must also '#define
31506     LIBGCC2_GNU_PREFIX'.
31507
31508 -- Macro: FLOAT_LIB_COMPARE_RETURNS_BOOL (MODE, COMPARISON)
31509     This macro should return 'true' if the library routine that
31510     implements the floating point comparison operator COMPARISON in
31511     mode MODE will return a boolean, and FALSE if it will return a
31512     tristate.
31513
31514     GCC's own floating point libraries return tristates from the
31515     comparison operators, so the default returns false always.  Most
31516     ports don't need to define this macro.
31517
31518 -- Macro: TARGET_LIB_INT_CMP_BIASED
31519     This macro should evaluate to 'true' if the integer comparison
31520     functions (like '__cmpdi2') return 0 to indicate that the first
31521     operand is smaller than the second, 1 to indicate that they are
31522     equal, and 2 to indicate that the first operand is greater than the
31523     second.  If this macro evaluates to 'false' the comparison
31524     functions return -1, 0, and 1 instead of 0, 1, and 2.  If the
31525     target uses the routines in 'libgcc.a', you do not need to define
31526     this macro.
31527
31528 -- Macro: TARGET_EDOM
31529     The value of 'EDOM' on the target machine, as a C integer constant
31530     expression.  If you don't define this macro, GCC does not attempt
31531     to deposit the value of 'EDOM' into 'errno' directly.  Look in
31532     '/usr/include/errno.h' to find the value of 'EDOM' on your system.
31533
31534     If you do not define 'TARGET_EDOM', then compiled code reports
31535     domain errors by calling the library function and letting it report
31536     the error.  If mathematical functions on your system use 'matherr'
31537     when there is an error, then you should leave 'TARGET_EDOM'
31538     undefined so that 'matherr' is used normally.
31539
31540 -- Macro: GEN_ERRNO_RTX
31541     Define this macro as a C expression to create an rtl expression
31542     that refers to the global "variable" 'errno'.  (On certain systems,
31543     'errno' may not actually be a variable.)  If you don't define this
31544     macro, a reasonable default is used.
31545
31546 -- Macro: TARGET_C99_FUNCTIONS
31547     When this macro is nonzero, GCC will implicitly optimize 'sin'
31548     calls into 'sinf' and similarly for other functions defined by C99
31549     standard.  The default is zero because a number of existing systems
31550     lack support for these functions in their runtime so this macro
31551     needs to be redefined to one on systems that do support the C99
31552     runtime.
31553
31554 -- Macro: TARGET_HAS_SINCOS
31555     When this macro is nonzero, GCC will implicitly optimize calls to
31556     'sin' and 'cos' with the same argument to a call to 'sincos'.  The
31557     default is zero.  The target has to provide the following
31558     functions:
31559          void sincos(double x, double *sin, double *cos);
31560          void sincosf(float x, float *sin, float *cos);
31561          void sincosl(long double x, long double *sin, long double *cos);
31562
31563 -- Macro: NEXT_OBJC_RUNTIME
31564     Set this macro to 1 to use the "NeXT" Objective-C message sending
31565     conventions by default.  This calling convention involves passing
31566     the object, the selector and the method arguments all at once to
31567     the method-lookup library function.  This is the usual setting when
31568     targeting Darwin/Mac OS X systems, which have the NeXT runtime
31569     installed.
31570
31571     If the macro is set to 0, the "GNU" Objective-C message sending
31572     convention will be used by default.  This convention passes just
31573     the object and the selector to the method-lookup function, which
31574     returns a pointer to the method.
31575
31576     In either case, it remains possible to select code-generation for
31577     the alternate scheme, by means of compiler command line switches.
31578
31579
31580File: gccint.info,  Node: Addressing Modes,  Next: Anchored Addresses,  Prev: Library Calls,  Up: Target Macros
31581
3158217.14 Addressing Modes
31583======================
31584
31585This is about addressing modes.
31586
31587 -- Macro: HAVE_PRE_INCREMENT
31588 -- Macro: HAVE_PRE_DECREMENT
31589 -- Macro: HAVE_POST_INCREMENT
31590 -- Macro: HAVE_POST_DECREMENT
31591     A C expression that is nonzero if the machine supports
31592     pre-increment, pre-decrement, post-increment, or post-decrement
31593     addressing respectively.
31594
31595 -- Macro: HAVE_PRE_MODIFY_DISP
31596 -- Macro: HAVE_POST_MODIFY_DISP
31597     A C expression that is nonzero if the machine supports pre- or
31598     post-address side-effect generation involving constants other than
31599     the size of the memory operand.
31600
31601 -- Macro: HAVE_PRE_MODIFY_REG
31602 -- Macro: HAVE_POST_MODIFY_REG
31603     A C expression that is nonzero if the machine supports pre- or
31604     post-address side-effect generation involving a register
31605     displacement.
31606
31607 -- Macro: CONSTANT_ADDRESS_P (X)
31608     A C expression that is 1 if the RTX X is a constant which is a
31609     valid address.  On most machines the default definition of
31610     '(CONSTANT_P (X) && GET_CODE (X) != CONST_DOUBLE)' is acceptable,
31611     but a few machines are more restrictive as to which constant
31612     addresses are supported.
31613
31614 -- Macro: CONSTANT_P (X)
31615     'CONSTANT_P', which is defined by target-independent code, accepts
31616     integer-values expressions whose values are not explicitly known,
31617     such as 'symbol_ref', 'label_ref', and 'high' expressions and
31618     'const' arithmetic expressions, in addition to 'const_int' and
31619     'const_double' expressions.
31620
31621 -- Macro: MAX_REGS_PER_ADDRESS
31622     A number, the maximum number of registers that can appear in a
31623     valid memory address.  Note that it is up to you to specify a value
31624     equal to the maximum number that 'TARGET_LEGITIMATE_ADDRESS_P'
31625     would ever accept.
31626
31627 -- Target Hook: bool TARGET_LEGITIMATE_ADDRESS_P (enum machine_mode
31628          MODE, rtx X, bool STRICT)
31629     A function that returns whether X (an RTX) is a legitimate memory
31630     address on the target machine for a memory operand of mode MODE.
31631
31632     Legitimate addresses are defined in two variants: a strict variant
31633     and a non-strict one.  The STRICT parameter chooses which variant
31634     is desired by the caller.
31635
31636     The strict variant is used in the reload pass.  It must be defined
31637     so that any pseudo-register that has not been allocated a hard
31638     register is considered a memory reference.  This is because in
31639     contexts where some kind of register is required, a pseudo-register
31640     with no hard register must be rejected.  For non-hard registers,
31641     the strict variant should look up the 'reg_renumber' array; it
31642     should then proceed using the hard register number in the array, or
31643     treat the pseudo as a memory reference if the array holds '-1'.
31644
31645     The non-strict variant is used in other passes.  It must be defined
31646     to accept all pseudo-registers in every context where some kind of
31647     register is required.
31648
31649     Normally, constant addresses which are the sum of a 'symbol_ref'
31650     and an integer are stored inside a 'const' RTX to mark them as
31651     constant.  Therefore, there is no need to recognize such sums
31652     specifically as legitimate addresses.  Normally you would simply
31653     recognize any 'const' as legitimate.
31654
31655     Usually 'PRINT_OPERAND_ADDRESS' is not prepared to handle constant
31656     sums that are not marked with 'const'.  It assumes that a naked
31657     'plus' indicates indexing.  If so, then you _must_ reject such
31658     naked constant sums as illegitimate addresses, so that none of them
31659     will be given to 'PRINT_OPERAND_ADDRESS'.
31660
31661     On some machines, whether a symbolic address is legitimate depends
31662     on the section that the address refers to.  On these machines,
31663     define the target hook 'TARGET_ENCODE_SECTION_INFO' to store the
31664     information into the 'symbol_ref', and then check for it here.
31665     When you see a 'const', you will have to look inside it to find the
31666     'symbol_ref' in order to determine the section.  *Note Assembler
31667     Format::.
31668
31669     Some ports are still using a deprecated legacy substitute for this
31670     hook, the 'GO_IF_LEGITIMATE_ADDRESS' macro.  This macro has this
31671     syntax:
31672
31673          #define GO_IF_LEGITIMATE_ADDRESS (MODE, X, LABEL)
31674
31675     and should 'goto LABEL' if the address X is a valid address on the
31676     target machine for a memory operand of mode MODE.
31677
31678     Compiler source files that want to use the strict variant of this
31679     macro define the macro 'REG_OK_STRICT'.  You should use an '#ifdef
31680     REG_OK_STRICT' conditional to define the strict variant in that
31681     case and the non-strict variant otherwise.
31682
31683     Using the hook is usually simpler because it limits the number of
31684     files that are recompiled when changes are made.
31685
31686 -- Macro: TARGET_MEM_CONSTRAINT
31687     A single character to be used instead of the default ''m''
31688     character for general memory addresses.  This defines the
31689     constraint letter which matches the memory addresses accepted by
31690     'TARGET_LEGITIMATE_ADDRESS_P'.  Define this macro if you want to
31691     support new address formats in your back end without changing the
31692     semantics of the ''m'' constraint.  This is necessary in order to
31693     preserve functionality of inline assembly constructs using the
31694     ''m'' constraint.
31695
31696 -- Macro: FIND_BASE_TERM (X)
31697     A C expression to determine the base term of address X, or to
31698     provide a simplified version of X from which 'alias.c' can easily
31699     find the base term.  This macro is used in only two places:
31700     'find_base_value' and 'find_base_term' in 'alias.c'.
31701
31702     It is always safe for this macro to not be defined.  It exists so
31703     that alias analysis can understand machine-dependent addresses.
31704
31705     The typical use of this macro is to handle addresses containing a
31706     label_ref or symbol_ref within an UNSPEC.
31707
31708 -- Target Hook: rtx TARGET_LEGITIMIZE_ADDRESS (rtx X, rtx OLDX, enum
31709          machine_mode MODE)
31710     This hook is given an invalid memory address X for an operand of
31711     mode MODE and should try to return a valid memory address.
31712
31713     X will always be the result of a call to 'break_out_memory_refs',
31714     and OLDX will be the operand that was given to that function to
31715     produce X.
31716
31717     The code of the hook should not alter the substructure of X.  If it
31718     transforms X into a more legitimate form, it should return the new
31719     X.
31720
31721     It is not necessary for this hook to come up with a legitimate
31722     address, with the exception of native TLS addresses (*note Emulated
31723     TLS::).  The compiler has standard ways of doing so in all cases.
31724     In fact, if the target supports only emulated TLS, it is safe to
31725     omit this hook or make it return X if it cannot find a valid way to
31726     legitimize the address.  But often a machine-dependent strategy can
31727     generate better code.
31728
31729 -- Macro: LEGITIMIZE_RELOAD_ADDRESS (X, MODE, OPNUM, TYPE, IND_LEVELS,
31730          WIN)
31731     A C compound statement that attempts to replace X, which is an
31732     address that needs reloading, with a valid memory address for an
31733     operand of mode MODE.  WIN will be a C statement label elsewhere in
31734     the code.  It is not necessary to define this macro, but it might
31735     be useful for performance reasons.
31736
31737     For example, on the i386, it is sometimes possible to use a single
31738     reload register instead of two by reloading a sum of two pseudo
31739     registers into a register.  On the other hand, for number of RISC
31740     processors offsets are limited so that often an intermediate
31741     address needs to be generated in order to address a stack slot.  By
31742     defining 'LEGITIMIZE_RELOAD_ADDRESS' appropriately, the
31743     intermediate addresses generated for adjacent some stack slots can
31744     be made identical, and thus be shared.
31745
31746     _Note_: This macro should be used with caution.  It is necessary to
31747     know something of how reload works in order to effectively use
31748     this, and it is quite easy to produce macros that build in too much
31749     knowledge of reload internals.
31750
31751     _Note_: This macro must be able to reload an address created by a
31752     previous invocation of this macro.  If it fails to handle such
31753     addresses then the compiler may generate incorrect code or abort.
31754
31755     The macro definition should use 'push_reload' to indicate parts
31756     that need reloading; OPNUM, TYPE and IND_LEVELS are usually
31757     suitable to be passed unaltered to 'push_reload'.
31758
31759     The code generated by this macro must not alter the substructure of
31760     X.  If it transforms X into a more legitimate form, it should
31761     assign X (which will always be a C variable) a new value.  This
31762     also applies to parts that you change indirectly by calling
31763     'push_reload'.
31764
31765     The macro definition may use 'strict_memory_address_p' to test if
31766     the address has become legitimate.
31767
31768     If you want to change only a part of X, one standard way of doing
31769     this is to use 'copy_rtx'.  Note, however, that it unshares only a
31770     single level of rtl.  Thus, if the part to be changed is not at the
31771     top level, you'll need to replace first the top level.  It is not
31772     necessary for this macro to come up with a legitimate address; but
31773     often a machine-dependent strategy can generate better code.
31774
31775 -- Target Hook: bool TARGET_MODE_DEPENDENT_ADDRESS_P (const_rtx ADDR,
31776          addr_space_t ADDRSPACE)
31777     This hook returns 'true' if memory address ADDR in address space
31778     ADDRSPACE can have different meanings depending on the machine mode
31779     of the memory reference it is used for or if the address is valid
31780     for some modes but not others.
31781
31782     Autoincrement and autodecrement addresses typically have
31783     mode-dependent effects because the amount of the increment or
31784     decrement is the size of the operand being addressed.  Some
31785     machines have other mode-dependent addresses.  Many RISC machines
31786     have no mode-dependent addresses.
31787
31788     You may assume that ADDR is a valid address for the machine.
31789
31790     The default version of this hook returns 'false'.
31791
31792 -- Target Hook: bool TARGET_LEGITIMATE_CONSTANT_P (enum machine_mode
31793          MODE, rtx X)
31794     This hook returns true if X is a legitimate constant for a
31795     MODE-mode immediate operand on the target machine.  You can assume
31796     that X satisfies 'CONSTANT_P', so you need not check this.
31797
31798     The default definition returns true.
31799
31800 -- Target Hook: rtx TARGET_DELEGITIMIZE_ADDRESS (rtx X)
31801     This hook is used to undo the possibly obfuscating effects of the
31802     'LEGITIMIZE_ADDRESS' and 'LEGITIMIZE_RELOAD_ADDRESS' target macros.
31803     Some backend implementations of these macros wrap symbol references
31804     inside an 'UNSPEC' rtx to represent PIC or similar addressing
31805     modes.  This target hook allows GCC's optimizers to understand the
31806     semantics of these opaque 'UNSPEC's by converting them back into
31807     their original form.
31808
31809 -- Target Hook: bool TARGET_CONST_NOT_OK_FOR_DEBUG_P (rtx X)
31810     This hook should return true if X should not be emitted into debug
31811     sections.
31812
31813 -- Target Hook: bool TARGET_CANNOT_FORCE_CONST_MEM (enum machine_mode
31814          MODE, rtx X)
31815     This hook should return true if X is of a form that cannot (or
31816     should not) be spilled to the constant pool.  MODE is the mode of
31817     X.
31818
31819     The default version of this hook returns false.
31820
31821     The primary reason to define this hook is to prevent reload from
31822     deciding that a non-legitimate constant would be better reloaded
31823     from the constant pool instead of spilling and reloading a register
31824     holding the constant.  This restriction is often true of addresses
31825     of TLS symbols for various targets.
31826
31827 -- Target Hook: bool TARGET_USE_BLOCKS_FOR_CONSTANT_P (enum
31828          machine_mode MODE, const_rtx X)
31829     This hook should return true if pool entries for constant X can be
31830     placed in an 'object_block' structure.  MODE is the mode of X.
31831
31832     The default version returns false for all constants.
31833
31834 -- Target Hook: bool TARGET_USE_BLOCKS_FOR_DECL_P (const_tree DECL)
31835     This hook should return true if pool entries for DECL should be
31836     placed in an 'object_block' structure.
31837
31838     The default version returns true for all decls.
31839
31840 -- Target Hook: tree TARGET_BUILTIN_RECIPROCAL (unsigned FN, bool
31841          MD_FN, bool SQRT)
31842     This hook should return the DECL of a function that implements
31843     reciprocal of the builtin function with builtin function code FN,
31844     or 'NULL_TREE' if such a function is not available.  MD_FN is true
31845     when FN is a code of a machine-dependent builtin function.  When
31846     SQRT is true, additional optimizations that apply only to the
31847     reciprocal of a square root function are performed, and only
31848     reciprocals of 'sqrt' function are valid.
31849
31850 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_MASK_FOR_LOAD (void)
31851     This hook should return the DECL of a function F that given an
31852     address ADDR as an argument returns a mask M that can be used to
31853     extract from two vectors the relevant data that resides in ADDR in
31854     case ADDR is not properly aligned.
31855
31856     The autovectorizer, when vectorizing a load operation from an
31857     address ADDR that may be unaligned, will generate two vector loads
31858     from the two aligned addresses around ADDR.  It then generates a
31859     'REALIGN_LOAD' operation to extract the relevant data from the two
31860     loaded vectors.  The first two arguments to 'REALIGN_LOAD', V1 and
31861     V2, are the two vectors, each of size VS, and the third argument,
31862     OFF, defines how the data will be extracted from these two vectors:
31863     if OFF is 0, then the returned vector is V2; otherwise, the
31864     returned vector is composed from the last VS-OFF elements of V1
31865     concatenated to the first OFF elements of V2.
31866
31867     If this hook is defined, the autovectorizer will generate a call to
31868     F (using the DECL tree that this hook returns) and will use the
31869     return value of F as the argument OFF to 'REALIGN_LOAD'.
31870     Therefore, the mask M returned by F should comply with the
31871     semantics expected by 'REALIGN_LOAD' described above.  If this hook
31872     is not defined, then ADDR will be used as the argument OFF to
31873     'REALIGN_LOAD', in which case the low log2(VS) - 1 bits of ADDR
31874     will be considered.
31875
31876 -- Target Hook: int TARGET_VECTORIZE_BUILTIN_VECTORIZATION_COST (enum
31877          vect_cost_for_stmt TYPE_OF_COST, tree VECTYPE, int MISALIGN)
31878     Returns cost of different scalar or vector statements for
31879     vectorization cost model.  For vector memory operations the cost
31880     may depend on type (VECTYPE) and misalignment value (MISALIGN).
31881
31882 -- Target Hook: bool TARGET_VECTORIZE_VECTOR_ALIGNMENT_REACHABLE
31883          (const_tree TYPE, bool IS_PACKED)
31884     Return true if vector alignment is reachable (by peeling N
31885     iterations) for the given type.
31886
31887 -- Target Hook: bool TARGET_VECTORIZE_VEC_PERM_CONST_OK (enum
31888          MACHINE_MODE, const unsigned char *SEL)
31889     Return true if a vector created for 'vec_perm_const' is valid.
31890
31891 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_CONVERSION (unsigned
31892          CODE, tree DEST_TYPE, tree SRC_TYPE)
31893     This hook should return the DECL of a function that implements
31894     conversion of the input vector of type SRC_TYPE to type DEST_TYPE.
31895     The value of CODE is one of the enumerators in 'enum tree_code' and
31896     specifies how the conversion is to be applied (truncation,
31897     rounding, etc.).
31898
31899     If this hook is defined, the autovectorizer will use the
31900     'TARGET_VECTORIZE_BUILTIN_CONVERSION' target hook when vectorizing
31901     conversion.  Otherwise, it will return 'NULL_TREE'.
31902
31903 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_VECTORIZED_FUNCTION (tree
31904          FNDECL, tree VEC_TYPE_OUT, tree VEC_TYPE_IN)
31905     This hook should return the decl of a function that implements the
31906     vectorized variant of the builtin function with builtin function
31907     code CODE or 'NULL_TREE' if such a function is not available.  The
31908     value of FNDECL is the builtin function declaration.  The return
31909     type of the vectorized function shall be of vector type
31910     VEC_TYPE_OUT and the argument types should be VEC_TYPE_IN.
31911
31912 -- Target Hook: bool TARGET_VECTORIZE_SUPPORT_VECTOR_MISALIGNMENT (enum
31913          machine_mode MODE, const_tree TYPE, int MISALIGNMENT, bool
31914          IS_PACKED)
31915     This hook should return true if the target supports misaligned
31916     vector store/load of a specific factor denoted in the MISALIGNMENT
31917     parameter.  The vector store/load should be of machine mode MODE
31918     and the elements in the vectors should be of type TYPE.  IS_PACKED
31919     parameter is true if the memory access is defined in a packed
31920     struct.
31921
31922 -- Target Hook: enum machine_mode TARGET_VECTORIZE_PREFERRED_SIMD_MODE
31923          (enum machine_mode MODE)
31924     This hook should return the preferred mode for vectorizing scalar
31925     mode MODE.  The default is equal to 'word_mode', because the
31926     vectorizer can do some transformations even in absence of
31927     specialized SIMD hardware.
31928
31929 -- Target Hook: unsigned int
31930          TARGET_VECTORIZE_AUTOVECTORIZE_VECTOR_SIZES (void)
31931     This hook should return a mask of sizes that should be iterated
31932     over after trying to autovectorize using the vector size derived
31933     from the mode returned by 'TARGET_VECTORIZE_PREFERRED_SIMD_MODE'.
31934     The default is zero which means to not iterate over other vector
31935     sizes.
31936
31937 -- Target Hook: void * TARGET_VECTORIZE_INIT_COST (struct loop
31938          *LOOP_INFO)
31939     This hook should initialize target-specific data structures in
31940     preparation for modeling the costs of vectorizing a loop or basic
31941     block.  The default allocates three unsigned integers for
31942     accumulating costs for the prologue, body, and epilogue of the loop
31943     or basic block.  If LOOP_INFO is non-NULL, it identifies the loop
31944     being vectorized; otherwise a single block is being vectorized.
31945
31946 -- Target Hook: unsigned TARGET_VECTORIZE_ADD_STMT_COST (void *DATA,
31947          int COUNT, enum vect_cost_for_stmt KIND, struct _stmt_vec_info
31948          *STMT_INFO, int MISALIGN, enum vect_cost_model_location WHERE)
31949     This hook should update the target-specific DATA in response to
31950     adding COUNT copies of the given KIND of statement to a loop or
31951     basic block.  The default adds the builtin vectorizer cost for the
31952     copies of the statement to the accumulator specified by WHERE, (the
31953     prologue, body, or epilogue) and returns the amount added.  The
31954     return value should be viewed as a tentative cost that may later be
31955     revised.
31956
31957 -- Target Hook: void TARGET_VECTORIZE_FINISH_COST (void *DATA, unsigned
31958          *PROLOGUE_COST, unsigned *BODY_COST, unsigned *EPILOGUE_COST)
31959     This hook should complete calculations of the cost of vectorizing a
31960     loop or basic block based on DATA, and return the prologue, body,
31961     and epilogue costs as unsigned integers.  The default returns the
31962     value of the three accumulators.
31963
31964 -- Target Hook: void TARGET_VECTORIZE_DESTROY_COST_DATA (void *DATA)
31965     This hook should release DATA and any related data structures
31966     allocated by TARGET_VECTORIZE_INIT_COST. The default releases the
31967     accumulator.
31968
31969 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_TM_LOAD (tree)
31970     This hook should return the built-in decl needed to load a vector
31971     of the given type within a transaction.
31972
31973 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_TM_STORE (tree)
31974     This hook should return the built-in decl needed to store a vector
31975     of the given type within a transaction.
31976
31977 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_GATHER (const_tree
31978          MEM_VECTYPE, const_tree INDEX_TYPE, int SCALE)
31979     Target builtin that implements vector gather operation.
31980     MEM_VECTYPE is the vector type of the load and INDEX_TYPE is scalar
31981     type of the index, scaled by SCALE.  The default is 'NULL_TREE'
31982     which means to not vectorize gather loads.
31983
31984
31985File: gccint.info,  Node: Anchored Addresses,  Next: Condition Code,  Prev: Addressing Modes,  Up: Target Macros
31986
3198717.15 Anchored Addresses
31988========================
31989
31990GCC usually addresses every static object as a separate entity.  For
31991example, if we have:
31992
31993     static int a, b, c;
31994     int foo (void) { return a + b + c; }
31995
31996 the code for 'foo' will usually calculate three separate symbolic
31997addresses: those of 'a', 'b' and 'c'.  On some targets, it would be
31998better to calculate just one symbolic address and access the three
31999variables relative to it.  The equivalent pseudocode would be something
32000like:
32001
32002     int foo (void)
32003     {
32004       register int *xr = &x;
32005       return xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
32006     }
32007
32008 (which isn't valid C). We refer to shared addresses like 'x' as
32009"section anchors".  Their use is controlled by '-fsection-anchors'.
32010
32011 The hooks below describe the target properties that GCC needs to know
32012in order to make effective use of section anchors.  It won't use section
32013anchors at all unless either 'TARGET_MIN_ANCHOR_OFFSET' or
32014'TARGET_MAX_ANCHOR_OFFSET' is set to a nonzero value.
32015
32016 -- Target Hook: HOST_WIDE_INT TARGET_MIN_ANCHOR_OFFSET
32017     The minimum offset that should be applied to a section anchor.  On
32018     most targets, it should be the smallest offset that can be applied
32019     to a base register while still giving a legitimate address for
32020     every mode.  The default value is 0.
32021
32022 -- Target Hook: HOST_WIDE_INT TARGET_MAX_ANCHOR_OFFSET
32023     Like 'TARGET_MIN_ANCHOR_OFFSET', but the maximum (inclusive) offset
32024     that should be applied to section anchors.  The default value is 0.
32025
32026 -- Target Hook: void TARGET_ASM_OUTPUT_ANCHOR (rtx X)
32027     Write the assembly code to define section anchor X, which is a
32028     'SYMBOL_REF' for which 'SYMBOL_REF_ANCHOR_P (X)' is true.  The hook
32029     is called with the assembly output position set to the beginning of
32030     'SYMBOL_REF_BLOCK (X)'.
32031
32032     If 'ASM_OUTPUT_DEF' is available, the hook's default definition
32033     uses it to define the symbol as '. + SYMBOL_REF_BLOCK_OFFSET (X)'.
32034     If 'ASM_OUTPUT_DEF' is not available, the hook's default definition
32035     is 'NULL', which disables the use of section anchors altogether.
32036
32037 -- Target Hook: bool TARGET_USE_ANCHORS_FOR_SYMBOL_P (const_rtx X)
32038     Return true if GCC should attempt to use anchors to access
32039     'SYMBOL_REF' X.  You can assume 'SYMBOL_REF_HAS_BLOCK_INFO_P (X)'
32040     and '!SYMBOL_REF_ANCHOR_P (X)'.
32041
32042     The default version is correct for most targets, but you might need
32043     to intercept this hook to handle things like target-specific
32044     attributes or target-specific sections.
32045
32046
32047File: gccint.info,  Node: Condition Code,  Next: Costs,  Prev: Anchored Addresses,  Up: Target Macros
32048
3204917.16 Condition Code Status
32050===========================
32051
32052The macros in this section can be split in two families, according to
32053the two ways of representing condition codes in GCC.
32054
32055 The first representation is the so called '(cc0)' representation (*note
32056Jump Patterns::), where all instructions can have an implicit clobber of
32057the condition codes.  The second is the condition code register
32058representation, which provides better schedulability for architectures
32059that do have a condition code register, but on which most instructions
32060do not affect it.  The latter category includes most RISC machines.
32061
32062 The implicit clobbering poses a strong restriction on the placement of
32063the definition and use of the condition code, which need to be in
32064adjacent insns for machines using '(cc0)'.  This can prevent important
32065optimizations on some machines.  For example, on the IBM RS/6000, there
32066is a delay for taken branches unless the condition code register is set
32067three instructions earlier than the conditional branch.  The instruction
32068scheduler cannot perform this optimization if it is not permitted to
32069separate the definition and use of the condition code register.
32070
32071 For this reason, it is possible and suggested to use a register to
32072represent the condition code for new ports.  If there is a specific
32073condition code register in the machine, use a hard register.  If the
32074condition code or comparison result can be placed in any general
32075register, or if there are multiple condition registers, use a pseudo
32076register.  Registers used to store the condition code value will usually
32077have a mode that is in class 'MODE_CC'.
32078
32079 Alternatively, you can use 'BImode' if the comparison operator is
32080specified already in the compare instruction.  In this case, you are not
32081interested in most macros in this section.
32082
32083* Menu:
32084
32085* CC0 Condition Codes::      Old style representation of condition codes.
32086* MODE_CC Condition Codes::  Modern representation of condition codes.
32087* Cond Exec Macros::         Macros to control conditional execution.
32088
32089
32090File: gccint.info,  Node: CC0 Condition Codes,  Next: MODE_CC Condition Codes,  Up: Condition Code
32091
3209217.16.1 Representation of condition codes using '(cc0)'
32093-------------------------------------------------------
32094
32095The file 'conditions.h' defines a variable 'cc_status' to describe how
32096the condition code was computed (in case the interpretation of the
32097condition code depends on the instruction that it was set by).  This
32098variable contains the RTL expressions on which the condition code is
32099currently based, and several standard flags.
32100
32101 Sometimes additional machine-specific flags must be defined in the
32102machine description header file.  It can also add additional
32103machine-specific information by defining 'CC_STATUS_MDEP'.
32104
32105 -- Macro: CC_STATUS_MDEP
32106     C code for a data type which is used for declaring the 'mdep'
32107     component of 'cc_status'.  It defaults to 'int'.
32108
32109     This macro is not used on machines that do not use 'cc0'.
32110
32111 -- Macro: CC_STATUS_MDEP_INIT
32112     A C expression to initialize the 'mdep' field to "empty".  The
32113     default definition does nothing, since most machines don't use the
32114     field anyway.  If you want to use the field, you should probably
32115     define this macro to initialize it.
32116
32117     This macro is not used on machines that do not use 'cc0'.
32118
32119 -- Macro: NOTICE_UPDATE_CC (EXP, INSN)
32120     A C compound statement to set the components of 'cc_status'
32121     appropriately for an insn INSN whose body is EXP.  It is this
32122     macro's responsibility to recognize insns that set the condition
32123     code as a byproduct of other activity as well as those that
32124     explicitly set '(cc0)'.
32125
32126     This macro is not used on machines that do not use 'cc0'.
32127
32128     If there are insns that do not set the condition code but do alter
32129     other machine registers, this macro must check to see whether they
32130     invalidate the expressions that the condition code is recorded as
32131     reflecting.  For example, on the 68000, insns that store in address
32132     registers do not set the condition code, which means that usually
32133     'NOTICE_UPDATE_CC' can leave 'cc_status' unaltered for such insns.
32134     But suppose that the previous insn set the condition code based on
32135     location 'a4@(102)' and the current insn stores a new value in
32136     'a4'.  Although the condition code is not changed by this, it will
32137     no longer be true that it reflects the contents of 'a4@(102)'.
32138     Therefore, 'NOTICE_UPDATE_CC' must alter 'cc_status' in this case
32139     to say that nothing is known about the condition code value.
32140
32141     The definition of 'NOTICE_UPDATE_CC' must be prepared to deal with
32142     the results of peephole optimization: insns whose patterns are
32143     'parallel' RTXs containing various 'reg', 'mem' or constants which
32144     are just the operands.  The RTL structure of these insns is not
32145     sufficient to indicate what the insns actually do.  What
32146     'NOTICE_UPDATE_CC' should do when it sees one is just to run
32147     'CC_STATUS_INIT'.
32148
32149     A possible definition of 'NOTICE_UPDATE_CC' is to call a function
32150     that looks at an attribute (*note Insn Attributes::) named, for
32151     example, 'cc'.  This avoids having detailed information about
32152     patterns in two places, the 'md' file and in 'NOTICE_UPDATE_CC'.
32153
32154
32155File: gccint.info,  Node: MODE_CC Condition Codes,  Next: Cond Exec Macros,  Prev: CC0 Condition Codes,  Up: Condition Code
32156
3215717.16.2 Representation of condition codes using registers
32158---------------------------------------------------------
32159
32160 -- Macro: SELECT_CC_MODE (OP, X, Y)
32161     On many machines, the condition code may be produced by other
32162     instructions than compares, for example the branch can use directly
32163     the condition code set by a subtract instruction.  However, on some
32164     machines when the condition code is set this way some bits (such as
32165     the overflow bit) are not set in the same way as a test
32166     instruction, so that a different branch instruction must be used
32167     for some conditional branches.  When this happens, use the machine
32168     mode of the condition code register to record different formats of
32169     the condition code register.  Modes can also be used to record
32170     which compare instruction (e.g.  a signed or an unsigned
32171     comparison) produced the condition codes.
32172
32173     If other modes than 'CCmode' are required, add them to
32174     'MACHINE-modes.def' and define 'SELECT_CC_MODE' to choose a mode
32175     given an operand of a compare.  This is needed because the modes
32176     have to be chosen not only during RTL generation but also, for
32177     example, by instruction combination.  The result of
32178     'SELECT_CC_MODE' should be consistent with the mode used in the
32179     patterns; for example to support the case of the add on the SPARC
32180     discussed above, we have the pattern
32181
32182          (define_insn ""
32183            [(set (reg:CC_NOOV 0)
32184                  (compare:CC_NOOV
32185                    (plus:SI (match_operand:SI 0 "register_operand" "%r")
32186                             (match_operand:SI 1 "arith_operand" "rI"))
32187                    (const_int 0)))]
32188            ""
32189            "...")
32190
32191     together with a 'SELECT_CC_MODE' that returns 'CC_NOOVmode' for
32192     comparisons whose argument is a 'plus':
32193
32194          #define SELECT_CC_MODE(OP,X,Y) \
32195            (GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT          \
32196             ? ((OP == EQ || OP == NE) ? CCFPmode : CCFPEmode)    \
32197             : ((GET_CODE (X) == PLUS || GET_CODE (X) == MINUS    \
32198                 || GET_CODE (X) == NEG) \
32199                ? CC_NOOVmode : CCmode))
32200
32201     Another reason to use modes is to retain information on which
32202     operands were used by the comparison; see 'REVERSIBLE_CC_MODE'
32203     later in this section.
32204
32205     You should define this macro if and only if you define extra CC
32206     modes in 'MACHINE-modes.def'.
32207
32208 -- Target Hook: void TARGET_CANONICALIZE_COMPARISON (int *CODE, rtx
32209          *OP0, rtx *OP1, bool OP0_PRESERVE_VALUE) (CODE, OP0, OP1,
32210          OP0_PRESERVE_VALUE)
32211     On some machines not all possible comparisons are defined, but you
32212     can convert an invalid comparison into a valid one.  For example,
32213     the Alpha does not have a 'GT' comparison, but you can use an 'LT'
32214     comparison instead and swap the order of the operands.
32215
32216     On such machines, implement this hook to do any required
32217     conversions.  CODE is the initial comparison code and OP0 and OP1
32218     are the left and right operands of the comparison, respectively.
32219     If OP0_PRESERVE_VALUE is 'true' the implementation is not allowed
32220     to change the value of OP0 since the value might be used in RTXs
32221     which aren't comparisons.  E.g.  the implementation is not allowed
32222     to swap operands in that case.
32223
32224     GCC will not assume that the comparison resulting from this macro
32225     is valid but will see if the resulting insn matches a pattern in
32226     the 'md' file.
32227
32228     You need not to implement this hook if it would never change the
32229     comparison code or operands.
32230
32231 -- Macro: REVERSIBLE_CC_MODE (MODE)
32232     A C expression whose value is one if it is always safe to reverse a
32233     comparison whose mode is MODE.  If 'SELECT_CC_MODE' can ever return
32234     MODE for a floating-point inequality comparison, then
32235     'REVERSIBLE_CC_MODE (MODE)' must be zero.
32236
32237     You need not define this macro if it would always returns zero or
32238     if the floating-point format is anything other than
32239     'IEEE_FLOAT_FORMAT'.  For example, here is the definition used on
32240     the SPARC, where floating-point inequality comparisons are always
32241     given 'CCFPEmode':
32242
32243          #define REVERSIBLE_CC_MODE(MODE)  ((MODE) != CCFPEmode)
32244
32245 -- Macro: REVERSE_CONDITION (CODE, MODE)
32246     A C expression whose value is reversed condition code of the CODE
32247     for comparison done in CC_MODE MODE.  The macro is used only in
32248     case 'REVERSIBLE_CC_MODE (MODE)' is nonzero.  Define this macro in
32249     case machine has some non-standard way how to reverse certain
32250     conditionals.  For instance in case all floating point conditions
32251     are non-trapping, compiler may freely convert unordered compares to
32252     ordered one.  Then definition may look like:
32253
32254          #define REVERSE_CONDITION(CODE, MODE) \
32255             ((MODE) != CCFPmode ? reverse_condition (CODE) \
32256              : reverse_condition_maybe_unordered (CODE))
32257
32258 -- Target Hook: bool TARGET_FIXED_CONDITION_CODE_REGS (unsigned int
32259          *P1, unsigned int *P2)
32260     On targets which do not use '(cc0)', and which use a hard register
32261     rather than a pseudo-register to hold condition codes, the regular
32262     CSE passes are often not able to identify cases in which the hard
32263     register is set to a common value.  Use this hook to enable a small
32264     pass which optimizes such cases.  This hook should return true to
32265     enable this pass, and it should set the integers to which its
32266     arguments point to the hard register numbers used for condition
32267     codes.  When there is only one such register, as is true on most
32268     systems, the integer pointed to by P2 should be set to
32269     'INVALID_REGNUM'.
32270
32271     The default version of this hook returns false.
32272
32273 -- Target Hook: enum machine_mode TARGET_CC_MODES_COMPATIBLE (enum
32274          machine_mode M1, enum machine_mode M2)
32275     On targets which use multiple condition code modes in class
32276     'MODE_CC', it is sometimes the case that a comparison can be
32277     validly done in more than one mode.  On such a system, define this
32278     target hook to take two mode arguments and to return a mode in
32279     which both comparisons may be validly done.  If there is no such
32280     mode, return 'VOIDmode'.
32281
32282     The default version of this hook checks whether the modes are the
32283     same.  If they are, it returns that mode.  If they are different,
32284     it returns 'VOIDmode'.
32285
32286
32287File: gccint.info,  Node: Cond Exec Macros,  Prev: MODE_CC Condition Codes,  Up: Condition Code
32288
3228917.16.3 Macros to control conditional execution
32290-----------------------------------------------
32291
32292There is one macro that may need to be defined for targets supporting
32293conditional execution, independent of how they represent conditional
32294branches.
32295
32296
32297File: gccint.info,  Node: Costs,  Next: Scheduling,  Prev: Condition Code,  Up: Target Macros
32298
3229917.17 Describing Relative Costs of Operations
32300=============================================
32301
32302These macros let you describe the relative speed of various operations
32303on the target machine.
32304
32305 -- Macro: REGISTER_MOVE_COST (MODE, FROM, TO)
32306     A C expression for the cost of moving data of mode MODE from a
32307     register in class FROM to one in class TO.  The classes are
32308     expressed using the enumeration values such as 'GENERAL_REGS'.  A
32309     value of 2 is the default; other values are interpreted relative to
32310     that.
32311
32312     It is not required that the cost always equal 2 when FROM is the
32313     same as TO; on some machines it is expensive to move between
32314     registers if they are not general registers.
32315
32316     If reload sees an insn consisting of a single 'set' between two
32317     hard registers, and if 'REGISTER_MOVE_COST' applied to their
32318     classes returns a value of 2, reload does not check to ensure that
32319     the constraints of the insn are met.  Setting a cost of other than
32320     2 will allow reload to verify that the constraints are met.  You
32321     should do this if the 'movM' pattern's constraints do not allow
32322     such copying.
32323
32324     These macros are obsolete, new ports should use the target hook
32325     'TARGET_REGISTER_MOVE_COST' instead.
32326
32327 -- Target Hook: int TARGET_REGISTER_MOVE_COST (enum machine_mode MODE,
32328          reg_class_t FROM, reg_class_t TO)
32329     This target hook should return the cost of moving data of mode MODE
32330     from a register in class FROM to one in class TO.  The classes are
32331     expressed using the enumeration values such as 'GENERAL_REGS'.  A
32332     value of 2 is the default; other values are interpreted relative to
32333     that.
32334
32335     It is not required that the cost always equal 2 when FROM is the
32336     same as TO; on some machines it is expensive to move between
32337     registers if they are not general registers.
32338
32339     If reload sees an insn consisting of a single 'set' between two
32340     hard registers, and if 'TARGET_REGISTER_MOVE_COST' applied to their
32341     classes returns a value of 2, reload does not check to ensure that
32342     the constraints of the insn are met.  Setting a cost of other than
32343     2 will allow reload to verify that the constraints are met.  You
32344     should do this if the 'movM' pattern's constraints do not allow
32345     such copying.
32346
32347     The default version of this function returns 2.
32348
32349 -- Macro: MEMORY_MOVE_COST (MODE, CLASS, IN)
32350     A C expression for the cost of moving data of mode MODE between a
32351     register of class CLASS and memory; IN is zero if the value is to
32352     be written to memory, nonzero if it is to be read in.  This cost is
32353     relative to those in 'REGISTER_MOVE_COST'.  If moving between
32354     registers and memory is more expensive than between two registers,
32355     you should define this macro to express the relative cost.
32356
32357     If you do not define this macro, GCC uses a default cost of 4 plus
32358     the cost of copying via a secondary reload register, if one is
32359     needed.  If your machine requires a secondary reload register to
32360     copy between memory and a register of CLASS but the reload
32361     mechanism is more complex than copying via an intermediate, define
32362     this macro to reflect the actual cost of the move.
32363
32364     GCC defines the function 'memory_move_secondary_cost' if secondary
32365     reloads are needed.  It computes the costs due to copying via a
32366     secondary register.  If your machine copies from memory using a
32367     secondary register in the conventional way but the default base
32368     value of 4 is not correct for your machine, define this macro to
32369     add some other value to the result of that function.  The arguments
32370     to that function are the same as to this macro.
32371
32372     These macros are obsolete, new ports should use the target hook
32373     'TARGET_MEMORY_MOVE_COST' instead.
32374
32375 -- Target Hook: int TARGET_MEMORY_MOVE_COST (enum machine_mode MODE,
32376          reg_class_t RCLASS, bool IN)
32377     This target hook should return the cost of moving data of mode MODE
32378     between a register of class RCLASS and memory; IN is 'false' if the
32379     value is to be written to memory, 'true' if it is to be read in.
32380     This cost is relative to those in 'TARGET_REGISTER_MOVE_COST'.  If
32381     moving between registers and memory is more expensive than between
32382     two registers, you should add this target hook to express the
32383     relative cost.
32384
32385     If you do not add this target hook, GCC uses a default cost of 4
32386     plus the cost of copying via a secondary reload register, if one is
32387     needed.  If your machine requires a secondary reload register to
32388     copy between memory and a register of RCLASS but the reload
32389     mechanism is more complex than copying via an intermediate, use
32390     this target hook to reflect the actual cost of the move.
32391
32392     GCC defines the function 'memory_move_secondary_cost' if secondary
32393     reloads are needed.  It computes the costs due to copying via a
32394     secondary register.  If your machine copies from memory using a
32395     secondary register in the conventional way but the default base
32396     value of 4 is not correct for your machine, use this target hook to
32397     add some other value to the result of that function.  The arguments
32398     to that function are the same as to this target hook.
32399
32400 -- Macro: BRANCH_COST (SPEED_P, PREDICTABLE_P)
32401     A C expression for the cost of a branch instruction.  A value of 1
32402     is the default; other values are interpreted relative to that.
32403     Parameter SPEED_P is true when the branch in question should be
32404     optimized for speed.  When it is false, 'BRANCH_COST' should return
32405     a value optimal for code size rather than performance.
32406     PREDICTABLE_P is true for well-predicted branches.  On many
32407     architectures the 'BRANCH_COST' can be reduced then.
32408
32409 Here are additional macros which do not specify precise relative costs,
32410but only that certain actions are more expensive than GCC would
32411ordinarily expect.
32412
32413 -- Macro: SLOW_BYTE_ACCESS
32414     Define this macro as a C expression which is nonzero if accessing
32415     less than a word of memory (i.e. a 'char' or a 'short') is no
32416     faster than accessing a word of memory, i.e., if such access
32417     require more than one instruction or if there is no difference in
32418     cost between byte and (aligned) word loads.
32419
32420     When this macro is not defined, the compiler will access a field by
32421     finding the smallest containing object; when it is defined, a
32422     fullword load will be used if alignment permits.  Unless bytes
32423     accesses are faster than word accesses, using word accesses is
32424     preferable since it may eliminate subsequent memory access if
32425     subsequent accesses occur to other fields in the same word of the
32426     structure, but to different bytes.
32427
32428 -- Macro: SLOW_UNALIGNED_ACCESS (MODE, ALIGNMENT)
32429     Define this macro to be the value 1 if memory accesses described by
32430     the MODE and ALIGNMENT parameters have a cost many times greater
32431     than aligned accesses, for example if they are emulated in a trap
32432     handler.
32433
32434     When this macro is nonzero, the compiler will act as if
32435     'STRICT_ALIGNMENT' were nonzero when generating code for block
32436     moves.  This can cause significantly more instructions to be
32437     produced.  Therefore, do not set this macro nonzero if unaligned
32438     accesses only add a cycle or two to the time for a memory access.
32439
32440     If the value of this macro is always zero, it need not be defined.
32441     If this macro is defined, it should produce a nonzero value when
32442     'STRICT_ALIGNMENT' is nonzero.
32443
32444 -- Macro: MOVE_RATIO (SPEED)
32445     The threshold of number of scalar memory-to-memory move insns,
32446     _below_ which a sequence of insns should be generated instead of a
32447     string move insn or a library call.  Increasing the value will
32448     always make code faster, but eventually incurs high cost in
32449     increased code size.
32450
32451     Note that on machines where the corresponding move insn is a
32452     'define_expand' that emits a sequence of insns, this macro counts
32453     the number of such sequences.
32454
32455     The parameter SPEED is true if the code is currently being
32456     optimized for speed rather than size.
32457
32458     If you don't define this, a reasonable default is used.
32459
32460 -- Macro: MOVE_BY_PIECES_P (SIZE, ALIGNMENT)
32461     A C expression used to determine whether 'move_by_pieces' will be
32462     used to copy a chunk of memory, or whether some other block move
32463     mechanism will be used.  Defaults to 1 if 'move_by_pieces_ninsns'
32464     returns less than 'MOVE_RATIO'.
32465
32466 -- Macro: MOVE_MAX_PIECES
32467     A C expression used by 'move_by_pieces' to determine the largest
32468     unit a load or store used to copy memory is.  Defaults to
32469     'MOVE_MAX'.
32470
32471 -- Macro: CLEAR_RATIO (SPEED)
32472     The threshold of number of scalar move insns, _below_ which a
32473     sequence of insns should be generated to clear memory instead of a
32474     string clear insn or a library call.  Increasing the value will
32475     always make code faster, but eventually incurs high cost in
32476     increased code size.
32477
32478     The parameter SPEED is true if the code is currently being
32479     optimized for speed rather than size.
32480
32481     If you don't define this, a reasonable default is used.
32482
32483 -- Macro: CLEAR_BY_PIECES_P (SIZE, ALIGNMENT)
32484     A C expression used to determine whether 'clear_by_pieces' will be
32485     used to clear a chunk of memory, or whether some other block clear
32486     mechanism will be used.  Defaults to 1 if 'move_by_pieces_ninsns'
32487     returns less than 'CLEAR_RATIO'.
32488
32489 -- Macro: SET_RATIO (SPEED)
32490     The threshold of number of scalar move insns, _below_ which a
32491     sequence of insns should be generated to set memory to a constant
32492     value, instead of a block set insn or a library call.  Increasing
32493     the value will always make code faster, but eventually incurs high
32494     cost in increased code size.
32495
32496     The parameter SPEED is true if the code is currently being
32497     optimized for speed rather than size.
32498
32499     If you don't define this, it defaults to the value of 'MOVE_RATIO'.
32500
32501 -- Macro: SET_BY_PIECES_P (SIZE, ALIGNMENT)
32502     A C expression used to determine whether 'store_by_pieces' will be
32503     used to set a chunk of memory to a constant value, or whether some
32504     other mechanism will be used.  Used by '__builtin_memset' when
32505     storing values other than constant zero.  Defaults to 1 if
32506     'move_by_pieces_ninsns' returns less than 'SET_RATIO'.
32507
32508 -- Macro: STORE_BY_PIECES_P (SIZE, ALIGNMENT)
32509     A C expression used to determine whether 'store_by_pieces' will be
32510     used to set a chunk of memory to a constant string value, or
32511     whether some other mechanism will be used.  Used by
32512     '__builtin_strcpy' when called with a constant source string.
32513     Defaults to 1 if 'move_by_pieces_ninsns' returns less than
32514     'MOVE_RATIO'.
32515
32516 -- Macro: USE_LOAD_POST_INCREMENT (MODE)
32517     A C expression used to determine whether a load postincrement is a
32518     good thing to use for a given mode.  Defaults to the value of
32519     'HAVE_POST_INCREMENT'.
32520
32521 -- Macro: USE_LOAD_POST_DECREMENT (MODE)
32522     A C expression used to determine whether a load postdecrement is a
32523     good thing to use for a given mode.  Defaults to the value of
32524     'HAVE_POST_DECREMENT'.
32525
32526 -- Macro: USE_LOAD_PRE_INCREMENT (MODE)
32527     A C expression used to determine whether a load preincrement is a
32528     good thing to use for a given mode.  Defaults to the value of
32529     'HAVE_PRE_INCREMENT'.
32530
32531 -- Macro: USE_LOAD_PRE_DECREMENT (MODE)
32532     A C expression used to determine whether a load predecrement is a
32533     good thing to use for a given mode.  Defaults to the value of
32534     'HAVE_PRE_DECREMENT'.
32535
32536 -- Macro: USE_STORE_POST_INCREMENT (MODE)
32537     A C expression used to determine whether a store postincrement is a
32538     good thing to use for a given mode.  Defaults to the value of
32539     'HAVE_POST_INCREMENT'.
32540
32541 -- Macro: USE_STORE_POST_DECREMENT (MODE)
32542     A C expression used to determine whether a store postdecrement is a
32543     good thing to use for a given mode.  Defaults to the value of
32544     'HAVE_POST_DECREMENT'.
32545
32546 -- Macro: USE_STORE_PRE_INCREMENT (MODE)
32547     This macro is used to determine whether a store preincrement is a
32548     good thing to use for a given mode.  Defaults to the value of
32549     'HAVE_PRE_INCREMENT'.
32550
32551 -- Macro: USE_STORE_PRE_DECREMENT (MODE)
32552     This macro is used to determine whether a store predecrement is a
32553     good thing to use for a given mode.  Defaults to the value of
32554     'HAVE_PRE_DECREMENT'.
32555
32556 -- Macro: NO_FUNCTION_CSE
32557     Define this macro if it is as good or better to call a constant
32558     function address than to call an address kept in a register.
32559
32560 -- Macro: LOGICAL_OP_NON_SHORT_CIRCUIT
32561     Define this macro if a non-short-circuit operation produced by
32562     'fold_range_test ()' is optimal.  This macro defaults to true if
32563     'BRANCH_COST' is greater than or equal to the value 2.
32564
32565 -- Target Hook: bool TARGET_RTX_COSTS (rtx X, int CODE, int OUTER_CODE,
32566          int OPNO, int *TOTAL, bool SPEED)
32567     This target hook describes the relative costs of RTL expressions.
32568
32569     The cost may depend on the precise form of the expression, which is
32570     available for examination in X, and the fact that X appears as
32571     operand OPNO of an expression with rtx code OUTER_CODE.  That is,
32572     the hook can assume that there is some rtx Y such that 'GET_CODE
32573     (Y) == OUTER_CODE' and such that either (a) 'XEXP (Y, OPNO) == X'
32574     or (b) 'XVEC (Y, OPNO)' contains X.
32575
32576     CODE is X's expression code--redundant, since it can be obtained
32577     with 'GET_CODE (X)'.
32578
32579     In implementing this hook, you can use the construct 'COSTS_N_INSNS
32580     (N)' to specify a cost equal to N fast instructions.
32581
32582     On entry to the hook, '*TOTAL' contains a default estimate for the
32583     cost of the expression.  The hook should modify this value as
32584     necessary.  Traditionally, the default costs are 'COSTS_N_INSNS
32585     (5)' for multiplications, 'COSTS_N_INSNS (7)' for division and
32586     modulus operations, and 'COSTS_N_INSNS (1)' for all other
32587     operations.
32588
32589     When optimizing for code size, i.e. when 'speed' is false, this
32590     target hook should be used to estimate the relative size cost of an
32591     expression, again relative to 'COSTS_N_INSNS'.
32592
32593     The hook returns true when all subexpressions of X have been
32594     processed, and false when 'rtx_cost' should recurse.
32595
32596 -- Target Hook: int TARGET_ADDRESS_COST (rtx ADDRESS, enum machine_mode
32597          MODE, addr_space_t AS, bool SPEED)
32598     This hook computes the cost of an addressing mode that contains
32599     ADDRESS.  If not defined, the cost is computed from the ADDRESS
32600     expression and the 'TARGET_RTX_COST' hook.
32601
32602     For most CISC machines, the default cost is a good approximation of
32603     the true cost of the addressing mode.  However, on RISC machines,
32604     all instructions normally have the same length and execution time.
32605     Hence all addresses will have equal costs.
32606
32607     In cases where more than one form of an address is known, the form
32608     with the lowest cost will be used.  If multiple forms have the
32609     same, lowest, cost, the one that is the most complex will be used.
32610
32611     For example, suppose an address that is equal to the sum of a
32612     register and a constant is used twice in the same basic block.
32613     When this macro is not defined, the address will be computed in a
32614     register and memory references will be indirect through that
32615     register.  On machines where the cost of the addressing mode
32616     containing the sum is no higher than that of a simple indirect
32617     reference, this will produce an additional instruction and possibly
32618     require an additional register.  Proper specification of this macro
32619     eliminates this overhead for such machines.
32620
32621     This hook is never called with an invalid address.
32622
32623     On machines where an address involving more than one register is as
32624     cheap as an address computation involving only one register,
32625     defining 'TARGET_ADDRESS_COST' to reflect this can cause two
32626     registers to be live over a region of code where only one would
32627     have been if 'TARGET_ADDRESS_COST' were not defined in that manner.
32628     This effect should be considered in the definition of this macro.
32629     Equivalent costs should probably only be given to addresses with
32630     different numbers of registers on machines with lots of registers.
32631
32632
32633File: gccint.info,  Node: Scheduling,  Next: Sections,  Prev: Costs,  Up: Target Macros
32634
3263517.18 Adjusting the Instruction Scheduler
32636=========================================
32637
32638The instruction scheduler may need a fair amount of machine-specific
32639adjustment in order to produce good code.  GCC provides several target
32640hooks for this purpose.  It is usually enough to define just a few of
32641them: try the first ones in this list first.
32642
32643 -- Target Hook: int TARGET_SCHED_ISSUE_RATE (void)
32644     This hook returns the maximum number of instructions that can ever
32645     issue at the same time on the target machine.  The default is one.
32646     Although the insn scheduler can define itself the possibility of
32647     issue an insn on the same cycle, the value can serve as an
32648     additional constraint to issue insns on the same simulated
32649     processor cycle (see hooks 'TARGET_SCHED_REORDER' and
32650     'TARGET_SCHED_REORDER2').  This value must be constant over the
32651     entire compilation.  If you need it to vary depending on what the
32652     instructions are, you must use 'TARGET_SCHED_VARIABLE_ISSUE'.
32653
32654 -- Target Hook: int TARGET_SCHED_VARIABLE_ISSUE (FILE *FILE, int
32655          VERBOSE, rtx INSN, int MORE)
32656     This hook is executed by the scheduler after it has scheduled an
32657     insn from the ready list.  It should return the number of insns
32658     which can still be issued in the current cycle.  The default is
32659     'MORE - 1' for insns other than 'CLOBBER' and 'USE', which normally
32660     are not counted against the issue rate.  You should define this
32661     hook if some insns take more machine resources than others, so that
32662     fewer insns can follow them in the same cycle.  FILE is either a
32663     null pointer, or a stdio stream to write any debug output to.
32664     VERBOSE is the verbose level provided by '-fsched-verbose-N'.  INSN
32665     is the instruction that was scheduled.
32666
32667 -- Target Hook: int TARGET_SCHED_ADJUST_COST (rtx INSN, rtx LINK, rtx
32668          DEP_INSN, int COST)
32669     This function corrects the value of COST based on the relationship
32670     between INSN and DEP_INSN through the dependence LINK.  It should
32671     return the new value.  The default is to make no adjustment to
32672     COST.  This can be used for example to specify to the scheduler
32673     using the traditional pipeline description that an output- or
32674     anti-dependence does not incur the same cost as a data-dependence.
32675     If the scheduler using the automaton based pipeline description,
32676     the cost of anti-dependence is zero and the cost of
32677     output-dependence is maximum of one and the difference of latency
32678     times of the first and the second insns.  If these values are not
32679     acceptable, you could use the hook to modify them too.  See also
32680     *note Processor pipeline description::.
32681
32682 -- Target Hook: int TARGET_SCHED_ADJUST_PRIORITY (rtx INSN, int
32683          PRIORITY)
32684     This hook adjusts the integer scheduling priority PRIORITY of INSN.
32685     It should return the new priority.  Increase the priority to
32686     execute INSN earlier, reduce the priority to execute INSN later.
32687     Do not define this hook if you do not need to adjust the scheduling
32688     priorities of insns.
32689
32690 -- Target Hook: int TARGET_SCHED_REORDER (FILE *FILE, int VERBOSE, rtx
32691          *READY, int *N_READYP, int CLOCK)
32692     This hook is executed by the scheduler after it has scheduled the
32693     ready list, to allow the machine description to reorder it (for
32694     example to combine two small instructions together on 'VLIW'
32695     machines).  FILE is either a null pointer, or a stdio stream to
32696     write any debug output to.  VERBOSE is the verbose level provided
32697     by '-fsched-verbose-N'.  READY is a pointer to the ready list of
32698     instructions that are ready to be scheduled.  N_READYP is a pointer
32699     to the number of elements in the ready list.  The scheduler reads
32700     the ready list in reverse order, starting with READY[*N_READYP - 1]
32701     and going to READY[0].  CLOCK is the timer tick of the scheduler.
32702     You may modify the ready list and the number of ready insns.  The
32703     return value is the number of insns that can issue this cycle;
32704     normally this is just 'issue_rate'.  See also
32705     'TARGET_SCHED_REORDER2'.
32706
32707 -- Target Hook: int TARGET_SCHED_REORDER2 (FILE *FILE, int VERBOSE, rtx
32708          *READY, int *N_READYP, int CLOCK)
32709     Like 'TARGET_SCHED_REORDER', but called at a different time.  That
32710     function is called whenever the scheduler starts a new cycle.  This
32711     one is called once per iteration over a cycle, immediately after
32712     'TARGET_SCHED_VARIABLE_ISSUE'; it can reorder the ready list and
32713     return the number of insns to be scheduled in the same cycle.
32714     Defining this hook can be useful if there are frequent situations
32715     where scheduling one insn causes other insns to become ready in the
32716     same cycle.  These other insns can then be taken into account
32717     properly.
32718
32719 -- Target Hook: void TARGET_SCHED_DEPENDENCIES_EVALUATION_HOOK (rtx
32720          HEAD, rtx TAIL)
32721     This hook is called after evaluation forward dependencies of insns
32722     in chain given by two parameter values (HEAD and TAIL
32723     correspondingly) but before insns scheduling of the insn chain.
32724     For example, it can be used for better insn classification if it
32725     requires analysis of dependencies.  This hook can use backward and
32726     forward dependencies of the insn scheduler because they are already
32727     calculated.
32728
32729 -- Target Hook: void TARGET_SCHED_INIT (FILE *FILE, int VERBOSE, int
32730          MAX_READY)
32731     This hook is executed by the scheduler at the beginning of each
32732     block of instructions that are to be scheduled.  FILE is either a
32733     null pointer, or a stdio stream to write any debug output to.
32734     VERBOSE is the verbose level provided by '-fsched-verbose-N'.
32735     MAX_READY is the maximum number of insns in the current scheduling
32736     region that can be live at the same time.  This can be used to
32737     allocate scratch space if it is needed, e.g. by
32738     'TARGET_SCHED_REORDER'.
32739
32740 -- Target Hook: void TARGET_SCHED_FINISH (FILE *FILE, int VERBOSE)
32741     This hook is executed by the scheduler at the end of each block of
32742     instructions that are to be scheduled.  It can be used to perform
32743     cleanup of any actions done by the other scheduling hooks.  FILE is
32744     either a null pointer, or a stdio stream to write any debug output
32745     to.  VERBOSE is the verbose level provided by '-fsched-verbose-N'.
32746
32747 -- Target Hook: void TARGET_SCHED_INIT_GLOBAL (FILE *FILE, int VERBOSE,
32748          int OLD_MAX_UID)
32749     This hook is executed by the scheduler after function level
32750     initializations.  FILE is either a null pointer, or a stdio stream
32751     to write any debug output to.  VERBOSE is the verbose level
32752     provided by '-fsched-verbose-N'.  OLD_MAX_UID is the maximum insn
32753     uid when scheduling begins.
32754
32755 -- Target Hook: void TARGET_SCHED_FINISH_GLOBAL (FILE *FILE, int
32756          VERBOSE)
32757     This is the cleanup hook corresponding to
32758     'TARGET_SCHED_INIT_GLOBAL'.  FILE is either a null pointer, or a
32759     stdio stream to write any debug output to.  VERBOSE is the verbose
32760     level provided by '-fsched-verbose-N'.
32761
32762 -- Target Hook: rtx TARGET_SCHED_DFA_PRE_CYCLE_INSN (void)
32763     The hook returns an RTL insn.  The automaton state used in the
32764     pipeline hazard recognizer is changed as if the insn were scheduled
32765     when the new simulated processor cycle starts.  Usage of the hook
32766     may simplify the automaton pipeline description for some VLIW
32767     processors.  If the hook is defined, it is used only for the
32768     automaton based pipeline description.  The default is not to change
32769     the state when the new simulated processor cycle starts.
32770
32771 -- Target Hook: void TARGET_SCHED_INIT_DFA_PRE_CYCLE_INSN (void)
32772     The hook can be used to initialize data used by the previous hook.
32773
32774 -- Target Hook: rtx TARGET_SCHED_DFA_POST_CYCLE_INSN (void)
32775     The hook is analogous to 'TARGET_SCHED_DFA_PRE_CYCLE_INSN' but used
32776     to changed the state as if the insn were scheduled when the new
32777     simulated processor cycle finishes.
32778
32779 -- Target Hook: void TARGET_SCHED_INIT_DFA_POST_CYCLE_INSN (void)
32780     The hook is analogous to 'TARGET_SCHED_INIT_DFA_PRE_CYCLE_INSN' but
32781     used to initialize data used by the previous hook.
32782
32783 -- Target Hook: void TARGET_SCHED_DFA_PRE_ADVANCE_CYCLE (void)
32784     The hook to notify target that the current simulated cycle is about
32785     to finish.  The hook is analogous to
32786     'TARGET_SCHED_DFA_PRE_CYCLE_INSN' but used to change the state in
32787     more complicated situations - e.g., when advancing state on a
32788     single insn is not enough.
32789
32790 -- Target Hook: void TARGET_SCHED_DFA_POST_ADVANCE_CYCLE (void)
32791     The hook to notify target that new simulated cycle has just
32792     started.  The hook is analogous to
32793     'TARGET_SCHED_DFA_POST_CYCLE_INSN' but used to change the state in
32794     more complicated situations - e.g., when advancing state on a
32795     single insn is not enough.
32796
32797 -- Target Hook: int TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD
32798          (void)
32799     This hook controls better choosing an insn from the ready insn
32800     queue for the DFA-based insn scheduler.  Usually the scheduler
32801     chooses the first insn from the queue.  If the hook returns a
32802     positive value, an additional scheduler code tries all permutations
32803     of 'TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD ()' subsequent
32804     ready insns to choose an insn whose issue will result in maximal
32805     number of issued insns on the same cycle.  For the VLIW processor,
32806     the code could actually solve the problem of packing simple insns
32807     into the VLIW insn.  Of course, if the rules of VLIW packing are
32808     described in the automaton.
32809
32810     This code also could be used for superscalar RISC processors.  Let
32811     us consider a superscalar RISC processor with 3 pipelines.  Some
32812     insns can be executed in pipelines A or B, some insns can be
32813     executed only in pipelines B or C, and one insn can be executed in
32814     pipeline B.  The processor may issue the 1st insn into A and the
32815     2nd one into B.  In this case, the 3rd insn will wait for freeing B
32816     until the next cycle.  If the scheduler issues the 3rd insn the
32817     first, the processor could issue all 3 insns per cycle.
32818
32819     Actually this code demonstrates advantages of the automaton based
32820     pipeline hazard recognizer.  We try quickly and easy many insn
32821     schedules to choose the best one.
32822
32823     The default is no multipass scheduling.
32824
32825 -- Target Hook: int
32826          TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD (rtx
32827          INSN)
32828
32829     This hook controls what insns from the ready insn queue will be
32830     considered for the multipass insn scheduling.  If the hook returns
32831     zero for INSN, the insn will be not chosen to be issued.
32832
32833     The default is that any ready insns can be chosen to be issued.
32834
32835 -- Target Hook: void TARGET_SCHED_FIRST_CYCLE_MULTIPASS_BEGIN (void
32836          *DATA, char *READY_TRY, int N_READY, bool FIRST_CYCLE_INSN_P)
32837     This hook prepares the target backend for a new round of multipass
32838     scheduling.
32839
32840 -- Target Hook: void TARGET_SCHED_FIRST_CYCLE_MULTIPASS_ISSUE (void
32841          *DATA, char *READY_TRY, int N_READY, rtx INSN, const void
32842          *PREV_DATA)
32843     This hook is called when multipass scheduling evaluates instruction
32844     INSN.
32845
32846 -- Target Hook: void TARGET_SCHED_FIRST_CYCLE_MULTIPASS_BACKTRACK
32847          (const void *DATA, char *READY_TRY, int N_READY)
32848     This is called when multipass scheduling backtracks from evaluation
32849     of an instruction.
32850
32851 -- Target Hook: void TARGET_SCHED_FIRST_CYCLE_MULTIPASS_END (const void
32852          *DATA)
32853     This hook notifies the target about the result of the concluded
32854     current round of multipass scheduling.
32855
32856 -- Target Hook: void TARGET_SCHED_FIRST_CYCLE_MULTIPASS_INIT (void
32857          *DATA)
32858     This hook initializes target-specific data used in multipass
32859     scheduling.
32860
32861 -- Target Hook: void TARGET_SCHED_FIRST_CYCLE_MULTIPASS_FINI (void
32862          *DATA)
32863     This hook finalizes target-specific data used in multipass
32864     scheduling.
32865
32866 -- Target Hook: int TARGET_SCHED_DFA_NEW_CYCLE (FILE *DUMP, int
32867          VERBOSE, rtx INSN, int LAST_CLOCK, int CLOCK, int *SORT_P)
32868     This hook is called by the insn scheduler before issuing INSN on
32869     cycle CLOCK.  If the hook returns nonzero, INSN is not issued on
32870     this processor cycle.  Instead, the processor cycle is advanced.
32871     If *SORT_P is zero, the insn ready queue is not sorted on the new
32872     cycle start as usually.  DUMP and VERBOSE specify the file and
32873     verbosity level to use for debugging output.  LAST_CLOCK and CLOCK
32874     are, respectively, the processor cycle on which the previous insn
32875     has been issued, and the current processor cycle.
32876
32877 -- Target Hook: bool TARGET_SCHED_IS_COSTLY_DEPENDENCE (struct _dep
32878          *_DEP, int COST, int DISTANCE)
32879     This hook is used to define which dependences are considered costly
32880     by the target, so costly that it is not advisable to schedule the
32881     insns that are involved in the dependence too close to one another.
32882     The parameters to this hook are as follows: The first parameter
32883     _DEP is the dependence being evaluated.  The second parameter COST
32884     is the cost of the dependence as estimated by the scheduler, and
32885     the third parameter DISTANCE is the distance in cycles between the
32886     two insns.  The hook returns 'true' if considering the distance
32887     between the two insns the dependence between them is considered
32888     costly by the target, and 'false' otherwise.
32889
32890     Defining this hook can be useful in multiple-issue out-of-order
32891     machines, where (a) it's practically hopeless to predict the actual
32892     data/resource delays, however: (b) there's a better chance to
32893     predict the actual grouping that will be formed, and (c) correctly
32894     emulating the grouping can be very important.  In such targets one
32895     may want to allow issuing dependent insns closer to one
32896     another--i.e., closer than the dependence distance; however, not in
32897     cases of "costly dependences", which this hooks allows to define.
32898
32899 -- Target Hook: void TARGET_SCHED_H_I_D_EXTENDED (void)
32900     This hook is called by the insn scheduler after emitting a new
32901     instruction to the instruction stream.  The hook notifies a target
32902     backend to extend its per instruction data structures.
32903
32904 -- Target Hook: void * TARGET_SCHED_ALLOC_SCHED_CONTEXT (void)
32905     Return a pointer to a store large enough to hold target scheduling
32906     context.
32907
32908 -- Target Hook: void TARGET_SCHED_INIT_SCHED_CONTEXT (void *TC, bool
32909          CLEAN_P)
32910     Initialize store pointed to by TC to hold target scheduling
32911     context.  It CLEAN_P is true then initialize TC as if scheduler is
32912     at the beginning of the block.  Otherwise, copy the current context
32913     into TC.
32914
32915 -- Target Hook: void TARGET_SCHED_SET_SCHED_CONTEXT (void *TC)
32916     Copy target scheduling context pointed to by TC to the current
32917     context.
32918
32919 -- Target Hook: void TARGET_SCHED_CLEAR_SCHED_CONTEXT (void *TC)
32920     Deallocate internal data in target scheduling context pointed to by
32921     TC.
32922
32923 -- Target Hook: void TARGET_SCHED_FREE_SCHED_CONTEXT (void *TC)
32924     Deallocate a store for target scheduling context pointed to by TC.
32925
32926 -- Target Hook: int TARGET_SCHED_SPECULATE_INSN (rtx INSN, int REQUEST,
32927          rtx *NEW_PAT)
32928     This hook is called by the insn scheduler when INSN has only
32929     speculative dependencies and therefore can be scheduled
32930     speculatively.  The hook is used to check if the pattern of INSN
32931     has a speculative version and, in case of successful check, to
32932     generate that speculative pattern.  The hook should return 1, if
32933     the instruction has a speculative form, or -1, if it doesn't.
32934     REQUEST describes the type of requested speculation.  If the return
32935     value equals 1 then NEW_PAT is assigned the generated speculative
32936     pattern.
32937
32938 -- Target Hook: bool TARGET_SCHED_NEEDS_BLOCK_P (int DEP_STATUS)
32939     This hook is called by the insn scheduler during generation of
32940     recovery code for INSN.  It should return 'true', if the
32941     corresponding check instruction should branch to recovery code, or
32942     'false' otherwise.
32943
32944 -- Target Hook: rtx TARGET_SCHED_GEN_SPEC_CHECK (rtx INSN, rtx LABEL,
32945          int MUTATE_P)
32946     This hook is called by the insn scheduler to generate a pattern for
32947     recovery check instruction.  If MUTATE_P is zero, then INSN is a
32948     speculative instruction for which the check should be generated.
32949     LABEL is either a label of a basic block, where recovery code
32950     should be emitted, or a null pointer, when requested check doesn't
32951     branch to recovery code (a simple check).  If MUTATE_P is nonzero,
32952     then a pattern for a branchy check corresponding to a simple check
32953     denoted by INSN should be generated.  In this case LABEL can't be
32954     null.
32955
32956 -- Target Hook: bool
32957          TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD_SPEC
32958          (const_rtx INSN)
32959     This hook is used as a workaround for
32960     'TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD' not being
32961     called on the first instruction of the ready list.  The hook is
32962     used to discard speculative instructions that stand first in the
32963     ready list from being scheduled on the current cycle.  If the hook
32964     returns 'false', INSN will not be chosen to be issued.  For
32965     non-speculative instructions, the hook should always return 'true'.
32966     For example, in the ia64 backend the hook is used to cancel data
32967     speculative insns when the ALAT table is nearly full.
32968
32969 -- Target Hook: void TARGET_SCHED_SET_SCHED_FLAGS (struct spec_info_def
32970          *SPEC_INFO)
32971     This hook is used by the insn scheduler to find out what features
32972     should be enabled/used.  The structure *SPEC_INFO should be filled
32973     in by the target.  The structure describes speculation types that
32974     can be used in the scheduler.
32975
32976 -- Target Hook: int TARGET_SCHED_SMS_RES_MII (struct ddg *G)
32977     This hook is called by the swing modulo scheduler to calculate a
32978     resource-based lower bound which is based on the resources
32979     available in the machine and the resources required by each
32980     instruction.  The target backend can use G to calculate such bound.
32981     A very simple lower bound will be used in case this hook is not
32982     implemented: the total number of instructions divided by the issue
32983     rate.
32984
32985 -- Target Hook: bool TARGET_SCHED_DISPATCH (rtx INSN, int X)
32986     This hook is called by Haifa Scheduler.  It returns true if
32987     dispatch scheduling is supported in hardware and the condition
32988     specified in the parameter is true.
32989
32990 -- Target Hook: void TARGET_SCHED_DISPATCH_DO (rtx INSN, int X)
32991     This hook is called by Haifa Scheduler.  It performs the operation
32992     specified in its second parameter.
32993
32994 -- Target Hook: bool TARGET_SCHED_EXPOSED_PIPELINE
32995     True if the processor has an exposed pipeline, which means that not
32996     just the order of instructions is important for correctness when
32997     scheduling, but also the latencies of operations.
32998
32999 -- Target Hook: int TARGET_SCHED_REASSOCIATION_WIDTH (unsigned int OPC,
33000          enum machine_mode MODE)
33001     This hook is called by tree reassociator to determine a level of
33002     parallelism required in output calculations chain.
33003
33004
33005File: gccint.info,  Node: Sections,  Next: PIC,  Prev: Scheduling,  Up: Target Macros
33006
3300717.19 Dividing the Output into Sections (Texts, Data, ...)
33008==========================================================
33009
33010An object file is divided into sections containing different types of
33011data.  In the most common case, there are three sections: the "text
33012section", which holds instructions and read-only data; the "data
33013section", which holds initialized writable data; and the "bss section",
33014which holds uninitialized data.  Some systems have other kinds of
33015sections.
33016
33017 'varasm.c' provides several well-known sections, such as
33018'text_section', 'data_section' and 'bss_section'.  The normal way of
33019controlling a 'FOO_section' variable is to define the associated
33020'FOO_SECTION_ASM_OP' macro, as described below.  The macros are only
33021read once, when 'varasm.c' initializes itself, so their values must be
33022run-time constants.  They may however depend on command-line flags.
33023
33024 _Note:_ Some run-time files, such 'crtstuff.c', also make use of the
33025'FOO_SECTION_ASM_OP' macros, and expect them to be string literals.
33026
33027 Some assemblers require a different string to be written every time a
33028section is selected.  If your assembler falls into this category, you
33029should define the 'TARGET_ASM_INIT_SECTIONS' hook and use
33030'get_unnamed_section' to set up the sections.
33031
33032 You must always create a 'text_section', either by defining
33033'TEXT_SECTION_ASM_OP' or by initializing 'text_section' in
33034'TARGET_ASM_INIT_SECTIONS'.  The same is true of 'data_section' and
33035'DATA_SECTION_ASM_OP'.  If you do not create a distinct
33036'readonly_data_section', the default is to reuse 'text_section'.
33037
33038 All the other 'varasm.c' sections are optional, and are null if the
33039target does not provide them.
33040
33041 -- Macro: TEXT_SECTION_ASM_OP
33042     A C expression whose value is a string, including spacing,
33043     containing the assembler operation that should precede instructions
33044     and read-only data.  Normally '"\t.text"' is right.
33045
33046 -- Macro: HOT_TEXT_SECTION_NAME
33047     If defined, a C string constant for the name of the section
33048     containing most frequently executed functions of the program.  If
33049     not defined, GCC will provide a default definition if the target
33050     supports named sections.
33051
33052 -- Macro: UNLIKELY_EXECUTED_TEXT_SECTION_NAME
33053     If defined, a C string constant for the name of the section
33054     containing unlikely executed functions in the program.
33055
33056 -- Macro: DATA_SECTION_ASM_OP
33057     A C expression whose value is a string, including spacing,
33058     containing the assembler operation to identify the following data
33059     as writable initialized data.  Normally '"\t.data"' is right.
33060
33061 -- Macro: SDATA_SECTION_ASM_OP
33062     If defined, a C expression whose value is a string, including
33063     spacing, containing the assembler operation to identify the
33064     following data as initialized, writable small data.
33065
33066 -- Macro: READONLY_DATA_SECTION_ASM_OP
33067     A C expression whose value is a string, including spacing,
33068     containing the assembler operation to identify the following data
33069     as read-only initialized data.
33070
33071 -- Macro: BSS_SECTION_ASM_OP
33072     If defined, a C expression whose value is a string, including
33073     spacing, containing the assembler operation to identify the
33074     following data as uninitialized global data.  If not defined, and
33075     'ASM_OUTPUT_ALIGNED_BSS' not defined, uninitialized global data
33076     will be output in the data section if '-fno-common' is passed,
33077     otherwise 'ASM_OUTPUT_COMMON' will be used.
33078
33079 -- Macro: SBSS_SECTION_ASM_OP
33080     If defined, a C expression whose value is a string, including
33081     spacing, containing the assembler operation to identify the
33082     following data as uninitialized, writable small data.
33083
33084 -- Macro: TLS_COMMON_ASM_OP
33085     If defined, a C expression whose value is a string containing the
33086     assembler operation to identify the following data as thread-local
33087     common data.  The default is '".tls_common"'.
33088
33089 -- Macro: TLS_SECTION_ASM_FLAG
33090     If defined, a C expression whose value is a character constant
33091     containing the flag used to mark a section as a TLS section.  The
33092     default is ''T''.
33093
33094 -- Macro: INIT_SECTION_ASM_OP
33095     If defined, a C expression whose value is a string, including
33096     spacing, containing the assembler operation to identify the
33097     following data as initialization code.  If not defined, GCC will
33098     assume such a section does not exist.  This section has no
33099     corresponding 'init_section' variable; it is used entirely in
33100     runtime code.
33101
33102 -- Macro: FINI_SECTION_ASM_OP
33103     If defined, a C expression whose value is a string, including
33104     spacing, containing the assembler operation to identify the
33105     following data as finalization code.  If not defined, GCC will
33106     assume such a section does not exist.  This section has no
33107     corresponding 'fini_section' variable; it is used entirely in
33108     runtime code.
33109
33110 -- Macro: INIT_ARRAY_SECTION_ASM_OP
33111     If defined, a C expression whose value is a string, including
33112     spacing, containing the assembler operation to identify the
33113     following data as part of the '.init_array' (or equivalent)
33114     section.  If not defined, GCC will assume such a section does not
33115     exist.  Do not define both this macro and 'INIT_SECTION_ASM_OP'.
33116
33117 -- Macro: FINI_ARRAY_SECTION_ASM_OP
33118     If defined, a C expression whose value is a string, including
33119     spacing, containing the assembler operation to identify the
33120     following data as part of the '.fini_array' (or equivalent)
33121     section.  If not defined, GCC will assume such a section does not
33122     exist.  Do not define both this macro and 'FINI_SECTION_ASM_OP'.
33123
33124 -- Macro: CRT_CALL_STATIC_FUNCTION (SECTION_OP, FUNCTION)
33125     If defined, an ASM statement that switches to a different section
33126     via SECTION_OP, calls FUNCTION, and switches back to the text
33127     section.  This is used in 'crtstuff.c' if 'INIT_SECTION_ASM_OP' or
33128     'FINI_SECTION_ASM_OP' to calls to initialization and finalization
33129     functions from the init and fini sections.  By default, this macro
33130     uses a simple function call.  Some ports need hand-crafted assembly
33131     code to avoid dependencies on registers initialized in the function
33132     prologue or to ensure that constant pools don't end up too far way
33133     in the text section.
33134
33135 -- Macro: TARGET_LIBGCC_SDATA_SECTION
33136     If defined, a string which names the section into which small
33137     variables defined in crtstuff and libgcc should go.  This is useful
33138     when the target has options for optimizing access to small data,
33139     and you want the crtstuff and libgcc routines to be conservative in
33140     what they expect of your application yet liberal in what your
33141     application expects.  For example, for targets with a '.sdata'
33142     section (like MIPS), you could compile crtstuff with '-G 0' so that
33143     it doesn't require small data support from your application, but
33144     use this macro to put small data into '.sdata' so that your
33145     application can access these variables whether it uses small data
33146     or not.
33147
33148 -- Macro: FORCE_CODE_SECTION_ALIGN
33149     If defined, an ASM statement that aligns a code section to some
33150     arbitrary boundary.  This is used to force all fragments of the
33151     '.init' and '.fini' sections to have to same alignment and thus
33152     prevent the linker from having to add any padding.
33153
33154 -- Macro: JUMP_TABLES_IN_TEXT_SECTION
33155     Define this macro to be an expression with a nonzero value if jump
33156     tables (for 'tablejump' insns) should be output in the text
33157     section, along with the assembler instructions.  Otherwise, the
33158     readonly data section is used.
33159
33160     This macro is irrelevant if there is no separate readonly data
33161     section.
33162
33163 -- Target Hook: void TARGET_ASM_INIT_SECTIONS (void)
33164     Define this hook if you need to do something special to set up the
33165     'varasm.c' sections, or if your target has some special sections of
33166     its own that you need to create.
33167
33168     GCC calls this hook after processing the command line, but before
33169     writing any assembly code, and before calling any of the
33170     section-returning hooks described below.
33171
33172 -- Target Hook: int TARGET_ASM_RELOC_RW_MASK (void)
33173     Return a mask describing how relocations should be treated when
33174     selecting sections.  Bit 1 should be set if global relocations
33175     should be placed in a read-write section; bit 0 should be set if
33176     local relocations should be placed in a read-write section.
33177
33178     The default version of this function returns 3 when '-fpic' is in
33179     effect, and 0 otherwise.  The hook is typically redefined when the
33180     target cannot support (some kinds of) dynamic relocations in
33181     read-only sections even in executables.
33182
33183 -- Target Hook: section * TARGET_ASM_SELECT_SECTION (tree EXP, int
33184          RELOC, unsigned HOST_WIDE_INT ALIGN)
33185     Return the section into which EXP should be placed.  You can assume
33186     that EXP is either a 'VAR_DECL' node or a constant of some sort.
33187     RELOC indicates whether the initial value of EXP requires link-time
33188     relocations.  Bit 0 is set when variable contains local relocations
33189     only, while bit 1 is set for global relocations.  ALIGN is the
33190     constant alignment in bits.
33191
33192     The default version of this function takes care of putting
33193     read-only variables in 'readonly_data_section'.
33194
33195     See also USE_SELECT_SECTION_FOR_FUNCTIONS.
33196
33197 -- Macro: USE_SELECT_SECTION_FOR_FUNCTIONS
33198     Define this macro if you wish TARGET_ASM_SELECT_SECTION to be
33199     called for 'FUNCTION_DECL's as well as for variables and constants.
33200
33201     In the case of a 'FUNCTION_DECL', RELOC will be zero if the
33202     function has been determined to be likely to be called, and nonzero
33203     if it is unlikely to be called.
33204
33205 -- Target Hook: void TARGET_ASM_UNIQUE_SECTION (tree DECL, int RELOC)
33206     Build up a unique section name, expressed as a 'STRING_CST' node,
33207     and assign it to 'DECL_SECTION_NAME (DECL)'.  As with
33208     'TARGET_ASM_SELECT_SECTION', RELOC indicates whether the initial
33209     value of EXP requires link-time relocations.
33210
33211     The default version of this function appends the symbol name to the
33212     ELF section name that would normally be used for the symbol.  For
33213     example, the function 'foo' would be placed in '.text.foo'.
33214     Whatever the actual target object format, this is often good
33215     enough.
33216
33217 -- Target Hook: section * TARGET_ASM_FUNCTION_RODATA_SECTION (tree
33218          DECL)
33219     Return the readonly data section associated with 'DECL_SECTION_NAME
33220     (DECL)'.  The default version of this function selects
33221     '.gnu.linkonce.r.name' if the function's section is
33222     '.gnu.linkonce.t.name', '.rodata.name' if function is in
33223     '.text.name', and the normal readonly-data section otherwise.
33224
33225 -- Target Hook: const char * TARGET_ASM_MERGEABLE_RODATA_PREFIX
33226     Usually, the compiler uses the prefix '".rodata"' to construct
33227     section names for mergeable constant data.  Define this macro to
33228     override the string if a different section name should be used.
33229
33230 -- Target Hook: section * TARGET_ASM_TM_CLONE_TABLE_SECTION (void)
33231     Return the section that should be used for transactional memory
33232     clone tables.
33233
33234 -- Target Hook: section * TARGET_ASM_SELECT_RTX_SECTION (enum
33235          machine_mode MODE, rtx X, unsigned HOST_WIDE_INT ALIGN)
33236     Return the section into which a constant X, of mode MODE, should be
33237     placed.  You can assume that X is some kind of constant in RTL.
33238     The argument MODE is redundant except in the case of a 'const_int'
33239     rtx.  ALIGN is the constant alignment in bits.
33240
33241     The default version of this function takes care of putting symbolic
33242     constants in 'flag_pic' mode in 'data_section' and everything else
33243     in 'readonly_data_section'.
33244
33245 -- Target Hook: tree TARGET_MANGLE_DECL_ASSEMBLER_NAME (tree DECL, tree
33246          ID)
33247     Define this hook if you need to postprocess the assembler name
33248     generated by target-independent code.  The ID provided to this hook
33249     will be the computed name (e.g., the macro 'DECL_NAME' of the DECL
33250     in C, or the mangled name of the DECL in C++).  The return value of
33251     the hook is an 'IDENTIFIER_NODE' for the appropriate mangled name
33252     on your target system.  The default implementation of this hook
33253     just returns the ID provided.
33254
33255 -- Target Hook: void TARGET_ENCODE_SECTION_INFO (tree DECL, rtx RTL,
33256          int NEW_DECL_P)
33257     Define this hook if references to a symbol or a constant must be
33258     treated differently depending on something about the variable or
33259     function named by the symbol (such as what section it is in).
33260
33261     The hook is executed immediately after rtl has been created for
33262     DECL, which may be a variable or function declaration or an entry
33263     in the constant pool.  In either case, RTL is the rtl in question.
33264     Do _not_ use 'DECL_RTL (DECL)' in this hook; that field may not
33265     have been initialized yet.
33266
33267     In the case of a constant, it is safe to assume that the rtl is a
33268     'mem' whose address is a 'symbol_ref'.  Most decls will also have
33269     this form, but that is not guaranteed.  Global register variables,
33270     for instance, will have a 'reg' for their rtl.  (Normally the right
33271     thing to do with such unusual rtl is leave it alone.)
33272
33273     The NEW_DECL_P argument will be true if this is the first time that
33274     'TARGET_ENCODE_SECTION_INFO' has been invoked on this decl.  It
33275     will be false for subsequent invocations, which will happen for
33276     duplicate declarations.  Whether or not anything must be done for
33277     the duplicate declaration depends on whether the hook examines
33278     'DECL_ATTRIBUTES'.  NEW_DECL_P is always true when the hook is
33279     called for a constant.
33280
33281     The usual thing for this hook to do is to record flags in the
33282     'symbol_ref', using 'SYMBOL_REF_FLAG' or 'SYMBOL_REF_FLAGS'.
33283     Historically, the name string was modified if it was necessary to
33284     encode more than one bit of information, but this practice is now
33285     discouraged; use 'SYMBOL_REF_FLAGS'.
33286
33287     The default definition of this hook, 'default_encode_section_info'
33288     in 'varasm.c', sets a number of commonly-useful bits in
33289     'SYMBOL_REF_FLAGS'.  Check whether the default does what you need
33290     before overriding it.
33291
33292 -- Target Hook: const char * TARGET_STRIP_NAME_ENCODING (const char
33293          *NAME)
33294     Decode NAME and return the real name part, sans the characters that
33295     'TARGET_ENCODE_SECTION_INFO' may have added.
33296
33297 -- Target Hook: bool TARGET_IN_SMALL_DATA_P (const_tree EXP)
33298     Returns true if EXP should be placed into a "small data" section.
33299     The default version of this hook always returns false.
33300
33301 -- Target Hook: bool TARGET_HAVE_SRODATA_SECTION
33302     Contains the value true if the target places read-only "small data"
33303     into a separate section.  The default value is false.
33304
33305 -- Target Hook: bool TARGET_PROFILE_BEFORE_PROLOGUE (void)
33306     It returns true if target wants profile code emitted before
33307     prologue.
33308
33309     The default version of this hook use the target macro
33310     'PROFILE_BEFORE_PROLOGUE'.
33311
33312 -- Target Hook: bool TARGET_BINDS_LOCAL_P (const_tree EXP)
33313     Returns true if EXP names an object for which name resolution rules
33314     must resolve to the current "module" (dynamic shared library or
33315     executable image).
33316
33317     The default version of this hook implements the name resolution
33318     rules for ELF, which has a looser model of global name binding than
33319     other currently supported object file formats.
33320
33321 -- Target Hook: bool TARGET_HAVE_TLS
33322     Contains the value true if the target supports thread-local
33323     storage.  The default value is false.
33324
33325
33326File: gccint.info,  Node: PIC,  Next: Assembler Format,  Prev: Sections,  Up: Target Macros
33327
3332817.20 Position Independent Code
33329===============================
33330
33331This section describes macros that help implement generation of position
33332independent code.  Simply defining these macros is not enough to
33333generate valid PIC; you must also add support to the hook
33334'TARGET_LEGITIMATE_ADDRESS_P' and to the macro 'PRINT_OPERAND_ADDRESS',
33335as well as 'LEGITIMIZE_ADDRESS'.  You must modify the definition of
33336'movsi' to do something appropriate when the source operand contains a
33337symbolic address.  You may also need to alter the handling of switch
33338statements so that they use relative addresses.
33339
33340 -- Macro: PIC_OFFSET_TABLE_REGNUM
33341     The register number of the register used to address a table of
33342     static data addresses in memory.  In some cases this register is
33343     defined by a processor's "application binary interface" (ABI).
33344     When this macro is defined, RTL is generated for this register
33345     once, as with the stack pointer and frame pointer registers.  If
33346     this macro is not defined, it is up to the machine-dependent files
33347     to allocate such a register (if necessary).  Note that this
33348     register must be fixed when in use (e.g. when 'flag_pic' is true).
33349
33350 -- Macro: PIC_OFFSET_TABLE_REG_CALL_CLOBBERED
33351     A C expression that is nonzero if the register defined by
33352     'PIC_OFFSET_TABLE_REGNUM' is clobbered by calls.  If not defined,
33353     the default is zero.  Do not define this macro if
33354     'PIC_OFFSET_TABLE_REGNUM' is not defined.
33355
33356 -- Macro: LEGITIMATE_PIC_OPERAND_P (X)
33357     A C expression that is nonzero if X is a legitimate immediate
33358     operand on the target machine when generating position independent
33359     code.  You can assume that X satisfies 'CONSTANT_P', so you need
33360     not check this.  You can also assume FLAG_PIC is true, so you need
33361     not check it either.  You need not define this macro if all
33362     constants (including 'SYMBOL_REF') can be immediate operands when
33363     generating position independent code.
33364
33365
33366File: gccint.info,  Node: Assembler Format,  Next: Debugging Info,  Prev: PIC,  Up: Target Macros
33367
3336817.21 Defining the Output Assembler Language
33369============================================
33370
33371This section describes macros whose principal purpose is to describe how
33372to write instructions in assembler language--rather than what the
33373instructions do.
33374
33375* Menu:
33376
33377* File Framework::       Structural information for the assembler file.
33378* Data Output::          Output of constants (numbers, strings, addresses).
33379* Uninitialized Data::   Output of uninitialized variables.
33380* Label Output::         Output and generation of labels.
33381* Initialization::       General principles of initialization
33382                         and termination routines.
33383* Macros for Initialization::
33384                         Specific macros that control the handling of
33385                         initialization and termination routines.
33386* Instruction Output::   Output of actual instructions.
33387* Dispatch Tables::      Output of jump tables.
33388* Exception Region Output:: Output of exception region code.
33389* Alignment Output::     Pseudo ops for alignment and skipping data.
33390
33391
33392File: gccint.info,  Node: File Framework,  Next: Data Output,  Up: Assembler Format
33393
3339417.21.1 The Overall Framework of an Assembler File
33395--------------------------------------------------
33396
33397This describes the overall framework of an assembly file.
33398
33399 -- Target Hook: void TARGET_ASM_FILE_START (void)
33400     Output to 'asm_out_file' any text which the assembler expects to
33401     find at the beginning of a file.  The default behavior is
33402     controlled by two flags, documented below.  Unless your target's
33403     assembler is quite unusual, if you override the default, you should
33404     call 'default_file_start' at some point in your target hook.  This
33405     lets other target files rely on these variables.
33406
33407 -- Target Hook: bool TARGET_ASM_FILE_START_APP_OFF
33408     If this flag is true, the text of the macro 'ASM_APP_OFF' will be
33409     printed as the very first line in the assembly file, unless
33410     '-fverbose-asm' is in effect.  (If that macro has been defined to
33411     the empty string, this variable has no effect.)  With the normal
33412     definition of 'ASM_APP_OFF', the effect is to notify the GNU
33413     assembler that it need not bother stripping comments or extra
33414     whitespace from its input.  This allows it to work a bit faster.
33415
33416     The default is false.  You should not set it to true unless you
33417     have verified that your port does not generate any extra whitespace
33418     or comments that will cause GAS to issue errors in NO_APP mode.
33419
33420 -- Target Hook: bool TARGET_ASM_FILE_START_FILE_DIRECTIVE
33421     If this flag is true, 'output_file_directive' will be called for
33422     the primary source file, immediately after printing 'ASM_APP_OFF'
33423     (if that is enabled).  Most ELF assemblers expect this to be done.
33424     The default is false.
33425
33426 -- Target Hook: void TARGET_ASM_FILE_END (void)
33427     Output to 'asm_out_file' any text which the assembler expects to
33428     find at the end of a file.  The default is to output nothing.
33429
33430 -- Function: void file_end_indicate_exec_stack ()
33431     Some systems use a common convention, the '.note.GNU-stack' special
33432     section, to indicate whether or not an object file relies on the
33433     stack being executable.  If your system uses this convention, you
33434     should define 'TARGET_ASM_FILE_END' to this function.  If you need
33435     to do other things in that hook, have your hook function call this
33436     function.
33437
33438 -- Target Hook: void TARGET_ASM_LTO_START (void)
33439     Output to 'asm_out_file' any text which the assembler expects to
33440     find at the start of an LTO section.  The default is to output
33441     nothing.
33442
33443 -- Target Hook: void TARGET_ASM_LTO_END (void)
33444     Output to 'asm_out_file' any text which the assembler expects to
33445     find at the end of an LTO section.  The default is to output
33446     nothing.
33447
33448 -- Target Hook: void TARGET_ASM_CODE_END (void)
33449     Output to 'asm_out_file' any text which is needed before emitting
33450     unwind info and debug info at the end of a file.  Some targets emit
33451     here PIC setup thunks that cannot be emitted at the end of file,
33452     because they couldn't have unwind info then.  The default is to
33453     output nothing.
33454
33455 -- Macro: ASM_COMMENT_START
33456     A C string constant describing how to begin a comment in the target
33457     assembler language.  The compiler assumes that the comment will end
33458     at the end of the line.
33459
33460 -- Macro: ASM_APP_ON
33461     A C string constant for text to be output before each 'asm'
33462     statement or group of consecutive ones.  Normally this is '"#APP"',
33463     which is a comment that has no effect on most assemblers but tells
33464     the GNU assembler that it must check the lines that follow for all
33465     valid assembler constructs.
33466
33467 -- Macro: ASM_APP_OFF
33468     A C string constant for text to be output after each 'asm'
33469     statement or group of consecutive ones.  Normally this is
33470     '"#NO_APP"', which tells the GNU assembler to resume making the
33471     time-saving assumptions that are valid for ordinary compiler
33472     output.
33473
33474 -- Macro: ASM_OUTPUT_SOURCE_FILENAME (STREAM, NAME)
33475     A C statement to output COFF information or DWARF debugging
33476     information which indicates that filename NAME is the current
33477     source file to the stdio stream STREAM.
33478
33479     This macro need not be defined if the standard form of output for
33480     the file format in use is appropriate.
33481
33482 -- Target Hook: void TARGET_ASM_OUTPUT_SOURCE_FILENAME (FILE *FILE,
33483          const char *NAME)
33484     Output COFF information or DWARF debugging information which
33485     indicates that filename NAME is the current source file to the
33486     stdio stream FILE.
33487
33488     This target hook need not be defined if the standard form of output
33489     for the file format in use is appropriate.
33490
33491 -- Target Hook: void TARGET_ASM_OUTPUT_IDENT (const char *NAME)
33492     Output a string based on NAME, suitable for the '#ident' directive,
33493     or the equivalent directive or pragma in non-C-family languages.
33494     If this hook is not defined, nothing is output for the '#ident'
33495     directive.
33496
33497 -- Macro: OUTPUT_QUOTED_STRING (STREAM, STRING)
33498     A C statement to output the string STRING to the stdio stream
33499     STREAM.  If you do not call the function 'output_quoted_string' in
33500     your config files, GCC will only call it to output filenames to the
33501     assembler source.  So you can use it to canonicalize the format of
33502     the filename using this macro.
33503
33504 -- Target Hook: void TARGET_ASM_NAMED_SECTION (const char *NAME,
33505          unsigned int FLAGS, tree DECL)
33506     Output assembly directives to switch to section NAME.  The section
33507     should have attributes as specified by FLAGS, which is a bit mask
33508     of the 'SECTION_*' flags defined in 'output.h'.  If DECL is
33509     non-NULL, it is the 'VAR_DECL' or 'FUNCTION_DECL' with which this
33510     section is associated.
33511
33512 -- Target Hook: section * TARGET_ASM_FUNCTION_SECTION (tree DECL, enum
33513          node_frequency FREQ, bool STARTUP, bool EXIT)
33514     Return preferred text (sub)section for function DECL.  Main purpose
33515     of this function is to separate cold, normal and hot functions.
33516     STARTUP is true when function is known to be used only at startup
33517     (from static constructors or it is 'main()').  EXIT is true when
33518     function is known to be used only at exit (from static
33519     destructors).  Return NULL if function should go to default text
33520     section.
33521
33522 -- Target Hook: void TARGET_ASM_FUNCTION_SWITCHED_TEXT_SECTIONS (FILE
33523          *FILE, tree DECL, bool NEW_IS_COLD)
33524     Used by the target to emit any assembler directives or additional
33525     labels needed when a function is partitioned between different
33526     sections.  Output should be written to FILE.  The function decl is
33527     available as DECL and the new section is 'cold' if NEW_IS_COLD is
33528     'true'.
33529
33530 -- Common Target Hook: bool TARGET_HAVE_NAMED_SECTIONS
33531     This flag is true if the target supports
33532     'TARGET_ASM_NAMED_SECTION'.  It must not be modified by
33533     command-line option processing.
33534
33535 -- Target Hook: bool TARGET_HAVE_SWITCHABLE_BSS_SECTIONS
33536     This flag is true if we can create zeroed data by switching to a
33537     BSS section and then using 'ASM_OUTPUT_SKIP' to allocate the space.
33538     This is true on most ELF targets.
33539
33540 -- Target Hook: unsigned int TARGET_SECTION_TYPE_FLAGS (tree DECL,
33541          const char *NAME, int RELOC)
33542     Choose a set of section attributes for use by
33543     'TARGET_ASM_NAMED_SECTION' based on a variable or function decl, a
33544     section name, and whether or not the declaration's initializer may
33545     contain runtime relocations.  DECL may be null, in which case
33546     read-write data should be assumed.
33547
33548     The default version of this function handles choosing code vs data,
33549     read-only vs read-write data, and 'flag_pic'.  You should only need
33550     to override this if your target has special flags that might be set
33551     via '__attribute__'.
33552
33553 -- Target Hook: int TARGET_ASM_RECORD_GCC_SWITCHES (print_switch_type
33554          TYPE, const char *TEXT)
33555     Provides the target with the ability to record the gcc command line
33556     switches that have been passed to the compiler, and options that
33557     are enabled.  The TYPE argument specifies what is being recorded.
33558     It can take the following values:
33559
33560     'SWITCH_TYPE_PASSED'
33561          TEXT is a command line switch that has been set by the user.
33562
33563     'SWITCH_TYPE_ENABLED'
33564          TEXT is an option which has been enabled.  This might be as a
33565          direct result of a command line switch, or because it is
33566          enabled by default or because it has been enabled as a side
33567          effect of a different command line switch.  For example, the
33568          '-O2' switch enables various different individual optimization
33569          passes.
33570
33571     'SWITCH_TYPE_DESCRIPTIVE'
33572          TEXT is either NULL or some descriptive text which should be
33573          ignored.  If TEXT is NULL then it is being used to warn the
33574          target hook that either recording is starting or ending.  The
33575          first time TYPE is SWITCH_TYPE_DESCRIPTIVE and TEXT is NULL,
33576          the warning is for start up and the second time the warning is
33577          for wind down.  This feature is to allow the target hook to
33578          make any necessary preparations before it starts to record
33579          switches and to perform any necessary tidying up after it has
33580          finished recording switches.
33581
33582     'SWITCH_TYPE_LINE_START'
33583          This option can be ignored by this target hook.
33584
33585     'SWITCH_TYPE_LINE_END'
33586          This option can be ignored by this target hook.
33587
33588     The hook's return value must be zero.  Other return values may be
33589     supported in the future.
33590
33591     By default this hook is set to NULL, but an example implementation
33592     is provided for ELF based targets.  Called ELF_RECORD_GCC_SWITCHES,
33593     it records the switches as ASCII text inside a new, string
33594     mergeable section in the assembler output file.  The name of the
33595     new section is provided by the
33596     'TARGET_ASM_RECORD_GCC_SWITCHES_SECTION' target hook.
33597
33598 -- Target Hook: const char * TARGET_ASM_RECORD_GCC_SWITCHES_SECTION
33599     This is the name of the section that will be created by the example
33600     ELF implementation of the 'TARGET_ASM_RECORD_GCC_SWITCHES' target
33601     hook.
33602
33603
33604File: gccint.info,  Node: Data Output,  Next: Uninitialized Data,  Prev: File Framework,  Up: Assembler Format
33605
3360617.21.2 Output of Data
33607----------------------
33608
33609 -- Target Hook: const char * TARGET_ASM_BYTE_OP
33610 -- Target Hook: const char * TARGET_ASM_ALIGNED_HI_OP
33611 -- Target Hook: const char * TARGET_ASM_ALIGNED_SI_OP
33612 -- Target Hook: const char * TARGET_ASM_ALIGNED_DI_OP
33613 -- Target Hook: const char * TARGET_ASM_ALIGNED_TI_OP
33614 -- Target Hook: const char * TARGET_ASM_UNALIGNED_HI_OP
33615 -- Target Hook: const char * TARGET_ASM_UNALIGNED_SI_OP
33616 -- Target Hook: const char * TARGET_ASM_UNALIGNED_DI_OP
33617 -- Target Hook: const char * TARGET_ASM_UNALIGNED_TI_OP
33618     These hooks specify assembly directives for creating certain kinds
33619     of integer object.  The 'TARGET_ASM_BYTE_OP' directive creates a
33620     byte-sized object, the 'TARGET_ASM_ALIGNED_HI_OP' one creates an
33621     aligned two-byte object, and so on.  Any of the hooks may be
33622     'NULL', indicating that no suitable directive is available.
33623
33624     The compiler will print these strings at the start of a new line,
33625     followed immediately by the object's initial value.  In most cases,
33626     the string should contain a tab, a pseudo-op, and then another tab.
33627
33628 -- Target Hook: bool TARGET_ASM_INTEGER (rtx X, unsigned int SIZE, int
33629          ALIGNED_P)
33630     The 'assemble_integer' function uses this hook to output an integer
33631     object.  X is the object's value, SIZE is its size in bytes and
33632     ALIGNED_P indicates whether it is aligned.  The function should
33633     return 'true' if it was able to output the object.  If it returns
33634     false, 'assemble_integer' will try to split the object into smaller
33635     parts.
33636
33637     The default implementation of this hook will use the
33638     'TARGET_ASM_BYTE_OP' family of strings, returning 'false' when the
33639     relevant string is 'NULL'.
33640
33641 -- Target Hook: bool TARGET_ASM_OUTPUT_ADDR_CONST_EXTRA (FILE *FILE,
33642          rtx X)
33643     A target hook to recognize RTX patterns that 'output_addr_const'
33644     can't deal with, and output assembly code to FILE corresponding to
33645     the pattern X.  This may be used to allow machine-dependent
33646     'UNSPEC's to appear within constants.
33647
33648     If target hook fails to recognize a pattern, it must return
33649     'false', so that a standard error message is printed.  If it prints
33650     an error message itself, by calling, for example,
33651     'output_operand_lossage', it may just return 'true'.
33652
33653 -- Macro: ASM_OUTPUT_ASCII (STREAM, PTR, LEN)
33654     A C statement to output to the stdio stream STREAM an assembler
33655     instruction to assemble a string constant containing the LEN bytes
33656     at PTR.  PTR will be a C expression of type 'char *' and LEN a C
33657     expression of type 'int'.
33658
33659     If the assembler has a '.ascii' pseudo-op as found in the Berkeley
33660     Unix assembler, do not define the macro 'ASM_OUTPUT_ASCII'.
33661
33662 -- Macro: ASM_OUTPUT_FDESC (STREAM, DECL, N)
33663     A C statement to output word N of a function descriptor for DECL.
33664     This must be defined if 'TARGET_VTABLE_USES_DESCRIPTORS' is
33665     defined, and is otherwise unused.
33666
33667 -- Macro: CONSTANT_POOL_BEFORE_FUNCTION
33668     You may define this macro as a C expression.  You should define the
33669     expression to have a nonzero value if GCC should output the
33670     constant pool for a function before the code for the function, or a
33671     zero value if GCC should output the constant pool after the
33672     function.  If you do not define this macro, the usual case, GCC
33673     will output the constant pool before the function.
33674
33675 -- Macro: ASM_OUTPUT_POOL_PROLOGUE (FILE, FUNNAME, FUNDECL, SIZE)
33676     A C statement to output assembler commands to define the start of
33677     the constant pool for a function.  FUNNAME is a string giving the
33678     name of the function.  Should the return type of the function be
33679     required, it can be obtained via FUNDECL.  SIZE is the size, in
33680     bytes, of the constant pool that will be written immediately after
33681     this call.
33682
33683     If no constant-pool prefix is required, the usual case, this macro
33684     need not be defined.
33685
33686 -- Macro: ASM_OUTPUT_SPECIAL_POOL_ENTRY (FILE, X, MODE, ALIGN, LABELNO,
33687          JUMPTO)
33688     A C statement (with or without semicolon) to output a constant in
33689     the constant pool, if it needs special treatment.  (This macro need
33690     not do anything for RTL expressions that can be output normally.)
33691
33692     The argument FILE is the standard I/O stream to output the
33693     assembler code on.  X is the RTL expression for the constant to
33694     output, and MODE is the machine mode (in case X is a 'const_int').
33695     ALIGN is the required alignment for the value X; you should output
33696     an assembler directive to force this much alignment.
33697
33698     The argument LABELNO is a number to use in an internal label for
33699     the address of this pool entry.  The definition of this macro is
33700     responsible for outputting the label definition at the proper
33701     place.  Here is how to do this:
33702
33703          (*targetm.asm_out.internal_label) (FILE, "LC", LABELNO);
33704
33705     When you output a pool entry specially, you should end with a
33706     'goto' to the label JUMPTO.  This will prevent the same pool entry
33707     from being output a second time in the usual manner.
33708
33709     You need not define this macro if it would do nothing.
33710
33711 -- Macro: ASM_OUTPUT_POOL_EPILOGUE (FILE FUNNAME FUNDECL SIZE)
33712     A C statement to output assembler commands to at the end of the
33713     constant pool for a function.  FUNNAME is a string giving the name
33714     of the function.  Should the return type of the function be
33715     required, you can obtain it via FUNDECL.  SIZE is the size, in
33716     bytes, of the constant pool that GCC wrote immediately before this
33717     call.
33718
33719     If no constant-pool epilogue is required, the usual case, you need
33720     not define this macro.
33721
33722 -- Macro: IS_ASM_LOGICAL_LINE_SEPARATOR (C, STR)
33723     Define this macro as a C expression which is nonzero if C is used
33724     as a logical line separator by the assembler.  STR points to the
33725     position in the string where C was found; this can be used if a
33726     line separator uses multiple characters.
33727
33728     If you do not define this macro, the default is that only the
33729     character ';' is treated as a logical line separator.
33730
33731 -- Target Hook: const char * TARGET_ASM_OPEN_PAREN
33732 -- Target Hook: const char * TARGET_ASM_CLOSE_PAREN
33733     These target hooks are C string constants, describing the syntax in
33734     the assembler for grouping arithmetic expressions.  If not
33735     overridden, they default to normal parentheses, which is correct
33736     for most assemblers.
33737
33738 These macros are provided by 'real.h' for writing the definitions of
33739'ASM_OUTPUT_DOUBLE' and the like:
33740
33741 -- Macro: REAL_VALUE_TO_TARGET_SINGLE (X, L)
33742 -- Macro: REAL_VALUE_TO_TARGET_DOUBLE (X, L)
33743 -- Macro: REAL_VALUE_TO_TARGET_LONG_DOUBLE (X, L)
33744 -- Macro: REAL_VALUE_TO_TARGET_DECIMAL32 (X, L)
33745 -- Macro: REAL_VALUE_TO_TARGET_DECIMAL64 (X, L)
33746 -- Macro: REAL_VALUE_TO_TARGET_DECIMAL128 (X, L)
33747     These translate X, of type 'REAL_VALUE_TYPE', to the target's
33748     floating point representation, and store its bit pattern in the
33749     variable L.  For 'REAL_VALUE_TO_TARGET_SINGLE' and
33750     'REAL_VALUE_TO_TARGET_DECIMAL32', this variable should be a simple
33751     'long int'.  For the others, it should be an array of 'long int'.
33752     The number of elements in this array is determined by the size of
33753     the desired target floating point data type: 32 bits of it go in
33754     each 'long int' array element.  Each array element holds 32 bits of
33755     the result, even if 'long int' is wider than 32 bits on the host
33756     machine.
33757
33758     The array element values are designed so that you can print them
33759     out using 'fprintf' in the order they should appear in the target
33760     machine's memory.
33761
33762
33763File: gccint.info,  Node: Uninitialized Data,  Next: Label Output,  Prev: Data Output,  Up: Assembler Format
33764
3376517.21.3 Output of Uninitialized Variables
33766-----------------------------------------
33767
33768Each of the macros in this section is used to do the whole job of
33769outputting a single uninitialized variable.
33770
33771 -- Macro: ASM_OUTPUT_COMMON (STREAM, NAME, SIZE, ROUNDED)
33772     A C statement (sans semicolon) to output to the stdio stream STREAM
33773     the assembler definition of a common-label named NAME whose size is
33774     SIZE bytes.  The variable ROUNDED is the size rounded up to
33775     whatever alignment the caller wants.  It is possible that SIZE may
33776     be zero, for instance if a struct with no other member than a
33777     zero-length array is defined.  In this case, the backend must
33778     output a symbol definition that allocates at least one byte, both
33779     so that the address of the resulting object does not compare equal
33780     to any other, and because some object formats cannot even express
33781     the concept of a zero-sized common symbol, as that is how they
33782     represent an ordinary undefined external.
33783
33784     Use the expression 'assemble_name (STREAM, NAME)' to output the
33785     name itself; before and after that, output the additional assembler
33786     syntax for defining the name, and a newline.
33787
33788     This macro controls how the assembler definitions of uninitialized
33789     common global variables are output.
33790
33791 -- Macro: ASM_OUTPUT_ALIGNED_COMMON (STREAM, NAME, SIZE, ALIGNMENT)
33792     Like 'ASM_OUTPUT_COMMON' except takes the required alignment as a
33793     separate, explicit argument.  If you define this macro, it is used
33794     in place of 'ASM_OUTPUT_COMMON', and gives you more flexibility in
33795     handling the required alignment of the variable.  The alignment is
33796     specified as the number of bits.
33797
33798 -- Macro: ASM_OUTPUT_ALIGNED_DECL_COMMON (STREAM, DECL, NAME, SIZE,
33799          ALIGNMENT)
33800     Like 'ASM_OUTPUT_ALIGNED_COMMON' except that DECL of the variable
33801     to be output, if there is one, or 'NULL_TREE' if there is no
33802     corresponding variable.  If you define this macro, GCC will use it
33803     in place of both 'ASM_OUTPUT_COMMON' and
33804     'ASM_OUTPUT_ALIGNED_COMMON'.  Define this macro when you need to
33805     see the variable's decl in order to chose what to output.
33806
33807 -- Macro: ASM_OUTPUT_ALIGNED_BSS (STREAM, DECL, NAME, SIZE, ALIGNMENT)
33808     A C statement (sans semicolon) to output to the stdio stream STREAM
33809     the assembler definition of uninitialized global DECL named NAME
33810     whose size is SIZE bytes.  The variable ALIGNMENT is the alignment
33811     specified as the number of bits.
33812
33813     Try to use function 'asm_output_aligned_bss' defined in file
33814     'varasm.c' when defining this macro.  If unable, use the expression
33815     'assemble_name (STREAM, NAME)' to output the name itself; before
33816     and after that, output the additional assembler syntax for defining
33817     the name, and a newline.
33818
33819     There are two ways of handling global BSS.  One is to define this
33820     macro.  The other is to have 'TARGET_ASM_SELECT_SECTION' return a
33821     switchable BSS section (*note
33822     TARGET_HAVE_SWITCHABLE_BSS_SECTIONS::).  You do not need to do
33823     both.
33824
33825     Some languages do not have 'common' data, and require a non-common
33826     form of global BSS in order to handle uninitialized globals
33827     efficiently.  C++ is one example of this.  However, if the target
33828     does not support global BSS, the front end may choose to make
33829     globals common in order to save space in the object file.
33830
33831 -- Macro: ASM_OUTPUT_LOCAL (STREAM, NAME, SIZE, ROUNDED)
33832     A C statement (sans semicolon) to output to the stdio stream STREAM
33833     the assembler definition of a local-common-label named NAME whose
33834     size is SIZE bytes.  The variable ROUNDED is the size rounded up to
33835     whatever alignment the caller wants.
33836
33837     Use the expression 'assemble_name (STREAM, NAME)' to output the
33838     name itself; before and after that, output the additional assembler
33839     syntax for defining the name, and a newline.
33840
33841     This macro controls how the assembler definitions of uninitialized
33842     static variables are output.
33843
33844 -- Macro: ASM_OUTPUT_ALIGNED_LOCAL (STREAM, NAME, SIZE, ALIGNMENT)
33845     Like 'ASM_OUTPUT_LOCAL' except takes the required alignment as a
33846     separate, explicit argument.  If you define this macro, it is used
33847     in place of 'ASM_OUTPUT_LOCAL', and gives you more flexibility in
33848     handling the required alignment of the variable.  The alignment is
33849     specified as the number of bits.
33850
33851 -- Macro: ASM_OUTPUT_ALIGNED_DECL_LOCAL (STREAM, DECL, NAME, SIZE,
33852          ALIGNMENT)
33853     Like 'ASM_OUTPUT_ALIGNED_DECL' except that DECL of the variable to
33854     be output, if there is one, or 'NULL_TREE' if there is no
33855     corresponding variable.  If you define this macro, GCC will use it
33856     in place of both 'ASM_OUTPUT_DECL' and 'ASM_OUTPUT_ALIGNED_DECL'.
33857     Define this macro when you need to see the variable's decl in order
33858     to chose what to output.
33859
33860
33861File: gccint.info,  Node: Label Output,  Next: Initialization,  Prev: Uninitialized Data,  Up: Assembler Format
33862
3386317.21.4 Output and Generation of Labels
33864---------------------------------------
33865
33866This is about outputting labels.
33867
33868 -- Macro: ASM_OUTPUT_LABEL (STREAM, NAME)
33869     A C statement (sans semicolon) to output to the stdio stream STREAM
33870     the assembler definition of a label named NAME.  Use the expression
33871     'assemble_name (STREAM, NAME)' to output the name itself; before
33872     and after that, output the additional assembler syntax for defining
33873     the name, and a newline.  A default definition of this macro is
33874     provided which is correct for most systems.
33875
33876 -- Macro: ASM_OUTPUT_FUNCTION_LABEL (STREAM, NAME, DECL)
33877     A C statement (sans semicolon) to output to the stdio stream STREAM
33878     the assembler definition of a label named NAME of a function.  Use
33879     the expression 'assemble_name (STREAM, NAME)' to output the name
33880     itself; before and after that, output the additional assembler
33881     syntax for defining the name, and a newline.  A default definition
33882     of this macro is provided which is correct for most systems.
33883
33884     If this macro is not defined, then the function name is defined in
33885     the usual manner as a label (by means of 'ASM_OUTPUT_LABEL').
33886
33887 -- Macro: ASM_OUTPUT_INTERNAL_LABEL (STREAM, NAME)
33888     Identical to 'ASM_OUTPUT_LABEL', except that NAME is known to refer
33889     to a compiler-generated label.  The default definition uses
33890     'assemble_name_raw', which is like 'assemble_name' except that it
33891     is more efficient.
33892
33893 -- Macro: SIZE_ASM_OP
33894     A C string containing the appropriate assembler directive to
33895     specify the size of a symbol, without any arguments.  On systems
33896     that use ELF, the default (in 'config/elfos.h') is '"\t.size\t"';
33897     on other systems, the default is not to define this macro.
33898
33899     Define this macro only if it is correct to use the default
33900     definitions of 'ASM_OUTPUT_SIZE_DIRECTIVE' and
33901     'ASM_OUTPUT_MEASURED_SIZE' for your system.  If you need your own
33902     custom definitions of those macros, or if you do not need explicit
33903     symbol sizes at all, do not define this macro.
33904
33905 -- Macro: ASM_OUTPUT_SIZE_DIRECTIVE (STREAM, NAME, SIZE)
33906     A C statement (sans semicolon) to output to the stdio stream STREAM
33907     a directive telling the assembler that the size of the symbol NAME
33908     is SIZE.  SIZE is a 'HOST_WIDE_INT'.  If you define 'SIZE_ASM_OP',
33909     a default definition of this macro is provided.
33910
33911 -- Macro: ASM_OUTPUT_MEASURED_SIZE (STREAM, NAME)
33912     A C statement (sans semicolon) to output to the stdio stream STREAM
33913     a directive telling the assembler to calculate the size of the
33914     symbol NAME by subtracting its address from the current address.
33915
33916     If you define 'SIZE_ASM_OP', a default definition of this macro is
33917     provided.  The default assumes that the assembler recognizes a
33918     special '.' symbol as referring to the current address, and can
33919     calculate the difference between this and another symbol.  If your
33920     assembler does not recognize '.' or cannot do calculations with it,
33921     you will need to redefine 'ASM_OUTPUT_MEASURED_SIZE' to use some
33922     other technique.
33923
33924 -- Macro: NO_DOLLAR_IN_LABEL
33925     Define this macro if the assembler does not accept the character
33926     '$' in label names.  By default constructors and destructors in G++
33927     have '$' in the identifiers.  If this macro is defined, '.' is used
33928     instead.
33929
33930 -- Macro: NO_DOT_IN_LABEL
33931     Define this macro if the assembler does not accept the character
33932     '.' in label names.  By default constructors and destructors in G++
33933     have names that use '.'.  If this macro is defined, these names are
33934     rewritten to avoid '.'.
33935
33936 -- Macro: TYPE_ASM_OP
33937     A C string containing the appropriate assembler directive to
33938     specify the type of a symbol, without any arguments.  On systems
33939     that use ELF, the default (in 'config/elfos.h') is '"\t.type\t"';
33940     on other systems, the default is not to define this macro.
33941
33942     Define this macro only if it is correct to use the default
33943     definition of 'ASM_OUTPUT_TYPE_DIRECTIVE' for your system.  If you
33944     need your own custom definition of this macro, or if you do not
33945     need explicit symbol types at all, do not define this macro.
33946
33947 -- Macro: TYPE_OPERAND_FMT
33948     A C string which specifies (using 'printf' syntax) the format of
33949     the second operand to 'TYPE_ASM_OP'.  On systems that use ELF, the
33950     default (in 'config/elfos.h') is '"@%s"'; on other systems, the
33951     default is not to define this macro.
33952
33953     Define this macro only if it is correct to use the default
33954     definition of 'ASM_OUTPUT_TYPE_DIRECTIVE' for your system.  If you
33955     need your own custom definition of this macro, or if you do not
33956     need explicit symbol types at all, do not define this macro.
33957
33958 -- Macro: ASM_OUTPUT_TYPE_DIRECTIVE (STREAM, TYPE)
33959     A C statement (sans semicolon) to output to the stdio stream STREAM
33960     a directive telling the assembler that the type of the symbol NAME
33961     is TYPE.  TYPE is a C string; currently, that string is always
33962     either '"function"' or '"object"', but you should not count on
33963     this.
33964
33965     If you define 'TYPE_ASM_OP' and 'TYPE_OPERAND_FMT', a default
33966     definition of this macro is provided.
33967
33968 -- Macro: ASM_DECLARE_FUNCTION_NAME (STREAM, NAME, DECL)
33969     A C statement (sans semicolon) to output to the stdio stream STREAM
33970     any text necessary for declaring the name NAME of a function which
33971     is being defined.  This macro is responsible for outputting the
33972     label definition (perhaps using 'ASM_OUTPUT_FUNCTION_LABEL').  The
33973     argument DECL is the 'FUNCTION_DECL' tree node representing the
33974     function.
33975
33976     If this macro is not defined, then the function name is defined in
33977     the usual manner as a label (by means of
33978     'ASM_OUTPUT_FUNCTION_LABEL').
33979
33980     You may wish to use 'ASM_OUTPUT_TYPE_DIRECTIVE' in the definition
33981     of this macro.
33982
33983 -- Macro: ASM_DECLARE_FUNCTION_SIZE (STREAM, NAME, DECL)
33984     A C statement (sans semicolon) to output to the stdio stream STREAM
33985     any text necessary for declaring the size of a function which is
33986     being defined.  The argument NAME is the name of the function.  The
33987     argument DECL is the 'FUNCTION_DECL' tree node representing the
33988     function.
33989
33990     If this macro is not defined, then the function size is not
33991     defined.
33992
33993     You may wish to use 'ASM_OUTPUT_MEASURED_SIZE' in the definition of
33994     this macro.
33995
33996 -- Macro: ASM_DECLARE_OBJECT_NAME (STREAM, NAME, DECL)
33997     A C statement (sans semicolon) to output to the stdio stream STREAM
33998     any text necessary for declaring the name NAME of an initialized
33999     variable which is being defined.  This macro must output the label
34000     definition (perhaps using 'ASM_OUTPUT_LABEL').  The argument DECL
34001     is the 'VAR_DECL' tree node representing the variable.
34002
34003     If this macro is not defined, then the variable name is defined in
34004     the usual manner as a label (by means of 'ASM_OUTPUT_LABEL').
34005
34006     You may wish to use 'ASM_OUTPUT_TYPE_DIRECTIVE' and/or
34007     'ASM_OUTPUT_SIZE_DIRECTIVE' in the definition of this macro.
34008
34009 -- Target Hook: void TARGET_ASM_DECLARE_CONSTANT_NAME (FILE *FILE,
34010          const char *NAME, const_tree EXPR, HOST_WIDE_INT SIZE)
34011     A target hook to output to the stdio stream FILE any text necessary
34012     for declaring the name NAME of a constant which is being defined.
34013     This target hook is responsible for outputting the label definition
34014     (perhaps using 'assemble_label').  The argument EXP is the value of
34015     the constant, and SIZE is the size of the constant in bytes.  The
34016     NAME will be an internal label.
34017
34018     The default version of this target hook, define the NAME in the
34019     usual manner as a label (by means of 'assemble_label').
34020
34021     You may wish to use 'ASM_OUTPUT_TYPE_DIRECTIVE' in this target
34022     hook.
34023
34024 -- Macro: ASM_DECLARE_REGISTER_GLOBAL (STREAM, DECL, REGNO, NAME)
34025     A C statement (sans semicolon) to output to the stdio stream STREAM
34026     any text necessary for claiming a register REGNO for a global
34027     variable DECL with name NAME.
34028
34029     If you don't define this macro, that is equivalent to defining it
34030     to do nothing.
34031
34032 -- Macro: ASM_FINISH_DECLARE_OBJECT (STREAM, DECL, TOPLEVEL, ATEND)
34033     A C statement (sans semicolon) to finish up declaring a variable
34034     name once the compiler has processed its initializer fully and thus
34035     has had a chance to determine the size of an array when controlled
34036     by an initializer.  This is used on systems where it's necessary to
34037     declare something about the size of the object.
34038
34039     If you don't define this macro, that is equivalent to defining it
34040     to do nothing.
34041
34042     You may wish to use 'ASM_OUTPUT_SIZE_DIRECTIVE' and/or
34043     'ASM_OUTPUT_MEASURED_SIZE' in the definition of this macro.
34044
34045 -- Target Hook: void TARGET_ASM_GLOBALIZE_LABEL (FILE *STREAM, const
34046          char *NAME)
34047     This target hook is a function to output to the stdio stream STREAM
34048     some commands that will make the label NAME global; that is,
34049     available for reference from other files.
34050
34051     The default implementation relies on a proper definition of
34052     'GLOBAL_ASM_OP'.
34053
34054 -- Target Hook: void TARGET_ASM_GLOBALIZE_DECL_NAME (FILE *STREAM, tree
34055          DECL)
34056     This target hook is a function to output to the stdio stream STREAM
34057     some commands that will make the name associated with DECL global;
34058     that is, available for reference from other files.
34059
34060     The default implementation uses the TARGET_ASM_GLOBALIZE_LABEL
34061     target hook.
34062
34063 -- Macro: ASM_WEAKEN_LABEL (STREAM, NAME)
34064     A C statement (sans semicolon) to output to the stdio stream STREAM
34065     some commands that will make the label NAME weak; that is,
34066     available for reference from other files but only used if no other
34067     definition is available.  Use the expression 'assemble_name
34068     (STREAM, NAME)' to output the name itself; before and after that,
34069     output the additional assembler syntax for making that name weak,
34070     and a newline.
34071
34072     If you don't define this macro or 'ASM_WEAKEN_DECL', GCC will not
34073     support weak symbols and you should not define the 'SUPPORTS_WEAK'
34074     macro.
34075
34076 -- Macro: ASM_WEAKEN_DECL (STREAM, DECL, NAME, VALUE)
34077     Combines (and replaces) the function of 'ASM_WEAKEN_LABEL' and
34078     'ASM_OUTPUT_WEAK_ALIAS', allowing access to the associated function
34079     or variable decl.  If VALUE is not 'NULL', this C statement should
34080     output to the stdio stream STREAM assembler code which defines
34081     (equates) the weak symbol NAME to have the value VALUE.  If VALUE
34082     is 'NULL', it should output commands to make NAME weak.
34083
34084 -- Macro: ASM_OUTPUT_WEAKREF (STREAM, DECL, NAME, VALUE)
34085     Outputs a directive that enables NAME to be used to refer to symbol
34086     VALUE with weak-symbol semantics.  'decl' is the declaration of
34087     'name'.
34088
34089 -- Macro: SUPPORTS_WEAK
34090     A preprocessor constant expression which evaluates to true if the
34091     target supports weak symbols.
34092
34093     If you don't define this macro, 'defaults.h' provides a default
34094     definition.  If either 'ASM_WEAKEN_LABEL' or 'ASM_WEAKEN_DECL' is
34095     defined, the default definition is '1'; otherwise, it is '0'.
34096
34097 -- Macro: TARGET_SUPPORTS_WEAK
34098     A C expression which evaluates to true if the target supports weak
34099     symbols.
34100
34101     If you don't define this macro, 'defaults.h' provides a default
34102     definition.  The default definition is '(SUPPORTS_WEAK)'.  Define
34103     this macro if you want to control weak symbol support with a
34104     compiler flag such as '-melf'.
34105
34106 -- Macro: MAKE_DECL_ONE_ONLY (DECL)
34107     A C statement (sans semicolon) to mark DECL to be emitted as a
34108     public symbol such that extra copies in multiple translation units
34109     will be discarded by the linker.  Define this macro if your object
34110     file format provides support for this concept, such as the 'COMDAT'
34111     section flags in the Microsoft Windows PE/COFF format, and this
34112     support requires changes to DECL, such as putting it in a separate
34113     section.
34114
34115 -- Macro: SUPPORTS_ONE_ONLY
34116     A C expression which evaluates to true if the target supports
34117     one-only semantics.
34118
34119     If you don't define this macro, 'varasm.c' provides a default
34120     definition.  If 'MAKE_DECL_ONE_ONLY' is defined, the default
34121     definition is '1'; otherwise, it is '0'.  Define this macro if you
34122     want to control one-only symbol support with a compiler flag, or if
34123     setting the 'DECL_ONE_ONLY' flag is enough to mark a declaration to
34124     be emitted as one-only.
34125
34126 -- Target Hook: void TARGET_ASM_ASSEMBLE_VISIBILITY (tree DECL, int
34127          VISIBILITY)
34128     This target hook is a function to output to ASM_OUT_FILE some
34129     commands that will make the symbol(s) associated with DECL have
34130     hidden, protected or internal visibility as specified by
34131     VISIBILITY.
34132
34133 -- Macro: TARGET_WEAK_NOT_IN_ARCHIVE_TOC
34134     A C expression that evaluates to true if the target's linker
34135     expects that weak symbols do not appear in a static archive's table
34136     of contents.  The default is '0'.
34137
34138     Leaving weak symbols out of an archive's table of contents means
34139     that, if a symbol will only have a definition in one translation
34140     unit and will have undefined references from other translation
34141     units, that symbol should not be weak.  Defining this macro to be
34142     nonzero will thus have the effect that certain symbols that would
34143     normally be weak (explicit template instantiations, and vtables for
34144     polymorphic classes with noninline key methods) will instead be
34145     nonweak.
34146
34147     The C++ ABI requires this macro to be zero.  Define this macro for
34148     targets where full C++ ABI compliance is impossible and where
34149     linker restrictions require weak symbols to be left out of a static
34150     archive's table of contents.
34151
34152 -- Macro: ASM_OUTPUT_EXTERNAL (STREAM, DECL, NAME)
34153     A C statement (sans semicolon) to output to the stdio stream STREAM
34154     any text necessary for declaring the name of an external symbol
34155     named NAME which is referenced in this compilation but not defined.
34156     The value of DECL is the tree node for the declaration.
34157
34158     This macro need not be defined if it does not need to output
34159     anything.  The GNU assembler and most Unix assemblers don't require
34160     anything.
34161
34162 -- Target Hook: void TARGET_ASM_EXTERNAL_LIBCALL (rtx SYMREF)
34163     This target hook is a function to output to ASM_OUT_FILE an
34164     assembler pseudo-op to declare a library function name external.
34165     The name of the library function is given by SYMREF, which is a
34166     'symbol_ref'.
34167
34168 -- Target Hook: void TARGET_ASM_MARK_DECL_PRESERVED (const char
34169          *SYMBOL)
34170     This target hook is a function to output to ASM_OUT_FILE an
34171     assembler directive to annotate SYMBOL as used.  The Darwin target
34172     uses the .no_dead_code_strip directive.
34173
34174 -- Macro: ASM_OUTPUT_LABELREF (STREAM, NAME)
34175     A C statement (sans semicolon) to output to the stdio stream STREAM
34176     a reference in assembler syntax to a label named NAME.  This should
34177     add '_' to the front of the name, if that is customary on your
34178     operating system, as it is in most Berkeley Unix systems.  This
34179     macro is used in 'assemble_name'.
34180
34181 -- Target Hook: tree TARGET_MANGLE_ASSEMBLER_NAME (const char *NAME)
34182     Given a symbol NAME, perform same mangling as 'varasm.c''s
34183     'assemble_name', but in memory rather than to a file stream,
34184     returning result as an 'IDENTIFIER_NODE'.  Required for correct LTO
34185     symtabs.  The default implementation calls the
34186     'TARGET_STRIP_NAME_ENCODING' hook and then prepends the
34187     'USER_LABEL_PREFIX', if any.
34188
34189 -- Macro: ASM_OUTPUT_SYMBOL_REF (STREAM, SYM)
34190     A C statement (sans semicolon) to output a reference to
34191     'SYMBOL_REF' SYM.  If not defined, 'assemble_name' will be used to
34192     output the name of the symbol.  This macro may be used to modify
34193     the way a symbol is referenced depending on information encoded by
34194     'TARGET_ENCODE_SECTION_INFO'.
34195
34196 -- Macro: ASM_OUTPUT_LABEL_REF (STREAM, BUF)
34197     A C statement (sans semicolon) to output a reference to BUF, the
34198     result of 'ASM_GENERATE_INTERNAL_LABEL'.  If not defined,
34199     'assemble_name' will be used to output the name of the symbol.
34200     This macro is not used by 'output_asm_label', or the '%l' specifier
34201     that calls it; the intention is that this macro should be set when
34202     it is necessary to output a label differently when its address is
34203     being taken.
34204
34205 -- Target Hook: void TARGET_ASM_INTERNAL_LABEL (FILE *STREAM, const
34206          char *PREFIX, unsigned long LABELNO)
34207     A function to output to the stdio stream STREAM a label whose name
34208     is made from the string PREFIX and the number LABELNO.
34209
34210     It is absolutely essential that these labels be distinct from the
34211     labels used for user-level functions and variables.  Otherwise,
34212     certain programs will have name conflicts with internal labels.
34213
34214     It is desirable to exclude internal labels from the symbol table of
34215     the object file.  Most assemblers have a naming convention for
34216     labels that should be excluded; on many systems, the letter 'L' at
34217     the beginning of a label has this effect.  You should find out what
34218     convention your system uses, and follow it.
34219
34220     The default version of this function utilizes
34221     'ASM_GENERATE_INTERNAL_LABEL'.
34222
34223 -- Macro: ASM_OUTPUT_DEBUG_LABEL (STREAM, PREFIX, NUM)
34224     A C statement to output to the stdio stream STREAM a debug info
34225     label whose name is made from the string PREFIX and the number NUM.
34226     This is useful for VLIW targets, where debug info labels may need
34227     to be treated differently than branch target labels.  On some
34228     systems, branch target labels must be at the beginning of
34229     instruction bundles, but debug info labels can occur in the middle
34230     of instruction bundles.
34231
34232     If this macro is not defined, then
34233     '(*targetm.asm_out.internal_label)' will be used.
34234
34235 -- Macro: ASM_GENERATE_INTERNAL_LABEL (STRING, PREFIX, NUM)
34236     A C statement to store into the string STRING a label whose name is
34237     made from the string PREFIX and the number NUM.
34238
34239     This string, when output subsequently by 'assemble_name', should
34240     produce the output that '(*targetm.asm_out.internal_label)' would
34241     produce with the same PREFIX and NUM.
34242
34243     If the string begins with '*', then 'assemble_name' will output the
34244     rest of the string unchanged.  It is often convenient for
34245     'ASM_GENERATE_INTERNAL_LABEL' to use '*' in this way.  If the
34246     string doesn't start with '*', then 'ASM_OUTPUT_LABELREF' gets to
34247     output the string, and may change it.  (Of course,
34248     'ASM_OUTPUT_LABELREF' is also part of your machine description, so
34249     you should know what it does on your machine.)
34250
34251 -- Macro: ASM_FORMAT_PRIVATE_NAME (OUTVAR, NAME, NUMBER)
34252     A C expression to assign to OUTVAR (which is a variable of type
34253     'char *') a newly allocated string made from the string NAME and
34254     the number NUMBER, with some suitable punctuation added.  Use
34255     'alloca' to get space for the string.
34256
34257     The string will be used as an argument to 'ASM_OUTPUT_LABELREF' to
34258     produce an assembler label for an internal static variable whose
34259     name is NAME.  Therefore, the string must be such as to result in
34260     valid assembler code.  The argument NUMBER is different each time
34261     this macro is executed; it prevents conflicts between
34262     similarly-named internal static variables in different scopes.
34263
34264     Ideally this string should not be a valid C identifier, to prevent
34265     any conflict with the user's own symbols.  Most assemblers allow
34266     periods or percent signs in assembler symbols; putting at least one
34267     of these between the name and the number will suffice.
34268
34269     If this macro is not defined, a default definition will be provided
34270     which is correct for most systems.
34271
34272 -- Macro: ASM_OUTPUT_DEF (STREAM, NAME, VALUE)
34273     A C statement to output to the stdio stream STREAM assembler code
34274     which defines (equates) the symbol NAME to have the value VALUE.
34275
34276     If 'SET_ASM_OP' is defined, a default definition is provided which
34277     is correct for most systems.
34278
34279 -- Macro: ASM_OUTPUT_DEF_FROM_DECLS (STREAM, DECL_OF_NAME,
34280          DECL_OF_VALUE)
34281     A C statement to output to the stdio stream STREAM assembler code
34282     which defines (equates) the symbol whose tree node is DECL_OF_NAME
34283     to have the value of the tree node DECL_OF_VALUE.  This macro will
34284     be used in preference to 'ASM_OUTPUT_DEF' if it is defined and if
34285     the tree nodes are available.
34286
34287     If 'SET_ASM_OP' is defined, a default definition is provided which
34288     is correct for most systems.
34289
34290 -- Macro: TARGET_DEFERRED_OUTPUT_DEFS (DECL_OF_NAME, DECL_OF_VALUE)
34291     A C statement that evaluates to true if the assembler code which
34292     defines (equates) the symbol whose tree node is DECL_OF_NAME to
34293     have the value of the tree node DECL_OF_VALUE should be emitted
34294     near the end of the current compilation unit.  The default is to
34295     not defer output of defines.  This macro affects defines output by
34296     'ASM_OUTPUT_DEF' and 'ASM_OUTPUT_DEF_FROM_DECLS'.
34297
34298 -- Macro: ASM_OUTPUT_WEAK_ALIAS (STREAM, NAME, VALUE)
34299     A C statement to output to the stdio stream STREAM assembler code
34300     which defines (equates) the weak symbol NAME to have the value
34301     VALUE.  If VALUE is 'NULL', it defines NAME as an undefined weak
34302     symbol.
34303
34304     Define this macro if the target only supports weak aliases; define
34305     'ASM_OUTPUT_DEF' instead if possible.
34306
34307 -- Macro: OBJC_GEN_METHOD_LABEL (BUF, IS_INST, CLASS_NAME, CAT_NAME,
34308          SEL_NAME)
34309     Define this macro to override the default assembler names used for
34310     Objective-C methods.
34311
34312     The default name is a unique method number followed by the name of
34313     the class (e.g. '_1_Foo').  For methods in categories, the name of
34314     the category is also included in the assembler name (e.g.
34315     '_1_Foo_Bar').
34316
34317     These names are safe on most systems, but make debugging difficult
34318     since the method's selector is not present in the name.  Therefore,
34319     particular systems define other ways of computing names.
34320
34321     BUF is an expression of type 'char *' which gives you a buffer in
34322     which to store the name; its length is as long as CLASS_NAME,
34323     CAT_NAME and SEL_NAME put together, plus 50 characters extra.
34324
34325     The argument IS_INST specifies whether the method is an instance
34326     method or a class method; CLASS_NAME is the name of the class;
34327     CAT_NAME is the name of the category (or 'NULL' if the method is
34328     not in a category); and SEL_NAME is the name of the selector.
34329
34330     On systems where the assembler can handle quoted names, you can use
34331     this macro to provide more human-readable names.
34332
34333
34334File: gccint.info,  Node: Initialization,  Next: Macros for Initialization,  Prev: Label Output,  Up: Assembler Format
34335
3433617.21.5 How Initialization Functions Are Handled
34337------------------------------------------------
34338
34339The compiled code for certain languages includes "constructors" (also
34340called "initialization routines")--functions to initialize data in the
34341program when the program is started.  These functions need to be called
34342before the program is "started"--that is to say, before 'main' is
34343called.
34344
34345 Compiling some languages generates "destructors" (also called
34346"termination routines") that should be called when the program
34347terminates.
34348
34349 To make the initialization and termination functions work, the compiler
34350must output something in the assembler code to cause those functions to
34351be called at the appropriate time.  When you port the compiler to a new
34352system, you need to specify how to do this.
34353
34354 There are two major ways that GCC currently supports the execution of
34355initialization and termination functions.  Each way has two variants.
34356Much of the structure is common to all four variations.
34357
34358 The linker must build two lists of these functions--a list of
34359initialization functions, called '__CTOR_LIST__', and a list of
34360termination functions, called '__DTOR_LIST__'.
34361
34362 Each list always begins with an ignored function pointer (which may
34363hold 0, -1, or a count of the function pointers after it, depending on
34364the environment).  This is followed by a series of zero or more function
34365pointers to constructors (or destructors), followed by a function
34366pointer containing zero.
34367
34368 Depending on the operating system and its executable file format,
34369either 'crtstuff.c' or 'libgcc2.c' traverses these lists at startup time
34370and exit time.  Constructors are called in reverse order of the list;
34371destructors in forward order.
34372
34373 The best way to handle static constructors works only for object file
34374formats which provide arbitrarily-named sections.  A section is set
34375aside for a list of constructors, and another for a list of destructors.
34376Traditionally these are called '.ctors' and '.dtors'.  Each object file
34377that defines an initialization function also puts a word in the
34378constructor section to point to that function.  The linker accumulates
34379all these words into one contiguous '.ctors' section.  Termination
34380functions are handled similarly.
34381
34382 This method will be chosen as the default by 'target-def.h' if
34383'TARGET_ASM_NAMED_SECTION' is defined.  A target that does not support
34384arbitrary sections, but does support special designated constructor and
34385destructor sections may define 'CTORS_SECTION_ASM_OP' and
34386'DTORS_SECTION_ASM_OP' to achieve the same effect.
34387
34388 When arbitrary sections are available, there are two variants,
34389depending upon how the code in 'crtstuff.c' is called.  On systems that
34390support a ".init" section which is executed at program startup, parts of
34391'crtstuff.c' are compiled into that section.  The program is linked by
34392the 'gcc' driver like this:
34393
34394     ld -o OUTPUT_FILE crti.o crtbegin.o ... -lgcc crtend.o crtn.o
34395
34396 The prologue of a function ('__init') appears in the '.init' section of
34397'crti.o'; the epilogue appears in 'crtn.o'.  Likewise for the function
34398'__fini' in the ".fini" section.  Normally these files are provided by
34399the operating system or by the GNU C library, but are provided by GCC
34400for a few targets.
34401
34402 The objects 'crtbegin.o' and 'crtend.o' are (for most targets) compiled
34403from 'crtstuff.c'.  They contain, among other things, code fragments
34404within the '.init' and '.fini' sections that branch to routines in the
34405'.text' section.  The linker will pull all parts of a section together,
34406which results in a complete '__init' function that invokes the routines
34407we need at startup.
34408
34409 To use this variant, you must define the 'INIT_SECTION_ASM_OP' macro
34410properly.
34411
34412 If no init section is available, when GCC compiles any function called
34413'main' (or more accurately, any function designated as a program entry
34414point by the language front end calling 'expand_main_function'), it
34415inserts a procedure call to '__main' as the first executable code after
34416the function prologue.  The '__main' function is defined in 'libgcc2.c'
34417and runs the global constructors.
34418
34419 In file formats that don't support arbitrary sections, there are again
34420two variants.  In the simplest variant, the GNU linker (GNU 'ld') and an
34421'a.out' format must be used.  In this case, 'TARGET_ASM_CONSTRUCTOR' is
34422defined to produce a '.stabs' entry of type 'N_SETT', referencing the
34423name '__CTOR_LIST__', and with the address of the void function
34424containing the initialization code as its value.  The GNU linker
34425recognizes this as a request to add the value to a "set"; the values are
34426accumulated, and are eventually placed in the executable as a vector in
34427the format described above, with a leading (ignored) count and a
34428trailing zero element.  'TARGET_ASM_DESTRUCTOR' is handled similarly.
34429Since no init section is available, the absence of 'INIT_SECTION_ASM_OP'
34430causes the compilation of 'main' to call '__main' as above, starting the
34431initialization process.
34432
34433 The last variant uses neither arbitrary sections nor the GNU linker.
34434This is preferable when you want to do dynamic linking and when using
34435file formats which the GNU linker does not support, such as 'ECOFF'.  In
34436this case, 'TARGET_HAVE_CTORS_DTORS' is false, initialization and
34437termination functions are recognized simply by their names.  This
34438requires an extra program in the linkage step, called 'collect2'.  This
34439program pretends to be the linker, for use with GCC; it does its job by
34440running the ordinary linker, but also arranges to include the vectors of
34441initialization and termination functions.  These functions are called
34442via '__main' as described above.  In order to use this method,
34443'use_collect2' must be defined in the target in 'config.gcc'.
34444
34445 The following section describes the specific macros that control and
34446customize the handling of initialization and termination functions.
34447
34448
34449File: gccint.info,  Node: Macros for Initialization,  Next: Instruction Output,  Prev: Initialization,  Up: Assembler Format
34450
3445117.21.6 Macros Controlling Initialization Routines
34452--------------------------------------------------
34453
34454Here are the macros that control how the compiler handles initialization
34455and termination functions:
34456
34457 -- Macro: INIT_SECTION_ASM_OP
34458     If defined, a C string constant, including spacing, for the
34459     assembler operation to identify the following data as
34460     initialization code.  If not defined, GCC will assume such a
34461     section does not exist.  When you are using special sections for
34462     initialization and termination functions, this macro also controls
34463     how 'crtstuff.c' and 'libgcc2.c' arrange to run the initialization
34464     functions.
34465
34466 -- Macro: HAS_INIT_SECTION
34467     If defined, 'main' will not call '__main' as described above.  This
34468     macro should be defined for systems that control start-up code on a
34469     symbol-by-symbol basis, such as OSF/1, and should not be defined
34470     explicitly for systems that support 'INIT_SECTION_ASM_OP'.
34471
34472 -- Macro: LD_INIT_SWITCH
34473     If defined, a C string constant for a switch that tells the linker
34474     that the following symbol is an initialization routine.
34475
34476 -- Macro: LD_FINI_SWITCH
34477     If defined, a C string constant for a switch that tells the linker
34478     that the following symbol is a finalization routine.
34479
34480 -- Macro: COLLECT_SHARED_INIT_FUNC (STREAM, FUNC)
34481     If defined, a C statement that will write a function that can be
34482     automatically called when a shared library is loaded.  The function
34483     should call FUNC, which takes no arguments.  If not defined, and
34484     the object format requires an explicit initialization function,
34485     then a function called '_GLOBAL__DI' will be generated.
34486
34487     This function and the following one are used by collect2 when
34488     linking a shared library that needs constructors or destructors, or
34489     has DWARF2 exception tables embedded in the code.
34490
34491 -- Macro: COLLECT_SHARED_FINI_FUNC (STREAM, FUNC)
34492     If defined, a C statement that will write a function that can be
34493     automatically called when a shared library is unloaded.  The
34494     function should call FUNC, which takes no arguments.  If not
34495     defined, and the object format requires an explicit finalization
34496     function, then a function called '_GLOBAL__DD' will be generated.
34497
34498 -- Macro: INVOKE__main
34499     If defined, 'main' will call '__main' despite the presence of
34500     'INIT_SECTION_ASM_OP'.  This macro should be defined for systems
34501     where the init section is not actually run automatically, but is
34502     still useful for collecting the lists of constructors and
34503     destructors.
34504
34505 -- Macro: SUPPORTS_INIT_PRIORITY
34506     If nonzero, the C++ 'init_priority' attribute is supported and the
34507     compiler should emit instructions to control the order of
34508     initialization of objects.  If zero, the compiler will issue an
34509     error message upon encountering an 'init_priority' attribute.
34510
34511 -- Target Hook: bool TARGET_HAVE_CTORS_DTORS
34512     This value is true if the target supports some "native" method of
34513     collecting constructors and destructors to be run at startup and
34514     exit.  It is false if we must use 'collect2'.
34515
34516 -- Target Hook: void TARGET_ASM_CONSTRUCTOR (rtx SYMBOL, int PRIORITY)
34517     If defined, a function that outputs assembler code to arrange to
34518     call the function referenced by SYMBOL at initialization time.
34519
34520     Assume that SYMBOL is a 'SYMBOL_REF' for a function taking no
34521     arguments and with no return value.  If the target supports
34522     initialization priorities, PRIORITY is a value between 0 and
34523     'MAX_INIT_PRIORITY'; otherwise it must be 'DEFAULT_INIT_PRIORITY'.
34524
34525     If this macro is not defined by the target, a suitable default will
34526     be chosen if (1) the target supports arbitrary section names, (2)
34527     the target defines 'CTORS_SECTION_ASM_OP', or (3) 'USE_COLLECT2' is
34528     not defined.
34529
34530 -- Target Hook: void TARGET_ASM_DESTRUCTOR (rtx SYMBOL, int PRIORITY)
34531     This is like 'TARGET_ASM_CONSTRUCTOR' but used for termination
34532     functions rather than initialization functions.
34533
34534 If 'TARGET_HAVE_CTORS_DTORS' is true, the initialization routine
34535generated for the generated object file will have static linkage.
34536
34537 If your system uses 'collect2' as the means of processing constructors,
34538then that program normally uses 'nm' to scan an object file for
34539constructor functions to be called.
34540
34541 On certain kinds of systems, you can define this macro to make
34542'collect2' work faster (and, in some cases, make it work at all):
34543
34544 -- Macro: OBJECT_FORMAT_COFF
34545     Define this macro if the system uses COFF (Common Object File
34546     Format) object files, so that 'collect2' can assume this format and
34547     scan object files directly for dynamic constructor/destructor
34548     functions.
34549
34550     This macro is effective only in a native compiler; 'collect2' as
34551     part of a cross compiler always uses 'nm' for the target machine.
34552
34553 -- Macro: REAL_NM_FILE_NAME
34554     Define this macro as a C string constant containing the file name
34555     to use to execute 'nm'.  The default is to search the path normally
34556     for 'nm'.
34557
34558 -- Macro: NM_FLAGS
34559     'collect2' calls 'nm' to scan object files for static constructors
34560     and destructors and LTO info.  By default, '-n' is passed.  Define
34561     'NM_FLAGS' to a C string constant if other options are needed to
34562     get the same output format as GNU 'nm -n' produces.
34563
34564 If your system supports shared libraries and has a program to list the
34565dynamic dependencies of a given library or executable, you can define
34566these macros to enable support for running initialization and
34567termination functions in shared libraries:
34568
34569 -- Macro: LDD_SUFFIX
34570     Define this macro to a C string constant containing the name of the
34571     program which lists dynamic dependencies, like 'ldd' under SunOS 4.
34572
34573 -- Macro: PARSE_LDD_OUTPUT (PTR)
34574     Define this macro to be C code that extracts filenames from the
34575     output of the program denoted by 'LDD_SUFFIX'.  PTR is a variable
34576     of type 'char *' that points to the beginning of a line of output
34577     from 'LDD_SUFFIX'.  If the line lists a dynamic dependency, the
34578     code must advance PTR to the beginning of the filename on that
34579     line.  Otherwise, it must set PTR to 'NULL'.
34580
34581 -- Macro: SHLIB_SUFFIX
34582     Define this macro to a C string constant containing the default
34583     shared library extension of the target (e.g., '".so"').  'collect2'
34584     strips version information after this suffix when generating global
34585     constructor and destructor names.  This define is only needed on
34586     targets that use 'collect2' to process constructors and
34587     destructors.
34588
34589
34590File: gccint.info,  Node: Instruction Output,  Next: Dispatch Tables,  Prev: Macros for Initialization,  Up: Assembler Format
34591
3459217.21.7 Output of Assembler Instructions
34593----------------------------------------
34594
34595This describes assembler instruction output.
34596
34597 -- Macro: REGISTER_NAMES
34598     A C initializer containing the assembler's names for the machine
34599     registers, each one as a C string constant.  This is what
34600     translates register numbers in the compiler into assembler
34601     language.
34602
34603 -- Macro: ADDITIONAL_REGISTER_NAMES
34604     If defined, a C initializer for an array of structures containing a
34605     name and a register number.  This macro defines additional names
34606     for hard registers, thus allowing the 'asm' option in declarations
34607     to refer to registers using alternate names.
34608
34609 -- Macro: OVERLAPPING_REGISTER_NAMES
34610     If defined, a C initializer for an array of structures containing a
34611     name, a register number and a count of the number of consecutive
34612     machine registers the name overlaps.  This macro defines additional
34613     names for hard registers, thus allowing the 'asm' option in
34614     declarations to refer to registers using alternate names.  Unlike
34615     'ADDITIONAL_REGISTER_NAMES', this macro should be used when the
34616     register name implies multiple underlying registers.
34617
34618     This macro should be used when it is important that a clobber in an
34619     'asm' statement clobbers all the underlying values implied by the
34620     register name.  For example, on ARM, clobbering the
34621     double-precision VFP register "d0" implies clobbering both
34622     single-precision registers "s0" and "s1".
34623
34624 -- Macro: ASM_OUTPUT_OPCODE (STREAM, PTR)
34625     Define this macro if you are using an unusual assembler that
34626     requires different names for the machine instructions.
34627
34628     The definition is a C statement or statements which output an
34629     assembler instruction opcode to the stdio stream STREAM.  The
34630     macro-operand PTR is a variable of type 'char *' which points to
34631     the opcode name in its "internal" form--the form that is written in
34632     the machine description.  The definition should output the opcode
34633     name to STREAM, performing any translation you desire, and
34634     increment the variable PTR to point at the end of the opcode so
34635     that it will not be output twice.
34636
34637     In fact, your macro definition may process less than the entire
34638     opcode name, or more than the opcode name; but if you want to
34639     process text that includes '%'-sequences to substitute operands,
34640     you must take care of the substitution yourself.  Just be sure to
34641     increment PTR over whatever text should not be output normally.
34642
34643     If you need to look at the operand values, they can be found as the
34644     elements of 'recog_data.operand'.
34645
34646     If the macro definition does nothing, the instruction is output in
34647     the usual way.
34648
34649 -- Macro: FINAL_PRESCAN_INSN (INSN, OPVEC, NOPERANDS)
34650     If defined, a C statement to be executed just prior to the output
34651     of assembler code for INSN, to modify the extracted operands so
34652     they will be output differently.
34653
34654     Here the argument OPVEC is the vector containing the operands
34655     extracted from INSN, and NOPERANDS is the number of elements of the
34656     vector which contain meaningful data for this insn.  The contents
34657     of this vector are what will be used to convert the insn template
34658     into assembler code, so you can change the assembler output by
34659     changing the contents of the vector.
34660
34661     This macro is useful when various assembler syntaxes share a single
34662     file of instruction patterns; by defining this macro differently,
34663     you can cause a large class of instructions to be output
34664     differently (such as with rearranged operands).  Naturally,
34665     variations in assembler syntax affecting individual insn patterns
34666     ought to be handled by writing conditional output routines in those
34667     patterns.
34668
34669     If this macro is not defined, it is equivalent to a null statement.
34670
34671 -- Target Hook: void TARGET_ASM_FINAL_POSTSCAN_INSN (FILE *FILE, rtx
34672          INSN, rtx *OPVEC, int NOPERANDS)
34673     If defined, this target hook is a function which is executed just
34674     after the output of assembler code for INSN, to change the mode of
34675     the assembler if necessary.
34676
34677     Here the argument OPVEC is the vector containing the operands
34678     extracted from INSN, and NOPERANDS is the number of elements of the
34679     vector which contain meaningful data for this insn.  The contents
34680     of this vector are what was used to convert the insn template into
34681     assembler code, so you can change the assembler mode by checking
34682     the contents of the vector.
34683
34684 -- Macro: PRINT_OPERAND (STREAM, X, CODE)
34685     A C compound statement to output to stdio stream STREAM the
34686     assembler syntax for an instruction operand X.  X is an RTL
34687     expression.
34688
34689     CODE is a value that can be used to specify one of several ways of
34690     printing the operand.  It is used when identical operands must be
34691     printed differently depending on the context.  CODE comes from the
34692     '%' specification that was used to request printing of the operand.
34693     If the specification was just '%DIGIT' then CODE is 0; if the
34694     specification was '%LTR DIGIT' then CODE is the ASCII code for LTR.
34695
34696     If X is a register, this macro should print the register's name.
34697     The names can be found in an array 'reg_names' whose type is 'char
34698     *[]'.  'reg_names' is initialized from 'REGISTER_NAMES'.
34699
34700     When the machine description has a specification '%PUNCT' (a '%'
34701     followed by a punctuation character), this macro is called with a
34702     null pointer for X and the punctuation character for CODE.
34703
34704 -- Macro: PRINT_OPERAND_PUNCT_VALID_P (CODE)
34705     A C expression which evaluates to true if CODE is a valid
34706     punctuation character for use in the 'PRINT_OPERAND' macro.  If
34707     'PRINT_OPERAND_PUNCT_VALID_P' is not defined, it means that no
34708     punctuation characters (except for the standard one, '%') are used
34709     in this way.
34710
34711 -- Macro: PRINT_OPERAND_ADDRESS (STREAM, X)
34712     A C compound statement to output to stdio stream STREAM the
34713     assembler syntax for an instruction operand that is a memory
34714     reference whose address is X.  X is an RTL expression.
34715
34716     On some machines, the syntax for a symbolic address depends on the
34717     section that the address refers to.  On these machines, define the
34718     hook 'TARGET_ENCODE_SECTION_INFO' to store the information into the
34719     'symbol_ref', and then check for it here.  *Note Assembler
34720     Format::.
34721
34722 -- Macro: DBR_OUTPUT_SEQEND (FILE)
34723     A C statement, to be executed after all slot-filler instructions
34724     have been output.  If necessary, call 'dbr_sequence_length' to
34725     determine the number of slots filled in a sequence (zero if not
34726     currently outputting a sequence), to decide how many no-ops to
34727     output, or whatever.
34728
34729     Don't define this macro if it has nothing to do, but it is helpful
34730     in reading assembly output if the extent of the delay sequence is
34731     made explicit (e.g. with white space).
34732
34733 Note that output routines for instructions with delay slots must be
34734prepared to deal with not being output as part of a sequence (i.e. when
34735the scheduling pass is not run, or when no slot fillers could be found.)
34736The variable 'final_sequence' is null when not processing a sequence,
34737otherwise it contains the 'sequence' rtx being output.
34738
34739 -- Macro: REGISTER_PREFIX
34740 -- Macro: LOCAL_LABEL_PREFIX
34741 -- Macro: USER_LABEL_PREFIX
34742 -- Macro: IMMEDIATE_PREFIX
34743     If defined, C string expressions to be used for the '%R', '%L',
34744     '%U', and '%I' options of 'asm_fprintf' (see 'final.c').  These are
34745     useful when a single 'md' file must support multiple assembler
34746     formats.  In that case, the various 'tm.h' files can define these
34747     macros differently.
34748
34749 -- Macro: ASM_FPRINTF_EXTENSIONS (FILE, ARGPTR, FORMAT)
34750     If defined this macro should expand to a series of 'case'
34751     statements which will be parsed inside the 'switch' statement of
34752     the 'asm_fprintf' function.  This allows targets to define extra
34753     printf formats which may useful when generating their assembler
34754     statements.  Note that uppercase letters are reserved for future
34755     generic extensions to asm_fprintf, and so are not available to
34756     target specific code.  The output file is given by the parameter
34757     FILE.  The varargs input pointer is ARGPTR and the rest of the
34758     format string, starting the character after the one that is being
34759     switched upon, is pointed to by FORMAT.
34760
34761 -- Macro: ASSEMBLER_DIALECT
34762     If your target supports multiple dialects of assembler language
34763     (such as different opcodes), define this macro as a C expression
34764     that gives the numeric index of the assembler language dialect to
34765     use, with zero as the first variant.
34766
34767     If this macro is defined, you may use constructs of the form
34768          '{option0|option1|option2...}'
34769     in the output templates of patterns (*note Output Template::) or in
34770     the first argument of 'asm_fprintf'.  This construct outputs
34771     'option0', 'option1', 'option2', etc., if the value of
34772     'ASSEMBLER_DIALECT' is zero, one, two, etc.  Any special characters
34773     within these strings retain their usual meaning.  If there are
34774     fewer alternatives within the braces than the value of
34775     'ASSEMBLER_DIALECT', the construct outputs nothing.
34776
34777     If you do not define this macro, the characters '{', '|' and '}' do
34778     not have any special meaning when used in templates or operands to
34779     'asm_fprintf'.
34780
34781     Define the macros 'REGISTER_PREFIX', 'LOCAL_LABEL_PREFIX',
34782     'USER_LABEL_PREFIX' and 'IMMEDIATE_PREFIX' if you can express the
34783     variations in assembler language syntax with that mechanism.
34784     Define 'ASSEMBLER_DIALECT' and use the '{option0|option1}' syntax
34785     if the syntax variant are larger and involve such things as
34786     different opcodes or operand order.
34787
34788 -- Macro: ASM_OUTPUT_REG_PUSH (STREAM, REGNO)
34789     A C expression to output to STREAM some assembler code which will
34790     push hard register number REGNO onto the stack.  The code need not
34791     be optimal, since this macro is used only when profiling.
34792
34793 -- Macro: ASM_OUTPUT_REG_POP (STREAM, REGNO)
34794     A C expression to output to STREAM some assembler code which will
34795     pop hard register number REGNO off of the stack.  The code need not
34796     be optimal, since this macro is used only when profiling.
34797
34798
34799File: gccint.info,  Node: Dispatch Tables,  Next: Exception Region Output,  Prev: Instruction Output,  Up: Assembler Format
34800
3480117.21.8 Output of Dispatch Tables
34802---------------------------------
34803
34804This concerns dispatch tables.
34805
34806 -- Macro: ASM_OUTPUT_ADDR_DIFF_ELT (STREAM, BODY, VALUE, REL)
34807     A C statement to output to the stdio stream STREAM an assembler
34808     pseudo-instruction to generate a difference between two labels.
34809     VALUE and REL are the numbers of two internal labels.  The
34810     definitions of these labels are output using
34811     '(*targetm.asm_out.internal_label)', and they must be printed in
34812     the same way here.  For example,
34813
34814          fprintf (STREAM, "\t.word L%d-L%d\n",
34815                   VALUE, REL)
34816
34817     You must provide this macro on machines where the addresses in a
34818     dispatch table are relative to the table's own address.  If
34819     defined, GCC will also use this macro on all machines when
34820     producing PIC.  BODY is the body of the 'ADDR_DIFF_VEC'; it is
34821     provided so that the mode and flags can be read.
34822
34823 -- Macro: ASM_OUTPUT_ADDR_VEC_ELT (STREAM, VALUE)
34824     This macro should be provided on machines where the addresses in a
34825     dispatch table are absolute.
34826
34827     The definition should be a C statement to output to the stdio
34828     stream STREAM an assembler pseudo-instruction to generate a
34829     reference to a label.  VALUE is the number of an internal label
34830     whose definition is output using
34831     '(*targetm.asm_out.internal_label)'.  For example,
34832
34833          fprintf (STREAM, "\t.word L%d\n", VALUE)
34834
34835 -- Macro: ASM_OUTPUT_CASE_LABEL (STREAM, PREFIX, NUM, TABLE)
34836     Define this if the label before a jump-table needs to be output
34837     specially.  The first three arguments are the same as for
34838     '(*targetm.asm_out.internal_label)'; the fourth argument is the
34839     jump-table which follows (a 'jump_insn' containing an 'addr_vec' or
34840     'addr_diff_vec').
34841
34842     This feature is used on system V to output a 'swbeg' statement for
34843     the table.
34844
34845     If this macro is not defined, these labels are output with
34846     '(*targetm.asm_out.internal_label)'.
34847
34848 -- Macro: ASM_OUTPUT_CASE_END (STREAM, NUM, TABLE)
34849     Define this if something special must be output at the end of a
34850     jump-table.  The definition should be a C statement to be executed
34851     after the assembler code for the table is written.  It should write
34852     the appropriate code to stdio stream STREAM.  The argument TABLE is
34853     the jump-table insn, and NUM is the label-number of the preceding
34854     label.
34855
34856     If this macro is not defined, nothing special is output at the end
34857     of the jump-table.
34858
34859 -- Target Hook: void TARGET_ASM_EMIT_UNWIND_LABEL (FILE *STREAM, tree
34860          DECL, int FOR_EH, int EMPTY)
34861     This target hook emits a label at the beginning of each FDE.  It
34862     should be defined on targets where FDEs need special labels, and it
34863     should write the appropriate label, for the FDE associated with the
34864     function declaration DECL, to the stdio stream STREAM.  The third
34865     argument, FOR_EH, is a boolean: true if this is for an exception
34866     table.  The fourth argument, EMPTY, is a boolean: true if this is a
34867     placeholder label for an omitted FDE.
34868
34869     The default is that FDEs are not given nonlocal labels.
34870
34871 -- Target Hook: void TARGET_ASM_EMIT_EXCEPT_TABLE_LABEL (FILE *STREAM)
34872     This target hook emits a label at the beginning of the exception
34873     table.  It should be defined on targets where it is desirable for
34874     the table to be broken up according to function.
34875
34876     The default is that no label is emitted.
34877
34878 -- Target Hook: void TARGET_ASM_EMIT_EXCEPT_PERSONALITY (rtx
34879          PERSONALITY)
34880     If the target implements 'TARGET_ASM_UNWIND_EMIT', this hook may be
34881     used to emit a directive to install a personality hook into the
34882     unwind info.  This hook should not be used if dwarf2 unwind info is
34883     used.
34884
34885 -- Target Hook: void TARGET_ASM_UNWIND_EMIT (FILE *STREAM, rtx INSN)
34886     This target hook emits assembly directives required to unwind the
34887     given instruction.  This is only used when
34888     'TARGET_EXCEPT_UNWIND_INFO' returns 'UI_TARGET'.
34889
34890 -- Target Hook: bool TARGET_ASM_UNWIND_EMIT_BEFORE_INSN
34891     True if the 'TARGET_ASM_UNWIND_EMIT' hook should be called before
34892     the assembly for INSN has been emitted, false if the hook should be
34893     called afterward.
34894
34895
34896File: gccint.info,  Node: Exception Region Output,  Next: Alignment Output,  Prev: Dispatch Tables,  Up: Assembler Format
34897
3489817.21.9 Assembler Commands for Exception Regions
34899------------------------------------------------
34900
34901This describes commands marking the start and the end of an exception
34902region.
34903
34904 -- Macro: EH_FRAME_SECTION_NAME
34905     If defined, a C string constant for the name of the section
34906     containing exception handling frame unwind information.  If not
34907     defined, GCC will provide a default definition if the target
34908     supports named sections.  'crtstuff.c' uses this macro to switch to
34909     the appropriate section.
34910
34911     You should define this symbol if your target supports DWARF 2 frame
34912     unwind information and the default definition does not work.
34913
34914 -- Macro: EH_FRAME_IN_DATA_SECTION
34915     If defined, DWARF 2 frame unwind information will be placed in the
34916     data section even though the target supports named sections.  This
34917     might be necessary, for instance, if the system linker does garbage
34918     collection and sections cannot be marked as not to be collected.
34919
34920     Do not define this macro unless 'TARGET_ASM_NAMED_SECTION' is also
34921     defined.
34922
34923 -- Macro: EH_TABLES_CAN_BE_READ_ONLY
34924     Define this macro to 1 if your target is such that no frame unwind
34925     information encoding used with non-PIC code will ever require a
34926     runtime relocation, but the linker may not support merging
34927     read-only and read-write sections into a single read-write section.
34928
34929 -- Macro: MASK_RETURN_ADDR
34930     An rtx used to mask the return address found via 'RETURN_ADDR_RTX',
34931     so that it does not contain any extraneous set bits in it.
34932
34933 -- Macro: DWARF2_UNWIND_INFO
34934     Define this macro to 0 if your target supports DWARF 2 frame unwind
34935     information, but it does not yet work with exception handling.
34936     Otherwise, if your target supports this information (if it defines
34937     'INCOMING_RETURN_ADDR_RTX' and 'OBJECT_FORMAT_ELF'), GCC will
34938     provide a default definition of 1.
34939
34940 -- Common Target Hook: enum unwind_info_type TARGET_EXCEPT_UNWIND_INFO
34941          (struct gcc_options *OPTS)
34942     This hook defines the mechanism that will be used for exception
34943     handling by the target.  If the target has ABI specified unwind
34944     tables, the hook should return 'UI_TARGET'.  If the target is to
34945     use the 'setjmp'/'longjmp'-based exception handling scheme, the
34946     hook should return 'UI_SJLJ'.  If the target supports DWARF 2 frame
34947     unwind information, the hook should return 'UI_DWARF2'.
34948
34949     A target may, if exceptions are disabled, choose to return
34950     'UI_NONE'.  This may end up simplifying other parts of
34951     target-specific code.  The default implementation of this hook
34952     never returns 'UI_NONE'.
34953
34954     Note that the value returned by this hook should be constant.  It
34955     should not depend on anything except the command-line switches
34956     described by OPTS.  In particular, the setting 'UI_SJLJ' must be
34957     fixed at compiler start-up as C pre-processor macros and builtin
34958     functions related to exception handling are set up depending on
34959     this setting.
34960
34961     The default implementation of the hook first honors the
34962     '--enable-sjlj-exceptions' configure option, then
34963     'DWARF2_UNWIND_INFO', and finally defaults to 'UI_SJLJ'.  If
34964     'DWARF2_UNWIND_INFO' depends on command-line options, the target
34965     must define this hook so that OPTS is used correctly.
34966
34967 -- Common Target Hook: bool TARGET_UNWIND_TABLES_DEFAULT
34968     This variable should be set to 'true' if the target ABI requires
34969     unwinding tables even when exceptions are not used.  It must not be
34970     modified by command-line option processing.
34971
34972 -- Macro: DONT_USE_BUILTIN_SETJMP
34973     Define this macro to 1 if the 'setjmp'/'longjmp'-based scheme
34974     should use the 'setjmp'/'longjmp' functions from the C library
34975     instead of the '__builtin_setjmp'/'__builtin_longjmp' machinery.
34976
34977 -- Macro: JMP_BUF_SIZE
34978     This macro has no effect unless 'DONT_USE_BUILTIN_SETJMP' is also
34979     defined.  Define this macro if the default size of 'jmp_buf' buffer
34980     for the 'setjmp'/'longjmp'-based exception handling mechanism is
34981     not large enough, or if it is much too large.  The default size is
34982     'FIRST_PSEUDO_REGISTER * sizeof(void *)'.
34983
34984 -- Macro: DWARF_CIE_DATA_ALIGNMENT
34985     This macro need only be defined if the target might save registers
34986     in the function prologue at an offset to the stack pointer that is
34987     not aligned to 'UNITS_PER_WORD'.  The definition should be the
34988     negative minimum alignment if 'STACK_GROWS_DOWNWARD' is defined,
34989     and the positive minimum alignment otherwise.  *Note SDB and
34990     DWARF::.  Only applicable if the target supports DWARF 2 frame
34991     unwind information.
34992
34993 -- Target Hook: bool TARGET_TERMINATE_DW2_EH_FRAME_INFO
34994     Contains the value true if the target should add a zero word onto
34995     the end of a Dwarf-2 frame info section when used for exception
34996     handling.  Default value is false if 'EH_FRAME_SECTION_NAME' is
34997     defined, and true otherwise.
34998
34999 -- Target Hook: rtx TARGET_DWARF_REGISTER_SPAN (rtx REG)
35000     Given a register, this hook should return a parallel of registers
35001     to represent where to find the register pieces.  Define this hook
35002     if the register and its mode are represented in Dwarf in
35003     non-contiguous locations, or if the register should be represented
35004     in more than one register in Dwarf.  Otherwise, this hook should
35005     return 'NULL_RTX'.  If not defined, the default is to return
35006     'NULL_RTX'.
35007
35008 -- Target Hook: void TARGET_INIT_DWARF_REG_SIZES_EXTRA (tree ADDRESS)
35009     If some registers are represented in Dwarf-2 unwind information in
35010     multiple pieces, define this hook to fill in information about the
35011     sizes of those pieces in the table used by the unwinder at runtime.
35012     It will be called by 'expand_builtin_init_dwarf_reg_sizes' after
35013     filling in a single size corresponding to each hard register;
35014     ADDRESS is the address of the table.
35015
35016 -- Target Hook: bool TARGET_ASM_TTYPE (rtx SYM)
35017     This hook is used to output a reference from a frame unwinding
35018     table to the type_info object identified by SYM.  It should return
35019     'true' if the reference was output.  Returning 'false' will cause
35020     the reference to be output using the normal Dwarf2 routines.
35021
35022 -- Target Hook: bool TARGET_ARM_EABI_UNWINDER
35023     This flag should be set to 'true' on targets that use an ARM EABI
35024     based unwinding library, and 'false' on other targets.  This
35025     effects the format of unwinding tables, and how the unwinder in
35026     entered after running a cleanup.  The default is 'false'.
35027
35028
35029File: gccint.info,  Node: Alignment Output,  Prev: Exception Region Output,  Up: Assembler Format
35030
3503117.21.10 Assembler Commands for Alignment
35032-----------------------------------------
35033
35034This describes commands for alignment.
35035
35036 -- Macro: JUMP_ALIGN (LABEL)
35037     The alignment (log base 2) to put in front of LABEL, which is a
35038     common destination of jumps and has no fallthru incoming edge.
35039
35040     This macro need not be defined if you don't want any special
35041     alignment to be done at such a time.  Most machine descriptions do
35042     not currently define the macro.
35043
35044     Unless it's necessary to inspect the LABEL parameter, it is better
35045     to set the variable ALIGN_JUMPS in the target's
35046     'TARGET_OPTION_OVERRIDE'.  Otherwise, you should try to honor the
35047     user's selection in ALIGN_JUMPS in a 'JUMP_ALIGN' implementation.
35048
35049 -- Target Hook: int TARGET_ASM_JUMP_ALIGN_MAX_SKIP (rtx LABEL)
35050     The maximum number of bytes to skip before LABEL when applying
35051     'JUMP_ALIGN'.  This works only if 'ASM_OUTPUT_MAX_SKIP_ALIGN' is
35052     defined.
35053
35054 -- Macro: LABEL_ALIGN_AFTER_BARRIER (LABEL)
35055     The alignment (log base 2) to put in front of LABEL, which follows
35056     a 'BARRIER'.
35057
35058     This macro need not be defined if you don't want any special
35059     alignment to be done at such a time.  Most machine descriptions do
35060     not currently define the macro.
35061
35062 -- Target Hook: int TARGET_ASM_LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP (rtx
35063          LABEL)
35064     The maximum number of bytes to skip before LABEL when applying
35065     'LABEL_ALIGN_AFTER_BARRIER'.  This works only if
35066     'ASM_OUTPUT_MAX_SKIP_ALIGN' is defined.
35067
35068 -- Macro: LOOP_ALIGN (LABEL)
35069     The alignment (log base 2) to put in front of LABEL, which follows
35070     a 'NOTE_INSN_LOOP_BEG' note.
35071
35072     This macro need not be defined if you don't want any special
35073     alignment to be done at such a time.  Most machine descriptions do
35074     not currently define the macro.
35075
35076     Unless it's necessary to inspect the LABEL parameter, it is better
35077     to set the variable 'align_loops' in the target's
35078     'TARGET_OPTION_OVERRIDE'.  Otherwise, you should try to honor the
35079     user's selection in 'align_loops' in a 'LOOP_ALIGN' implementation.
35080
35081 -- Target Hook: int TARGET_ASM_LOOP_ALIGN_MAX_SKIP (rtx LABEL)
35082     The maximum number of bytes to skip when applying 'LOOP_ALIGN' to
35083     LABEL.  This works only if 'ASM_OUTPUT_MAX_SKIP_ALIGN' is defined.
35084
35085 -- Macro: LABEL_ALIGN (LABEL)
35086     The alignment (log base 2) to put in front of LABEL.  If
35087     'LABEL_ALIGN_AFTER_BARRIER' / 'LOOP_ALIGN' specify a different
35088     alignment, the maximum of the specified values is used.
35089
35090     Unless it's necessary to inspect the LABEL parameter, it is better
35091     to set the variable 'align_labels' in the target's
35092     'TARGET_OPTION_OVERRIDE'.  Otherwise, you should try to honor the
35093     user's selection in 'align_labels' in a 'LABEL_ALIGN'
35094     implementation.
35095
35096 -- Target Hook: int TARGET_ASM_LABEL_ALIGN_MAX_SKIP (rtx LABEL)
35097     The maximum number of bytes to skip when applying 'LABEL_ALIGN' to
35098     LABEL.  This works only if 'ASM_OUTPUT_MAX_SKIP_ALIGN' is defined.
35099
35100 -- Macro: ASM_OUTPUT_SKIP (STREAM, NBYTES)
35101     A C statement to output to the stdio stream STREAM an assembler
35102     instruction to advance the location counter by NBYTES bytes.  Those
35103     bytes should be zero when loaded.  NBYTES will be a C expression of
35104     type 'unsigned HOST_WIDE_INT'.
35105
35106 -- Macro: ASM_NO_SKIP_IN_TEXT
35107     Define this macro if 'ASM_OUTPUT_SKIP' should not be used in the
35108     text section because it fails to put zeros in the bytes that are
35109     skipped.  This is true on many Unix systems, where the pseudo-op to
35110     skip bytes produces no-op instructions rather than zeros when used
35111     in the text section.
35112
35113 -- Macro: ASM_OUTPUT_ALIGN (STREAM, POWER)
35114     A C statement to output to the stdio stream STREAM an assembler
35115     command to advance the location counter to a multiple of 2 to the
35116     POWER bytes.  POWER will be a C expression of type 'int'.
35117
35118 -- Macro: ASM_OUTPUT_ALIGN_WITH_NOP (STREAM, POWER)
35119     Like 'ASM_OUTPUT_ALIGN', except that the "nop" instruction is used
35120     for padding, if necessary.
35121
35122 -- Macro: ASM_OUTPUT_MAX_SKIP_ALIGN (STREAM, POWER, MAX_SKIP)
35123     A C statement to output to the stdio stream STREAM an assembler
35124     command to advance the location counter to a multiple of 2 to the
35125     POWER bytes, but only if MAX_SKIP or fewer bytes are needed to
35126     satisfy the alignment request.  POWER and MAX_SKIP will be a C
35127     expression of type 'int'.
35128
35129
35130File: gccint.info,  Node: Debugging Info,  Next: Floating Point,  Prev: Assembler Format,  Up: Target Macros
35131
3513217.22 Controlling Debugging Information Format
35133==============================================
35134
35135This describes how to specify debugging information.
35136
35137* Menu:
35138
35139* All Debuggers::      Macros that affect all debugging formats uniformly.
35140* DBX Options::        Macros enabling specific options in DBX format.
35141* DBX Hooks::          Hook macros for varying DBX format.
35142* File Names and DBX:: Macros controlling output of file names in DBX format.
35143* SDB and DWARF::      Macros for SDB (COFF) and DWARF formats.
35144* VMS Debug::          Macros for VMS debug format.
35145
35146
35147File: gccint.info,  Node: All Debuggers,  Next: DBX Options,  Up: Debugging Info
35148
3514917.22.1 Macros Affecting All Debugging Formats
35150----------------------------------------------
35151
35152These macros affect all debugging formats.
35153
35154 -- Macro: DBX_REGISTER_NUMBER (REGNO)
35155     A C expression that returns the DBX register number for the
35156     compiler register number REGNO.  In the default macro provided, the
35157     value of this expression will be REGNO itself.  But sometimes there
35158     are some registers that the compiler knows about and DBX does not,
35159     or vice versa.  In such cases, some register may need to have one
35160     number in the compiler and another for DBX.
35161
35162     If two registers have consecutive numbers inside GCC, and they can
35163     be used as a pair to hold a multiword value, then they _must_ have
35164     consecutive numbers after renumbering with 'DBX_REGISTER_NUMBER'.
35165     Otherwise, debuggers will be unable to access such a pair, because
35166     they expect register pairs to be consecutive in their own numbering
35167     scheme.
35168
35169     If you find yourself defining 'DBX_REGISTER_NUMBER' in way that
35170     does not preserve register pairs, then what you must do instead is
35171     redefine the actual register numbering scheme.
35172
35173 -- Macro: DEBUGGER_AUTO_OFFSET (X)
35174     A C expression that returns the integer offset value for an
35175     automatic variable having address X (an RTL expression).  The
35176     default computation assumes that X is based on the frame-pointer
35177     and gives the offset from the frame-pointer.  This is required for
35178     targets that produce debugging output for DBX or COFF-style
35179     debugging output for SDB and allow the frame-pointer to be
35180     eliminated when the '-g' options is used.
35181
35182 -- Macro: DEBUGGER_ARG_OFFSET (OFFSET, X)
35183     A C expression that returns the integer offset value for an
35184     argument having address X (an RTL expression).  The nominal offset
35185     is OFFSET.
35186
35187 -- Macro: PREFERRED_DEBUGGING_TYPE
35188     A C expression that returns the type of debugging output GCC should
35189     produce when the user specifies just '-g'.  Define this if you have
35190     arranged for GCC to support more than one format of debugging
35191     output.  Currently, the allowable values are 'DBX_DEBUG',
35192     'SDB_DEBUG', 'DWARF_DEBUG', 'DWARF2_DEBUG', 'XCOFF_DEBUG',
35193     'VMS_DEBUG', and 'VMS_AND_DWARF2_DEBUG'.
35194
35195     When the user specifies '-ggdb', GCC normally also uses the value
35196     of this macro to select the debugging output format, but with two
35197     exceptions.  If 'DWARF2_DEBUGGING_INFO' is defined, GCC uses the
35198     value 'DWARF2_DEBUG'.  Otherwise, if 'DBX_DEBUGGING_INFO' is
35199     defined, GCC uses 'DBX_DEBUG'.
35200
35201     The value of this macro only affects the default debugging output;
35202     the user can always get a specific type of output by using
35203     '-gstabs', '-gcoff', '-gdwarf-2', '-gxcoff', or '-gvms'.
35204
35205
35206File: gccint.info,  Node: DBX Options,  Next: DBX Hooks,  Prev: All Debuggers,  Up: Debugging Info
35207
3520817.22.2 Specific Options for DBX Output
35209---------------------------------------
35210
35211These are specific options for DBX output.
35212
35213 -- Macro: DBX_DEBUGGING_INFO
35214     Define this macro if GCC should produce debugging output for DBX in
35215     response to the '-g' option.
35216
35217 -- Macro: XCOFF_DEBUGGING_INFO
35218     Define this macro if GCC should produce XCOFF format debugging
35219     output in response to the '-g' option.  This is a variant of DBX
35220     format.
35221
35222 -- Macro: DEFAULT_GDB_EXTENSIONS
35223     Define this macro to control whether GCC should by default generate
35224     GDB's extended version of DBX debugging information (assuming
35225     DBX-format debugging information is enabled at all).  If you don't
35226     define the macro, the default is 1: always generate the extended
35227     information if there is any occasion to.
35228
35229 -- Macro: DEBUG_SYMS_TEXT
35230     Define this macro if all '.stabs' commands should be output while
35231     in the text section.
35232
35233 -- Macro: ASM_STABS_OP
35234     A C string constant, including spacing, naming the assembler pseudo
35235     op to use instead of '"\t.stabs\t"' to define an ordinary debugging
35236     symbol.  If you don't define this macro, '"\t.stabs\t"' is used.
35237     This macro applies only to DBX debugging information format.
35238
35239 -- Macro: ASM_STABD_OP
35240     A C string constant, including spacing, naming the assembler pseudo
35241     op to use instead of '"\t.stabd\t"' to define a debugging symbol
35242     whose value is the current location.  If you don't define this
35243     macro, '"\t.stabd\t"' is used.  This macro applies only to DBX
35244     debugging information format.
35245
35246 -- Macro: ASM_STABN_OP
35247     A C string constant, including spacing, naming the assembler pseudo
35248     op to use instead of '"\t.stabn\t"' to define a debugging symbol
35249     with no name.  If you don't define this macro, '"\t.stabn\t"' is
35250     used.  This macro applies only to DBX debugging information format.
35251
35252 -- Macro: DBX_NO_XREFS
35253     Define this macro if DBX on your system does not support the
35254     construct 'xsTAGNAME'.  On some systems, this construct is used to
35255     describe a forward reference to a structure named TAGNAME.  On
35256     other systems, this construct is not supported at all.
35257
35258 -- Macro: DBX_CONTIN_LENGTH
35259     A symbol name in DBX-format debugging information is normally
35260     continued (split into two separate '.stabs' directives) when it
35261     exceeds a certain length (by default, 80 characters).  On some
35262     operating systems, DBX requires this splitting; on others,
35263     splitting must not be done.  You can inhibit splitting by defining
35264     this macro with the value zero.  You can override the default
35265     splitting-length by defining this macro as an expression for the
35266     length you desire.
35267
35268 -- Macro: DBX_CONTIN_CHAR
35269     Normally continuation is indicated by adding a '\' character to the
35270     end of a '.stabs' string when a continuation follows.  To use a
35271     different character instead, define this macro as a character
35272     constant for the character you want to use.  Do not define this
35273     macro if backslash is correct for your system.
35274
35275 -- Macro: DBX_STATIC_STAB_DATA_SECTION
35276     Define this macro if it is necessary to go to the data section
35277     before outputting the '.stabs' pseudo-op for a non-global static
35278     variable.
35279
35280 -- Macro: DBX_TYPE_DECL_STABS_CODE
35281     The value to use in the "code" field of the '.stabs' directive for
35282     a typedef.  The default is 'N_LSYM'.
35283
35284 -- Macro: DBX_STATIC_CONST_VAR_CODE
35285     The value to use in the "code" field of the '.stabs' directive for
35286     a static variable located in the text section.  DBX format does not
35287     provide any "right" way to do this.  The default is 'N_FUN'.
35288
35289 -- Macro: DBX_REGPARM_STABS_CODE
35290     The value to use in the "code" field of the '.stabs' directive for
35291     a parameter passed in registers.  DBX format does not provide any
35292     "right" way to do this.  The default is 'N_RSYM'.
35293
35294 -- Macro: DBX_REGPARM_STABS_LETTER
35295     The letter to use in DBX symbol data to identify a symbol as a
35296     parameter passed in registers.  DBX format does not customarily
35297     provide any way to do this.  The default is ''P''.
35298
35299 -- Macro: DBX_FUNCTION_FIRST
35300     Define this macro if the DBX information for a function and its
35301     arguments should precede the assembler code for the function.
35302     Normally, in DBX format, the debugging information entirely follows
35303     the assembler code.
35304
35305 -- Macro: DBX_BLOCKS_FUNCTION_RELATIVE
35306     Define this macro, with value 1, if the value of a symbol
35307     describing the scope of a block ('N_LBRAC' or 'N_RBRAC') should be
35308     relative to the start of the enclosing function.  Normally, GCC
35309     uses an absolute address.
35310
35311 -- Macro: DBX_LINES_FUNCTION_RELATIVE
35312     Define this macro, with value 1, if the value of a symbol
35313     indicating the current line number ('N_SLINE') should be relative
35314     to the start of the enclosing function.  Normally, GCC uses an
35315     absolute address.
35316
35317 -- Macro: DBX_USE_BINCL
35318     Define this macro if GCC should generate 'N_BINCL' and 'N_EINCL'
35319     stabs for included header files, as on Sun systems.  This macro
35320     also directs GCC to output a type number as a pair of a file number
35321     and a type number within the file.  Normally, GCC does not generate
35322     'N_BINCL' or 'N_EINCL' stabs, and it outputs a single number for a
35323     type number.
35324
35325
35326File: gccint.info,  Node: DBX Hooks,  Next: File Names and DBX,  Prev: DBX Options,  Up: Debugging Info
35327
3532817.22.3 Open-Ended Hooks for DBX Format
35329---------------------------------------
35330
35331These are hooks for DBX format.
35332
35333 -- Macro: DBX_OUTPUT_SOURCE_LINE (STREAM, LINE, COUNTER)
35334     A C statement to output DBX debugging information before code for
35335     line number LINE of the current source file to the stdio stream
35336     STREAM.  COUNTER is the number of time the macro was invoked,
35337     including the current invocation; it is intended to generate unique
35338     labels in the assembly output.
35339
35340     This macro should not be defined if the default output is correct,
35341     or if it can be made correct by defining
35342     'DBX_LINES_FUNCTION_RELATIVE'.
35343
35344 -- Macro: NO_DBX_FUNCTION_END
35345     Some stabs encapsulation formats (in particular ECOFF), cannot
35346     handle the '.stabs "",N_FUN,,0,0,Lscope-function-1' gdb dbx
35347     extension construct.  On those machines, define this macro to turn
35348     this feature off without disturbing the rest of the gdb extensions.
35349
35350 -- Macro: NO_DBX_BNSYM_ENSYM
35351     Some assemblers cannot handle the '.stabd BNSYM/ENSYM,0,0' gdb dbx
35352     extension construct.  On those machines, define this macro to turn
35353     this feature off without disturbing the rest of the gdb extensions.
35354
35355
35356File: gccint.info,  Node: File Names and DBX,  Next: SDB and DWARF,  Prev: DBX Hooks,  Up: Debugging Info
35357
3535817.22.4 File Names in DBX Format
35359--------------------------------
35360
35361This describes file names in DBX format.
35362
35363 -- Macro: DBX_OUTPUT_MAIN_SOURCE_FILENAME (STREAM, NAME)
35364     A C statement to output DBX debugging information to the stdio
35365     stream STREAM, which indicates that file NAME is the main source
35366     file--the file specified as the input file for compilation.  This
35367     macro is called only once, at the beginning of compilation.
35368
35369     This macro need not be defined if the standard form of output for
35370     DBX debugging information is appropriate.
35371
35372     It may be necessary to refer to a label equal to the beginning of
35373     the text section.  You can use 'assemble_name (stream,
35374     ltext_label_name)' to do so.  If you do this, you must also set the
35375     variable USED_LTEXT_LABEL_NAME to 'true'.
35376
35377 -- Macro: NO_DBX_MAIN_SOURCE_DIRECTORY
35378     Define this macro, with value 1, if GCC should not emit an
35379     indication of the current directory for compilation and current
35380     source language at the beginning of the file.
35381
35382 -- Macro: NO_DBX_GCC_MARKER
35383     Define this macro, with value 1, if GCC should not emit an
35384     indication that this object file was compiled by GCC.  The default
35385     is to emit an 'N_OPT' stab at the beginning of every source file,
35386     with 'gcc2_compiled.' for the string and value 0.
35387
35388 -- Macro: DBX_OUTPUT_MAIN_SOURCE_FILE_END (STREAM, NAME)
35389     A C statement to output DBX debugging information at the end of
35390     compilation of the main source file NAME.  Output should be written
35391     to the stdio stream STREAM.
35392
35393     If you don't define this macro, nothing special is output at the
35394     end of compilation, which is correct for most machines.
35395
35396 -- Macro: DBX_OUTPUT_NULL_N_SO_AT_MAIN_SOURCE_FILE_END
35397     Define this macro _instead of_ defining
35398     'DBX_OUTPUT_MAIN_SOURCE_FILE_END', if what needs to be output at
35399     the end of compilation is an 'N_SO' stab with an empty string,
35400     whose value is the highest absolute text address in the file.
35401
35402
35403File: gccint.info,  Node: SDB and DWARF,  Next: VMS Debug,  Prev: File Names and DBX,  Up: Debugging Info
35404
3540517.22.5 Macros for SDB and DWARF Output
35406---------------------------------------
35407
35408Here are macros for SDB and DWARF output.
35409
35410 -- Macro: SDB_DEBUGGING_INFO
35411     Define this macro if GCC should produce COFF-style debugging output
35412     for SDB in response to the '-g' option.
35413
35414 -- Macro: DWARF2_DEBUGGING_INFO
35415     Define this macro if GCC should produce dwarf version 2 format
35416     debugging output in response to the '-g' option.
35417
35418      -- Target Hook: int TARGET_DWARF_CALLING_CONVENTION (const_tree
35419               FUNCTION)
35420          Define this to enable the dwarf attribute
35421          'DW_AT_calling_convention' to be emitted for each function.
35422          Instead of an integer return the enum value for the 'DW_CC_'
35423          tag.
35424
35425     To support optional call frame debugging information, you must also
35426     define 'INCOMING_RETURN_ADDR_RTX' and either set
35427     'RTX_FRAME_RELATED_P' on the prologue insns if you use RTL for the
35428     prologue, or call 'dwarf2out_def_cfa' and 'dwarf2out_reg_save' as
35429     appropriate from 'TARGET_ASM_FUNCTION_PROLOGUE' if you don't.
35430
35431 -- Macro: DWARF2_FRAME_INFO
35432     Define this macro to a nonzero value if GCC should always output
35433     Dwarf 2 frame information.  If 'TARGET_EXCEPT_UNWIND_INFO' (*note
35434     Exception Region Output::) returns 'UI_DWARF2', and exceptions are
35435     enabled, GCC will output this information not matter how you define
35436     'DWARF2_FRAME_INFO'.
35437
35438 -- Target Hook: enum unwind_info_type TARGET_DEBUG_UNWIND_INFO (void)
35439     This hook defines the mechanism that will be used for describing
35440     frame unwind information to the debugger.  Normally the hook will
35441     return 'UI_DWARF2' if DWARF 2 debug information is enabled, and
35442     return 'UI_NONE' otherwise.
35443
35444     A target may return 'UI_DWARF2' even when DWARF 2 debug information
35445     is disabled in order to always output DWARF 2 frame information.
35446
35447     A target may return 'UI_TARGET' if it has ABI specified unwind
35448     tables.  This will suppress generation of the normal debug frame
35449     unwind information.
35450
35451 -- Macro: DWARF2_ASM_LINE_DEBUG_INFO
35452     Define this macro to be a nonzero value if the assembler can
35453     generate Dwarf 2 line debug info sections.  This will result in
35454     much more compact line number tables, and hence is desirable if it
35455     works.
35456
35457 -- Target Hook: bool TARGET_WANT_DEBUG_PUB_SECTIONS
35458     True if the '.debug_pubtypes' and '.debug_pubnames' sections should
35459     be emitted.  These sections are not used on most platforms, and in
35460     particular GDB does not use them.
35461
35462 -- Target Hook: bool TARGET_FORCE_AT_COMP_DIR
35463     True if the 'DW_AT_comp_dir' attribute should be emitted for each
35464     compilation unit.  This attribute is required for the darwin linker
35465     to emit debug information.
35466
35467 -- Target Hook: bool TARGET_DELAY_SCHED2
35468     True if sched2 is not to be run at its normal place.  This usually
35469     means it will be run as part of machine-specific reorg.
35470
35471 -- Target Hook: bool TARGET_DELAY_VARTRACK
35472     True if vartrack is not to be run at its normal place.  This
35473     usually means it will be run as part of machine-specific reorg.
35474
35475 -- Macro: ASM_OUTPUT_DWARF_DELTA (STREAM, SIZE, LABEL1, LABEL2)
35476     A C statement to issue assembly directives that create a difference
35477     LAB1 minus LAB2, using an integer of the given SIZE.
35478
35479 -- Macro: ASM_OUTPUT_DWARF_VMS_DELTA (STREAM, SIZE, LABEL1, LABEL2)
35480     A C statement to issue assembly directives that create a difference
35481     between the two given labels in system defined units, e.g.
35482     instruction slots on IA64 VMS, using an integer of the given size.
35483
35484 -- Macro: ASM_OUTPUT_DWARF_OFFSET (STREAM, SIZE, LABEL, SECTION)
35485     A C statement to issue assembly directives that create a
35486     section-relative reference to the given LABEL, using an integer of
35487     the given SIZE.  The label is known to be defined in the given
35488     SECTION.
35489
35490 -- Macro: ASM_OUTPUT_DWARF_PCREL (STREAM, SIZE, LABEL)
35491     A C statement to issue assembly directives that create a
35492     self-relative reference to the given LABEL, using an integer of the
35493     given SIZE.
35494
35495 -- Macro: ASM_OUTPUT_DWARF_TABLE_REF (LABEL)
35496     A C statement to issue assembly directives that create a reference
35497     to the DWARF table identifier LABEL from the current section.  This
35498     is used on some systems to avoid garbage collecting a DWARF table
35499     which is referenced by a function.
35500
35501 -- Target Hook: void TARGET_ASM_OUTPUT_DWARF_DTPREL (FILE *FILE, int
35502          SIZE, rtx X)
35503     If defined, this target hook is a function which outputs a
35504     DTP-relative reference to the given TLS symbol of the specified
35505     size.
35506
35507 -- Macro: PUT_SDB_ ...
35508     Define these macros to override the assembler syntax for the
35509     special SDB assembler directives.  See 'sdbout.c' for a list of
35510     these macros and their arguments.  If the standard syntax is used,
35511     you need not define them yourself.
35512
35513 -- Macro: SDB_DELIM
35514     Some assemblers do not support a semicolon as a delimiter, even
35515     between SDB assembler directives.  In that case, define this macro
35516     to be the delimiter to use (usually '\n').  It is not necessary to
35517     define a new set of 'PUT_SDB_OP' macros if this is the only change
35518     required.
35519
35520 -- Macro: SDB_ALLOW_UNKNOWN_REFERENCES
35521     Define this macro to allow references to unknown structure, union,
35522     or enumeration tags to be emitted.  Standard COFF does not allow
35523     handling of unknown references, MIPS ECOFF has support for it.
35524
35525 -- Macro: SDB_ALLOW_FORWARD_REFERENCES
35526     Define this macro to allow references to structure, union, or
35527     enumeration tags that have not yet been seen to be handled.  Some
35528     assemblers choke if forward tags are used, while some require it.
35529
35530 -- Macro: SDB_OUTPUT_SOURCE_LINE (STREAM, LINE)
35531     A C statement to output SDB debugging information before code for
35532     line number LINE of the current source file to the stdio stream
35533     STREAM.  The default is to emit an '.ln' directive.
35534
35535
35536File: gccint.info,  Node: VMS Debug,  Prev: SDB and DWARF,  Up: Debugging Info
35537
3553817.22.6 Macros for VMS Debug Format
35539-----------------------------------
35540
35541Here are macros for VMS debug format.
35542
35543 -- Macro: VMS_DEBUGGING_INFO
35544     Define this macro if GCC should produce debugging output for VMS in
35545     response to the '-g' option.  The default behavior for VMS is to
35546     generate minimal debug info for a traceback in the absence of '-g'
35547     unless explicitly overridden with '-g0'.  This behavior is
35548     controlled by 'TARGET_OPTION_OPTIMIZATION' and
35549     'TARGET_OPTION_OVERRIDE'.
35550
35551
35552File: gccint.info,  Node: Floating Point,  Next: Mode Switching,  Prev: Debugging Info,  Up: Target Macros
35553
3555417.23 Cross Compilation and Floating Point
35555==========================================
35556
35557While all modern machines use twos-complement representation for
35558integers, there are a variety of representations for floating point
35559numbers.  This means that in a cross-compiler the representation of
35560floating point numbers in the compiled program may be different from
35561that used in the machine doing the compilation.
35562
35563 Because different representation systems may offer different amounts of
35564range and precision, all floating point constants must be represented in
35565the target machine's format.  Therefore, the cross compiler cannot
35566safely use the host machine's floating point arithmetic; it must emulate
35567the target's arithmetic.  To ensure consistency, GCC always uses
35568emulation to work with floating point values, even when the host and
35569target floating point formats are identical.
35570
35571 The following macros are provided by 'real.h' for the compiler to use.
35572All parts of the compiler which generate or optimize floating-point
35573calculations must use these macros.  They may evaluate their operands
35574more than once, so operands must not have side effects.
35575
35576 -- Macro: REAL_VALUE_TYPE
35577     The C data type to be used to hold a floating point value in the
35578     target machine's format.  Typically this is a 'struct' containing
35579     an array of 'HOST_WIDE_INT', but all code should treat it as an
35580     opaque quantity.
35581
35582 -- Macro: int REAL_VALUES_EQUAL (REAL_VALUE_TYPE X, REAL_VALUE_TYPE Y)
35583     Compares for equality the two values, X and Y.  If the target
35584     floating point format supports negative zeroes and/or NaNs,
35585     'REAL_VALUES_EQUAL (-0.0, 0.0)' is true, and 'REAL_VALUES_EQUAL
35586     (NaN, NaN)' is false.
35587
35588 -- Macro: int REAL_VALUES_LESS (REAL_VALUE_TYPE X, REAL_VALUE_TYPE Y)
35589     Tests whether X is less than Y.
35590
35591 -- Macro: HOST_WIDE_INT REAL_VALUE_FIX (REAL_VALUE_TYPE X)
35592     Truncates X to a signed integer, rounding toward zero.
35593
35594 -- Macro: unsigned HOST_WIDE_INT REAL_VALUE_UNSIGNED_FIX
35595          (REAL_VALUE_TYPE X)
35596     Truncates X to an unsigned integer, rounding toward zero.  If X is
35597     negative, returns zero.
35598
35599 -- Macro: REAL_VALUE_TYPE REAL_VALUE_ATOF (const char *STRING, enum
35600          machine_mode MODE)
35601     Converts STRING into a floating point number in the target
35602     machine's representation for mode MODE.  This routine can handle
35603     both decimal and hexadecimal floating point constants, using the
35604     syntax defined by the C language for both.
35605
35606 -- Macro: int REAL_VALUE_NEGATIVE (REAL_VALUE_TYPE X)
35607     Returns 1 if X is negative (including negative zero), 0 otherwise.
35608
35609 -- Macro: int REAL_VALUE_ISINF (REAL_VALUE_TYPE X)
35610     Determines whether X represents infinity (positive or negative).
35611
35612 -- Macro: int REAL_VALUE_ISNAN (REAL_VALUE_TYPE X)
35613     Determines whether X represents a "NaN" (not-a-number).
35614
35615 -- Macro: void REAL_ARITHMETIC (REAL_VALUE_TYPE OUTPUT, enum tree_code
35616          CODE, REAL_VALUE_TYPE X, REAL_VALUE_TYPE Y)
35617     Calculates an arithmetic operation on the two floating point values
35618     X and Y, storing the result in OUTPUT (which must be a variable).
35619
35620     The operation to be performed is specified by CODE.  Only the
35621     following codes are supported: 'PLUS_EXPR', 'MINUS_EXPR',
35622     'MULT_EXPR', 'RDIV_EXPR', 'MAX_EXPR', 'MIN_EXPR'.
35623
35624     If 'REAL_ARITHMETIC' is asked to evaluate division by zero and the
35625     target's floating point format cannot represent infinity, it will
35626     call 'abort'.  Callers should check for this situation first, using
35627     'MODE_HAS_INFINITIES'.  *Note Storage Layout::.
35628
35629 -- Macro: REAL_VALUE_TYPE REAL_VALUE_NEGATE (REAL_VALUE_TYPE X)
35630     Returns the negative of the floating point value X.
35631
35632 -- Macro: REAL_VALUE_TYPE REAL_VALUE_ABS (REAL_VALUE_TYPE X)
35633     Returns the absolute value of X.
35634
35635 -- Macro: void REAL_VALUE_TO_INT (HOST_WIDE_INT LOW, HOST_WIDE_INT
35636          HIGH, REAL_VALUE_TYPE X)
35637     Converts a floating point value X into a double-precision integer
35638     which is then stored into LOW and HIGH.  If the value is not
35639     integral, it is truncated.
35640
35641 -- Macro: void REAL_VALUE_FROM_INT (REAL_VALUE_TYPE X, HOST_WIDE_INT
35642          LOW, HOST_WIDE_INT HIGH, enum machine_mode MODE)
35643     Converts a double-precision integer found in LOW and HIGH, into a
35644     floating point value which is then stored into X.  The value is
35645     truncated to fit in mode MODE.
35646
35647
35648File: gccint.info,  Node: Mode Switching,  Next: Target Attributes,  Prev: Floating Point,  Up: Target Macros
35649
3565017.24 Mode Switching Instructions
35651=================================
35652
35653The following macros control mode switching optimizations:
35654
35655 -- Macro: OPTIMIZE_MODE_SWITCHING (ENTITY)
35656     Define this macro if the port needs extra instructions inserted for
35657     mode switching in an optimizing compilation.
35658
35659     For an example, the SH4 can perform both single and double
35660     precision floating point operations, but to perform a single
35661     precision operation, the FPSCR PR bit has to be cleared, while for
35662     a double precision operation, this bit has to be set.  Changing the
35663     PR bit requires a general purpose register as a scratch register,
35664     hence these FPSCR sets have to be inserted before reload, i.e. you
35665     can't put this into instruction emitting or
35666     'TARGET_MACHINE_DEPENDENT_REORG'.
35667
35668     You can have multiple entities that are mode-switched, and select
35669     at run time which entities actually need it.
35670     'OPTIMIZE_MODE_SWITCHING' should return nonzero for any ENTITY that
35671     needs mode-switching.  If you define this macro, you also have to
35672     define 'NUM_MODES_FOR_MODE_SWITCHING', 'MODE_NEEDED',
35673     'MODE_PRIORITY_TO_MODE' and 'EMIT_MODE_SET'.  'MODE_AFTER',
35674     'MODE_ENTRY', and 'MODE_EXIT' are optional.
35675
35676 -- Macro: NUM_MODES_FOR_MODE_SWITCHING
35677     If you define 'OPTIMIZE_MODE_SWITCHING', you have to define this as
35678     initializer for an array of integers.  Each initializer element N
35679     refers to an entity that needs mode switching, and specifies the
35680     number of different modes that might need to be set for this
35681     entity.  The position of the initializer in the
35682     initializer--starting counting at zero--determines the integer that
35683     is used to refer to the mode-switched entity in question.  In
35684     macros that take mode arguments / yield a mode result, modes are
35685     represented as numbers 0 ... N - 1.  N is used to specify that no
35686     mode switch is needed / supplied.
35687
35688 -- Macro: MODE_NEEDED (ENTITY, INSN)
35689     ENTITY is an integer specifying a mode-switched entity.  If
35690     'OPTIMIZE_MODE_SWITCHING' is defined, you must define this macro to
35691     return an integer value not larger than the corresponding element
35692     in 'NUM_MODES_FOR_MODE_SWITCHING', to denote the mode that ENTITY
35693     must be switched into prior to the execution of INSN.
35694
35695 -- Macro: MODE_AFTER (ENTITY, MODE, INSN)
35696     ENTITY is an integer specifying a mode-switched entity.  If this
35697     macro is defined, it is evaluated for every INSN during mode
35698     switching.  It determines the mode that an insn results in (if
35699     different from the incoming mode).
35700
35701 -- Macro: MODE_ENTRY (ENTITY)
35702     If this macro is defined, it is evaluated for every ENTITY that
35703     needs mode switching.  It should evaluate to an integer, which is a
35704     mode that ENTITY is assumed to be switched to at function entry.
35705     If 'MODE_ENTRY' is defined then 'MODE_EXIT' must be defined.
35706
35707 -- Macro: MODE_EXIT (ENTITY)
35708     If this macro is defined, it is evaluated for every ENTITY that
35709     needs mode switching.  It should evaluate to an integer, which is a
35710     mode that ENTITY is assumed to be switched to at function exit.  If
35711     'MODE_EXIT' is defined then 'MODE_ENTRY' must be defined.
35712
35713 -- Macro: MODE_PRIORITY_TO_MODE (ENTITY, N)
35714     This macro specifies the order in which modes for ENTITY are
35715     processed.  0 is the highest priority,
35716     'NUM_MODES_FOR_MODE_SWITCHING[ENTITY] - 1' the lowest.  The value
35717     of the macro should be an integer designating a mode for ENTITY.
35718     For any fixed ENTITY, 'mode_priority_to_mode' (ENTITY, N) shall be
35719     a bijection in 0 ... 'num_modes_for_mode_switching[ENTITY] - 1'.
35720
35721 -- Macro: EMIT_MODE_SET (ENTITY, MODE, HARD_REGS_LIVE)
35722     Generate one or more insns to set ENTITY to MODE.  HARD_REG_LIVE is
35723     the set of hard registers live at the point where the insn(s) are
35724     to be inserted.
35725
35726
35727File: gccint.info,  Node: Target Attributes,  Next: Emulated TLS,  Prev: Mode Switching,  Up: Target Macros
35728
3572917.25 Defining target-specific uses of '__attribute__'
35730======================================================
35731
35732Target-specific attributes may be defined for functions, data and types.
35733These are described using the following target hooks; they also need to
35734be documented in 'extend.texi'.
35735
35736 -- Target Hook: const struct attribute_spec * TARGET_ATTRIBUTE_TABLE
35737     If defined, this target hook points to an array of 'struct
35738     attribute_spec' (defined in 'tree.h') specifying the machine
35739     specific attributes for this target and some of the restrictions on
35740     the entities to which these attributes are applied and the
35741     arguments they take.
35742
35743 -- Target Hook: bool TARGET_ATTRIBUTE_TAKES_IDENTIFIER_P (const_tree
35744          NAME)
35745     If defined, this target hook is a function which returns true if
35746     the machine-specific attribute named NAME expects an identifier
35747     given as its first argument to be passed on as a plain identifier,
35748     not subjected to name lookup.  If this is not defined, the default
35749     is false for all machine-specific attributes.
35750
35751 -- Target Hook: int TARGET_COMP_TYPE_ATTRIBUTES (const_tree TYPE1,
35752          const_tree TYPE2)
35753     If defined, this target hook is a function which returns zero if
35754     the attributes on TYPE1 and TYPE2 are incompatible, one if they are
35755     compatible, and two if they are nearly compatible (which causes a
35756     warning to be generated).  If this is not defined, machine-specific
35757     attributes are supposed always to be compatible.
35758
35759 -- Target Hook: void TARGET_SET_DEFAULT_TYPE_ATTRIBUTES (tree TYPE)
35760     If defined, this target hook is a function which assigns default
35761     attributes to the newly defined TYPE.
35762
35763 -- Target Hook: tree TARGET_MERGE_TYPE_ATTRIBUTES (tree TYPE1, tree
35764          TYPE2)
35765     Define this target hook if the merging of type attributes needs
35766     special handling.  If defined, the result is a list of the combined
35767     'TYPE_ATTRIBUTES' of TYPE1 and TYPE2.  It is assumed that
35768     'comptypes' has already been called and returned 1.  This function
35769     may call 'merge_attributes' to handle machine-independent merging.
35770
35771 -- Target Hook: tree TARGET_MERGE_DECL_ATTRIBUTES (tree OLDDECL, tree
35772          NEWDECL)
35773     Define this target hook if the merging of decl attributes needs
35774     special handling.  If defined, the result is a list of the combined
35775     'DECL_ATTRIBUTES' of OLDDECL and NEWDECL.  NEWDECL is a duplicate
35776     declaration of OLDDECL.  Examples of when this is needed are when
35777     one attribute overrides another, or when an attribute is nullified
35778     by a subsequent definition.  This function may call
35779     'merge_attributes' to handle machine-independent merging.
35780
35781     If the only target-specific handling you require is 'dllimport' for
35782     Microsoft Windows targets, you should define the macro
35783     'TARGET_DLLIMPORT_DECL_ATTRIBUTES' to '1'.  The compiler will then
35784     define a function called 'merge_dllimport_decl_attributes' which
35785     can then be defined as the expansion of
35786     'TARGET_MERGE_DECL_ATTRIBUTES'.  You can also add
35787     'handle_dll_attribute' in the attribute table for your port to
35788     perform initial processing of the 'dllimport' and 'dllexport'
35789     attributes.  This is done in 'i386/cygwin.h' and 'i386/i386.c', for
35790     example.
35791
35792 -- Target Hook: bool TARGET_VALID_DLLIMPORT_ATTRIBUTE_P (const_tree
35793          DECL)
35794     DECL is a variable or function with '__attribute__((dllimport))'
35795     specified.  Use this hook if the target needs to add extra
35796     validation checks to 'handle_dll_attribute'.
35797
35798 -- Macro: TARGET_DECLSPEC
35799     Define this macro to a nonzero value if you want to treat
35800     '__declspec(X)' as equivalent to '__attribute((X))'.  By default,
35801     this behavior is enabled only for targets that define
35802     'TARGET_DLLIMPORT_DECL_ATTRIBUTES'.  The current implementation of
35803     '__declspec' is via a built-in macro, but you should not rely on
35804     this implementation detail.
35805
35806 -- Target Hook: void TARGET_INSERT_ATTRIBUTES (tree NODE, tree
35807          *ATTR_PTR)
35808     Define this target hook if you want to be able to add attributes to
35809     a decl when it is being created.  This is normally useful for back
35810     ends which wish to implement a pragma by using the attributes which
35811     correspond to the pragma's effect.  The NODE argument is the decl
35812     which is being created.  The ATTR_PTR argument is a pointer to the
35813     attribute list for this decl.  The list itself should not be
35814     modified, since it may be shared with other decls, but attributes
35815     may be chained on the head of the list and '*ATTR_PTR' modified to
35816     point to the new attributes, or a copy of the list may be made if
35817     further changes are needed.
35818
35819 -- Target Hook: bool TARGET_FUNCTION_ATTRIBUTE_INLINABLE_P (const_tree
35820          FNDECL)
35821     This target hook returns 'true' if it is ok to inline FNDECL into
35822     the current function, despite its having target-specific
35823     attributes, 'false' otherwise.  By default, if a function has a
35824     target specific attribute attached to it, it will not be inlined.
35825
35826 -- Target Hook: bool TARGET_OPTION_VALID_ATTRIBUTE_P (tree FNDECL, tree
35827          NAME, tree ARGS, int FLAGS)
35828     This hook is called to parse 'attribute(target("..."))', which
35829     allows setting target-specific options on individual functions.
35830     These function-specific options may differ from the options
35831     specified on the command line.  The hook should return 'true' if
35832     the options are valid.
35833
35834     The hook should set the 'DECL_FUNCTION_SPECIFIC_TARGET' field in
35835     the function declaration to hold a pointer to a target-specific
35836     'struct cl_target_option' structure.
35837
35838 -- Target Hook: void TARGET_OPTION_SAVE (struct cl_target_option *PTR)
35839     This hook is called to save any additional target-specific
35840     information in the 'struct cl_target_option' structure for
35841     function-specific options.  *Note Option file format::.
35842
35843 -- Target Hook: void TARGET_OPTION_RESTORE (struct cl_target_option
35844          *PTR)
35845     This hook is called to restore any additional target-specific
35846     information in the 'struct cl_target_option' structure for
35847     function-specific options.
35848
35849 -- Target Hook: void TARGET_OPTION_PRINT (FILE *FILE, int INDENT,
35850          struct cl_target_option *PTR)
35851     This hook is called to print any additional target-specific
35852     information in the 'struct cl_target_option' structure for
35853     function-specific options.
35854
35855 -- Target Hook: bool TARGET_OPTION_PRAGMA_PARSE (tree ARGS, tree
35856          POP_TARGET)
35857     This target hook parses the options for '#pragma GCC target', which
35858     sets the target-specific options for functions that occur later in
35859     the input stream.  The options accepted should be the same as those
35860     handled by the 'TARGET_OPTION_VALID_ATTRIBUTE_P' hook.
35861
35862 -- Target Hook: void TARGET_OPTION_OVERRIDE (void)
35863     Sometimes certain combinations of command options do not make sense
35864     on a particular target machine.  You can override the hook
35865     'TARGET_OPTION_OVERRIDE' to take account of this.  This hooks is
35866     called once just after all the command options have been parsed.
35867
35868     Don't use this hook to turn on various extra optimizations for
35869     '-O'.  That is what 'TARGET_OPTION_OPTIMIZATION' is for.
35870
35871     If you need to do something whenever the optimization level is
35872     changed via the optimize attribute or pragma, see
35873     'TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE'
35874
35875 -- Target Hook: bool TARGET_OPTION_FUNCTION_VERSIONS (tree DECL1, tree
35876          DECL2)
35877     This target hook returns 'true' if DECL1 and DECL2 are versions of
35878     the same function.  DECL1 and DECL2 are function versions if and
35879     only if they have the same function signature and different target
35880     specific attributes, that is, they are compiled for different
35881     target machines.
35882
35883 -- Target Hook: bool TARGET_CAN_INLINE_P (tree CALLER, tree CALLEE)
35884     This target hook returns 'false' if the CALLER function cannot
35885     inline CALLEE, based on target specific information.  By default,
35886     inlining is not allowed if the callee function has function
35887     specific target options and the caller does not use the same
35888     options.
35889
35890
35891File: gccint.info,  Node: Emulated TLS,  Next: MIPS Coprocessors,  Prev: Target Attributes,  Up: Target Macros
35892
3589317.26 Emulating TLS
35894===================
35895
35896For targets whose psABI does not provide Thread Local Storage via
35897specific relocations and instruction sequences, an emulation layer is
35898used.  A set of target hooks allows this emulation layer to be
35899configured for the requirements of a particular target.  For instance
35900the psABI may in fact specify TLS support in terms of an emulation
35901layer.
35902
35903 The emulation layer works by creating a control object for every TLS
35904object.  To access the TLS object, a lookup function is provided which,
35905when given the address of the control object, will return the address of
35906the current thread's instance of the TLS object.
35907
35908 -- Target Hook: const char * TARGET_EMUTLS_GET_ADDRESS
35909     Contains the name of the helper function that uses a TLS control
35910     object to locate a TLS instance.  The default causes libgcc's
35911     emulated TLS helper function to be used.
35912
35913 -- Target Hook: const char * TARGET_EMUTLS_REGISTER_COMMON
35914     Contains the name of the helper function that should be used at
35915     program startup to register TLS objects that are implicitly
35916     initialized to zero.  If this is 'NULL', all TLS objects will have
35917     explicit initializers.  The default causes libgcc's emulated TLS
35918     registration function to be used.
35919
35920 -- Target Hook: const char * TARGET_EMUTLS_VAR_SECTION
35921     Contains the name of the section in which TLS control variables
35922     should be placed.  The default of 'NULL' allows these to be placed
35923     in any section.
35924
35925 -- Target Hook: const char * TARGET_EMUTLS_TMPL_SECTION
35926     Contains the name of the section in which TLS initializers should
35927     be placed.  The default of 'NULL' allows these to be placed in any
35928     section.
35929
35930 -- Target Hook: const char * TARGET_EMUTLS_VAR_PREFIX
35931     Contains the prefix to be prepended to TLS control variable names.
35932     The default of 'NULL' uses a target-specific prefix.
35933
35934 -- Target Hook: const char * TARGET_EMUTLS_TMPL_PREFIX
35935     Contains the prefix to be prepended to TLS initializer objects.
35936     The default of 'NULL' uses a target-specific prefix.
35937
35938 -- Target Hook: tree TARGET_EMUTLS_VAR_FIELDS (tree TYPE, tree *NAME)
35939     Specifies a function that generates the FIELD_DECLs for a TLS
35940     control object type.  TYPE is the RECORD_TYPE the fields are for
35941     and NAME should be filled with the structure tag, if the default of
35942     '__emutls_object' is unsuitable.  The default creates a type
35943     suitable for libgcc's emulated TLS function.
35944
35945 -- Target Hook: tree TARGET_EMUTLS_VAR_INIT (tree VAR, tree DECL, tree
35946          TMPL_ADDR)
35947     Specifies a function that generates the CONSTRUCTOR to initialize a
35948     TLS control object.  VAR is the TLS control object, DECL is the TLS
35949     object and TMPL_ADDR is the address of the initializer.  The
35950     default initializes libgcc's emulated TLS control object.
35951
35952 -- Target Hook: bool TARGET_EMUTLS_VAR_ALIGN_FIXED
35953     Specifies whether the alignment of TLS control variable objects is
35954     fixed and should not be increased as some backends may do to
35955     optimize single objects.  The default is false.
35956
35957 -- Target Hook: bool TARGET_EMUTLS_DEBUG_FORM_TLS_ADDRESS
35958     Specifies whether a DWARF 'DW_OP_form_tls_address' location
35959     descriptor may be used to describe emulated TLS control objects.
35960
35961
35962File: gccint.info,  Node: MIPS Coprocessors,  Next: PCH Target,  Prev: Emulated TLS,  Up: Target Macros
35963
3596417.27 Defining coprocessor specifics for MIPS targets.
35965======================================================
35966
35967The MIPS specification allows MIPS implementations to have as many as 4
35968coprocessors, each with as many as 32 private registers.  GCC supports
35969accessing these registers and transferring values between the registers
35970and memory using asm-ized variables.  For example:
35971
35972       register unsigned int cp0count asm ("c0r1");
35973       unsigned int d;
35974
35975       d = cp0count + 3;
35976
35977 ("c0r1" is the default name of register 1 in coprocessor 0; alternate
35978names may be added as described below, or the default names may be
35979overridden entirely in 'SUBTARGET_CONDITIONAL_REGISTER_USAGE'.)
35980
35981 Coprocessor registers are assumed to be epilogue-used; sets to them
35982will be preserved even if it does not appear that the register is used
35983again later in the function.
35984
35985 Another note: according to the MIPS spec, coprocessor 1 (if present) is
35986the FPU.  One accesses COP1 registers through standard mips
35987floating-point support; they are not included in this mechanism.
35988
35989 There is one macro used in defining the MIPS coprocessor interface
35990which you may want to override in subtargets; it is described below.
35991
35992
35993File: gccint.info,  Node: PCH Target,  Next: C++ ABI,  Prev: MIPS Coprocessors,  Up: Target Macros
35994
3599517.28 Parameters for Precompiled Header Validity Checking
35996=========================================================
35997
35998 -- Target Hook: void * TARGET_GET_PCH_VALIDITY (size_t *SZ)
35999     This hook returns a pointer to the data needed by
36000     'TARGET_PCH_VALID_P' and sets '*SZ' to the size of the data in
36001     bytes.
36002
36003 -- Target Hook: const char * TARGET_PCH_VALID_P (const void *DATA,
36004          size_t SZ)
36005     This hook checks whether the options used to create a PCH file are
36006     compatible with the current settings.  It returns 'NULL' if so and
36007     a suitable error message if not.  Error messages will be presented
36008     to the user and must be localized using '_(MSG)'.
36009
36010     DATA is the data that was returned by 'TARGET_GET_PCH_VALIDITY'
36011     when the PCH file was created and SZ is the size of that data in
36012     bytes.  It's safe to assume that the data was created by the same
36013     version of the compiler, so no format checking is needed.
36014
36015     The default definition of 'default_pch_valid_p' should be suitable
36016     for most targets.
36017
36018 -- Target Hook: const char * TARGET_CHECK_PCH_TARGET_FLAGS (int
36019          PCH_FLAGS)
36020     If this hook is nonnull, the default implementation of
36021     'TARGET_PCH_VALID_P' will use it to check for compatible values of
36022     'target_flags'.  PCH_FLAGS specifies the value that 'target_flags'
36023     had when the PCH file was created.  The return value is the same as
36024     for 'TARGET_PCH_VALID_P'.
36025
36026 -- Target Hook: void TARGET_PREPARE_PCH_SAVE (void)
36027     Called before writing out a PCH file.  If the target has some
36028     garbage-collected data that needs to be in a particular state on
36029     PCH loads, it can use this hook to enforce that state.  Very few
36030     targets need to do anything here.
36031
36032
36033File: gccint.info,  Node: C++ ABI,  Next: Named Address Spaces,  Prev: PCH Target,  Up: Target Macros
36034
3603517.29 C++ ABI parameters
36036========================
36037
36038 -- Target Hook: tree TARGET_CXX_GUARD_TYPE (void)
36039     Define this hook to override the integer type used for guard
36040     variables.  These are used to implement one-time construction of
36041     static objects.  The default is long_long_integer_type_node.
36042
36043 -- Target Hook: bool TARGET_CXX_GUARD_MASK_BIT (void)
36044     This hook determines how guard variables are used.  It should
36045     return 'false' (the default) if the first byte should be used.  A
36046     return value of 'true' indicates that only the least significant
36047     bit should be used.
36048
36049 -- Target Hook: tree TARGET_CXX_GET_COOKIE_SIZE (tree TYPE)
36050     This hook returns the size of the cookie to use when allocating an
36051     array whose elements have the indicated TYPE.  Assumes that it is
36052     already known that a cookie is needed.  The default is 'max(sizeof
36053     (size_t), alignof(type))', as defined in section 2.7 of the
36054     IA64/Generic C++ ABI.
36055
36056 -- Target Hook: bool TARGET_CXX_COOKIE_HAS_SIZE (void)
36057     This hook should return 'true' if the element size should be stored
36058     in array cookies.  The default is to return 'false'.
36059
36060 -- Target Hook: int TARGET_CXX_IMPORT_EXPORT_CLASS (tree TYPE, int
36061          IMPORT_EXPORT)
36062     If defined by a backend this hook allows the decision made to
36063     export class TYPE to be overruled.  Upon entry IMPORT_EXPORT will
36064     contain 1 if the class is going to be exported, -1 if it is going
36065     to be imported and 0 otherwise.  This function should return the
36066     modified value and perform any other actions necessary to support
36067     the backend's targeted operating system.
36068
36069 -- Target Hook: bool TARGET_CXX_CDTOR_RETURNS_THIS (void)
36070     This hook should return 'true' if constructors and destructors
36071     return the address of the object created/destroyed.  The default is
36072     to return 'false'.
36073
36074 -- Target Hook: bool TARGET_CXX_KEY_METHOD_MAY_BE_INLINE (void)
36075     This hook returns true if the key method for a class (i.e., the
36076     method which, if defined in the current translation unit, causes
36077     the virtual table to be emitted) may be an inline function.  Under
36078     the standard Itanium C++ ABI the key method may be an inline
36079     function so long as the function is not declared inline in the
36080     class definition.  Under some variants of the ABI, an inline
36081     function can never be the key method.  The default is to return
36082     'true'.
36083
36084 -- Target Hook: void TARGET_CXX_DETERMINE_CLASS_DATA_VISIBILITY (tree
36085          DECL)
36086     DECL is a virtual table, virtual table table, typeinfo object, or
36087     other similar implicit class data object that will be emitted with
36088     external linkage in this translation unit.  No ELF visibility has
36089     been explicitly specified.  If the target needs to specify a
36090     visibility other than that of the containing class, use this hook
36091     to set 'DECL_VISIBILITY' and 'DECL_VISIBILITY_SPECIFIED'.
36092
36093 -- Target Hook: bool TARGET_CXX_CLASS_DATA_ALWAYS_COMDAT (void)
36094     This hook returns true (the default) if virtual tables and other
36095     similar implicit class data objects are always COMDAT if they have
36096     external linkage.  If this hook returns false, then class data for
36097     classes whose virtual table will be emitted in only one translation
36098     unit will not be COMDAT.
36099
36100 -- Target Hook: bool TARGET_CXX_LIBRARY_RTTI_COMDAT (void)
36101     This hook returns true (the default) if the RTTI information for
36102     the basic types which is defined in the C++ runtime should always
36103     be COMDAT, false if it should not be COMDAT.
36104
36105 -- Target Hook: bool TARGET_CXX_USE_AEABI_ATEXIT (void)
36106     This hook returns true if '__aeabi_atexit' (as defined by the ARM
36107     EABI) should be used to register static destructors when
36108     '-fuse-cxa-atexit' is in effect.  The default is to return false to
36109     use '__cxa_atexit'.
36110
36111 -- Target Hook: bool TARGET_CXX_USE_ATEXIT_FOR_CXA_ATEXIT (void)
36112     This hook returns true if the target 'atexit' function can be used
36113     in the same manner as '__cxa_atexit' to register C++ static
36114     destructors.  This requires that 'atexit'-registered functions in
36115     shared libraries are run in the correct order when the libraries
36116     are unloaded.  The default is to return false.
36117
36118 -- Target Hook: void TARGET_CXX_ADJUST_CLASS_AT_DEFINITION (tree TYPE)
36119     TYPE is a C++ class (i.e., RECORD_TYPE or UNION_TYPE) that has just
36120     been defined.  Use this hook to make adjustments to the class (eg,
36121     tweak visibility or perform any other required target
36122     modifications).
36123
36124 -- Target Hook: tree TARGET_CXX_DECL_MANGLING_CONTEXT (const_tree DECL)
36125     Return target-specific mangling context of DECL or 'NULL_TREE'.
36126
36127
36128File: gccint.info,  Node: Named Address Spaces,  Next: Misc,  Prev: C++ ABI,  Up: Target Macros
36129
3613017.30 Adding support for named address spaces
36131=============================================
36132
36133The draft technical report of the ISO/IEC JTC1 S22 WG14 N1275 standards
36134committee, 'Programming Languages - C - Extensions to support embedded
36135processors', specifies a syntax for embedded processors to specify
36136alternate address spaces.  You can configure a GCC port to support
36137section 5.1 of the draft report to add support for address spaces other
36138than the default address space.  These address spaces are new keywords
36139that are similar to the 'volatile' and 'const' type attributes.
36140
36141 Pointers to named address spaces can have a different size than
36142pointers to the generic address space.
36143
36144 For example, the SPU port uses the '__ea' address space to refer to
36145memory in the host processor, rather than memory local to the SPU
36146processor.  Access to memory in the '__ea' address space involves
36147issuing DMA operations to move data between the host processor and the
36148local processor memory address space.  Pointers in the '__ea' address
36149space are either 32 bits or 64 bits based on the '-mea32' or '-mea64'
36150switches (native SPU pointers are always 32 bits).
36151
36152 Internally, address spaces are represented as a small integer in the
36153range 0 to 15 with address space 0 being reserved for the generic
36154address space.
36155
36156 To register a named address space qualifier keyword with the C front
36157end, the target may call the 'c_register_addr_space' routine.  For
36158example, the SPU port uses the following to declare '__ea' as the
36159keyword for named address space #1:
36160     #define ADDR_SPACE_EA 1
36161     c_register_addr_space ("__ea", ADDR_SPACE_EA);
36162
36163 -- Target Hook: enum machine_mode TARGET_ADDR_SPACE_POINTER_MODE
36164          (addr_space_t ADDRESS_SPACE)
36165     Define this to return the machine mode to use for pointers to
36166     ADDRESS_SPACE if the target supports named address spaces.  The
36167     default version of this hook returns 'ptr_mode' for the generic
36168     address space only.
36169
36170 -- Target Hook: enum machine_mode TARGET_ADDR_SPACE_ADDRESS_MODE
36171          (addr_space_t ADDRESS_SPACE)
36172     Define this to return the machine mode to use for addresses in
36173     ADDRESS_SPACE if the target supports named address spaces.  The
36174     default version of this hook returns 'Pmode' for the generic
36175     address space only.
36176
36177 -- Target Hook: bool TARGET_ADDR_SPACE_VALID_POINTER_MODE (enum
36178          machine_mode MODE, addr_space_t AS)
36179     Define this to return nonzero if the port can handle pointers with
36180     machine mode MODE to address space AS.  This target hook is the
36181     same as the 'TARGET_VALID_POINTER_MODE' target hook, except that it
36182     includes explicit named address space support.  The default version
36183     of this hook returns true for the modes returned by either the
36184     'TARGET_ADDR_SPACE_POINTER_MODE' or
36185     'TARGET_ADDR_SPACE_ADDRESS_MODE' target hooks for the given address
36186     space.
36187
36188 -- Target Hook: bool TARGET_ADDR_SPACE_LEGITIMATE_ADDRESS_P (enum
36189          machine_mode MODE, rtx EXP, bool STRICT, addr_space_t AS)
36190     Define this to return true if EXP is a valid address for mode MODE
36191     in the named address space AS.  The STRICT parameter says whether
36192     strict addressing is in effect after reload has finished.  This
36193     target hook is the same as the 'TARGET_LEGITIMATE_ADDRESS_P' target
36194     hook, except that it includes explicit named address space support.
36195
36196 -- Target Hook: rtx TARGET_ADDR_SPACE_LEGITIMIZE_ADDRESS (rtx X, rtx
36197          OLDX, enum machine_mode MODE, addr_space_t AS)
36198     Define this to modify an invalid address X to be a valid address
36199     with mode MODE in the named address space AS.  This target hook is
36200     the same as the 'TARGET_LEGITIMIZE_ADDRESS' target hook, except
36201     that it includes explicit named address space support.
36202
36203 -- Target Hook: bool TARGET_ADDR_SPACE_SUBSET_P (addr_space_t SUBSET,
36204          addr_space_t SUPERSET)
36205     Define this to return whether the SUBSET named address space is
36206     contained within the SUPERSET named address space.  Pointers to a
36207     named address space that is a subset of another named address space
36208     will be converted automatically without a cast if used together in
36209     arithmetic operations.  Pointers to a superset address space can be
36210     converted to pointers to a subset address space via explicit casts.
36211
36212 -- Target Hook: rtx TARGET_ADDR_SPACE_CONVERT (rtx OP, tree FROM_TYPE,
36213          tree TO_TYPE)
36214     Define this to convert the pointer expression represented by the
36215     RTL OP with type FROM_TYPE that points to a named address space to
36216     a new pointer expression with type TO_TYPE that points to a
36217     different named address space.  When this hook it called, it is
36218     guaranteed that one of the two address spaces is a subset of the
36219     other, as determined by the 'TARGET_ADDR_SPACE_SUBSET_P' target
36220     hook.
36221
36222
36223File: gccint.info,  Node: Misc,  Prev: Named Address Spaces,  Up: Target Macros
36224
3622517.31 Miscellaneous Parameters
36226==============================
36227
36228Here are several miscellaneous parameters.
36229
36230 -- Macro: HAS_LONG_COND_BRANCH
36231     Define this boolean macro to indicate whether or not your
36232     architecture has conditional branches that can span all of memory.
36233     It is used in conjunction with an optimization that partitions hot
36234     and cold basic blocks into separate sections of the executable.  If
36235     this macro is set to false, gcc will convert any conditional
36236     branches that attempt to cross between sections into unconditional
36237     branches or indirect jumps.
36238
36239 -- Macro: HAS_LONG_UNCOND_BRANCH
36240     Define this boolean macro to indicate whether or not your
36241     architecture has unconditional branches that can span all of
36242     memory.  It is used in conjunction with an optimization that
36243     partitions hot and cold basic blocks into separate sections of the
36244     executable.  If this macro is set to false, gcc will convert any
36245     unconditional branches that attempt to cross between sections into
36246     indirect jumps.
36247
36248 -- Macro: CASE_VECTOR_MODE
36249     An alias for a machine mode name.  This is the machine mode that
36250     elements of a jump-table should have.
36251
36252 -- Macro: CASE_VECTOR_SHORTEN_MODE (MIN_OFFSET, MAX_OFFSET, BODY)
36253     Optional: return the preferred mode for an 'addr_diff_vec' when the
36254     minimum and maximum offset are known.  If you define this, it
36255     enables extra code in branch shortening to deal with
36256     'addr_diff_vec'.  To make this work, you also have to define
36257     'INSN_ALIGN' and make the alignment for 'addr_diff_vec' explicit.
36258     The BODY argument is provided so that the offset_unsigned and scale
36259     flags can be updated.
36260
36261 -- Macro: CASE_VECTOR_PC_RELATIVE
36262     Define this macro to be a C expression to indicate when jump-tables
36263     should contain relative addresses.  You need not define this macro
36264     if jump-tables never contain relative addresses, or jump-tables
36265     should contain relative addresses only when '-fPIC' or '-fPIC' is
36266     in effect.
36267
36268 -- Target Hook: unsigned int TARGET_CASE_VALUES_THRESHOLD (void)
36269     This function return the smallest number of different values for
36270     which it is best to use a jump-table instead of a tree of
36271     conditional branches.  The default is four for machines with a
36272     'casesi' instruction and five otherwise.  This is best for most
36273     machines.
36274
36275 -- Macro: WORD_REGISTER_OPERATIONS
36276     Define this macro if operations between registers with integral
36277     mode smaller than a word are always performed on the entire
36278     register.  Most RISC machines have this property and most CISC
36279     machines do not.
36280
36281 -- Macro: LOAD_EXTEND_OP (MEM_MODE)
36282     Define this macro to be a C expression indicating when insns that
36283     read memory in MEM_MODE, an integral mode narrower than a word, set
36284     the bits outside of MEM_MODE to be either the sign-extension or the
36285     zero-extension of the data read.  Return 'SIGN_EXTEND' for values
36286     of MEM_MODE for which the insn sign-extends, 'ZERO_EXTEND' for
36287     which it zero-extends, and 'UNKNOWN' for other modes.
36288
36289     This macro is not called with MEM_MODE non-integral or with a width
36290     greater than or equal to 'BITS_PER_WORD', so you may return any
36291     value in this case.  Do not define this macro if it would always
36292     return 'UNKNOWN'.  On machines where this macro is defined, you
36293     will normally define it as the constant 'SIGN_EXTEND' or
36294     'ZERO_EXTEND'.
36295
36296     You may return a non-'UNKNOWN' value even if for some hard
36297     registers the sign extension is not performed, if for the
36298     'REGNO_REG_CLASS' of these hard registers
36299     'CANNOT_CHANGE_MODE_CLASS' returns nonzero when the FROM mode is
36300     MEM_MODE and the TO mode is any integral mode larger than this but
36301     not larger than 'word_mode'.
36302
36303     You must return 'UNKNOWN' if for some hard registers that allow
36304     this mode, 'CANNOT_CHANGE_MODE_CLASS' says that they cannot change
36305     to 'word_mode', but that they can change to another integral mode
36306     that is larger then MEM_MODE but still smaller than 'word_mode'.
36307
36308 -- Macro: SHORT_IMMEDIATES_SIGN_EXTEND
36309     Define this macro if loading short immediate values into registers
36310     sign extends.
36311
36312 -- Target Hook: unsigned int TARGET_MIN_DIVISIONS_FOR_RECIP_MUL (enum
36313          machine_mode MODE)
36314     When '-ffast-math' is in effect, GCC tries to optimize divisions by
36315     the same divisor, by turning them into multiplications by the
36316     reciprocal.  This target hook specifies the minimum number of
36317     divisions that should be there for GCC to perform the optimization
36318     for a variable of mode MODE.  The default implementation returns 3
36319     if the machine has an instruction for the division, and 2 if it
36320     does not.
36321
36322 -- Macro: MOVE_MAX
36323     The maximum number of bytes that a single instruction can move
36324     quickly between memory and registers or between two memory
36325     locations.
36326
36327 -- Macro: MAX_MOVE_MAX
36328     The maximum number of bytes that a single instruction can move
36329     quickly between memory and registers or between two memory
36330     locations.  If this is undefined, the default is 'MOVE_MAX'.
36331     Otherwise, it is the constant value that is the largest value that
36332     'MOVE_MAX' can have at run-time.
36333
36334 -- Macro: SHIFT_COUNT_TRUNCATED
36335     A C expression that is nonzero if on this machine the number of
36336     bits actually used for the count of a shift operation is equal to
36337     the number of bits needed to represent the size of the object being
36338     shifted.  When this macro is nonzero, the compiler will assume that
36339     it is safe to omit a sign-extend, zero-extend, and certain bitwise
36340     'and' instructions that truncates the count of a shift operation.
36341     On machines that have instructions that act on bit-fields at
36342     variable positions, which may include 'bit test' instructions, a
36343     nonzero 'SHIFT_COUNT_TRUNCATED' also enables deletion of
36344     truncations of the values that serve as arguments to bit-field
36345     instructions.
36346
36347     If both types of instructions truncate the count (for shifts) and
36348     position (for bit-field operations), or if no variable-position
36349     bit-field instructions exist, you should define this macro.
36350
36351     However, on some machines, such as the 80386 and the 680x0,
36352     truncation only applies to shift operations and not the (real or
36353     pretended) bit-field operations.  Define 'SHIFT_COUNT_TRUNCATED' to
36354     be zero on such machines.  Instead, add patterns to the 'md' file
36355     that include the implied truncation of the shift instructions.
36356
36357     You need not define this macro if it would always have the value of
36358     zero.
36359
36360 -- Target Hook: unsigned HOST_WIDE_INT TARGET_SHIFT_TRUNCATION_MASK
36361          (enum machine_mode MODE)
36362     This function describes how the standard shift patterns for MODE
36363     deal with shifts by negative amounts or by more than the width of
36364     the mode.  *Note shift patterns::.
36365
36366     On many machines, the shift patterns will apply a mask M to the
36367     shift count, meaning that a fixed-width shift of X by Y is
36368     equivalent to an arbitrary-width shift of X by Y & M.  If this is
36369     true for mode MODE, the function should return M, otherwise it
36370     should return 0.  A return value of 0 indicates that no particular
36371     behavior is guaranteed.
36372
36373     Note that, unlike 'SHIFT_COUNT_TRUNCATED', this function does _not_
36374     apply to general shift rtxes; it applies only to instructions that
36375     are generated by the named shift patterns.
36376
36377     The default implementation of this function returns
36378     'GET_MODE_BITSIZE (MODE) - 1' if 'SHIFT_COUNT_TRUNCATED' and 0
36379     otherwise.  This definition is always safe, but if
36380     'SHIFT_COUNT_TRUNCATED' is false, and some shift patterns
36381     nevertheless truncate the shift count, you may get better code by
36382     overriding it.
36383
36384 -- Macro: TRULY_NOOP_TRUNCATION (OUTPREC, INPREC)
36385     A C expression which is nonzero if on this machine it is safe to
36386     "convert" an integer of INPREC bits to one of OUTPREC bits (where
36387     OUTPREC is smaller than INPREC) by merely operating on it as if it
36388     had only OUTPREC bits.
36389
36390     On many machines, this expression can be 1.
36391
36392     When 'TRULY_NOOP_TRUNCATION' returns 1 for a pair of sizes for
36393     modes for which 'MODES_TIEABLE_P' is 0, suboptimal code can result.
36394     If this is the case, making 'TRULY_NOOP_TRUNCATION' return 0 in
36395     such cases may improve things.
36396
36397 -- Target Hook: int TARGET_MODE_REP_EXTENDED (enum machine_mode MODE,
36398          enum machine_mode REP_MODE)
36399     The representation of an integral mode can be such that the values
36400     are always extended to a wider integral mode.  Return 'SIGN_EXTEND'
36401     if values of MODE are represented in sign-extended form to
36402     REP_MODE.  Return 'UNKNOWN' otherwise.  (Currently, none of the
36403     targets use zero-extended representation this way so unlike
36404     'LOAD_EXTEND_OP', 'TARGET_MODE_REP_EXTENDED' is expected to return
36405     either 'SIGN_EXTEND' or 'UNKNOWN'.  Also no target extends MODE to
36406     REP_MODE so that REP_MODE is not the next widest integral mode and
36407     currently we take advantage of this fact.)
36408
36409     Similarly to 'LOAD_EXTEND_OP' you may return a non-'UNKNOWN' value
36410     even if the extension is not performed on certain hard registers as
36411     long as for the 'REGNO_REG_CLASS' of these hard registers
36412     'CANNOT_CHANGE_MODE_CLASS' returns nonzero.
36413
36414     Note that 'TARGET_MODE_REP_EXTENDED' and 'LOAD_EXTEND_OP' describe
36415     two related properties.  If you define 'TARGET_MODE_REP_EXTENDED
36416     (mode, word_mode)' you probably also want to define 'LOAD_EXTEND_OP
36417     (mode)' to return the same type of extension.
36418
36419     In order to enforce the representation of 'mode',
36420     'TRULY_NOOP_TRUNCATION' should return false when truncating to
36421     'mode'.
36422
36423 -- Macro: STORE_FLAG_VALUE
36424     A C expression describing the value returned by a comparison
36425     operator with an integral mode and stored by a store-flag
36426     instruction ('cstoreMODE4') when the condition is true.  This
36427     description must apply to _all_ the 'cstoreMODE4' patterns and all
36428     the comparison operators whose results have a 'MODE_INT' mode.
36429
36430     A value of 1 or -1 means that the instruction implementing the
36431     comparison operator returns exactly 1 or -1 when the comparison is
36432     true and 0 when the comparison is false.  Otherwise, the value
36433     indicates which bits of the result are guaranteed to be 1 when the
36434     comparison is true.  This value is interpreted in the mode of the
36435     comparison operation, which is given by the mode of the first
36436     operand in the 'cstoreMODE4' pattern.  Either the low bit or the
36437     sign bit of 'STORE_FLAG_VALUE' be on.  Presently, only those bits
36438     are used by the compiler.
36439
36440     If 'STORE_FLAG_VALUE' is neither 1 or -1, the compiler will
36441     generate code that depends only on the specified bits.  It can also
36442     replace comparison operators with equivalent operations if they
36443     cause the required bits to be set, even if the remaining bits are
36444     undefined.  For example, on a machine whose comparison operators
36445     return an 'SImode' value and where 'STORE_FLAG_VALUE' is defined as
36446     '0x80000000', saying that just the sign bit is relevant, the
36447     expression
36448
36449          (ne:SI (and:SI X (const_int POWER-OF-2)) (const_int 0))
36450
36451     can be converted to
36452
36453          (ashift:SI X (const_int N))
36454
36455     where N is the appropriate shift count to move the bit being tested
36456     into the sign bit.
36457
36458     There is no way to describe a machine that always sets the
36459     low-order bit for a true value, but does not guarantee the value of
36460     any other bits, but we do not know of any machine that has such an
36461     instruction.  If you are trying to port GCC to such a machine,
36462     include an instruction to perform a logical-and of the result with
36463     1 in the pattern for the comparison operators and let us know at
36464     <[email protected]>.
36465
36466     Often, a machine will have multiple instructions that obtain a
36467     value from a comparison (or the condition codes).  Here are rules
36468     to guide the choice of value for 'STORE_FLAG_VALUE', and hence the
36469     instructions to be used:
36470
36471        * Use the shortest sequence that yields a valid definition for
36472          'STORE_FLAG_VALUE'.  It is more efficient for the compiler to
36473          "normalize" the value (convert it to, e.g., 1 or 0) than for
36474          the comparison operators to do so because there may be
36475          opportunities to combine the normalization with other
36476          operations.
36477
36478        * For equal-length sequences, use a value of 1 or -1, with -1
36479          being slightly preferred on machines with expensive jumps and
36480          1 preferred on other machines.
36481
36482        * As a second choice, choose a value of '0x80000001' if
36483          instructions exist that set both the sign and low-order bits
36484          but do not define the others.
36485
36486        * Otherwise, use a value of '0x80000000'.
36487
36488     Many machines can produce both the value chosen for
36489     'STORE_FLAG_VALUE' and its negation in the same number of
36490     instructions.  On those machines, you should also define a pattern
36491     for those cases, e.g., one matching
36492
36493          (set A (neg:M (ne:M B C)))
36494
36495     Some machines can also perform 'and' or 'plus' operations on
36496     condition code values with less instructions than the corresponding
36497     'cstoreMODE4' insn followed by 'and' or 'plus'.  On those machines,
36498     define the appropriate patterns.  Use the names 'incscc' and
36499     'decscc', respectively, for the patterns which perform 'plus' or
36500     'minus' operations on condition code values.  See 'rs6000.md' for
36501     some examples.  The GNU Superoptimizer can be used to find such
36502     instruction sequences on other machines.
36503
36504     If this macro is not defined, the default value, 1, is used.  You
36505     need not define 'STORE_FLAG_VALUE' if the machine has no store-flag
36506     instructions, or if the value generated by these instructions is 1.
36507
36508 -- Macro: FLOAT_STORE_FLAG_VALUE (MODE)
36509     A C expression that gives a nonzero 'REAL_VALUE_TYPE' value that is
36510     returned when comparison operators with floating-point results are
36511     true.  Define this macro on machines that have comparison
36512     operations that return floating-point values.  If there are no such
36513     operations, do not define this macro.
36514
36515 -- Macro: VECTOR_STORE_FLAG_VALUE (MODE)
36516     A C expression that gives a rtx representing the nonzero true
36517     element for vector comparisons.  The returned rtx should be valid
36518     for the inner mode of MODE which is guaranteed to be a vector mode.
36519     Define this macro on machines that have vector comparison
36520     operations that return a vector result.  If there are no such
36521     operations, do not define this macro.  Typically, this macro is
36522     defined as 'const1_rtx' or 'constm1_rtx'.  This macro may return
36523     'NULL_RTX' to prevent the compiler optimizing such vector
36524     comparison operations for the given mode.
36525
36526 -- Macro: CLZ_DEFINED_VALUE_AT_ZERO (MODE, VALUE)
36527 -- Macro: CTZ_DEFINED_VALUE_AT_ZERO (MODE, VALUE)
36528     A C expression that indicates whether the architecture defines a
36529     value for 'clz' or 'ctz' with a zero operand.  A result of '0'
36530     indicates the value is undefined.  If the value is defined for only
36531     the RTL expression, the macro should evaluate to '1'; if the value
36532     applies also to the corresponding optab entry (which is normally
36533     the case if it expands directly into the corresponding RTL), then
36534     the macro should evaluate to '2'.  In the cases where the value is
36535     defined, VALUE should be set to this value.
36536
36537     If this macro is not defined, the value of 'clz' or 'ctz' at zero
36538     is assumed to be undefined.
36539
36540     This macro must be defined if the target's expansion for 'ffs'
36541     relies on a particular value to get correct results.  Otherwise it
36542     is not necessary, though it may be used to optimize some corner
36543     cases, and to provide a default expansion for the 'ffs' optab.
36544
36545     Note that regardless of this macro the "definedness" of 'clz' and
36546     'ctz' at zero do _not_ extend to the builtin functions visible to
36547     the user.  Thus one may be free to adjust the value at will to
36548     match the target expansion of these operations without fear of
36549     breaking the API.
36550
36551 -- Macro: Pmode
36552     An alias for the machine mode for pointers.  On most machines,
36553     define this to be the integer mode corresponding to the width of a
36554     hardware pointer; 'SImode' on 32-bit machine or 'DImode' on 64-bit
36555     machines.  On some machines you must define this to be one of the
36556     partial integer modes, such as 'PSImode'.
36557
36558     The width of 'Pmode' must be at least as large as the value of
36559     'POINTER_SIZE'.  If it is not equal, you must define the macro
36560     'POINTERS_EXTEND_UNSIGNED' to specify how pointers are extended to
36561     'Pmode'.
36562
36563 -- Macro: FUNCTION_MODE
36564     An alias for the machine mode used for memory references to
36565     functions being called, in 'call' RTL expressions.  On most CISC
36566     machines, where an instruction can begin at any byte address, this
36567     should be 'QImode'.  On most RISC machines, where all instructions
36568     have fixed size and alignment, this should be a mode with the same
36569     size and alignment as the machine instruction words - typically
36570     'SImode' or 'HImode'.
36571
36572 -- Macro: STDC_0_IN_SYSTEM_HEADERS
36573     In normal operation, the preprocessor expands '__STDC__' to the
36574     constant 1, to signify that GCC conforms to ISO Standard C.  On
36575     some hosts, like Solaris, the system compiler uses a different
36576     convention, where '__STDC__' is normally 0, but is 1 if the user
36577     specifies strict conformance to the C Standard.
36578
36579     Defining 'STDC_0_IN_SYSTEM_HEADERS' makes GNU CPP follows the host
36580     convention when processing system header files, but when processing
36581     user files '__STDC__' will always expand to 1.
36582
36583 -- C Target Hook: const char * TARGET_C_PREINCLUDE (void)
36584     Define this hook to return the name of a header file to be included
36585     at the start of all compilations, as if it had been included with
36586     '#include <FILE>'.  If this hook returns 'NULL', or is not defined,
36587     or the header is not found, or if the user specifies
36588     '-ffreestanding' or '-nostdinc', no header is included.
36589
36590     This hook can be used together with a header provided by the system
36591     C library to implement ISO C requirements for certain macros to be
36592     predefined that describe properties of the whole implementation
36593     rather than just the compiler.
36594
36595 -- Macro: NO_IMPLICIT_EXTERN_C
36596     Define this macro if the system header files support C++ as well as
36597     C.  This macro inhibits the usual method of using system header
36598     files in C++, which is to pretend that the file's contents are
36599     enclosed in 'extern "C" {...}'.
36600
36601 -- Macro: REGISTER_TARGET_PRAGMAS ()
36602     Define this macro if you want to implement any target-specific
36603     pragmas.  If defined, it is a C expression which makes a series of
36604     calls to 'c_register_pragma' or 'c_register_pragma_with_expansion'
36605     for each pragma.  The macro may also do any setup required for the
36606     pragmas.
36607
36608     The primary reason to define this macro is to provide compatibility
36609     with other compilers for the same target.  In general, we
36610     discourage definition of target-specific pragmas for GCC.
36611
36612     If the pragma can be implemented by attributes then you should
36613     consider defining the target hook 'TARGET_INSERT_ATTRIBUTES' as
36614     well.
36615
36616     Preprocessor macros that appear on pragma lines are not expanded.
36617     All '#pragma' directives that do not match any registered pragma
36618     are silently ignored, unless the user specifies
36619     '-Wunknown-pragmas'.
36620
36621 -- Function: void c_register_pragma (const char *SPACE, const char
36622          *NAME, void (*CALLBACK) (struct cpp_reader *))
36623 -- Function: void c_register_pragma_with_expansion (const char *SPACE,
36624          const char *NAME, void (*CALLBACK) (struct cpp_reader *))
36625
36626     Each call to 'c_register_pragma' or
36627     'c_register_pragma_with_expansion' establishes one pragma.  The
36628     CALLBACK routine will be called when the preprocessor encounters a
36629     pragma of the form
36630
36631          #pragma [SPACE] NAME ...
36632
36633     SPACE is the case-sensitive namespace of the pragma, or 'NULL' to
36634     put the pragma in the global namespace.  The callback routine
36635     receives PFILE as its first argument, which can be passed on to
36636     cpplib's functions if necessary.  You can lex tokens after the NAME
36637     by calling 'pragma_lex'.  Tokens that are not read by the callback
36638     will be silently ignored.  The end of the line is indicated by a
36639     token of type 'CPP_EOF'.  Macro expansion occurs on the arguments
36640     of pragmas registered with 'c_register_pragma_with_expansion' but
36641     not on the arguments of pragmas registered with
36642     'c_register_pragma'.
36643
36644     Note that the use of 'pragma_lex' is specific to the C and C++
36645     compilers.  It will not work in the Java or Fortran compilers, or
36646     any other language compilers for that matter.  Thus if 'pragma_lex'
36647     is going to be called from target-specific code, it must only be
36648     done so when building the C and C++ compilers.  This can be done by
36649     defining the variables 'c_target_objs' and 'cxx_target_objs' in the
36650     target entry in the 'config.gcc' file.  These variables should name
36651     the target-specific, language-specific object file which contains
36652     the code that uses 'pragma_lex'.  Note it will also be necessary to
36653     add a rule to the makefile fragment pointed to by 'tmake_file' that
36654     shows how to build this object file.
36655
36656 -- Macro: HANDLE_PRAGMA_PACK_WITH_EXPANSION
36657     Define this macro if macros should be expanded in the arguments of
36658     '#pragma pack'.
36659
36660 -- Macro: TARGET_DEFAULT_PACK_STRUCT
36661     If your target requires a structure packing default other than 0
36662     (meaning the machine default), define this macro to the necessary
36663     value (in bytes).  This must be a value that would also be valid to
36664     use with '#pragma pack()' (that is, a small power of two).
36665
36666 -- Macro: DOLLARS_IN_IDENTIFIERS
36667     Define this macro to control use of the character '$' in identifier
36668     names for the C family of languages.  0 means '$' is not allowed by
36669     default; 1 means it is allowed.  1 is the default; there is no need
36670     to define this macro in that case.
36671
36672 -- Macro: INSN_SETS_ARE_DELAYED (INSN)
36673     Define this macro as a C expression that is nonzero if it is safe
36674     for the delay slot scheduler to place instructions in the delay
36675     slot of INSN, even if they appear to use a resource set or
36676     clobbered in INSN.  INSN is always a 'jump_insn' or an 'insn'; GCC
36677     knows that every 'call_insn' has this behavior.  On machines where
36678     some 'insn' or 'jump_insn' is really a function call and hence has
36679     this behavior, you should define this macro.
36680
36681     You need not define this macro if it would always return zero.
36682
36683 -- Macro: INSN_REFERENCES_ARE_DELAYED (INSN)
36684     Define this macro as a C expression that is nonzero if it is safe
36685     for the delay slot scheduler to place instructions in the delay
36686     slot of INSN, even if they appear to set or clobber a resource
36687     referenced in INSN.  INSN is always a 'jump_insn' or an 'insn'.  On
36688     machines where some 'insn' or 'jump_insn' is really a function call
36689     and its operands are registers whose use is actually in the
36690     subroutine it calls, you should define this macro.  Doing so allows
36691     the delay slot scheduler to move instructions which copy arguments
36692     into the argument registers into the delay slot of INSN.
36693
36694     You need not define this macro if it would always return zero.
36695
36696 -- Macro: MULTIPLE_SYMBOL_SPACES
36697     Define this macro as a C expression that is nonzero if, in some
36698     cases, global symbols from one translation unit may not be bound to
36699     undefined symbols in another translation unit without user
36700     intervention.  For instance, under Microsoft Windows symbols must
36701     be explicitly imported from shared libraries (DLLs).
36702
36703     You need not define this macro if it would always evaluate to zero.
36704
36705 -- Target Hook: tree TARGET_MD_ASM_CLOBBERS (tree OUTPUTS, tree INPUTS,
36706          tree CLOBBERS)
36707     This target hook should add to CLOBBERS 'STRING_CST' trees for any
36708     hard regs the port wishes to automatically clobber for an asm.  It
36709     should return the result of the last 'tree_cons' used to add a
36710     clobber.  The OUTPUTS, INPUTS and CLOBBER lists are the
36711     corresponding parameters to the asm and may be inspected to avoid
36712     clobbering a register that is an input or output of the asm.  You
36713     can use 'tree_overlaps_hard_reg_set', declared in 'tree.h', to test
36714     for overlap with regards to asm-declared registers.
36715
36716 -- Macro: MATH_LIBRARY
36717     Define this macro as a C string constant for the linker argument to
36718     link in the system math library, minus the initial '"-l"', or '""'
36719     if the target does not have a separate math library.
36720
36721     You need only define this macro if the default of '"m"' is wrong.
36722
36723 -- Macro: LIBRARY_PATH_ENV
36724     Define this macro as a C string constant for the environment
36725     variable that specifies where the linker should look for libraries.
36726
36727     You need only define this macro if the default of '"LIBRARY_PATH"'
36728     is wrong.
36729
36730 -- Macro: TARGET_POSIX_IO
36731     Define this macro if the target supports the following POSIX file
36732     functions, access, mkdir and file locking with fcntl / F_SETLKW.
36733     Defining 'TARGET_POSIX_IO' will enable the test coverage code to
36734     use file locking when exiting a program, which avoids race
36735     conditions if the program has forked.  It will also create
36736     directories at run-time for cross-profiling.
36737
36738 -- Macro: MAX_CONDITIONAL_EXECUTE
36739
36740     A C expression for the maximum number of instructions to execute
36741     via conditional execution instructions instead of a branch.  A
36742     value of 'BRANCH_COST'+1 is the default if the machine does not use
36743     cc0, and 1 if it does use cc0.
36744
36745 -- Macro: IFCVT_MODIFY_TESTS (CE_INFO, TRUE_EXPR, FALSE_EXPR)
36746     Used if the target needs to perform machine-dependent modifications
36747     on the conditionals used for turning basic blocks into
36748     conditionally executed code.  CE_INFO points to a data structure,
36749     'struct ce_if_block', which contains information about the
36750     currently processed blocks.  TRUE_EXPR and FALSE_EXPR are the tests
36751     that are used for converting the then-block and the else-block,
36752     respectively.  Set either TRUE_EXPR or FALSE_EXPR to a null pointer
36753     if the tests cannot be converted.
36754
36755 -- Macro: IFCVT_MODIFY_MULTIPLE_TESTS (CE_INFO, BB, TRUE_EXPR,
36756          FALSE_EXPR)
36757     Like 'IFCVT_MODIFY_TESTS', but used when converting more
36758     complicated if-statements into conditions combined by 'and' and
36759     'or' operations.  BB contains the basic block that contains the
36760     test that is currently being processed and about to be turned into
36761     a condition.
36762
36763 -- Macro: IFCVT_MODIFY_INSN (CE_INFO, PATTERN, INSN)
36764     A C expression to modify the PATTERN of an INSN that is to be
36765     converted to conditional execution format.  CE_INFO points to a
36766     data structure, 'struct ce_if_block', which contains information
36767     about the currently processed blocks.
36768
36769 -- Macro: IFCVT_MODIFY_FINAL (CE_INFO)
36770     A C expression to perform any final machine dependent modifications
36771     in converting code to conditional execution.  The involved basic
36772     blocks can be found in the 'struct ce_if_block' structure that is
36773     pointed to by CE_INFO.
36774
36775 -- Macro: IFCVT_MODIFY_CANCEL (CE_INFO)
36776     A C expression to cancel any machine dependent modifications in
36777     converting code to conditional execution.  The involved basic
36778     blocks can be found in the 'struct ce_if_block' structure that is
36779     pointed to by CE_INFO.
36780
36781 -- Macro: IFCVT_MACHDEP_INIT (CE_INFO)
36782     A C expression to initialize any machine specific data for
36783     if-conversion of the if-block in the 'struct ce_if_block' structure
36784     that is pointed to by CE_INFO.
36785
36786 -- Target Hook: void TARGET_MACHINE_DEPENDENT_REORG (void)
36787     If non-null, this hook performs a target-specific pass over the
36788     instruction stream.  The compiler will run it at all optimization
36789     levels, just before the point at which it normally does
36790     delayed-branch scheduling.
36791
36792     The exact purpose of the hook varies from target to target.  Some
36793     use it to do transformations that are necessary for correctness,
36794     such as laying out in-function constant pools or avoiding hardware
36795     hazards.  Others use it as an opportunity to do some
36796     machine-dependent optimizations.
36797
36798     You need not implement the hook if it has nothing to do.  The
36799     default definition is null.
36800
36801 -- Target Hook: void TARGET_INIT_BUILTINS (void)
36802     Define this hook if you have any machine-specific built-in
36803     functions that need to be defined.  It should be a function that
36804     performs the necessary setup.
36805
36806     Machine specific built-in functions can be useful to expand special
36807     machine instructions that would otherwise not normally be generated
36808     because they have no equivalent in the source language (for
36809     example, SIMD vector instructions or prefetch instructions).
36810
36811     To create a built-in function, call the function
36812     'lang_hooks.builtin_function' which is defined by the language
36813     front end.  You can use any type nodes set up by
36814     'build_common_tree_nodes'; only language front ends that use those
36815     two functions will call 'TARGET_INIT_BUILTINS'.
36816
36817 -- Target Hook: tree TARGET_BUILTIN_DECL (unsigned CODE, bool
36818          INITIALIZE_P)
36819     Define this hook if you have any machine-specific built-in
36820     functions that need to be defined.  It should be a function that
36821     returns the builtin function declaration for the builtin function
36822     code CODE.  If there is no such builtin and it cannot be
36823     initialized at this time if INITIALIZE_P is true the function
36824     should return 'NULL_TREE'.  If CODE is out of range the function
36825     should return 'error_mark_node'.
36826
36827 -- Target Hook: rtx TARGET_EXPAND_BUILTIN (tree EXP, rtx TARGET, rtx
36828          SUBTARGET, enum machine_mode MODE, int IGNORE)
36829
36830     Expand a call to a machine specific built-in function that was set
36831     up by 'TARGET_INIT_BUILTINS'.  EXP is the expression for the
36832     function call; the result should go to TARGET if that is
36833     convenient, and have mode MODE if that is convenient.  SUBTARGET
36834     may be used as the target for computing one of EXP's operands.
36835     IGNORE is nonzero if the value is to be ignored.  This function
36836     should return the result of the call to the built-in function.
36837
36838 -- Target Hook: tree TARGET_RESOLVE_OVERLOADED_BUILTIN (unsigned int
36839          LOC, tree FNDECL, void *ARGLIST)
36840     Select a replacement for a machine specific built-in function that
36841     was set up by 'TARGET_INIT_BUILTINS'.  This is done _before_
36842     regular type checking, and so allows the target to implement a
36843     crude form of function overloading.  FNDECL is the declaration of
36844     the built-in function.  ARGLIST is the list of arguments passed to
36845     the built-in function.  The result is a complete expression that
36846     implements the operation, usually another 'CALL_EXPR'.  ARGLIST
36847     really has type 'VEC(tree,gc)*'
36848
36849 -- Target Hook: tree TARGET_FOLD_BUILTIN (tree FNDECL, int N_ARGS, tree
36850          *ARGP, bool IGNORE)
36851     Fold a call to a machine specific built-in function that was set up
36852     by 'TARGET_INIT_BUILTINS'.  FNDECL is the declaration of the
36853     built-in function.  N_ARGS is the number of arguments passed to the
36854     function; the arguments themselves are pointed to by ARGP.  The
36855     result is another tree containing a simplified expression for the
36856     call's result.  If IGNORE is true the value will be ignored.
36857
36858 -- Target Hook: int TARGET_COMPARE_VERSION_PRIORITY (tree DECL1, tree
36859          DECL2)
36860     This hook is used to compare the target attributes in two functions
36861     to determine which function's features get higher priority.  This
36862     is used during function multi-versioning to figure out the order in
36863     which two versions must be dispatched.  A function version with a
36864     higher priority is checked for dispatching earlier.  DECL1 and
36865     DECL2 are the two function decls that will be compared.
36866
36867 -- Target Hook: tree TARGET_GET_FUNCTION_VERSIONS_DISPATCHER (void
36868          *DECL)
36869     This hook is used to get the dispatcher function for a set of
36870     function versions.  The dispatcher function is called to invoke the
36871     right function version at run-time.  DECL is one version from a set
36872     of semantically identical versions.
36873
36874 -- Target Hook: tree TARGET_GENERATE_VERSION_DISPATCHER_BODY (void
36875          *ARG)
36876     This hook is used to generate the dispatcher logic to invoke the
36877     right function version at run-time for a given set of function
36878     versions.  ARG points to the callgraph node of the dispatcher
36879     function whose body must be generated.
36880
36881 -- Target Hook: const char * TARGET_INVALID_WITHIN_DOLOOP (const_rtx
36882          INSN)
36883
36884     Take an instruction in INSN and return NULL if it is valid within a
36885     low-overhead loop, otherwise return a string explaining why doloop
36886     could not be applied.
36887
36888     Many targets use special registers for low-overhead looping.  For
36889     any instruction that clobbers these this function should return a
36890     string indicating the reason why the doloop could not be applied.
36891     By default, the RTL loop optimizer does not use a present doloop
36892     pattern for loops containing function calls or branch on table
36893     instructions.
36894
36895 -- Target Hook: bool TARGET_LEGITIMATE_COMBINED_INSN (rtx INSN)
36896     Take an instruction in INSN and return 'false' if the instruction
36897     is not appropriate as a combination of two or more instructions.
36898     The default is to accept all instructions.
36899
36900 -- Macro: MD_CAN_REDIRECT_BRANCH (BRANCH1, BRANCH2)
36901
36902     Take a branch insn in BRANCH1 and another in BRANCH2.  Return true
36903     if redirecting BRANCH1 to the destination of BRANCH2 is possible.
36904
36905     On some targets, branches may have a limited range.  Optimizing the
36906     filling of delay slots can result in branches being redirected, and
36907     this may in turn cause a branch offset to overflow.
36908
36909 -- Target Hook: bool TARGET_CAN_FOLLOW_JUMP (const_rtx FOLLOWER,
36910          const_rtx FOLLOWEE)
36911     FOLLOWER and FOLLOWEE are JUMP_INSN instructions; return true if
36912     FOLLOWER may be modified to follow FOLLOWEE; false, if it can't.
36913     For example, on some targets, certain kinds of branches can't be
36914     made to follow through a hot/cold partitioning.
36915
36916 -- Target Hook: bool TARGET_COMMUTATIVE_P (const_rtx X, int OUTER_CODE)
36917     This target hook returns 'true' if X is considered to be
36918     commutative.  Usually, this is just COMMUTATIVE_P (X), but the HP
36919     PA doesn't consider PLUS to be commutative inside a MEM.
36920     OUTER_CODE is the rtx code of the enclosing rtl, if known,
36921     otherwise it is UNKNOWN.
36922
36923 -- Target Hook: rtx TARGET_ALLOCATE_INITIAL_VALUE (rtx HARD_REG)
36924
36925     When the initial value of a hard register has been copied in a
36926     pseudo register, it is often not necessary to actually allocate
36927     another register to this pseudo register, because the original hard
36928     register or a stack slot it has been saved into can be used.
36929     'TARGET_ALLOCATE_INITIAL_VALUE' is called at the start of register
36930     allocation once for each hard register that had its initial value
36931     copied by using 'get_func_hard_reg_initial_val' or
36932     'get_hard_reg_initial_val'.  Possible values are 'NULL_RTX', if you
36933     don't want to do any special allocation, a 'REG' rtx--that would
36934     typically be the hard register itself, if it is known not to be
36935     clobbered--or a 'MEM'.  If you are returning a 'MEM', this is only
36936     a hint for the allocator; it might decide to use another register
36937     anyways.  You may use 'current_function_is_leaf' or 'REG_N_SETS' in
36938     the hook to determine if the hard register in question will not be
36939     clobbered.  The default value of this hook is 'NULL', which
36940     disables any special allocation.
36941
36942 -- Target Hook: int TARGET_UNSPEC_MAY_TRAP_P (const_rtx X, unsigned
36943          FLAGS)
36944     This target hook returns nonzero if X, an 'unspec' or
36945     'unspec_volatile' operation, might cause a trap.  Targets can use
36946     this hook to enhance precision of analysis for 'unspec' and
36947     'unspec_volatile' operations.  You may call 'may_trap_p_1' to
36948     analyze inner elements of X in which case FLAGS should be passed
36949     along.
36950
36951 -- Target Hook: void TARGET_SET_CURRENT_FUNCTION (tree DECL)
36952     The compiler invokes this hook whenever it changes its current
36953     function context ('cfun').  You can define this function if the
36954     back end needs to perform any initialization or reset actions on a
36955     per-function basis.  For example, it may be used to implement
36956     function attributes that affect register usage or code generation
36957     patterns.  The argument DECL is the declaration for the new
36958     function context, and may be null to indicate that the compiler has
36959     left a function context and is returning to processing at the top
36960     level.  The default hook function does nothing.
36961
36962     GCC sets 'cfun' to a dummy function context during initialization
36963     of some parts of the back end.  The hook function is not invoked in
36964     this situation; you need not worry about the hook being invoked
36965     recursively, or when the back end is in a partially-initialized
36966     state.  'cfun' might be 'NULL' to indicate processing at top level,
36967     outside of any function scope.
36968
36969 -- Macro: TARGET_OBJECT_SUFFIX
36970     Define this macro to be a C string representing the suffix for
36971     object files on your target machine.  If you do not define this
36972     macro, GCC will use '.o' as the suffix for object files.
36973
36974 -- Macro: TARGET_EXECUTABLE_SUFFIX
36975     Define this macro to be a C string representing the suffix to be
36976     automatically added to executable files on your target machine.  If
36977     you do not define this macro, GCC will use the null string as the
36978     suffix for executable files.
36979
36980 -- Macro: COLLECT_EXPORT_LIST
36981     If defined, 'collect2' will scan the individual object files
36982     specified on its command line and create an export list for the
36983     linker.  Define this macro for systems like AIX, where the linker
36984     discards object files that are not referenced from 'main' and uses
36985     export lists.
36986
36987 -- Macro: MODIFY_JNI_METHOD_CALL (MDECL)
36988     Define this macro to a C expression representing a variant of the
36989     method call MDECL, if Java Native Interface (JNI) methods must be
36990     invoked differently from other methods on your target.  For
36991     example, on 32-bit Microsoft Windows, JNI methods must be invoked
36992     using the 'stdcall' calling convention and this macro is then
36993     defined as this expression:
36994
36995          build_type_attribute_variant (MDECL,
36996                                        build_tree_list
36997                                        (get_identifier ("stdcall"),
36998                                         NULL))
36999
37000 -- Target Hook: bool TARGET_CANNOT_MODIFY_JUMPS_P (void)
37001     This target hook returns 'true' past the point in which new jump
37002     instructions could be created.  On machines that require a register
37003     for every jump such as the SHmedia ISA of SH5, this point would
37004     typically be reload, so this target hook should be defined to a
37005     function such as:
37006
37007          static bool
37008          cannot_modify_jumps_past_reload_p ()
37009          {
37010            return (reload_completed || reload_in_progress);
37011          }
37012
37013 -- Target Hook: reg_class_t TARGET_BRANCH_TARGET_REGISTER_CLASS (void)
37014     This target hook returns a register class for which branch target
37015     register optimizations should be applied.  All registers in this
37016     class should be usable interchangeably.  After reload, registers in
37017     this class will be re-allocated and loads will be hoisted out of
37018     loops and be subjected to inter-block scheduling.
37019
37020 -- Target Hook: bool TARGET_BRANCH_TARGET_REGISTER_CALLEE_SAVED (bool
37021          AFTER_PROLOGUE_EPILOGUE_GEN)
37022     Branch target register optimization will by default exclude
37023     callee-saved registers that are not already live during the current
37024     function; if this target hook returns true, they will be included.
37025     The target code must than make sure that all target registers in
37026     the class returned by 'TARGET_BRANCH_TARGET_REGISTER_CLASS' that
37027     might need saving are saved.  AFTER_PROLOGUE_EPILOGUE_GEN indicates
37028     if prologues and epilogues have already been generated.  Note, even
37029     if you only return true when AFTER_PROLOGUE_EPILOGUE_GEN is false,
37030     you still are likely to have to make special provisions in
37031     'INITIAL_ELIMINATION_OFFSET' to reserve space for caller-saved
37032     target registers.
37033
37034 -- Target Hook: bool TARGET_HAVE_CONDITIONAL_EXECUTION (void)
37035     This target hook returns true if the target supports conditional
37036     execution.  This target hook is required only when the target has
37037     several different modes and they have different conditional
37038     execution capability, such as ARM.
37039
37040 -- Target Hook: unsigned TARGET_LOOP_UNROLL_ADJUST (unsigned NUNROLL,
37041          struct loop *LOOP)
37042     This target hook returns a new value for the number of times LOOP
37043     should be unrolled.  The parameter NUNROLL is the number of times
37044     the loop is to be unrolled.  The parameter LOOP is a pointer to the
37045     loop, which is going to be checked for unrolling.  This target hook
37046     is required only when the target has special constraints like
37047     maximum number of memory accesses.
37048
37049 -- Macro: POWI_MAX_MULTS
37050     If defined, this macro is interpreted as a signed integer C
37051     expression that specifies the maximum number of floating point
37052     multiplications that should be emitted when expanding
37053     exponentiation by an integer constant inline.  When this value is
37054     defined, exponentiation requiring more than this number of
37055     multiplications is implemented by calling the system library's
37056     'pow', 'powf' or 'powl' routines.  The default value places no
37057     upper bound on the multiplication count.
37058
37059 -- Macro: void TARGET_EXTRA_INCLUDES (const char *SYSROOT, const char
37060          *IPREFIX, int STDINC)
37061     This target hook should register any extra include files for the
37062     target.  The parameter STDINC indicates if normal include files are
37063     present.  The parameter SYSROOT is the system root directory.  The
37064     parameter IPREFIX is the prefix for the gcc directory.
37065
37066 -- Macro: void TARGET_EXTRA_PRE_INCLUDES (const char *SYSROOT, const
37067          char *IPREFIX, int STDINC)
37068     This target hook should register any extra include files for the
37069     target before any standard headers.  The parameter STDINC indicates
37070     if normal include files are present.  The parameter SYSROOT is the
37071     system root directory.  The parameter IPREFIX is the prefix for the
37072     gcc directory.
37073
37074 -- Macro: void TARGET_OPTF (char *PATH)
37075     This target hook should register special include paths for the
37076     target.  The parameter PATH is the include to register.  On Darwin
37077     systems, this is used for Framework includes, which have semantics
37078     that are different from '-I'.
37079
37080 -- Macro: bool TARGET_USE_LOCAL_THUNK_ALIAS_P (tree FNDECL)
37081     This target macro returns 'true' if it is safe to use a local alias
37082     for a virtual function FNDECL when constructing thunks, 'false'
37083     otherwise.  By default, the macro returns 'true' for all functions,
37084     if a target supports aliases (i.e. defines 'ASM_OUTPUT_DEF'),
37085     'false' otherwise,
37086
37087 -- Macro: TARGET_FORMAT_TYPES
37088     If defined, this macro is the name of a global variable containing
37089     target-specific format checking information for the '-Wformat'
37090     option.  The default is to have no target-specific format checks.
37091
37092 -- Macro: TARGET_N_FORMAT_TYPES
37093     If defined, this macro is the number of entries in
37094     'TARGET_FORMAT_TYPES'.
37095
37096 -- Macro: TARGET_OVERRIDES_FORMAT_ATTRIBUTES
37097     If defined, this macro is the name of a global variable containing
37098     target-specific format overrides for the '-Wformat' option.  The
37099     default is to have no target-specific format overrides.  If
37100     defined, 'TARGET_FORMAT_TYPES' must be defined, too.
37101
37102 -- Macro: TARGET_OVERRIDES_FORMAT_ATTRIBUTES_COUNT
37103     If defined, this macro specifies the number of entries in
37104     'TARGET_OVERRIDES_FORMAT_ATTRIBUTES'.
37105
37106 -- Macro: TARGET_OVERRIDES_FORMAT_INIT
37107     If defined, this macro specifies the optional initialization
37108     routine for target specific customizations of the system printf and
37109     scanf formatter settings.
37110
37111 -- Target Hook: bool TARGET_RELAXED_ORDERING
37112     If set to 'true', means that the target's memory model does not
37113     guarantee that loads which do not depend on one another will access
37114     main memory in the order of the instruction stream; if ordering is
37115     important, an explicit memory barrier must be used.  This is true
37116     of many recent processors which implement a policy of "relaxed,"
37117     "weak," or "release" memory consistency, such as Alpha, PowerPC,
37118     and ia64.  The default is 'false'.
37119
37120 -- Target Hook: const char * TARGET_INVALID_ARG_FOR_UNPROTOTYPED_FN
37121          (const_tree TYPELIST, const_tree FUNCDECL, const_tree VAL)
37122     If defined, this macro returns the diagnostic message when it is
37123     illegal to pass argument VAL to function FUNCDECL with prototype
37124     TYPELIST.
37125
37126 -- Target Hook: const char * TARGET_INVALID_CONVERSION (const_tree
37127          FROMTYPE, const_tree TOTYPE)
37128     If defined, this macro returns the diagnostic message when it is
37129     invalid to convert from FROMTYPE to TOTYPE, or 'NULL' if validity
37130     should be determined by the front end.
37131
37132 -- Target Hook: const char * TARGET_INVALID_UNARY_OP (int OP,
37133          const_tree TYPE)
37134     If defined, this macro returns the diagnostic message when it is
37135     invalid to apply operation OP (where unary plus is denoted by
37136     'CONVERT_EXPR') to an operand of type TYPE, or 'NULL' if validity
37137     should be determined by the front end.
37138
37139 -- Target Hook: const char * TARGET_INVALID_BINARY_OP (int OP,
37140          const_tree TYPE1, const_tree TYPE2)
37141     If defined, this macro returns the diagnostic message when it is
37142     invalid to apply operation OP to operands of types TYPE1 and TYPE2,
37143     or 'NULL' if validity should be determined by the front end.
37144
37145 -- Target Hook: const char * TARGET_INVALID_PARAMETER_TYPE (const_tree
37146          TYPE)
37147     If defined, this macro returns the diagnostic message when it is
37148     invalid for functions to include parameters of type TYPE, or 'NULL'
37149     if validity should be determined by the front end.  This is
37150     currently used only by the C and C++ front ends.
37151
37152 -- Target Hook: const char * TARGET_INVALID_RETURN_TYPE (const_tree
37153          TYPE)
37154     If defined, this macro returns the diagnostic message when it is
37155     invalid for functions to have return type TYPE, or 'NULL' if
37156     validity should be determined by the front end.  This is currently
37157     used only by the C and C++ front ends.
37158
37159 -- Target Hook: tree TARGET_PROMOTED_TYPE (const_tree TYPE)
37160     If defined, this target hook returns the type to which values of
37161     TYPE should be promoted when they appear in expressions, analogous
37162     to the integer promotions, or 'NULL_TREE' to use the front end's
37163     normal promotion rules.  This hook is useful when there are
37164     target-specific types with special promotion rules.  This is
37165     currently used only by the C and C++ front ends.
37166
37167 -- Target Hook: tree TARGET_CONVERT_TO_TYPE (tree TYPE, tree EXPR)
37168     If defined, this hook returns the result of converting EXPR to
37169     TYPE.  It should return the converted expression, or 'NULL_TREE' to
37170     apply the front end's normal conversion rules.  This hook is useful
37171     when there are target-specific types with special conversion rules.
37172     This is currently used only by the C and C++ front ends.
37173
37174 -- Macro: TARGET_USE_JCR_SECTION
37175     This macro determines whether to use the JCR section to register
37176     Java classes.  By default, TARGET_USE_JCR_SECTION is defined to 1
37177     if both SUPPORTS_WEAK and TARGET_HAVE_NAMED_SECTIONS are true, else
37178     0.
37179
37180 -- Macro: OBJC_JBLEN
37181     This macro determines the size of the objective C jump buffer for
37182     the NeXT runtime.  By default, OBJC_JBLEN is defined to an
37183     innocuous value.
37184
37185 -- Macro: LIBGCC2_UNWIND_ATTRIBUTE
37186     Define this macro if any target-specific attributes need to be
37187     attached to the functions in 'libgcc' that provide low-level
37188     support for call stack unwinding.  It is used in declarations in
37189     'unwind-generic.h' and the associated definitions of those
37190     functions.
37191
37192 -- Target Hook: void TARGET_UPDATE_STACK_BOUNDARY (void)
37193     Define this macro to update the current function stack boundary if
37194     necessary.
37195
37196 -- Target Hook: rtx TARGET_GET_DRAP_RTX (void)
37197     This hook should return an rtx for Dynamic Realign Argument Pointer
37198     (DRAP) if a different argument pointer register is needed to access
37199     the function's argument list due to stack realignment.  Return
37200     'NULL' if no DRAP is needed.
37201
37202 -- Target Hook: bool TARGET_ALLOCATE_STACK_SLOTS_FOR_ARGS (void)
37203     When optimization is disabled, this hook indicates whether or not
37204     arguments should be allocated to stack slots.  Normally, GCC
37205     allocates stacks slots for arguments when not optimizing in order
37206     to make debugging easier.  However, when a function is declared
37207     with '__attribute__((naked))', there is no stack frame, and the
37208     compiler cannot safely move arguments from the registers in which
37209     they are passed to the stack.  Therefore, this hook should return
37210     true in general, but false for naked functions.  The default
37211     implementation always returns true.
37212
37213 -- Target Hook: unsigned HOST_WIDE_INT TARGET_CONST_ANCHOR
37214     On some architectures it can take multiple instructions to
37215     synthesize a constant.  If there is another constant already in a
37216     register that is close enough in value then it is preferable that
37217     the new constant is computed from this register using immediate
37218     addition or subtraction.  We accomplish this through CSE. Besides
37219     the value of the constant we also add a lower and an upper constant
37220     anchor to the available expressions.  These are then queried when
37221     encountering new constants.  The anchors are computed by rounding
37222     the constant up and down to a multiple of the value of
37223     'TARGET_CONST_ANCHOR'.  'TARGET_CONST_ANCHOR' should be the maximum
37224     positive value accepted by immediate-add plus one.  We currently
37225     assume that the value of 'TARGET_CONST_ANCHOR' is a power of 2.
37226     For example, on MIPS, where add-immediate takes a 16-bit signed
37227     value, 'TARGET_CONST_ANCHOR' is set to '0x8000'.  The default value
37228     is zero, which disables this optimization.
37229
37230 -- Target Hook: unsigned HOST_WIDE_INT TARGET_ASAN_SHADOW_OFFSET (void)
37231     Return the offset bitwise ored into shifted address to get
37232     corresponding Address Sanitizer shadow memory address.  NULL if
37233     Address Sanitizer is not supported by the target.
37234
37235 -- Target Hook: unsigned HOST_WIDE_INT TARGET_MEMMODEL_CHECK (unsigned
37236          HOST_WIDE_INT VAL)
37237     Validate target specific memory model mask bits.  When NULL no
37238     target specific memory model bits are allowed.
37239
37240 -- Target Hook: unsigned char TARGET_ATOMIC_TEST_AND_SET_TRUEVAL
37241     This value should be set if the result written by
37242     'atomic_test_and_set' is not exactly 1, i.e.  the 'bool' 'true'.
37243
37244
37245File: gccint.info,  Node: Host Config,  Next: Fragments,  Prev: Target Macros,  Up: Top
37246
3724718 Host Configuration
37248*********************
37249
37250Most details about the machine and system on which the compiler is
37251actually running are detected by the 'configure' script.  Some things
37252are impossible for 'configure' to detect; these are described in two
37253ways, either by macros defined in a file named 'xm-MACHINE.h' or by hook
37254functions in the file specified by the OUT_HOST_HOOK_OBJ variable in
37255'config.gcc'.  (The intention is that very few hosts will need a header
37256file but nearly every fully supported host will need to override some
37257hooks.)
37258
37259 If you need to define only a few macros, and they have simple
37260definitions, consider using the 'xm_defines' variable in your
37261'config.gcc' entry instead of creating a host configuration header.
37262*Note System Config::.
37263
37264* Menu:
37265
37266* Host Common::         Things every host probably needs implemented.
37267* Filesystem::          Your host can't have the letter 'a' in filenames?
37268* Host Misc::           Rare configuration options for hosts.
37269
37270
37271File: gccint.info,  Node: Host Common,  Next: Filesystem,  Up: Host Config
37272
3727318.1 Host Common
37274================
37275
37276Some things are just not portable, even between similar operating
37277systems, and are too difficult for autoconf to detect.  They get
37278implemented using hook functions in the file specified by the
37279HOST_HOOK_OBJ variable in 'config.gcc'.
37280
37281 -- Host Hook: void HOST_HOOKS_EXTRA_SIGNALS (void)
37282     This host hook is used to set up handling for extra signals.  The
37283     most common thing to do in this hook is to detect stack overflow.
37284
37285 -- Host Hook: void * HOST_HOOKS_GT_PCH_GET_ADDRESS (size_t SIZE, int
37286          FD)
37287     This host hook returns the address of some space that is likely to
37288     be free in some subsequent invocation of the compiler.  We intend
37289     to load the PCH data at this address such that the data need not be
37290     relocated.  The area should be able to hold SIZE bytes.  If the
37291     host uses 'mmap', FD is an open file descriptor that can be used
37292     for probing.
37293
37294 -- Host Hook: int HOST_HOOKS_GT_PCH_USE_ADDRESS (void * ADDRESS, size_t
37295          SIZE, int FD, size_t OFFSET)
37296     This host hook is called when a PCH file is about to be loaded.  We
37297     want to load SIZE bytes from FD at OFFSET into memory at ADDRESS.
37298     The given address will be the result of a previous invocation of
37299     'HOST_HOOKS_GT_PCH_GET_ADDRESS'.  Return -1 if we couldn't allocate
37300     SIZE bytes at ADDRESS.  Return 0 if the memory is allocated but the
37301     data is not loaded.  Return 1 if the hook has performed everything.
37302
37303     If the implementation uses reserved address space, free any
37304     reserved space beyond SIZE, regardless of the return value.  If no
37305     PCH will be loaded, this hook may be called with SIZE zero, in
37306     which case all reserved address space should be freed.
37307
37308     Do not try to handle values of ADDRESS that could not have been
37309     returned by this executable; just return -1.  Such values usually
37310     indicate an out-of-date PCH file (built by some other GCC
37311     executable), and such a PCH file won't work.
37312
37313 -- Host Hook: size_t HOST_HOOKS_GT_PCH_ALLOC_GRANULARITY (void);
37314     This host hook returns the alignment required for allocating
37315     virtual memory.  Usually this is the same as getpagesize, but on
37316     some hosts the alignment for reserving memory differs from the
37317     pagesize for committing memory.
37318
37319
37320File: gccint.info,  Node: Filesystem,  Next: Host Misc,  Prev: Host Common,  Up: Host Config
37321
3732218.2 Host Filesystem
37323====================
37324
37325GCC needs to know a number of things about the semantics of the host
37326machine's filesystem.  Filesystems with Unix and MS-DOS semantics are
37327automatically detected.  For other systems, you can define the following
37328macros in 'xm-MACHINE.h'.
37329
37330'HAVE_DOS_BASED_FILE_SYSTEM'
37331     This macro is automatically defined by 'system.h' if the host file
37332     system obeys the semantics defined by MS-DOS instead of Unix.  DOS
37333     file systems are case insensitive, file specifications may begin
37334     with a drive letter, and both forward slash and backslash ('/' and
37335     '\') are directory separators.
37336
37337'DIR_SEPARATOR'
37338'DIR_SEPARATOR_2'
37339     If defined, these macros expand to character constants specifying
37340     separators for directory names within a file specification.
37341     'system.h' will automatically give them appropriate values on Unix
37342     and MS-DOS file systems.  If your file system is neither of these,
37343     define one or both appropriately in 'xm-MACHINE.h'.
37344
37345     However, operating systems like VMS, where constructing a pathname
37346     is more complicated than just stringing together directory names
37347     separated by a special character, should not define either of these
37348     macros.
37349
37350'PATH_SEPARATOR'
37351     If defined, this macro should expand to a character constant
37352     specifying the separator for elements of search paths.  The default
37353     value is a colon (':').  DOS-based systems usually, but not always,
37354     use semicolon (';').
37355
37356'VMS'
37357     Define this macro if the host system is VMS.
37358
37359'HOST_OBJECT_SUFFIX'
37360     Define this macro to be a C string representing the suffix for
37361     object files on your host machine.  If you do not define this
37362     macro, GCC will use '.o' as the suffix for object files.
37363
37364'HOST_EXECUTABLE_SUFFIX'
37365     Define this macro to be a C string representing the suffix for
37366     executable files on your host machine.  If you do not define this
37367     macro, GCC will use the null string as the suffix for executable
37368     files.
37369
37370'HOST_BIT_BUCKET'
37371     A pathname defined by the host operating system, which can be
37372     opened as a file and written to, but all the information written is
37373     discarded.  This is commonly known as a "bit bucket" or "null
37374     device".  If you do not define this macro, GCC will use '/dev/null'
37375     as the bit bucket.  If the host does not support a bit bucket,
37376     define this macro to an invalid filename.
37377
37378'UPDATE_PATH_HOST_CANONICALIZE (PATH)'
37379     If defined, a C statement (sans semicolon) that performs
37380     host-dependent canonicalization when a path used in a compilation
37381     driver or preprocessor is canonicalized.  PATH is a malloc-ed path
37382     to be canonicalized.  If the C statement does canonicalize PATH
37383     into a different buffer, the old path should be freed and the new
37384     buffer should have been allocated with malloc.
37385
37386'DUMPFILE_FORMAT'
37387     Define this macro to be a C string representing the format to use
37388     for constructing the index part of debugging dump file names.  The
37389     resultant string must fit in fifteen bytes.  The full filename will
37390     be the concatenation of: the prefix of the assembler file name, the
37391     string resulting from applying this format to an index number, and
37392     a string unique to each dump file kind, e.g. 'rtl'.
37393
37394     If you do not define this macro, GCC will use '.%02d.'.  You should
37395     define this macro if using the default will create an invalid file
37396     name.
37397
37398'DELETE_IF_ORDINARY'
37399     Define this macro to be a C statement (sans semicolon) that
37400     performs host-dependent removal of ordinary temp files in the
37401     compilation driver.
37402
37403     If you do not define this macro, GCC will use the default version.
37404     You should define this macro if the default version does not
37405     reliably remove the temp file as, for example, on VMS which allows
37406     multiple versions of a file.
37407
37408'HOST_LACKS_INODE_NUMBERS'
37409     Define this macro if the host filesystem does not report meaningful
37410     inode numbers in struct stat.
37411
37412
37413File: gccint.info,  Node: Host Misc,  Prev: Filesystem,  Up: Host Config
37414
3741518.3 Host Misc
37416==============
37417
37418'FATAL_EXIT_CODE'
37419     A C expression for the status code to be returned when the compiler
37420     exits after serious errors.  The default is the system-provided
37421     macro 'EXIT_FAILURE', or '1' if the system doesn't define that
37422     macro.  Define this macro only if these defaults are incorrect.
37423
37424'SUCCESS_EXIT_CODE'
37425     A C expression for the status code to be returned when the compiler
37426     exits without serious errors.  (Warnings are not serious errors.)
37427     The default is the system-provided macro 'EXIT_SUCCESS', or '0' if
37428     the system doesn't define that macro.  Define this macro only if
37429     these defaults are incorrect.
37430
37431'USE_C_ALLOCA'
37432     Define this macro if GCC should use the C implementation of
37433     'alloca' provided by 'libiberty.a'.  This only affects how some
37434     parts of the compiler itself allocate memory.  It does not change
37435     code generation.
37436
37437     When GCC is built with a compiler other than itself, the C 'alloca'
37438     is always used.  This is because most other implementations have
37439     serious bugs.  You should define this macro only on a system where
37440     no stack-based 'alloca' can possibly work.  For instance, if a
37441     system has a small limit on the size of the stack, GCC's builtin
37442     'alloca' will not work reliably.
37443
37444'COLLECT2_HOST_INITIALIZATION'
37445     If defined, a C statement (sans semicolon) that performs
37446     host-dependent initialization when 'collect2' is being initialized.
37447
37448'GCC_DRIVER_HOST_INITIALIZATION'
37449     If defined, a C statement (sans semicolon) that performs
37450     host-dependent initialization when a compilation driver is being
37451     initialized.
37452
37453'HOST_LONG_LONG_FORMAT'
37454     If defined, the string used to indicate an argument of type 'long
37455     long' to functions like 'printf'.  The default value is '"ll"'.
37456
37457'HOST_LONG_FORMAT'
37458     If defined, the string used to indicate an argument of type 'long'
37459     to functions like 'printf'.  The default value is '"l"'.
37460
37461'HOST_PTR_PRINTF'
37462     If defined, the string used to indicate an argument of type 'void
37463     *' to functions like 'printf'.  The default value is '"%p"'.
37464
37465 In addition, if 'configure' generates an incorrect definition of any of
37466the macros in 'auto-host.h', you can override that definition in a host
37467configuration header.  If you need to do this, first see if it is
37468possible to fix 'configure'.
37469
37470
37471File: gccint.info,  Node: Fragments,  Next: Collect2,  Prev: Host Config,  Up: Top
37472
3747319 Makefile Fragments
37474*********************
37475
37476When you configure GCC using the 'configure' script, it will construct
37477the file 'Makefile' from the template file 'Makefile.in'.  When it does
37478this, it can incorporate makefile fragments from the 'config' directory.
37479These are used to set Makefile parameters that are not amenable to being
37480calculated by autoconf.  The list of fragments to incorporate is set by
37481'config.gcc' (and occasionally 'config.build' and 'config.host'); *Note
37482System Config::.
37483
37484 Fragments are named either 't-TARGET' or 'x-HOST', depending on whether
37485they are relevant to configuring GCC to produce code for a particular
37486target, or to configuring GCC to run on a particular host.  Here TARGET
37487and HOST are mnemonics which usually have some relationship to the
37488canonical system name, but no formal connection.
37489
37490 If these files do not exist, it means nothing needs to be added for a
37491given target or host.  Most targets need a few 't-TARGET' fragments, but
37492needing 'x-HOST' fragments is rare.
37493
37494* Menu:
37495
37496* Target Fragment:: Writing 't-TARGET' files.
37497* Host Fragment::   Writing 'x-HOST' files.
37498
37499
37500File: gccint.info,  Node: Target Fragment,  Next: Host Fragment,  Up: Fragments
37501
3750219.1 Target Makefile Fragments
37503==============================
37504
37505Target makefile fragments can set these Makefile variables.
37506
37507'LIBGCC2_CFLAGS'
37508     Compiler flags to use when compiling 'libgcc2.c'.
37509
37510'LIB2FUNCS_EXTRA'
37511     A list of source file names to be compiled or assembled and
37512     inserted into 'libgcc.a'.
37513
37514'CRTSTUFF_T_CFLAGS'
37515     Special flags used when compiling 'crtstuff.c'.  *Note
37516     Initialization::.
37517
37518'CRTSTUFF_T_CFLAGS_S'
37519     Special flags used when compiling 'crtstuff.c' for shared linking.
37520     Used if you use 'crtbeginS.o' and 'crtendS.o' in 'EXTRA-PARTS'.
37521     *Note Initialization::.
37522
37523'MULTILIB_OPTIONS'
37524     For some targets, invoking GCC in different ways produces objects
37525     that can not be linked together.  For example, for some targets GCC
37526     produces both big and little endian code.  For these targets, you
37527     must arrange for multiple versions of 'libgcc.a' to be compiled,
37528     one for each set of incompatible options.  When GCC invokes the
37529     linker, it arranges to link in the right version of 'libgcc.a',
37530     based on the command line options used.
37531
37532     The 'MULTILIB_OPTIONS' macro lists the set of options for which
37533     special versions of 'libgcc.a' must be built.  Write options that
37534     are mutually incompatible side by side, separated by a slash.
37535     Write options that may be used together separated by a space.  The
37536     build procedure will build all combinations of compatible options.
37537
37538     For example, if you set 'MULTILIB_OPTIONS' to 'm68000/m68020
37539     msoft-float', 'Makefile' will build special versions of 'libgcc.a'
37540     using the following sets of options: '-m68000', '-m68020',
37541     '-msoft-float', '-m68000 -msoft-float', and '-m68020 -msoft-float'.
37542
37543'MULTILIB_DIRNAMES'
37544     If 'MULTILIB_OPTIONS' is used, this variable specifies the
37545     directory names that should be used to hold the various libraries.
37546     Write one element in 'MULTILIB_DIRNAMES' for each element in
37547     'MULTILIB_OPTIONS'.  If 'MULTILIB_DIRNAMES' is not used, the
37548     default value will be 'MULTILIB_OPTIONS', with all slashes treated
37549     as spaces.
37550
37551     'MULTILIB_DIRNAMES' describes the multilib directories using GCC
37552     conventions and is applied to directories that are part of the GCC
37553     installation.  When multilib-enabled, the compiler will add a
37554     subdirectory of the form PREFIX/MULTILIB before each directory in
37555     the search path for libraries and crt files.
37556
37557     For example, if 'MULTILIB_OPTIONS' is set to 'm68000/m68020
37558     msoft-float', then the default value of 'MULTILIB_DIRNAMES' is
37559     'm68000 m68020 msoft-float'.  You may specify a different value if
37560     you desire a different set of directory names.
37561
37562'MULTILIB_MATCHES'
37563     Sometimes the same option may be written in two different ways.  If
37564     an option is listed in 'MULTILIB_OPTIONS', GCC needs to know about
37565     any synonyms.  In that case, set 'MULTILIB_MATCHES' to a list of
37566     items of the form 'option=option' to describe all relevant
37567     synonyms.  For example, 'm68000=mc68000 m68020=mc68020'.
37568
37569'MULTILIB_EXCEPTIONS'
37570     Sometimes when there are multiple sets of 'MULTILIB_OPTIONS' being
37571     specified, there are combinations that should not be built.  In
37572     that case, set 'MULTILIB_EXCEPTIONS' to be all of the switch
37573     exceptions in shell case syntax that should not be built.
37574
37575     For example the ARM processor cannot execute both hardware floating
37576     point instructions and the reduced size THUMB instructions at the
37577     same time, so there is no need to build libraries with both of
37578     these options enabled.  Therefore 'MULTILIB_EXCEPTIONS' is set to:
37579          *mthumb/*mhard-float*
37580
37581'MULTILIB_REQUIRED'
37582     Sometimes when there are only a few combinations are required, it
37583     would be a big effort to come up with a 'MULTILIB_EXCEPTIONS' list
37584     to cover all undesired ones.  In such a case, just listing all the
37585     required combinations in 'MULTILIB_REQUIRED' would be more
37586     straightforward.
37587
37588     The way to specify the entries in 'MULTILIB_REQUIRED' is same with
37589     the way used for 'MULTILIB_EXCEPTIONS', only this time what are
37590     required will be specified.  Suppose there are multiple sets of
37591     'MULTILIB_OPTIONS' and only two combinations are required, one for
37592     ARMv7-M and one for ARMv7-R with hard floating-point ABI and FPU,
37593     the 'MULTILIB_REQUIRED' can be set to:
37594          MULTILIB_REQUIRED =  mthumb/march=armv7-m
37595          MULTILIB_REQUIRED += march=armv7-r/mfloat-abi=hard/mfpu=vfpv3-d16
37596
37597     The 'MULTILIB_REQUIRED' can be used together with
37598     'MULTILIB_EXCEPTIONS'.  The option combinations generated from
37599     'MULTILIB_OPTIONS' will be filtered by 'MULTILIB_EXCEPTIONS' and
37600     then by 'MULTILIB_REQUIRED'.
37601
37602'MULTILIB_REUSE'
37603     Sometimes it is desirable to reuse one existing multilib for
37604     different sets of options.  Such kind of reuse can minimize the
37605     number of multilib variants.  And for some targets it is better to
37606     reuse an existing multilib than to fall back to default multilib
37607     when there is no corresponding multilib.  This can be done by
37608     adding reuse rules to 'MULTILIB_REUSE'.
37609
37610     A reuse rule is comprised of two parts connected by equality sign.
37611     The left part is option set used to build multilib and the right
37612     part is option set that will reuse this multilib.  The order of
37613     options in the left part matters and should be same with those
37614     specified in 'MULTILIB_REQUIRED' or aligned with order in
37615     'MULTILIB_OPTIONS'.  There is no such limitation for options in
37616     right part as we don't build multilib from them.  But the equality
37617     sign in both parts should be replaced with period.
37618
37619     The 'MULTILIB_REUSE' is different from 'MULTILIB_MATCHES' in that
37620     it sets up relations between two option sets rather than two
37621     options.  Here is an example to demo how we reuse libraries built
37622     in Thumb mode for applications built in ARM mode:
37623          MULTILIB_REUSE = mthumb/march.armv7-r=marm/march.armv7-r
37624
37625     Before the advent of 'MULTILIB_REUSE', GCC select multilib by
37626     comparing command line options with options used to build multilib.
37627     The 'MULTILIB_REUSE' is complementary to that way.  Only when the
37628     original comparison matches nothing it will work to see if it is OK
37629     to reuse some existing multilib.
37630
37631'MULTILIB_EXTRA_OPTS'
37632     Sometimes it is desirable that when building multiple versions of
37633     'libgcc.a' certain options should always be passed on to the
37634     compiler.  In that case, set 'MULTILIB_EXTRA_OPTS' to be the list
37635     of options to be used for all builds.  If you set this, you should
37636     probably set 'CRTSTUFF_T_CFLAGS' to a dash followed by it.
37637
37638'MULTILIB_OSDIRNAMES'
37639     If 'MULTILIB_OPTIONS' is used, this variable specifies a list of
37640     subdirectory names, that are used to modify the search path
37641     depending on the chosen multilib.  Unlike 'MULTILIB_DIRNAMES',
37642     'MULTILIB_OSDIRNAMES' describes the multilib directories using
37643     operating systems conventions, and is applied to the directories
37644     such as 'lib' or those in the 'LIBRARY_PATH' environment variable.
37645     The format is either the same as of 'MULTILIB_DIRNAMES', or a set
37646     of mappings.  When it is the same as 'MULTILIB_DIRNAMES', it
37647     describes the multilib directories using operating system
37648     conventions, rather than GCC conventions.  When it is a set of
37649     mappings of the form GCCDIR=OSDIR, the left side gives the GCC
37650     convention and the right gives the equivalent OS defined location.
37651     If the OSDIR part begins with a '!', GCC will not search in the
37652     non-multilib directory and use exclusively the multilib directory.
37653     Otherwise, the compiler will examine the search path for libraries
37654     and crt files twice; the first time it will add MULTILIB to each
37655     directory in the search path, the second it will not.
37656
37657     For configurations that support both multilib and multiarch,
37658     'MULTILIB_OSDIRNAMES' also encodes the multiarch name, thus
37659     subsuming 'MULTIARCH_DIRNAME'.  The multiarch name is appended to
37660     each directory name, separated by a colon (e.g.
37661     '../lib32:i386-linux-gnu').
37662
37663     Each multiarch subdirectory will be searched before the
37664     corresponding OS multilib directory, for example
37665     '/lib/i386-linux-gnu' before '/lib/../lib32'.  The multiarch name
37666     will also be used to modify the system header search path, as
37667     explained for 'MULTIARCH_DIRNAME'.
37668
37669'MULTIARCH_DIRNAME'
37670     This variable specifies the multiarch name for configurations that
37671     are multiarch-enabled but not multilibbed configurations.
37672
37673     The multiarch name is used to augment the search path for
37674     libraries, crt files and system header files with additional
37675     locations.  The compiler will add a multiarch subdirectory of the
37676     form PREFIX/MULTIARCH before each directory in the library and crt
37677     search path.  It will also add two directories
37678     'LOCAL_INCLUDE_DIR'/MULTIARCH and
37679     'NATIVE_SYSTEM_HEADER_DIR'/MULTIARCH) to the system header search
37680     path, respectively before 'LOCAL_INCLUDE_DIR' and
37681     'NATIVE_SYSTEM_HEADER_DIR'.
37682
37683     'MULTIARCH_DIRNAME' is not used for configurations that support
37684     both multilib and multiarch.  In that case, multiarch names are
37685     encoded in 'MULTILIB_OSDIRNAMES' instead.
37686
37687     More documentation about multiarch can be found at
37688     <http://wiki.debian.org/Multiarch>.
37689
37690'SPECS'
37691     Unfortunately, setting 'MULTILIB_EXTRA_OPTS' is not enough, since
37692     it does not affect the build of target libraries, at least not the
37693     build of the default multilib.  One possible work-around is to use
37694     'DRIVER_SELF_SPECS' to bring options from the 'specs' file as if
37695     they had been passed in the compiler driver command line.  However,
37696     you don't want to be adding these options after the toolchain is
37697     installed, so you can instead tweak the 'specs' file that will be
37698     used during the toolchain build, while you still install the
37699     original, built-in 'specs'.  The trick is to set 'SPECS' to some
37700     other filename (say 'specs.install'), that will then be created out
37701     of the built-in specs, and introduce a 'Makefile' rule to generate
37702     the 'specs' file that's going to be used at build time out of your
37703     'specs.install'.
37704
37705'T_CFLAGS'
37706     These are extra flags to pass to the C compiler.  They are used
37707     both when building GCC, and when compiling things with the
37708     just-built GCC.  This variable is deprecated and should not be
37709     used.
37710
37711
37712File: gccint.info,  Node: Host Fragment,  Prev: Target Fragment,  Up: Fragments
37713
3771419.2 Host Makefile Fragments
37715============================
37716
37717The use of 'x-HOST' fragments is discouraged.  You should only use it
37718for makefile dependencies.
37719
37720
37721File: gccint.info,  Node: Collect2,  Next: Header Dirs,  Prev: Fragments,  Up: Top
37722
3772320 'collect2'
37724*************
37725
37726GCC uses a utility called 'collect2' on nearly all systems to arrange to
37727call various initialization functions at start time.
37728
37729 The program 'collect2' works by linking the program once and looking
37730through the linker output file for symbols with particular names
37731indicating they are constructor functions.  If it finds any, it creates
37732a new temporary '.c' file containing a table of them, compiles it, and
37733links the program a second time including that file.
37734
37735 The actual calls to the constructors are carried out by a subroutine
37736called '__main', which is called (automatically) at the beginning of the
37737body of 'main' (provided 'main' was compiled with GNU CC).  Calling
37738'__main' is necessary, even when compiling C code, to allow linking C
37739and C++ object code together.  (If you use '-nostdlib', you get an
37740unresolved reference to '__main', since it's defined in the standard GCC
37741library.  Include '-lgcc' at the end of your compiler command line to
37742resolve this reference.)
37743
37744 The program 'collect2' is installed as 'ld' in the directory where the
37745passes of the compiler are installed.  When 'collect2' needs to find the
37746_real_ 'ld', it tries the following file names:
37747
37748   * a hard coded linker file name, if GCC was configured with the
37749     '--with-ld' option.
37750
37751   * 'real-ld' in the directories listed in the compiler's search
37752     directories.
37753
37754   * 'real-ld' in the directories listed in the environment variable
37755     'PATH'.
37756
37757   * The file specified in the 'REAL_LD_FILE_NAME' configuration macro,
37758     if specified.
37759
37760   * 'ld' in the compiler's search directories, except that 'collect2'
37761     will not execute itself recursively.
37762
37763   * 'ld' in 'PATH'.
37764
37765 "The compiler's search directories" means all the directories where
37766'gcc' searches for passes of the compiler.  This includes directories
37767that you specify with '-B'.
37768
37769 Cross-compilers search a little differently:
37770
37771   * 'real-ld' in the compiler's search directories.
37772
37773   * 'TARGET-real-ld' in 'PATH'.
37774
37775   * The file specified in the 'REAL_LD_FILE_NAME' configuration macro,
37776     if specified.
37777
37778   * 'ld' in the compiler's search directories.
37779
37780   * 'TARGET-ld' in 'PATH'.
37781
37782 'collect2' explicitly avoids running 'ld' using the file name under
37783which 'collect2' itself was invoked.  In fact, it remembers up a list of
37784such names--in case one copy of 'collect2' finds another copy (or
37785version) of 'collect2' installed as 'ld' in a second place in the search
37786path.
37787
37788 'collect2' searches for the utilities 'nm' and 'strip' using the same
37789algorithm as above for 'ld'.
37790
37791
37792File: gccint.info,  Node: Header Dirs,  Next: Type Information,  Prev: Collect2,  Up: Top
37793
3779421 Standard Header File Directories
37795***********************************
37796
37797'GCC_INCLUDE_DIR' means the same thing for native and cross.  It is
37798where GCC stores its private include files, and also where GCC stores
37799the fixed include files.  A cross compiled GCC runs 'fixincludes' on the
37800header files in '$(tooldir)/include'.  (If the cross compilation header
37801files need to be fixed, they must be installed before GCC is built.  If
37802the cross compilation header files are already suitable for GCC, nothing
37803special need be done).
37804
37805 'GPLUSPLUS_INCLUDE_DIR' means the same thing for native and cross.  It
37806is where 'g++' looks first for header files.  The C++ library installs
37807only target independent header files in that directory.
37808
37809 'LOCAL_INCLUDE_DIR' is used only by native compilers.  GCC doesn't
37810install anything there.  It is normally '/usr/local/include'.  This is
37811where local additions to a packaged system should place header files.
37812
37813 'CROSS_INCLUDE_DIR' is used only by cross compilers.  GCC doesn't
37814install anything there.
37815
37816 'TOOL_INCLUDE_DIR' is used for both native and cross compilers.  It is
37817the place for other packages to install header files that GCC will use.
37818For a cross-compiler, this is the equivalent of '/usr/include'.  When
37819you build a cross-compiler, 'fixincludes' processes any header files in
37820this directory.
37821
37822
37823File: gccint.info,  Node: Type Information,  Next: Plugins,  Prev: Header Dirs,  Up: Top
37824
3782522 Memory Management and Type Information
37826*****************************************
37827
37828GCC uses some fairly sophisticated memory management techniques, which
37829involve determining information about GCC's data structures from GCC's
37830source code and using this information to perform garbage collection and
37831implement precompiled headers.
37832
37833 A full C++ parser would be too complicated for this task, so a limited
37834subset of C++ is interpreted and special markers are used to determine
37835what parts of the source to look at.  All 'struct', 'union' and
37836'template' structure declarations that define data structures that are
37837allocated under control of the garbage collector must be marked.  All
37838global variables that hold pointers to garbage-collected memory must
37839also be marked.  Finally, all global variables that need to be saved and
37840restored by a precompiled header must be marked.  (The precompiled
37841header mechanism can only save static variables if they're scalar.
37842Complex data structures must be allocated in garbage-collected memory to
37843be saved in a precompiled header.)
37844
37845 The full format of a marker is
37846     GTY (([OPTION] [(PARAM)], [OPTION] [(PARAM)] ...))
37847but in most cases no options are needed.  The outer double parentheses
37848are still necessary, though: 'GTY(())'.  Markers can appear:
37849
37850   * In a structure definition, before the open brace;
37851   * In a global variable declaration, after the keyword 'static' or
37852     'extern'; and
37853   * In a structure field definition, before the name of the field.
37854
37855 Here are some examples of marking simple data structures and globals.
37856
37857     struct GTY(()) TAG
37858     {
37859       FIELDS...
37860     };
37861
37862     typedef struct GTY(()) TAG
37863     {
37864       FIELDS...
37865     } *TYPENAME;
37866
37867     static GTY(()) struct TAG *LIST;   /* points to GC memory */
37868     static GTY(()) int COUNTER;        /* save counter in a PCH */
37869
37870 The parser understands simple typedefs such as 'typedef struct TAG
37871*NAME;' and 'typedef int NAME;'.  These don't need to be marked.
37872
37873 Since 'gengtype''s understanding of C++ is limited, there are several
37874constructs and declarations that are not supported inside
37875classes/structures marked for automatic GC code generation.  The
37876following C++ constructs produce a 'gengtype' error on
37877structures/classes marked for automatic GC code generation:
37878
37879   * Type definitions inside classes/structures are not supported.
37880   * Enumerations inside classes/structures are not supported.
37881
37882 If you have a class or structure using any of the above constructs, you
37883need to mark that class as 'GTY ((user))' and provide your own marking
37884routines (see section *note User GC:: for details).
37885
37886 It is always valid to include function definitions inside classes.
37887Those are always ignored by 'gengtype', as it only cares about data
37888members.
37889
37890* Menu:
37891
37892* GTY Options::         What goes inside a 'GTY(())'.
37893* User GC::		Adding user-provided GC marking routines.
37894* GGC Roots::           Making global variables GGC roots.
37895* Files::               How the generated files work.
37896* Invoking the garbage collector::   How to invoke the garbage collector.
37897* Troubleshooting::     When something does not work as expected.
37898
37899
37900File: gccint.info,  Node: GTY Options,  Next: User GC,  Up: Type Information
37901
3790222.1 The Inside of a 'GTY(())'
37903==============================
37904
37905Sometimes the C code is not enough to fully describe the type structure.
37906Extra information can be provided with 'GTY' options and additional
37907markers.  Some options take a parameter, which may be either a string or
37908a type name, depending on the parameter.  If an option takes no
37909parameter, it is acceptable either to omit the parameter entirely, or to
37910provide an empty string as a parameter.  For example, 'GTY ((skip))' and
37911'GTY ((skip ("")))' are equivalent.
37912
37913 When the parameter is a string, often it is a fragment of C code.  Four
37914special escapes may be used in these strings, to refer to pieces of the
37915data structure being marked:
37916
37917'%h'
37918     The current structure.
37919'%1'
37920     The structure that immediately contains the current structure.
37921'%0'
37922     The outermost structure that contains the current structure.
37923'%a'
37924     A partial expression of the form '[i1][i2]...' that indexes the
37925     array item currently being marked.
37926
37927 For instance, suppose that you have a structure of the form
37928     struct A {
37929       ...
37930     };
37931     struct B {
37932       struct A foo[12];
37933     };
37934and 'b' is a variable of type 'struct B'.  When marking 'b.foo[11]',
37935'%h' would expand to 'b.foo[11]', '%0' and '%1' would both expand to
37936'b', and '%a' would expand to '[11]'.
37937
37938 As in ordinary C, adjacent strings will be concatenated; this is
37939helpful when you have a complicated expression.
37940     GTY ((chain_next ("TREE_CODE (&%h.generic) == INTEGER_TYPE"
37941                       " ? TYPE_NEXT_VARIANT (&%h.generic)"
37942                       " : TREE_CHAIN (&%h.generic)")))
37943
37944 The available options are:
37945
37946'length ("EXPRESSION")'
37947
37948     There are two places the type machinery will need to be explicitly
37949     told the length of an array of non-atomic objects.  The first case
37950     is when a structure ends in a variable-length array, like this:
37951          struct GTY(()) rtvec_def {
37952            int num_elem;         /* number of elements */
37953            rtx GTY ((length ("%h.num_elem"))) elem[1];
37954          };
37955
37956     In this case, the 'length' option is used to override the specified
37957     array length (which should usually be '1').  The parameter of the
37958     option is a fragment of C code that calculates the length.
37959
37960     The second case is when a structure or a global variable contains a
37961     pointer to an array, like this:
37962          struct gimple_omp_for_iter * GTY((length ("%h.collapse"))) iter;
37963     In this case, 'iter' has been allocated by writing something like
37964            x->iter = ggc_alloc_cleared_vec_gimple_omp_for_iter (collapse);
37965     and the 'collapse' provides the length of the field.
37966
37967     This second use of 'length' also works on global variables, like:
37968     static GTY((length("reg_known_value_size"))) rtx *reg_known_value;
37969
37970     Note that the 'length' option is only meant for use with arrays of
37971     non-atomic objects, that is, objects that contain pointers pointing
37972     to other GTY-managed objects.  For other GC-allocated arrays and
37973     strings you should use 'atomic'.
37974
37975'skip'
37976
37977     If 'skip' is applied to a field, the type machinery will ignore it.
37978     This is somewhat dangerous; the only safe use is in a union when
37979     one field really isn't ever used.
37980
37981'desc ("EXPRESSION")'
37982'tag ("CONSTANT")'
37983'default'
37984
37985     The type machinery needs to be told which field of a 'union' is
37986     currently active.  This is done by giving each field a constant
37987     'tag' value, and then specifying a discriminator using 'desc'.  The
37988     value of the expression given by 'desc' is compared against each
37989     'tag' value, each of which should be different.  If no 'tag' is
37990     matched, the field marked with 'default' is used if there is one,
37991     otherwise no field in the union will be marked.
37992
37993     In the 'desc' option, the "current structure" is the union that it
37994     discriminates.  Use '%1' to mean the structure containing it.
37995     There are no escapes available to the 'tag' option, since it is a
37996     constant.
37997
37998     For example,
37999          struct GTY(()) tree_binding
38000          {
38001            struct tree_common common;
38002            union tree_binding_u {
38003              tree GTY ((tag ("0"))) scope;
38004              struct cp_binding_level * GTY ((tag ("1"))) level;
38005            } GTY ((desc ("BINDING_HAS_LEVEL_P ((tree)&%0)"))) xscope;
38006            tree value;
38007          };
38008
38009     In this example, the value of BINDING_HAS_LEVEL_P when applied to a
38010     'struct tree_binding *' is presumed to be 0 or 1.  If 1, the type
38011     mechanism will treat the field 'level' as being present and if 0,
38012     will treat the field 'scope' as being present.
38013
38014'param_is (TYPE)'
38015'use_param'
38016
38017     Sometimes it's convenient to define some data structure to work on
38018     generic pointers (that is, 'PTR') and then use it with a specific
38019     type.  'param_is' specifies the real type pointed to, and
38020     'use_param' says where in the generic data structure that type
38021     should be put.
38022
38023     For instance, to have a 'htab_t' that points to trees, one would
38024     write the definition of 'htab_t' like this:
38025          typedef struct GTY(()) {
38026            ...
38027            void ** GTY ((use_param, ...)) entries;
38028            ...
38029          } htab_t;
38030     and then declare variables like this:
38031            static htab_t GTY ((param_is (union tree_node))) ict;
38032
38033'paramN_is (TYPE)'
38034'use_paramN'
38035
38036     In more complicated cases, the data structure might need to work on
38037     several different types, which might not necessarily all be
38038     pointers.  For this, 'param1_is' through 'param9_is' may be used to
38039     specify the real type of a field identified by 'use_param1' through
38040     'use_param9'.
38041
38042'use_params'
38043
38044     When a structure contains another structure that is parameterized,
38045     there's no need to do anything special, the inner structure
38046     inherits the parameters of the outer one.  When a structure
38047     contains a pointer to a parameterized structure, the type machinery
38048     won't automatically detect this (it could, it just doesn't yet), so
38049     it's necessary to tell it that the pointed-to structure should use
38050     the same parameters as the outer structure.  This is done by
38051     marking the pointer with the 'use_params' option.
38052
38053'deletable'
38054
38055     'deletable', when applied to a global variable, indicates that when
38056     garbage collection runs, there's no need to mark anything pointed
38057     to by this variable, it can just be set to 'NULL' instead.  This is
38058     used to keep a list of free structures around for re-use.
38059
38060'if_marked ("EXPRESSION")'
38061
38062     Suppose you want some kinds of object to be unique, and so you put
38063     them in a hash table.  If garbage collection marks the hash table,
38064     these objects will never be freed, even if the last other reference
38065     to them goes away.  GGC has special handling to deal with this: if
38066     you use the 'if_marked' option on a global hash table, GGC will
38067     call the routine whose name is the parameter to the option on each
38068     hash table entry.  If the routine returns nonzero, the hash table
38069     entry will be marked as usual.  If the routine returns zero, the
38070     hash table entry will be deleted.
38071
38072     The routine 'ggc_marked_p' can be used to determine if an element
38073     has been marked already; in fact, the usual case is to use
38074     'if_marked ("ggc_marked_p")'.
38075
38076'mark_hook ("HOOK-ROUTINE-NAME")'
38077
38078     If provided for a structure or union type, the given
38079     HOOK-ROUTINE-NAME (between double-quotes) is the name of a routine
38080     called when the garbage collector has just marked the data as
38081     reachable.  This routine should not change the data, or call any
38082     ggc routine.  Its only argument is a pointer to the just marked
38083     (const) structure or union.
38084
38085'maybe_undef'
38086
38087     When applied to a field, 'maybe_undef' indicates that it's OK if
38088     the structure that this fields points to is never defined, so long
38089     as this field is always 'NULL'.  This is used to avoid requiring
38090     backends to define certain optional structures.  It doesn't work
38091     with language frontends.
38092
38093'nested_ptr (TYPE, "TO EXPRESSION", "FROM EXPRESSION")'
38094
38095     The type machinery expects all pointers to point to the start of an
38096     object.  Sometimes for abstraction purposes it's convenient to have
38097     a pointer which points inside an object.  So long as it's possible
38098     to convert the original object to and from the pointer, such
38099     pointers can still be used.  TYPE is the type of the original
38100     object, the TO EXPRESSION returns the pointer given the original
38101     object, and the FROM EXPRESSION returns the original object given
38102     the pointer.  The pointer will be available using the '%h' escape.
38103
38104'chain_next ("EXPRESSION")'
38105'chain_prev ("EXPRESSION")'
38106'chain_circular ("EXPRESSION")'
38107
38108     It's helpful for the type machinery to know if objects are often
38109     chained together in long lists; this lets it generate code that
38110     uses less stack space by iterating along the list instead of
38111     recursing down it.  'chain_next' is an expression for the next item
38112     in the list, 'chain_prev' is an expression for the previous item.
38113     For singly linked lists, use only 'chain_next'; for doubly linked
38114     lists, use both.  The machinery requires that taking the next item
38115     of the previous item gives the original item.  'chain_circular' is
38116     similar to 'chain_next', but can be used for circular single linked
38117     lists.
38118
38119'reorder ("FUNCTION NAME")'
38120
38121     Some data structures depend on the relative ordering of pointers.
38122     If the precompiled header machinery needs to change that ordering,
38123     it will call the function referenced by the 'reorder' option,
38124     before changing the pointers in the object that's pointed to by the
38125     field the option applies to.  The function must take four
38126     arguments, with the signature
38127     'void *, void *, gt_pointer_operator, void *'.  The first parameter
38128     is a pointer to the structure that contains the object being
38129     updated, or the object itself if there is no containing structure.
38130     The second parameter is a cookie that should be ignored.  The third
38131     parameter is a routine that, given a pointer, will update it to its
38132     correct new value.  The fourth parameter is a cookie that must be
38133     passed to the second parameter.
38134
38135     PCH cannot handle data structures that depend on the absolute
38136     values of pointers.  'reorder' functions can be expensive.  When
38137     possible, it is better to depend on properties of the data, like an
38138     ID number or the hash of a string instead.
38139
38140'variable_size'
38141
38142     The type machinery expects the types to be of constant size.  When
38143     this is not true, for example, with structs that have array fields
38144     or unions, the type machinery cannot tell how many bytes need to be
38145     allocated at each allocation.  The 'variable_size' is used to mark
38146     such types.  The type machinery then provides allocators that take
38147     a parameter indicating an exact size of object being allocated.
38148     Note that the size must be provided in bytes whereas the 'length'
38149     option works with array lengths in number of elements.
38150
38151     For example,
38152          struct GTY((variable_size)) sorted_fields_type {
38153            int len;
38154            tree GTY((length ("%h.len"))) elts[1];
38155          };
38156
38157     Then the objects of 'struct sorted_fields_type' are allocated in GC
38158     memory as follows:
38159            field_vec = ggc_alloc_sorted_fields_type (size);
38160
38161     If FIELD_VEC->ELTS stores N elements, then SIZE could be calculated
38162     as follows:
38163            size_t size = sizeof (struct sorted_fields_type) + n * sizeof (tree);
38164
38165'atomic'
38166
38167     The 'atomic' option can only be used with pointers.  It informs the
38168     GC machinery that the memory that the pointer points to does not
38169     contain any pointers, and hence it should be treated by the GC and
38170     PCH machinery as an "atomic" block of memory that does not need to
38171     be examined when scanning memory for pointers.  In particular, the
38172     machinery will not scan that memory for pointers to mark them as
38173     reachable (when marking pointers for GC) or to relocate them (when
38174     writing a PCH file).
38175
38176     The 'atomic' option differs from the 'skip' option.  'atomic' keeps
38177     the memory under Garbage Collection, but makes the GC ignore the
38178     contents of the memory.  'skip' is more drastic in that it causes
38179     the pointer and the memory to be completely ignored by the Garbage
38180     Collector.  So, memory marked as 'atomic' is automatically freed
38181     when no longer reachable, while memory marked as 'skip' is not.
38182
38183     The 'atomic' option must be used with great care, because all sorts
38184     of problem can occur if used incorrectly, that is, if the memory
38185     the pointer points to does actually contain a pointer.
38186
38187     Here is an example of how to use it:
38188          struct GTY(()) my_struct {
38189            int number_of_elements;
38190            unsigned int * GTY ((atomic)) elements;
38191          };
38192     In this case, 'elements' is a pointer under GC, and the memory it
38193     points to needs to be allocated using the Garbage Collector, and
38194     will be freed automatically by the Garbage Collector when it is no
38195     longer referenced.  But the memory that the pointer points to is an
38196     array of 'unsigned int' elements, and the GC must not try to scan
38197     it to find pointers to mark or relocate, which is why it is marked
38198     with the 'atomic' option.
38199
38200     Note that, currently, global variables can not be marked with
38201     'atomic'; only fields of a struct can.  This is a known limitation.
38202     It would be useful to be able to mark global pointers with 'atomic'
38203     to make the PCH machinery aware of them so that they are saved and
38204     restored correctly to PCH files.
38205
38206'special ("NAME")'
38207
38208     The 'special' option is used to mark types that have to be dealt
38209     with by special case machinery.  The parameter is the name of the
38210     special case.  See 'gengtype.c' for further details.  Avoid adding
38211     new special cases unless there is no other alternative.
38212
38213'user'
38214
38215     The 'user' option indicates that the code to mark structure fields
38216     is completely handled by user-provided routines.  See section *note
38217     User GC:: for details on what functions need to be provided.
38218
38219
38220File: gccint.info,  Node: User GC,  Next: GGC Roots,  Prev: GTY Options,  Up: Type Information
38221
3822222.2 Support for user-provided GC marking routines
38223==================================================
38224
38225The garbage collector supports types for which no automatic marking code
38226is generated.  For these types, the user is required to provide three
38227functions: one to act as a marker for garbage collection, and two
38228functions to act as marker and pointer walker for pre-compiled headers.
38229
38230 Given a structure 'struct GTY((user)) my_struct', the following
38231functions should be defined to mark 'my_struct':
38232
38233     void gt_ggc_mx (my_struct *p)
38234     {
38235       /* This marks field 'fld'.  */
38236       gt_ggc_mx (p->fld);
38237     }
38238
38239     void gt_pch_nx (my_struct *p)
38240     {
38241       /* This marks field 'fld'.  */
38242       gt_pch_nx (tp->fld);
38243     }
38244
38245     void gt_pch_nx (my_struct *p, gt_pointer_operator op, void *cookie)
38246     {
38247       /* For every field 'fld', call the given pointer operator.  */
38248       op (&(tp->fld), cookie);
38249     }
38250
38251 In general, each marker 'M' should call 'M' for every pointer field in
38252the structure.  Fields that are not allocated in GC or are not pointers
38253must be ignored.
38254
38255 For embedded lists (e.g., structures with a 'next' or 'prev' pointer),
38256the marker must follow the chain and mark every element in it.
38257
38258 Note that the rules for the pointer walker 'gt_pch_nx (my_struct *,
38259gt_pointer_operator, void *)' are slightly different.  In this case, the
38260operation 'op' must be applied to the _address_ of every pointer field.
38261
3826222.2.1 User-provided marking routines for template types
38263--------------------------------------------------------
38264
38265When a template type 'TP' is marked with 'GTY', all instances of that
38266type are considered user-provided types.  This means that the individual
38267instances of 'TP' do not need to be marked with 'GTY'.  The user needs
38268to provide template functions to mark all the fields of the type.
38269
38270 The following code snippets represent all the functions that need to be
38271provided.  Note that type 'TP' may reference to more than one type.  In
38272these snippets, there is only one type 'T', but there could be more.
38273
38274     template<typename T>
38275     void gt_ggc_mx (TP<T> *tp)
38276     {
38277       extern void gt_ggc_mx (T&);
38278
38279       /* This marks field 'fld' of type 'T'.  */
38280       gt_ggc_mx (tp->fld);
38281     }
38282
38283     template<typename T>
38284     void gt_pch_nx (TP<T> *tp)
38285     {
38286       extern void gt_pch_nx (T&);
38287
38288       /* This marks field 'fld' of type 'T'.  */
38289       gt_pch_nx (tp->fld);
38290     }
38291
38292     template<typename T>
38293     void gt_pch_nx (TP<T *> *tp, gt_pointer_operator op, void *cookie)
38294     {
38295       /* For every field 'fld' of 'tp' with type 'T *', call the given
38296          pointer operator.  */
38297       op (&(tp->fld), cookie);
38298     }
38299
38300     template<typename T>
38301     void gt_pch_nx (TP<T> *tp, gt_pointer_operator, void *cookie)
38302     {
38303       extern void gt_pch_nx (T *, gt_pointer_operator, void *);
38304
38305       /* For every field 'fld' of 'tp' with type 'T', call the pointer
38306          walker for all the fields of T.  */
38307       gt_pch_nx (&(tp->fld), op, cookie);
38308     }
38309
38310 Support for user-defined types is currently limited.  The following
38311restrictions apply:
38312
38313  1. Type 'TP' and all the argument types 'T' must be marked with 'GTY'.
38314
38315  2. Type 'TP' can only have type names in its argument list.
38316
38317  3. The pointer walker functions are different for 'TP<T>' and 'TP<T
38318     *>'.  In the case of 'TP<T>', references to 'T' must be handled by
38319     calling 'gt_pch_nx' (which will, in turn, walk all the pointers
38320     inside fields of 'T').  In the case of 'TP<T *>', references to 'T
38321     *' must be handled by calling the 'op' function on the address of
38322     the pointer (see the code snippets above).
38323
38324
38325File: gccint.info,  Node: GGC Roots,  Next: Files,  Prev: User GC,  Up: Type Information
38326
3832722.3 Marking Roots for the Garbage Collector
38328============================================
38329
38330In addition to keeping track of types, the type machinery also locates
38331the global variables ("roots") that the garbage collector starts at.
38332Roots must be declared using one of the following syntaxes:
38333
38334   * 'extern GTY(([OPTIONS])) TYPE NAME;'
38335   * 'static GTY(([OPTIONS])) TYPE NAME;'
38336The syntax
38337   * 'GTY(([OPTIONS])) TYPE NAME;'
38338is _not_ accepted.  There should be an 'extern' declaration of such a
38339variable in a header somewhere--mark that, not the definition.  Or, if
38340the variable is only used in one file, make it 'static'.
38341
38342
38343File: gccint.info,  Node: Files,  Next: Invoking the garbage collector,  Prev: GGC Roots,  Up: Type Information
38344
3834522.4 Source Files Containing Type Information
38346=============================================
38347
38348Whenever you add 'GTY' markers to a source file that previously had
38349none, or create a new source file containing 'GTY' markers, there are
38350three things you need to do:
38351
38352  1. You need to add the file to the list of source files the type
38353     machinery scans.  There are four cases:
38354
38355       a. For a back-end file, this is usually done automatically; if
38356          not, you should add it to 'target_gtfiles' in the appropriate
38357          port's entries in 'config.gcc'.
38358
38359       b. For files shared by all front ends, add the filename to the
38360          'GTFILES' variable in 'Makefile.in'.
38361
38362       c. For files that are part of one front end, add the filename to
38363          the 'gtfiles' variable defined in the appropriate
38364          'config-lang.in'.  Headers should appear before non-headers in
38365          this list.
38366
38367       d. For files that are part of some but not all front ends, add
38368          the filename to the 'gtfiles' variable of _all_ the front ends
38369          that use it.
38370
38371  2. If the file was a header file, you'll need to check that it's
38372     included in the right place to be visible to the generated files.
38373     For a back-end header file, this should be done automatically.  For
38374     a front-end header file, it needs to be included by the same file
38375     that includes 'gtype-LANG.h'.  For other header files, it needs to
38376     be included in 'gtype-desc.c', which is a generated file, so add it
38377     to 'ifiles' in 'open_base_file' in 'gengtype.c'.
38378
38379     For source files that aren't header files, the machinery will
38380     generate a header file that should be included in the source file
38381     you just changed.  The file will be called 'gt-PATH.h' where PATH
38382     is the pathname relative to the 'gcc' directory with slashes
38383     replaced by -, so for example the header file to be included in
38384     'cp/parser.c' is called 'gt-cp-parser.c'.  The generated header
38385     file should be included after everything else in the source file.
38386     Don't forget to mention this file as a dependency in the
38387     'Makefile'!
38388
38389 For language frontends, there is another file that needs to be included
38390somewhere.  It will be called 'gtype-LANG.h', where LANG is the name of
38391the subdirectory the language is contained in.
38392
38393 Plugins can add additional root tables.  Run the 'gengtype' utility in
38394plugin mode as 'gengtype -P pluginout.h SOURCE-DIR FILE-LIST PLUGIN*.C'
38395with your plugin files PLUGIN*.C using 'GTY' to generate the PLUGINOUT.H
38396file.  The GCC build tree is needed to be present in that mode.
38397
38398
38399File: gccint.info,  Node: Invoking the garbage collector,  Next: Troubleshooting,  Prev: Files,  Up: Type Information
38400
3840122.5 How to invoke the garbage collector
38402========================================
38403
38404The GCC garbage collector GGC is only invoked explicitly.  In contrast
38405with many other garbage collectors, it is not implicitly invoked by
38406allocation routines when a lot of memory has been consumed.  So the only
38407way to have GGC reclaim storage is to call the 'ggc_collect' function
38408explicitly.  This call is an expensive operation, as it may have to scan
38409the entire heap.  Beware that local variables (on the GCC call stack)
38410are not followed by such an invocation (as many other garbage collectors
38411do): you should reference all your data from static or external 'GTY'-ed
38412variables, and it is advised to call 'ggc_collect' with a shallow call
38413stack.  The GGC is an exact mark and sweep garbage collector (so it does
38414not scan the call stack for pointers).  In practice GCC passes don't
38415often call 'ggc_collect' themselves, because it is called by the pass
38416manager between passes.
38417
38418 At the time of the 'ggc_collect' call all pointers in the GC-marked
38419structures must be valid or 'NULL'.  In practice this means that there
38420should not be uninitialized pointer fields in the structures even if
38421your code never reads or writes those fields at a particular instance.
38422One way to ensure this is to use cleared versions of allocators unless
38423all the fields are initialized manually immediately after allocation.
38424
38425
38426File: gccint.info,  Node: Troubleshooting,  Prev: Invoking the garbage collector,  Up: Type Information
38427
3842822.6 Troubleshooting the garbage collector
38429==========================================
38430
38431With the current garbage collector implementation, most issues should
38432show up as GCC compilation errors.  Some of the most commonly
38433encountered issues are described below.
38434
38435   * Gengtype does not produce allocators for a 'GTY'-marked type.
38436     Gengtype checks if there is at least one possible path from GC
38437     roots to at least one instance of each type before outputting
38438     allocators.  If there is no such path, the 'GTY' markers will be
38439     ignored and no allocators will be output.  Solve this by making
38440     sure that there exists at least one such path.  If creating it is
38441     unfeasible or raises a "code smell", consider if you really must
38442     use GC for allocating such type.
38443
38444   * Link-time errors about undefined 'gt_ggc_r_foo_bar' and
38445     similarly-named symbols.  Check if your 'foo_bar' source file has
38446     '#include "gt-foo_bar.h"' as its very last line.
38447
38448
38449File: gccint.info,  Node: Plugins,  Next: LTO,  Prev: Type Information,  Up: Top
38450
3845123 Plugins
38452**********
38453
38454GCC plugin is a loadable module that provides extra features to the
38455compiler, which they can further pass around as a shareable module.
38456
38457 GCC plugins provide developers with a rich subset of the GCC API to
38458allow them to extend GCC as they see fit.  Whether it is writing an
38459additional optimization pass, transforming code, or analyzing
38460information, plugins can be quite useful.
38461
38462* Menu:
38463
38464* Plugins loading::      How can we load plugins.
38465* Plugin API::           The APIs for plugins.
38466* Plugins pass::         How a plugin interact with the pass manager.
38467* Plugins GC::           How a plugin Interact with GCC Garbage Collector.
38468* Plugins description::  Giving information about a plugin itself.
38469* Plugins attr::         Registering custom attributes or pragmas.
38470* Plugins recording::    Recording information about pass execution.
38471* Plugins gate::         Controlling which passes are being run.
38472* Plugins tracking::     Keeping track of available passes.
38473* Plugins building::     How can we build a plugin.
38474
38475
38476File: gccint.info,  Node: Plugins loading,  Next: Plugin API,  Up: Plugins
38477
3847823.1 Loading Plugins
38479====================
38480
38481Plugins are supported on platforms that support '-ldl -rdynamic'.  They
38482are loaded by the compiler using 'dlopen' and invoked at pre-determined
38483locations in the compilation process.
38484
38485 Plugins are loaded with
38486
38487 '-fplugin=/path/to/NAME.so' '-fplugin-arg-NAME-KEY1[=VALUE1]'
38488
38489 The plugin arguments are parsed by GCC and passed to respective plugins
38490as key-value pairs.  Multiple plugins can be invoked by specifying
38491multiple '-fplugin' arguments.
38492
38493 A plugin can be simply given by its short name (no dots or slashes).
38494When simply passing '-fplugin=NAME', the plugin is loaded from the
38495'plugin' directory, so '-fplugin=NAME' is the same as '-fplugin=`gcc
38496-print-file-name=plugin`/NAME.so', using backquote shell syntax to query
38497the 'plugin' directory.
38498
38499
38500File: gccint.info,  Node: Plugin API,  Next: Plugins pass,  Prev: Plugins loading,  Up: Plugins
38501
3850223.2 Plugin API
38503===============
38504
38505Plugins are activated by the compiler at specific events as defined in
38506'gcc-plugin.h'.  For each event of interest, the plugin should call
38507'register_callback' specifying the name of the event and address of the
38508callback function that will handle that event.
38509
38510 The header 'gcc-plugin.h' must be the first gcc header to be included.
38511
3851223.2.1 Plugin license check
38513---------------------------
38514
38515Every plugin should define the global symbol 'plugin_is_GPL_compatible'
38516to assert that it has been licensed under a GPL-compatible license.  If
38517this symbol does not exist, the compiler will emit a fatal error and
38518exit with the error message:
38519
38520     fatal error: plugin NAME is not licensed under a GPL-compatible license
38521     NAME: undefined symbol: plugin_is_GPL_compatible
38522     compilation terminated
38523
38524 The declared type of the symbol should be int, to match a forward
38525declaration in 'gcc-plugin.h' that suppresses C++ mangling.  It does not
38526need to be in any allocated section, though.  The compiler merely
38527asserts that the symbol exists in the global scope.  Something like this
38528is enough:
38529
38530     int plugin_is_GPL_compatible;
38531
3853223.2.2 Plugin initialization
38533----------------------------
38534
38535Every plugin should export a function called 'plugin_init' that is
38536called right after the plugin is loaded.  This function is responsible
38537for registering all the callbacks required by the plugin and do any
38538other required initialization.
38539
38540 This function is called from 'compile_file' right before invoking the
38541parser.  The arguments to 'plugin_init' are:
38542
38543   * 'plugin_info': Plugin invocation information.
38544   * 'version': GCC version.
38545
38546 The 'plugin_info' struct is defined as follows:
38547
38548     struct plugin_name_args
38549     {
38550       char *base_name;              /* Short name of the plugin
38551                                        (filename without .so suffix). */
38552       const char *full_name;        /* Path to the plugin as specified with
38553                                        -fplugin=. */
38554       int argc;                     /* Number of arguments specified with
38555                                        -fplugin-arg-.... */
38556       struct plugin_argument *argv; /* Array of ARGC key-value pairs. */
38557       const char *version;          /* Version string provided by plugin. */
38558       const char *help;             /* Help string provided by plugin. */
38559     }
38560
38561 If initialization fails, 'plugin_init' must return a non-zero value.
38562Otherwise, it should return 0.
38563
38564 The version of the GCC compiler loading the plugin is described by the
38565following structure:
38566
38567     struct plugin_gcc_version
38568     {
38569       const char *basever;
38570       const char *datestamp;
38571       const char *devphase;
38572       const char *revision;
38573       const char *configuration_arguments;
38574     };
38575
38576 The function 'plugin_default_version_check' takes two pointers to such
38577structure and compare them field by field.  It can be used by the
38578plugin's 'plugin_init' function.
38579
38580 The version of GCC used to compile the plugin can be found in the
38581symbol 'gcc_version' defined in the header 'plugin-version.h'.  The
38582recommended version check to perform looks like
38583
38584     #include "plugin-version.h"
38585     ...
38586
38587     int
38588     plugin_init (struct plugin_name_args *plugin_info,
38589                  struct plugin_gcc_version *version)
38590     {
38591       if (!plugin_default_version_check (version, &gcc_version))
38592         return 1;
38593
38594     }
38595
38596 but you can also check the individual fields if you want a less strict
38597check.
38598
3859923.2.3 Plugin callbacks
38600-----------------------
38601
38602Callback functions have the following prototype:
38603
38604     /* The prototype for a plugin callback function.
38605          gcc_data  - event-specific data provided by GCC
38606          user_data - plugin-specific data provided by the plug-in.  */
38607     typedef void (*plugin_callback_func)(void *gcc_data, void *user_data);
38608
38609 Callbacks can be invoked at the following pre-determined events:
38610
38611     enum plugin_event
38612     {
38613       PLUGIN_PASS_MANAGER_SETUP,    /* To hook into pass manager.  */
38614       PLUGIN_FINISH_TYPE,           /* After finishing parsing a type.  */
38615       PLUGIN_FINISH_DECL,           /* After finishing parsing a declaration. */
38616       PLUGIN_FINISH_UNIT,           /* Useful for summary processing.  */
38617       PLUGIN_PRE_GENERICIZE,        /* Allows to see low level AST in C and C++ frontends.  */
38618       PLUGIN_FINISH,                /* Called before GCC exits.  */
38619       PLUGIN_INFO,                  /* Information about the plugin. */
38620       PLUGIN_GGC_START,             /* Called at start of GCC Garbage Collection. */
38621       PLUGIN_GGC_MARKING,           /* Extend the GGC marking. */
38622       PLUGIN_GGC_END,               /* Called at end of GGC. */
38623       PLUGIN_REGISTER_GGC_ROOTS,    /* Register an extra GGC root table. */
38624       PLUGIN_REGISTER_GGC_CACHES,   /* Register an extra GGC cache table. */
38625       PLUGIN_ATTRIBUTES,            /* Called during attribute registration */
38626       PLUGIN_START_UNIT,            /* Called before processing a translation unit.  */
38627       PLUGIN_PRAGMAS,               /* Called during pragma registration. */
38628       /* Called before first pass from all_passes.  */
38629       PLUGIN_ALL_PASSES_START,
38630       /* Called after last pass from all_passes.  */
38631       PLUGIN_ALL_PASSES_END,
38632       /* Called before first ipa pass.  */
38633       PLUGIN_ALL_IPA_PASSES_START,
38634       /* Called after last ipa pass.  */
38635       PLUGIN_ALL_IPA_PASSES_END,
38636       /* Allows to override pass gate decision for current_pass.  */
38637       PLUGIN_OVERRIDE_GATE,
38638       /* Called before executing a pass.  */
38639       PLUGIN_PASS_EXECUTION,
38640       /* Called before executing subpasses of a GIMPLE_PASS in
38641          execute_ipa_pass_list.  */
38642       PLUGIN_EARLY_GIMPLE_PASSES_START,
38643       /* Called after executing subpasses of a GIMPLE_PASS in
38644          execute_ipa_pass_list.  */
38645       PLUGIN_EARLY_GIMPLE_PASSES_END,
38646       /* Called when a pass is first instantiated.  */
38647       PLUGIN_NEW_PASS,
38648
38649       PLUGIN_EVENT_FIRST_DYNAMIC    /* Dummy event used for indexing callback
38650                                        array.  */
38651     };
38652
38653 In addition, plugins can also look up the enumerator of a named event,
38654and / or generate new events dynamically, by calling the function
38655'get_named_event_id'.
38656
38657 To register a callback, the plugin calls 'register_callback' with the
38658arguments:
38659
38660   * 'char *name': Plugin name.
38661   * 'int event': The event code.
38662   * 'plugin_callback_func callback': The function that handles 'event'.
38663   * 'void *user_data': Pointer to plugin-specific data.
38664
38665 For the PLUGIN_PASS_MANAGER_SETUP, PLUGIN_INFO,
38666PLUGIN_REGISTER_GGC_ROOTS and PLUGIN_REGISTER_GGC_CACHES pseudo-events
38667the 'callback' should be null, and the 'user_data' is specific.
38668
38669 When the PLUGIN_PRAGMAS event is triggered (with a null pointer as data
38670from GCC), plugins may register their own pragmas using functions like
38671'c_register_pragma' or 'c_register_pragma_with_expansion'.
38672
38673
38674File: gccint.info,  Node: Plugins pass,  Next: Plugins GC,  Prev: Plugin API,  Up: Plugins
38675
3867623.3 Interacting with the pass manager
38677======================================
38678
38679There needs to be a way to add/reorder/remove passes dynamically.  This
38680is useful for both analysis plugins (plugging in after a certain pass
38681such as CFG or an IPA pass) and optimization plugins.
38682
38683 Basic support for inserting new passes or replacing existing passes is
38684provided.  A plugin registers a new pass with GCC by calling
38685'register_callback' with the 'PLUGIN_PASS_MANAGER_SETUP' event and a
38686pointer to a 'struct register_pass_info' object defined as follows
38687
38688     enum pass_positioning_ops
38689     {
38690       PASS_POS_INSERT_AFTER,  // Insert after the reference pass.
38691       PASS_POS_INSERT_BEFORE, // Insert before the reference pass.
38692       PASS_POS_REPLACE        // Replace the reference pass.
38693     };
38694
38695     struct register_pass_info
38696     {
38697       struct opt_pass *pass;            /* New pass provided by the plugin.  */
38698       const char *reference_pass_name;  /* Name of the reference pass for hooking
38699                                            up the new pass.  */
38700       int ref_pass_instance_number;     /* Insert the pass at the specified
38701                                            instance number of the reference pass.  */
38702                                         /* Do it for every instance if it is 0.  */
38703       enum pass_positioning_ops pos_op; /* how to insert the new pass.  */
38704     };
38705
38706
38707     /* Sample plugin code that registers a new pass.  */
38708     int
38709     plugin_init (struct plugin_name_args *plugin_info,
38710                  struct plugin_gcc_version *version)
38711     {
38712       struct register_pass_info pass_info;
38713
38714       ...
38715
38716       /* Code to fill in the pass_info object with new pass information.  */
38717
38718       ...
38719
38720       /* Register the new pass.  */
38721       register_callback (plugin_info->base_name, PLUGIN_PASS_MANAGER_SETUP, NULL, &pass_info);
38722
38723       ...
38724     }
38725
38726
38727File: gccint.info,  Node: Plugins GC,  Next: Plugins description,  Prev: Plugins pass,  Up: Plugins
38728
3872923.4 Interacting with the GCC Garbage Collector
38730===============================================
38731
38732Some plugins may want to be informed when GGC (the GCC Garbage
38733Collector) is running.  They can register callbacks for the
38734'PLUGIN_GGC_START' and 'PLUGIN_GGC_END' events (for which the callback
38735is called with a null 'gcc_data') to be notified of the start or end of
38736the GCC garbage collection.
38737
38738 Some plugins may need to have GGC mark additional data.  This can be
38739done by registering a callback (called with a null 'gcc_data') for the
38740'PLUGIN_GGC_MARKING' event.  Such callbacks can call the 'ggc_set_mark'
38741routine, preferably through the 'ggc_mark' macro (and conversely, these
38742routines should usually not be used in plugins outside of the
38743'PLUGIN_GGC_MARKING' event).
38744
38745 Some plugins may need to add extra GGC root tables, e.g.  to handle
38746their own 'GTY'-ed data.  This can be done with the
38747'PLUGIN_REGISTER_GGC_ROOTS' pseudo-event with a null callback and the
38748extra root table (of type 'struct ggc_root_tab*') as 'user_data'.
38749Plugins that want to use the 'if_marked' hash table option can add the
38750extra GGC cache tables generated by 'gengtype' using the
38751'PLUGIN_REGISTER_GGC_CACHES' pseudo-event with a null callback and the
38752extra cache table (of type 'struct ggc_cache_tab*') as 'user_data'.
38753Running the 'gengtype -p SOURCE-DIR FILE-LIST PLUGIN*.C ...' utility
38754generates these extra root tables.
38755
38756 You should understand the details of memory management inside GCC
38757before using 'PLUGIN_GGC_MARKING', 'PLUGIN_REGISTER_GGC_ROOTS' or
38758'PLUGIN_REGISTER_GGC_CACHES'.
38759
38760
38761File: gccint.info,  Node: Plugins description,  Next: Plugins attr,  Prev: Plugins GC,  Up: Plugins
38762
3876323.5 Giving information about a plugin
38764======================================
38765
38766A plugin should give some information to the user about itself.  This
38767uses the following structure:
38768
38769     struct plugin_info
38770     {
38771       const char *version;
38772       const char *help;
38773     };
38774
38775 Such a structure is passed as the 'user_data' by the plugin's init
38776routine using 'register_callback' with the 'PLUGIN_INFO' pseudo-event
38777and a null callback.
38778
38779
38780File: gccint.info,  Node: Plugins attr,  Next: Plugins recording,  Prev: Plugins description,  Up: Plugins
38781
3878223.6 Registering custom attributes or pragmas
38783=============================================
38784
38785For analysis (or other) purposes it is useful to be able to add custom
38786attributes or pragmas.
38787
38788 The 'PLUGIN_ATTRIBUTES' callback is called during attribute
38789registration.  Use the 'register_attribute' function to register custom
38790attributes.
38791
38792     /* Attribute handler callback */
38793     static tree
38794     handle_user_attribute (tree *node, tree name, tree args,
38795                            int flags, bool *no_add_attrs)
38796     {
38797       return NULL_TREE;
38798     }
38799
38800     /* Attribute definition */
38801     static struct attribute_spec user_attr =
38802       { "user", 1, 1, false,  false, false, handle_user_attribute, false };
38803
38804     /* Plugin callback called during attribute registration.
38805     Registered with register_callback (plugin_name, PLUGIN_ATTRIBUTES, register_attributes, NULL)
38806     */
38807     static void
38808     register_attributes (void *event_data, void *data)
38809     {
38810       warning (0, G_("Callback to register attributes"));
38811       register_attribute (&user_attr);
38812     }
38813
38814
38815 The 'PLUGIN_PRAGMAS' callback is called during pragmas registration.
38816Use the 'c_register_pragma' or 'c_register_pragma_with_expansion'
38817functions to register custom pragmas.
38818
38819     /* Plugin callback called during pragmas registration. Registered with
38820          register_callback (plugin_name, PLUGIN_PRAGMAS,
38821                             register_my_pragma, NULL);
38822     */
38823     static void
38824     register_my_pragma (void *event_data, void *data)
38825     {
38826       warning (0, G_("Callback to register pragmas"));
38827       c_register_pragma ("GCCPLUGIN", "sayhello", handle_pragma_sayhello);
38828     }
38829
38830 It is suggested to pass '"GCCPLUGIN"' (or a short name identifying your
38831plugin) as the "space" argument of your pragma.
38832
38833
38834File: gccint.info,  Node: Plugins recording,  Next: Plugins gate,  Prev: Plugins attr,  Up: Plugins
38835
3883623.7 Recording information about pass execution
38837===============================================
38838
38839The event PLUGIN_PASS_EXECUTION passes the pointer to the executed pass
38840(the same as current_pass) as 'gcc_data' to the callback.  You can also
38841inspect cfun to find out about which function this pass is executed for.
38842Note that this event will only be invoked if the gate check (if
38843applicable, modified by PLUGIN_OVERRIDE_GATE) succeeds.  You can use
38844other hooks, like 'PLUGIN_ALL_PASSES_START', 'PLUGIN_ALL_PASSES_END',
38845'PLUGIN_ALL_IPA_PASSES_START', 'PLUGIN_ALL_IPA_PASSES_END',
38846'PLUGIN_EARLY_GIMPLE_PASSES_START', and/or
38847'PLUGIN_EARLY_GIMPLE_PASSES_END' to manipulate global state in your
38848plugin(s) in order to get context for the pass execution.
38849
38850
38851File: gccint.info,  Node: Plugins gate,  Next: Plugins tracking,  Prev: Plugins recording,  Up: Plugins
38852
3885323.8 Controlling which passes are being run
38854===========================================
38855
38856After the original gate function for a pass is called, its result - the
38857gate status - is stored as an integer.  Then the event
38858'PLUGIN_OVERRIDE_GATE' is invoked, with a pointer to the gate status in
38859the 'gcc_data' parameter to the callback function.  A nonzero value of
38860the gate status means that the pass is to be executed.  You can both
38861read and write the gate status via the passed pointer.
38862
38863
38864File: gccint.info,  Node: Plugins tracking,  Next: Plugins building,  Prev: Plugins gate,  Up: Plugins
38865
3886623.9 Keeping track of available passes
38867======================================
38868
38869When your plugin is loaded, you can inspect the various pass lists to
38870determine what passes are available.  However, other plugins might add
38871new passes.  Also, future changes to GCC might cause generic passes to
38872be added after plugin loading.  When a pass is first added to one of the
38873pass lists, the event 'PLUGIN_NEW_PASS' is invoked, with the callback
38874parameter 'gcc_data' pointing to the new pass.
38875
38876
38877File: gccint.info,  Node: Plugins building,  Prev: Plugins tracking,  Up: Plugins
38878
3887923.10 Building GCC plugins
38880==========================
38881
38882If plugins are enabled, GCC installs the headers needed to build a
38883plugin (somewhere in the installation tree, e.g.  under '/usr/local').
38884In particular a 'plugin/include' directory is installed, containing all
38885the header files needed to build plugins.
38886
38887 On most systems, you can query this 'plugin' directory by invoking 'gcc
38888-print-file-name=plugin' (replace if needed 'gcc' with the appropriate
38889program path).
38890
38891 Inside plugins, this 'plugin' directory name can be queried by calling
38892'default_plugin_dir_name ()'.
38893
38894 Plugins may know, when they are compiled, the GCC version for which
38895'plugin-version.h' is provided.  The constant macros
38896'GCCPLUGIN_VERSION_MAJOR', 'GCCPLUGIN_VERSION_MINOR',
38897'GCCPLUGIN_VERSION_PATCHLEVEL', 'GCCPLUGIN_VERSION' are integer numbers,
38898so a plugin could ensure it is built for GCC 4.7 with
38899     #if GCCPLUGIN_VERSION != 4007
38900     #error this GCC plugin is for GCC 4.7
38901     #endif
38902
38903 The following GNU Makefile excerpt shows how to build a simple plugin:
38904
38905     GCC=gcc
38906     PLUGIN_SOURCE_FILES= plugin1.c plugin2.c
38907     PLUGIN_OBJECT_FILES= $(patsubst %.c,%.o,$(PLUGIN_SOURCE_FILES))
38908     GCCPLUGINS_DIR:= $(shell $(GCC) -print-file-name=plugin)
38909     CFLAGS+= -I$(GCCPLUGINS_DIR)/include -fPIC -O2
38910
38911     plugin.so: $(PLUGIN_OBJECT_FILES)
38912        $(GCC) -shared $^ -o $@
38913
38914 A single source file plugin may be built with 'gcc -I`gcc
38915-print-file-name=plugin`/include -fPIC -shared -O2 plugin.c -o
38916plugin.so', using backquote shell syntax to query the 'plugin'
38917directory.
38918
38919 When a plugin needs to use 'gengtype', be sure that both 'gengtype' and
38920'gtype.state' have the same version as the GCC for which the plugin is
38921built.
38922
38923
38924File: gccint.info,  Node: LTO,  Next: Funding,  Prev: Plugins,  Up: Top
38925
3892624 Link Time Optimization
38927*************************
38928
38929Link Time Optimization (LTO) gives GCC the capability of dumping its
38930internal representation (GIMPLE) to disk, so that all the different
38931compilation units that make up a single executable can be optimized as a
38932single module.  This expands the scope of inter-procedural optimizations
38933to encompass the whole program (or, rather, everything that is visible
38934at link time).
38935
38936* Menu:
38937
38938* LTO Overview::            Overview of LTO.
38939* LTO object file layout::  LTO file sections in ELF.
38940* IPA::                     Using summary information in IPA passes.
38941* WHOPR::                   Whole program assumptions,
38942                            linker plugin and symbol visibilities.
38943* Internal flags::          Internal flags controlling 'lto1'.
38944
38945
38946File: gccint.info,  Node: LTO Overview,  Next: LTO object file layout,  Up: LTO
38947
3894824.1 Design Overview
38949====================
38950
38951Link time optimization is implemented as a GCC front end for a bytecode
38952representation of GIMPLE that is emitted in special sections of '.o'
38953files.  Currently, LTO support is enabled in most ELF-based systems, as
38954well as darwin, cygwin and mingw systems.
38955
38956 Since GIMPLE bytecode is saved alongside final object code, object
38957files generated with LTO support are larger than regular object files.
38958This "fat" object format makes it easy to integrate LTO into existing
38959build systems, as one can, for instance, produce archives of the files.
38960Additionally, one might be able to ship one set of fat objects which
38961could be used both for development and the production of optimized
38962builds.  A, perhaps surprising, side effect of this feature is that any
38963mistake in the toolchain that leads to LTO information not being used
38964(e.g. an older 'libtool' calling 'ld' directly).  This is both an
38965advantage, as the system is more robust, and a disadvantage, as the user
38966is not informed that the optimization has been disabled.
38967
38968 The current implementation only produces "fat" objects, effectively
38969doubling compilation time and increasing file sizes up to 5x the
38970original size.  This hides the problem that some tools, such as 'ar' and
38971'nm', need to understand symbol tables of LTO sections.  These tools
38972were extended to use the plugin infrastructure, and with these problems
38973solved, GCC will also support "slim" objects consisting of the
38974intermediate code alone.
38975
38976 At the highest level, LTO splits the compiler in two.  The first half
38977(the "writer") produces a streaming representation of all the internal
38978data structures needed to optimize and generate code.  This includes
38979declarations, types, the callgraph and the GIMPLE representation of
38980function bodies.
38981
38982 When '-flto' is given during compilation of a source file, the pass
38983manager executes all the passes in 'all_lto_gen_passes'.  Currently,
38984this phase is composed of two IPA passes:
38985
38986   * 'pass_ipa_lto_gimple_out' This pass executes the function
38987     'lto_output' in 'lto-streamer-out.c', which traverses the call
38988     graph encoding every reachable declaration, type and function.
38989     This generates a memory representation of all the file sections
38990     described below.
38991
38992   * 'pass_ipa_lto_finish_out' This pass executes the function
38993     'produce_asm_for_decls' in 'lto-streamer-out.c', which takes the
38994     memory image built in the previous pass and encodes it in the
38995     corresponding ELF file sections.
38996
38997 The second half of LTO support is the "reader".  This is implemented as
38998the GCC front end 'lto1' in 'lto/lto.c'.  When 'collect2' detects a link
38999set of '.o'/'.a' files with LTO information and the '-flto' is enabled,
39000it invokes 'lto1' which reads the set of files and aggregates them into
39001a single translation unit for optimization.  The main entry point for
39002the reader is 'lto/lto.c':'lto_main'.
39003
3900424.1.1 LTO modes of operation
39005-----------------------------
39006
39007One of the main goals of the GCC link-time infrastructure was to allow
39008effective compilation of large programs.  For this reason GCC implements
39009two link-time compilation modes.
39010
39011  1. _LTO mode_, in which the whole program is read into the compiler at
39012     link-time and optimized in a similar way as if it were a single
39013     source-level compilation unit.
39014
39015  2. _WHOPR or partitioned mode_, designed to utilize multiple CPUs
39016     and/or a distributed compilation environment to quickly link large
39017     applications.  WHOPR stands for WHOle Program optimizeR (not to be
39018     confused with the semantics of '-fwhole-program').  It partitions
39019     the aggregated callgraph from many different '.o' files and
39020     distributes the compilation of the sub-graphs to different CPUs.
39021
39022     Note that distributed compilation is not implemented yet, but since
39023     the parallelism is facilitated via generating a 'Makefile', it
39024     would be easy to implement.
39025
39026 WHOPR splits LTO into three main stages:
39027  1. Local generation (LGEN) This stage executes in parallel.  Every
39028     file in the program is compiled into the intermediate language and
39029     packaged together with the local call-graph and summary
39030     information.  This stage is the same for both the LTO and WHOPR
39031     compilation mode.
39032
39033  2. Whole Program Analysis (WPA) WPA is performed sequentially.  The
39034     global call-graph is generated, and a global analysis procedure
39035     makes transformation decisions.  The global call-graph is
39036     partitioned to facilitate parallel optimization during phase 3.
39037     The results of the WPA stage are stored into new object files which
39038     contain the partitions of program expressed in the intermediate
39039     language and the optimization decisions.
39040
39041  3. Local transformations (LTRANS) This stage executes in parallel.
39042     All the decisions made during phase 2 are implemented locally in
39043     each partitioned object file, and the final object code is
39044     generated.  Optimizations which cannot be decided efficiently
39045     during the phase 2 may be performed on the local call-graph
39046     partitions.
39047
39048 WHOPR can be seen as an extension of the usual LTO mode of compilation.
39049In LTO, WPA and LTRANS are executed within a single execution of the
39050compiler, after the whole program has been read into memory.
39051
39052 When compiling in WHOPR mode, the callgraph is partitioned during the
39053WPA stage.  The whole program is split into a given number of partitions
39054of roughly the same size.  The compiler tries to minimize the number of
39055references which cross partition boundaries.  The main advantage of
39056WHOPR is to allow the parallel execution of LTRANS stages, which are the
39057most time-consuming part of the compilation process.  Additionally, it
39058avoids the need to load the whole program into memory.
39059
39060
39061File: gccint.info,  Node: LTO object file layout,  Next: IPA,  Prev: LTO Overview,  Up: LTO
39062
3906324.2 LTO file sections
39064======================
39065
39066LTO information is stored in several ELF sections inside object files.
39067Data structures and enum codes for sections are defined in
39068'lto-streamer.h'.
39069
39070 These sections are emitted from 'lto-streamer-out.c' and mapped in all
39071at once from 'lto/lto.c':'lto_file_read'.  The individual functions
39072dealing with the reading/writing of each section are described below.
39073
39074   * Command line options ('.gnu.lto_.opts')
39075
39076     This section contains the command line options used to generate the
39077     object files.  This is used at link time to determine the
39078     optimization level and other settings when they are not explicitly
39079     specified at the linker command line.
39080
39081     Currently, GCC does not support combining LTO object files compiled
39082     with different set of the command line options into a single
39083     binary.  At link time, the options given on the command line and
39084     the options saved on all the files in a link-time set are applied
39085     globally.  No attempt is made at validating the combination of
39086     flags (other than the usual validation done by option processing).
39087     This is implemented in 'lto/lto.c':'lto_read_all_file_options'.
39088
39089   * Symbol table ('.gnu.lto_.symtab')
39090
39091     This table replaces the ELF symbol table for functions and
39092     variables represented in the LTO IL. Symbols used and exported by
39093     the optimized assembly code of "fat" objects might not match the
39094     ones used and exported by the intermediate code.  This table is
39095     necessary because the intermediate code is less optimized and thus
39096     requires a separate symbol table.
39097
39098     Additionally, the binary code in the "fat" object will lack a call
39099     to a function, since the call was optimized out at compilation time
39100     after the intermediate language was streamed out.  In some special
39101     cases, the same optimization may not happen during link-time
39102     optimization.  This would lead to an undefined symbol if only one
39103     symbol table was used.
39104
39105     The symbol table is emitted in
39106     'lto-streamer-out.c':'produce_symtab'.
39107
39108   * Global declarations and types ('.gnu.lto_.decls')
39109
39110     This section contains an intermediate language dump of all
39111     declarations and types required to represent the callgraph, static
39112     variables and top-level debug info.
39113
39114     The contents of this section are emitted in
39115     'lto-streamer-out.c':'produce_asm_for_decls'.  Types and symbols
39116     are emitted in a topological order that preserves the sharing of
39117     pointers when the file is read back in
39118     ('lto.c':'read_cgraph_and_symbols').
39119
39120   * The callgraph ('.gnu.lto_.cgraph')
39121
39122     This section contains the basic data structure used by the GCC
39123     inter-procedural optimization infrastructure.  This section stores
39124     an annotated multi-graph which represents the functions and call
39125     sites as well as the variables, aliases and top-level 'asm'
39126     statements.
39127
39128     This section is emitted in 'lto-streamer-out.c':'output_cgraph' and
39129     read in 'lto-cgraph.c':'input_cgraph'.
39130
39131   * IPA references ('.gnu.lto_.refs')
39132
39133     This section contains references between function and static
39134     variables.  It is emitted by 'lto-cgraph.c':'output_refs' and read
39135     by 'lto-cgraph.c':'input_refs'.
39136
39137   * Function bodies ('.gnu.lto_.function_body.<name>')
39138
39139     This section contains function bodies in the intermediate language
39140     representation.  Every function body is in a separate section to
39141     allow copying of the section independently to different object
39142     files or reading the function on demand.
39143
39144     Functions are emitted in 'lto-streamer-out.c':'output_function' and
39145     read in 'lto-streamer-in.c':'input_function'.
39146
39147   * Static variable initializers ('.gnu.lto_.vars')
39148
39149     This section contains all the symbols in the global variable pool.
39150     It is emitted by 'lto-cgraph.c':'output_varpool' and read in
39151     'lto-cgraph.c':'input_cgraph'.
39152
39153   * Summaries and optimization summaries used by IPA passes
39154     ('.gnu.lto_.<xxx>', where '<xxx>' is one of 'jmpfuncs', 'pureconst'
39155     or 'reference')
39156
39157     These sections are used by IPA passes that need to emit summary
39158     information during LTO generation to be read and aggregated at link
39159     time.  Each pass is responsible for implementing two pass manager
39160     hooks: one for writing the summary and another for reading it in.
39161     The format of these sections is entirely up to each individual
39162     pass.  The only requirement is that the writer and reader hooks
39163     agree on the format.
39164
39165
39166File: gccint.info,  Node: IPA,  Next: WHOPR,  Prev: LTO object file layout,  Up: LTO
39167
3916824.3 Using summary information in IPA passes
39169============================================
39170
39171Programs are represented internally as a _callgraph_ (a multi-graph
39172where nodes are functions and edges are call sites) and a _varpool_ (a
39173list of static and external variables in the program).
39174
39175 The inter-procedural optimization is organized as a sequence of
39176individual passes, which operate on the callgraph and the varpool.  To
39177make the implementation of WHOPR possible, every inter-procedural
39178optimization pass is split into several stages that are executed at
39179different times during WHOPR compilation:
39180
39181   * LGEN time
39182       1. _Generate summary_ ('generate_summary' in 'struct
39183          ipa_opt_pass_d').  This stage analyzes every function body and
39184          variable initializer is examined and stores relevant
39185          information into a pass-specific data structure.
39186
39187       2. _Write summary_ ('write_summary' in 'struct ipa_opt_pass_d').
39188          This stage writes all the pass-specific information generated
39189          by 'generate_summary'.  Summaries go into their own
39190          'LTO_section_*' sections that have to be declared in
39191          'lto-streamer.h':'enum lto_section_type'.  A new section is
39192          created by calling 'create_output_block' and data can be
39193          written using the 'lto_output_*' routines.
39194
39195   * WPA time
39196       1. _Read summary_ ('read_summary' in 'struct ipa_opt_pass_d').
39197          This stage reads all the pass-specific information in exactly
39198          the same order that it was written by 'write_summary'.
39199
39200       2. _Execute_ ('execute' in 'struct opt_pass').  This performs
39201          inter-procedural propagation.  This must be done without
39202          actual access to the individual function bodies or variable
39203          initializers.  Typically, this results in a transitive closure
39204          operation over the summary information of all the nodes in the
39205          callgraph.
39206
39207       3. _Write optimization summary_ ('write_optimization_summary' in
39208          'struct ipa_opt_pass_d').  This writes the result of the
39209          inter-procedural propagation into the object file.  This can
39210          use the same data structures and helper routines used in
39211          'write_summary'.
39212
39213   * LTRANS time
39214       1. _Read optimization summary_ ('read_optimization_summary' in
39215          'struct ipa_opt_pass_d').  The counterpart to
39216          'write_optimization_summary'.  This reads the interprocedural
39217          optimization decisions in exactly the same format emitted by
39218          'write_optimization_summary'.
39219
39220       2. _Transform_ ('function_transform' and 'variable_transform' in
39221          'struct ipa_opt_pass_d').  The actual function bodies and
39222          variable initializers are updated based on the information
39223          passed down from the _Execute_ stage.
39224
39225 The implementation of the inter-procedural passes are shared between
39226LTO, WHOPR and classic non-LTO compilation.
39227
39228   * During the traditional file-by-file mode every pass executes its
39229     own _Generate summary_, _Execute_, and _Transform_ stages within
39230     the single execution context of the compiler.
39231
39232   * In LTO compilation mode, every pass uses _Generate summary_ and
39233     _Write summary_ stages at compilation time, while the _Read
39234     summary_, _Execute_, and _Transform_ stages are executed at link
39235     time.
39236
39237   * In WHOPR mode all stages are used.
39238
39239 To simplify development, the GCC pass manager differentiates between
39240normal inter-procedural passes and small inter-procedural passes.  A
39241_small inter-procedural pass_ ('SIMPLE_IPA_PASS') is a pass that does
39242everything at once and thus it can not be executed during WPA in WHOPR
39243mode.  It defines only the _Execute_ stage and during this stage it
39244accesses and modifies the function bodies.  Such passes are useful for
39245optimization at LGEN or LTRANS time and are used, for example, to
39246implement early optimization before writing object files.  The simple
39247inter-procedural passes can also be used for easier prototyping and
39248development of a new inter-procedural pass.
39249
3925024.3.1 Virtual clones
39251---------------------
39252
39253One of the main challenges of introducing the WHOPR compilation mode was
39254addressing the interactions between optimization passes.  In LTO
39255compilation mode, the passes are executed in a sequence, each of which
39256consists of analysis (or _Generate summary_), propagation (or _Execute_)
39257and _Transform_ stages.  Once the work of one pass is finished, the next
39258pass sees the updated program representation and can execute.  This
39259makes the individual passes dependent on each other.
39260
39261 In WHOPR mode all passes first execute their _Generate summary_ stage.
39262Then summary writing marks the end of the LGEN stage.  At WPA time, the
39263summaries are read back into memory and all passes run the _Execute_
39264stage.  Optimization summaries are streamed and sent to LTRANS, where
39265all the passes execute the _Transform_ stage.
39266
39267 Most optimization passes split naturally into analysis, propagation and
39268transformation stages.  But some do not.  The main problem arises when
39269one pass performs changes and the following pass gets confused by seeing
39270different callgraphs between the _Transform_ stage and the _Generate
39271summary_ or _Execute_ stage.  This means that the passes are required to
39272communicate their decisions with each other.
39273
39274 To facilitate this communication, the GCC callgraph infrastructure
39275implements _virtual clones_, a method of representing the changes
39276performed by the optimization passes in the callgraph without needing to
39277update function bodies.
39278
39279 A _virtual clone_ in the callgraph is a function that has no associated
39280body, just a description of how to create its body based on a different
39281function (which itself may be a virtual clone).
39282
39283 The description of function modifications includes adjustments to the
39284function's signature (which allows, for example, removing or adding
39285function arguments), substitutions to perform on the function body, and,
39286for inlined functions, a pointer to the function that it will be inlined
39287into.
39288
39289 It is also possible to redirect any edge of the callgraph from a
39290function to its virtual clone.  This implies updating of the call site
39291to adjust for the new function signature.
39292
39293 Most of the transformations performed by inter-procedural optimizations
39294can be represented via virtual clones.  For instance, a constant
39295propagation pass can produce a virtual clone of the function which
39296replaces one of its arguments by a constant.  The inliner can represent
39297its decisions by producing a clone of a function whose body will be
39298later integrated into a given function.
39299
39300 Using _virtual clones_, the program can be easily updated during the
39301_Execute_ stage, solving most of pass interactions problems that would
39302otherwise occur during _Transform_.
39303
39304 Virtual clones are later materialized in the LTRANS stage and turned
39305into real functions.  Passes executed after the virtual clone were
39306introduced also perform their _Transform_ stage on new functions, so for
39307a pass there is no significant difference between operating on a real
39308function or a virtual clone introduced before its _Execute_ stage.
39309
39310 Optimization passes then work on virtual clones introduced before their
39311_Execute_ stage as if they were real functions.  The only difference is
39312that clones are not visible during the _Generate Summary_ stage.
39313
39314 To keep function summaries updated, the callgraph interface allows an
39315optimizer to register a callback that is called every time a new clone
39316is introduced as well as when the actual function or variable is
39317generated or when a function or variable is removed.  These hooks are
39318registered in the _Generate summary_ stage and allow the pass to keep
39319its information intact until the _Execute_ stage.  The same hooks can
39320also be registered during the _Execute_ stage to keep the optimization
39321summaries updated for the _Transform_ stage.
39322
3932324.3.2 IPA references
39324---------------------
39325
39326GCC represents IPA references in the callgraph.  For a function or
39327variable 'A', the _IPA reference_ is a list of all locations where the
39328address of 'A' is taken and, when 'A' is a variable, a list of all
39329direct stores and reads to/from 'A'.  References represent an oriented
39330multi-graph on the union of nodes of the callgraph and the varpool.  See
39331'ipa-reference.c':'ipa_reference_write_optimization_summary' and
39332'ipa-reference.c':'ipa_reference_read_optimization_summary' for details.
39333
3933424.3.3 Jump functions
39335---------------------
39336
39337Suppose that an optimization pass sees a function 'A' and it knows the
39338values of (some of) its arguments.  The _jump function_ describes the
39339value of a parameter of a given function call in function 'A' based on
39340this knowledge.
39341
39342 Jump functions are used by several optimizations, such as the
39343inter-procedural constant propagation pass and the devirtualization
39344pass.  The inliner also uses jump functions to perform inlining of
39345callbacks.
39346
39347
39348File: gccint.info,  Node: WHOPR,  Next: Internal flags,  Prev: IPA,  Up: LTO
39349
3935024.4 Whole program assumptions, linker plugin and symbol visibilities
39351=====================================================================
39352
39353Link-time optimization gives relatively minor benefits when used alone.
39354The problem is that propagation of inter-procedural information does not
39355work well across functions and variables that are called or referenced
39356by other compilation units (such as from a dynamically linked library).
39357We say that such functions and variables are _externally visible_.
39358
39359 To make the situation even more difficult, many applications organize
39360themselves as a set of shared libraries, and the default ELF visibility
39361rules allow one to overwrite any externally visible symbol with a
39362different symbol at runtime.  This basically disables any optimizations
39363across such functions and variables, because the compiler cannot be sure
39364that the function body it is seeing is the same function body that will
39365be used at runtime.  Any function or variable not declared 'static' in
39366the sources degrades the quality of inter-procedural optimization.
39367
39368 To avoid this problem the compiler must assume that it sees the whole
39369program when doing link-time optimization.  Strictly speaking, the whole
39370program is rarely visible even at link-time.  Standard system libraries
39371are usually linked dynamically or not provided with the link-time
39372information.  In GCC, the whole program option ('-fwhole-program')
39373asserts that every function and variable defined in the current
39374compilation unit is static, except for function 'main' (note: at link
39375time, the current unit is the union of all objects compiled with LTO).
39376Since some functions and variables need to be referenced externally, for
39377example by another DSO or from an assembler file, GCC also provides the
39378function and variable attribute 'externally_visible' which can be used
39379to disable the effect of '-fwhole-program' on a specific symbol.
39380
39381 The whole program mode assumptions are slightly more complex in C++,
39382where inline functions in headers are put into _COMDAT_ sections.
39383COMDAT function and variables can be defined by multiple object files
39384and their bodies are unified at link-time and dynamic link-time.  COMDAT
39385functions are changed to local only when their address is not taken and
39386thus un-sharing them with a library is not harmful.  COMDAT variables
39387always remain externally visible, however for readonly variables it is
39388assumed that their initializers cannot be overwritten by a different
39389value.
39390
39391 GCC provides the function and variable attribute 'visibility' that can
39392be used to specify the visibility of externally visible symbols (or
39393alternatively an '-fdefault-visibility' command line option).  ELF
39394defines the 'default', 'protected', 'hidden' and 'internal'
39395visibilities.
39396
39397 The most commonly used is visibility is 'hidden'.  It specifies that
39398the symbol cannot be referenced from outside of the current shared
39399library.  Unfortunately, this information cannot be used directly by the
39400link-time optimization in the compiler since the whole shared library
39401also might contain non-LTO objects and those are not visible to the
39402compiler.
39403
39404 GCC solves this problem using linker plugins.  A _linker plugin_ is an
39405interface to the linker that allows an external program to claim the
39406ownership of a given object file.  The linker then performs the linking
39407procedure by querying the plugin about the symbol table of the claimed
39408objects and once the linking decisions are complete, the plugin is
39409allowed to provide the final object file before the actual linking is
39410made.  The linker plugin obtains the symbol resolution information which
39411specifies which symbols provided by the claimed objects are bound from
39412the rest of a binary being linked.
39413
39414 Currently, the linker plugin works only in combination with the Gold
39415linker, but a GNU ld implementation is under development.
39416
39417 GCC is designed to be independent of the rest of the toolchain and aims
39418to support linkers without plugin support.  For this reason it does not
39419use the linker plugin by default.  Instead, the object files are
39420examined by 'collect2' before being passed to the linker and objects
39421found to have LTO sections are passed to 'lto1' first.  This mode does
39422not work for library archives.  The decision on what object files from
39423the archive are needed depends on the actual linking and thus GCC would
39424have to implement the linker itself.  The resolution information is
39425missing too and thus GCC needs to make an educated guess based on
39426'-fwhole-program'.  Without the linker plugin GCC also assumes that
39427symbols are declared 'hidden' and not referred by non-LTO code by
39428default.
39429
39430
39431File: gccint.info,  Node: Internal flags,  Prev: WHOPR,  Up: LTO
39432
3943324.5 Internal flags controlling 'lto1'
39434======================================
39435
39436The following flags are passed into 'lto1' and are not meant to be used
39437directly from the command line.
39438
39439   * -fwpa This option runs the serial part of the link-time optimizer
39440     performing the inter-procedural propagation (WPA mode).  The
39441     compiler reads in summary information from all inputs and performs
39442     an analysis based on summary information only.  It generates object
39443     files for subsequent runs of the link-time optimizer where
39444     individual object files are optimized using both summary
39445     information from the WPA mode and the actual function bodies.  It
39446     then drives the LTRANS phase.
39447
39448   * -fltrans This option runs the link-time optimizer in the
39449     local-transformation (LTRANS) mode, which reads in output from a
39450     previous run of the LTO in WPA mode.  In the LTRANS mode, LTO
39451     optimizes an object and produces the final assembly.
39452
39453   * -fltrans-output-list=FILE This option specifies a file to which the
39454     names of LTRANS output files are written.  This option is only
39455     meaningful in conjunction with '-fwpa'.
39456
39457
39458File: gccint.info,  Node: Funding,  Next: GNU Project,  Prev: LTO,  Up: Top
39459
39460Funding Free Software
39461*********************
39462
39463If you want to have more free software a few years from now, it makes
39464sense for you to help encourage people to contribute funds for its
39465development.  The most effective approach known is to encourage
39466commercial redistributors to donate.
39467
39468 Users of free software systems can boost the pace of development by
39469encouraging for-a-fee distributors to donate part of their selling price
39470to free software developers--the Free Software Foundation, and others.
39471
39472 The way to convince distributors to do this is to demand it and expect
39473it from them.  So when you compare distributors, judge them partly by
39474how much they give to free software development.  Show distributors they
39475must compete to be the one who gives the most.
39476
39477 To make this approach work, you must insist on numbers that you can
39478compare, such as, "We will donate ten dollars to the Frobnitz project
39479for each disk sold."  Don't be satisfied with a vague promise, such as
39480"A portion of the profits are donated," since it doesn't give a basis
39481for comparison.
39482
39483 Even a precise fraction "of the profits from this disk" is not very
39484meaningful, since creative accounting and unrelated business decisions
39485can greatly alter what fraction of the sales price counts as profit.  If
39486the price you pay is $50, ten percent of the profit is probably less
39487than a dollar; it might be a few cents, or nothing at all.
39488
39489 Some redistributors do development work themselves.  This is useful
39490too; but to keep everyone honest, you need to inquire how much they do,
39491and what kind.  Some kinds of development make much more long-term
39492difference than others.  For example, maintaining a separate version of
39493a program contributes very little; maintaining the standard version of a
39494program for the whole community contributes much.  Easy new ports
39495contribute little, since someone else would surely do them; difficult
39496ports such as adding a new CPU to the GNU Compiler Collection contribute
39497more; major new features or packages contribute the most.
39498
39499 By establishing the idea that supporting further development is "the
39500proper thing to do" when distributing free software for a fee, we can
39501assure a steady flow of resources into making more free software.
39502
39503     Copyright (C) 1994 Free Software Foundation, Inc.
39504     Verbatim copying and redistribution of this section is permitted
39505     without royalty; alteration is not permitted.
39506
39507
39508File: gccint.info,  Node: GNU Project,  Next: Copying,  Prev: Funding,  Up: Top
39509
39510The GNU Project and GNU/Linux
39511*****************************
39512
39513The GNU Project was launched in 1984 to develop a complete Unix-like
39514operating system which is free software: the GNU system.  (GNU is a
39515recursive acronym for "GNU's Not Unix"; it is pronounced "guh-NEW".)
39516Variants of the GNU operating system, which use the kernel Linux, are
39517now widely used; though these systems are often referred to as "Linux",
39518they are more accurately called GNU/Linux systems.
39519
39520 For more information, see:
39521     <http://www.gnu.org/>
39522     <http://www.gnu.org/gnu/linux-and-gnu.html>
39523
39524
39525File: gccint.info,  Node: Copying,  Next: GNU Free Documentation License,  Prev: GNU Project,  Up: Top
39526
39527GNU General Public License
39528**************************
39529
39530                        Version 3, 29 June 2007
39531
39532     Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
39533
39534     Everyone is permitted to copy and distribute verbatim copies of this
39535     license document, but changing it is not allowed.
39536
39537Preamble
39538========
39539
39540The GNU General Public License is a free, copyleft license for software
39541and other kinds of works.
39542
39543 The licenses for most software and other practical works are designed
39544to take away your freedom to share and change the works.  By contrast,
39545the GNU General Public License is intended to guarantee your freedom to
39546share and change all versions of a program-to make sure it remains free
39547software for all its users.  We, the Free Software Foundation, use the
39548GNU General Public License for most of our software; it applies also to
39549any other work released this way by its authors.  You can apply it to
39550your programs, too.
39551
39552 When we speak of free software, we are referring to freedom, not price.
39553Our General Public Licenses are designed to make sure that you have the
39554freedom to distribute copies of free software (and charge for them if
39555you wish), that you receive source code or can get it if you want it,
39556that you can change the software or use pieces of it in new free
39557programs, and that you know you can do these things.
39558
39559 To protect your rights, we need to prevent others from denying you
39560these rights or asking you to surrender the rights.  Therefore, you have
39561certain responsibilities if you distribute copies of the software, or if
39562you modify it: responsibilities to respect the freedom of others.
39563
39564 For example, if you distribute copies of such a program, whether gratis
39565or for a fee, you must pass on to the recipients the same freedoms that
39566you received.  You must make sure that they, too, receive or can get the
39567source code.  And you must show them these terms so they know their
39568rights.
39569
39570 Developers that use the GNU GPL protect your rights with two steps: (1)
39571assert copyright on the software, and (2) offer you this License giving
39572you legal permission to copy, distribute and/or modify it.
39573
39574 For the developers' and authors' protection, the GPL clearly explains
39575that there is no warranty for this free software.  For both users' and
39576authors' sake, the GPL requires that modified versions be marked as
39577changed, so that their problems will not be attributed erroneously to
39578authors of previous versions.
39579
39580 Some devices are designed to deny users access to install or run
39581modified versions of the software inside them, although the manufacturer
39582can do so.  This is fundamentally incompatible with the aim of
39583protecting users' freedom to change the software.  The systematic
39584pattern of such abuse occurs in the area of products for individuals to
39585use, which is precisely where it is most unacceptable.  Therefore, we
39586have designed this version of the GPL to prohibit the practice for those
39587products.  If such problems arise substantially in other domains, we
39588stand ready to extend this provision to those domains in future versions
39589of the GPL, as needed to protect the freedom of users.
39590
39591 Finally, every program is threatened constantly by software patents.
39592States should not allow patents to restrict development and use of
39593software on general-purpose computers, but in those that do, we wish to
39594avoid the special danger that patents applied to a free program could
39595make it effectively proprietary.  To prevent this, the GPL assures that
39596patents cannot be used to render the program non-free.
39597
39598 The precise terms and conditions for copying, distribution and
39599modification follow.
39600
39601TERMS AND CONDITIONS
39602====================
39603
39604  0. Definitions.
39605
39606     "This License" refers to version 3 of the GNU General Public
39607     License.
39608
39609     "Copyright" also means copyright-like laws that apply to other
39610     kinds of works, such as semiconductor masks.
39611
39612     "The Program" refers to any copyrightable work licensed under this
39613     License.  Each licensee is addressed as "you".  "Licensees" and
39614     "recipients" may be individuals or organizations.
39615
39616     To "modify" a work means to copy from or adapt all or part of the
39617     work in a fashion requiring copyright permission, other than the
39618     making of an exact copy.  The resulting work is called a "modified
39619     version" of the earlier work or a work "based on" the earlier work.
39620
39621     A "covered work" means either the unmodified Program or a work
39622     based on the Program.
39623
39624     To "propagate" a work means to do anything with it that, without
39625     permission, would make you directly or secondarily liable for
39626     infringement under applicable copyright law, except executing it on
39627     a computer or modifying a private copy.  Propagation includes
39628     copying, distribution (with or without modification), making
39629     available to the public, and in some countries other activities as
39630     well.
39631
39632     To "convey" a work means any kind of propagation that enables other
39633     parties to make or receive copies.  Mere interaction with a user
39634     through a computer network, with no transfer of a copy, is not
39635     conveying.
39636
39637     An interactive user interface displays "Appropriate Legal Notices"
39638     to the extent that it includes a convenient and prominently visible
39639     feature that (1) displays an appropriate copyright notice, and (2)
39640     tells the user that there is no warranty for the work (except to
39641     the extent that warranties are provided), that licensees may convey
39642     the work under this License, and how to view a copy of this
39643     License.  If the interface presents a list of user commands or
39644     options, such as a menu, a prominent item in the list meets this
39645     criterion.
39646
39647  1. Source Code.
39648
39649     The "source code" for a work means the preferred form of the work
39650     for making modifications to it.  "Object code" means any non-source
39651     form of a work.
39652
39653     A "Standard Interface" means an interface that either is an
39654     official standard defined by a recognized standards body, or, in
39655     the case of interfaces specified for a particular programming
39656     language, one that is widely used among developers working in that
39657     language.
39658
39659     The "System Libraries" of an executable work include anything,
39660     other than the work as a whole, that (a) is included in the normal
39661     form of packaging a Major Component, but which is not part of that
39662     Major Component, and (b) serves only to enable use of the work with
39663     that Major Component, or to implement a Standard Interface for
39664     which an implementation is available to the public in source code
39665     form.  A "Major Component", in this context, means a major
39666     essential component (kernel, window system, and so on) of the
39667     specific operating system (if any) on which the executable work
39668     runs, or a compiler used to produce the work, or an object code
39669     interpreter used to run it.
39670
39671     The "Corresponding Source" for a work in object code form means all
39672     the source code needed to generate, install, and (for an executable
39673     work) run the object code and to modify the work, including scripts
39674     to control those activities.  However, it does not include the
39675     work's System Libraries, or general-purpose tools or generally
39676     available free programs which are used unmodified in performing
39677     those activities but which are not part of the work.  For example,
39678     Corresponding Source includes interface definition files associated
39679     with source files for the work, and the source code for shared
39680     libraries and dynamically linked subprograms that the work is
39681     specifically designed to require, such as by intimate data
39682     communication or control flow between those subprograms and other
39683     parts of the work.
39684
39685     The Corresponding Source need not include anything that users can
39686     regenerate automatically from other parts of the Corresponding
39687     Source.
39688
39689     The Corresponding Source for a work in source code form is that
39690     same work.
39691
39692  2. Basic Permissions.
39693
39694     All rights granted under this License are granted for the term of
39695     copyright on the Program, and are irrevocable provided the stated
39696     conditions are met.  This License explicitly affirms your unlimited
39697     permission to run the unmodified Program.  The output from running
39698     a covered work is covered by this License only if the output, given
39699     its content, constitutes a covered work.  This License acknowledges
39700     your rights of fair use or other equivalent, as provided by
39701     copyright law.
39702
39703     You may make, run and propagate covered works that you do not
39704     convey, without conditions so long as your license otherwise
39705     remains in force.  You may convey covered works to others for the
39706     sole purpose of having them make modifications exclusively for you,
39707     or provide you with facilities for running those works, provided
39708     that you comply with the terms of this License in conveying all
39709     material for which you do not control copyright.  Those thus making
39710     or running the covered works for you must do so exclusively on your
39711     behalf, under your direction and control, on terms that prohibit
39712     them from making any copies of your copyrighted material outside
39713     their relationship with you.
39714
39715     Conveying under any other circumstances is permitted solely under
39716     the conditions stated below.  Sublicensing is not allowed; section
39717     10 makes it unnecessary.
39718
39719  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
39720
39721     No covered work shall be deemed part of an effective technological
39722     measure under any applicable law fulfilling obligations under
39723     article 11 of the WIPO copyright treaty adopted on 20 December
39724     1996, or similar laws prohibiting or restricting circumvention of
39725     such measures.
39726
39727     When you convey a covered work, you waive any legal power to forbid
39728     circumvention of technological measures to the extent such
39729     circumvention is effected by exercising rights under this License
39730     with respect to the covered work, and you disclaim any intention to
39731     limit operation or modification of the work as a means of
39732     enforcing, against the work's users, your or third parties' legal
39733     rights to forbid circumvention of technological measures.
39734
39735  4. Conveying Verbatim Copies.
39736
39737     You may convey verbatim copies of the Program's source code as you
39738     receive it, in any medium, provided that you conspicuously and
39739     appropriately publish on each copy an appropriate copyright notice;
39740     keep intact all notices stating that this License and any
39741     non-permissive terms added in accord with section 7 apply to the
39742     code; keep intact all notices of the absence of any warranty; and
39743     give all recipients a copy of this License along with the Program.
39744
39745     You may charge any price or no price for each copy that you convey,
39746     and you may offer support or warranty protection for a fee.
39747
39748  5. Conveying Modified Source Versions.
39749
39750     You may convey a work based on the Program, or the modifications to
39751     produce it from the Program, in the form of source code under the
39752     terms of section 4, provided that you also meet all of these
39753     conditions:
39754
39755       a. The work must carry prominent notices stating that you
39756          modified it, and giving a relevant date.
39757
39758       b. The work must carry prominent notices stating that it is
39759          released under this License and any conditions added under
39760          section 7.  This requirement modifies the requirement in
39761          section 4 to "keep intact all notices".
39762
39763       c. You must license the entire work, as a whole, under this
39764          License to anyone who comes into possession of a copy.  This
39765          License will therefore apply, along with any applicable
39766          section 7 additional terms, to the whole of the work, and all
39767          its parts, regardless of how they are packaged.  This License
39768          gives no permission to license the work in any other way, but
39769          it does not invalidate such permission if you have separately
39770          received it.
39771
39772       d. If the work has interactive user interfaces, each must display
39773          Appropriate Legal Notices; however, if the Program has
39774          interactive interfaces that do not display Appropriate Legal
39775          Notices, your work need not make them do so.
39776
39777     A compilation of a covered work with other separate and independent
39778     works, which are not by their nature extensions of the covered
39779     work, and which are not combined with it such as to form a larger
39780     program, in or on a volume of a storage or distribution medium, is
39781     called an "aggregate" if the compilation and its resulting
39782     copyright are not used to limit the access or legal rights of the
39783     compilation's users beyond what the individual works permit.
39784     Inclusion of a covered work in an aggregate does not cause this
39785     License to apply to the other parts of the aggregate.
39786
39787  6. Conveying Non-Source Forms.
39788
39789     You may convey a covered work in object code form under the terms
39790     of sections 4 and 5, provided that you also convey the
39791     machine-readable Corresponding Source under the terms of this
39792     License, in one of these ways:
39793
39794       a. Convey the object code in, or embodied in, a physical product
39795          (including a physical distribution medium), accompanied by the
39796          Corresponding Source fixed on a durable physical medium
39797          customarily used for software interchange.
39798
39799       b. Convey the object code in, or embodied in, a physical product
39800          (including a physical distribution medium), accompanied by a
39801          written offer, valid for at least three years and valid for as
39802          long as you offer spare parts or customer support for that
39803          product model, to give anyone who possesses the object code
39804          either (1) a copy of the Corresponding Source for all the
39805          software in the product that is covered by this License, on a
39806          durable physical medium customarily used for software
39807          interchange, for a price no more than your reasonable cost of
39808          physically performing this conveying of source, or (2) access
39809          to copy the Corresponding Source from a network server at no
39810          charge.
39811
39812       c. Convey individual copies of the object code with a copy of the
39813          written offer to provide the Corresponding Source.  This
39814          alternative is allowed only occasionally and noncommercially,
39815          and only if you received the object code with such an offer,
39816          in accord with subsection 6b.
39817
39818       d. Convey the object code by offering access from a designated
39819          place (gratis or for a charge), and offer equivalent access to
39820          the Corresponding Source in the same way through the same
39821          place at no further charge.  You need not require recipients
39822          to copy the Corresponding Source along with the object code.
39823          If the place to copy the object code is a network server, the
39824          Corresponding Source may be on a different server (operated by
39825          you or a third party) that supports equivalent copying
39826          facilities, provided you maintain clear directions next to the
39827          object code saying where to find the Corresponding Source.
39828          Regardless of what server hosts the Corresponding Source, you
39829          remain obligated to ensure that it is available for as long as
39830          needed to satisfy these requirements.
39831
39832       e. Convey the object code using peer-to-peer transmission,
39833          provided you inform other peers where the object code and
39834          Corresponding Source of the work are being offered to the
39835          general public at no charge under subsection 6d.
39836
39837     A separable portion of the object code, whose source code is
39838     excluded from the Corresponding Source as a System Library, need
39839     not be included in conveying the object code work.
39840
39841     A "User Product" is either (1) a "consumer product", which means
39842     any tangible personal property which is normally used for personal,
39843     family, or household purposes, or (2) anything designed or sold for
39844     incorporation into a dwelling.  In determining whether a product is
39845     a consumer product, doubtful cases shall be resolved in favor of
39846     coverage.  For a particular product received by a particular user,
39847     "normally used" refers to a typical or common use of that class of
39848     product, regardless of the status of the particular user or of the
39849     way in which the particular user actually uses, or expects or is
39850     expected to use, the product.  A product is a consumer product
39851     regardless of whether the product has substantial commercial,
39852     industrial or non-consumer uses, unless such uses represent the
39853     only significant mode of use of the product.
39854
39855     "Installation Information" for a User Product means any methods,
39856     procedures, authorization keys, or other information required to
39857     install and execute modified versions of a covered work in that
39858     User Product from a modified version of its Corresponding Source.
39859     The information must suffice to ensure that the continued
39860     functioning of the modified object code is in no case prevented or
39861     interfered with solely because modification has been made.
39862
39863     If you convey an object code work under this section in, or with,
39864     or specifically for use in, a User Product, and the conveying
39865     occurs as part of a transaction in which the right of possession
39866     and use of the User Product is transferred to the recipient in
39867     perpetuity or for a fixed term (regardless of how the transaction
39868     is characterized), the Corresponding Source conveyed under this
39869     section must be accompanied by the Installation Information.  But
39870     this requirement does not apply if neither you nor any third party
39871     retains the ability to install modified object code on the User
39872     Product (for example, the work has been installed in ROM).
39873
39874     The requirement to provide Installation Information does not
39875     include a requirement to continue to provide support service,
39876     warranty, or updates for a work that has been modified or installed
39877     by the recipient, or for the User Product in which it has been
39878     modified or installed.  Access to a network may be denied when the
39879     modification itself materially and adversely affects the operation
39880     of the network or violates the rules and protocols for
39881     communication across the network.
39882
39883     Corresponding Source conveyed, and Installation Information
39884     provided, in accord with this section must be in a format that is
39885     publicly documented (and with an implementation available to the
39886     public in source code form), and must require no special password
39887     or key for unpacking, reading or copying.
39888
39889  7. Additional Terms.
39890
39891     "Additional permissions" are terms that supplement the terms of
39892     this License by making exceptions from one or more of its
39893     conditions.  Additional permissions that are applicable to the
39894     entire Program shall be treated as though they were included in
39895     this License, to the extent that they are valid under applicable
39896     law.  If additional permissions apply only to part of the Program,
39897     that part may be used separately under those permissions, but the
39898     entire Program remains governed by this License without regard to
39899     the additional permissions.
39900
39901     When you convey a copy of a covered work, you may at your option
39902     remove any additional permissions from that copy, or from any part
39903     of it.  (Additional permissions may be written to require their own
39904     removal in certain cases when you modify the work.)  You may place
39905     additional permissions on material, added by you to a covered work,
39906     for which you have or can give appropriate copyright permission.
39907
39908     Notwithstanding any other provision of this License, for material
39909     you add to a covered work, you may (if authorized by the copyright
39910     holders of that material) supplement the terms of this License with
39911     terms:
39912
39913       a. Disclaiming warranty or limiting liability differently from
39914          the terms of sections 15 and 16 of this License; or
39915
39916       b. Requiring preservation of specified reasonable legal notices
39917          or author attributions in that material or in the Appropriate
39918          Legal Notices displayed by works containing it; or
39919
39920       c. Prohibiting misrepresentation of the origin of that material,
39921          or requiring that modified versions of such material be marked
39922          in reasonable ways as different from the original version; or
39923
39924       d. Limiting the use for publicity purposes of names of licensors
39925          or authors of the material; or
39926
39927       e. Declining to grant rights under trademark law for use of some
39928          trade names, trademarks, or service marks; or
39929
39930       f. Requiring indemnification of licensors and authors of that
39931          material by anyone who conveys the material (or modified
39932          versions of it) with contractual assumptions of liability to
39933          the recipient, for any liability that these contractual
39934          assumptions directly impose on those licensors and authors.
39935
39936     All other non-permissive additional terms are considered "further
39937     restrictions" within the meaning of section 10.  If the Program as
39938     you received it, or any part of it, contains a notice stating that
39939     it is governed by this License along with a term that is a further
39940     restriction, you may remove that term.  If a license document
39941     contains a further restriction but permits relicensing or conveying
39942     under this License, you may add to a covered work material governed
39943     by the terms of that license document, provided that the further
39944     restriction does not survive such relicensing or conveying.
39945
39946     If you add terms to a covered work in accord with this section, you
39947     must place, in the relevant source files, a statement of the
39948     additional terms that apply to those files, or a notice indicating
39949     where to find the applicable terms.
39950
39951     Additional terms, permissive or non-permissive, may be stated in
39952     the form of a separately written license, or stated as exceptions;
39953     the above requirements apply either way.
39954
39955  8. Termination.
39956
39957     You may not propagate or modify a covered work except as expressly
39958     provided under this License.  Any attempt otherwise to propagate or
39959     modify it is void, and will automatically terminate your rights
39960     under this License (including any patent licenses granted under the
39961     third paragraph of section 11).
39962
39963     However, if you cease all violation of this License, then your
39964     license from a particular copyright holder is reinstated (a)
39965     provisionally, unless and until the copyright holder explicitly and
39966     finally terminates your license, and (b) permanently, if the
39967     copyright holder fails to notify you of the violation by some
39968     reasonable means prior to 60 days after the cessation.
39969
39970     Moreover, your license from a particular copyright holder is
39971     reinstated permanently if the copyright holder notifies you of the
39972     violation by some reasonable means, this is the first time you have
39973     received notice of violation of this License (for any work) from
39974     that copyright holder, and you cure the violation prior to 30 days
39975     after your receipt of the notice.
39976
39977     Termination of your rights under this section does not terminate
39978     the licenses of parties who have received copies or rights from you
39979     under this License.  If your rights have been terminated and not
39980     permanently reinstated, you do not qualify to receive new licenses
39981     for the same material under section 10.
39982
39983  9. Acceptance Not Required for Having Copies.
39984
39985     You are not required to accept this License in order to receive or
39986     run a copy of the Program.  Ancillary propagation of a covered work
39987     occurring solely as a consequence of using peer-to-peer
39988     transmission to receive a copy likewise does not require
39989     acceptance.  However, nothing other than this License grants you
39990     permission to propagate or modify any covered work.  These actions
39991     infringe copyright if you do not accept this License.  Therefore,
39992     by modifying or propagating a covered work, you indicate your
39993     acceptance of this License to do so.
39994
39995  10. Automatic Licensing of Downstream Recipients.
39996
39997     Each time you convey a covered work, the recipient automatically
39998     receives a license from the original licensors, to run, modify and
39999     propagate that work, subject to this License.  You are not
40000     responsible for enforcing compliance by third parties with this
40001     License.
40002
40003     An "entity transaction" is a transaction transferring control of an
40004     organization, or substantially all assets of one, or subdividing an
40005     organization, or merging organizations.  If propagation of a
40006     covered work results from an entity transaction, each party to that
40007     transaction who receives a copy of the work also receives whatever
40008     licenses to the work the party's predecessor in interest had or
40009     could give under the previous paragraph, plus a right to possession
40010     of the Corresponding Source of the work from the predecessor in
40011     interest, if the predecessor has it or can get it with reasonable
40012     efforts.
40013
40014     You may not impose any further restrictions on the exercise of the
40015     rights granted or affirmed under this License.  For example, you
40016     may not impose a license fee, royalty, or other charge for exercise
40017     of rights granted under this License, and you may not initiate
40018     litigation (including a cross-claim or counterclaim in a lawsuit)
40019     alleging that any patent claim is infringed by making, using,
40020     selling, offering for sale, or importing the Program or any portion
40021     of it.
40022
40023  11. Patents.
40024
40025     A "contributor" is a copyright holder who authorizes use under this
40026     License of the Program or a work on which the Program is based.
40027     The work thus licensed is called the contributor's "contributor
40028     version".
40029
40030     A contributor's "essential patent claims" are all patent claims
40031     owned or controlled by the contributor, whether already acquired or
40032     hereafter acquired, that would be infringed by some manner,
40033     permitted by this License, of making, using, or selling its
40034     contributor version, but do not include claims that would be
40035     infringed only as a consequence of further modification of the
40036     contributor version.  For purposes of this definition, "control"
40037     includes the right to grant patent sublicenses in a manner
40038     consistent with the requirements of this License.
40039
40040     Each contributor grants you a non-exclusive, worldwide,
40041     royalty-free patent license under the contributor's essential
40042     patent claims, to make, use, sell, offer for sale, import and
40043     otherwise run, modify and propagate the contents of its contributor
40044     version.
40045
40046     In the following three paragraphs, a "patent license" is any
40047     express agreement or commitment, however denominated, not to
40048     enforce a patent (such as an express permission to practice a
40049     patent or covenant not to sue for patent infringement).  To "grant"
40050     such a patent license to a party means to make such an agreement or
40051     commitment not to enforce a patent against the party.
40052
40053     If you convey a covered work, knowingly relying on a patent
40054     license, and the Corresponding Source of the work is not available
40055     for anyone to copy, free of charge and under the terms of this
40056     License, through a publicly available network server or other
40057     readily accessible means, then you must either (1) cause the
40058     Corresponding Source to be so available, or (2) arrange to deprive
40059     yourself of the benefit of the patent license for this particular
40060     work, or (3) arrange, in a manner consistent with the requirements
40061     of this License, to extend the patent license to downstream
40062     recipients.  "Knowingly relying" means you have actual knowledge
40063     that, but for the patent license, your conveying the covered work
40064     in a country, or your recipient's use of the covered work in a
40065     country, would infringe one or more identifiable patents in that
40066     country that you have reason to believe are valid.
40067
40068     If, pursuant to or in connection with a single transaction or
40069     arrangement, you convey, or propagate by procuring conveyance of, a
40070     covered work, and grant a patent license to some of the parties
40071     receiving the covered work authorizing them to use, propagate,
40072     modify or convey a specific copy of the covered work, then the
40073     patent license you grant is automatically extended to all
40074     recipients of the covered work and works based on it.
40075
40076     A patent license is "discriminatory" if it does not include within
40077     the scope of its coverage, prohibits the exercise of, or is
40078     conditioned on the non-exercise of one or more of the rights that
40079     are specifically granted under this License.  You may not convey a
40080     covered work if you are a party to an arrangement with a third
40081     party that is in the business of distributing software, under which
40082     you make payment to the third party based on the extent of your
40083     activity of conveying the work, and under which the third party
40084     grants, to any of the parties who would receive the covered work
40085     from you, a discriminatory patent license (a) in connection with
40086     copies of the covered work conveyed by you (or copies made from
40087     those copies), or (b) primarily for and in connection with specific
40088     products or compilations that contain the covered work, unless you
40089     entered into that arrangement, or that patent license was granted,
40090     prior to 28 March 2007.
40091
40092     Nothing in this License shall be construed as excluding or limiting
40093     any implied license or other defenses to infringement that may
40094     otherwise be available to you under applicable patent law.
40095
40096  12. No Surrender of Others' Freedom.
40097
40098     If conditions are imposed on you (whether by court order, agreement
40099     or otherwise) that contradict the conditions of this License, they
40100     do not excuse you from the conditions of this License.  If you
40101     cannot convey a covered work so as to satisfy simultaneously your
40102     obligations under this License and any other pertinent obligations,
40103     then as a consequence you may not convey it at all.  For example,
40104     if you agree to terms that obligate you to collect a royalty for
40105     further conveying from those to whom you convey the Program, the
40106     only way you could satisfy both those terms and this License would
40107     be to refrain entirely from conveying the Program.
40108
40109  13. Use with the GNU Affero General Public License.
40110
40111     Notwithstanding any other provision of this License, you have
40112     permission to link or combine any covered work with a work licensed
40113     under version 3 of the GNU Affero General Public License into a
40114     single combined work, and to convey the resulting work.  The terms
40115     of this License will continue to apply to the part which is the
40116     covered work, but the special requirements of the GNU Affero
40117     General Public License, section 13, concerning interaction through
40118     a network will apply to the combination as such.
40119
40120  14. Revised Versions of this License.
40121
40122     The Free Software Foundation may publish revised and/or new
40123     versions of the GNU General Public License from time to time.  Such
40124     new versions will be similar in spirit to the present version, but
40125     may differ in detail to address new problems or concerns.
40126
40127     Each version is given a distinguishing version number.  If the
40128     Program specifies that a certain numbered version of the GNU
40129     General Public License "or any later version" applies to it, you
40130     have the option of following the terms and conditions either of
40131     that numbered version or of any later version published by the Free
40132     Software Foundation.  If the Program does not specify a version
40133     number of the GNU General Public License, you may choose any
40134     version ever published by the Free Software Foundation.
40135
40136     If the Program specifies that a proxy can decide which future
40137     versions of the GNU General Public License can be used, that
40138     proxy's public statement of acceptance of a version permanently
40139     authorizes you to choose that version for the Program.
40140
40141     Later license versions may give you additional or different
40142     permissions.  However, no additional obligations are imposed on any
40143     author or copyright holder as a result of your choosing to follow a
40144     later version.
40145
40146  15. Disclaimer of Warranty.
40147
40148     THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
40149     APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE
40150     COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS"
40151     WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
40152     INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
40153     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE
40154     RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.
40155     SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
40156     NECESSARY SERVICING, REPAIR OR CORRECTION.
40157
40158  16. Limitation of Liability.
40159
40160     IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
40161     WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES
40162     AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR
40163     DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
40164     CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE
40165     THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA
40166     BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
40167     PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
40168     PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF
40169     THE POSSIBILITY OF SUCH DAMAGES.
40170
40171  17. Interpretation of Sections 15 and 16.
40172
40173     If the disclaimer of warranty and limitation of liability provided
40174     above cannot be given local legal effect according to their terms,
40175     reviewing courts shall apply local law that most closely
40176     approximates an absolute waiver of all civil liability in
40177     connection with the Program, unless a warranty or assumption of
40178     liability accompanies a copy of the Program in return for a fee.
40179
40180END OF TERMS AND CONDITIONS
40181===========================
40182
40183How to Apply These Terms to Your New Programs
40184=============================================
40185
40186If you develop a new program, and you want it to be of the greatest
40187possible use to the public, the best way to achieve this is to make it
40188free software which everyone can redistribute and change under these
40189terms.
40190
40191 To do so, attach the following notices to the program.  It is safest to
40192attach them to the start of each source file to most effectively state
40193the exclusion of warranty; and each file should have at least the
40194"copyright" line and a pointer to where the full notice is found.
40195
40196     ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES.
40197     Copyright (C) YEAR NAME OF AUTHOR
40198
40199     This program is free software: you can redistribute it and/or modify
40200     it under the terms of the GNU General Public License as published by
40201     the Free Software Foundation, either version 3 of the License, or (at
40202     your option) any later version.
40203
40204     This program is distributed in the hope that it will be useful, but
40205     WITHOUT ANY WARRANTY; without even the implied warranty of
40206     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
40207     General Public License for more details.
40208
40209     You should have received a copy of the GNU General Public License
40210     along with this program.  If not, see <http://www.gnu.org/licenses/>.
40211
40212 Also add information on how to contact you by electronic and paper
40213mail.
40214
40215 If the program does terminal interaction, make it output a short notice
40216like this when it starts in an interactive mode:
40217
40218     PROGRAM Copyright (C) YEAR NAME OF AUTHOR
40219     This program comes with ABSOLUTELY NO WARRANTY; for details type 'show w'.
40220     This is free software, and you are welcome to redistribute it
40221     under certain conditions; type 'show c' for details.
40222
40223 The hypothetical commands 'show w' and 'show c' should show the
40224appropriate parts of the General Public License.  Of course, your
40225program's commands might be different; for a GUI interface, you would
40226use an "about box".
40227
40228 You should also get your employer (if you work as a programmer) or
40229school, if any, to sign a "copyright disclaimer" for the program, if
40230necessary.  For more information on this, and how to apply and follow
40231the GNU GPL, see <http://www.gnu.org/licenses/>.
40232
40233 The GNU General Public License does not permit incorporating your
40234program into proprietary programs.  If your program is a subroutine
40235library, you may consider it more useful to permit linking proprietary
40236applications with the library.  If this is what you want to do, use the
40237GNU Lesser General Public License instead of this License.  But first,
40238please read <http://www.gnu.org/philosophy/why-not-lgpl.html>.
40239
40240
40241File: gccint.info,  Node: GNU Free Documentation License,  Next: Contributors,  Prev: Copying,  Up: Top
40242
40243GNU Free Documentation License
40244******************************
40245
40246                     Version 1.3, 3 November 2008
40247
40248     Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
40249     <http://fsf.org/>
40250
40251     Everyone is permitted to copy and distribute verbatim copies
40252     of this license document, but changing it is not allowed.
40253
40254  0. PREAMBLE
40255
40256     The purpose of this License is to make a manual, textbook, or other
40257     functional and useful document "free" in the sense of freedom: to
40258     assure everyone the effective freedom to copy and redistribute it,
40259     with or without modifying it, either commercially or
40260     noncommercially.  Secondarily, this License preserves for the
40261     author and publisher a way to get credit for their work, while not
40262     being considered responsible for modifications made by others.
40263
40264     This License is a kind of "copyleft", which means that derivative
40265     works of the document must themselves be free in the same sense.
40266     It complements the GNU General Public License, which is a copyleft
40267     license designed for free software.
40268
40269     We have designed this License in order to use it for manuals for
40270     free software, because free software needs free documentation: a
40271     free program should come with manuals providing the same freedoms
40272     that the software does.  But this License is not limited to
40273     software manuals; it can be used for any textual work, regardless
40274     of subject matter or whether it is published as a printed book.  We
40275     recommend this License principally for works whose purpose is
40276     instruction or reference.
40277
40278  1. APPLICABILITY AND DEFINITIONS
40279
40280     This License applies to any manual or other work, in any medium,
40281     that contains a notice placed by the copyright holder saying it can
40282     be distributed under the terms of this License.  Such a notice
40283     grants a world-wide, royalty-free license, unlimited in duration,
40284     to use that work under the conditions stated herein.  The
40285     "Document", below, refers to any such manual or work.  Any member
40286     of the public is a licensee, and is addressed as "you".  You accept
40287     the license if you copy, modify or distribute the work in a way
40288     requiring permission under copyright law.
40289
40290     A "Modified Version" of the Document means any work containing the
40291     Document or a portion of it, either copied verbatim, or with
40292     modifications and/or translated into another language.
40293
40294     A "Secondary Section" is a named appendix or a front-matter section
40295     of the Document that deals exclusively with the relationship of the
40296     publishers or authors of the Document to the Document's overall
40297     subject (or to related matters) and contains nothing that could
40298     fall directly within that overall subject.  (Thus, if the Document
40299     is in part a textbook of mathematics, a Secondary Section may not
40300     explain any mathematics.)  The relationship could be a matter of
40301     historical connection with the subject or with related matters, or
40302     of legal, commercial, philosophical, ethical or political position
40303     regarding them.
40304
40305     The "Invariant Sections" are certain Secondary Sections whose
40306     titles are designated, as being those of Invariant Sections, in the
40307     notice that says that the Document is released under this License.
40308     If a section does not fit the above definition of Secondary then it
40309     is not allowed to be designated as Invariant.  The Document may
40310     contain zero Invariant Sections.  If the Document does not identify
40311     any Invariant Sections then there are none.
40312
40313     The "Cover Texts" are certain short passages of text that are
40314     listed, as Front-Cover Texts or Back-Cover Texts, in the notice
40315     that says that the Document is released under this License.  A
40316     Front-Cover Text may be at most 5 words, and a Back-Cover Text may
40317     be at most 25 words.
40318
40319     A "Transparent" copy of the Document means a machine-readable copy,
40320     represented in a format whose specification is available to the
40321     general public, that is suitable for revising the document
40322     straightforwardly with generic text editors or (for images composed
40323     of pixels) generic paint programs or (for drawings) some widely
40324     available drawing editor, and that is suitable for input to text
40325     formatters or for automatic translation to a variety of formats
40326     suitable for input to text formatters.  A copy made in an otherwise
40327     Transparent file format whose markup, or absence of markup, has
40328     been arranged to thwart or discourage subsequent modification by
40329     readers is not Transparent.  An image format is not Transparent if
40330     used for any substantial amount of text.  A copy that is not
40331     "Transparent" is called "Opaque".
40332
40333     Examples of suitable formats for Transparent copies include plain
40334     ASCII without markup, Texinfo input format, LaTeX input format,
40335     SGML or XML using a publicly available DTD, and standard-conforming
40336     simple HTML, PostScript or PDF designed for human modification.
40337     Examples of transparent image formats include PNG, XCF and JPG.
40338     Opaque formats include proprietary formats that can be read and
40339     edited only by proprietary word processors, SGML or XML for which
40340     the DTD and/or processing tools are not generally available, and
40341     the machine-generated HTML, PostScript or PDF produced by some word
40342     processors for output purposes only.
40343
40344     The "Title Page" means, for a printed book, the title page itself,
40345     plus such following pages as are needed to hold, legibly, the
40346     material this License requires to appear in the title page.  For
40347     works in formats which do not have any title page as such, "Title
40348     Page" means the text near the most prominent appearance of the
40349     work's title, preceding the beginning of the body of the text.
40350
40351     The "publisher" means any person or entity that distributes copies
40352     of the Document to the public.
40353
40354     A section "Entitled XYZ" means a named subunit of the Document
40355     whose title either is precisely XYZ or contains XYZ in parentheses
40356     following text that translates XYZ in another language.  (Here XYZ
40357     stands for a specific section name mentioned below, such as
40358     "Acknowledgements", "Dedications", "Endorsements", or "History".)
40359     To "Preserve the Title" of such a section when you modify the
40360     Document means that it remains a section "Entitled XYZ" according
40361     to this definition.
40362
40363     The Document may include Warranty Disclaimers next to the notice
40364     which states that this License applies to the Document.  These
40365     Warranty Disclaimers are considered to be included by reference in
40366     this License, but only as regards disclaiming warranties: any other
40367     implication that these Warranty Disclaimers may have is void and
40368     has no effect on the meaning of this License.
40369
40370  2. VERBATIM COPYING
40371
40372     You may copy and distribute the Document in any medium, either
40373     commercially or noncommercially, provided that this License, the
40374     copyright notices, and the license notice saying this License
40375     applies to the Document are reproduced in all copies, and that you
40376     add no other conditions whatsoever to those of this License.  You
40377     may not use technical measures to obstruct or control the reading
40378     or further copying of the copies you make or distribute.  However,
40379     you may accept compensation in exchange for copies.  If you
40380     distribute a large enough number of copies you must also follow the
40381     conditions in section 3.
40382
40383     You may also lend copies, under the same conditions stated above,
40384     and you may publicly display copies.
40385
40386  3. COPYING IN QUANTITY
40387
40388     If you publish printed copies (or copies in media that commonly
40389     have printed covers) of the Document, numbering more than 100, and
40390     the Document's license notice requires Cover Texts, you must
40391     enclose the copies in covers that carry, clearly and legibly, all
40392     these Cover Texts: Front-Cover Texts on the front cover, and
40393     Back-Cover Texts on the back cover.  Both covers must also clearly
40394     and legibly identify you as the publisher of these copies.  The
40395     front cover must present the full title with all words of the title
40396     equally prominent and visible.  You may add other material on the
40397     covers in addition.  Copying with changes limited to the covers, as
40398     long as they preserve the title of the Document and satisfy these
40399     conditions, can be treated as verbatim copying in other respects.
40400
40401     If the required texts for either cover are too voluminous to fit
40402     legibly, you should put the first ones listed (as many as fit
40403     reasonably) on the actual cover, and continue the rest onto
40404     adjacent pages.
40405
40406     If you publish or distribute Opaque copies of the Document
40407     numbering more than 100, you must either include a machine-readable
40408     Transparent copy along with each Opaque copy, or state in or with
40409     each Opaque copy a computer-network location from which the general
40410     network-using public has access to download using public-standard
40411     network protocols a complete Transparent copy of the Document, free
40412     of added material.  If you use the latter option, you must take
40413     reasonably prudent steps, when you begin distribution of Opaque
40414     copies in quantity, to ensure that this Transparent copy will
40415     remain thus accessible at the stated location until at least one
40416     year after the last time you distribute an Opaque copy (directly or
40417     through your agents or retailers) of that edition to the public.
40418
40419     It is requested, but not required, that you contact the authors of
40420     the Document well before redistributing any large number of copies,
40421     to give them a chance to provide you with an updated version of the
40422     Document.
40423
40424  4. MODIFICATIONS
40425
40426     You may copy and distribute a Modified Version of the Document
40427     under the conditions of sections 2 and 3 above, provided that you
40428     release the Modified Version under precisely this License, with the
40429     Modified Version filling the role of the Document, thus licensing
40430     distribution and modification of the Modified Version to whoever
40431     possesses a copy of it.  In addition, you must do these things in
40432     the Modified Version:
40433
40434       A. Use in the Title Page (and on the covers, if any) a title
40435          distinct from that of the Document, and from those of previous
40436          versions (which should, if there were any, be listed in the
40437          History section of the Document).  You may use the same title
40438          as a previous version if the original publisher of that
40439          version gives permission.
40440
40441       B. List on the Title Page, as authors, one or more persons or
40442          entities responsible for authorship of the modifications in
40443          the Modified Version, together with at least five of the
40444          principal authors of the Document (all of its principal
40445          authors, if it has fewer than five), unless they release you
40446          from this requirement.
40447
40448       C. State on the Title page the name of the publisher of the
40449          Modified Version, as the publisher.
40450
40451       D. Preserve all the copyright notices of the Document.
40452
40453       E. Add an appropriate copyright notice for your modifications
40454          adjacent to the other copyright notices.
40455
40456       F. Include, immediately after the copyright notices, a license
40457          notice giving the public permission to use the Modified
40458          Version under the terms of this License, in the form shown in
40459          the Addendum below.
40460
40461       G. Preserve in that license notice the full lists of Invariant
40462          Sections and required Cover Texts given in the Document's
40463          license notice.
40464
40465       H. Include an unaltered copy of this License.
40466
40467       I. Preserve the section Entitled "History", Preserve its Title,
40468          and add to it an item stating at least the title, year, new
40469          authors, and publisher of the Modified Version as given on the
40470          Title Page.  If there is no section Entitled "History" in the
40471          Document, create one stating the title, year, authors, and
40472          publisher of the Document as given on its Title Page, then add
40473          an item describing the Modified Version as stated in the
40474          previous sentence.
40475
40476       J. Preserve the network location, if any, given in the Document
40477          for public access to a Transparent copy of the Document, and
40478          likewise the network locations given in the Document for
40479          previous versions it was based on.  These may be placed in the
40480          "History" section.  You may omit a network location for a work
40481          that was published at least four years before the Document
40482          itself, or if the original publisher of the version it refers
40483          to gives permission.
40484
40485       K. For any section Entitled "Acknowledgements" or "Dedications",
40486          Preserve the Title of the section, and preserve in the section
40487          all the substance and tone of each of the contributor
40488          acknowledgements and/or dedications given therein.
40489
40490       L. Preserve all the Invariant Sections of the Document, unaltered
40491          in their text and in their titles.  Section numbers or the
40492          equivalent are not considered part of the section titles.
40493
40494       M. Delete any section Entitled "Endorsements".  Such a section
40495          may not be included in the Modified Version.
40496
40497       N. Do not retitle any existing section to be Entitled
40498          "Endorsements" or to conflict in title with any Invariant
40499          Section.
40500
40501       O. Preserve any Warranty Disclaimers.
40502
40503     If the Modified Version includes new front-matter sections or
40504     appendices that qualify as Secondary Sections and contain no
40505     material copied from the Document, you may at your option designate
40506     some or all of these sections as invariant.  To do this, add their
40507     titles to the list of Invariant Sections in the Modified Version's
40508     license notice.  These titles must be distinct from any other
40509     section titles.
40510
40511     You may add a section Entitled "Endorsements", provided it contains
40512     nothing but endorsements of your Modified Version by various
40513     parties--for example, statements of peer review or that the text
40514     has been approved by an organization as the authoritative
40515     definition of a standard.
40516
40517     You may add a passage of up to five words as a Front-Cover Text,
40518     and a passage of up to 25 words as a Back-Cover Text, to the end of
40519     the list of Cover Texts in the Modified Version.  Only one passage
40520     of Front-Cover Text and one of Back-Cover Text may be added by (or
40521     through arrangements made by) any one entity.  If the Document
40522     already includes a cover text for the same cover, previously added
40523     by you or by arrangement made by the same entity you are acting on
40524     behalf of, you may not add another; but you may replace the old
40525     one, on explicit permission from the previous publisher that added
40526     the old one.
40527
40528     The author(s) and publisher(s) of the Document do not by this
40529     License give permission to use their names for publicity for or to
40530     assert or imply endorsement of any Modified Version.
40531
40532  5. COMBINING DOCUMENTS
40533
40534     You may combine the Document with other documents released under
40535     this License, under the terms defined in section 4 above for
40536     modified versions, provided that you include in the combination all
40537     of the Invariant Sections of all of the original documents,
40538     unmodified, and list them all as Invariant Sections of your
40539     combined work in its license notice, and that you preserve all
40540     their Warranty Disclaimers.
40541
40542     The combined work need only contain one copy of this License, and
40543     multiple identical Invariant Sections may be replaced with a single
40544     copy.  If there are multiple Invariant Sections with the same name
40545     but different contents, make the title of each such section unique
40546     by adding at the end of it, in parentheses, the name of the
40547     original author or publisher of that section if known, or else a
40548     unique number.  Make the same adjustment to the section titles in
40549     the list of Invariant Sections in the license notice of the
40550     combined work.
40551
40552     In the combination, you must combine any sections Entitled
40553     "History" in the various original documents, forming one section
40554     Entitled "History"; likewise combine any sections Entitled
40555     "Acknowledgements", and any sections Entitled "Dedications".  You
40556     must delete all sections Entitled "Endorsements."
40557
40558  6. COLLECTIONS OF DOCUMENTS
40559
40560     You may make a collection consisting of the Document and other
40561     documents released under this License, and replace the individual
40562     copies of this License in the various documents with a single copy
40563     that is included in the collection, provided that you follow the
40564     rules of this License for verbatim copying of each of the documents
40565     in all other respects.
40566
40567     You may extract a single document from such a collection, and
40568     distribute it individually under this License, provided you insert
40569     a copy of this License into the extracted document, and follow this
40570     License in all other respects regarding verbatim copying of that
40571     document.
40572
40573  7. AGGREGATION WITH INDEPENDENT WORKS
40574
40575     A compilation of the Document or its derivatives with other
40576     separate and independent documents or works, in or on a volume of a
40577     storage or distribution medium, is called an "aggregate" if the
40578     copyright resulting from the compilation is not used to limit the
40579     legal rights of the compilation's users beyond what the individual
40580     works permit.  When the Document is included in an aggregate, this
40581     License does not apply to the other works in the aggregate which
40582     are not themselves derivative works of the Document.
40583
40584     If the Cover Text requirement of section 3 is applicable to these
40585     copies of the Document, then if the Document is less than one half
40586     of the entire aggregate, the Document's Cover Texts may be placed
40587     on covers that bracket the Document within the aggregate, or the
40588     electronic equivalent of covers if the Document is in electronic
40589     form.  Otherwise they must appear on printed covers that bracket
40590     the whole aggregate.
40591
40592  8. TRANSLATION
40593
40594     Translation is considered a kind of modification, so you may
40595     distribute translations of the Document under the terms of section
40596     4.  Replacing Invariant Sections with translations requires special
40597     permission from their copyright holders, but you may include
40598     translations of some or all Invariant Sections in addition to the
40599     original versions of these Invariant Sections.  You may include a
40600     translation of this License, and all the license notices in the
40601     Document, and any Warranty Disclaimers, provided that you also
40602     include the original English version of this License and the
40603     original versions of those notices and disclaimers.  In case of a
40604     disagreement between the translation and the original version of
40605     this License or a notice or disclaimer, the original version will
40606     prevail.
40607
40608     If a section in the Document is Entitled "Acknowledgements",
40609     "Dedications", or "History", the requirement (section 4) to
40610     Preserve its Title (section 1) will typically require changing the
40611     actual title.
40612
40613  9. TERMINATION
40614
40615     You may not copy, modify, sublicense, or distribute the Document
40616     except as expressly provided under this License.  Any attempt
40617     otherwise to copy, modify, sublicense, or distribute it is void,
40618     and will automatically terminate your rights under this License.
40619
40620     However, if you cease all violation of this License, then your
40621     license from a particular copyright holder is reinstated (a)
40622     provisionally, unless and until the copyright holder explicitly and
40623     finally terminates your license, and (b) permanently, if the
40624     copyright holder fails to notify you of the violation by some
40625     reasonable means prior to 60 days after the cessation.
40626
40627     Moreover, your license from a particular copyright holder is
40628     reinstated permanently if the copyright holder notifies you of the
40629     violation by some reasonable means, this is the first time you have
40630     received notice of violation of this License (for any work) from
40631     that copyright holder, and you cure the violation prior to 30 days
40632     after your receipt of the notice.
40633
40634     Termination of your rights under this section does not terminate
40635     the licenses of parties who have received copies or rights from you
40636     under this License.  If your rights have been terminated and not
40637     permanently reinstated, receipt of a copy of some or all of the
40638     same material does not give you any rights to use it.
40639
40640  10. FUTURE REVISIONS OF THIS LICENSE
40641
40642     The Free Software Foundation may publish new, revised versions of
40643     the GNU Free Documentation License from time to time.  Such new
40644     versions will be similar in spirit to the present version, but may
40645     differ in detail to address new problems or concerns.  See
40646     <http://www.gnu.org/copyleft/>.
40647
40648     Each version of the License is given a distinguishing version
40649     number.  If the Document specifies that a particular numbered
40650     version of this License "or any later version" applies to it, you
40651     have the option of following the terms and conditions either of
40652     that specified version or of any later version that has been
40653     published (not as a draft) by the Free Software Foundation.  If the
40654     Document does not specify a version number of this License, you may
40655     choose any version ever published (not as a draft) by the Free
40656     Software Foundation.  If the Document specifies that a proxy can
40657     decide which future versions of this License can be used, that
40658     proxy's public statement of acceptance of a version permanently
40659     authorizes you to choose that version for the Document.
40660
40661  11. RELICENSING
40662
40663     "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
40664     World Wide Web server that publishes copyrightable works and also
40665     provides prominent facilities for anybody to edit those works.  A
40666     public wiki that anybody can edit is an example of such a server.
40667     A "Massive Multiauthor Collaboration" (or "MMC") contained in the
40668     site means any set of copyrightable works thus published on the MMC
40669     site.
40670
40671     "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
40672     license published by Creative Commons Corporation, a not-for-profit
40673     corporation with a principal place of business in San Francisco,
40674     California, as well as future copyleft versions of that license
40675     published by that same organization.
40676
40677     "Incorporate" means to publish or republish a Document, in whole or
40678     in part, as part of another Document.
40679
40680     An MMC is "eligible for relicensing" if it is licensed under this
40681     License, and if all works that were first published under this
40682     License somewhere other than this MMC, and subsequently
40683     incorporated in whole or in part into the MMC, (1) had no cover
40684     texts or invariant sections, and (2) were thus incorporated prior
40685     to November 1, 2008.
40686
40687     The operator of an MMC Site may republish an MMC contained in the
40688     site under CC-BY-SA on the same site at any time before August 1,
40689     2009, provided the MMC is eligible for relicensing.
40690
40691ADDENDUM: How to use this License for your documents
40692====================================================
40693
40694To use this License in a document you have written, include a copy of
40695the License in the document and put the following copyright and license
40696notices just after the title page:
40697
40698       Copyright (C)  YEAR  YOUR NAME.
40699       Permission is granted to copy, distribute and/or modify this document
40700       under the terms of the GNU Free Documentation License, Version 1.3
40701       or any later version published by the Free Software Foundation;
40702       with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
40703       Texts.  A copy of the license is included in the section entitled ``GNU
40704       Free Documentation License''.
40705
40706 If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
40707replace the "with...Texts."  line with this:
40708
40709         with the Invariant Sections being LIST THEIR TITLES, with
40710         the Front-Cover Texts being LIST, and with the Back-Cover Texts
40711         being LIST.
40712
40713 If you have Invariant Sections without Cover Texts, or some other
40714combination of the three, merge those two alternatives to suit the
40715situation.
40716
40717 If your document contains nontrivial examples of program code, we
40718recommend releasing these examples in parallel under your choice of free
40719software license, such as the GNU General Public License, to permit
40720their use in free software.
40721
40722
40723File: gccint.info,  Node: Contributors,  Next: Option Index,  Prev: GNU Free Documentation License,  Up: Top
40724
40725Contributors to GCC
40726*******************
40727
40728The GCC project would like to thank its many contributors.  Without them
40729the project would not have been nearly as successful as it has been.
40730Any omissions in this list are accidental.  Feel free to contact
40731<[email protected]> or <[email protected]> if you have been left out or
40732some of your contributions are not listed.  Please keep this list in
40733alphabetical order.
40734
40735   * Analog Devices helped implement the support for complex data types
40736     and iterators.
40737
40738   * John David Anglin for threading-related fixes and improvements to
40739     libstdc++-v3, and the HP-UX port.
40740
40741   * James van Artsdalen wrote the code that makes efficient use of the
40742     Intel 80387 register stack.
40743
40744   * Abramo and Roberto Bagnara for the SysV68 Motorola 3300 Delta
40745     Series port.
40746
40747   * Alasdair Baird for various bug fixes.
40748
40749   * Giovanni Bajo for analyzing lots of complicated C++ problem
40750     reports.
40751
40752   * Peter Barada for his work to improve code generation for new
40753     ColdFire cores.
40754
40755   * Gerald Baumgartner added the signature extension to the C++ front
40756     end.
40757
40758   * Godmar Back for his Java improvements and encouragement.
40759
40760   * Scott Bambrough for help porting the Java compiler.
40761
40762   * Wolfgang Bangerth for processing tons of bug reports.
40763
40764   * Jon Beniston for his Microsoft Windows port of Java and port to
40765     Lattice Mico32.
40766
40767   * Daniel Berlin for better DWARF2 support, faster/better
40768     optimizations, improved alias analysis, plus migrating GCC to
40769     Bugzilla.
40770
40771   * Geoff Berry for his Java object serialization work and various
40772     patches.
40773
40774   * David Binderman tests weekly snapshots of GCC trunk against Fedora
40775     Rawhide for several architectures.
40776
40777   * Uros Bizjak for the implementation of x87 math built-in functions
40778     and for various middle end and i386 back end improvements and bug
40779     fixes.
40780
40781   * Eric Blake for helping to make GCJ and libgcj conform to the
40782     specifications.
40783
40784   * Janne Blomqvist for contributions to GNU Fortran.
40785
40786   * Segher Boessenkool for various fixes.
40787
40788   * Hans-J. Boehm for his garbage collector, IA-64 libffi port, and
40789     other Java work.
40790
40791   * Neil Booth for work on cpplib, lang hooks, debug hooks and other
40792     miscellaneous clean-ups.
40793
40794   * Steven Bosscher for integrating the GNU Fortran front end into GCC
40795     and for contributing to the tree-ssa branch.
40796
40797   * Eric Botcazou for fixing middle- and backend bugs left and right.
40798
40799   * Per Bothner for his direction via the steering committee and
40800     various improvements to the infrastructure for supporting new
40801     languages.  Chill front end implementation.  Initial
40802     implementations of cpplib, fix-header, config.guess, libio, and
40803     past C++ library (libg++) maintainer.  Dreaming up, designing and
40804     implementing much of GCJ.
40805
40806   * Devon Bowen helped port GCC to the Tahoe.
40807
40808   * Don Bowman for mips-vxworks contributions.
40809
40810   * Dave Brolley for work on cpplib and Chill.
40811
40812   * Paul Brook for work on the ARM architecture and maintaining GNU
40813     Fortran.
40814
40815   * Robert Brown implemented the support for Encore 32000 systems.
40816
40817   * Christian Bruel for improvements to local store elimination.
40818
40819   * Herman A.J. ten Brugge for various fixes.
40820
40821   * Joerg Brunsmann for Java compiler hacking and help with the GCJ
40822     FAQ.
40823
40824   * Joe Buck for his direction via the steering committee.
40825
40826   * Craig Burley for leadership of the G77 Fortran effort.
40827
40828   * Stephan Buys for contributing Doxygen notes for libstdc++.
40829
40830   * Paolo Carlini for libstdc++ work: lots of efficiency improvements
40831     to the C++ strings, streambufs and formatted I/O, hard detective
40832     work on the frustrating localization issues, and keeping up with
40833     the problem reports.
40834
40835   * John Carr for his alias work, SPARC hacking, infrastructure
40836     improvements, previous contributions to the steering committee,
40837     loop optimizations, etc.
40838
40839   * Stephane Carrez for 68HC11 and 68HC12 ports.
40840
40841   * Steve Chamberlain for support for the Renesas SH and H8 processors
40842     and the PicoJava processor, and for GCJ config fixes.
40843
40844   * Glenn Chambers for help with the GCJ FAQ.
40845
40846   * John-Marc Chandonia for various libgcj patches.
40847
40848   * Denis Chertykov for contributing and maintaining the AVR port, the
40849     first GCC port for an 8-bit architecture.
40850
40851   * Scott Christley for his Objective-C contributions.
40852
40853   * Eric Christopher for his Java porting help and clean-ups.
40854
40855   * Branko Cibej for more warning contributions.
40856
40857   * The GNU Classpath project for all of their merged runtime code.
40858
40859   * Nick Clifton for arm, mcore, fr30, v850, m32r, rx work, '--help',
40860     and other random hacking.
40861
40862   * Michael Cook for libstdc++ cleanup patches to reduce warnings.
40863
40864   * R. Kelley Cook for making GCC buildable from a read-only directory
40865     as well as other miscellaneous build process and documentation
40866     clean-ups.
40867
40868   * Ralf Corsepius for SH testing and minor bug fixing.
40869
40870   * Stan Cox for care and feeding of the x86 port and lots of behind
40871     the scenes hacking.
40872
40873   * Alex Crain provided changes for the 3b1.
40874
40875   * Ian Dall for major improvements to the NS32k port.
40876
40877   * Paul Dale for his work to add uClinux platform support to the m68k
40878     backend.
40879
40880   * Dario Dariol contributed the four varieties of sample programs that
40881     print a copy of their source.
40882
40883   * Russell Davidson for fstream and stringstream fixes in libstdc++.
40884
40885   * Bud Davis for work on the G77 and GNU Fortran compilers.
40886
40887   * Mo DeJong for GCJ and libgcj bug fixes.
40888
40889   * DJ Delorie for the DJGPP port, build and libiberty maintenance,
40890     various bug fixes, and the M32C, MeP, and RL78 ports.
40891
40892   * Arnaud Desitter for helping to debug GNU Fortran.
40893
40894   * Gabriel Dos Reis for contributions to G++, contributions and
40895     maintenance of GCC diagnostics infrastructure, libstdc++-v3,
40896     including 'valarray<>', 'complex<>', maintaining the numerics
40897     library (including that pesky '<limits>' :-) and keeping up-to-date
40898     anything to do with numbers.
40899
40900   * Ulrich Drepper for his work on glibc, testing of GCC using glibc,
40901     ISO C99 support, CFG dumping support, etc., plus support of the C++
40902     runtime libraries including for all kinds of C interface issues,
40903     contributing and maintaining 'complex<>', sanity checking and
40904     disbursement, configuration architecture, libio maintenance, and
40905     early math work.
40906
40907   * Zdenek Dvorak for a new loop unroller and various fixes.
40908
40909   * Michael Eager for his work on the Xilinx MicroBlaze port.
40910
40911   * Richard Earnshaw for his ongoing work with the ARM.
40912
40913   * David Edelsohn for his direction via the steering committee,
40914     ongoing work with the RS6000/PowerPC port, help cleaning up Haifa
40915     loop changes, doing the entire AIX port of libstdc++ with his bare
40916     hands, and for ensuring GCC properly keeps working on AIX.
40917
40918   * Kevin Ediger for the floating point formatting of num_put::do_put
40919     in libstdc++.
40920
40921   * Phil Edwards for libstdc++ work including configuration hackery,
40922     documentation maintainer, chief breaker of the web pages, the
40923     occasional iostream bug fix, and work on shared library symbol
40924     versioning.
40925
40926   * Paul Eggert for random hacking all over GCC.
40927
40928   * Mark Elbrecht for various DJGPP improvements, and for libstdc++
40929     configuration support for locales and fstream-related fixes.
40930
40931   * Vadim Egorov for libstdc++ fixes in strings, streambufs, and
40932     iostreams.
40933
40934   * Christian Ehrhardt for dealing with bug reports.
40935
40936   * Ben Elliston for his work to move the Objective-C runtime into its
40937     own subdirectory and for his work on autoconf.
40938
40939   * Revital Eres for work on the PowerPC 750CL port.
40940
40941   * Marc Espie for OpenBSD support.
40942
40943   * Doug Evans for much of the global optimization framework, arc,
40944     m32r, and SPARC work.
40945
40946   * Christopher Faylor for his work on the Cygwin port and for caring
40947     and feeding the gcc.gnu.org box and saving its users tons of spam.
40948
40949   * Fred Fish for BeOS support and Ada fixes.
40950
40951   * Ivan Fontes Garcia for the Portuguese translation of the GCJ FAQ.
40952
40953   * Peter Gerwinski for various bug fixes and the Pascal front end.
40954
40955   * Kaveh R. Ghazi for his direction via the steering committee,
40956     amazing work to make '-W -Wall -W* -Werror' useful, and testing GCC
40957     on a plethora of platforms.  Kaveh extends his gratitude to the
40958     CAIP Center at Rutgers University for providing him with computing
40959     resources to work on Free Software from the late 1980s to 2010.
40960
40961   * John Gilmore for a donation to the FSF earmarked improving GNU
40962     Java.
40963
40964   * Judy Goldberg for c++ contributions.
40965
40966   * Torbjorn Granlund for various fixes and the c-torture testsuite,
40967     multiply- and divide-by-constant optimization, improved long long
40968     support, improved leaf function register allocation, and his
40969     direction via the steering committee.
40970
40971   * Anthony Green for his '-Os' contributions, the moxie port, and Java
40972     front end work.
40973
40974   * Stu Grossman for gdb hacking, allowing GCJ developers to debug Java
40975     code.
40976
40977   * Michael K. Gschwind contributed the port to the PDP-11.
40978
40979   * Richard Guenther for his ongoing middle-end contributions and bug
40980     fixes and for release management.
40981
40982   * Ron Guilmette implemented the 'protoize' and 'unprotoize' tools,
40983     the support for Dwarf symbolic debugging information, and much of
40984     the support for System V Release 4.  He has also worked heavily on
40985     the Intel 386 and 860 support.
40986
40987   * Sumanth Gundapaneni for contributing the CR16 port.
40988
40989   * Mostafa Hagog for Swing Modulo Scheduling (SMS) and post reload
40990     GCSE.
40991
40992   * Bruno Haible for improvements in the runtime overhead for EH, new
40993     warnings and assorted bug fixes.
40994
40995   * Andrew Haley for his amazing Java compiler and library efforts.
40996
40997   * Chris Hanson assisted in making GCC work on HP-UX for the 9000
40998     series 300.
40999
41000   * Michael Hayes for various thankless work he's done trying to get
41001     the c30/c40 ports functional.  Lots of loop and unroll improvements
41002     and fixes.
41003
41004   * Dara Hazeghi for wading through myriads of target-specific bug
41005     reports.
41006
41007   * Kate Hedstrom for staking the G77 folks with an initial testsuite.
41008
41009   * Richard Henderson for his ongoing SPARC, alpha, ia32, and ia64
41010     work, loop opts, and generally fixing lots of old problems we've
41011     ignored for years, flow rewrite and lots of further stuff,
41012     including reviewing tons of patches.
41013
41014   * Aldy Hernandez for working on the PowerPC port, SIMD support, and
41015     various fixes.
41016
41017   * Nobuyuki Hikichi of Software Research Associates, Tokyo,
41018     contributed the support for the Sony NEWS machine.
41019
41020   * Kazu Hirata for caring and feeding the Renesas H8/300 port and
41021     various fixes.
41022
41023   * Katherine Holcomb for work on GNU Fortran.
41024
41025   * Manfred Hollstein for his ongoing work to keep the m88k alive, lots
41026     of testing and bug fixing, particularly of GCC configury code.
41027
41028   * Steve Holmgren for MachTen patches.
41029
41030   * Mat Hostetter for work on the TILE-Gx and TILEPro ports.
41031
41032   * Jan Hubicka for his x86 port improvements.
41033
41034   * Falk Hueffner for working on C and optimization bug reports.
41035
41036   * Bernardo Innocenti for his m68k work, including merging of ColdFire
41037     improvements and uClinux support.
41038
41039   * Christian Iseli for various bug fixes.
41040
41041   * Kamil Iskra for general m68k hacking.
41042
41043   * Lee Iverson for random fixes and MIPS testing.
41044
41045   * Andreas Jaeger for testing and benchmarking of GCC and various bug
41046     fixes.
41047
41048   * Jakub Jelinek for his SPARC work and sibling call optimizations as
41049     well as lots of bug fixes and test cases, and for improving the
41050     Java build system.
41051
41052   * Janis Johnson for ia64 testing and fixes, her quality improvement
41053     sidetracks, and web page maintenance.
41054
41055   * Kean Johnston for SCO OpenServer support and various fixes.
41056
41057   * Tim Josling for the sample language treelang based originally on
41058     Richard Kenner's "toy" language.
41059
41060   * Nicolai Josuttis for additional libstdc++ documentation.
41061
41062   * Klaus Kaempf for his ongoing work to make alpha-vms a viable
41063     target.
41064
41065   * Steven G. Kargl for work on GNU Fortran.
41066
41067   * David Kashtan of SRI adapted GCC to VMS.
41068
41069   * Ryszard Kabatek for many, many libstdc++ bug fixes and
41070     optimizations of strings, especially member functions, and for
41071     auto_ptr fixes.
41072
41073   * Geoffrey Keating for his ongoing work to make the PPC work for
41074     GNU/Linux and his automatic regression tester.
41075
41076   * Brendan Kehoe for his ongoing work with G++ and for a lot of early
41077     work in just about every part of libstdc++.
41078
41079   * Oliver M. Kellogg of Deutsche Aerospace contributed the port to the
41080     MIL-STD-1750A.
41081
41082   * Richard Kenner of the New York University Ultracomputer Research
41083     Laboratory wrote the machine descriptions for the AMD 29000, the
41084     DEC Alpha, the IBM RT PC, and the IBM RS/6000 as well as the
41085     support for instruction attributes.  He also made changes to better
41086     support RISC processors including changes to common subexpression
41087     elimination, strength reduction, function calling sequence
41088     handling, and condition code support, in addition to generalizing
41089     the code for frame pointer elimination and delay slot scheduling.
41090     Richard Kenner was also the head maintainer of GCC for several
41091     years.
41092
41093   * Mumit Khan for various contributions to the Cygwin and Mingw32
41094     ports and maintaining binary releases for Microsoft Windows hosts,
41095     and for massive libstdc++ porting work to Cygwin/Mingw32.
41096
41097   * Robin Kirkham for cpu32 support.
41098
41099   * Mark Klein for PA improvements.
41100
41101   * Thomas Koenig for various bug fixes.
41102
41103   * Bruce Korb for the new and improved fixincludes code.
41104
41105   * Benjamin Kosnik for his G++ work and for leading the libstdc++-v3
41106     effort.
41107
41108   * Charles LaBrec contributed the support for the Integrated Solutions
41109     68020 system.
41110
41111   * Asher Langton and Mike Kumbera for contributing Cray pointer
41112     support to GNU Fortran, and for other GNU Fortran improvements.
41113
41114   * Jeff Law for his direction via the steering committee, coordinating
41115     the entire egcs project and GCC 2.95, rolling out snapshots and
41116     releases, handling merges from GCC2, reviewing tons of patches that
41117     might have fallen through the cracks else, and random but extensive
41118     hacking.
41119
41120   * Walter Lee for work on the TILE-Gx and TILEPro ports.
41121
41122   * Marc Lehmann for his direction via the steering committee and
41123     helping with analysis and improvements of x86 performance.
41124
41125   * Victor Leikehman for work on GNU Fortran.
41126
41127   * Ted Lemon wrote parts of the RTL reader and printer.
41128
41129   * Kriang Lerdsuwanakij for C++ improvements including template as
41130     template parameter support, and many C++ fixes.
41131
41132   * Warren Levy for tremendous work on libgcj (Java Runtime Library)
41133     and random work on the Java front end.
41134
41135   * Alain Lichnewsky ported GCC to the MIPS CPU.
41136
41137   * Oskar Liljeblad for hacking on AWT and his many Java bug reports
41138     and patches.
41139
41140   * Robert Lipe for OpenServer support, new testsuites, testing, etc.
41141
41142   * Chen Liqin for various S+core related fixes/improvement, and for
41143     maintaining the S+core port.
41144
41145   * Weiwen Liu for testing and various bug fixes.
41146
41147   * Manuel Lo'pez-Iba'n~ez for improving '-Wconversion' and many other
41148     diagnostics fixes and improvements.
41149
41150   * Dave Love for his ongoing work with the Fortran front end and
41151     runtime libraries.
41152
41153   * Martin von Lo"wis for internal consistency checking infrastructure,
41154     various C++ improvements including namespace support, and tons of
41155     assistance with libstdc++/compiler merges.
41156
41157   * H.J. Lu for his previous contributions to the steering committee,
41158     many x86 bug reports, prototype patches, and keeping the GNU/Linux
41159     ports working.
41160
41161   * Greg McGary for random fixes and (someday) bounded pointers.
41162
41163   * Andrew MacLeod for his ongoing work in building a real EH system,
41164     various code generation improvements, work on the global optimizer,
41165     etc.
41166
41167   * Vladimir Makarov for hacking some ugly i960 problems, PowerPC
41168     hacking improvements to compile-time performance, overall knowledge
41169     and direction in the area of instruction scheduling, and design and
41170     implementation of the automaton based instruction scheduler.
41171
41172   * Bob Manson for his behind the scenes work on dejagnu.
41173
41174   * Philip Martin for lots of libstdc++ string and vector iterator
41175     fixes and improvements, and string clean up and testsuites.
41176
41177   * All of the Mauve project contributors, for Java test code.
41178
41179   * Bryce McKinlay for numerous GCJ and libgcj fixes and improvements.
41180
41181   * Adam Megacz for his work on the Microsoft Windows port of GCJ.
41182
41183   * Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS,
41184     powerpc, haifa, ECOFF debug support, and other assorted hacking.
41185
41186   * Jason Merrill for his direction via the steering committee and
41187     leading the G++ effort.
41188
41189   * Martin Michlmayr for testing GCC on several architectures using the
41190     entire Debian archive.
41191
41192   * David Miller for his direction via the steering committee, lots of
41193     SPARC work, improvements in jump.c and interfacing with the Linux
41194     kernel developers.
41195
41196   * Gary Miller ported GCC to Charles River Data Systems machines.
41197
41198   * Alfred Minarik for libstdc++ string and ios bug fixes, and turning
41199     the entire libstdc++ testsuite namespace-compatible.
41200
41201   * Mark Mitchell for his direction via the steering committee,
41202     mountains of C++ work, load/store hoisting out of loops, alias
41203     analysis improvements, ISO C 'restrict' support, and serving as
41204     release manager from 2000 to 2011.
41205
41206   * Alan Modra for various GNU/Linux bits and testing.
41207
41208   * Toon Moene for his direction via the steering committee, Fortran
41209     maintenance, and his ongoing work to make us make Fortran run fast.
41210
41211   * Jason Molenda for major help in the care and feeding of all the
41212     services on the gcc.gnu.org (formerly egcs.cygnus.com)
41213     machine--mail, web services, ftp services, etc etc.  Doing all this
41214     work on scrap paper and the backs of envelopes would have been...
41215     difficult.
41216
41217   * Catherine Moore for fixing various ugly problems we have sent her
41218     way, including the haifa bug which was killing the Alpha & PowerPC
41219     Linux kernels.
41220
41221   * Mike Moreton for his various Java patches.
41222
41223   * David Mosberger-Tang for various Alpha improvements, and for the
41224     initial IA-64 port.
41225
41226   * Stephen Moshier contributed the floating point emulator that
41227     assists in cross-compilation and permits support for floating point
41228     numbers wider than 64 bits and for ISO C99 support.
41229
41230   * Bill Moyer for his behind the scenes work on various issues.
41231
41232   * Philippe De Muyter for his work on the m68k port.
41233
41234   * Joseph S. Myers for his work on the PDP-11 port, format checking
41235     and ISO C99 support, and continuous emphasis on (and contributions
41236     to) documentation.
41237
41238   * Nathan Myers for his work on libstdc++-v3: architecture and
41239     authorship through the first three snapshots, including
41240     implementation of locale infrastructure, string, shadow C headers,
41241     and the initial project documentation (DESIGN, CHECKLIST, and so
41242     forth).  Later, more work on MT-safe string and shadow headers.
41243
41244   * Felix Natter for documentation on porting libstdc++.
41245
41246   * Nathanael Nerode for cleaning up the configuration/build process.
41247
41248   * NeXT, Inc. donated the front end that supports the Objective-C
41249     language.
41250
41251   * Hans-Peter Nilsson for the CRIS and MMIX ports, improvements to the
41252     search engine setup, various documentation fixes and other small
41253     fixes.
41254
41255   * Geoff Noer for his work on getting cygwin native builds working.
41256
41257   * Diego Novillo for his work on Tree SSA, OpenMP, SPEC performance
41258     tracking web pages, GIMPLE tuples, and assorted fixes.
41259
41260   * David O'Brien for the FreeBSD/alpha, FreeBSD/AMD x86-64,
41261     FreeBSD/ARM, FreeBSD/PowerPC, and FreeBSD/SPARC64 ports and related
41262     infrastructure improvements.
41263
41264   * Alexandre Oliva for various build infrastructure improvements,
41265     scripts and amazing testing work, including keeping libtool issues
41266     sane and happy.
41267
41268   * Stefan Olsson for work on mt_alloc.
41269
41270   * Melissa O'Neill for various NeXT fixes.
41271
41272   * Rainer Orth for random MIPS work, including improvements to GCC's
41273     o32 ABI support, improvements to dejagnu's MIPS support, Java
41274     configuration clean-ups and porting work, and maintaining the IRIX,
41275     Solaris 2, and Tru64 UNIX ports.
41276
41277   * Hartmut Penner for work on the s390 port.
41278
41279   * Paul Petersen wrote the machine description for the Alliant FX/8.
41280
41281   * Alexandre Petit-Bianco for implementing much of the Java compiler
41282     and continued Java maintainership.
41283
41284   * Matthias Pfaller for major improvements to the NS32k port.
41285
41286   * Gerald Pfeifer for his direction via the steering committee,
41287     pointing out lots of problems we need to solve, maintenance of the
41288     web pages, and taking care of documentation maintenance in general.
41289
41290   * Andrew Pinski for processing bug reports by the dozen.
41291
41292   * Ovidiu Predescu for his work on the Objective-C front end and
41293     runtime libraries.
41294
41295   * Jerry Quinn for major performance improvements in C++ formatted
41296     I/O.
41297
41298   * Ken Raeburn for various improvements to checker, MIPS ports and
41299     various cleanups in the compiler.
41300
41301   * Rolf W. Rasmussen for hacking on AWT.
41302
41303   * David Reese of Sun Microsystems contributed to the Solaris on
41304     PowerPC port.
41305
41306   * Volker Reichelt for keeping up with the problem reports.
41307
41308   * Joern Rennecke for maintaining the sh port, loop, regmove & reload
41309     hacking and developing and maintaining the Epiphany port.
41310
41311   * Loren J. Rittle for improvements to libstdc++-v3 including the
41312     FreeBSD port, threading fixes, thread-related configury changes,
41313     critical threading documentation, and solutions to really tricky
41314     I/O problems, as well as keeping GCC properly working on FreeBSD
41315     and continuous testing.
41316
41317   * Craig Rodrigues for processing tons of bug reports.
41318
41319   * Ola Ro"nnerup for work on mt_alloc.
41320
41321   * Gavin Romig-Koch for lots of behind the scenes MIPS work.
41322
41323   * David Ronis inspired and encouraged Craig to rewrite the G77
41324     documentation in texinfo format by contributing a first pass at a
41325     translation of the old 'g77-0.5.16/f/DOC' file.
41326
41327   * Ken Rose for fixes to GCC's delay slot filling code.
41328
41329   * Paul Rubin wrote most of the preprocessor.
41330
41331   * Pe'tur Runo'lfsson for major performance improvements in C++
41332     formatted I/O and large file support in C++ filebuf.
41333
41334   * Chip Salzenberg for libstdc++ patches and improvements to locales,
41335     traits, Makefiles, libio, libtool hackery, and "long long" support.
41336
41337   * Juha Sarlin for improvements to the H8 code generator.
41338
41339   * Greg Satz assisted in making GCC work on HP-UX for the 9000 series
41340     300.
41341
41342   * Roger Sayle for improvements to constant folding and GCC's RTL
41343     optimizers as well as for fixing numerous bugs.
41344
41345   * Bradley Schatz for his work on the GCJ FAQ.
41346
41347   * Peter Schauer wrote the code to allow debugging to work on the
41348     Alpha.
41349
41350   * William Schelter did most of the work on the Intel 80386 support.
41351
41352   * Tobias Schlu"ter for work on GNU Fortran.
41353
41354   * Bernd Schmidt for various code generation improvements and major
41355     work in the reload pass, serving as release manager for GCC 2.95.3,
41356     and work on the Blackfin and C6X ports.
41357
41358   * Peter Schmid for constant testing of libstdc++--especially
41359     application testing, going above and beyond what was requested for
41360     the release criteria--and libstdc++ header file tweaks.
41361
41362   * Jason Schroeder for jcf-dump patches.
41363
41364   * Andreas Schwab for his work on the m68k port.
41365
41366   * Lars Segerlund for work on GNU Fortran.
41367
41368   * Dodji Seketeli for numerous C++ bug fixes and debug info
41369     improvements.
41370
41371   * Joel Sherrill for his direction via the steering committee, RTEMS
41372     contributions and RTEMS testing.
41373
41374   * Nathan Sidwell for many C++ fixes/improvements.
41375
41376   * Jeffrey Siegal for helping RMS with the original design of GCC,
41377     some code which handles the parse tree and RTL data structures,
41378     constant folding and help with the original VAX & m68k ports.
41379
41380   * Kenny Simpson for prompting libstdc++ fixes due to defect reports
41381     from the LWG (thereby keeping GCC in line with updates from the
41382     ISO).
41383
41384   * Franz Sirl for his ongoing work with making the PPC port stable for
41385     GNU/Linux.
41386
41387   * Andrey Slepuhin for assorted AIX hacking.
41388
41389   * Trevor Smigiel for contributing the SPU port.
41390
41391   * Christopher Smith did the port for Convex machines.
41392
41393   * Danny Smith for his major efforts on the Mingw (and Cygwin) ports.
41394
41395   * Randy Smith finished the Sun FPA support.
41396
41397   * Scott Snyder for queue, iterator, istream, and string fixes and
41398     libstdc++ testsuite entries.  Also for providing the patch to G77
41399     to add rudimentary support for 'INTEGER*1', 'INTEGER*2', and
41400     'LOGICAL*1'.
41401
41402   * Zdenek Sojka for running automated regression testing of GCC and
41403     reporting numerous bugs.
41404
41405   * Jayant Sonar for contributing the CR16 port.
41406
41407   * Brad Spencer for contributions to the GLIBCPP_FORCE_NEW technique.
41408
41409   * Richard Stallman, for writing the original GCC and launching the
41410     GNU project.
41411
41412   * Jan Stein of the Chalmers Computer Society provided support for
41413     Genix, as well as part of the 32000 machine description.
41414
41415   * Nigel Stephens for various mips16 related fixes/improvements.
41416
41417   * Jonathan Stone wrote the machine description for the Pyramid
41418     computer.
41419
41420   * Graham Stott for various infrastructure improvements.
41421
41422   * John Stracke for his Java HTTP protocol fixes.
41423
41424   * Mike Stump for his Elxsi port, G++ contributions over the years and
41425     more recently his vxworks contributions
41426
41427   * Jeff Sturm for Java porting help, bug fixes, and encouragement.
41428
41429   * Shigeya Suzuki for this fixes for the bsdi platforms.
41430
41431   * Ian Lance Taylor for the Go frontend, the initial mips16 and mips64
41432     support, general configury hacking, fixincludes, etc.
41433
41434   * Holger Teutsch provided the support for the Clipper CPU.
41435
41436   * Gary Thomas for his ongoing work to make the PPC work for
41437     GNU/Linux.
41438
41439   * Philipp Thomas for random bug fixes throughout the compiler
41440
41441   * Jason Thorpe for thread support in libstdc++ on NetBSD.
41442
41443   * Kresten Krab Thorup wrote the run time support for the Objective-C
41444     language and the fantastic Java bytecode interpreter.
41445
41446   * Michael Tiemann for random bug fixes, the first instruction
41447     scheduler, initial C++ support, function integration, NS32k, SPARC
41448     and M88k machine description work, delay slot scheduling.
41449
41450   * Andreas Tobler for his work porting libgcj to Darwin.
41451
41452   * Teemu Torma for thread safe exception handling support.
41453
41454   * Leonard Tower wrote parts of the parser, RTL generator, and RTL
41455     definitions, and of the VAX machine description.
41456
41457   * Daniel Towner and Hariharan Sandanagobalane contributed and
41458     maintain the picoChip port.
41459
41460   * Tom Tromey for internationalization support and for his many Java
41461     contributions and libgcj maintainership.
41462
41463   * Lassi Tuura for improvements to config.guess to determine HP
41464     processor types.
41465
41466   * Petter Urkedal for libstdc++ CXXFLAGS, math, and algorithms fixes.
41467
41468   * Andy Vaught for the design and initial implementation of the GNU
41469     Fortran front end.
41470
41471   * Brent Verner for work with the libstdc++ cshadow files and their
41472     associated configure steps.
41473
41474   * Todd Vierling for contributions for NetBSD ports.
41475
41476   * Jonathan Wakely for contributing libstdc++ Doxygen notes and XHTML
41477     guidance.
41478
41479   * Dean Wakerley for converting the install documentation from HTML to
41480     texinfo in time for GCC 3.0.
41481
41482   * Krister Walfridsson for random bug fixes.
41483
41484   * Feng Wang for contributions to GNU Fortran.
41485
41486   * Stephen M. Webb for time and effort on making libstdc++ shadow
41487     files work with the tricky Solaris 8+ headers, and for pushing the
41488     build-time header tree.
41489
41490   * John Wehle for various improvements for the x86 code generator,
41491     related infrastructure improvements to help x86 code generation,
41492     value range propagation and other work, WE32k port.
41493
41494   * Ulrich Weigand for work on the s390 port.
41495
41496   * Zack Weinberg for major work on cpplib and various other bug fixes.
41497
41498   * Matt Welsh for help with Linux Threads support in GCJ.
41499
41500   * Urban Widmark for help fixing java.io.
41501
41502   * Mark Wielaard for new Java library code and his work integrating
41503     with Classpath.
41504
41505   * Dale Wiles helped port GCC to the Tahoe.
41506
41507   * Bob Wilson from Tensilica, Inc. for the Xtensa port.
41508
41509   * Jim Wilson for his direction via the steering committee, tackling
41510     hard problems in various places that nobody else wanted to work on,
41511     strength reduction and other loop optimizations.
41512
41513   * Paul Woegerer and Tal Agmon for the CRX port.
41514
41515   * Carlo Wood for various fixes.
41516
41517   * Tom Wood for work on the m88k port.
41518
41519   * Canqun Yang for work on GNU Fortran.
41520
41521   * Masanobu Yuhara of Fujitsu Laboratories implemented the machine
41522     description for the Tron architecture (specifically, the Gmicro).
41523
41524   * Kevin Zachmann helped port GCC to the Tahoe.
41525
41526   * Ayal Zaks for Swing Modulo Scheduling (SMS).
41527
41528   * Xiaoqiang Zhang for work on GNU Fortran.
41529
41530   * Gilles Zunino for help porting Java to Irix.
41531
41532 The following people are recognized for their contributions to GNAT,
41533the Ada front end of GCC:
41534   * Bernard Banner
41535
41536   * Romain Berrendonner
41537
41538   * Geert Bosch
41539
41540   * Emmanuel Briot
41541
41542   * Joel Brobecker
41543
41544   * Ben Brosgol
41545
41546   * Vincent Celier
41547
41548   * Arnaud Charlet
41549
41550   * Chien Chieng
41551
41552   * Cyrille Comar
41553
41554   * Cyrille Crozes
41555
41556   * Robert Dewar
41557
41558   * Gary Dismukes
41559
41560   * Robert Duff
41561
41562   * Ed Falis
41563
41564   * Ramon Fernandez
41565
41566   * Sam Figueroa
41567
41568   * Vasiliy Fofanov
41569
41570   * Michael Friess
41571
41572   * Franco Gasperoni
41573
41574   * Ted Giering
41575
41576   * Matthew Gingell
41577
41578   * Laurent Guerby
41579
41580   * Jerome Guitton
41581
41582   * Olivier Hainque
41583
41584   * Jerome Hugues
41585
41586   * Hristian Kirtchev
41587
41588   * Jerome Lambourg
41589
41590   * Bruno Leclerc
41591
41592   * Albert Lee
41593
41594   * Sean McNeil
41595
41596   * Javier Miranda
41597
41598   * Laurent Nana
41599
41600   * Pascal Obry
41601
41602   * Dong-Ik Oh
41603
41604   * Laurent Pautet
41605
41606   * Brett Porter
41607
41608   * Thomas Quinot
41609
41610   * Nicolas Roche
41611
41612   * Pat Rogers
41613
41614   * Jose Ruiz
41615
41616   * Douglas Rupp
41617
41618   * Sergey Rybin
41619
41620   * Gail Schenker
41621
41622   * Ed Schonberg
41623
41624   * Nicolas Setton
41625
41626   * Samuel Tardieu
41627
41628 The following people are recognized for their contributions of new
41629features, bug reports, testing and integration of classpath/libgcj for
41630GCC version 4.1:
41631   * Lillian Angel for 'JTree' implementation and lots Free Swing
41632     additions and bug fixes.
41633
41634   * Wolfgang Baer for 'GapContent' bug fixes.
41635
41636   * Anthony Balkissoon for 'JList', Free Swing 1.5 updates and mouse
41637     event fixes, lots of Free Swing work including 'JTable' editing.
41638
41639   * Stuart Ballard for RMI constant fixes.
41640
41641   * Goffredo Baroncelli for 'HTTPURLConnection' fixes.
41642
41643   * Gary Benson for 'MessageFormat' fixes.
41644
41645   * Daniel Bonniot for 'Serialization' fixes.
41646
41647   * Chris Burdess for lots of gnu.xml and http protocol fixes, 'StAX'
41648     and 'DOM xml:id' support.
41649
41650   * Ka-Hing Cheung for 'TreePath' and 'TreeSelection' fixes.
41651
41652   * Archie Cobbs for build fixes, VM interface updates,
41653     'URLClassLoader' updates.
41654
41655   * Kelley Cook for build fixes.
41656
41657   * Martin Cordova for Suggestions for better 'SocketTimeoutException'.
41658
41659   * David Daney for 'BitSet' bug fixes, 'HttpURLConnection' rewrite and
41660     improvements.
41661
41662   * Thomas Fitzsimmons for lots of upgrades to the gtk+ AWT and Cairo
41663     2D support.  Lots of imageio framework additions, lots of AWT and
41664     Free Swing bug fixes.
41665
41666   * Jeroen Frijters for 'ClassLoader' and nio cleanups, serialization
41667     fixes, better 'Proxy' support, bug fixes and IKVM integration.
41668
41669   * Santiago Gala for 'AccessControlContext' fixes.
41670
41671   * Nicolas Geoffray for 'VMClassLoader' and 'AccessController'
41672     improvements.
41673
41674   * David Gilbert for 'basic' and 'metal' icon and plaf support and
41675     lots of documenting, Lots of Free Swing and metal theme additions.
41676     'MetalIconFactory' implementation.
41677
41678   * Anthony Green for 'MIDI' framework, 'ALSA' and 'DSSI' providers.
41679
41680   * Andrew Haley for 'Serialization' and 'URLClassLoader' fixes, gcj
41681     build speedups.
41682
41683   * Kim Ho for 'JFileChooser' implementation.
41684
41685   * Andrew John Hughes for 'Locale' and net fixes, URI RFC2986 updates,
41686     'Serialization' fixes, 'Properties' XML support and generic branch
41687     work, VMIntegration guide update.
41688
41689   * Bastiaan Huisman for 'TimeZone' bug fixing.
41690
41691   * Andreas Jaeger for mprec updates.
41692
41693   * Paul Jenner for better '-Werror' support.
41694
41695   * Ito Kazumitsu for 'NetworkInterface' implementation and updates.
41696
41697   * Roman Kennke for 'BoxLayout', 'GrayFilter' and 'SplitPane', plus
41698     bug fixes all over.  Lots of Free Swing work including styled text.
41699
41700   * Simon Kitching for 'String' cleanups and optimization suggestions.
41701
41702   * Michael Koch for configuration fixes, 'Locale' updates, bug and
41703     build fixes.
41704
41705   * Guilhem Lavaux for configuration, thread and channel fixes and
41706     Kaffe integration.  JCL native 'Pointer' updates.  Logger bug
41707     fixes.
41708
41709   * David Lichteblau for JCL support library global/local reference
41710     cleanups.
41711
41712   * Aaron Luchko for JDWP updates and documentation fixes.
41713
41714   * Ziga Mahkovec for 'Graphics2D' upgraded to Cairo 0.5 and new regex
41715     features.
41716
41717   * Sven de Marothy for BMP imageio support, CSS and 'TextLayout'
41718     fixes.  'GtkImage' rewrite, 2D, awt, free swing and date/time fixes
41719     and implementing the Qt4 peers.
41720
41721   * Casey Marshall for crypto algorithm fixes, 'FileChannel' lock,
41722     'SystemLogger' and 'FileHandler' rotate implementations, NIO
41723     'FileChannel.map' support, security and policy updates.
41724
41725   * Bryce McKinlay for RMI work.
41726
41727   * Audrius Meskauskas for lots of Free Corba, RMI and HTML work plus
41728     testing and documenting.
41729
41730   * Kalle Olavi Niemitalo for build fixes.
41731
41732   * Rainer Orth for build fixes.
41733
41734   * Andrew Overholt for 'File' locking fixes.
41735
41736   * Ingo Proetel for 'Image', 'Logger' and 'URLClassLoader' updates.
41737
41738   * Olga Rodimina for 'MenuSelectionManager' implementation.
41739
41740   * Jan Roehrich for 'BasicTreeUI' and 'JTree' fixes.
41741
41742   * Julian Scheid for documentation updates and gjdoc support.
41743
41744   * Christian Schlichtherle for zip fixes and cleanups.
41745
41746   * Robert Schuster for documentation updates and beans fixes,
41747     'TreeNode' enumerations and 'ActionCommand' and various fixes, XML
41748     and URL, AWT and Free Swing bug fixes.
41749
41750   * Keith Seitz for lots of JDWP work.
41751
41752   * Christian Thalinger for 64-bit cleanups, Configuration and VM
41753     interface fixes and 'CACAO' integration, 'fdlibm' updates.
41754
41755   * Gael Thomas for 'VMClassLoader' boot packages support suggestions.
41756
41757   * Andreas Tobler for Darwin and Solaris testing and fixing, 'Qt4'
41758     support for Darwin/OS X, 'Graphics2D' support, 'gtk+' updates.
41759
41760   * Dalibor Topic for better 'DEBUG' support, build cleanups and Kaffe
41761     integration.  'Qt4' build infrastructure, 'SHA1PRNG' and
41762     'GdkPixbugDecoder' updates.
41763
41764   * Tom Tromey for Eclipse integration, generics work, lots of bug
41765     fixes and gcj integration including coordinating The Big Merge.
41766
41767   * Mark Wielaard for bug fixes, packaging and release management,
41768     'Clipboard' implementation, system call interrupts and network
41769     timeouts and 'GdkPixpufDecoder' fixes.
41770
41771 In addition to the above, all of which also contributed time and energy
41772in testing GCC, we would like to thank the following for their
41773contributions to testing:
41774
41775   * Michael Abd-El-Malek
41776
41777   * Thomas Arend
41778
41779   * Bonzo Armstrong
41780
41781   * Steven Ashe
41782
41783   * Chris Baldwin
41784
41785   * David Billinghurst
41786
41787   * Jim Blandy
41788
41789   * Stephane Bortzmeyer
41790
41791   * Horst von Brand
41792
41793   * Frank Braun
41794
41795   * Rodney Brown
41796
41797   * Sidney Cadot
41798
41799   * Bradford Castalia
41800
41801   * Robert Clark
41802
41803   * Jonathan Corbet
41804
41805   * Ralph Doncaster
41806
41807   * Richard Emberson
41808
41809   * Levente Farkas
41810
41811   * Graham Fawcett
41812
41813   * Mark Fernyhough
41814
41815   * Robert A. French
41816
41817   * Jo"rgen Freyh
41818
41819   * Mark K. Gardner
41820
41821   * Charles-Antoine Gauthier
41822
41823   * Yung Shing Gene
41824
41825   * David Gilbert
41826
41827   * Simon Gornall
41828
41829   * Fred Gray
41830
41831   * John Griffin
41832
41833   * Patrik Hagglund
41834
41835   * Phil Hargett
41836
41837   * Amancio Hasty
41838
41839   * Takafumi Hayashi
41840
41841   * Bryan W. Headley
41842
41843   * Kevin B. Hendricks
41844
41845   * Joep Jansen
41846
41847   * Christian Joensson
41848
41849   * Michel Kern
41850
41851   * David Kidd
41852
41853   * Tobias Kuipers
41854
41855   * Anand Krishnaswamy
41856
41857   * A. O. V. Le Blanc
41858
41859   * llewelly
41860
41861   * Damon Love
41862
41863   * Brad Lucier
41864
41865   * Matthias Klose
41866
41867   * Martin Knoblauch
41868
41869   * Rick Lutowski
41870
41871   * Jesse Macnish
41872
41873   * Stefan Morrell
41874
41875   * Anon A. Mous
41876
41877   * Matthias Mueller
41878
41879   * Pekka Nikander
41880
41881   * Rick Niles
41882
41883   * Jon Olson
41884
41885   * Magnus Persson
41886
41887   * Chris Pollard
41888
41889   * Richard Polton
41890
41891   * Derk Reefman
41892
41893   * David Rees
41894
41895   * Paul Reilly
41896
41897   * Tom Reilly
41898
41899   * Torsten Rueger
41900
41901   * Danny Sadinoff
41902
41903   * Marc Schifer
41904
41905   * Erik Schnetter
41906
41907   * Wayne K. Schroll
41908
41909   * David Schuler
41910
41911   * Vin Shelton
41912
41913   * Tim Souder
41914
41915   * Adam Sulmicki
41916
41917   * Bill Thorson
41918
41919   * George Talbot
41920
41921   * Pedro A. M. Vazquez
41922
41923   * Gregory Warnes
41924
41925   * Ian Watson
41926
41927   * David E. Young
41928
41929   * And many others
41930
41931 And finally we'd like to thank everyone who uses the compiler, provides
41932feedback and generally reminds us why we're doing this work in the first
41933place.
41934
41935
41936File: gccint.info,  Node: Option Index,  Next: Concept Index,  Prev: Contributors,  Up: Top
41937
41938Option Index
41939************
41940
41941GCC's command line options are indexed here without any initial '-' or
41942'--'.  Where an option has both positive and negative forms (such as
41943'-fOPTION' and '-fno-OPTION'), relevant entries in the manual are
41944indexed under the most appropriate form; it may sometimes be useful to
41945look up both forms.
41946
41947�[index�]
41948* Menu:
41949
41950* fltrans:                               Internal flags.       (line 18)
41951* fltrans-output-list:                   Internal flags.       (line 23)
41952* fwpa:                                  Internal flags.       (line  9)
41953* msoft-float:                           Soft float library routines.
41954                                                               (line  6)
41955
41956
41957File: gccint.info,  Node: Concept Index,  Prev: Option Index,  Up: Top
41958
41959Concept Index
41960*************
41961
41962�[index�]
41963* Menu:
41964
41965* '!' in constraint:                     Multi-Alternative.  (line   47)
41966* '#' in constraint:                     Modifiers.          (line   67)
41967* '#' in template:                       Output Template.    (line   66)
41968* #pragma:                               Misc.               (line  379)
41969* '%' in constraint:                     Modifiers.          (line   45)
41970* % in GTY option:                       GTY Options.        (line   18)
41971* '%' in template:                       Output Template.    (line    6)
41972* '&' in constraint:                     Modifiers.          (line   25)
41973* (nil):                                 RTL Objects.        (line   73)
41974* '*' in constraint:                     Modifiers.          (line   72)
41975* '*' in template:                       Output Statement.   (line   29)
41976* '+' in constraint:                     Modifiers.          (line   12)
41977* '-fsection-anchors':                   Special Accessors.  (line  117)
41978* '-fsection-anchors' <1>:               Anchored Addresses. (line    6)
41979* '/c' in RTL dump:                      Flags.              (line  221)
41980* '/f' in RTL dump:                      Flags.              (line  229)
41981* '/i' in RTL dump:                      Flags.              (line  274)
41982* '/j' in RTL dump:                      Flags.              (line  286)
41983* '/s' in RTL dump:                      Flags.              (line  245)
41984* '/u' in RTL dump:                      Flags.              (line  296)
41985* '/v' in RTL dump:                      Flags.              (line  328)
41986* '0' in constraint:                     Simple Constraints. (line  128)
41987* '<' in constraint:                     Simple Constraints. (line   47)
41988* '=' in constraint:                     Modifiers.          (line    8)
41989* '>' in constraint:                     Simple Constraints. (line   59)
41990* '?' in constraint:                     Multi-Alternative.  (line   41)
41991* \:                                     Output Template.    (line   46)
41992* __absvdi2:                             Integer library routines.
41993                                                             (line  106)
41994* __absvsi2:                             Integer library routines.
41995                                                             (line  105)
41996* __addda3:                              Fixed-point fractional library routines.
41997                                                             (line   44)
41998* __adddf3:                              Soft float library routines.
41999                                                             (line   22)
42000* __adddq3:                              Fixed-point fractional library routines.
42001                                                             (line   31)
42002* __addha3:                              Fixed-point fractional library routines.
42003                                                             (line   41)
42004* __addhq3:                              Fixed-point fractional library routines.
42005                                                             (line   29)
42006* __addqq3:                              Fixed-point fractional library routines.
42007                                                             (line   27)
42008* __addsa3:                              Fixed-point fractional library routines.
42009                                                             (line   43)
42010* __addsf3:                              Soft float library routines.
42011                                                             (line   21)
42012* __addsq3:                              Fixed-point fractional library routines.
42013                                                             (line   30)
42014* __addta3:                              Fixed-point fractional library routines.
42015                                                             (line   45)
42016* __addtf3:                              Soft float library routines.
42017                                                             (line   23)
42018* __adduda3:                             Fixed-point fractional library routines.
42019                                                             (line   51)
42020* __addudq3:                             Fixed-point fractional library routines.
42021                                                             (line   39)
42022* __adduha3:                             Fixed-point fractional library routines.
42023                                                             (line   47)
42024* __adduhq3:                             Fixed-point fractional library routines.
42025                                                             (line   35)
42026* __adduqq3:                             Fixed-point fractional library routines.
42027                                                             (line   33)
42028* __addusa3:                             Fixed-point fractional library routines.
42029                                                             (line   49)
42030* __addusq3:                             Fixed-point fractional library routines.
42031                                                             (line   37)
42032* __adduta3:                             Fixed-point fractional library routines.
42033                                                             (line   53)
42034* __addvdi3:                             Integer library routines.
42035                                                             (line  110)
42036* __addvsi3:                             Integer library routines.
42037                                                             (line  109)
42038* __addxf3:                              Soft float library routines.
42039                                                             (line   25)
42040* __ashlda3:                             Fixed-point fractional library routines.
42041                                                             (line  350)
42042* __ashldi3:                             Integer library routines.
42043                                                             (line   13)
42044* __ashldq3:                             Fixed-point fractional library routines.
42045                                                             (line  338)
42046* __ashlha3:                             Fixed-point fractional library routines.
42047                                                             (line  348)
42048* __ashlhq3:                             Fixed-point fractional library routines.
42049                                                             (line  336)
42050* __ashlqq3:                             Fixed-point fractional library routines.
42051                                                             (line  335)
42052* __ashlsa3:                             Fixed-point fractional library routines.
42053                                                             (line  349)
42054* __ashlsi3:                             Integer library routines.
42055                                                             (line   12)
42056* __ashlsq3:                             Fixed-point fractional library routines.
42057                                                             (line  337)
42058* __ashlta3:                             Fixed-point fractional library routines.
42059                                                             (line  351)
42060* __ashlti3:                             Integer library routines.
42061                                                             (line   14)
42062* __ashluda3:                            Fixed-point fractional library routines.
42063                                                             (line  357)
42064* __ashludq3:                            Fixed-point fractional library routines.
42065                                                             (line  346)
42066* __ashluha3:                            Fixed-point fractional library routines.
42067                                                             (line  353)
42068* __ashluhq3:                            Fixed-point fractional library routines.
42069                                                             (line  342)
42070* __ashluqq3:                            Fixed-point fractional library routines.
42071                                                             (line  340)
42072* __ashlusa3:                            Fixed-point fractional library routines.
42073                                                             (line  355)
42074* __ashlusq3:                            Fixed-point fractional library routines.
42075                                                             (line  344)
42076* __ashluta3:                            Fixed-point fractional library routines.
42077                                                             (line  359)
42078* __ashrda3:                             Fixed-point fractional library routines.
42079                                                             (line  370)
42080* __ashrdi3:                             Integer library routines.
42081                                                             (line   18)
42082* __ashrdq3:                             Fixed-point fractional library routines.
42083                                                             (line  366)
42084* __ashrha3:                             Fixed-point fractional library routines.
42085                                                             (line  368)
42086* __ashrhq3:                             Fixed-point fractional library routines.
42087                                                             (line  364)
42088* __ashrqq3:                             Fixed-point fractional library routines.
42089                                                             (line  363)
42090* __ashrsa3:                             Fixed-point fractional library routines.
42091                                                             (line  369)
42092* __ashrsi3:                             Integer library routines.
42093                                                             (line   17)
42094* __ashrsq3:                             Fixed-point fractional library routines.
42095                                                             (line  365)
42096* __ashrta3:                             Fixed-point fractional library routines.
42097                                                             (line  371)
42098* __ashrti3:                             Integer library routines.
42099                                                             (line   19)
42100* __bid_adddd3:                          Decimal float library routines.
42101                                                             (line   23)
42102* __bid_addsd3:                          Decimal float library routines.
42103                                                             (line   19)
42104* __bid_addtd3:                          Decimal float library routines.
42105                                                             (line   27)
42106* __bid_divdd3:                          Decimal float library routines.
42107                                                             (line   66)
42108* __bid_divsd3:                          Decimal float library routines.
42109                                                             (line   62)
42110* __bid_divtd3:                          Decimal float library routines.
42111                                                             (line   70)
42112* __bid_eqdd2:                           Decimal float library routines.
42113                                                             (line  258)
42114* __bid_eqsd2:                           Decimal float library routines.
42115                                                             (line  256)
42116* __bid_eqtd2:                           Decimal float library routines.
42117                                                             (line  260)
42118* __bid_extendddtd2:                     Decimal float library routines.
42119                                                             (line   91)
42120* __bid_extendddtf:                      Decimal float library routines.
42121                                                             (line  139)
42122* __bid_extendddxf:                      Decimal float library routines.
42123                                                             (line  133)
42124* __bid_extenddfdd:                      Decimal float library routines.
42125                                                             (line  146)
42126* __bid_extenddftd:                      Decimal float library routines.
42127                                                             (line  106)
42128* __bid_extendsddd2:                     Decimal float library routines.
42129                                                             (line   87)
42130* __bid_extendsddf:                      Decimal float library routines.
42131                                                             (line  127)
42132* __bid_extendsdtd2:                     Decimal float library routines.
42133                                                             (line   89)
42134* __bid_extendsdtf:                      Decimal float library routines.
42135                                                             (line  137)
42136* __bid_extendsdxf:                      Decimal float library routines.
42137                                                             (line  131)
42138* __bid_extendsfdd:                      Decimal float library routines.
42139                                                             (line  102)
42140* __bid_extendsfsd:                      Decimal float library routines.
42141                                                             (line  144)
42142* __bid_extendsftd:                      Decimal float library routines.
42143                                                             (line  104)
42144* __bid_extendtftd:                      Decimal float library routines.
42145                                                             (line  148)
42146* __bid_extendxftd:                      Decimal float library routines.
42147                                                             (line  108)
42148* __bid_fixdddi:                         Decimal float library routines.
42149                                                             (line  169)
42150* __bid_fixddsi:                         Decimal float library routines.
42151                                                             (line  161)
42152* __bid_fixsddi:                         Decimal float library routines.
42153                                                             (line  167)
42154* __bid_fixsdsi:                         Decimal float library routines.
42155                                                             (line  159)
42156* __bid_fixtddi:                         Decimal float library routines.
42157                                                             (line  171)
42158* __bid_fixtdsi:                         Decimal float library routines.
42159                                                             (line  163)
42160* __bid_fixunsdddi:                      Decimal float library routines.
42161                                                             (line  186)
42162* __bid_fixunsddsi:                      Decimal float library routines.
42163                                                             (line  177)
42164* __bid_fixunssddi:                      Decimal float library routines.
42165                                                             (line  184)
42166* __bid_fixunssdsi:                      Decimal float library routines.
42167                                                             (line  175)
42168* __bid_fixunstddi:                      Decimal float library routines.
42169                                                             (line  188)
42170* __bid_fixunstdsi:                      Decimal float library routines.
42171                                                             (line  179)
42172* __bid_floatdidd:                       Decimal float library routines.
42173                                                             (line  204)
42174* __bid_floatdisd:                       Decimal float library routines.
42175                                                             (line  202)
42176* __bid_floatditd:                       Decimal float library routines.
42177                                                             (line  206)
42178* __bid_floatsidd:                       Decimal float library routines.
42179                                                             (line  195)
42180* __bid_floatsisd:                       Decimal float library routines.
42181                                                             (line  193)
42182* __bid_floatsitd:                       Decimal float library routines.
42183                                                             (line  197)
42184* __bid_floatunsdidd:                    Decimal float library routines.
42185                                                             (line  222)
42186* __bid_floatunsdisd:                    Decimal float library routines.
42187                                                             (line  220)
42188* __bid_floatunsditd:                    Decimal float library routines.
42189                                                             (line  224)
42190* __bid_floatunssidd:                    Decimal float library routines.
42191                                                             (line  213)
42192* __bid_floatunssisd:                    Decimal float library routines.
42193                                                             (line  211)
42194* __bid_floatunssitd:                    Decimal float library routines.
42195                                                             (line  215)
42196* __bid_gedd2:                           Decimal float library routines.
42197                                                             (line  276)
42198* __bid_gesd2:                           Decimal float library routines.
42199                                                             (line  274)
42200* __bid_getd2:                           Decimal float library routines.
42201                                                             (line  278)
42202* __bid_gtdd2:                           Decimal float library routines.
42203                                                             (line  303)
42204* __bid_gtsd2:                           Decimal float library routines.
42205                                                             (line  301)
42206* __bid_gttd2:                           Decimal float library routines.
42207                                                             (line  305)
42208* __bid_ledd2:                           Decimal float library routines.
42209                                                             (line  294)
42210* __bid_lesd2:                           Decimal float library routines.
42211                                                             (line  292)
42212* __bid_letd2:                           Decimal float library routines.
42213                                                             (line  296)
42214* __bid_ltdd2:                           Decimal float library routines.
42215                                                             (line  285)
42216* __bid_ltsd2:                           Decimal float library routines.
42217                                                             (line  283)
42218* __bid_lttd2:                           Decimal float library routines.
42219                                                             (line  287)
42220* __bid_muldd3:                          Decimal float library routines.
42221                                                             (line   52)
42222* __bid_mulsd3:                          Decimal float library routines.
42223                                                             (line   48)
42224* __bid_multd3:                          Decimal float library routines.
42225                                                             (line   56)
42226* __bid_nedd2:                           Decimal float library routines.
42227                                                             (line  267)
42228* __bid_negdd2:                          Decimal float library routines.
42229                                                             (line   77)
42230* __bid_negsd2:                          Decimal float library routines.
42231                                                             (line   75)
42232* __bid_negtd2:                          Decimal float library routines.
42233                                                             (line   79)
42234* __bid_nesd2:                           Decimal float library routines.
42235                                                             (line  265)
42236* __bid_netd2:                           Decimal float library routines.
42237                                                             (line  269)
42238* __bid_subdd3:                          Decimal float library routines.
42239                                                             (line   37)
42240* __bid_subsd3:                          Decimal float library routines.
42241                                                             (line   33)
42242* __bid_subtd3:                          Decimal float library routines.
42243                                                             (line   41)
42244* __bid_truncdddf:                       Decimal float library routines.
42245                                                             (line  152)
42246* __bid_truncddsd2:                      Decimal float library routines.
42247                                                             (line   93)
42248* __bid_truncddsf:                       Decimal float library routines.
42249                                                             (line  123)
42250* __bid_truncdfsd:                       Decimal float library routines.
42251                                                             (line  110)
42252* __bid_truncsdsf:                       Decimal float library routines.
42253                                                             (line  150)
42254* __bid_trunctddd2:                      Decimal float library routines.
42255                                                             (line   97)
42256* __bid_trunctddf:                       Decimal float library routines.
42257                                                             (line  129)
42258* __bid_trunctdsd2:                      Decimal float library routines.
42259                                                             (line   95)
42260* __bid_trunctdsf:                       Decimal float library routines.
42261                                                             (line  125)
42262* __bid_trunctdtf:                       Decimal float library routines.
42263                                                             (line  154)
42264* __bid_trunctdxf:                       Decimal float library routines.
42265                                                             (line  135)
42266* __bid_trunctfdd:                       Decimal float library routines.
42267                                                             (line  118)
42268* __bid_trunctfsd:                       Decimal float library routines.
42269                                                             (line  114)
42270* __bid_truncxfdd:                       Decimal float library routines.
42271                                                             (line  116)
42272* __bid_truncxfsd:                       Decimal float library routines.
42273                                                             (line  112)
42274* __bid_unorddd2:                        Decimal float library routines.
42275                                                             (line  234)
42276* __bid_unordsd2:                        Decimal float library routines.
42277                                                             (line  232)
42278* __bid_unordtd2:                        Decimal float library routines.
42279                                                             (line  236)
42280* __bswapdi2:                            Integer library routines.
42281                                                             (line  161)
42282* __bswapsi2:                            Integer library routines.
42283                                                             (line  160)
42284* __builtin_classify_type:               Varargs.            (line   48)
42285* __builtin_next_arg:                    Varargs.            (line   39)
42286* __builtin_saveregs:                    Varargs.            (line   22)
42287* __clear_cache:                         Miscellaneous routines.
42288                                                             (line    9)
42289* __clzdi2:                              Integer library routines.
42290                                                             (line  130)
42291* __clzsi2:                              Integer library routines.
42292                                                             (line  129)
42293* __clzti2:                              Integer library routines.
42294                                                             (line  131)
42295* __cmpda2:                              Fixed-point fractional library routines.
42296                                                             (line  450)
42297* __cmpdf2:                              Soft float library routines.
42298                                                             (line  163)
42299* __cmpdi2:                              Integer library routines.
42300                                                             (line   86)
42301* __cmpdq2:                              Fixed-point fractional library routines.
42302                                                             (line  439)
42303* __cmpha2:                              Fixed-point fractional library routines.
42304                                                             (line  448)
42305* __cmphq2:                              Fixed-point fractional library routines.
42306                                                             (line  437)
42307* __cmpqq2:                              Fixed-point fractional library routines.
42308                                                             (line  436)
42309* __cmpsa2:                              Fixed-point fractional library routines.
42310                                                             (line  449)
42311* __cmpsf2:                              Soft float library routines.
42312                                                             (line  162)
42313* __cmpsq2:                              Fixed-point fractional library routines.
42314                                                             (line  438)
42315* __cmpta2:                              Fixed-point fractional library routines.
42316                                                             (line  451)
42317* __cmptf2:                              Soft float library routines.
42318                                                             (line  164)
42319* __cmpti2:                              Integer library routines.
42320                                                             (line   87)
42321* __cmpuda2:                             Fixed-point fractional library routines.
42322                                                             (line  456)
42323* __cmpudq2:                             Fixed-point fractional library routines.
42324                                                             (line  446)
42325* __cmpuha2:                             Fixed-point fractional library routines.
42326                                                             (line  453)
42327* __cmpuhq2:                             Fixed-point fractional library routines.
42328                                                             (line  443)
42329* __cmpuqq2:                             Fixed-point fractional library routines.
42330                                                             (line  441)
42331* __cmpusa2:                             Fixed-point fractional library routines.
42332                                                             (line  455)
42333* __cmpusq2:                             Fixed-point fractional library routines.
42334                                                             (line  444)
42335* __cmputa2:                             Fixed-point fractional library routines.
42336                                                             (line  458)
42337* __CTOR_LIST__:                         Initialization.     (line   25)
42338* __ctzdi2:                              Integer library routines.
42339                                                             (line  137)
42340* __ctzsi2:                              Integer library routines.
42341                                                             (line  136)
42342* __ctzti2:                              Integer library routines.
42343                                                             (line  138)
42344* __divda3:                              Fixed-point fractional library routines.
42345                                                             (line  226)
42346* __divdc3:                              Soft float library routines.
42347                                                             (line  250)
42348* __divdf3:                              Soft float library routines.
42349                                                             (line   47)
42350* __divdi3:                              Integer library routines.
42351                                                             (line   24)
42352* __divdq3:                              Fixed-point fractional library routines.
42353                                                             (line  221)
42354* __divha3:                              Fixed-point fractional library routines.
42355                                                             (line  223)
42356* __divhq3:                              Fixed-point fractional library routines.
42357                                                             (line  219)
42358* __divqq3:                              Fixed-point fractional library routines.
42359                                                             (line  217)
42360* __divsa3:                              Fixed-point fractional library routines.
42361                                                             (line  225)
42362* __divsc3:                              Soft float library routines.
42363                                                             (line  248)
42364* __divsf3:                              Soft float library routines.
42365                                                             (line   46)
42366* __divsi3:                              Integer library routines.
42367                                                             (line   23)
42368* __divsq3:                              Fixed-point fractional library routines.
42369                                                             (line  220)
42370* __divta3:                              Fixed-point fractional library routines.
42371                                                             (line  227)
42372* __divtc3:                              Soft float library routines.
42373                                                             (line  252)
42374* __divtf3:                              Soft float library routines.
42375                                                             (line   48)
42376* __divti3:                              Integer library routines.
42377                                                             (line   25)
42378* __divxc3:                              Soft float library routines.
42379                                                             (line  254)
42380* __divxf3:                              Soft float library routines.
42381                                                             (line   50)
42382* __dpd_adddd3:                          Decimal float library routines.
42383                                                             (line   21)
42384* __dpd_addsd3:                          Decimal float library routines.
42385                                                             (line   17)
42386* __dpd_addtd3:                          Decimal float library routines.
42387                                                             (line   25)
42388* __dpd_divdd3:                          Decimal float library routines.
42389                                                             (line   64)
42390* __dpd_divsd3:                          Decimal float library routines.
42391                                                             (line   60)
42392* __dpd_divtd3:                          Decimal float library routines.
42393                                                             (line   68)
42394* __dpd_eqdd2:                           Decimal float library routines.
42395                                                             (line  257)
42396* __dpd_eqsd2:                           Decimal float library routines.
42397                                                             (line  255)
42398* __dpd_eqtd2:                           Decimal float library routines.
42399                                                             (line  259)
42400* __dpd_extendddtd2:                     Decimal float library routines.
42401                                                             (line   90)
42402* __dpd_extendddtf:                      Decimal float library routines.
42403                                                             (line  138)
42404* __dpd_extendddxf:                      Decimal float library routines.
42405                                                             (line  132)
42406* __dpd_extenddfdd:                      Decimal float library routines.
42407                                                             (line  145)
42408* __dpd_extenddftd:                      Decimal float library routines.
42409                                                             (line  105)
42410* __dpd_extendsddd2:                     Decimal float library routines.
42411                                                             (line   86)
42412* __dpd_extendsddf:                      Decimal float library routines.
42413                                                             (line  126)
42414* __dpd_extendsdtd2:                     Decimal float library routines.
42415                                                             (line   88)
42416* __dpd_extendsdtf:                      Decimal float library routines.
42417                                                             (line  136)
42418* __dpd_extendsdxf:                      Decimal float library routines.
42419                                                             (line  130)
42420* __dpd_extendsfdd:                      Decimal float library routines.
42421                                                             (line  101)
42422* __dpd_extendsfsd:                      Decimal float library routines.
42423                                                             (line  143)
42424* __dpd_extendsftd:                      Decimal float library routines.
42425                                                             (line  103)
42426* __dpd_extendtftd:                      Decimal float library routines.
42427                                                             (line  147)
42428* __dpd_extendxftd:                      Decimal float library routines.
42429                                                             (line  107)
42430* __dpd_fixdddi:                         Decimal float library routines.
42431                                                             (line  168)
42432* __dpd_fixddsi:                         Decimal float library routines.
42433                                                             (line  160)
42434* __dpd_fixsddi:                         Decimal float library routines.
42435                                                             (line  166)
42436* __dpd_fixsdsi:                         Decimal float library routines.
42437                                                             (line  158)
42438* __dpd_fixtddi:                         Decimal float library routines.
42439                                                             (line  170)
42440* __dpd_fixtdsi:                         Decimal float library routines.
42441                                                             (line  162)
42442* __dpd_fixunsdddi:                      Decimal float library routines.
42443                                                             (line  185)
42444* __dpd_fixunsddsi:                      Decimal float library routines.
42445                                                             (line  176)
42446* __dpd_fixunssddi:                      Decimal float library routines.
42447                                                             (line  183)
42448* __dpd_fixunssdsi:                      Decimal float library routines.
42449                                                             (line  174)
42450* __dpd_fixunstddi:                      Decimal float library routines.
42451                                                             (line  187)
42452* __dpd_fixunstdsi:                      Decimal float library routines.
42453                                                             (line  178)
42454* __dpd_floatdidd:                       Decimal float library routines.
42455                                                             (line  203)
42456* __dpd_floatdisd:                       Decimal float library routines.
42457                                                             (line  201)
42458* __dpd_floatditd:                       Decimal float library routines.
42459                                                             (line  205)
42460* __dpd_floatsidd:                       Decimal float library routines.
42461                                                             (line  194)
42462* __dpd_floatsisd:                       Decimal float library routines.
42463                                                             (line  192)
42464* __dpd_floatsitd:                       Decimal float library routines.
42465                                                             (line  196)
42466* __dpd_floatunsdidd:                    Decimal float library routines.
42467                                                             (line  221)
42468* __dpd_floatunsdisd:                    Decimal float library routines.
42469                                                             (line  219)
42470* __dpd_floatunsditd:                    Decimal float library routines.
42471                                                             (line  223)
42472* __dpd_floatunssidd:                    Decimal float library routines.
42473                                                             (line  212)
42474* __dpd_floatunssisd:                    Decimal float library routines.
42475                                                             (line  210)
42476* __dpd_floatunssitd:                    Decimal float library routines.
42477                                                             (line  214)
42478* __dpd_gedd2:                           Decimal float library routines.
42479                                                             (line  275)
42480* __dpd_gesd2:                           Decimal float library routines.
42481                                                             (line  273)
42482* __dpd_getd2:                           Decimal float library routines.
42483                                                             (line  277)
42484* __dpd_gtdd2:                           Decimal float library routines.
42485                                                             (line  302)
42486* __dpd_gtsd2:                           Decimal float library routines.
42487                                                             (line  300)
42488* __dpd_gttd2:                           Decimal float library routines.
42489                                                             (line  304)
42490* __dpd_ledd2:                           Decimal float library routines.
42491                                                             (line  293)
42492* __dpd_lesd2:                           Decimal float library routines.
42493                                                             (line  291)
42494* __dpd_letd2:                           Decimal float library routines.
42495                                                             (line  295)
42496* __dpd_ltdd2:                           Decimal float library routines.
42497                                                             (line  284)
42498* __dpd_ltsd2:                           Decimal float library routines.
42499                                                             (line  282)
42500* __dpd_lttd2:                           Decimal float library routines.
42501                                                             (line  286)
42502* __dpd_muldd3:                          Decimal float library routines.
42503                                                             (line   50)
42504* __dpd_mulsd3:                          Decimal float library routines.
42505                                                             (line   46)
42506* __dpd_multd3:                          Decimal float library routines.
42507                                                             (line   54)
42508* __dpd_nedd2:                           Decimal float library routines.
42509                                                             (line  266)
42510* __dpd_negdd2:                          Decimal float library routines.
42511                                                             (line   76)
42512* __dpd_negsd2:                          Decimal float library routines.
42513                                                             (line   74)
42514* __dpd_negtd2:                          Decimal float library routines.
42515                                                             (line   78)
42516* __dpd_nesd2:                           Decimal float library routines.
42517                                                             (line  264)
42518* __dpd_netd2:                           Decimal float library routines.
42519                                                             (line  268)
42520* __dpd_subdd3:                          Decimal float library routines.
42521                                                             (line   35)
42522* __dpd_subsd3:                          Decimal float library routines.
42523                                                             (line   31)
42524* __dpd_subtd3:                          Decimal float library routines.
42525                                                             (line   39)
42526* __dpd_truncdddf:                       Decimal float library routines.
42527                                                             (line  151)
42528* __dpd_truncddsd2:                      Decimal float library routines.
42529                                                             (line   92)
42530* __dpd_truncddsf:                       Decimal float library routines.
42531                                                             (line  122)
42532* __dpd_truncdfsd:                       Decimal float library routines.
42533                                                             (line  109)
42534* __dpd_truncsdsf:                       Decimal float library routines.
42535                                                             (line  149)
42536* __dpd_trunctddd2:                      Decimal float library routines.
42537                                                             (line   96)
42538* __dpd_trunctddf:                       Decimal float library routines.
42539                                                             (line  128)
42540* __dpd_trunctdsd2:                      Decimal float library routines.
42541                                                             (line   94)
42542* __dpd_trunctdsf:                       Decimal float library routines.
42543                                                             (line  124)
42544* __dpd_trunctdtf:                       Decimal float library routines.
42545                                                             (line  153)
42546* __dpd_trunctdxf:                       Decimal float library routines.
42547                                                             (line  134)
42548* __dpd_trunctfdd:                       Decimal float library routines.
42549                                                             (line  117)
42550* __dpd_trunctfsd:                       Decimal float library routines.
42551                                                             (line  113)
42552* __dpd_truncxfdd:                       Decimal float library routines.
42553                                                             (line  115)
42554* __dpd_truncxfsd:                       Decimal float library routines.
42555                                                             (line  111)
42556* __dpd_unorddd2:                        Decimal float library routines.
42557                                                             (line  233)
42558* __dpd_unordsd2:                        Decimal float library routines.
42559                                                             (line  231)
42560* __dpd_unordtd2:                        Decimal float library routines.
42561                                                             (line  235)
42562* __DTOR_LIST__:                         Initialization.     (line   25)
42563* __eqdf2:                               Soft float library routines.
42564                                                             (line  193)
42565* __eqsf2:                               Soft float library routines.
42566                                                             (line  192)
42567* __eqtf2:                               Soft float library routines.
42568                                                             (line  194)
42569* __extenddftf2:                         Soft float library routines.
42570                                                             (line   67)
42571* __extenddfxf2:                         Soft float library routines.
42572                                                             (line   68)
42573* __extendsfdf2:                         Soft float library routines.
42574                                                             (line   64)
42575* __extendsftf2:                         Soft float library routines.
42576                                                             (line   65)
42577* __extendsfxf2:                         Soft float library routines.
42578                                                             (line   66)
42579* __ffsdi2:                              Integer library routines.
42580                                                             (line  143)
42581* __ffsti2:                              Integer library routines.
42582                                                             (line  144)
42583* __fixdfdi:                             Soft float library routines.
42584                                                             (line   87)
42585* __fixdfsi:                             Soft float library routines.
42586                                                             (line   80)
42587* __fixdfti:                             Soft float library routines.
42588                                                             (line   93)
42589* __fixsfdi:                             Soft float library routines.
42590                                                             (line   86)
42591* __fixsfsi:                             Soft float library routines.
42592                                                             (line   79)
42593* __fixsfti:                             Soft float library routines.
42594                                                             (line   92)
42595* __fixtfdi:                             Soft float library routines.
42596                                                             (line   88)
42597* __fixtfsi:                             Soft float library routines.
42598                                                             (line   81)
42599* __fixtfti:                             Soft float library routines.
42600                                                             (line   94)
42601* __fixunsdfdi:                          Soft float library routines.
42602                                                             (line  107)
42603* __fixunsdfsi:                          Soft float library routines.
42604                                                             (line  100)
42605* __fixunsdfti:                          Soft float library routines.
42606                                                             (line  114)
42607* __fixunssfdi:                          Soft float library routines.
42608                                                             (line  106)
42609* __fixunssfsi:                          Soft float library routines.
42610                                                             (line   99)
42611* __fixunssfti:                          Soft float library routines.
42612                                                             (line  113)
42613* __fixunstfdi:                          Soft float library routines.
42614                                                             (line  108)
42615* __fixunstfsi:                          Soft float library routines.
42616                                                             (line  101)
42617* __fixunstfti:                          Soft float library routines.
42618                                                             (line  115)
42619* __fixunsxfdi:                          Soft float library routines.
42620                                                             (line  109)
42621* __fixunsxfsi:                          Soft float library routines.
42622                                                             (line  102)
42623* __fixunsxfti:                          Soft float library routines.
42624                                                             (line  116)
42625* __fixxfdi:                             Soft float library routines.
42626                                                             (line   89)
42627* __fixxfsi:                             Soft float library routines.
42628                                                             (line   82)
42629* __fixxfti:                             Soft float library routines.
42630                                                             (line   95)
42631* __floatdidf:                           Soft float library routines.
42632                                                             (line  127)
42633* __floatdisf:                           Soft float library routines.
42634                                                             (line  126)
42635* __floatditf:                           Soft float library routines.
42636                                                             (line  128)
42637* __floatdixf:                           Soft float library routines.
42638                                                             (line  129)
42639* __floatsidf:                           Soft float library routines.
42640                                                             (line  121)
42641* __floatsisf:                           Soft float library routines.
42642                                                             (line  120)
42643* __floatsitf:                           Soft float library routines.
42644                                                             (line  122)
42645* __floatsixf:                           Soft float library routines.
42646                                                             (line  123)
42647* __floattidf:                           Soft float library routines.
42648                                                             (line  133)
42649* __floattisf:                           Soft float library routines.
42650                                                             (line  132)
42651* __floattitf:                           Soft float library routines.
42652                                                             (line  134)
42653* __floattixf:                           Soft float library routines.
42654                                                             (line  135)
42655* __floatundidf:                         Soft float library routines.
42656                                                             (line  145)
42657* __floatundisf:                         Soft float library routines.
42658                                                             (line  144)
42659* __floatunditf:                         Soft float library routines.
42660                                                             (line  146)
42661* __floatundixf:                         Soft float library routines.
42662                                                             (line  147)
42663* __floatunsidf:                         Soft float library routines.
42664                                                             (line  139)
42665* __floatunsisf:                         Soft float library routines.
42666                                                             (line  138)
42667* __floatunsitf:                         Soft float library routines.
42668                                                             (line  140)
42669* __floatunsixf:                         Soft float library routines.
42670                                                             (line  141)
42671* __floatuntidf:                         Soft float library routines.
42672                                                             (line  151)
42673* __floatuntisf:                         Soft float library routines.
42674                                                             (line  150)
42675* __floatuntitf:                         Soft float library routines.
42676                                                             (line  152)
42677* __floatuntixf:                         Soft float library routines.
42678                                                             (line  153)
42679* __fractdadf:                           Fixed-point fractional library routines.
42680                                                             (line  635)
42681* __fractdadi:                           Fixed-point fractional library routines.
42682                                                             (line  632)
42683* __fractdadq:                           Fixed-point fractional library routines.
42684                                                             (line  615)
42685* __fractdaha2:                          Fixed-point fractional library routines.
42686                                                             (line  616)
42687* __fractdahi:                           Fixed-point fractional library routines.
42688                                                             (line  630)
42689* __fractdahq:                           Fixed-point fractional library routines.
42690                                                             (line  613)
42691* __fractdaqi:                           Fixed-point fractional library routines.
42692                                                             (line  629)
42693* __fractdaqq:                           Fixed-point fractional library routines.
42694                                                             (line  612)
42695* __fractdasa2:                          Fixed-point fractional library routines.
42696                                                             (line  617)
42697* __fractdasf:                           Fixed-point fractional library routines.
42698                                                             (line  634)
42699* __fractdasi:                           Fixed-point fractional library routines.
42700                                                             (line  631)
42701* __fractdasq:                           Fixed-point fractional library routines.
42702                                                             (line  614)
42703* __fractdata2:                          Fixed-point fractional library routines.
42704                                                             (line  618)
42705* __fractdati:                           Fixed-point fractional library routines.
42706                                                             (line  633)
42707* __fractdauda:                          Fixed-point fractional library routines.
42708                                                             (line  626)
42709* __fractdaudq:                          Fixed-point fractional library routines.
42710                                                             (line  622)
42711* __fractdauha:                          Fixed-point fractional library routines.
42712                                                             (line  624)
42713* __fractdauhq:                          Fixed-point fractional library routines.
42714                                                             (line  620)
42715* __fractdauqq:                          Fixed-point fractional library routines.
42716                                                             (line  619)
42717* __fractdausa:                          Fixed-point fractional library routines.
42718                                                             (line  625)
42719* __fractdausq:                          Fixed-point fractional library routines.
42720                                                             (line  621)
42721* __fractdauta:                          Fixed-point fractional library routines.
42722                                                             (line  627)
42723* __fractdfda:                           Fixed-point fractional library routines.
42724                                                             (line 1024)
42725* __fractdfdq:                           Fixed-point fractional library routines.
42726                                                             (line 1021)
42727* __fractdfha:                           Fixed-point fractional library routines.
42728                                                             (line 1022)
42729* __fractdfhq:                           Fixed-point fractional library routines.
42730                                                             (line 1019)
42731* __fractdfqq:                           Fixed-point fractional library routines.
42732                                                             (line 1018)
42733* __fractdfsa:                           Fixed-point fractional library routines.
42734                                                             (line 1023)
42735* __fractdfsq:                           Fixed-point fractional library routines.
42736                                                             (line 1020)
42737* __fractdfta:                           Fixed-point fractional library routines.
42738                                                             (line 1025)
42739* __fractdfuda:                          Fixed-point fractional library routines.
42740                                                             (line 1032)
42741* __fractdfudq:                          Fixed-point fractional library routines.
42742                                                             (line 1029)
42743* __fractdfuha:                          Fixed-point fractional library routines.
42744                                                             (line 1030)
42745* __fractdfuhq:                          Fixed-point fractional library routines.
42746                                                             (line 1027)
42747* __fractdfuqq:                          Fixed-point fractional library routines.
42748                                                             (line 1026)
42749* __fractdfusa:                          Fixed-point fractional library routines.
42750                                                             (line 1031)
42751* __fractdfusq:                          Fixed-point fractional library routines.
42752                                                             (line 1028)
42753* __fractdfuta:                          Fixed-point fractional library routines.
42754                                                             (line 1033)
42755* __fractdida:                           Fixed-point fractional library routines.
42756                                                             (line  974)
42757* __fractdidq:                           Fixed-point fractional library routines.
42758                                                             (line  971)
42759* __fractdiha:                           Fixed-point fractional library routines.
42760                                                             (line  972)
42761* __fractdihq:                           Fixed-point fractional library routines.
42762                                                             (line  969)
42763* __fractdiqq:                           Fixed-point fractional library routines.
42764                                                             (line  968)
42765* __fractdisa:                           Fixed-point fractional library routines.
42766                                                             (line  973)
42767* __fractdisq:                           Fixed-point fractional library routines.
42768                                                             (line  970)
42769* __fractdita:                           Fixed-point fractional library routines.
42770                                                             (line  975)
42771* __fractdiuda:                          Fixed-point fractional library routines.
42772                                                             (line  982)
42773* __fractdiudq:                          Fixed-point fractional library routines.
42774                                                             (line  979)
42775* __fractdiuha:                          Fixed-point fractional library routines.
42776                                                             (line  980)
42777* __fractdiuhq:                          Fixed-point fractional library routines.
42778                                                             (line  977)
42779* __fractdiuqq:                          Fixed-point fractional library routines.
42780                                                             (line  976)
42781* __fractdiusa:                          Fixed-point fractional library routines.
42782                                                             (line  981)
42783* __fractdiusq:                          Fixed-point fractional library routines.
42784                                                             (line  978)
42785* __fractdiuta:                          Fixed-point fractional library routines.
42786                                                             (line  983)
42787* __fractdqda:                           Fixed-point fractional library routines.
42788                                                             (line  543)
42789* __fractdqdf:                           Fixed-point fractional library routines.
42790                                                             (line  565)
42791* __fractdqdi:                           Fixed-point fractional library routines.
42792                                                             (line  562)
42793* __fractdqha:                           Fixed-point fractional library routines.
42794                                                             (line  541)
42795* __fractdqhi:                           Fixed-point fractional library routines.
42796                                                             (line  560)
42797* __fractdqhq2:                          Fixed-point fractional library routines.
42798                                                             (line  539)
42799* __fractdqqi:                           Fixed-point fractional library routines.
42800                                                             (line  559)
42801* __fractdqqq2:                          Fixed-point fractional library routines.
42802                                                             (line  538)
42803* __fractdqsa:                           Fixed-point fractional library routines.
42804                                                             (line  542)
42805* __fractdqsf:                           Fixed-point fractional library routines.
42806                                                             (line  564)
42807* __fractdqsi:                           Fixed-point fractional library routines.
42808                                                             (line  561)
42809* __fractdqsq2:                          Fixed-point fractional library routines.
42810                                                             (line  540)
42811* __fractdqta:                           Fixed-point fractional library routines.
42812                                                             (line  544)
42813* __fractdqti:                           Fixed-point fractional library routines.
42814                                                             (line  563)
42815* __fractdquda:                          Fixed-point fractional library routines.
42816                                                             (line  555)
42817* __fractdqudq:                          Fixed-point fractional library routines.
42818                                                             (line  550)
42819* __fractdquha:                          Fixed-point fractional library routines.
42820                                                             (line  552)
42821* __fractdquhq:                          Fixed-point fractional library routines.
42822                                                             (line  547)
42823* __fractdquqq:                          Fixed-point fractional library routines.
42824                                                             (line  545)
42825* __fractdqusa:                          Fixed-point fractional library routines.
42826                                                             (line  554)
42827* __fractdqusq:                          Fixed-point fractional library routines.
42828                                                             (line  548)
42829* __fractdquta:                          Fixed-point fractional library routines.
42830                                                             (line  557)
42831* __fracthada2:                          Fixed-point fractional library routines.
42832                                                             (line  571)
42833* __fracthadf:                           Fixed-point fractional library routines.
42834                                                             (line  589)
42835* __fracthadi:                           Fixed-point fractional library routines.
42836                                                             (line  586)
42837* __fracthadq:                           Fixed-point fractional library routines.
42838                                                             (line  569)
42839* __fracthahi:                           Fixed-point fractional library routines.
42840                                                             (line  584)
42841* __fracthahq:                           Fixed-point fractional library routines.
42842                                                             (line  567)
42843* __fracthaqi:                           Fixed-point fractional library routines.
42844                                                             (line  583)
42845* __fracthaqq:                           Fixed-point fractional library routines.
42846                                                             (line  566)
42847* __fracthasa2:                          Fixed-point fractional library routines.
42848                                                             (line  570)
42849* __fracthasf:                           Fixed-point fractional library routines.
42850                                                             (line  588)
42851* __fracthasi:                           Fixed-point fractional library routines.
42852                                                             (line  585)
42853* __fracthasq:                           Fixed-point fractional library routines.
42854                                                             (line  568)
42855* __fracthata2:                          Fixed-point fractional library routines.
42856                                                             (line  572)
42857* __fracthati:                           Fixed-point fractional library routines.
42858                                                             (line  587)
42859* __fracthauda:                          Fixed-point fractional library routines.
42860                                                             (line  580)
42861* __fracthaudq:                          Fixed-point fractional library routines.
42862                                                             (line  576)
42863* __fracthauha:                          Fixed-point fractional library routines.
42864                                                             (line  578)
42865* __fracthauhq:                          Fixed-point fractional library routines.
42866                                                             (line  574)
42867* __fracthauqq:                          Fixed-point fractional library routines.
42868                                                             (line  573)
42869* __fracthausa:                          Fixed-point fractional library routines.
42870                                                             (line  579)
42871* __fracthausq:                          Fixed-point fractional library routines.
42872                                                             (line  575)
42873* __fracthauta:                          Fixed-point fractional library routines.
42874                                                             (line  581)
42875* __fracthida:                           Fixed-point fractional library routines.
42876                                                             (line  942)
42877* __fracthidq:                           Fixed-point fractional library routines.
42878                                                             (line  939)
42879* __fracthiha:                           Fixed-point fractional library routines.
42880                                                             (line  940)
42881* __fracthihq:                           Fixed-point fractional library routines.
42882                                                             (line  937)
42883* __fracthiqq:                           Fixed-point fractional library routines.
42884                                                             (line  936)
42885* __fracthisa:                           Fixed-point fractional library routines.
42886                                                             (line  941)
42887* __fracthisq:                           Fixed-point fractional library routines.
42888                                                             (line  938)
42889* __fracthita:                           Fixed-point fractional library routines.
42890                                                             (line  943)
42891* __fracthiuda:                          Fixed-point fractional library routines.
42892                                                             (line  950)
42893* __fracthiudq:                          Fixed-point fractional library routines.
42894                                                             (line  947)
42895* __fracthiuha:                          Fixed-point fractional library routines.
42896                                                             (line  948)
42897* __fracthiuhq:                          Fixed-point fractional library routines.
42898                                                             (line  945)
42899* __fracthiuqq:                          Fixed-point fractional library routines.
42900                                                             (line  944)
42901* __fracthiusa:                          Fixed-point fractional library routines.
42902                                                             (line  949)
42903* __fracthiusq:                          Fixed-point fractional library routines.
42904                                                             (line  946)
42905* __fracthiuta:                          Fixed-point fractional library routines.
42906                                                             (line  951)
42907* __fracthqda:                           Fixed-point fractional library routines.
42908                                                             (line  497)
42909* __fracthqdf:                           Fixed-point fractional library routines.
42910                                                             (line  513)
42911* __fracthqdi:                           Fixed-point fractional library routines.
42912                                                             (line  510)
42913* __fracthqdq2:                          Fixed-point fractional library routines.
42914                                                             (line  494)
42915* __fracthqha:                           Fixed-point fractional library routines.
42916                                                             (line  495)
42917* __fracthqhi:                           Fixed-point fractional library routines.
42918                                                             (line  508)
42919* __fracthqqi:                           Fixed-point fractional library routines.
42920                                                             (line  507)
42921* __fracthqqq2:                          Fixed-point fractional library routines.
42922                                                             (line  492)
42923* __fracthqsa:                           Fixed-point fractional library routines.
42924                                                             (line  496)
42925* __fracthqsf:                           Fixed-point fractional library routines.
42926                                                             (line  512)
42927* __fracthqsi:                           Fixed-point fractional library routines.
42928                                                             (line  509)
42929* __fracthqsq2:                          Fixed-point fractional library routines.
42930                                                             (line  493)
42931* __fracthqta:                           Fixed-point fractional library routines.
42932                                                             (line  498)
42933* __fracthqti:                           Fixed-point fractional library routines.
42934                                                             (line  511)
42935* __fracthquda:                          Fixed-point fractional library routines.
42936                                                             (line  505)
42937* __fracthqudq:                          Fixed-point fractional library routines.
42938                                                             (line  502)
42939* __fracthquha:                          Fixed-point fractional library routines.
42940                                                             (line  503)
42941* __fracthquhq:                          Fixed-point fractional library routines.
42942                                                             (line  500)
42943* __fracthquqq:                          Fixed-point fractional library routines.
42944                                                             (line  499)
42945* __fracthqusa:                          Fixed-point fractional library routines.
42946                                                             (line  504)
42947* __fracthqusq:                          Fixed-point fractional library routines.
42948                                                             (line  501)
42949* __fracthquta:                          Fixed-point fractional library routines.
42950                                                             (line  506)
42951* __fractqida:                           Fixed-point fractional library routines.
42952                                                             (line  924)
42953* __fractqidq:                           Fixed-point fractional library routines.
42954                                                             (line  921)
42955* __fractqiha:                           Fixed-point fractional library routines.
42956                                                             (line  922)
42957* __fractqihq:                           Fixed-point fractional library routines.
42958                                                             (line  919)
42959* __fractqiqq:                           Fixed-point fractional library routines.
42960                                                             (line  918)
42961* __fractqisa:                           Fixed-point fractional library routines.
42962                                                             (line  923)
42963* __fractqisq:                           Fixed-point fractional library routines.
42964                                                             (line  920)
42965* __fractqita:                           Fixed-point fractional library routines.
42966                                                             (line  925)
42967* __fractqiuda:                          Fixed-point fractional library routines.
42968                                                             (line  933)
42969* __fractqiudq:                          Fixed-point fractional library routines.
42970                                                             (line  929)
42971* __fractqiuha:                          Fixed-point fractional library routines.
42972                                                             (line  931)
42973* __fractqiuhq:                          Fixed-point fractional library routines.
42974                                                             (line  927)
42975* __fractqiuqq:                          Fixed-point fractional library routines.
42976                                                             (line  926)
42977* __fractqiusa:                          Fixed-point fractional library routines.
42978                                                             (line  932)
42979* __fractqiusq:                          Fixed-point fractional library routines.
42980                                                             (line  928)
42981* __fractqiuta:                          Fixed-point fractional library routines.
42982                                                             (line  934)
42983* __fractqqda:                           Fixed-point fractional library routines.
42984                                                             (line  473)
42985* __fractqqdf:                           Fixed-point fractional library routines.
42986                                                             (line  491)
42987* __fractqqdi:                           Fixed-point fractional library routines.
42988                                                             (line  488)
42989* __fractqqdq2:                          Fixed-point fractional library routines.
42990                                                             (line  470)
42991* __fractqqha:                           Fixed-point fractional library routines.
42992                                                             (line  471)
42993* __fractqqhi:                           Fixed-point fractional library routines.
42994                                                             (line  486)
42995* __fractqqhq2:                          Fixed-point fractional library routines.
42996                                                             (line  468)
42997* __fractqqqi:                           Fixed-point fractional library routines.
42998                                                             (line  485)
42999* __fractqqsa:                           Fixed-point fractional library routines.
43000                                                             (line  472)
43001* __fractqqsf:                           Fixed-point fractional library routines.
43002                                                             (line  490)
43003* __fractqqsi:                           Fixed-point fractional library routines.
43004                                                             (line  487)
43005* __fractqqsq2:                          Fixed-point fractional library routines.
43006                                                             (line  469)
43007* __fractqqta:                           Fixed-point fractional library routines.
43008                                                             (line  474)
43009* __fractqqti:                           Fixed-point fractional library routines.
43010                                                             (line  489)
43011* __fractqquda:                          Fixed-point fractional library routines.
43012                                                             (line  482)
43013* __fractqqudq:                          Fixed-point fractional library routines.
43014                                                             (line  478)
43015* __fractqquha:                          Fixed-point fractional library routines.
43016                                                             (line  480)
43017* __fractqquhq:                          Fixed-point fractional library routines.
43018                                                             (line  476)
43019* __fractqquqq:                          Fixed-point fractional library routines.
43020                                                             (line  475)
43021* __fractqqusa:                          Fixed-point fractional library routines.
43022                                                             (line  481)
43023* __fractqqusq:                          Fixed-point fractional library routines.
43024                                                             (line  477)
43025* __fractqquta:                          Fixed-point fractional library routines.
43026                                                             (line  483)
43027* __fractsada2:                          Fixed-point fractional library routines.
43028                                                             (line  595)
43029* __fractsadf:                           Fixed-point fractional library routines.
43030                                                             (line  611)
43031* __fractsadi:                           Fixed-point fractional library routines.
43032                                                             (line  608)
43033* __fractsadq:                           Fixed-point fractional library routines.
43034                                                             (line  593)
43035* __fractsaha2:                          Fixed-point fractional library routines.
43036                                                             (line  594)
43037* __fractsahi:                           Fixed-point fractional library routines.
43038                                                             (line  606)
43039* __fractsahq:                           Fixed-point fractional library routines.
43040                                                             (line  591)
43041* __fractsaqi:                           Fixed-point fractional library routines.
43042                                                             (line  605)
43043* __fractsaqq:                           Fixed-point fractional library routines.
43044                                                             (line  590)
43045* __fractsasf:                           Fixed-point fractional library routines.
43046                                                             (line  610)
43047* __fractsasi:                           Fixed-point fractional library routines.
43048                                                             (line  607)
43049* __fractsasq:                           Fixed-point fractional library routines.
43050                                                             (line  592)
43051* __fractsata2:                          Fixed-point fractional library routines.
43052                                                             (line  596)
43053* __fractsati:                           Fixed-point fractional library routines.
43054                                                             (line  609)
43055* __fractsauda:                          Fixed-point fractional library routines.
43056                                                             (line  603)
43057* __fractsaudq:                          Fixed-point fractional library routines.
43058                                                             (line  600)
43059* __fractsauha:                          Fixed-point fractional library routines.
43060                                                             (line  601)
43061* __fractsauhq:                          Fixed-point fractional library routines.
43062                                                             (line  598)
43063* __fractsauqq:                          Fixed-point fractional library routines.
43064                                                             (line  597)
43065* __fractsausa:                          Fixed-point fractional library routines.
43066                                                             (line  602)
43067* __fractsausq:                          Fixed-point fractional library routines.
43068                                                             (line  599)
43069* __fractsauta:                          Fixed-point fractional library routines.
43070                                                             (line  604)
43071* __fractsfda:                           Fixed-point fractional library routines.
43072                                                             (line 1008)
43073* __fractsfdq:                           Fixed-point fractional library routines.
43074                                                             (line 1005)
43075* __fractsfha:                           Fixed-point fractional library routines.
43076                                                             (line 1006)
43077* __fractsfhq:                           Fixed-point fractional library routines.
43078                                                             (line 1003)
43079* __fractsfqq:                           Fixed-point fractional library routines.
43080                                                             (line 1002)
43081* __fractsfsa:                           Fixed-point fractional library routines.
43082                                                             (line 1007)
43083* __fractsfsq:                           Fixed-point fractional library routines.
43084                                                             (line 1004)
43085* __fractsfta:                           Fixed-point fractional library routines.
43086                                                             (line 1009)
43087* __fractsfuda:                          Fixed-point fractional library routines.
43088                                                             (line 1016)
43089* __fractsfudq:                          Fixed-point fractional library routines.
43090                                                             (line 1013)
43091* __fractsfuha:                          Fixed-point fractional library routines.
43092                                                             (line 1014)
43093* __fractsfuhq:                          Fixed-point fractional library routines.
43094                                                             (line 1011)
43095* __fractsfuqq:                          Fixed-point fractional library routines.
43096                                                             (line 1010)
43097* __fractsfusa:                          Fixed-point fractional library routines.
43098                                                             (line 1015)
43099* __fractsfusq:                          Fixed-point fractional library routines.
43100                                                             (line 1012)
43101* __fractsfuta:                          Fixed-point fractional library routines.
43102                                                             (line 1017)
43103* __fractsida:                           Fixed-point fractional library routines.
43104                                                             (line  958)
43105* __fractsidq:                           Fixed-point fractional library routines.
43106                                                             (line  955)
43107* __fractsiha:                           Fixed-point fractional library routines.
43108                                                             (line  956)
43109* __fractsihq:                           Fixed-point fractional library routines.
43110                                                             (line  953)
43111* __fractsiqq:                           Fixed-point fractional library routines.
43112                                                             (line  952)
43113* __fractsisa:                           Fixed-point fractional library routines.
43114                                                             (line  957)
43115* __fractsisq:                           Fixed-point fractional library routines.
43116                                                             (line  954)
43117* __fractsita:                           Fixed-point fractional library routines.
43118                                                             (line  959)
43119* __fractsiuda:                          Fixed-point fractional library routines.
43120                                                             (line  966)
43121* __fractsiudq:                          Fixed-point fractional library routines.
43122                                                             (line  963)
43123* __fractsiuha:                          Fixed-point fractional library routines.
43124                                                             (line  964)
43125* __fractsiuhq:                          Fixed-point fractional library routines.
43126                                                             (line  961)
43127* __fractsiuqq:                          Fixed-point fractional library routines.
43128                                                             (line  960)
43129* __fractsiusa:                          Fixed-point fractional library routines.
43130                                                             (line  965)
43131* __fractsiusq:                          Fixed-point fractional library routines.
43132                                                             (line  962)
43133* __fractsiuta:                          Fixed-point fractional library routines.
43134                                                             (line  967)
43135* __fractsqda:                           Fixed-point fractional library routines.
43136                                                             (line  519)
43137* __fractsqdf:                           Fixed-point fractional library routines.
43138                                                             (line  537)
43139* __fractsqdi:                           Fixed-point fractional library routines.
43140                                                             (line  534)
43141* __fractsqdq2:                          Fixed-point fractional library routines.
43142                                                             (line  516)
43143* __fractsqha:                           Fixed-point fractional library routines.
43144                                                             (line  517)
43145* __fractsqhi:                           Fixed-point fractional library routines.
43146                                                             (line  532)
43147* __fractsqhq2:                          Fixed-point fractional library routines.
43148                                                             (line  515)
43149* __fractsqqi:                           Fixed-point fractional library routines.
43150                                                             (line  531)
43151* __fractsqqq2:                          Fixed-point fractional library routines.
43152                                                             (line  514)
43153* __fractsqsa:                           Fixed-point fractional library routines.
43154                                                             (line  518)
43155* __fractsqsf:                           Fixed-point fractional library routines.
43156                                                             (line  536)
43157* __fractsqsi:                           Fixed-point fractional library routines.
43158                                                             (line  533)
43159* __fractsqta:                           Fixed-point fractional library routines.
43160                                                             (line  520)
43161* __fractsqti:                           Fixed-point fractional library routines.
43162                                                             (line  535)
43163* __fractsquda:                          Fixed-point fractional library routines.
43164                                                             (line  528)
43165* __fractsqudq:                          Fixed-point fractional library routines.
43166                                                             (line  524)
43167* __fractsquha:                          Fixed-point fractional library routines.
43168                                                             (line  526)
43169* __fractsquhq:                          Fixed-point fractional library routines.
43170                                                             (line  522)
43171* __fractsquqq:                          Fixed-point fractional library routines.
43172                                                             (line  521)
43173* __fractsqusa:                          Fixed-point fractional library routines.
43174                                                             (line  527)
43175* __fractsqusq:                          Fixed-point fractional library routines.
43176                                                             (line  523)
43177* __fractsquta:                          Fixed-point fractional library routines.
43178                                                             (line  529)
43179* __fracttada2:                          Fixed-point fractional library routines.
43180                                                             (line  642)
43181* __fracttadf:                           Fixed-point fractional library routines.
43182                                                             (line  663)
43183* __fracttadi:                           Fixed-point fractional library routines.
43184                                                             (line  660)
43185* __fracttadq:                           Fixed-point fractional library routines.
43186                                                             (line  639)
43187* __fracttaha2:                          Fixed-point fractional library routines.
43188                                                             (line  640)
43189* __fracttahi:                           Fixed-point fractional library routines.
43190                                                             (line  658)
43191* __fracttahq:                           Fixed-point fractional library routines.
43192                                                             (line  637)
43193* __fracttaqi:                           Fixed-point fractional library routines.
43194                                                             (line  657)
43195* __fracttaqq:                           Fixed-point fractional library routines.
43196                                                             (line  636)
43197* __fracttasa2:                          Fixed-point fractional library routines.
43198                                                             (line  641)
43199* __fracttasf:                           Fixed-point fractional library routines.
43200                                                             (line  662)
43201* __fracttasi:                           Fixed-point fractional library routines.
43202                                                             (line  659)
43203* __fracttasq:                           Fixed-point fractional library routines.
43204                                                             (line  638)
43205* __fracttati:                           Fixed-point fractional library routines.
43206                                                             (line  661)
43207* __fracttauda:                          Fixed-point fractional library routines.
43208                                                             (line  653)
43209* __fracttaudq:                          Fixed-point fractional library routines.
43210                                                             (line  648)
43211* __fracttauha:                          Fixed-point fractional library routines.
43212                                                             (line  650)
43213* __fracttauhq:                          Fixed-point fractional library routines.
43214                                                             (line  645)
43215* __fracttauqq:                          Fixed-point fractional library routines.
43216                                                             (line  643)
43217* __fracttausa:                          Fixed-point fractional library routines.
43218                                                             (line  652)
43219* __fracttausq:                          Fixed-point fractional library routines.
43220                                                             (line  646)
43221* __fracttauta:                          Fixed-point fractional library routines.
43222                                                             (line  655)
43223* __fracttida:                           Fixed-point fractional library routines.
43224                                                             (line  990)
43225* __fracttidq:                           Fixed-point fractional library routines.
43226                                                             (line  987)
43227* __fracttiha:                           Fixed-point fractional library routines.
43228                                                             (line  988)
43229* __fracttihq:                           Fixed-point fractional library routines.
43230                                                             (line  985)
43231* __fracttiqq:                           Fixed-point fractional library routines.
43232                                                             (line  984)
43233* __fracttisa:                           Fixed-point fractional library routines.
43234                                                             (line  989)
43235* __fracttisq:                           Fixed-point fractional library routines.
43236                                                             (line  986)
43237* __fracttita:                           Fixed-point fractional library routines.
43238                                                             (line  991)
43239* __fracttiuda:                          Fixed-point fractional library routines.
43240                                                             (line  999)
43241* __fracttiudq:                          Fixed-point fractional library routines.
43242                                                             (line  995)
43243* __fracttiuha:                          Fixed-point fractional library routines.
43244                                                             (line  997)
43245* __fracttiuhq:                          Fixed-point fractional library routines.
43246                                                             (line  993)
43247* __fracttiuqq:                          Fixed-point fractional library routines.
43248                                                             (line  992)
43249* __fracttiusa:                          Fixed-point fractional library routines.
43250                                                             (line  998)
43251* __fracttiusq:                          Fixed-point fractional library routines.
43252                                                             (line  994)
43253* __fracttiuta:                          Fixed-point fractional library routines.
43254                                                             (line 1000)
43255* __fractudada:                          Fixed-point fractional library routines.
43256                                                             (line  857)
43257* __fractudadf:                          Fixed-point fractional library routines.
43258                                                             (line  880)
43259* __fractudadi:                          Fixed-point fractional library routines.
43260                                                             (line  877)
43261* __fractudadq:                          Fixed-point fractional library routines.
43262                                                             (line  853)
43263* __fractudaha:                          Fixed-point fractional library routines.
43264                                                             (line  855)
43265* __fractudahi:                          Fixed-point fractional library routines.
43266                                                             (line  875)
43267* __fractudahq:                          Fixed-point fractional library routines.
43268                                                             (line  851)
43269* __fractudaqi:                          Fixed-point fractional library routines.
43270                                                             (line  874)
43271* __fractudaqq:                          Fixed-point fractional library routines.
43272                                                             (line  850)
43273* __fractudasa:                          Fixed-point fractional library routines.
43274                                                             (line  856)
43275* __fractudasf:                          Fixed-point fractional library routines.
43276                                                             (line  879)
43277* __fractudasi:                          Fixed-point fractional library routines.
43278                                                             (line  876)
43279* __fractudasq:                          Fixed-point fractional library routines.
43280                                                             (line  852)
43281* __fractudata:                          Fixed-point fractional library routines.
43282                                                             (line  858)
43283* __fractudati:                          Fixed-point fractional library routines.
43284                                                             (line  878)
43285* __fractudaudq:                         Fixed-point fractional library routines.
43286                                                             (line  866)
43287* __fractudauha2:                        Fixed-point fractional library routines.
43288                                                             (line  868)
43289* __fractudauhq:                         Fixed-point fractional library routines.
43290                                                             (line  862)
43291* __fractudauqq:                         Fixed-point fractional library routines.
43292                                                             (line  860)
43293* __fractudausa2:                        Fixed-point fractional library routines.
43294                                                             (line  870)
43295* __fractudausq:                         Fixed-point fractional library routines.
43296                                                             (line  864)
43297* __fractudauta2:                        Fixed-point fractional library routines.
43298                                                             (line  872)
43299* __fractudqda:                          Fixed-point fractional library routines.
43300                                                             (line  764)
43301* __fractudqdf:                          Fixed-point fractional library routines.
43302                                                             (line  790)
43303* __fractudqdi:                          Fixed-point fractional library routines.
43304                                                             (line  786)
43305* __fractudqdq:                          Fixed-point fractional library routines.
43306                                                             (line  759)
43307* __fractudqha:                          Fixed-point fractional library routines.
43308                                                             (line  761)
43309* __fractudqhi:                          Fixed-point fractional library routines.
43310                                                             (line  784)
43311* __fractudqhq:                          Fixed-point fractional library routines.
43312                                                             (line  756)
43313* __fractudqqi:                          Fixed-point fractional library routines.
43314                                                             (line  782)
43315* __fractudqqq:                          Fixed-point fractional library routines.
43316                                                             (line  754)
43317* __fractudqsa:                          Fixed-point fractional library routines.
43318                                                             (line  763)
43319* __fractudqsf:                          Fixed-point fractional library routines.
43320                                                             (line  789)
43321* __fractudqsi:                          Fixed-point fractional library routines.
43322                                                             (line  785)
43323* __fractudqsq:                          Fixed-point fractional library routines.
43324                                                             (line  757)
43325* __fractudqta:                          Fixed-point fractional library routines.
43326                                                             (line  766)
43327* __fractudqti:                          Fixed-point fractional library routines.
43328                                                             (line  787)
43329* __fractudquda:                         Fixed-point fractional library routines.
43330                                                             (line  778)
43331* __fractudquha:                         Fixed-point fractional library routines.
43332                                                             (line  774)
43333* __fractudquhq2:                        Fixed-point fractional library routines.
43334                                                             (line  770)
43335* __fractudquqq2:                        Fixed-point fractional library routines.
43336                                                             (line  768)
43337* __fractudqusa:                         Fixed-point fractional library routines.
43338                                                             (line  776)
43339* __fractudqusq2:                        Fixed-point fractional library routines.
43340                                                             (line  772)
43341* __fractudquta:                         Fixed-point fractional library routines.
43342                                                             (line  780)
43343* __fractuhada:                          Fixed-point fractional library routines.
43344                                                             (line  798)
43345* __fractuhadf:                          Fixed-point fractional library routines.
43346                                                             (line  821)
43347* __fractuhadi:                          Fixed-point fractional library routines.
43348                                                             (line  818)
43349* __fractuhadq:                          Fixed-point fractional library routines.
43350                                                             (line  794)
43351* __fractuhaha:                          Fixed-point fractional library routines.
43352                                                             (line  796)
43353* __fractuhahi:                          Fixed-point fractional library routines.
43354                                                             (line  816)
43355* __fractuhahq:                          Fixed-point fractional library routines.
43356                                                             (line  792)
43357* __fractuhaqi:                          Fixed-point fractional library routines.
43358                                                             (line  815)
43359* __fractuhaqq:                          Fixed-point fractional library routines.
43360                                                             (line  791)
43361* __fractuhasa:                          Fixed-point fractional library routines.
43362                                                             (line  797)
43363* __fractuhasf:                          Fixed-point fractional library routines.
43364                                                             (line  820)
43365* __fractuhasi:                          Fixed-point fractional library routines.
43366                                                             (line  817)
43367* __fractuhasq:                          Fixed-point fractional library routines.
43368                                                             (line  793)
43369* __fractuhata:                          Fixed-point fractional library routines.
43370                                                             (line  799)
43371* __fractuhati:                          Fixed-point fractional library routines.
43372                                                             (line  819)
43373* __fractuhauda2:                        Fixed-point fractional library routines.
43374                                                             (line  811)
43375* __fractuhaudq:                         Fixed-point fractional library routines.
43376                                                             (line  807)
43377* __fractuhauhq:                         Fixed-point fractional library routines.
43378                                                             (line  803)
43379* __fractuhauqq:                         Fixed-point fractional library routines.
43380                                                             (line  801)
43381* __fractuhausa2:                        Fixed-point fractional library routines.
43382                                                             (line  809)
43383* __fractuhausq:                         Fixed-point fractional library routines.
43384                                                             (line  805)
43385* __fractuhauta2:                        Fixed-point fractional library routines.
43386                                                             (line  813)
43387* __fractuhqda:                          Fixed-point fractional library routines.
43388                                                             (line  701)
43389* __fractuhqdf:                          Fixed-point fractional library routines.
43390                                                             (line  722)
43391* __fractuhqdi:                          Fixed-point fractional library routines.
43392                                                             (line  719)
43393* __fractuhqdq:                          Fixed-point fractional library routines.
43394                                                             (line  698)
43395* __fractuhqha:                          Fixed-point fractional library routines.
43396                                                             (line  699)
43397* __fractuhqhi:                          Fixed-point fractional library routines.
43398                                                             (line  717)
43399* __fractuhqhq:                          Fixed-point fractional library routines.
43400                                                             (line  696)
43401* __fractuhqqi:                          Fixed-point fractional library routines.
43402                                                             (line  716)
43403* __fractuhqqq:                          Fixed-point fractional library routines.
43404                                                             (line  695)
43405* __fractuhqsa:                          Fixed-point fractional library routines.
43406                                                             (line  700)
43407* __fractuhqsf:                          Fixed-point fractional library routines.
43408                                                             (line  721)
43409* __fractuhqsi:                          Fixed-point fractional library routines.
43410                                                             (line  718)
43411* __fractuhqsq:                          Fixed-point fractional library routines.
43412                                                             (line  697)
43413* __fractuhqta:                          Fixed-point fractional library routines.
43414                                                             (line  702)
43415* __fractuhqti:                          Fixed-point fractional library routines.
43416                                                             (line  720)
43417* __fractuhquda:                         Fixed-point fractional library routines.
43418                                                             (line  712)
43419* __fractuhqudq2:                        Fixed-point fractional library routines.
43420                                                             (line  707)
43421* __fractuhquha:                         Fixed-point fractional library routines.
43422                                                             (line  709)
43423* __fractuhquqq2:                        Fixed-point fractional library routines.
43424                                                             (line  703)
43425* __fractuhqusa:                         Fixed-point fractional library routines.
43426                                                             (line  711)
43427* __fractuhqusq2:                        Fixed-point fractional library routines.
43428                                                             (line  705)
43429* __fractuhquta:                         Fixed-point fractional library routines.
43430                                                             (line  714)
43431* __fractunsdadi:                        Fixed-point fractional library routines.
43432                                                             (line 1554)
43433* __fractunsdahi:                        Fixed-point fractional library routines.
43434                                                             (line 1552)
43435* __fractunsdaqi:                        Fixed-point fractional library routines.
43436                                                             (line 1551)
43437* __fractunsdasi:                        Fixed-point fractional library routines.
43438                                                             (line 1553)
43439* __fractunsdati:                        Fixed-point fractional library routines.
43440                                                             (line 1555)
43441* __fractunsdida:                        Fixed-point fractional library routines.
43442                                                             (line 1706)
43443* __fractunsdidq:                        Fixed-point fractional library routines.
43444                                                             (line 1703)
43445* __fractunsdiha:                        Fixed-point fractional library routines.
43446                                                             (line 1704)
43447* __fractunsdihq:                        Fixed-point fractional library routines.
43448                                                             (line 1701)
43449* __fractunsdiqq:                        Fixed-point fractional library routines.
43450                                                             (line 1700)
43451* __fractunsdisa:                        Fixed-point fractional library routines.
43452                                                             (line 1705)
43453* __fractunsdisq:                        Fixed-point fractional library routines.
43454                                                             (line 1702)
43455* __fractunsdita:                        Fixed-point fractional library routines.
43456                                                             (line 1707)
43457* __fractunsdiuda:                       Fixed-point fractional library routines.
43458                                                             (line 1718)
43459* __fractunsdiudq:                       Fixed-point fractional library routines.
43460                                                             (line 1713)
43461* __fractunsdiuha:                       Fixed-point fractional library routines.
43462                                                             (line 1715)
43463* __fractunsdiuhq:                       Fixed-point fractional library routines.
43464                                                             (line 1710)
43465* __fractunsdiuqq:                       Fixed-point fractional library routines.
43466                                                             (line 1708)
43467* __fractunsdiusa:                       Fixed-point fractional library routines.
43468                                                             (line 1717)
43469* __fractunsdiusq:                       Fixed-point fractional library routines.
43470                                                             (line 1711)
43471* __fractunsdiuta:                       Fixed-point fractional library routines.
43472                                                             (line 1720)
43473* __fractunsdqdi:                        Fixed-point fractional library routines.
43474                                                             (line 1538)
43475* __fractunsdqhi:                        Fixed-point fractional library routines.
43476                                                             (line 1536)
43477* __fractunsdqqi:                        Fixed-point fractional library routines.
43478                                                             (line 1535)
43479* __fractunsdqsi:                        Fixed-point fractional library routines.
43480                                                             (line 1537)
43481* __fractunsdqti:                        Fixed-point fractional library routines.
43482                                                             (line 1539)
43483* __fractunshadi:                        Fixed-point fractional library routines.
43484                                                             (line 1544)
43485* __fractunshahi:                        Fixed-point fractional library routines.
43486                                                             (line 1542)
43487* __fractunshaqi:                        Fixed-point fractional library routines.
43488                                                             (line 1541)
43489* __fractunshasi:                        Fixed-point fractional library routines.
43490                                                             (line 1543)
43491* __fractunshati:                        Fixed-point fractional library routines.
43492                                                             (line 1545)
43493* __fractunshida:                        Fixed-point fractional library routines.
43494                                                             (line 1662)
43495* __fractunshidq:                        Fixed-point fractional library routines.
43496                                                             (line 1659)
43497* __fractunshiha:                        Fixed-point fractional library routines.
43498                                                             (line 1660)
43499* __fractunshihq:                        Fixed-point fractional library routines.
43500                                                             (line 1657)
43501* __fractunshiqq:                        Fixed-point fractional library routines.
43502                                                             (line 1656)
43503* __fractunshisa:                        Fixed-point fractional library routines.
43504                                                             (line 1661)
43505* __fractunshisq:                        Fixed-point fractional library routines.
43506                                                             (line 1658)
43507* __fractunshita:                        Fixed-point fractional library routines.
43508                                                             (line 1663)
43509* __fractunshiuda:                       Fixed-point fractional library routines.
43510                                                             (line 1674)
43511* __fractunshiudq:                       Fixed-point fractional library routines.
43512                                                             (line 1669)
43513* __fractunshiuha:                       Fixed-point fractional library routines.
43514                                                             (line 1671)
43515* __fractunshiuhq:                       Fixed-point fractional library routines.
43516                                                             (line 1666)
43517* __fractunshiuqq:                       Fixed-point fractional library routines.
43518                                                             (line 1664)
43519* __fractunshiusa:                       Fixed-point fractional library routines.
43520                                                             (line 1673)
43521* __fractunshiusq:                       Fixed-point fractional library routines.
43522                                                             (line 1667)
43523* __fractunshiuta:                       Fixed-point fractional library routines.
43524                                                             (line 1676)
43525* __fractunshqdi:                        Fixed-point fractional library routines.
43526                                                             (line 1528)
43527* __fractunshqhi:                        Fixed-point fractional library routines.
43528                                                             (line 1526)
43529* __fractunshqqi:                        Fixed-point fractional library routines.
43530                                                             (line 1525)
43531* __fractunshqsi:                        Fixed-point fractional library routines.
43532                                                             (line 1527)
43533* __fractunshqti:                        Fixed-point fractional library routines.
43534                                                             (line 1529)
43535* __fractunsqida:                        Fixed-point fractional library routines.
43536                                                             (line 1640)
43537* __fractunsqidq:                        Fixed-point fractional library routines.
43538                                                             (line 1637)
43539* __fractunsqiha:                        Fixed-point fractional library routines.
43540                                                             (line 1638)
43541* __fractunsqihq:                        Fixed-point fractional library routines.
43542                                                             (line 1635)
43543* __fractunsqiqq:                        Fixed-point fractional library routines.
43544                                                             (line 1634)
43545* __fractunsqisa:                        Fixed-point fractional library routines.
43546                                                             (line 1639)
43547* __fractunsqisq:                        Fixed-point fractional library routines.
43548                                                             (line 1636)
43549* __fractunsqita:                        Fixed-point fractional library routines.
43550                                                             (line 1641)
43551* __fractunsqiuda:                       Fixed-point fractional library routines.
43552                                                             (line 1652)
43553* __fractunsqiudq:                       Fixed-point fractional library routines.
43554                                                             (line 1647)
43555* __fractunsqiuha:                       Fixed-point fractional library routines.
43556                                                             (line 1649)
43557* __fractunsqiuhq:                       Fixed-point fractional library routines.
43558                                                             (line 1644)
43559* __fractunsqiuqq:                       Fixed-point fractional library routines.
43560                                                             (line 1642)
43561* __fractunsqiusa:                       Fixed-point fractional library routines.
43562                                                             (line 1651)
43563* __fractunsqiusq:                       Fixed-point fractional library routines.
43564                                                             (line 1645)
43565* __fractunsqiuta:                       Fixed-point fractional library routines.
43566                                                             (line 1654)
43567* __fractunsqqdi:                        Fixed-point fractional library routines.
43568                                                             (line 1523)
43569* __fractunsqqhi:                        Fixed-point fractional library routines.
43570                                                             (line 1521)
43571* __fractunsqqqi:                        Fixed-point fractional library routines.
43572                                                             (line 1520)
43573* __fractunsqqsi:                        Fixed-point fractional library routines.
43574                                                             (line 1522)
43575* __fractunsqqti:                        Fixed-point fractional library routines.
43576                                                             (line 1524)
43577* __fractunssadi:                        Fixed-point fractional library routines.
43578                                                             (line 1549)
43579* __fractunssahi:                        Fixed-point fractional library routines.
43580                                                             (line 1547)
43581* __fractunssaqi:                        Fixed-point fractional library routines.
43582                                                             (line 1546)
43583* __fractunssasi:                        Fixed-point fractional library routines.
43584                                                             (line 1548)
43585* __fractunssati:                        Fixed-point fractional library routines.
43586                                                             (line 1550)
43587* __fractunssida:                        Fixed-point fractional library routines.
43588                                                             (line 1684)
43589* __fractunssidq:                        Fixed-point fractional library routines.
43590                                                             (line 1681)
43591* __fractunssiha:                        Fixed-point fractional library routines.
43592                                                             (line 1682)
43593* __fractunssihq:                        Fixed-point fractional library routines.
43594                                                             (line 1679)
43595* __fractunssiqq:                        Fixed-point fractional library routines.
43596                                                             (line 1678)
43597* __fractunssisa:                        Fixed-point fractional library routines.
43598                                                             (line 1683)
43599* __fractunssisq:                        Fixed-point fractional library routines.
43600                                                             (line 1680)
43601* __fractunssita:                        Fixed-point fractional library routines.
43602                                                             (line 1685)
43603* __fractunssiuda:                       Fixed-point fractional library routines.
43604                                                             (line 1696)
43605* __fractunssiudq:                       Fixed-point fractional library routines.
43606                                                             (line 1691)
43607* __fractunssiuha:                       Fixed-point fractional library routines.
43608                                                             (line 1693)
43609* __fractunssiuhq:                       Fixed-point fractional library routines.
43610                                                             (line 1688)
43611* __fractunssiuqq:                       Fixed-point fractional library routines.
43612                                                             (line 1686)
43613* __fractunssiusa:                       Fixed-point fractional library routines.
43614                                                             (line 1695)
43615* __fractunssiusq:                       Fixed-point fractional library routines.
43616                                                             (line 1689)
43617* __fractunssiuta:                       Fixed-point fractional library routines.
43618                                                             (line 1698)
43619* __fractunssqdi:                        Fixed-point fractional library routines.
43620                                                             (line 1533)
43621* __fractunssqhi:                        Fixed-point fractional library routines.
43622                                                             (line 1531)
43623* __fractunssqqi:                        Fixed-point fractional library routines.
43624                                                             (line 1530)
43625* __fractunssqsi:                        Fixed-point fractional library routines.
43626                                                             (line 1532)
43627* __fractunssqti:                        Fixed-point fractional library routines.
43628                                                             (line 1534)
43629* __fractunstadi:                        Fixed-point fractional library routines.
43630                                                             (line 1559)
43631* __fractunstahi:                        Fixed-point fractional library routines.
43632                                                             (line 1557)
43633* __fractunstaqi:                        Fixed-point fractional library routines.
43634                                                             (line 1556)
43635* __fractunstasi:                        Fixed-point fractional library routines.
43636                                                             (line 1558)
43637* __fractunstati:                        Fixed-point fractional library routines.
43638                                                             (line 1560)
43639* __fractunstida:                        Fixed-point fractional library routines.
43640                                                             (line 1729)
43641* __fractunstidq:                        Fixed-point fractional library routines.
43642                                                             (line 1725)
43643* __fractunstiha:                        Fixed-point fractional library routines.
43644                                                             (line 1727)
43645* __fractunstihq:                        Fixed-point fractional library routines.
43646                                                             (line 1723)
43647* __fractunstiqq:                        Fixed-point fractional library routines.
43648                                                             (line 1722)
43649* __fractunstisa:                        Fixed-point fractional library routines.
43650                                                             (line 1728)
43651* __fractunstisq:                        Fixed-point fractional library routines.
43652                                                             (line 1724)
43653* __fractunstita:                        Fixed-point fractional library routines.
43654                                                             (line 1730)
43655* __fractunstiuda:                       Fixed-point fractional library routines.
43656                                                             (line 1744)
43657* __fractunstiudq:                       Fixed-point fractional library routines.
43658                                                             (line 1738)
43659* __fractunstiuha:                       Fixed-point fractional library routines.
43660                                                             (line 1740)
43661* __fractunstiuhq:                       Fixed-point fractional library routines.
43662                                                             (line 1734)
43663* __fractunstiuqq:                       Fixed-point fractional library routines.
43664                                                             (line 1732)
43665* __fractunstiusa:                       Fixed-point fractional library routines.
43666                                                             (line 1742)
43667* __fractunstiusq:                       Fixed-point fractional library routines.
43668                                                             (line 1736)
43669* __fractunstiuta:                       Fixed-point fractional library routines.
43670                                                             (line 1746)
43671* __fractunsudadi:                       Fixed-point fractional library routines.
43672                                                             (line 1620)
43673* __fractunsudahi:                       Fixed-point fractional library routines.
43674                                                             (line 1616)
43675* __fractunsudaqi:                       Fixed-point fractional library routines.
43676                                                             (line 1614)
43677* __fractunsudasi:                       Fixed-point fractional library routines.
43678                                                             (line 1618)
43679* __fractunsudati:                       Fixed-point fractional library routines.
43680                                                             (line 1622)
43681* __fractunsudqdi:                       Fixed-point fractional library routines.
43682                                                             (line 1594)
43683* __fractunsudqhi:                       Fixed-point fractional library routines.
43684                                                             (line 1590)
43685* __fractunsudqqi:                       Fixed-point fractional library routines.
43686                                                             (line 1588)
43687* __fractunsudqsi:                       Fixed-point fractional library routines.
43688                                                             (line 1592)
43689* __fractunsudqti:                       Fixed-point fractional library routines.
43690                                                             (line 1596)
43691* __fractunsuhadi:                       Fixed-point fractional library routines.
43692                                                             (line 1604)
43693* __fractunsuhahi:                       Fixed-point fractional library routines.
43694                                                             (line 1600)
43695* __fractunsuhaqi:                       Fixed-point fractional library routines.
43696                                                             (line 1598)
43697* __fractunsuhasi:                       Fixed-point fractional library routines.
43698                                                             (line 1602)
43699* __fractunsuhati:                       Fixed-point fractional library routines.
43700                                                             (line 1606)
43701* __fractunsuhqdi:                       Fixed-point fractional library routines.
43702                                                             (line 1575)
43703* __fractunsuhqhi:                       Fixed-point fractional library routines.
43704                                                             (line 1573)
43705* __fractunsuhqqi:                       Fixed-point fractional library routines.
43706                                                             (line 1572)
43707* __fractunsuhqsi:                       Fixed-point fractional library routines.
43708                                                             (line 1574)
43709* __fractunsuhqti:                       Fixed-point fractional library routines.
43710                                                             (line 1576)
43711* __fractunsuqqdi:                       Fixed-point fractional library routines.
43712                                                             (line 1568)
43713* __fractunsuqqhi:                       Fixed-point fractional library routines.
43714                                                             (line 1564)
43715* __fractunsuqqqi:                       Fixed-point fractional library routines.
43716                                                             (line 1562)
43717* __fractunsuqqsi:                       Fixed-point fractional library routines.
43718                                                             (line 1566)
43719* __fractunsuqqti:                       Fixed-point fractional library routines.
43720                                                             (line 1570)
43721* __fractunsusadi:                       Fixed-point fractional library routines.
43722                                                             (line 1611)
43723* __fractunsusahi:                       Fixed-point fractional library routines.
43724                                                             (line 1609)
43725* __fractunsusaqi:                       Fixed-point fractional library routines.
43726                                                             (line 1608)
43727* __fractunsusasi:                       Fixed-point fractional library routines.
43728                                                             (line 1610)
43729* __fractunsusati:                       Fixed-point fractional library routines.
43730                                                             (line 1612)
43731* __fractunsusqdi:                       Fixed-point fractional library routines.
43732                                                             (line 1584)
43733* __fractunsusqhi:                       Fixed-point fractional library routines.
43734                                                             (line 1580)
43735* __fractunsusqqi:                       Fixed-point fractional library routines.
43736                                                             (line 1578)
43737* __fractunsusqsi:                       Fixed-point fractional library routines.
43738                                                             (line 1582)
43739* __fractunsusqti:                       Fixed-point fractional library routines.
43740                                                             (line 1586)
43741* __fractunsutadi:                       Fixed-point fractional library routines.
43742                                                             (line 1630)
43743* __fractunsutahi:                       Fixed-point fractional library routines.
43744                                                             (line 1626)
43745* __fractunsutaqi:                       Fixed-point fractional library routines.
43746                                                             (line 1624)
43747* __fractunsutasi:                       Fixed-point fractional library routines.
43748                                                             (line 1628)
43749* __fractunsutati:                       Fixed-point fractional library routines.
43750                                                             (line 1632)
43751* __fractuqqda:                          Fixed-point fractional library routines.
43752                                                             (line  671)
43753* __fractuqqdf:                          Fixed-point fractional library routines.
43754                                                             (line  694)
43755* __fractuqqdi:                          Fixed-point fractional library routines.
43756                                                             (line  691)
43757* __fractuqqdq:                          Fixed-point fractional library routines.
43758                                                             (line  667)
43759* __fractuqqha:                          Fixed-point fractional library routines.
43760                                                             (line  669)
43761* __fractuqqhi:                          Fixed-point fractional library routines.
43762                                                             (line  689)
43763* __fractuqqhq:                          Fixed-point fractional library routines.
43764                                                             (line  665)
43765* __fractuqqqi:                          Fixed-point fractional library routines.
43766                                                             (line  688)
43767* __fractuqqqq:                          Fixed-point fractional library routines.
43768                                                             (line  664)
43769* __fractuqqsa:                          Fixed-point fractional library routines.
43770                                                             (line  670)
43771* __fractuqqsf:                          Fixed-point fractional library routines.
43772                                                             (line  693)
43773* __fractuqqsi:                          Fixed-point fractional library routines.
43774                                                             (line  690)
43775* __fractuqqsq:                          Fixed-point fractional library routines.
43776                                                             (line  666)
43777* __fractuqqta:                          Fixed-point fractional library routines.
43778                                                             (line  672)
43779* __fractuqqti:                          Fixed-point fractional library routines.
43780                                                             (line  692)
43781* __fractuqquda:                         Fixed-point fractional library routines.
43782                                                             (line  684)
43783* __fractuqqudq2:                        Fixed-point fractional library routines.
43784                                                             (line  678)
43785* __fractuqquha:                         Fixed-point fractional library routines.
43786                                                             (line  680)
43787* __fractuqquhq2:                        Fixed-point fractional library routines.
43788                                                             (line  674)
43789* __fractuqqusa:                         Fixed-point fractional library routines.
43790                                                             (line  682)
43791* __fractuqqusq2:                        Fixed-point fractional library routines.
43792                                                             (line  676)
43793* __fractuqquta:                         Fixed-point fractional library routines.
43794                                                             (line  686)
43795* __fractusada:                          Fixed-point fractional library routines.
43796                                                             (line  828)
43797* __fractusadf:                          Fixed-point fractional library routines.
43798                                                             (line  849)
43799* __fractusadi:                          Fixed-point fractional library routines.
43800                                                             (line  846)
43801* __fractusadq:                          Fixed-point fractional library routines.
43802                                                             (line  825)
43803* __fractusaha:                          Fixed-point fractional library routines.
43804                                                             (line  826)
43805* __fractusahi:                          Fixed-point fractional library routines.
43806                                                             (line  844)
43807* __fractusahq:                          Fixed-point fractional library routines.
43808                                                             (line  823)
43809* __fractusaqi:                          Fixed-point fractional library routines.
43810                                                             (line  843)
43811* __fractusaqq:                          Fixed-point fractional library routines.
43812                                                             (line  822)
43813* __fractusasa:                          Fixed-point fractional library routines.
43814                                                             (line  827)
43815* __fractusasf:                          Fixed-point fractional library routines.
43816                                                             (line  848)
43817* __fractusasi:                          Fixed-point fractional library routines.
43818                                                             (line  845)
43819* __fractusasq:                          Fixed-point fractional library routines.
43820                                                             (line  824)
43821* __fractusata:                          Fixed-point fractional library routines.
43822                                                             (line  829)
43823* __fractusati:                          Fixed-point fractional library routines.
43824                                                             (line  847)
43825* __fractusauda2:                        Fixed-point fractional library routines.
43826                                                             (line  839)
43827* __fractusaudq:                         Fixed-point fractional library routines.
43828                                                             (line  835)
43829* __fractusauha2:                        Fixed-point fractional library routines.
43830                                                             (line  837)
43831* __fractusauhq:                         Fixed-point fractional library routines.
43832                                                             (line  832)
43833* __fractusauqq:                         Fixed-point fractional library routines.
43834                                                             (line  830)
43835* __fractusausq:                         Fixed-point fractional library routines.
43836                                                             (line  833)
43837* __fractusauta2:                        Fixed-point fractional library routines.
43838                                                             (line  841)
43839* __fractusqda:                          Fixed-point fractional library routines.
43840                                                             (line  730)
43841* __fractusqdf:                          Fixed-point fractional library routines.
43842                                                             (line  753)
43843* __fractusqdi:                          Fixed-point fractional library routines.
43844                                                             (line  750)
43845* __fractusqdq:                          Fixed-point fractional library routines.
43846                                                             (line  726)
43847* __fractusqha:                          Fixed-point fractional library routines.
43848                                                             (line  728)
43849* __fractusqhi:                          Fixed-point fractional library routines.
43850                                                             (line  748)
43851* __fractusqhq:                          Fixed-point fractional library routines.
43852                                                             (line  724)
43853* __fractusqqi:                          Fixed-point fractional library routines.
43854                                                             (line  747)
43855* __fractusqqq:                          Fixed-point fractional library routines.
43856                                                             (line  723)
43857* __fractusqsa:                          Fixed-point fractional library routines.
43858                                                             (line  729)
43859* __fractusqsf:                          Fixed-point fractional library routines.
43860                                                             (line  752)
43861* __fractusqsi:                          Fixed-point fractional library routines.
43862                                                             (line  749)
43863* __fractusqsq:                          Fixed-point fractional library routines.
43864                                                             (line  725)
43865* __fractusqta:                          Fixed-point fractional library routines.
43866                                                             (line  731)
43867* __fractusqti:                          Fixed-point fractional library routines.
43868                                                             (line  751)
43869* __fractusquda:                         Fixed-point fractional library routines.
43870                                                             (line  743)
43871* __fractusqudq2:                        Fixed-point fractional library routines.
43872                                                             (line  737)
43873* __fractusquha:                         Fixed-point fractional library routines.
43874                                                             (line  739)
43875* __fractusquhq2:                        Fixed-point fractional library routines.
43876                                                             (line  735)
43877* __fractusquqq2:                        Fixed-point fractional library routines.
43878                                                             (line  733)
43879* __fractusqusa:                         Fixed-point fractional library routines.
43880                                                             (line  741)
43881* __fractusquta:                         Fixed-point fractional library routines.
43882                                                             (line  745)
43883* __fractutada:                          Fixed-point fractional library routines.
43884                                                             (line  891)
43885* __fractutadf:                          Fixed-point fractional library routines.
43886                                                             (line  917)
43887* __fractutadi:                          Fixed-point fractional library routines.
43888                                                             (line  913)
43889* __fractutadq:                          Fixed-point fractional library routines.
43890                                                             (line  886)
43891* __fractutaha:                          Fixed-point fractional library routines.
43892                                                             (line  888)
43893* __fractutahi:                          Fixed-point fractional library routines.
43894                                                             (line  911)
43895* __fractutahq:                          Fixed-point fractional library routines.
43896                                                             (line  883)
43897* __fractutaqi:                          Fixed-point fractional library routines.
43898                                                             (line  909)
43899* __fractutaqq:                          Fixed-point fractional library routines.
43900                                                             (line  881)
43901* __fractutasa:                          Fixed-point fractional library routines.
43902                                                             (line  890)
43903* __fractutasf:                          Fixed-point fractional library routines.
43904                                                             (line  916)
43905* __fractutasi:                          Fixed-point fractional library routines.
43906                                                             (line  912)
43907* __fractutasq:                          Fixed-point fractional library routines.
43908                                                             (line  884)
43909* __fractutata:                          Fixed-point fractional library routines.
43910                                                             (line  893)
43911* __fractutati:                          Fixed-point fractional library routines.
43912                                                             (line  914)
43913* __fractutauda2:                        Fixed-point fractional library routines.
43914                                                             (line  907)
43915* __fractutaudq:                         Fixed-point fractional library routines.
43916                                                             (line  901)
43917* __fractutauha2:                        Fixed-point fractional library routines.
43918                                                             (line  903)
43919* __fractutauhq:                         Fixed-point fractional library routines.
43920                                                             (line  897)
43921* __fractutauqq:                         Fixed-point fractional library routines.
43922                                                             (line  895)
43923* __fractutausa2:                        Fixed-point fractional library routines.
43924                                                             (line  905)
43925* __fractutausq:                         Fixed-point fractional library routines.
43926                                                             (line  899)
43927* __gedf2:                               Soft float library routines.
43928                                                             (line  205)
43929* __gesf2:                               Soft float library routines.
43930                                                             (line  204)
43931* __getf2:                               Soft float library routines.
43932                                                             (line  206)
43933* __gtdf2:                               Soft float library routines.
43934                                                             (line  223)
43935* __gtsf2:                               Soft float library routines.
43936                                                             (line  222)
43937* __gttf2:                               Soft float library routines.
43938                                                             (line  224)
43939* __ledf2:                               Soft float library routines.
43940                                                             (line  217)
43941* __lesf2:                               Soft float library routines.
43942                                                             (line  216)
43943* __letf2:                               Soft float library routines.
43944                                                             (line  218)
43945* __lshrdi3:                             Integer library routines.
43946                                                             (line   30)
43947* __lshrsi3:                             Integer library routines.
43948                                                             (line   29)
43949* __lshrti3:                             Integer library routines.
43950                                                             (line   31)
43951* __lshruda3:                            Fixed-point fractional library routines.
43952                                                             (line  388)
43953* __lshrudq3:                            Fixed-point fractional library routines.
43954                                                             (line  382)
43955* __lshruha3:                            Fixed-point fractional library routines.
43956                                                             (line  384)
43957* __lshruhq3:                            Fixed-point fractional library routines.
43958                                                             (line  378)
43959* __lshruqq3:                            Fixed-point fractional library routines.
43960                                                             (line  376)
43961* __lshrusa3:                            Fixed-point fractional library routines.
43962                                                             (line  386)
43963* __lshrusq3:                            Fixed-point fractional library routines.
43964                                                             (line  380)
43965* __lshruta3:                            Fixed-point fractional library routines.
43966                                                             (line  390)
43967* __ltdf2:                               Soft float library routines.
43968                                                             (line  211)
43969* __ltsf2:                               Soft float library routines.
43970                                                             (line  210)
43971* __lttf2:                               Soft float library routines.
43972                                                             (line  212)
43973* __main:                                Collect2.           (line   15)
43974* __moddi3:                              Integer library routines.
43975                                                             (line   36)
43976* __modsi3:                              Integer library routines.
43977                                                             (line   35)
43978* __modti3:                              Integer library routines.
43979                                                             (line   37)
43980* __morestack_current_segment:           Miscellaneous routines.
43981                                                             (line   45)
43982* __morestack_initial_sp:                Miscellaneous routines.
43983                                                             (line   46)
43984* __morestack_segments:                  Miscellaneous routines.
43985                                                             (line   44)
43986* __mulda3:                              Fixed-point fractional library routines.
43987                                                             (line  170)
43988* __muldc3:                              Soft float library routines.
43989                                                             (line  239)
43990* __muldf3:                              Soft float library routines.
43991                                                             (line   39)
43992* __muldi3:                              Integer library routines.
43993                                                             (line   42)
43994* __muldq3:                              Fixed-point fractional library routines.
43995                                                             (line  157)
43996* __mulha3:                              Fixed-point fractional library routines.
43997                                                             (line  167)
43998* __mulhq3:                              Fixed-point fractional library routines.
43999                                                             (line  155)
44000* __mulqq3:                              Fixed-point fractional library routines.
44001                                                             (line  153)
44002* __mulsa3:                              Fixed-point fractional library routines.
44003                                                             (line  169)
44004* __mulsc3:                              Soft float library routines.
44005                                                             (line  237)
44006* __mulsf3:                              Soft float library routines.
44007                                                             (line   38)
44008* __mulsi3:                              Integer library routines.
44009                                                             (line   41)
44010* __mulsq3:                              Fixed-point fractional library routines.
44011                                                             (line  156)
44012* __multa3:                              Fixed-point fractional library routines.
44013                                                             (line  171)
44014* __multc3:                              Soft float library routines.
44015                                                             (line  241)
44016* __multf3:                              Soft float library routines.
44017                                                             (line   40)
44018* __multi3:                              Integer library routines.
44019                                                             (line   43)
44020* __muluda3:                             Fixed-point fractional library routines.
44021                                                             (line  177)
44022* __muludq3:                             Fixed-point fractional library routines.
44023                                                             (line  165)
44024* __muluha3:                             Fixed-point fractional library routines.
44025                                                             (line  173)
44026* __muluhq3:                             Fixed-point fractional library routines.
44027                                                             (line  161)
44028* __muluqq3:                             Fixed-point fractional library routines.
44029                                                             (line  159)
44030* __mulusa3:                             Fixed-point fractional library routines.
44031                                                             (line  175)
44032* __mulusq3:                             Fixed-point fractional library routines.
44033                                                             (line  163)
44034* __muluta3:                             Fixed-point fractional library routines.
44035                                                             (line  179)
44036* __mulvdi3:                             Integer library routines.
44037                                                             (line  114)
44038* __mulvsi3:                             Integer library routines.
44039                                                             (line  113)
44040* __mulxc3:                              Soft float library routines.
44041                                                             (line  243)
44042* __mulxf3:                              Soft float library routines.
44043                                                             (line   42)
44044* __nedf2:                               Soft float library routines.
44045                                                             (line  199)
44046* __negda2:                              Fixed-point fractional library routines.
44047                                                             (line  298)
44048* __negdf2:                              Soft float library routines.
44049                                                             (line   55)
44050* __negdi2:                              Integer library routines.
44051                                                             (line   46)
44052* __negdq2:                              Fixed-point fractional library routines.
44053                                                             (line  288)
44054* __negha2:                              Fixed-point fractional library routines.
44055                                                             (line  296)
44056* __neghq2:                              Fixed-point fractional library routines.
44057                                                             (line  286)
44058* __negqq2:                              Fixed-point fractional library routines.
44059                                                             (line  285)
44060* __negsa2:                              Fixed-point fractional library routines.
44061                                                             (line  297)
44062* __negsf2:                              Soft float library routines.
44063                                                             (line   54)
44064* __negsq2:                              Fixed-point fractional library routines.
44065                                                             (line  287)
44066* __negta2:                              Fixed-point fractional library routines.
44067                                                             (line  299)
44068* __negtf2:                              Soft float library routines.
44069                                                             (line   56)
44070* __negti2:                              Integer library routines.
44071                                                             (line   47)
44072* __neguda2:                             Fixed-point fractional library routines.
44073                                                             (line  303)
44074* __negudq2:                             Fixed-point fractional library routines.
44075                                                             (line  294)
44076* __neguha2:                             Fixed-point fractional library routines.
44077                                                             (line  300)
44078* __neguhq2:                             Fixed-point fractional library routines.
44079                                                             (line  291)
44080* __neguqq2:                             Fixed-point fractional library routines.
44081                                                             (line  289)
44082* __negusa2:                             Fixed-point fractional library routines.
44083                                                             (line  302)
44084* __negusq2:                             Fixed-point fractional library routines.
44085                                                             (line  292)
44086* __neguta2:                             Fixed-point fractional library routines.
44087                                                             (line  305)
44088* __negvdi2:                             Integer library routines.
44089                                                             (line  118)
44090* __negvsi2:                             Integer library routines.
44091                                                             (line  117)
44092* __negxf2:                              Soft float library routines.
44093                                                             (line   57)
44094* __nesf2:                               Soft float library routines.
44095                                                             (line  198)
44096* __netf2:                               Soft float library routines.
44097                                                             (line  200)
44098* __paritydi2:                           Integer library routines.
44099                                                             (line  150)
44100* __paritysi2:                           Integer library routines.
44101                                                             (line  149)
44102* __parityti2:                           Integer library routines.
44103                                                             (line  151)
44104* __popcountdi2:                         Integer library routines.
44105                                                             (line  156)
44106* __popcountsi2:                         Integer library routines.
44107                                                             (line  155)
44108* __popcountti2:                         Integer library routines.
44109                                                             (line  157)
44110* __powidf2:                             Soft float library routines.
44111                                                             (line  232)
44112* __powisf2:                             Soft float library routines.
44113                                                             (line  231)
44114* __powitf2:                             Soft float library routines.
44115                                                             (line  233)
44116* __powixf2:                             Soft float library routines.
44117                                                             (line  234)
44118* __satfractdadq:                        Fixed-point fractional library routines.
44119                                                             (line 1152)
44120* __satfractdaha2:                       Fixed-point fractional library routines.
44121                                                             (line 1153)
44122* __satfractdahq:                        Fixed-point fractional library routines.
44123                                                             (line 1150)
44124* __satfractdaqq:                        Fixed-point fractional library routines.
44125                                                             (line 1149)
44126* __satfractdasa2:                       Fixed-point fractional library routines.
44127                                                             (line 1154)
44128* __satfractdasq:                        Fixed-point fractional library routines.
44129                                                             (line 1151)
44130* __satfractdata2:                       Fixed-point fractional library routines.
44131                                                             (line 1155)
44132* __satfractdauda:                       Fixed-point fractional library routines.
44133                                                             (line 1165)
44134* __satfractdaudq:                       Fixed-point fractional library routines.
44135                                                             (line 1160)
44136* __satfractdauha:                       Fixed-point fractional library routines.
44137                                                             (line 1162)
44138* __satfractdauhq:                       Fixed-point fractional library routines.
44139                                                             (line 1158)
44140* __satfractdauqq:                       Fixed-point fractional library routines.
44141                                                             (line 1156)
44142* __satfractdausa:                       Fixed-point fractional library routines.
44143                                                             (line 1164)
44144* __satfractdausq:                       Fixed-point fractional library routines.
44145                                                             (line 1159)
44146* __satfractdauta:                       Fixed-point fractional library routines.
44147                                                             (line 1166)
44148* __satfractdfda:                        Fixed-point fractional library routines.
44149                                                             (line 1505)
44150* __satfractdfdq:                        Fixed-point fractional library routines.
44151                                                             (line 1502)
44152* __satfractdfha:                        Fixed-point fractional library routines.
44153                                                             (line 1503)
44154* __satfractdfhq:                        Fixed-point fractional library routines.
44155                                                             (line 1500)
44156* __satfractdfqq:                        Fixed-point fractional library routines.
44157                                                             (line 1499)
44158* __satfractdfsa:                        Fixed-point fractional library routines.
44159                                                             (line 1504)
44160* __satfractdfsq:                        Fixed-point fractional library routines.
44161                                                             (line 1501)
44162* __satfractdfta:                        Fixed-point fractional library routines.
44163                                                             (line 1506)
44164* __satfractdfuda:                       Fixed-point fractional library routines.
44165                                                             (line 1514)
44166* __satfractdfudq:                       Fixed-point fractional library routines.
44167                                                             (line 1510)
44168* __satfractdfuha:                       Fixed-point fractional library routines.
44169                                                             (line 1512)
44170* __satfractdfuhq:                       Fixed-point fractional library routines.
44171                                                             (line 1508)
44172* __satfractdfuqq:                       Fixed-point fractional library routines.
44173                                                             (line 1507)
44174* __satfractdfusa:                       Fixed-point fractional library routines.
44175                                                             (line 1513)
44176* __satfractdfusq:                       Fixed-point fractional library routines.
44177                                                             (line 1509)
44178* __satfractdfuta:                       Fixed-point fractional library routines.
44179                                                             (line 1515)
44180* __satfractdida:                        Fixed-point fractional library routines.
44181                                                             (line 1455)
44182* __satfractdidq:                        Fixed-point fractional library routines.
44183                                                             (line 1452)
44184* __satfractdiha:                        Fixed-point fractional library routines.
44185                                                             (line 1453)
44186* __satfractdihq:                        Fixed-point fractional library routines.
44187                                                             (line 1450)
44188* __satfractdiqq:                        Fixed-point fractional library routines.
44189                                                             (line 1449)
44190* __satfractdisa:                        Fixed-point fractional library routines.
44191                                                             (line 1454)
44192* __satfractdisq:                        Fixed-point fractional library routines.
44193                                                             (line 1451)
44194* __satfractdita:                        Fixed-point fractional library routines.
44195                                                             (line 1456)
44196* __satfractdiuda:                       Fixed-point fractional library routines.
44197                                                             (line 1463)
44198* __satfractdiudq:                       Fixed-point fractional library routines.
44199                                                             (line 1460)
44200* __satfractdiuha:                       Fixed-point fractional library routines.
44201                                                             (line 1461)
44202* __satfractdiuhq:                       Fixed-point fractional library routines.
44203                                                             (line 1458)
44204* __satfractdiuqq:                       Fixed-point fractional library routines.
44205                                                             (line 1457)
44206* __satfractdiusa:                       Fixed-point fractional library routines.
44207                                                             (line 1462)
44208* __satfractdiusq:                       Fixed-point fractional library routines.
44209                                                             (line 1459)
44210* __satfractdiuta:                       Fixed-point fractional library routines.
44211                                                             (line 1464)
44212* __satfractdqda:                        Fixed-point fractional library routines.
44213                                                             (line 1097)
44214* __satfractdqha:                        Fixed-point fractional library routines.
44215                                                             (line 1095)
44216* __satfractdqhq2:                       Fixed-point fractional library routines.
44217                                                             (line 1093)
44218* __satfractdqqq2:                       Fixed-point fractional library routines.
44219                                                             (line 1092)
44220* __satfractdqsa:                        Fixed-point fractional library routines.
44221                                                             (line 1096)
44222* __satfractdqsq2:                       Fixed-point fractional library routines.
44223                                                             (line 1094)
44224* __satfractdqta:                        Fixed-point fractional library routines.
44225                                                             (line 1098)
44226* __satfractdquda:                       Fixed-point fractional library routines.
44227                                                             (line 1109)
44228* __satfractdqudq:                       Fixed-point fractional library routines.
44229                                                             (line 1104)
44230* __satfractdquha:                       Fixed-point fractional library routines.
44231                                                             (line 1106)
44232* __satfractdquhq:                       Fixed-point fractional library routines.
44233                                                             (line 1101)
44234* __satfractdquqq:                       Fixed-point fractional library routines.
44235                                                             (line 1099)
44236* __satfractdqusa:                       Fixed-point fractional library routines.
44237                                                             (line 1108)
44238* __satfractdqusq:                       Fixed-point fractional library routines.
44239                                                             (line 1102)
44240* __satfractdquta:                       Fixed-point fractional library routines.
44241                                                             (line 1111)
44242* __satfracthada2:                       Fixed-point fractional library routines.
44243                                                             (line 1118)
44244* __satfracthadq:                        Fixed-point fractional library routines.
44245                                                             (line 1116)
44246* __satfracthahq:                        Fixed-point fractional library routines.
44247                                                             (line 1114)
44248* __satfracthaqq:                        Fixed-point fractional library routines.
44249                                                             (line 1113)
44250* __satfracthasa2:                       Fixed-point fractional library routines.
44251                                                             (line 1117)
44252* __satfracthasq:                        Fixed-point fractional library routines.
44253                                                             (line 1115)
44254* __satfracthata2:                       Fixed-point fractional library routines.
44255                                                             (line 1119)
44256* __satfracthauda:                       Fixed-point fractional library routines.
44257                                                             (line 1130)
44258* __satfracthaudq:                       Fixed-point fractional library routines.
44259                                                             (line 1125)
44260* __satfracthauha:                       Fixed-point fractional library routines.
44261                                                             (line 1127)
44262* __satfracthauhq:                       Fixed-point fractional library routines.
44263                                                             (line 1122)
44264* __satfracthauqq:                       Fixed-point fractional library routines.
44265                                                             (line 1120)
44266* __satfracthausa:                       Fixed-point fractional library routines.
44267                                                             (line 1129)
44268* __satfracthausq:                       Fixed-point fractional library routines.
44269                                                             (line 1123)
44270* __satfracthauta:                       Fixed-point fractional library routines.
44271                                                             (line 1132)
44272* __satfracthida:                        Fixed-point fractional library routines.
44273                                                             (line 1423)
44274* __satfracthidq:                        Fixed-point fractional library routines.
44275                                                             (line 1420)
44276* __satfracthiha:                        Fixed-point fractional library routines.
44277                                                             (line 1421)
44278* __satfracthihq:                        Fixed-point fractional library routines.
44279                                                             (line 1418)
44280* __satfracthiqq:                        Fixed-point fractional library routines.
44281                                                             (line 1417)
44282* __satfracthisa:                        Fixed-point fractional library routines.
44283                                                             (line 1422)
44284* __satfracthisq:                        Fixed-point fractional library routines.
44285                                                             (line 1419)
44286* __satfracthita:                        Fixed-point fractional library routines.
44287                                                             (line 1424)
44288* __satfracthiuda:                       Fixed-point fractional library routines.
44289                                                             (line 1431)
44290* __satfracthiudq:                       Fixed-point fractional library routines.
44291                                                             (line 1428)
44292* __satfracthiuha:                       Fixed-point fractional library routines.
44293                                                             (line 1429)
44294* __satfracthiuhq:                       Fixed-point fractional library routines.
44295                                                             (line 1426)
44296* __satfracthiuqq:                       Fixed-point fractional library routines.
44297                                                             (line 1425)
44298* __satfracthiusa:                       Fixed-point fractional library routines.
44299                                                             (line 1430)
44300* __satfracthiusq:                       Fixed-point fractional library routines.
44301                                                             (line 1427)
44302* __satfracthiuta:                       Fixed-point fractional library routines.
44303                                                             (line 1432)
44304* __satfracthqda:                        Fixed-point fractional library routines.
44305                                                             (line 1063)
44306* __satfracthqdq2:                       Fixed-point fractional library routines.
44307                                                             (line 1060)
44308* __satfracthqha:                        Fixed-point fractional library routines.
44309                                                             (line 1061)
44310* __satfracthqqq2:                       Fixed-point fractional library routines.
44311                                                             (line 1058)
44312* __satfracthqsa:                        Fixed-point fractional library routines.
44313                                                             (line 1062)
44314* __satfracthqsq2:                       Fixed-point fractional library routines.
44315                                                             (line 1059)
44316* __satfracthqta:                        Fixed-point fractional library routines.
44317                                                             (line 1064)
44318* __satfracthquda:                       Fixed-point fractional library routines.
44319                                                             (line 1071)
44320* __satfracthqudq:                       Fixed-point fractional library routines.
44321                                                             (line 1068)
44322* __satfracthquha:                       Fixed-point fractional library routines.
44323                                                             (line 1069)
44324* __satfracthquhq:                       Fixed-point fractional library routines.
44325                                                             (line 1066)
44326* __satfracthquqq:                       Fixed-point fractional library routines.
44327                                                             (line 1065)
44328* __satfracthqusa:                       Fixed-point fractional library routines.
44329                                                             (line 1070)
44330* __satfracthqusq:                       Fixed-point fractional library routines.
44331                                                             (line 1067)
44332* __satfracthquta:                       Fixed-point fractional library routines.
44333                                                             (line 1072)
44334* __satfractqida:                        Fixed-point fractional library routines.
44335                                                             (line 1401)
44336* __satfractqidq:                        Fixed-point fractional library routines.
44337                                                             (line 1398)
44338* __satfractqiha:                        Fixed-point fractional library routines.
44339                                                             (line 1399)
44340* __satfractqihq:                        Fixed-point fractional library routines.
44341                                                             (line 1396)
44342* __satfractqiqq:                        Fixed-point fractional library routines.
44343                                                             (line 1395)
44344* __satfractqisa:                        Fixed-point fractional library routines.
44345                                                             (line 1400)
44346* __satfractqisq:                        Fixed-point fractional library routines.
44347                                                             (line 1397)
44348* __satfractqita:                        Fixed-point fractional library routines.
44349                                                             (line 1402)
44350* __satfractqiuda:                       Fixed-point fractional library routines.
44351                                                             (line 1413)
44352* __satfractqiudq:                       Fixed-point fractional library routines.
44353                                                             (line 1408)
44354* __satfractqiuha:                       Fixed-point fractional library routines.
44355                                                             (line 1410)
44356* __satfractqiuhq:                       Fixed-point fractional library routines.
44357                                                             (line 1405)
44358* __satfractqiuqq:                       Fixed-point fractional library routines.
44359                                                             (line 1403)
44360* __satfractqiusa:                       Fixed-point fractional library routines.
44361                                                             (line 1412)
44362* __satfractqiusq:                       Fixed-point fractional library routines.
44363                                                             (line 1406)
44364* __satfractqiuta:                       Fixed-point fractional library routines.
44365                                                             (line 1415)
44366* __satfractqqda:                        Fixed-point fractional library routines.
44367                                                             (line 1042)
44368* __satfractqqdq2:                       Fixed-point fractional library routines.
44369                                                             (line 1039)
44370* __satfractqqha:                        Fixed-point fractional library routines.
44371                                                             (line 1040)
44372* __satfractqqhq2:                       Fixed-point fractional library routines.
44373                                                             (line 1037)
44374* __satfractqqsa:                        Fixed-point fractional library routines.
44375                                                             (line 1041)
44376* __satfractqqsq2:                       Fixed-point fractional library routines.
44377                                                             (line 1038)
44378* __satfractqqta:                        Fixed-point fractional library routines.
44379                                                             (line 1043)
44380* __satfractqquda:                       Fixed-point fractional library routines.
44381                                                             (line 1054)
44382* __satfractqqudq:                       Fixed-point fractional library routines.
44383                                                             (line 1049)
44384* __satfractqquha:                       Fixed-point fractional library routines.
44385                                                             (line 1051)
44386* __satfractqquhq:                       Fixed-point fractional library routines.
44387                                                             (line 1046)
44388* __satfractqquqq:                       Fixed-point fractional library routines.
44389                                                             (line 1044)
44390* __satfractqqusa:                       Fixed-point fractional library routines.
44391                                                             (line 1053)
44392* __satfractqqusq:                       Fixed-point fractional library routines.
44393                                                             (line 1047)
44394* __satfractqquta:                       Fixed-point fractional library routines.
44395                                                             (line 1056)
44396* __satfractsada2:                       Fixed-point fractional library routines.
44397                                                             (line 1139)
44398* __satfractsadq:                        Fixed-point fractional library routines.
44399                                                             (line 1137)
44400* __satfractsaha2:                       Fixed-point fractional library routines.
44401                                                             (line 1138)
44402* __satfractsahq:                        Fixed-point fractional library routines.
44403                                                             (line 1135)
44404* __satfractsaqq:                        Fixed-point fractional library routines.
44405                                                             (line 1134)
44406* __satfractsasq:                        Fixed-point fractional library routines.
44407                                                             (line 1136)
44408* __satfractsata2:                       Fixed-point fractional library routines.
44409                                                             (line 1140)
44410* __satfractsauda:                       Fixed-point fractional library routines.
44411                                                             (line 1147)
44412* __satfractsaudq:                       Fixed-point fractional library routines.
44413                                                             (line 1144)
44414* __satfractsauha:                       Fixed-point fractional library routines.
44415                                                             (line 1145)
44416* __satfractsauhq:                       Fixed-point fractional library routines.
44417                                                             (line 1142)
44418* __satfractsauqq:                       Fixed-point fractional library routines.
44419                                                             (line 1141)
44420* __satfractsausa:                       Fixed-point fractional library routines.
44421                                                             (line 1146)
44422* __satfractsausq:                       Fixed-point fractional library routines.
44423                                                             (line 1143)
44424* __satfractsauta:                       Fixed-point fractional library routines.
44425                                                             (line 1148)
44426* __satfractsfda:                        Fixed-point fractional library routines.
44427                                                             (line 1489)
44428* __satfractsfdq:                        Fixed-point fractional library routines.
44429                                                             (line 1486)
44430* __satfractsfha:                        Fixed-point fractional library routines.
44431                                                             (line 1487)
44432* __satfractsfhq:                        Fixed-point fractional library routines.
44433                                                             (line 1484)
44434* __satfractsfqq:                        Fixed-point fractional library routines.
44435                                                             (line 1483)
44436* __satfractsfsa:                        Fixed-point fractional library routines.
44437                                                             (line 1488)
44438* __satfractsfsq:                        Fixed-point fractional library routines.
44439                                                             (line 1485)
44440* __satfractsfta:                        Fixed-point fractional library routines.
44441                                                             (line 1490)
44442* __satfractsfuda:                       Fixed-point fractional library routines.
44443                                                             (line 1497)
44444* __satfractsfudq:                       Fixed-point fractional library routines.
44445                                                             (line 1494)
44446* __satfractsfuha:                       Fixed-point fractional library routines.
44447                                                             (line 1495)
44448* __satfractsfuhq:                       Fixed-point fractional library routines.
44449                                                             (line 1492)
44450* __satfractsfuqq:                       Fixed-point fractional library routines.
44451                                                             (line 1491)
44452* __satfractsfusa:                       Fixed-point fractional library routines.
44453                                                             (line 1496)
44454* __satfractsfusq:                       Fixed-point fractional library routines.
44455                                                             (line 1493)
44456* __satfractsfuta:                       Fixed-point fractional library routines.
44457                                                             (line 1498)
44458* __satfractsida:                        Fixed-point fractional library routines.
44459                                                             (line 1439)
44460* __satfractsidq:                        Fixed-point fractional library routines.
44461                                                             (line 1436)
44462* __satfractsiha:                        Fixed-point fractional library routines.
44463                                                             (line 1437)
44464* __satfractsihq:                        Fixed-point fractional library routines.
44465                                                             (line 1434)
44466* __satfractsiqq:                        Fixed-point fractional library routines.
44467                                                             (line 1433)
44468* __satfractsisa:                        Fixed-point fractional library routines.
44469                                                             (line 1438)
44470* __satfractsisq:                        Fixed-point fractional library routines.
44471                                                             (line 1435)
44472* __satfractsita:                        Fixed-point fractional library routines.
44473                                                             (line 1440)
44474* __satfractsiuda:                       Fixed-point fractional library routines.
44475                                                             (line 1447)
44476* __satfractsiudq:                       Fixed-point fractional library routines.
44477                                                             (line 1444)
44478* __satfractsiuha:                       Fixed-point fractional library routines.
44479                                                             (line 1445)
44480* __satfractsiuhq:                       Fixed-point fractional library routines.
44481                                                             (line 1442)
44482* __satfractsiuqq:                       Fixed-point fractional library routines.
44483                                                             (line 1441)
44484* __satfractsiusa:                       Fixed-point fractional library routines.
44485                                                             (line 1446)
44486* __satfractsiusq:                       Fixed-point fractional library routines.
44487                                                             (line 1443)
44488* __satfractsiuta:                       Fixed-point fractional library routines.
44489                                                             (line 1448)
44490* __satfractsqda:                        Fixed-point fractional library routines.
44491                                                             (line 1078)
44492* __satfractsqdq2:                       Fixed-point fractional library routines.
44493                                                             (line 1075)
44494* __satfractsqha:                        Fixed-point fractional library routines.
44495                                                             (line 1076)
44496* __satfractsqhq2:                       Fixed-point fractional library routines.
44497                                                             (line 1074)
44498* __satfractsqqq2:                       Fixed-point fractional library routines.
44499                                                             (line 1073)
44500* __satfractsqsa:                        Fixed-point fractional library routines.
44501                                                             (line 1077)
44502* __satfractsqta:                        Fixed-point fractional library routines.
44503                                                             (line 1079)
44504* __satfractsquda:                       Fixed-point fractional library routines.
44505                                                             (line 1089)
44506* __satfractsqudq:                       Fixed-point fractional library routines.
44507                                                             (line 1084)
44508* __satfractsquha:                       Fixed-point fractional library routines.
44509                                                             (line 1086)
44510* __satfractsquhq:                       Fixed-point fractional library routines.
44511                                                             (line 1082)
44512* __satfractsquqq:                       Fixed-point fractional library routines.
44513                                                             (line 1080)
44514* __satfractsqusa:                       Fixed-point fractional library routines.
44515                                                             (line 1088)
44516* __satfractsqusq:                       Fixed-point fractional library routines.
44517                                                             (line 1083)
44518* __satfractsquta:                       Fixed-point fractional library routines.
44519                                                             (line 1090)
44520* __satfracttada2:                       Fixed-point fractional library routines.
44521                                                             (line 1174)
44522* __satfracttadq:                        Fixed-point fractional library routines.
44523                                                             (line 1171)
44524* __satfracttaha2:                       Fixed-point fractional library routines.
44525                                                             (line 1172)
44526* __satfracttahq:                        Fixed-point fractional library routines.
44527                                                             (line 1169)
44528* __satfracttaqq:                        Fixed-point fractional library routines.
44529                                                             (line 1168)
44530* __satfracttasa2:                       Fixed-point fractional library routines.
44531                                                             (line 1173)
44532* __satfracttasq:                        Fixed-point fractional library routines.
44533                                                             (line 1170)
44534* __satfracttauda:                       Fixed-point fractional library routines.
44535                                                             (line 1185)
44536* __satfracttaudq:                       Fixed-point fractional library routines.
44537                                                             (line 1180)
44538* __satfracttauha:                       Fixed-point fractional library routines.
44539                                                             (line 1182)
44540* __satfracttauhq:                       Fixed-point fractional library routines.
44541                                                             (line 1177)
44542* __satfracttauqq:                       Fixed-point fractional library routines.
44543                                                             (line 1175)
44544* __satfracttausa:                       Fixed-point fractional library routines.
44545                                                             (line 1184)
44546* __satfracttausq:                       Fixed-point fractional library routines.
44547                                                             (line 1178)
44548* __satfracttauta:                       Fixed-point fractional library routines.
44549                                                             (line 1187)
44550* __satfracttida:                        Fixed-point fractional library routines.
44551                                                             (line 1471)
44552* __satfracttidq:                        Fixed-point fractional library routines.
44553                                                             (line 1468)
44554* __satfracttiha:                        Fixed-point fractional library routines.
44555                                                             (line 1469)
44556* __satfracttihq:                        Fixed-point fractional library routines.
44557                                                             (line 1466)
44558* __satfracttiqq:                        Fixed-point fractional library routines.
44559                                                             (line 1465)
44560* __satfracttisa:                        Fixed-point fractional library routines.
44561                                                             (line 1470)
44562* __satfracttisq:                        Fixed-point fractional library routines.
44563                                                             (line 1467)
44564* __satfracttita:                        Fixed-point fractional library routines.
44565                                                             (line 1472)
44566* __satfracttiuda:                       Fixed-point fractional library routines.
44567                                                             (line 1480)
44568* __satfracttiudq:                       Fixed-point fractional library routines.
44569                                                             (line 1476)
44570* __satfracttiuha:                       Fixed-point fractional library routines.
44571                                                             (line 1478)
44572* __satfracttiuhq:                       Fixed-point fractional library routines.
44573                                                             (line 1474)
44574* __satfracttiuqq:                       Fixed-point fractional library routines.
44575                                                             (line 1473)
44576* __satfracttiusa:                       Fixed-point fractional library routines.
44577                                                             (line 1479)
44578* __satfracttiusq:                       Fixed-point fractional library routines.
44579                                                             (line 1475)
44580* __satfracttiuta:                       Fixed-point fractional library routines.
44581                                                             (line 1481)
44582* __satfractudada:                       Fixed-point fractional library routines.
44583                                                             (line 1350)
44584* __satfractudadq:                       Fixed-point fractional library routines.
44585                                                             (line 1345)
44586* __satfractudaha:                       Fixed-point fractional library routines.
44587                                                             (line 1347)
44588* __satfractudahq:                       Fixed-point fractional library routines.
44589                                                             (line 1343)
44590* __satfractudaqq:                       Fixed-point fractional library routines.
44591                                                             (line 1341)
44592* __satfractudasa:                       Fixed-point fractional library routines.
44593                                                             (line 1349)
44594* __satfractudasq:                       Fixed-point fractional library routines.
44595                                                             (line 1344)
44596* __satfractudata:                       Fixed-point fractional library routines.
44597                                                             (line 1351)
44598* __satfractudaudq:                      Fixed-point fractional library routines.
44599                                                             (line 1359)
44600* __satfractudauha2:                     Fixed-point fractional library routines.
44601                                                             (line 1361)
44602* __satfractudauhq:                      Fixed-point fractional library routines.
44603                                                             (line 1355)
44604* __satfractudauqq:                      Fixed-point fractional library routines.
44605                                                             (line 1353)
44606* __satfractudausa2:                     Fixed-point fractional library routines.
44607                                                             (line 1363)
44608* __satfractudausq:                      Fixed-point fractional library routines.
44609                                                             (line 1357)
44610* __satfractudauta2:                     Fixed-point fractional library routines.
44611                                                             (line 1365)
44612* __satfractudqda:                       Fixed-point fractional library routines.
44613                                                             (line 1274)
44614* __satfractudqdq:                       Fixed-point fractional library routines.
44615                                                             (line 1269)
44616* __satfractudqha:                       Fixed-point fractional library routines.
44617                                                             (line 1271)
44618* __satfractudqhq:                       Fixed-point fractional library routines.
44619                                                             (line 1266)
44620* __satfractudqqq:                       Fixed-point fractional library routines.
44621                                                             (line 1264)
44622* __satfractudqsa:                       Fixed-point fractional library routines.
44623                                                             (line 1273)
44624* __satfractudqsq:                       Fixed-point fractional library routines.
44625                                                             (line 1267)
44626* __satfractudqta:                       Fixed-point fractional library routines.
44627                                                             (line 1276)
44628* __satfractudquda:                      Fixed-point fractional library routines.
44629                                                             (line 1288)
44630* __satfractudquha:                      Fixed-point fractional library routines.
44631                                                             (line 1284)
44632* __satfractudquhq2:                     Fixed-point fractional library routines.
44633                                                             (line 1280)
44634* __satfractudquqq2:                     Fixed-point fractional library routines.
44635                                                             (line 1278)
44636* __satfractudqusa:                      Fixed-point fractional library routines.
44637                                                             (line 1286)
44638* __satfractudqusq2:                     Fixed-point fractional library routines.
44639                                                             (line 1282)
44640* __satfractudquta:                      Fixed-point fractional library routines.
44641                                                             (line 1290)
44642* __satfractuhada:                       Fixed-point fractional library routines.
44643                                                             (line 1302)
44644* __satfractuhadq:                       Fixed-point fractional library routines.
44645                                                             (line 1297)
44646* __satfractuhaha:                       Fixed-point fractional library routines.
44647                                                             (line 1299)
44648* __satfractuhahq:                       Fixed-point fractional library routines.
44649                                                             (line 1294)
44650* __satfractuhaqq:                       Fixed-point fractional library routines.
44651                                                             (line 1292)
44652* __satfractuhasa:                       Fixed-point fractional library routines.
44653                                                             (line 1301)
44654* __satfractuhasq:                       Fixed-point fractional library routines.
44655                                                             (line 1295)
44656* __satfractuhata:                       Fixed-point fractional library routines.
44657                                                             (line 1304)
44658* __satfractuhauda2:                     Fixed-point fractional library routines.
44659                                                             (line 1316)
44660* __satfractuhaudq:                      Fixed-point fractional library routines.
44661                                                             (line 1312)
44662* __satfractuhauhq:                      Fixed-point fractional library routines.
44663                                                             (line 1308)
44664* __satfractuhauqq:                      Fixed-point fractional library routines.
44665                                                             (line 1306)
44666* __satfractuhausa2:                     Fixed-point fractional library routines.
44667                                                             (line 1314)
44668* __satfractuhausq:                      Fixed-point fractional library routines.
44669                                                             (line 1310)
44670* __satfractuhauta2:                     Fixed-point fractional library routines.
44671                                                             (line 1318)
44672* __satfractuhqda:                       Fixed-point fractional library routines.
44673                                                             (line 1223)
44674* __satfractuhqdq:                       Fixed-point fractional library routines.
44675                                                             (line 1220)
44676* __satfractuhqha:                       Fixed-point fractional library routines.
44677                                                             (line 1221)
44678* __satfractuhqhq:                       Fixed-point fractional library routines.
44679                                                             (line 1218)
44680* __satfractuhqqq:                       Fixed-point fractional library routines.
44681                                                             (line 1217)
44682* __satfractuhqsa:                       Fixed-point fractional library routines.
44683                                                             (line 1222)
44684* __satfractuhqsq:                       Fixed-point fractional library routines.
44685                                                             (line 1219)
44686* __satfractuhqta:                       Fixed-point fractional library routines.
44687                                                             (line 1224)
44688* __satfractuhquda:                      Fixed-point fractional library routines.
44689                                                             (line 1234)
44690* __satfractuhqudq2:                     Fixed-point fractional library routines.
44691                                                             (line 1229)
44692* __satfractuhquha:                      Fixed-point fractional library routines.
44693                                                             (line 1231)
44694* __satfractuhquqq2:                     Fixed-point fractional library routines.
44695                                                             (line 1225)
44696* __satfractuhqusa:                      Fixed-point fractional library routines.
44697                                                             (line 1233)
44698* __satfractuhqusq2:                     Fixed-point fractional library routines.
44699                                                             (line 1227)
44700* __satfractuhquta:                      Fixed-point fractional library routines.
44701                                                             (line 1236)
44702* __satfractunsdida:                     Fixed-point fractional library routines.
44703                                                             (line 1833)
44704* __satfractunsdidq:                     Fixed-point fractional library routines.
44705                                                             (line 1829)
44706* __satfractunsdiha:                     Fixed-point fractional library routines.
44707                                                             (line 1831)
44708* __satfractunsdihq:                     Fixed-point fractional library routines.
44709                                                             (line 1827)
44710* __satfractunsdiqq:                     Fixed-point fractional library routines.
44711                                                             (line 1826)
44712* __satfractunsdisa:                     Fixed-point fractional library routines.
44713                                                             (line 1832)
44714* __satfractunsdisq:                     Fixed-point fractional library routines.
44715                                                             (line 1828)
44716* __satfractunsdita:                     Fixed-point fractional library routines.
44717                                                             (line 1834)
44718* __satfractunsdiuda:                    Fixed-point fractional library routines.
44719                                                             (line 1848)
44720* __satfractunsdiudq:                    Fixed-point fractional library routines.
44721                                                             (line 1842)
44722* __satfractunsdiuha:                    Fixed-point fractional library routines.
44723                                                             (line 1844)
44724* __satfractunsdiuhq:                    Fixed-point fractional library routines.
44725                                                             (line 1838)
44726* __satfractunsdiuqq:                    Fixed-point fractional library routines.
44727                                                             (line 1836)
44728* __satfractunsdiusa:                    Fixed-point fractional library routines.
44729                                                             (line 1846)
44730* __satfractunsdiusq:                    Fixed-point fractional library routines.
44731                                                             (line 1840)
44732* __satfractunsdiuta:                    Fixed-point fractional library routines.
44733                                                             (line 1850)
44734* __satfractunshida:                     Fixed-point fractional library routines.
44735                                                             (line 1785)
44736* __satfractunshidq:                     Fixed-point fractional library routines.
44737                                                             (line 1781)
44738* __satfractunshiha:                     Fixed-point fractional library routines.
44739                                                             (line 1783)
44740* __satfractunshihq:                     Fixed-point fractional library routines.
44741                                                             (line 1779)
44742* __satfractunshiqq:                     Fixed-point fractional library routines.
44743                                                             (line 1778)
44744* __satfractunshisa:                     Fixed-point fractional library routines.
44745                                                             (line 1784)
44746* __satfractunshisq:                     Fixed-point fractional library routines.
44747                                                             (line 1780)
44748* __satfractunshita:                     Fixed-point fractional library routines.
44749                                                             (line 1786)
44750* __satfractunshiuda:                    Fixed-point fractional library routines.
44751                                                             (line 1800)
44752* __satfractunshiudq:                    Fixed-point fractional library routines.
44753                                                             (line 1794)
44754* __satfractunshiuha:                    Fixed-point fractional library routines.
44755                                                             (line 1796)
44756* __satfractunshiuhq:                    Fixed-point fractional library routines.
44757                                                             (line 1790)
44758* __satfractunshiuqq:                    Fixed-point fractional library routines.
44759                                                             (line 1788)
44760* __satfractunshiusa:                    Fixed-point fractional library routines.
44761                                                             (line 1798)
44762* __satfractunshiusq:                    Fixed-point fractional library routines.
44763                                                             (line 1792)
44764* __satfractunshiuta:                    Fixed-point fractional library routines.
44765                                                             (line 1802)
44766* __satfractunsqida:                     Fixed-point fractional library routines.
44767                                                             (line 1759)
44768* __satfractunsqidq:                     Fixed-point fractional library routines.
44769                                                             (line 1755)
44770* __satfractunsqiha:                     Fixed-point fractional library routines.
44771                                                             (line 1757)
44772* __satfractunsqihq:                     Fixed-point fractional library routines.
44773                                                             (line 1753)
44774* __satfractunsqiqq:                     Fixed-point fractional library routines.
44775                                                             (line 1752)
44776* __satfractunsqisa:                     Fixed-point fractional library routines.
44777                                                             (line 1758)
44778* __satfractunsqisq:                     Fixed-point fractional library routines.
44779                                                             (line 1754)
44780* __satfractunsqita:                     Fixed-point fractional library routines.
44781                                                             (line 1760)
44782* __satfractunsqiuda:                    Fixed-point fractional library routines.
44783                                                             (line 1774)
44784* __satfractunsqiudq:                    Fixed-point fractional library routines.
44785                                                             (line 1768)
44786* __satfractunsqiuha:                    Fixed-point fractional library routines.
44787                                                             (line 1770)
44788* __satfractunsqiuhq:                    Fixed-point fractional library routines.
44789                                                             (line 1764)
44790* __satfractunsqiuqq:                    Fixed-point fractional library routines.
44791                                                             (line 1762)
44792* __satfractunsqiusa:                    Fixed-point fractional library routines.
44793                                                             (line 1772)
44794* __satfractunsqiusq:                    Fixed-point fractional library routines.
44795                                                             (line 1766)
44796* __satfractunsqiuta:                    Fixed-point fractional library routines.
44797                                                             (line 1776)
44798* __satfractunssida:                     Fixed-point fractional library routines.
44799                                                             (line 1810)
44800* __satfractunssidq:                     Fixed-point fractional library routines.
44801                                                             (line 1807)
44802* __satfractunssiha:                     Fixed-point fractional library routines.
44803                                                             (line 1808)
44804* __satfractunssihq:                     Fixed-point fractional library routines.
44805                                                             (line 1805)
44806* __satfractunssiqq:                     Fixed-point fractional library routines.
44807                                                             (line 1804)
44808* __satfractunssisa:                     Fixed-point fractional library routines.
44809                                                             (line 1809)
44810* __satfractunssisq:                     Fixed-point fractional library routines.
44811                                                             (line 1806)
44812* __satfractunssita:                     Fixed-point fractional library routines.
44813                                                             (line 1811)
44814* __satfractunssiuda:                    Fixed-point fractional library routines.
44815                                                             (line 1822)
44816* __satfractunssiudq:                    Fixed-point fractional library routines.
44817                                                             (line 1817)
44818* __satfractunssiuha:                    Fixed-point fractional library routines.
44819                                                             (line 1819)
44820* __satfractunssiuhq:                    Fixed-point fractional library routines.
44821                                                             (line 1814)
44822* __satfractunssiuqq:                    Fixed-point fractional library routines.
44823                                                             (line 1812)
44824* __satfractunssiusa:                    Fixed-point fractional library routines.
44825                                                             (line 1821)
44826* __satfractunssiusq:                    Fixed-point fractional library routines.
44827                                                             (line 1815)
44828* __satfractunssiuta:                    Fixed-point fractional library routines.
44829                                                             (line 1824)
44830* __satfractunstida:                     Fixed-point fractional library routines.
44831                                                             (line 1862)
44832* __satfractunstidq:                     Fixed-point fractional library routines.
44833                                                             (line 1857)
44834* __satfractunstiha:                     Fixed-point fractional library routines.
44835                                                             (line 1859)
44836* __satfractunstihq:                     Fixed-point fractional library routines.
44837                                                             (line 1854)
44838* __satfractunstiqq:                     Fixed-point fractional library routines.
44839                                                             (line 1852)
44840* __satfractunstisa:                     Fixed-point fractional library routines.
44841                                                             (line 1861)
44842* __satfractunstisq:                     Fixed-point fractional library routines.
44843                                                             (line 1855)
44844* __satfractunstita:                     Fixed-point fractional library routines.
44845                                                             (line 1864)
44846* __satfractunstiuda:                    Fixed-point fractional library routines.
44847                                                             (line 1878)
44848* __satfractunstiudq:                    Fixed-point fractional library routines.
44849                                                             (line 1872)
44850* __satfractunstiuha:                    Fixed-point fractional library routines.
44851                                                             (line 1874)
44852* __satfractunstiuhq:                    Fixed-point fractional library routines.
44853                                                             (line 1868)
44854* __satfractunstiuqq:                    Fixed-point fractional library routines.
44855                                                             (line 1866)
44856* __satfractunstiusa:                    Fixed-point fractional library routines.
44857                                                             (line 1876)
44858* __satfractunstiusq:                    Fixed-point fractional library routines.
44859                                                             (line 1870)
44860* __satfractunstiuta:                    Fixed-point fractional library routines.
44861                                                             (line 1880)
44862* __satfractuqqda:                       Fixed-point fractional library routines.
44863                                                             (line 1199)
44864* __satfractuqqdq:                       Fixed-point fractional library routines.
44865                                                             (line 1194)
44866* __satfractuqqha:                       Fixed-point fractional library routines.
44867                                                             (line 1196)
44868* __satfractuqqhq:                       Fixed-point fractional library routines.
44869                                                             (line 1191)
44870* __satfractuqqqq:                       Fixed-point fractional library routines.
44871                                                             (line 1189)
44872* __satfractuqqsa:                       Fixed-point fractional library routines.
44873                                                             (line 1198)
44874* __satfractuqqsq:                       Fixed-point fractional library routines.
44875                                                             (line 1192)
44876* __satfractuqqta:                       Fixed-point fractional library routines.
44877                                                             (line 1201)
44878* __satfractuqquda:                      Fixed-point fractional library routines.
44879                                                             (line 1213)
44880* __satfractuqqudq2:                     Fixed-point fractional library routines.
44881                                                             (line 1207)
44882* __satfractuqquha:                      Fixed-point fractional library routines.
44883                                                             (line 1209)
44884* __satfractuqquhq2:                     Fixed-point fractional library routines.
44885                                                             (line 1203)
44886* __satfractuqqusa:                      Fixed-point fractional library routines.
44887                                                             (line 1211)
44888* __satfractuqqusq2:                     Fixed-point fractional library routines.
44889                                                             (line 1205)
44890* __satfractuqquta:                      Fixed-point fractional library routines.
44891                                                             (line 1215)
44892* __satfractusada:                       Fixed-point fractional library routines.
44893                                                             (line 1326)
44894* __satfractusadq:                       Fixed-point fractional library routines.
44895                                                             (line 1323)
44896* __satfractusaha:                       Fixed-point fractional library routines.
44897                                                             (line 1324)
44898* __satfractusahq:                       Fixed-point fractional library routines.
44899                                                             (line 1321)
44900* __satfractusaqq:                       Fixed-point fractional library routines.
44901                                                             (line 1320)
44902* __satfractusasa:                       Fixed-point fractional library routines.
44903                                                             (line 1325)
44904* __satfractusasq:                       Fixed-point fractional library routines.
44905                                                             (line 1322)
44906* __satfractusata:                       Fixed-point fractional library routines.
44907                                                             (line 1327)
44908* __satfractusauda2:                     Fixed-point fractional library routines.
44909                                                             (line 1337)
44910* __satfractusaudq:                      Fixed-point fractional library routines.
44911                                                             (line 1333)
44912* __satfractusauha2:                     Fixed-point fractional library routines.
44913                                                             (line 1335)
44914* __satfractusauhq:                      Fixed-point fractional library routines.
44915                                                             (line 1330)
44916* __satfractusauqq:                      Fixed-point fractional library routines.
44917                                                             (line 1328)
44918* __satfractusausq:                      Fixed-point fractional library routines.
44919                                                             (line 1331)
44920* __satfractusauta2:                     Fixed-point fractional library routines.
44921                                                             (line 1339)
44922* __satfractusqda:                       Fixed-point fractional library routines.
44923                                                             (line 1247)
44924* __satfractusqdq:                       Fixed-point fractional library routines.
44925                                                             (line 1242)
44926* __satfractusqha:                       Fixed-point fractional library routines.
44927                                                             (line 1244)
44928* __satfractusqhq:                       Fixed-point fractional library routines.
44929                                                             (line 1240)
44930* __satfractusqqq:                       Fixed-point fractional library routines.
44931                                                             (line 1238)
44932* __satfractusqsa:                       Fixed-point fractional library routines.
44933                                                             (line 1246)
44934* __satfractusqsq:                       Fixed-point fractional library routines.
44935                                                             (line 1241)
44936* __satfractusqta:                       Fixed-point fractional library routines.
44937                                                             (line 1248)
44938* __satfractusquda:                      Fixed-point fractional library routines.
44939                                                             (line 1260)
44940* __satfractusqudq2:                     Fixed-point fractional library routines.
44941                                                             (line 1254)
44942* __satfractusquha:                      Fixed-point fractional library routines.
44943                                                             (line 1256)
44944* __satfractusquhq2:                     Fixed-point fractional library routines.
44945                                                             (line 1252)
44946* __satfractusquqq2:                     Fixed-point fractional library routines.
44947                                                             (line 1250)
44948* __satfractusqusa:                      Fixed-point fractional library routines.
44949                                                             (line 1258)
44950* __satfractusquta:                      Fixed-point fractional library routines.
44951                                                             (line 1262)
44952* __satfractutada:                       Fixed-point fractional library routines.
44953                                                             (line 1377)
44954* __satfractutadq:                       Fixed-point fractional library routines.
44955                                                             (line 1372)
44956* __satfractutaha:                       Fixed-point fractional library routines.
44957                                                             (line 1374)
44958* __satfractutahq:                       Fixed-point fractional library routines.
44959                                                             (line 1369)
44960* __satfractutaqq:                       Fixed-point fractional library routines.
44961                                                             (line 1367)
44962* __satfractutasa:                       Fixed-point fractional library routines.
44963                                                             (line 1376)
44964* __satfractutasq:                       Fixed-point fractional library routines.
44965                                                             (line 1370)
44966* __satfractutata:                       Fixed-point fractional library routines.
44967                                                             (line 1379)
44968* __satfractutauda2:                     Fixed-point fractional library routines.
44969                                                             (line 1393)
44970* __satfractutaudq:                      Fixed-point fractional library routines.
44971                                                             (line 1387)
44972* __satfractutauha2:                     Fixed-point fractional library routines.
44973                                                             (line 1389)
44974* __satfractutauhq:                      Fixed-point fractional library routines.
44975                                                             (line 1383)
44976* __satfractutauqq:                      Fixed-point fractional library routines.
44977                                                             (line 1381)
44978* __satfractutausa2:                     Fixed-point fractional library routines.
44979                                                             (line 1391)
44980* __satfractutausq:                      Fixed-point fractional library routines.
44981                                                             (line 1385)
44982* __splitstack_find:                     Miscellaneous routines.
44983                                                             (line   15)
44984* __ssaddda3:                            Fixed-point fractional library routines.
44985                                                             (line   66)
44986* __ssadddq3:                            Fixed-point fractional library routines.
44987                                                             (line   61)
44988* __ssaddha3:                            Fixed-point fractional library routines.
44989                                                             (line   63)
44990* __ssaddhq3:                            Fixed-point fractional library routines.
44991                                                             (line   59)
44992* __ssaddqq3:                            Fixed-point fractional library routines.
44993                                                             (line   57)
44994* __ssaddsa3:                            Fixed-point fractional library routines.
44995                                                             (line   65)
44996* __ssaddsq3:                            Fixed-point fractional library routines.
44997                                                             (line   60)
44998* __ssaddta3:                            Fixed-point fractional library routines.
44999                                                             (line   67)
45000* __ssashlda3:                           Fixed-point fractional library routines.
45001                                                             (line  401)
45002* __ssashldq3:                           Fixed-point fractional library routines.
45003                                                             (line  397)
45004* __ssashlha3:                           Fixed-point fractional library routines.
45005                                                             (line  399)
45006* __ssashlhq3:                           Fixed-point fractional library routines.
45007                                                             (line  395)
45008* __ssashlsa3:                           Fixed-point fractional library routines.
45009                                                             (line  400)
45010* __ssashlsq3:                           Fixed-point fractional library routines.
45011                                                             (line  396)
45012* __ssashlta3:                           Fixed-point fractional library routines.
45013                                                             (line  402)
45014* __ssdivda3:                            Fixed-point fractional library routines.
45015                                                             (line  260)
45016* __ssdivdq3:                            Fixed-point fractional library routines.
45017                                                             (line  255)
45018* __ssdivha3:                            Fixed-point fractional library routines.
45019                                                             (line  257)
45020* __ssdivhq3:                            Fixed-point fractional library routines.
45021                                                             (line  253)
45022* __ssdivqq3:                            Fixed-point fractional library routines.
45023                                                             (line  251)
45024* __ssdivsa3:                            Fixed-point fractional library routines.
45025                                                             (line  259)
45026* __ssdivsq3:                            Fixed-point fractional library routines.
45027                                                             (line  254)
45028* __ssdivta3:                            Fixed-point fractional library routines.
45029                                                             (line  261)
45030* __ssmulda3:                            Fixed-point fractional library routines.
45031                                                             (line  192)
45032* __ssmuldq3:                            Fixed-point fractional library routines.
45033                                                             (line  187)
45034* __ssmulha3:                            Fixed-point fractional library routines.
45035                                                             (line  189)
45036* __ssmulhq3:                            Fixed-point fractional library routines.
45037                                                             (line  185)
45038* __ssmulqq3:                            Fixed-point fractional library routines.
45039                                                             (line  183)
45040* __ssmulsa3:                            Fixed-point fractional library routines.
45041                                                             (line  191)
45042* __ssmulsq3:                            Fixed-point fractional library routines.
45043                                                             (line  186)
45044* __ssmulta3:                            Fixed-point fractional library routines.
45045                                                             (line  193)
45046* __ssnegda2:                            Fixed-point fractional library routines.
45047                                                             (line  315)
45048* __ssnegdq2:                            Fixed-point fractional library routines.
45049                                                             (line  312)
45050* __ssnegha2:                            Fixed-point fractional library routines.
45051                                                             (line  313)
45052* __ssneghq2:                            Fixed-point fractional library routines.
45053                                                             (line  310)
45054* __ssnegqq2:                            Fixed-point fractional library routines.
45055                                                             (line  309)
45056* __ssnegsa2:                            Fixed-point fractional library routines.
45057                                                             (line  314)
45058* __ssnegsq2:                            Fixed-point fractional library routines.
45059                                                             (line  311)
45060* __ssnegta2:                            Fixed-point fractional library routines.
45061                                                             (line  316)
45062* __sssubda3:                            Fixed-point fractional library routines.
45063                                                             (line  128)
45064* __sssubdq3:                            Fixed-point fractional library routines.
45065                                                             (line  123)
45066* __sssubha3:                            Fixed-point fractional library routines.
45067                                                             (line  125)
45068* __sssubhq3:                            Fixed-point fractional library routines.
45069                                                             (line  121)
45070* __sssubqq3:                            Fixed-point fractional library routines.
45071                                                             (line  119)
45072* __sssubsa3:                            Fixed-point fractional library routines.
45073                                                             (line  127)
45074* __sssubsq3:                            Fixed-point fractional library routines.
45075                                                             (line  122)
45076* __sssubta3:                            Fixed-point fractional library routines.
45077                                                             (line  129)
45078* __subda3:                              Fixed-point fractional library routines.
45079                                                             (line  106)
45080* __subdf3:                              Soft float library routines.
45081                                                             (line   30)
45082* __subdq3:                              Fixed-point fractional library routines.
45083                                                             (line   93)
45084* __subha3:                              Fixed-point fractional library routines.
45085                                                             (line  103)
45086* __subhq3:                              Fixed-point fractional library routines.
45087                                                             (line   91)
45088* __subqq3:                              Fixed-point fractional library routines.
45089                                                             (line   89)
45090* __subsa3:                              Fixed-point fractional library routines.
45091                                                             (line  105)
45092* __subsf3:                              Soft float library routines.
45093                                                             (line   29)
45094* __subsq3:                              Fixed-point fractional library routines.
45095                                                             (line   92)
45096* __subta3:                              Fixed-point fractional library routines.
45097                                                             (line  107)
45098* __subtf3:                              Soft float library routines.
45099                                                             (line   31)
45100* __subuda3:                             Fixed-point fractional library routines.
45101                                                             (line  113)
45102* __subudq3:                             Fixed-point fractional library routines.
45103                                                             (line  101)
45104* __subuha3:                             Fixed-point fractional library routines.
45105                                                             (line  109)
45106* __subuhq3:                             Fixed-point fractional library routines.
45107                                                             (line   97)
45108* __subuqq3:                             Fixed-point fractional library routines.
45109                                                             (line   95)
45110* __subusa3:                             Fixed-point fractional library routines.
45111                                                             (line  111)
45112* __subusq3:                             Fixed-point fractional library routines.
45113                                                             (line   99)
45114* __subuta3:                             Fixed-point fractional library routines.
45115                                                             (line  115)
45116* __subvdi3:                             Integer library routines.
45117                                                             (line  122)
45118* __subvsi3:                             Integer library routines.
45119                                                             (line  121)
45120* __subxf3:                              Soft float library routines.
45121                                                             (line   33)
45122* __truncdfsf2:                          Soft float library routines.
45123                                                             (line   75)
45124* __trunctfdf2:                          Soft float library routines.
45125                                                             (line   72)
45126* __trunctfsf2:                          Soft float library routines.
45127                                                             (line   74)
45128* __truncxfdf2:                          Soft float library routines.
45129                                                             (line   71)
45130* __truncxfsf2:                          Soft float library routines.
45131                                                             (line   73)
45132* __ucmpdi2:                             Integer library routines.
45133                                                             (line   92)
45134* __ucmpti2:                             Integer library routines.
45135                                                             (line   93)
45136* __udivdi3:                             Integer library routines.
45137                                                             (line   52)
45138* __udivmoddi4:                          Integer library routines.
45139                                                             (line   59)
45140* __udivmodti4:                          Integer library routines.
45141                                                             (line   61)
45142* __udivsi3:                             Integer library routines.
45143                                                             (line   50)
45144* __udivti3:                             Integer library routines.
45145                                                             (line   54)
45146* __udivuda3:                            Fixed-point fractional library routines.
45147                                                             (line  244)
45148* __udivudq3:                            Fixed-point fractional library routines.
45149                                                             (line  238)
45150* __udivuha3:                            Fixed-point fractional library routines.
45151                                                             (line  240)
45152* __udivuhq3:                            Fixed-point fractional library routines.
45153                                                             (line  234)
45154* __udivuqq3:                            Fixed-point fractional library routines.
45155                                                             (line  232)
45156* __udivusa3:                            Fixed-point fractional library routines.
45157                                                             (line  242)
45158* __udivusq3:                            Fixed-point fractional library routines.
45159                                                             (line  236)
45160* __udivuta3:                            Fixed-point fractional library routines.
45161                                                             (line  246)
45162* __umoddi3:                             Integer library routines.
45163                                                             (line   69)
45164* __umodsi3:                             Integer library routines.
45165                                                             (line   67)
45166* __umodti3:                             Integer library routines.
45167                                                             (line   71)
45168* __unorddf2:                            Soft float library routines.
45169                                                             (line  172)
45170* __unordsf2:                            Soft float library routines.
45171                                                             (line  171)
45172* __unordtf2:                            Soft float library routines.
45173                                                             (line  173)
45174* __usadduda3:                           Fixed-point fractional library routines.
45175                                                             (line   83)
45176* __usaddudq3:                           Fixed-point fractional library routines.
45177                                                             (line   77)
45178* __usadduha3:                           Fixed-point fractional library routines.
45179                                                             (line   79)
45180* __usadduhq3:                           Fixed-point fractional library routines.
45181                                                             (line   73)
45182* __usadduqq3:                           Fixed-point fractional library routines.
45183                                                             (line   71)
45184* __usaddusa3:                           Fixed-point fractional library routines.
45185                                                             (line   81)
45186* __usaddusq3:                           Fixed-point fractional library routines.
45187                                                             (line   75)
45188* __usadduta3:                           Fixed-point fractional library routines.
45189                                                             (line   85)
45190* __usashluda3:                          Fixed-point fractional library routines.
45191                                                             (line  419)
45192* __usashludq3:                          Fixed-point fractional library routines.
45193                                                             (line  413)
45194* __usashluha3:                          Fixed-point fractional library routines.
45195                                                             (line  415)
45196* __usashluhq3:                          Fixed-point fractional library routines.
45197                                                             (line  409)
45198* __usashluqq3:                          Fixed-point fractional library routines.
45199                                                             (line  407)
45200* __usashlusa3:                          Fixed-point fractional library routines.
45201                                                             (line  417)
45202* __usashlusq3:                          Fixed-point fractional library routines.
45203                                                             (line  411)
45204* __usashluta3:                          Fixed-point fractional library routines.
45205                                                             (line  421)
45206* __usdivuda3:                           Fixed-point fractional library routines.
45207                                                             (line  278)
45208* __usdivudq3:                           Fixed-point fractional library routines.
45209                                                             (line  272)
45210* __usdivuha3:                           Fixed-point fractional library routines.
45211                                                             (line  274)
45212* __usdivuhq3:                           Fixed-point fractional library routines.
45213                                                             (line  268)
45214* __usdivuqq3:                           Fixed-point fractional library routines.
45215                                                             (line  266)
45216* __usdivusa3:                           Fixed-point fractional library routines.
45217                                                             (line  276)
45218* __usdivusq3:                           Fixed-point fractional library routines.
45219                                                             (line  270)
45220* __usdivuta3:                           Fixed-point fractional library routines.
45221                                                             (line  280)
45222* __usmuluda3:                           Fixed-point fractional library routines.
45223                                                             (line  210)
45224* __usmuludq3:                           Fixed-point fractional library routines.
45225                                                             (line  204)
45226* __usmuluha3:                           Fixed-point fractional library routines.
45227                                                             (line  206)
45228* __usmuluhq3:                           Fixed-point fractional library routines.
45229                                                             (line  200)
45230* __usmuluqq3:                           Fixed-point fractional library routines.
45231                                                             (line  198)
45232* __usmulusa3:                           Fixed-point fractional library routines.
45233                                                             (line  208)
45234* __usmulusq3:                           Fixed-point fractional library routines.
45235                                                             (line  202)
45236* __usmuluta3:                           Fixed-point fractional library routines.
45237                                                             (line  212)
45238* __usneguda2:                           Fixed-point fractional library routines.
45239                                                             (line  329)
45240* __usnegudq2:                           Fixed-point fractional library routines.
45241                                                             (line  324)
45242* __usneguha2:                           Fixed-point fractional library routines.
45243                                                             (line  326)
45244* __usneguhq2:                           Fixed-point fractional library routines.
45245                                                             (line  321)
45246* __usneguqq2:                           Fixed-point fractional library routines.
45247                                                             (line  319)
45248* __usnegusa2:                           Fixed-point fractional library routines.
45249                                                             (line  328)
45250* __usnegusq2:                           Fixed-point fractional library routines.
45251                                                             (line  322)
45252* __usneguta2:                           Fixed-point fractional library routines.
45253                                                             (line  331)
45254* __ussubuda3:                           Fixed-point fractional library routines.
45255                                                             (line  146)
45256* __ussubudq3:                           Fixed-point fractional library routines.
45257                                                             (line  140)
45258* __ussubuha3:                           Fixed-point fractional library routines.
45259                                                             (line  142)
45260* __ussubuhq3:                           Fixed-point fractional library routines.
45261                                                             (line  136)
45262* __ussubuqq3:                           Fixed-point fractional library routines.
45263                                                             (line  134)
45264* __ussubusa3:                           Fixed-point fractional library routines.
45265                                                             (line  144)
45266* __ussubusq3:                           Fixed-point fractional library routines.
45267                                                             (line  138)
45268* __ussubuta3:                           Fixed-point fractional library routines.
45269                                                             (line  148)
45270* abort:                                 Portability.        (line   20)
45271* abs:                                   Arithmetic.         (line  201)
45272* 'abs' and attributes:                  Expressions.        (line   83)
45273* absence_set:                           Processor pipeline description.
45274                                                             (line  223)
45275* 'absM2' instruction pattern:           Standard Names.     (line  529)
45276* absolute value:                        Arithmetic.         (line  201)
45277* ABS_EXPR:                              Unary and Binary Expressions.
45278                                                             (line    6)
45279* access to operands:                    Accessors.          (line    6)
45280* access to special operands:            Special Accessors.  (line    6)
45281* accessors:                             Accessors.          (line    6)
45282* ACCUMULATE_OUTGOING_ARGS:              Stack Arguments.    (line   48)
45283* 'ACCUMULATE_OUTGOING_ARGS' and stack frames: Function Entry.
45284                                                             (line  133)
45285* ACCUM_TYPE_SIZE:                       Type Layout.        (line   87)
45286* ADA_LONG_TYPE_SIZE:                    Type Layout.        (line   25)
45287* Adding a new GIMPLE statement code:    Adding a new GIMPLE statement code.
45288                                                             (line    6)
45289* ADDITIONAL_REGISTER_NAMES:             Instruction Output. (line   14)
45290* 'addM3' instruction pattern:           Standard Names.     (line  260)
45291* 'addMODEcc' instruction pattern:       Standard Names.     (line 1044)
45292* address constraints:                   Simple Constraints. (line  162)
45293* addressing modes:                      Addressing Modes.   (line    6)
45294* address_operand:                       Machine-Independent Predicates.
45295                                                             (line   62)
45296* address_operand <1>:                   Simple Constraints. (line  166)
45297* addr_diff_vec:                         Side Effects.       (line  306)
45298* 'addr_diff_vec', length of:            Insn Lengths.       (line   26)
45299* ADDR_EXPR:                             Storage References. (line    6)
45300* addr_vec:                              Side Effects.       (line  301)
45301* 'addr_vec', length of:                 Insn Lengths.       (line   26)
45302* ADJUST_FIELD_ALIGN:                    Storage Layout.     (line  195)
45303* ADJUST_INSN_LENGTH:                    Insn Lengths.       (line   35)
45304* ADJUST_REG_ALLOC_ORDER:                Allocation Order.   (line   22)
45305* aggregates as return values:           Aggregate Return.   (line    6)
45306* alias:                                 Alias analysis.     (line    6)
45307* 'allocate_stack' instruction pattern:  Standard Names.     (line 1364)
45308* ALL_REGS:                              Register Classes.   (line   17)
45309* alternate entry points:                Insns.              (line  146)
45310* anchored addresses:                    Anchored Addresses. (line    6)
45311* and:                                   Arithmetic.         (line  159)
45312* 'and' and attributes:                  Expressions.        (line   50)
45313* 'and', canonicalization of:            Insn Canonicalizations.
45314                                                             (line   51)
45315* 'andM3' instruction pattern:           Standard Names.     (line  266)
45316* annotations:                           Annotations.        (line    6)
45317* APPLY_RESULT_SIZE:                     Scalar Return.      (line  112)
45318* ARGS_GROW_DOWNWARD:                    Frame Layout.       (line   34)
45319* argument passing:                      Interface.          (line   36)
45320* arguments in registers:                Register Arguments. (line    6)
45321* arguments on stack:                    Stack Arguments.    (line    6)
45322* ARG_POINTER_CFA_OFFSET:                Frame Layout.       (line  192)
45323* ARG_POINTER_REGNUM:                    Frame Registers.    (line   40)
45324* 'ARG_POINTER_REGNUM' and virtual registers: Regs and Memory.
45325                                                             (line   65)
45326* arg_pointer_rtx:                       Frame Registers.    (line  104)
45327* arithmetic library:                    Soft float library routines.
45328                                                             (line    6)
45329* arithmetic shift:                      Arithmetic.         (line  174)
45330* arithmetic shift with signed saturation: Arithmetic.       (line  174)
45331* arithmetic shift with unsigned saturation: Arithmetic.     (line  174)
45332* arithmetic, in RTL:                    Arithmetic.         (line    6)
45333* ARITHMETIC_TYPE_P:                     Types for C++.      (line   59)
45334* array:                                 Types.              (line    6)
45335* ARRAY_RANGE_REF:                       Storage References. (line    6)
45336* ARRAY_REF:                             Storage References. (line    6)
45337* ARRAY_TYPE:                            Types.              (line    6)
45338* ashift:                                Arithmetic.         (line  174)
45339* 'ashift' and attributes:               Expressions.        (line   83)
45340* ashiftrt:                              Arithmetic.         (line  191)
45341* 'ashiftrt' and attributes:             Expressions.        (line   83)
45342* 'ashlM3' instruction pattern:          Standard Names.     (line  504)
45343* 'ashrM3' instruction pattern:          Standard Names.     (line  514)
45344* ASM_APP_OFF:                           File Framework.     (line   76)
45345* ASM_APP_ON:                            File Framework.     (line   69)
45346* ASM_COMMENT_START:                     File Framework.     (line   64)
45347* ASM_DECLARE_FUNCTION_NAME:             Label Output.       (line  108)
45348* ASM_DECLARE_FUNCTION_SIZE:             Label Output.       (line  123)
45349* ASM_DECLARE_OBJECT_NAME:               Label Output.       (line  136)
45350* ASM_DECLARE_REGISTER_GLOBAL:           Label Output.       (line  164)
45351* ASM_FINAL_SPEC:                        Driver.             (line   81)
45352* ASM_FINISH_DECLARE_OBJECT:             Label Output.       (line  172)
45353* ASM_FORMAT_PRIVATE_NAME:               Label Output.       (line  391)
45354* asm_fprintf:                           Instruction Output. (line  150)
45355* ASM_FPRINTF_EXTENSIONS:                Instruction Output. (line  160)
45356* ASM_GENERATE_INTERNAL_LABEL:           Label Output.       (line  375)
45357* asm_input:                             Side Effects.       (line  288)
45358* 'asm_input' and '/v':                  Flags.              (line   76)
45359* ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX:     Exception Handling. (line   80)
45360* asm_noperands:                         Insns.              (line  311)
45361* ASM_NO_SKIP_IN_TEXT:                   Alignment Output.   (line   78)
45362* 'asm_operands' and '/v':               Flags.              (line   76)
45363* 'asm_operands', RTL sharing:           Sharing.            (line   45)
45364* 'asm_operands', usage:                 Assembler.          (line    6)
45365* ASM_OUTPUT_ADDR_DIFF_ELT:              Dispatch Tables.    (line    8)
45366* ASM_OUTPUT_ADDR_VEC_ELT:               Dispatch Tables.    (line   25)
45367* ASM_OUTPUT_ALIGN:                      Alignment Output.   (line   85)
45368* ASM_OUTPUT_ALIGNED_BSS:                Uninitialized Data. (line   45)
45369* ASM_OUTPUT_ALIGNED_COMMON:             Uninitialized Data. (line   29)
45370* ASM_OUTPUT_ALIGNED_DECL_COMMON:        Uninitialized Data. (line   36)
45371* ASM_OUTPUT_ALIGNED_DECL_LOCAL:         Uninitialized Data. (line   89)
45372* ASM_OUTPUT_ALIGNED_LOCAL:              Uninitialized Data. (line   82)
45373* ASM_OUTPUT_ALIGN_WITH_NOP:             Alignment Output.   (line   90)
45374* ASM_OUTPUT_ASCII:                      Data Output.        (line   50)
45375* ASM_OUTPUT_CASE_END:                   Dispatch Tables.    (line   50)
45376* ASM_OUTPUT_CASE_LABEL:                 Dispatch Tables.    (line   37)
45377* ASM_OUTPUT_COMMON:                     Uninitialized Data. (line    9)
45378* ASM_OUTPUT_DEBUG_LABEL:                Label Output.       (line  363)
45379* ASM_OUTPUT_DEF:                        Label Output.       (line  412)
45380* ASM_OUTPUT_DEF_FROM_DECLS:             Label Output.       (line  419)
45381* ASM_OUTPUT_DWARF_DELTA:                SDB and DWARF.      (line   73)
45382* ASM_OUTPUT_DWARF_OFFSET:               SDB and DWARF.      (line   82)
45383* ASM_OUTPUT_DWARF_PCREL:                SDB and DWARF.      (line   88)
45384* ASM_OUTPUT_DWARF_TABLE_REF:            SDB and DWARF.      (line   93)
45385* ASM_OUTPUT_DWARF_VMS_DELTA:            SDB and DWARF.      (line   77)
45386* ASM_OUTPUT_EXTERNAL:                   Label Output.       (line  292)
45387* ASM_OUTPUT_FDESC:                      Data Output.        (line   59)
45388* ASM_OUTPUT_FUNCTION_LABEL:             Label Output.       (line   16)
45389* ASM_OUTPUT_INTERNAL_LABEL:             Label Output.       (line   27)
45390* ASM_OUTPUT_LABEL:                      Label Output.       (line    8)
45391* ASM_OUTPUT_LABELREF:                   Label Output.       (line  314)
45392* ASM_OUTPUT_LABEL_REF:                  Label Output.       (line  336)
45393* ASM_OUTPUT_LOCAL:                      Uninitialized Data. (line   69)
45394* ASM_OUTPUT_MAX_SKIP_ALIGN:             Alignment Output.   (line   94)
45395* ASM_OUTPUT_MEASURED_SIZE:              Label Output.       (line   51)
45396* ASM_OUTPUT_OPCODE:                     Instruction Output. (line   35)
45397* ASM_OUTPUT_POOL_EPILOGUE:              Data Output.        (line  108)
45398* ASM_OUTPUT_POOL_PROLOGUE:              Data Output.        (line   72)
45399* ASM_OUTPUT_REG_POP:                    Instruction Output. (line  204)
45400* ASM_OUTPUT_REG_PUSH:                   Instruction Output. (line  199)
45401* ASM_OUTPUT_SIZE_DIRECTIVE:             Label Output.       (line   45)
45402* ASM_OUTPUT_SKIP:                       Alignment Output.   (line   72)
45403* ASM_OUTPUT_SOURCE_FILENAME:            File Framework.     (line   83)
45404* ASM_OUTPUT_SPECIAL_POOL_ENTRY:         Data Output.        (line   83)
45405* ASM_OUTPUT_SYMBOL_REF:                 Label Output.       (line  329)
45406* ASM_OUTPUT_TYPE_DIRECTIVE:             Label Output.       (line   98)
45407* ASM_OUTPUT_WEAKREF:                    Label Output.       (line  224)
45408* ASM_OUTPUT_WEAK_ALIAS:                 Label Output.       (line  438)
45409* ASM_PREFERRED_EH_DATA_FORMAT:          Exception Handling. (line   66)
45410* ASM_SPEC:                              Driver.             (line   73)
45411* ASM_STABD_OP:                          DBX Options.        (line   34)
45412* ASM_STABN_OP:                          DBX Options.        (line   41)
45413* ASM_STABS_OP:                          DBX Options.        (line   28)
45414* ASM_WEAKEN_DECL:                       Label Output.       (line  216)
45415* ASM_WEAKEN_LABEL:                      Label Output.       (line  203)
45416* assembler format:                      File Framework.     (line    6)
45417* assembler instructions in RTL:         Assembler.          (line    6)
45418* ASSEMBLER_DIALECT:                     Instruction Output. (line  172)
45419* assemble_name:                         Label Output.       (line    8)
45420* assemble_name_raw:                     Label Output.       (line   27)
45421* assigning attribute values to insns:   Tagging Insns.      (line    6)
45422* ASSUME_EXTENDED_UNWIND_CONTEXT:        Frame Registers.    (line  165)
45423* asterisk in template:                  Output Statement.   (line   29)
45424* AS_NEEDS_DASH_FOR_PIPED_INPUT:         Driver.             (line   88)
45425* 'atan2M3' instruction pattern:         Standard Names.     (line  612)
45426* atomic:                                GTY Options.        (line  266)
45427* 'atomic_addMODE' instruction pattern:  Standard Names.     (line 1775)
45428* 'atomic_add_fetchMODE' instruction pattern: Standard Names.
45429                                                             (line 1806)
45430* 'atomic_andMODE' instruction pattern:  Standard Names.     (line 1775)
45431* 'atomic_and_fetchMODE' instruction pattern: Standard Names.
45432                                                             (line 1806)
45433* 'atomic_compare_and_swapMODE' instruction pattern: Standard Names.
45434                                                             (line 1711)
45435* 'atomic_exchangeMODE' instruction pattern: Standard Names. (line 1763)
45436* 'atomic_fetch_addMODE' instruction pattern: Standard Names.
45437                                                             (line 1790)
45438* 'atomic_fetch_andMODE' instruction pattern: Standard Names.
45439                                                             (line 1790)
45440* 'atomic_fetch_nandMODE' instruction pattern: Standard Names.
45441                                                             (line 1790)
45442* 'atomic_fetch_orMODE' instruction pattern: Standard Names. (line 1790)
45443* 'atomic_fetch_subMODE' instruction pattern: Standard Names.
45444                                                             (line 1790)
45445* 'atomic_fetch_xorMODE' instruction pattern: Standard Names.
45446                                                             (line 1790)
45447* 'atomic_loadMODE' instruction pattern: Standard Names.     (line 1742)
45448* 'atomic_nandMODE' instruction pattern: Standard Names.     (line 1775)
45449* 'atomic_nand_fetchMODE' instruction pattern: Standard Names.
45450                                                             (line 1806)
45451* 'atomic_orMODE' instruction pattern:   Standard Names.     (line 1775)
45452* 'atomic_or_fetchMODE' instruction pattern: Standard Names. (line 1806)
45453* 'atomic_storeMODE' instruction pattern: Standard Names.    (line 1752)
45454* 'atomic_subMODE' instruction pattern:  Standard Names.     (line 1775)
45455* 'atomic_sub_fetchMODE' instruction pattern: Standard Names.
45456                                                             (line 1806)
45457* 'atomic_test_and_set' instruction pattern: Standard Names. (line 1824)
45458* 'atomic_xorMODE' instruction pattern:  Standard Names.     (line 1775)
45459* 'atomic_xor_fetchMODE' instruction pattern: Standard Names.
45460                                                             (line 1806)
45461* attr:                                  Expressions.        (line  163)
45462* attr <1>:                              Tagging Insns.      (line   54)
45463* attribute expressions:                 Expressions.        (line    6)
45464* attribute specifications:              Attr Example.       (line    6)
45465* attribute specifications example:      Attr Example.       (line    6)
45466* attributes:                            Attributes.         (line    6)
45467* attributes, defining:                  Defining Attributes.
45468                                                             (line    6)
45469* attributes, target-specific:           Target Attributes.  (line    6)
45470* ATTRIBUTE_ALIGNED_VALUE:               Storage Layout.     (line  177)
45471* attr_flag:                             Expressions.        (line  138)
45472* autoincrement addressing, availability: Portability.       (line   20)
45473* autoincrement/decrement addressing:    Simple Constraints. (line   30)
45474* automata_option:                       Processor pipeline description.
45475                                                             (line  304)
45476* automaton based pipeline description:  Processor pipeline description.
45477                                                             (line    6)
45478* automaton based pipeline description <1>: Processor pipeline description.
45479                                                             (line   49)
45480* automaton based scheduler:             Processor pipeline description.
45481                                                             (line    6)
45482* AVOID_CCMODE_COPIES:                   Values in Registers.
45483                                                             (line  150)
45484* backslash:                             Output Template.    (line   46)
45485* barrier:                               Insns.              (line  166)
45486* 'barrier' and '/f':                    Flags.              (line  107)
45487* 'barrier' and '/v':                    Flags.              (line   44)
45488* BASE_REG_CLASS:                        Register Classes.   (line  111)
45489* basic block:                           Basic Blocks.       (line    6)
45490* Basic Statements:                      Basic Statements.   (line    6)
45491* basic-block.h:                         Control Flow.       (line    6)
45492* basic_block:                           Basic Blocks.       (line    6)
45493* BASIC_BLOCK:                           Basic Blocks.       (line   14)
45494* BB_HEAD, BB_END:                       Maintaining the CFG.
45495                                                             (line   76)
45496* bb_seq:                                GIMPLE sequences.   (line   72)
45497* BIGGEST_ALIGNMENT:                     Storage Layout.     (line  167)
45498* BIGGEST_FIELD_ALIGNMENT:               Storage Layout.     (line  188)
45499* BImode:                                Machine Modes.      (line   22)
45500* BIND_EXPR:                             Unary and Binary Expressions.
45501                                                             (line    6)
45502* BINFO_TYPE:                            Classes.            (line    6)
45503* bit-fields:                            Bit-Fields.         (line    6)
45504* BITFIELD_NBYTES_LIMITED:               Storage Layout.     (line  390)
45505* BITS_BIG_ENDIAN:                       Storage Layout.     (line   11)
45506* 'BITS_BIG_ENDIAN', effect on 'sign_extract': Bit-Fields.   (line    8)
45507* BITS_PER_UNIT:                         Storage Layout.     (line   50)
45508* BITS_PER_WORD:                         Storage Layout.     (line   55)
45509* bitwise complement:                    Arithmetic.         (line  155)
45510* bitwise exclusive-or:                  Arithmetic.         (line  169)
45511* bitwise inclusive-or:                  Arithmetic.         (line  164)
45512* bitwise logical-and:                   Arithmetic.         (line  159)
45513* BIT_AND_EXPR:                          Unary and Binary Expressions.
45514                                                             (line    6)
45515* BIT_IOR_EXPR:                          Unary and Binary Expressions.
45516                                                             (line    6)
45517* BIT_NOT_EXPR:                          Unary and Binary Expressions.
45518                                                             (line    6)
45519* BIT_XOR_EXPR:                          Unary and Binary Expressions.
45520                                                             (line    6)
45521* BLKmode:                               Machine Modes.      (line  182)
45522* 'BLKmode', and function return values: Calls.              (line   23)
45523* 'blockage' instruction pattern:        Standard Names.     (line 1566)
45524* Blocks:                                Blocks.             (line    6)
45525* BLOCK_FOR_INSN, gimple_bb:             Maintaining the CFG.
45526                                                             (line   28)
45527* BLOCK_REG_PADDING:                     Register Arguments. (line  228)
45528* bool:                                  Misc.               (line  858)
45529* BOOLEAN_TYPE:                          Types.              (line    6)
45530* BOOL_TYPE_SIZE:                        Type Layout.        (line   43)
45531* branch prediction:                     Profile information.
45532                                                             (line   24)
45533* BRANCH_COST:                           Costs.              (line  104)
45534* break_out_memory_refs:                 Addressing Modes.   (line  134)
45535* BREAK_STMT:                            Statements for C++. (line    6)
45536* BSS_SECTION_ASM_OP:                    Sections.           (line   67)
45537* bswap:                                 Arithmetic.         (line  247)
45538* 'bswapM2' instruction pattern:         Standard Names.     (line  522)
45539* 'btruncM2' instruction pattern:        Standard Names.     (line  630)
45540* build0:                                Macros and Functions.
45541                                                             (line   16)
45542* build1:                                Macros and Functions.
45543                                                             (line   17)
45544* build2:                                Macros and Functions.
45545                                                             (line   18)
45546* build3:                                Macros and Functions.
45547                                                             (line   19)
45548* build4:                                Macros and Functions.
45549                                                             (line   20)
45550* build5:                                Macros and Functions.
45551                                                             (line   21)
45552* build6:                                Macros and Functions.
45553                                                             (line   22)
45554* 'builtin_longjmp' instruction pattern: Standard Names.     (line 1462)
45555* 'builtin_setjmp_receiver' instruction pattern: Standard Names.
45556                                                             (line 1452)
45557* 'builtin_setjmp_setup' instruction pattern: Standard Names.
45558                                                             (line 1441)
45559* BYTES_BIG_ENDIAN:                      Storage Layout.     (line   23)
45560* 'BYTES_BIG_ENDIAN', effect on 'subreg': Regs and Memory.   (line  219)
45561* byte_mode:                             Machine Modes.      (line  335)
45562* C statements for assembler output:     Output Statement.   (line    6)
45563* C99 math functions, implicit usage:    Library Calls.      (line   70)
45564* call:                                  Flags.              (line  221)
45565* call <1>:                              Side Effects.       (line   92)
45566* 'call' instruction pattern:            Standard Names.     (line 1101)
45567* 'call' usage:                          Calls.              (line   10)
45568* 'call', in 'call_insn':                Flags.              (line   33)
45569* 'call', in 'mem':                      Flags.              (line   81)
45570* call-clobbered register:               Register Basics.    (line   35)
45571* call-clobbered register <1>:           Register Basics.    (line   46)
45572* call-clobbered register <2>:           Register Basics.    (line   53)
45573* call-saved register:                   Register Basics.    (line   35)
45574* call-saved register <1>:               Register Basics.    (line   46)
45575* call-saved register <2>:               Register Basics.    (line   53)
45576* call-used register:                    Register Basics.    (line   35)
45577* call-used register <1>:                Register Basics.    (line   46)
45578* call-used register <2>:                Register Basics.    (line   53)
45579* CALLER_SAVE_PROFITABLE:                Caller Saves.       (line   10)
45580* calling conventions:                   Stack and Calling.  (line    6)
45581* calling functions in RTL:              Calls.              (line    6)
45582* CALL_EXPR:                             Unary and Binary Expressions.
45583                                                             (line    6)
45584* call_insn:                             Insns.              (line   95)
45585* 'call_insn' and '/c':                  Flags.              (line   33)
45586* 'call_insn' and '/f':                  Flags.              (line  107)
45587* 'call_insn' and '/i':                  Flags.              (line   24)
45588* 'call_insn' and '/j':                  Flags.              (line  161)
45589* 'call_insn' and '/s':                  Flags.              (line   49)
45590* 'call_insn' and '/s' <1>:              Flags.              (line  148)
45591* 'call_insn' and '/u':                  Flags.              (line   19)
45592* 'call_insn' and '/u' <1>:              Flags.              (line   39)
45593* 'call_insn' and '/u' or '/i':          Flags.              (line   29)
45594* 'call_insn' and '/v':                  Flags.              (line   44)
45595* CALL_INSN_FUNCTION_USAGE:              Insns.              (line  101)
45596* 'call_pop' instruction pattern:        Standard Names.     (line 1129)
45597* CALL_POPS_ARGS:                        Stack Arguments.    (line  132)
45598* CALL_REALLY_USED_REGISTERS:            Register Basics.    (line   45)
45599* CALL_USED_REGISTERS:                   Register Basics.    (line   34)
45600* call_used_regs:                        Register Basics.    (line   59)
45601* 'call_value' instruction pattern:      Standard Names.     (line 1121)
45602* 'call_value_pop' instruction pattern:  Standard Names.     (line 1129)
45603* canadian:                              Configure Terms.    (line    6)
45604* CANNOT_CHANGE_MODE_CLASS:              Register Classes.   (line  533)
45605* 'CANNOT_CHANGE_MODE_CLASS' and subreg semantics: Regs and Memory.
45606                                                             (line  276)
45607* canonicalization of instructions:      Insn Canonicalizations.
45608                                                             (line    6)
45609* 'canonicalize_funcptr_for_compare' instruction pattern: Standard Names.
45610                                                             (line 1296)
45611* can_create_pseudo_p:                   Standard Names.     (line   75)
45612* can_fallthru:                          Basic Blocks.       (line   67)
45613* 'casesi' instruction pattern:          Standard Names.     (line 1222)
45614* CASE_VECTOR_MODE:                      Misc.               (line   26)
45615* CASE_VECTOR_PC_RELATIVE:               Misc.               (line   39)
45616* CASE_VECTOR_SHORTEN_MODE:              Misc.               (line   30)
45617* 'cbranchMODE4' instruction pattern:    Standard Names.     (line 1090)
45618* cc0:                                   Regs and Memory.    (line  303)
45619* cc0 <1>:                               CC0 Condition Codes.
45620                                                             (line    6)
45621* 'cc0', RTL sharing:                    Sharing.            (line   27)
45622* cc0_rtx:                               Regs and Memory.    (line  329)
45623* CC1PLUS_SPEC:                          Driver.             (line   63)
45624* CC1_SPEC:                              Driver.             (line   55)
45625* CCmode:                                Machine Modes.      (line  175)
45626* CCmode <1>:                            MODE_CC Condition Codes.
45627                                                             (line    6)
45628* cc_status:                             CC0 Condition Codes.
45629                                                             (line    6)
45630* CC_STATUS_MDEP:                        CC0 Condition Codes.
45631                                                             (line   16)
45632* CC_STATUS_MDEP_INIT:                   CC0 Condition Codes.
45633                                                             (line   22)
45634* CDImode:                               Machine Modes.      (line  201)
45635* 'ceilM2' instruction pattern:          Standard Names.     (line  646)
45636* CEIL_DIV_EXPR:                         Unary and Binary Expressions.
45637                                                             (line    6)
45638* CEIL_MOD_EXPR:                         Unary and Binary Expressions.
45639                                                             (line    6)
45640* CFA_FRAME_BASE_OFFSET:                 Frame Layout.       (line  224)
45641* CFG verification:                      Maintaining the CFG.
45642                                                             (line  117)
45643* CFG, Control Flow Graph:               Control Flow.       (line    6)
45644* cfghooks.h:                            Maintaining the CFG.
45645                                                             (line    6)
45646* cgraph_finalize_function:              Parsing pass.       (line   51)
45647* chain_circular:                        GTY Options.        (line  205)
45648* chain_next:                            GTY Options.        (line  205)
45649* chain_prev:                            GTY Options.        (line  205)
45650* change_address:                        Standard Names.     (line   47)
45651* CHAR_TYPE_SIZE:                        Type Layout.        (line   38)
45652* 'check_stack' instruction pattern:     Standard Names.     (line 1382)
45653* CHImode:                               Machine Modes.      (line  201)
45654* class definitions, register:           Register Classes.   (line    6)
45655* class preference constraints:          Class Preferences.  (line    6)
45656* class, scope:                          Classes.            (line    6)
45657* classes of RTX codes:                  RTL Classes.        (line    6)
45658* CLASSTYPE_DECLARED_CLASS:              Classes.            (line    6)
45659* CLASSTYPE_HAS_MUTABLE:                 Classes.            (line   85)
45660* CLASSTYPE_NON_POD_P:                   Classes.            (line   90)
45661* CLASS_MAX_NREGS:                       Register Classes.   (line  521)
45662* CLASS_TYPE_P:                          Types for C++.      (line   63)
45663* Cleanups:                              Cleanups.           (line    6)
45664* CLEANUP_DECL:                          Statements for C++. (line    6)
45665* CLEANUP_EXPR:                          Statements for C++. (line    6)
45666* CLEANUP_POINT_EXPR:                    Unary and Binary Expressions.
45667                                                             (line    6)
45668* CLEANUP_STMT:                          Statements for C++. (line    6)
45669* CLEAR_BY_PIECES_P:                     Costs.              (line  187)
45670* 'clear_cache' instruction pattern:     Standard Names.     (line 1887)
45671* CLEAR_INSN_CACHE:                      Trampolines.        (line   98)
45672* CLEAR_RATIO:                           Costs.              (line  175)
45673* clobber:                               Side Effects.       (line  106)
45674* clrsb:                                 Arithmetic.         (line  216)
45675* clz:                                   Arithmetic.         (line  223)
45676* 'clzM2' instruction pattern:           Standard Names.     (line  711)
45677* CLZ_DEFINED_VALUE_AT_ZERO:             Misc.               (line  304)
45678* 'cmpmemM' instruction pattern:         Standard Names.     (line  844)
45679* 'cmpstrM' instruction pattern:         Standard Names.     (line  823)
45680* 'cmpstrnM' instruction pattern:        Standard Names.     (line  810)
45681* code generation RTL sequences:         Expander Definitions.
45682                                                             (line    6)
45683* code iterators in '.md' files:         Code Iterators.     (line    6)
45684* codes, RTL expression:                 RTL Objects.        (line   47)
45685* code_label:                            Insns.              (line  125)
45686* CODE_LABEL:                            Basic Blocks.       (line   50)
45687* 'code_label' and '/i':                 Flags.              (line   59)
45688* 'code_label' and '/v':                 Flags.              (line   44)
45689* CODE_LABEL_NUMBER:                     Insns.              (line  125)
45690* COImode:                               Machine Modes.      (line  201)
45691* COLLECT2_HOST_INITIALIZATION:          Host Misc.          (line   32)
45692* COLLECT_EXPORT_LIST:                   Misc.               (line  758)
45693* COLLECT_SHARED_FINI_FUNC:              Macros for Initialization.
45694                                                             (line   43)
45695* COLLECT_SHARED_INIT_FUNC:              Macros for Initialization.
45696                                                             (line   32)
45697* commit_edge_insertions:                Maintaining the CFG.
45698                                                             (line  105)
45699* compare:                               Arithmetic.         (line   46)
45700* 'compare', canonicalization of:        Insn Canonicalizations.
45701                                                             (line   36)
45702* comparison_operator:                   Machine-Independent Predicates.
45703                                                             (line  110)
45704* compiler passes and files:             Passes.             (line    6)
45705* complement, bitwise:                   Arithmetic.         (line  155)
45706* COMPLEX_CST:                           Constant expressions.
45707                                                             (line    6)
45708* COMPLEX_EXPR:                          Unary and Binary Expressions.
45709                                                             (line    6)
45710* COMPLEX_TYPE:                          Types.              (line    6)
45711* COMPONENT_REF:                         Storage References. (line    6)
45712* Compound Expressions:                  Compound Expressions.
45713                                                             (line    6)
45714* Compound Lvalues:                      Compound Lvalues.   (line    6)
45715* COMPOUND_EXPR:                         Unary and Binary Expressions.
45716                                                             (line    6)
45717* COMPOUND_LITERAL_EXPR:                 Unary and Binary Expressions.
45718                                                             (line    6)
45719* COMPOUND_LITERAL_EXPR_DECL:            Unary and Binary Expressions.
45720                                                             (line  373)
45721* COMPOUND_LITERAL_EXPR_DECL_EXPR:       Unary and Binary Expressions.
45722                                                             (line  373)
45723* computed jump:                         Edges.              (line  127)
45724* computing the length of an insn:       Insn Lengths.       (line    6)
45725* concat:                                Regs and Memory.    (line  381)
45726* concatn:                               Regs and Memory.    (line  387)
45727* cond:                                  Comparisons.        (line   90)
45728* 'cond' and attributes:                 Expressions.        (line   37)
45729* condition code register:               Regs and Memory.    (line  303)
45730* condition code status:                 Condition Code.     (line    6)
45731* condition codes:                       Comparisons.        (line   20)
45732* conditional execution:                 Conditional Execution.
45733                                                             (line    6)
45734* conditional execution <1>:             Cond Exec Macros.   (line    6)
45735* Conditional Expressions:               Conditional Expressions.
45736                                                             (line    6)
45737* conditions, in patterns:               Patterns.           (line   43)
45738* cond_exec:                             Side Effects.       (line  253)
45739* COND_EXPR:                             Unary and Binary Expressions.
45740                                                             (line    6)
45741* configuration file:                    Filesystem.         (line    6)
45742* configuration file <1>:                Host Misc.          (line    6)
45743* configure terms:                       Configure Terms.    (line    6)
45744* CONJ_EXPR:                             Unary and Binary Expressions.
45745                                                             (line    6)
45746* const:                                 Constants.          (line  109)
45747* const0_rtx:                            Constants.          (line   21)
45748* CONST0_RTX:                            Constants.          (line  129)
45749* const1_rtx:                            Constants.          (line   21)
45750* CONST1_RTX:                            Constants.          (line  129)
45751* const2_rtx:                            Constants.          (line   21)
45752* CONST2_RTX:                            Constants.          (line  129)
45753* constant attributes:                   Constant Attributes.
45754                                                             (line    6)
45755* constant definitions:                  Constant Definitions.
45756                                                             (line    6)
45757* constants in constraints:              Simple Constraints. (line   68)
45758* CONSTANT_ADDRESS_P:                    Addressing Modes.   (line   28)
45759* CONSTANT_ALIGNMENT:                    Storage Layout.     (line  233)
45760* CONSTANT_P:                            Addressing Modes.   (line   35)
45761* CONSTANT_POOL_ADDRESS_P:               Flags.              (line   10)
45762* CONSTANT_POOL_BEFORE_FUNCTION:         Data Output.        (line   64)
45763* constm1_rtx:                           Constants.          (line   21)
45764* constraint modifier characters:        Modifiers.          (line    6)
45765* constraint, matching:                  Simple Constraints. (line  140)
45766* constraints:                           Constraints.        (line    6)
45767* constraints, defining:                 Define Constraints. (line    6)
45768* constraints, defining, obsolete method: Old Constraints.   (line    6)
45769* constraints, machine specific:         Machine Constraints.
45770                                                             (line    6)
45771* constraints, testing:                  C Constraint Interface.
45772                                                             (line    6)
45773* CONSTRAINT_LEN:                        Old Constraints.    (line   11)
45774* constraint_num:                        C Constraint Interface.
45775                                                             (line   37)
45776* constraint_satisfied_p:                C Constraint Interface.
45777                                                             (line   52)
45778* CONSTRUCTOR:                           Unary and Binary Expressions.
45779                                                             (line    6)
45780* constructors, automatic calls:         Collect2.           (line   15)
45781* constructors, output of:               Initialization.     (line    6)
45782* CONST_DECL:                            Declarations.       (line    6)
45783* const_double:                          Constants.          (line   37)
45784* 'const_double', RTL sharing:           Sharing.            (line   29)
45785* CONST_DOUBLE_LOW:                      Constants.          (line   49)
45786* CONST_DOUBLE_OK_FOR_CONSTRAINT_P:      Old Constraints.    (line   66)
45787* CONST_DOUBLE_OK_FOR_LETTER_P:          Old Constraints.    (line   51)
45788* const_double_operand:                  Machine-Independent Predicates.
45789                                                             (line   20)
45790* const_fixed:                           Constants.          (line   62)
45791* const_int:                             Constants.          (line    8)
45792* 'const_int' and attribute tests:       Expressions.        (line   47)
45793* 'const_int' and attributes:            Expressions.        (line   10)
45794* 'const_int', RTL sharing:              Sharing.            (line   23)
45795* const_int_operand:                     Machine-Independent Predicates.
45796                                                             (line   15)
45797* CONST_OK_FOR_CONSTRAINT_P:             Old Constraints.    (line   46)
45798* CONST_OK_FOR_LETTER_P:                 Old Constraints.    (line   38)
45799* const_string:                          Constants.          (line   81)
45800* 'const_string' and attributes:         Expressions.        (line   20)
45801* const_true_rtx:                        Constants.          (line   31)
45802* const_vector:                          Constants.          (line   69)
45803* 'const_vector', RTL sharing:           Sharing.            (line   32)
45804* container:                             Containers.         (line    6)
45805* CONTINUE_STMT:                         Statements for C++. (line    6)
45806* contributors:                          Contributors.       (line    6)
45807* controlling register usage:            Register Basics.    (line   73)
45808* controlling the compilation driver:    Driver.             (line    6)
45809* conventions, run-time:                 Interface.          (line    6)
45810* conversions:                           Conversions.        (line    6)
45811* CONVERT_EXPR:                          Unary and Binary Expressions.
45812                                                             (line    6)
45813* 'copysignM3' instruction pattern:      Standard Names.     (line  692)
45814* copy_rtx:                              Addressing Modes.   (line  189)
45815* copy_rtx_if_shared:                    Sharing.            (line   64)
45816* 'cosM2' instruction pattern:           Standard Names.     (line  558)
45817* costs of instructions:                 Costs.              (line    6)
45818* CPLUSPLUS_CPP_SPEC:                    Driver.             (line   50)
45819* CPP_SPEC:                              Driver.             (line   43)
45820* CP_INTEGRAL_TYPE:                      Types for C++.      (line   55)
45821* cp_namespace_decls:                    Namespaces.         (line   49)
45822* CP_TYPE_CONST_NON_VOLATILE_P:          Types for C++.      (line   33)
45823* CP_TYPE_CONST_P:                       Types for C++.      (line   24)
45824* cp_type_quals:                         Types for C++.      (line    6)
45825* cp_type_quals <1>:                     Types for C++.      (line   16)
45826* CP_TYPE_RESTRICT_P:                    Types for C++.      (line   30)
45827* CP_TYPE_VOLATILE_P:                    Types for C++.      (line   27)
45828* CQImode:                               Machine Modes.      (line  201)
45829* cross compilation and floating point:  Floating Point.     (line    6)
45830* crtl->args.pops_args:                  Function Entry.     (line  104)
45831* crtl->args.pretend_args_size:          Function Entry.     (line  110)
45832* crtl->outgoing_args_size:              Stack Arguments.    (line   48)
45833* CRTSTUFF_T_CFLAGS:                     Target Fragment.    (line   15)
45834* CRTSTUFF_T_CFLAGS_S:                   Target Fragment.    (line   19)
45835* CRT_CALL_STATIC_FUNCTION:              Sections.           (line  120)
45836* CSImode:                               Machine Modes.      (line  201)
45837* 'cstoreMODE4' instruction pattern:     Standard Names.     (line 1051)
45838* CTImode:                               Machine Modes.      (line  201)
45839* 'ctrapMM4' instruction pattern:        Standard Names.     (line 1534)
45840* ctz:                                   Arithmetic.         (line  231)
45841* 'ctzM2' instruction pattern:           Standard Names.     (line  720)
45842* CTZ_DEFINED_VALUE_AT_ZERO:             Misc.               (line  305)
45843* CUMULATIVE_ARGS:                       Register Arguments. (line  126)
45844* current_function_is_leaf:              Leaf Functions.     (line   50)
45845* current_function_uses_only_leaf_regs:  Leaf Functions.     (line   50)
45846* current_insn_predicate:                Conditional Execution.
45847                                                             (line   26)
45848* C_COMMON_OVERRIDE_OPTIONS:             Run-time Target.    (line  136)
45849* c_register_pragma:                     Misc.               (line  399)
45850* c_register_pragma_with_expansion:      Misc.               (line  401)
45851* DAmode:                                Machine Modes.      (line  151)
45852* data bypass:                           Processor pipeline description.
45853                                                             (line  105)
45854* data bypass <1>:                       Processor pipeline description.
45855                                                             (line  196)
45856* data dependence delays:                Processor pipeline description.
45857                                                             (line    6)
45858* Data Dependency Analysis:              Dependency analysis.
45859                                                             (line    6)
45860* data structures:                       Per-Function Data.  (line    6)
45861* DATA_ALIGNMENT:                        Storage Layout.     (line  220)
45862* DATA_SECTION_ASM_OP:                   Sections.           (line   52)
45863* DBR_OUTPUT_SEQEND:                     Instruction Output. (line  133)
45864* dbr_sequence_length:                   Instruction Output. (line  133)
45865* DBX_BLOCKS_FUNCTION_RELATIVE:          DBX Options.        (line  100)
45866* DBX_CONTIN_CHAR:                       DBX Options.        (line   63)
45867* DBX_CONTIN_LENGTH:                     DBX Options.        (line   53)
45868* DBX_DEBUGGING_INFO:                    DBX Options.        (line    8)
45869* DBX_FUNCTION_FIRST:                    DBX Options.        (line   94)
45870* DBX_LINES_FUNCTION_RELATIVE:           DBX Options.        (line  106)
45871* DBX_NO_XREFS:                          DBX Options.        (line   47)
45872* DBX_OUTPUT_MAIN_SOURCE_FILENAME:       File Names and DBX. (line    8)
45873* DBX_OUTPUT_MAIN_SOURCE_FILE_END:       File Names and DBX. (line   33)
45874* DBX_OUTPUT_NULL_N_SO_AT_MAIN_SOURCE_FILE_END: File Names and DBX.
45875                                                             (line   41)
45876* DBX_OUTPUT_SOURCE_LINE:                DBX Hooks.          (line    8)
45877* DBX_REGISTER_NUMBER:                   All Debuggers.      (line    8)
45878* DBX_REGPARM_STABS_CODE:                DBX Options.        (line   84)
45879* DBX_REGPARM_STABS_LETTER:              DBX Options.        (line   89)
45880* DBX_STATIC_CONST_VAR_CODE:             DBX Options.        (line   79)
45881* DBX_STATIC_STAB_DATA_SECTION:          DBX Options.        (line   70)
45882* DBX_TYPE_DECL_STABS_CODE:              DBX Options.        (line   75)
45883* DBX_USE_BINCL:                         DBX Options.        (line  112)
45884* DCmode:                                Machine Modes.      (line  196)
45885* DDmode:                                Machine Modes.      (line   90)
45886* De Morgan's law:                       Insn Canonicalizations.
45887                                                             (line   51)
45888* dead_or_set_p:                         define_peephole.    (line   65)
45889* DEBUGGER_ARG_OFFSET:                   All Debuggers.      (line   36)
45890* DEBUGGER_AUTO_OFFSET:                  All Debuggers.      (line   27)
45891* debug_expr:                            Debug Information.  (line   22)
45892* DEBUG_EXPR_DECL:                       Declarations.       (line    6)
45893* debug_insn:                            Insns.              (line  243)
45894* DEBUG_SYMS_TEXT:                       DBX Options.        (line   24)
45895* decimal float library:                 Decimal float library routines.
45896                                                             (line    6)
45897* declaration:                           Declarations.       (line    6)
45898* declarations, RTL:                     RTL Declarations.   (line    6)
45899* DECLARE_LIBRARY_RENAMES:               Library Calls.      (line    8)
45900* DECL_ALIGN:                            Declarations.       (line    6)
45901* DECL_ANTICIPATED:                      Functions for C++.  (line   42)
45902* DECL_ARGUMENTS:                        Function Basics.    (line   36)
45903* DECL_ARRAY_DELETE_OPERATOR_P:          Functions for C++.  (line  158)
45904* DECL_ARTIFICIAL:                       Working with declarations.
45905                                                             (line   24)
45906* DECL_ARTIFICIAL <1>:                   Function Basics.    (line    6)
45907* DECL_ARTIFICIAL <2>:                   Function Properties.
45908                                                             (line   47)
45909* DECL_ASSEMBLER_NAME:                   Function Basics.    (line    6)
45910* DECL_ASSEMBLER_NAME <1>:               Function Basics.    (line   19)
45911* DECL_ATTRIBUTES:                       Attributes.         (line   21)
45912* DECL_BASE_CONSTRUCTOR_P:               Functions for C++.  (line   88)
45913* DECL_COMPLETE_CONSTRUCTOR_P:           Functions for C++.  (line   84)
45914* DECL_COMPLETE_DESTRUCTOR_P:            Functions for C++.  (line   98)
45915* DECL_CONSTRUCTOR_P:                    Functions for C++.  (line   77)
45916* DECL_CONST_MEMFUNC_P:                  Functions for C++.  (line   71)
45917* DECL_CONTEXT:                          Namespaces.         (line   31)
45918* DECL_CONV_FN_P:                        Functions for C++.  (line  105)
45919* DECL_COPY_CONSTRUCTOR_P:               Functions for C++.  (line   92)
45920* DECL_DESTRUCTOR_P:                     Functions for C++.  (line   95)
45921* DECL_EXTERNAL:                         Declarations.       (line    6)
45922* DECL_EXTERNAL <1>:                     Function Properties.
45923                                                             (line   25)
45924* DECL_EXTERN_C_FUNCTION_P:              Functions for C++.  (line   46)
45925* DECL_FUNCTION_MEMBER_P:                Functions for C++.  (line   61)
45926* DECL_FUNCTION_SPECIFIC_OPTIMIZATION:   Function Basics.    (line    6)
45927* DECL_FUNCTION_SPECIFIC_OPTIMIZATION <1>: Function Properties.
45928                                                             (line   61)
45929* DECL_FUNCTION_SPECIFIC_TARGET:         Function Basics.    (line    6)
45930* DECL_FUNCTION_SPECIFIC_TARGET <1>:     Function Properties.
45931                                                             (line   55)
45932* DECL_GLOBAL_CTOR_P:                    Functions for C++.  (line  108)
45933* DECL_GLOBAL_DTOR_P:                    Functions for C++.  (line  112)
45934* DECL_INITIAL:                          Declarations.       (line    6)
45935* DECL_INITIAL <1>:                      Function Basics.    (line   51)
45936* DECL_LINKONCE_P:                       Functions for C++.  (line   50)
45937* DECL_LOCAL_FUNCTION_P:                 Functions for C++.  (line   38)
45938* DECL_MAIN_P:                           Functions for C++.  (line   34)
45939* DECL_NAME:                             Working with declarations.
45940                                                             (line    7)
45941* DECL_NAME <1>:                         Function Basics.    (line    6)
45942* DECL_NAME <2>:                         Function Basics.    (line    9)
45943* DECL_NAME <3>:                         Namespaces.         (line   20)
45944* DECL_NAMESPACE_ALIAS:                  Namespaces.         (line   35)
45945* DECL_NAMESPACE_STD_P:                  Namespaces.         (line   45)
45946* DECL_NONCONVERTING_P:                  Functions for C++.  (line   80)
45947* DECL_NONSTATIC_MEMBER_FUNCTION_P:      Functions for C++.  (line   68)
45948* DECL_NON_THUNK_FUNCTION_P:             Functions for C++.  (line  138)
45949* DECL_OVERLOADED_OPERATOR_P:            Functions for C++.  (line  102)
45950* DECL_PURE_P:                           Function Properties.
45951                                                             (line   40)
45952* DECL_RESULT:                           Function Basics.    (line   41)
45953* DECL_SAVED_TREE:                       Function Basics.    (line   44)
45954* DECL_SIZE:                             Declarations.       (line    6)
45955* DECL_STATIC_FUNCTION_P:                Functions for C++.  (line   65)
45956* DECL_STMT:                             Statements for C++. (line    6)
45957* DECL_STMT_DECL:                        Statements for C++. (line    6)
45958* DECL_THUNK_P:                          Functions for C++.  (line  116)
45959* DECL_VIRTUAL_P:                        Function Properties.
45960                                                             (line   44)
45961* DECL_VOLATILE_MEMFUNC_P:               Functions for C++.  (line   74)
45962* 'decrement_and_branch_until_zero' instruction pattern: Standard Names.
45963                                                             (line 1259)
45964* default:                               GTY Options.        (line   82)
45965* default_file_start:                    File Framework.     (line    8)
45966* DEFAULT_GDB_EXTENSIONS:                DBX Options.        (line   17)
45967* DEFAULT_PCC_STRUCT_RETURN:             Aggregate Return.   (line   34)
45968* DEFAULT_SIGNED_CHAR:                   Type Layout.        (line  160)
45969* define_address_constraint:             Define Constraints. (line   99)
45970* define_asm_attributes:                 Tagging Insns.      (line   73)
45971* define_attr:                           Defining Attributes.
45972                                                             (line    6)
45973* define_automaton:                      Processor pipeline description.
45974                                                             (line   53)
45975* define_bypass:                         Processor pipeline description.
45976                                                             (line  196)
45977* define_code_attr:                      Code Iterators.     (line    6)
45978* define_code_iterator:                  Code Iterators.     (line    6)
45979* define_cond_exec:                      Conditional Execution.
45980                                                             (line   13)
45981* define_constants:                      Constant Definitions.
45982                                                             (line    6)
45983* define_constraint:                     Define Constraints. (line   45)
45984* define_cpu_unit:                       Processor pipeline description.
45985                                                             (line   68)
45986* define_c_enum:                         Constant Definitions.
45987                                                             (line   49)
45988* define_delay:                          Delay Slots.        (line   25)
45989* define_enum:                           Constant Definitions.
45990                                                             (line  118)
45991* define_enum_attr:                      Defining Attributes.
45992                                                             (line   76)
45993* define_enum_attr <1>:                  Constant Definitions.
45994                                                             (line  136)
45995* define_expand:                         Expander Definitions.
45996                                                             (line   11)
45997* define_insn:                           Patterns.           (line    6)
45998* 'define_insn' example:                 Example.            (line    6)
45999* define_insn_and_split:                 Insn Splitting.     (line  170)
46000* define_insn_reservation:               Processor pipeline description.
46001                                                             (line  105)
46002* define_int_attr:                       Int Iterators.      (line    6)
46003* define_int_iterator:                   Int Iterators.      (line    6)
46004* define_memory_constraint:              Define Constraints. (line   80)
46005* define_mode_attr:                      Substitutions.      (line    6)
46006* define_mode_iterator:                  Defining Mode Iterators.
46007                                                             (line    6)
46008* define_peephole:                       define_peephole.    (line    6)
46009* define_peephole2:                      define_peephole2.   (line    6)
46010* define_predicate:                      Defining Predicates.
46011                                                             (line    6)
46012* define_query_cpu_unit:                 Processor pipeline description.
46013                                                             (line   90)
46014* define_register_constraint:            Define Constraints. (line   26)
46015* define_reservation:                    Processor pipeline description.
46016                                                             (line  185)
46017* define_special_predicate:              Defining Predicates.
46018                                                             (line    6)
46019* define_split:                          Insn Splitting.     (line   32)
46020* define_subst:                          Define Subst.       (line    6)
46021* define_subst <1>:                      Define Subst Example.
46022                                                             (line    6)
46023* define_subst <2>:                      Define Subst Pattern Matching.
46024                                                             (line    6)
46025* define_subst <3>:                      Define Subst Output Template.
46026                                                             (line    6)
46027* define_subst <4>:                      Define Subst.       (line   14)
46028* define_subst <5>:                      Subst Iterators.    (line    6)
46029* define_subst_attr:                     Subst Iterators.    (line    6)
46030* define_subst_attr <1>:                 Subst Iterators.    (line   26)
46031* defining attributes and their values:  Defining Attributes.
46032                                                             (line    6)
46033* defining constraints:                  Define Constraints. (line    6)
46034* defining constraints, obsolete method: Old Constraints.    (line    6)
46035* defining jump instruction patterns:    Jump Patterns.      (line    6)
46036* defining looping instruction patterns: Looping Patterns.   (line    6)
46037* defining peephole optimizers:          Peephole Definitions.
46038                                                             (line    6)
46039* defining predicates:                   Defining Predicates.
46040                                                             (line    6)
46041* defining RTL sequences for code generation: Expander Definitions.
46042                                                             (line    6)
46043* delay slots, defining:                 Delay Slots.        (line    6)
46044* deletable:                             GTY Options.        (line  154)
46045* DELETE_IF_ORDINARY:                    Filesystem.         (line   79)
46046* Dependent Patterns:                    Dependent Patterns. (line    6)
46047* desc:                                  GTY Options.        (line   82)
46048* destructors, output of:                Initialization.     (line    6)
46049* deterministic finite state automaton:  Processor pipeline description.
46050                                                             (line    6)
46051* deterministic finite state automaton <1>: Processor pipeline description.
46052                                                             (line  304)
46053* DFmode:                                Machine Modes.      (line   73)
46054* DF_SIZE:                               Type Layout.        (line  136)
46055* digits in constraint:                  Simple Constraints. (line  128)
46056* DImode:                                Machine Modes.      (line   45)
46057* directory options .md:                 Including Patterns. (line   47)
46058* DIR_SEPARATOR:                         Filesystem.         (line   18)
46059* DIR_SEPARATOR_2:                       Filesystem.         (line   19)
46060* disabling certain registers:           Register Basics.    (line   73)
46061* dispatch table:                        Dispatch Tables.    (line    8)
46062* div:                                   Arithmetic.         (line  117)
46063* 'div' and attributes:                  Expressions.        (line   83)
46064* division:                              Arithmetic.         (line  117)
46065* division <1>:                          Arithmetic.         (line  131)
46066* division <2>:                          Arithmetic.         (line  137)
46067* 'divM3' instruction pattern:           Standard Names.     (line  266)
46068* 'divmodM4' instruction pattern:        Standard Names.     (line  484)
46069* DOLLARS_IN_IDENTIFIERS:                Misc.               (line  444)
46070* 'doloop_begin' instruction pattern:    Standard Names.     (line 1289)
46071* 'doloop_end' instruction pattern:      Standard Names.     (line 1269)
46072* DONE:                                  Expander Definitions.
46073                                                             (line   77)
46074* DONT_USE_BUILTIN_SETJMP:               Exception Region Output.
46075                                                             (line   77)
46076* DOUBLE_TYPE_SIZE:                      Type Layout.        (line   52)
46077* DO_BODY:                               Statements for C++. (line    6)
46078* DO_COND:                               Statements for C++. (line    6)
46079* DO_STMT:                               Statements for C++. (line    6)
46080* DQmode:                                Machine Modes.      (line  115)
46081* driver:                                Driver.             (line    6)
46082* DRIVER_SELF_SPECS:                     Driver.             (line    8)
46083* DUMPFILE_FORMAT:                       Filesystem.         (line   67)
46084* DWARF2_ASM_LINE_DEBUG_INFO:            SDB and DWARF.      (line   49)
46085* DWARF2_DEBUGGING_INFO:                 SDB and DWARF.      (line   12)
46086* DWARF2_FRAME_INFO:                     SDB and DWARF.      (line   29)
46087* DWARF2_FRAME_REG_OUT:                  Frame Registers.    (line  151)
46088* DWARF2_UNWIND_INFO:                    Exception Region Output.
46089                                                             (line   38)
46090* DWARF_ALT_FRAME_RETURN_COLUMN:         Frame Layout.       (line  150)
46091* DWARF_CIE_DATA_ALIGNMENT:              Exception Region Output.
46092                                                             (line   89)
46093* DWARF_FRAME_REGISTERS:                 Frame Registers.    (line  109)
46094* DWARF_FRAME_REGNUM:                    Frame Registers.    (line  143)
46095* DWARF_REG_TO_UNWIND_COLUMN:            Frame Registers.    (line  134)
46096* DWARF_ZERO_REG:                        Frame Layout.       (line  161)
46097* DYNAMIC_CHAIN_ADDRESS:                 Frame Layout.       (line   90)
46098* 'E' in constraint:                     Simple Constraints. (line   87)
46099* earlyclobber operand:                  Modifiers.          (line   25)
46100* edge:                                  Edges.              (line    6)
46101* edge in the flow graph:                Edges.              (line    6)
46102* edge iterators:                        Edges.              (line   15)
46103* edge splitting:                        Maintaining the CFG.
46104                                                             (line  105)
46105* EDGE_ABNORMAL:                         Edges.              (line  127)
46106* EDGE_ABNORMAL, EDGE_ABNORMAL_CALL:     Edges.              (line  171)
46107* EDGE_ABNORMAL, EDGE_EH:                Edges.              (line   95)
46108* EDGE_ABNORMAL, EDGE_SIBCALL:           Edges.              (line  121)
46109* EDGE_FALLTHRU, force_nonfallthru:      Edges.              (line   85)
46110* 'EDOM', implicit usage:                Library Calls.      (line   52)
46111* EH_FRAME_IN_DATA_SECTION:              Exception Region Output.
46112                                                             (line   19)
46113* EH_FRAME_SECTION_NAME:                 Exception Region Output.
46114                                                             (line    9)
46115* 'eh_return' instruction pattern:       Standard Names.     (line 1468)
46116* EH_RETURN_DATA_REGNO:                  Exception Handling. (line    6)
46117* EH_RETURN_HANDLER_RTX:                 Exception Handling. (line   38)
46118* EH_RETURN_STACKADJ_RTX:                Exception Handling. (line   21)
46119* EH_TABLES_CAN_BE_READ_ONLY:            Exception Region Output.
46120                                                             (line   28)
46121* EH_USES:                               Function Entry.     (line  155)
46122* ei_edge:                               Edges.              (line   43)
46123* ei_end_p:                              Edges.              (line   27)
46124* ei_last:                               Edges.              (line   23)
46125* ei_next:                               Edges.              (line   35)
46126* ei_one_before_end_p:                   Edges.              (line   31)
46127* ei_prev:                               Edges.              (line   39)
46128* ei_safe_safe:                          Edges.              (line   47)
46129* ei_start:                              Edges.              (line   19)
46130* ELIMINABLE_REGS:                       Elimination.        (line   46)
46131* ELSE_CLAUSE:                           Statements for C++. (line    6)
46132* Embedded C:                            Fixed-point fractional library routines.
46133                                                             (line    6)
46134* EMIT_MODE_SET:                         Mode Switching.     (line   74)
46135* Empty Statements:                      Empty Statements.   (line    6)
46136* EMPTY_CLASS_EXPR:                      Statements for C++. (line    6)
46137* EMPTY_FIELD_BOUNDARY:                  Storage Layout.     (line  303)
46138* Emulated TLS:                          Emulated TLS.       (line    6)
46139* enabled:                               Disable Insn Alternatives.
46140                                                             (line    6)
46141* ENDFILE_SPEC:                          Driver.             (line  155)
46142* endianness:                            Portability.        (line   20)
46143* ENTRY_BLOCK_PTR, EXIT_BLOCK_PTR:       Basic Blocks.       (line   10)
46144* enum machine_mode:                     Machine Modes.      (line    6)
46145* enum reg_class:                        Register Classes.   (line   70)
46146* ENUMERAL_TYPE:                         Types.              (line    6)
46147* enumerations:                          Constant Definitions.
46148                                                             (line   49)
46149* epilogue:                              Function Entry.     (line    6)
46150* 'epilogue' instruction pattern:        Standard Names.     (line 1506)
46151* EPILOGUE_USES:                         Function Entry.     (line  149)
46152* eq:                                    Comparisons.        (line   52)
46153* 'eq' and attributes:                   Expressions.        (line   83)
46154* equal:                                 Comparisons.        (line   52)
46155* eq_attr:                               Expressions.        (line  104)
46156* EQ_EXPR:                               Unary and Binary Expressions.
46157                                                             (line    6)
46158* 'errno', implicit usage:               Library Calls.      (line   64)
46159* EXACT_DIV_EXPR:                        Unary and Binary Expressions.
46160                                                             (line    6)
46161* examining SSA_NAMEs:                   SSA.                (line  216)
46162* exception handling:                    Edges.              (line   95)
46163* exception handling <1>:                Exception Handling. (line    6)
46164* 'exception_receiver' instruction pattern: Standard Names.  (line 1433)
46165* exclamation point:                     Multi-Alternative.  (line   47)
46166* exclusion_set:                         Processor pipeline description.
46167                                                             (line  223)
46168* exclusive-or, bitwise:                 Arithmetic.         (line  169)
46169* EXIT_EXPR:                             Unary and Binary Expressions.
46170                                                             (line    6)
46171* EXIT_IGNORE_STACK:                     Function Entry.     (line  137)
46172* expander definitions:                  Expander Definitions.
46173                                                             (line    6)
46174* 'expM2' instruction pattern:           Standard Names.     (line  587)
46175* expression:                            Expression trees.   (line    6)
46176* expression codes:                      RTL Objects.        (line   47)
46177* EXPR_FILENAME:                         Working with declarations.
46178                                                             (line   14)
46179* EXPR_LINENO:                           Working with declarations.
46180                                                             (line   20)
46181* expr_list:                             Insns.              (line  546)
46182* EXPR_STMT:                             Statements for C++. (line    6)
46183* EXPR_STMT_EXPR:                        Statements for C++. (line    6)
46184* 'extendMN2' instruction pattern:       Standard Names.     (line  902)
46185* extensible constraints:                Simple Constraints. (line  171)
46186* EXTRA_ADDRESS_CONSTRAINT:              Old Constraints.    (line  120)
46187* EXTRA_CONSTRAINT:                      Old Constraints.    (line   71)
46188* EXTRA_CONSTRAINT_STR:                  Old Constraints.    (line   92)
46189* EXTRA_MEMORY_CONSTRAINT:               Old Constraints.    (line   97)
46190* EXTRA_SPECS:                           Driver.             (line  182)
46191* 'extv' instruction pattern:            Standard Names.     (line  993)
46192* 'extvM' instruction pattern:           Standard Names.     (line  938)
46193* 'extvmisalignM' instruction pattern:   Standard Names.     (line  948)
46194* 'extzv' instruction pattern:           Standard Names.     (line 1011)
46195* 'extzvM' instruction pattern:          Standard Names.     (line  962)
46196* 'extzvmisalignM' instruction pattern:  Standard Names.     (line  965)
46197* 'F' in constraint:                     Simple Constraints. (line   92)
46198* FAIL:                                  Expander Definitions.
46199                                                             (line   83)
46200* fall-thru:                             Edges.              (line   68)
46201* FATAL_EXIT_CODE:                       Host Misc.          (line    6)
46202* FDL, GNU Free Documentation License:   GNU Free Documentation License.
46203                                                             (line    6)
46204* features, optional, in system conventions: Run-time Target.
46205                                                             (line   59)
46206* ffs:                                   Arithmetic.         (line  211)
46207* 'ffsM2' instruction pattern:           Standard Names.     (line  701)
46208* FIELD_DECL:                            Declarations.       (line    6)
46209* files and passes of the compiler:      Passes.             (line    6)
46210* files, generated:                      Files.              (line    6)
46211* file_end_indicate_exec_stack:          File Framework.     (line   39)
46212* final_absence_set:                     Processor pipeline description.
46213                                                             (line  223)
46214* FINAL_PRESCAN_INSN:                    Instruction Output. (line   60)
46215* final_presence_set:                    Processor pipeline description.
46216                                                             (line  223)
46217* final_sequence:                        Instruction Output. (line  144)
46218* FIND_BASE_TERM:                        Addressing Modes.   (line  117)
46219* finite state automaton minimization:   Processor pipeline description.
46220                                                             (line  304)
46221* FINI_ARRAY_SECTION_ASM_OP:             Sections.           (line  113)
46222* FINI_SECTION_ASM_OP:                   Sections.           (line   98)
46223* FIRST_PARM_OFFSET:                     Frame Layout.       (line   65)
46224* 'FIRST_PARM_OFFSET' and virtual registers: Regs and Memory.
46225                                                             (line   65)
46226* FIRST_PSEUDO_REGISTER:                 Register Basics.    (line    8)
46227* FIRST_STACK_REG:                       Stack Registers.    (line   26)
46228* FIRST_VIRTUAL_REGISTER:                Regs and Memory.    (line   51)
46229* fix:                                   Conversions.        (line   66)
46230* fixed register:                        Register Basics.    (line   15)
46231* fixed-point fractional library:        Fixed-point fractional library routines.
46232                                                             (line    6)
46233* FIXED_CONVERT_EXPR:                    Unary and Binary Expressions.
46234                                                             (line    6)
46235* FIXED_CST:                             Constant expressions.
46236                                                             (line    6)
46237* FIXED_POINT_TYPE:                      Types.              (line    6)
46238* FIXED_REGISTERS:                       Register Basics.    (line   14)
46239* fixed_regs:                            Register Basics.    (line   59)
46240* 'fixMN2' instruction pattern:          Standard Names.     (line  869)
46241* 'fixunsMN2' instruction pattern:       Standard Names.     (line  878)
46242* 'fixuns_truncMN2' instruction pattern: Standard Names.     (line  893)
46243* 'fix_truncMN2' instruction pattern:    Standard Names.     (line  889)
46244* FIX_TRUNC_EXPR:                        Unary and Binary Expressions.
46245                                                             (line    6)
46246* flags in RTL expression:               Flags.              (line    6)
46247* float:                                 Conversions.        (line   58)
46248* floating point and cross compilation:  Floating Point.     (line    6)
46249* 'floatMN2' instruction pattern:        Standard Names.     (line  861)
46250* 'floatunsMN2' instruction pattern:     Standard Names.     (line  865)
46251* FLOAT_EXPR:                            Unary and Binary Expressions.
46252                                                             (line    6)
46253* float_extend:                          Conversions.        (line   33)
46254* FLOAT_LIB_COMPARE_RETURNS_BOOL:        Library Calls.      (line   32)
46255* FLOAT_STORE_FLAG_VALUE:                Misc.               (line  286)
46256* float_truncate:                        Conversions.        (line   53)
46257* FLOAT_TYPE_SIZE:                       Type Layout.        (line   48)
46258* FLOAT_WORDS_BIG_ENDIAN:                Storage Layout.     (line   41)
46259* 'FLOAT_WORDS_BIG_ENDIAN', (lack of) effect on 'subreg': Regs and Memory.
46260                                                             (line  224)
46261* 'floorM2' instruction pattern:         Standard Names.     (line  622)
46262* FLOOR_DIV_EXPR:                        Unary and Binary Expressions.
46263                                                             (line    6)
46264* FLOOR_MOD_EXPR:                        Unary and Binary Expressions.
46265                                                             (line    6)
46266* flow-insensitive alias analysis:       Alias analysis.     (line    6)
46267* flow-sensitive alias analysis:         Alias analysis.     (line    6)
46268* fma:                                   Arithmetic.         (line  112)
46269* 'fmaM4' instruction pattern:           Standard Names.     (line  276)
46270* 'fmodM3' instruction pattern:          Standard Names.     (line  540)
46271* 'fmsM4' instruction pattern:           Standard Names.     (line  283)
46272* 'fnmaM4' instruction pattern:          Standard Names.     (line  289)
46273* 'fnmsM4' instruction pattern:          Standard Names.     (line  295)
46274* FORCE_CODE_SECTION_ALIGN:              Sections.           (line  144)
46275* force_reg:                             Standard Names.     (line   36)
46276* FOR_BODY:                              Statements for C++. (line    6)
46277* FOR_COND:                              Statements for C++. (line    6)
46278* FOR_EXPR:                              Statements for C++. (line    6)
46279* FOR_INIT_STMT:                         Statements for C++. (line    6)
46280* FOR_STMT:                              Statements for C++. (line    6)
46281* fractional types:                      Fixed-point fractional library routines.
46282                                                             (line    6)
46283* 'fractMN2' instruction pattern:        Standard Names.     (line  911)
46284* 'fractunsMN2' instruction pattern:     Standard Names.     (line  926)
46285* fract_convert:                         Conversions.        (line   82)
46286* FRACT_TYPE_SIZE:                       Type Layout.        (line   67)
46287* frame layout:                          Frame Layout.       (line    6)
46288* FRAME_ADDR_RTX:                        Frame Layout.       (line  114)
46289* FRAME_GROWS_DOWNWARD:                  Frame Layout.       (line   30)
46290* 'FRAME_GROWS_DOWNWARD' and virtual registers: Regs and Memory.
46291                                                             (line   69)
46292* FRAME_POINTER_CFA_OFFSET:              Frame Layout.       (line  210)
46293* frame_pointer_needed:                  Function Entry.     (line   34)
46294* FRAME_POINTER_REGNUM:                  Frame Registers.    (line   13)
46295* 'FRAME_POINTER_REGNUM' and virtual registers: Regs and Memory.
46296                                                             (line   74)
46297* frame_pointer_rtx:                     Frame Registers.    (line  104)
46298* frame_related:                         Flags.              (line  229)
46299* 'frame_related', in 'insn', 'call_insn', 'jump_insn', 'barrier', and 'set': Flags.
46300                                                             (line  107)
46301* 'frame_related', in 'mem':             Flags.              (line   85)
46302* 'frame_related', in 'reg':             Flags.              (line   94)
46303* 'frame_related', in 'symbol_ref':      Flags.              (line  165)
46304* frequency, count, BB_FREQ_BASE:        Profile information.
46305                                                             (line   30)
46306* 'ftruncM2' instruction pattern:        Standard Names.     (line  884)
46307* function:                              Functions.          (line    6)
46308* function <1>:                          Functions for C++.  (line    6)
46309* function call conventions:             Interface.          (line    6)
46310* function entry and exit:               Function Entry.     (line    6)
46311* function entry point, alternate function entry point: Edges.
46312                                                             (line  180)
46313* function properties:                   Function Properties.
46314                                                             (line    6)
46315* function-call insns:                   Calls.              (line    6)
46316* functions, leaf:                       Leaf Functions.     (line    6)
46317* FUNCTION_ARG_OFFSET:                   Register Arguments. (line  196)
46318* FUNCTION_ARG_PADDING:                  Register Arguments. (line  203)
46319* FUNCTION_ARG_REGNO_P:                  Register Arguments. (line  251)
46320* FUNCTION_BOUNDARY:                     Storage Layout.     (line  164)
46321* FUNCTION_DECL:                         Functions.          (line    6)
46322* FUNCTION_DECL <1>:                     Functions for C++.  (line    6)
46323* FUNCTION_MODE:                         Misc.               (line  341)
46324* FUNCTION_PROFILER:                     Profiling.          (line    8)
46325* FUNCTION_TYPE:                         Types.              (line    6)
46326* FUNCTION_VALUE:                        Scalar Return.      (line   52)
46327* FUNCTION_VALUE_REGNO_P:                Scalar Return.      (line   78)
46328* fundamental type:                      Types.              (line    6)
46329* 'G' in constraint:                     Simple Constraints. (line   96)
46330* 'g' in constraint:                     Simple Constraints. (line  118)
46331* garbage collector, invocation:         Invoking the garbage collector.
46332                                                             (line    6)
46333* garbage collector, troubleshooting:    Troubleshooting.    (line    6)
46334* GCC and portability:                   Portability.        (line    6)
46335* GCC_DRIVER_HOST_INITIALIZATION:        Host Misc.          (line   36)
46336* gcov_type:                             Profile information.
46337                                                             (line   41)
46338* ge:                                    Comparisons.        (line   72)
46339* 'ge' and attributes:                   Expressions.        (line   83)
46340* gencodes:                              RTL passes.         (line   18)
46341* general_operand:                       Machine-Independent Predicates.
46342                                                             (line  104)
46343* GENERAL_REGS:                          Register Classes.   (line   22)
46344* generated files:                       Files.              (line    6)
46345* generating assembler output:           Output Statement.   (line    6)
46346* generating insns:                      RTL Template.       (line    6)
46347* GENERIC:                               Parsing pass.       (line    6)
46348* GENERIC <1>:                           GENERIC.            (line    6)
46349* generic predicates:                    Machine-Independent Predicates.
46350                                                             (line    6)
46351* genflags:                              RTL passes.         (line   18)
46352* GEN_ERRNO_RTX:                         Library Calls.      (line   64)
46353* get_attr:                              Expressions.        (line   99)
46354* get_attr_length:                       Insn Lengths.       (line   46)
46355* GET_CLASS_NARROWEST_MODE:              Machine Modes.      (line  332)
46356* GET_CODE:                              RTL Objects.        (line   47)
46357* get_frame_size:                        Elimination.        (line   34)
46358* get_insns:                             Insns.              (line   34)
46359* get_last_insn:                         Insns.              (line   34)
46360* GET_MODE:                              Machine Modes.      (line  279)
46361* GET_MODE_ALIGNMENT:                    Machine Modes.      (line  319)
46362* GET_MODE_BITSIZE:                      Machine Modes.      (line  303)
46363* GET_MODE_CLASS:                        Machine Modes.      (line  293)
46364* GET_MODE_FBIT:                         Machine Modes.      (line  310)
46365* GET_MODE_IBIT:                         Machine Modes.      (line  306)
46366* GET_MODE_MASK:                         Machine Modes.      (line  314)
46367* GET_MODE_NAME:                         Machine Modes.      (line  290)
46368* GET_MODE_NUNITS:                       Machine Modes.      (line  328)
46369* GET_MODE_SIZE:                         Machine Modes.      (line  300)
46370* GET_MODE_UNIT_SIZE:                    Machine Modes.      (line  322)
46371* GET_MODE_WIDER_MODE:                   Machine Modes.      (line  296)
46372* GET_RTX_CLASS:                         RTL Classes.        (line    6)
46373* GET_RTX_FORMAT:                        RTL Classes.        (line  131)
46374* GET_RTX_LENGTH:                        RTL Classes.        (line  128)
46375* 'get_thread_pointerMODE' instruction pattern: Standard Names.
46376                                                             (line 1856)
46377* geu:                                   Comparisons.        (line   72)
46378* 'geu' and attributes:                  Expressions.        (line   83)
46379* GE_EXPR:                               Unary and Binary Expressions.
46380                                                             (line    6)
46381* GGC:                                   Type Information.   (line    6)
46382* ggc_collect:                           Invoking the garbage collector.
46383                                                             (line    6)
46384* GIMPLE:                                Parsing pass.       (line   13)
46385* GIMPLE <1>:                            Gimplification pass.
46386                                                             (line    6)
46387* GIMPLE <2>:                            GIMPLE.             (line    6)
46388* GIMPLE Exception Handling:             GIMPLE Exception Handling.
46389                                                             (line    6)
46390* GIMPLE instruction set:                GIMPLE instruction set.
46391                                                             (line    6)
46392* GIMPLE sequences:                      GIMPLE sequences.   (line    6)
46393* GIMPLE statement iterators:            Basic Blocks.       (line   78)
46394* GIMPLE statement iterators <1>:        Maintaining the CFG.
46395                                                             (line   33)
46396* gimple_addresses_taken:                Manipulating GIMPLE statements.
46397                                                             (line   89)
46398* 'GIMPLE_ASM':                          'GIMPLE_ASM'.       (line    6)
46399* gimple_asm_clear_volatile:             'GIMPLE_ASM'.       (line   62)
46400* gimple_asm_clobber_op:                 'GIMPLE_ASM'.       (line   44)
46401* gimple_asm_input_op:                   'GIMPLE_ASM'.       (line   29)
46402* gimple_asm_nclobbers:                  'GIMPLE_ASM'.       (line   26)
46403* gimple_asm_ninputs:                    'GIMPLE_ASM'.       (line   20)
46404* gimple_asm_noutputs:                   'GIMPLE_ASM'.       (line   23)
46405* gimple_asm_output_op:                  'GIMPLE_ASM'.       (line   36)
46406* gimple_asm_set_clobber_op:             'GIMPLE_ASM'.       (line   48)
46407* gimple_asm_set_input_op:               'GIMPLE_ASM'.       (line   32)
46408* gimple_asm_set_output_op:              'GIMPLE_ASM'.       (line   40)
46409* gimple_asm_set_volatile:               'GIMPLE_ASM'.       (line   59)
46410* gimple_asm_string:                     'GIMPLE_ASM'.       (line   52)
46411* gimple_asm_volatile_p:                 'GIMPLE_ASM'.       (line   56)
46412* 'GIMPLE_ASSIGN':                       'GIMPLE_ASSIGN'.    (line    6)
46413* gimple_assign_cast_p:                  Logical Operators.  (line  158)
46414* gimple_assign_cast_p <1>:              'GIMPLE_ASSIGN'.    (line   92)
46415* gimple_assign_lhs:                     'GIMPLE_ASSIGN'.    (line   50)
46416* gimple_assign_lhs_ptr:                 'GIMPLE_ASSIGN'.    (line   53)
46417* gimple_assign_rhs1:                    'GIMPLE_ASSIGN'.    (line   56)
46418* gimple_assign_rhs1_ptr:                'GIMPLE_ASSIGN'.    (line   59)
46419* gimple_assign_rhs2:                    'GIMPLE_ASSIGN'.    (line   63)
46420* gimple_assign_rhs2_ptr:                'GIMPLE_ASSIGN'.    (line   66)
46421* gimple_assign_rhs3:                    'GIMPLE_ASSIGN'.    (line   70)
46422* gimple_assign_rhs3_ptr:                'GIMPLE_ASSIGN'.    (line   73)
46423* gimple_assign_rhs_class:               'GIMPLE_ASSIGN'.    (line   44)
46424* gimple_assign_rhs_code:                'GIMPLE_ASSIGN'.    (line   40)
46425* gimple_assign_set_lhs:                 'GIMPLE_ASSIGN'.    (line   77)
46426* gimple_assign_set_rhs1:                'GIMPLE_ASSIGN'.    (line   80)
46427* gimple_assign_set_rhs2:                'GIMPLE_ASSIGN'.    (line   84)
46428* gimple_assign_set_rhs3:                'GIMPLE_ASSIGN'.    (line   88)
46429* gimple_bb:                             Manipulating GIMPLE statements.
46430                                                             (line   17)
46431* 'GIMPLE_BIND':                         'GIMPLE_BIND'.      (line    6)
46432* gimple_bind_add_seq:                   'GIMPLE_BIND'.      (line   34)
46433* gimple_bind_add_stmt:                  'GIMPLE_BIND'.      (line   31)
46434* gimple_bind_append_vars:               'GIMPLE_BIND'.      (line   18)
46435* gimple_bind_block:                     'GIMPLE_BIND'.      (line   39)
46436* gimple_bind_body:                      'GIMPLE_BIND'.      (line   22)
46437* gimple_bind_set_block:                 'GIMPLE_BIND'.      (line   44)
46438* gimple_bind_set_body:                  'GIMPLE_BIND'.      (line   26)
46439* gimple_bind_set_vars:                  'GIMPLE_BIND'.      (line   14)
46440* gimple_bind_vars:                      'GIMPLE_BIND'.      (line   11)
46441* gimple_block:                          Manipulating GIMPLE statements.
46442                                                             (line   20)
46443* gimple_build_asm:                      'GIMPLE_ASM'.       (line    6)
46444* gimple_build_asm_vec:                  'GIMPLE_ASM'.       (line   15)
46445* gimple_build_assign:                   'GIMPLE_ASSIGN'.    (line    6)
46446* gimple_build_assign_with_ops:          'GIMPLE_ASSIGN'.    (line   28)
46447* gimple_build_bind:                     'GIMPLE_BIND'.      (line    6)
46448* gimple_build_call:                     'GIMPLE_CALL'.      (line    6)
46449* gimple_build_call_from_tree:           'GIMPLE_CALL'.      (line   15)
46450* gimple_build_call_vec:                 'GIMPLE_CALL'.      (line   23)
46451* gimple_build_catch:                    'GIMPLE_CATCH'.     (line    6)
46452* gimple_build_cond:                     'GIMPLE_COND'.      (line    6)
46453* gimple_build_cond_from_tree:           'GIMPLE_COND'.      (line   14)
46454* gimple_build_debug_bind:               'GIMPLE_DEBUG'.     (line    6)
46455* gimple_build_eh_filter:                'GIMPLE_EH_FILTER'. (line    6)
46456* gimple_build_goto:                     'GIMPLE_LABEL'.     (line   17)
46457* gimple_build_label:                    'GIMPLE_LABEL'.     (line    6)
46458* gimple_build_nop:                      'GIMPLE_NOP'.       (line    6)
46459* gimple_build_omp_atomic_load:          'GIMPLE_OMP_ATOMIC_LOAD'.
46460                                                             (line    6)
46461* gimple_build_omp_atomic_store:         'GIMPLE_OMP_ATOMIC_STORE'.
46462                                                             (line    6)
46463* gimple_build_omp_continue:             'GIMPLE_OMP_CONTINUE'.
46464                                                             (line    6)
46465* gimple_build_omp_critical:             'GIMPLE_OMP_CRITICAL'.
46466                                                             (line    6)
46467* gimple_build_omp_for:                  'GIMPLE_OMP_FOR'.   (line    6)
46468* gimple_build_omp_master:               'GIMPLE_OMP_MASTER'.
46469                                                             (line    6)
46470* gimple_build_omp_ordered:              'GIMPLE_OMP_ORDERED'.
46471                                                             (line    6)
46472* gimple_build_omp_parallel:             'GIMPLE_OMP_PARALLEL'.
46473                                                             (line    6)
46474* gimple_build_omp_return:               'GIMPLE_OMP_RETURN'.
46475                                                             (line    6)
46476* gimple_build_omp_section:              'GIMPLE_OMP_SECTION'.
46477                                                             (line    6)
46478* gimple_build_omp_sections:             'GIMPLE_OMP_SECTIONS'.
46479                                                             (line    6)
46480* gimple_build_omp_sections_switch:      'GIMPLE_OMP_SECTIONS'.
46481                                                             (line   13)
46482* gimple_build_omp_single:               'GIMPLE_OMP_SINGLE'.
46483                                                             (line    6)
46484* gimple_build_resx:                     'GIMPLE_RESX'.      (line    6)
46485* gimple_build_return:                   'GIMPLE_RETURN'.    (line    6)
46486* gimple_build_switch:                   'GIMPLE_SWITCH'.    (line    6)
46487* gimple_build_try:                      'GIMPLE_TRY'.       (line    6)
46488* gimple_build_wce:                      'GIMPLE_WITH_CLEANUP_EXPR'.
46489                                                             (line    6)
46490* 'GIMPLE_CALL':                         'GIMPLE_CALL'.      (line    6)
46491* gimple_call_arg:                       'GIMPLE_CALL'.      (line   65)
46492* gimple_call_arg_ptr:                   'GIMPLE_CALL'.      (line   69)
46493* gimple_call_cannot_inline_p:           'GIMPLE_CALL'.      (line   90)
46494* gimple_call_chain:                     'GIMPLE_CALL'.      (line   56)
46495* gimple_call_copy_skip_args:            'GIMPLE_CALL'.      (line   96)
46496* gimple_call_fn:                        'GIMPLE_CALL'.      (line   37)
46497* gimple_call_fndecl:                    'GIMPLE_CALL'.      (line   45)
46498* gimple_call_lhs:                       'GIMPLE_CALL'.      (line   28)
46499* gimple_call_lhs_ptr:                   'GIMPLE_CALL'.      (line   31)
46500* gimple_call_mark_uninlinable:          'GIMPLE_CALL'.      (line   87)
46501* gimple_call_noreturn_p:                'GIMPLE_CALL'.      (line   93)
46502* gimple_call_num_args:                  'GIMPLE_CALL'.      (line   62)
46503* gimple_call_return_type:               'GIMPLE_CALL'.      (line   53)
46504* gimple_call_set_arg:                   'GIMPLE_CALL'.      (line   74)
46505* gimple_call_set_chain:                 'GIMPLE_CALL'.      (line   59)
46506* gimple_call_set_fn:                    'GIMPLE_CALL'.      (line   41)
46507* gimple_call_set_fndecl:                'GIMPLE_CALL'.      (line   50)
46508* gimple_call_set_lhs:                   'GIMPLE_CALL'.      (line   34)
46509* gimple_call_set_tail:                  'GIMPLE_CALL'.      (line   79)
46510* gimple_call_tail_p:                    'GIMPLE_CALL'.      (line   84)
46511* 'GIMPLE_CATCH':                        'GIMPLE_CATCH'.     (line    6)
46512* gimple_catch_handler:                  'GIMPLE_CATCH'.     (line   19)
46513* gimple_catch_set_handler:              'GIMPLE_CATCH'.     (line   26)
46514* gimple_catch_set_types:                'GIMPLE_CATCH'.     (line   23)
46515* gimple_catch_types:                    'GIMPLE_CATCH'.     (line   12)
46516* gimple_catch_types_ptr:                'GIMPLE_CATCH'.     (line   15)
46517* gimple_code:                           Manipulating GIMPLE statements.
46518                                                             (line   14)
46519* 'GIMPLE_COND':                         'GIMPLE_COND'.      (line    6)
46520* gimple_cond_code:                      'GIMPLE_COND'.      (line   20)
46521* gimple_cond_false_label:               'GIMPLE_COND'.      (line   59)
46522* gimple_cond_lhs:                       'GIMPLE_COND'.      (line   29)
46523* gimple_cond_make_false:                'GIMPLE_COND'.      (line   63)
46524* gimple_cond_make_true:                 'GIMPLE_COND'.      (line   66)
46525* gimple_cond_rhs:                       'GIMPLE_COND'.      (line   37)
46526* gimple_cond_set_code:                  'GIMPLE_COND'.      (line   24)
46527* gimple_cond_set_false_label:           'GIMPLE_COND'.      (line   54)
46528* gimple_cond_set_lhs:                   'GIMPLE_COND'.      (line   33)
46529* gimple_cond_set_rhs:                   'GIMPLE_COND'.      (line   41)
46530* gimple_cond_set_true_label:            'GIMPLE_COND'.      (line   49)
46531* gimple_cond_true_label:                'GIMPLE_COND'.      (line   45)
46532* gimple_copy:                           Manipulating GIMPLE statements.
46533                                                             (line  146)
46534* 'GIMPLE_DEBUG':                        'GIMPLE_DEBUG'.     (line    6)
46535* 'GIMPLE_DEBUG_BIND':                   'GIMPLE_DEBUG'.     (line    6)
46536* gimple_debug_bind_get_value:           'GIMPLE_DEBUG'.     (line   46)
46537* gimple_debug_bind_get_value_ptr:       'GIMPLE_DEBUG'.     (line   50)
46538* gimple_debug_bind_get_var:             'GIMPLE_DEBUG'.     (line   43)
46539* gimple_debug_bind_has_value_p:         'GIMPLE_DEBUG'.     (line   68)
46540* gimple_debug_bind_p:                   Logical Operators.  (line  162)
46541* gimple_debug_bind_reset_value:         'GIMPLE_DEBUG'.     (line   64)
46542* gimple_debug_bind_set_value:           'GIMPLE_DEBUG'.     (line   59)
46543* gimple_debug_bind_set_var:             'GIMPLE_DEBUG'.     (line   55)
46544* gimple_def_ops:                        Manipulating GIMPLE statements.
46545                                                             (line   93)
46546* 'GIMPLE_EH_FILTER':                    'GIMPLE_EH_FILTER'. (line    6)
46547* gimple_eh_filter_failure:              'GIMPLE_EH_FILTER'. (line   18)
46548* gimple_eh_filter_must_not_throw:       'GIMPLE_EH_FILTER'. (line   32)
46549* gimple_eh_filter_set_failure:          'GIMPLE_EH_FILTER'. (line   27)
46550* gimple_eh_filter_set_must_not_throw:   'GIMPLE_EH_FILTER'. (line   35)
46551* gimple_eh_filter_set_types:            'GIMPLE_EH_FILTER'. (line   22)
46552* gimple_eh_filter_types:                'GIMPLE_EH_FILTER'. (line   11)
46553* gimple_eh_filter_types_ptr:            'GIMPLE_EH_FILTER'. (line   14)
46554* gimple_expr_code:                      Manipulating GIMPLE statements.
46555                                                             (line   30)
46556* gimple_expr_type:                      Manipulating GIMPLE statements.
46557                                                             (line   23)
46558* gimple_goto_dest:                      'GIMPLE_LABEL'.     (line   20)
46559* gimple_goto_set_dest:                  'GIMPLE_LABEL'.     (line   23)
46560* gimple_has_mem_ops:                    Manipulating GIMPLE statements.
46561                                                             (line   71)
46562* gimple_has_ops:                        Manipulating GIMPLE statements.
46563                                                             (line   68)
46564* gimple_has_volatile_ops:               Manipulating GIMPLE statements.
46565                                                             (line  133)
46566* 'GIMPLE_LABEL':                        'GIMPLE_LABEL'.     (line    6)
46567* gimple_label_label:                    'GIMPLE_LABEL'.     (line   10)
46568* gimple_label_set_label:                'GIMPLE_LABEL'.     (line   13)
46569* gimple_loaded_syms:                    Manipulating GIMPLE statements.
46570                                                             (line  121)
46571* gimple_locus:                          Manipulating GIMPLE statements.
46572                                                             (line   41)
46573* gimple_locus_empty_p:                  Manipulating GIMPLE statements.
46574                                                             (line   47)
46575* gimple_modified_p:                     Manipulating GIMPLE statements.
46576                                                             (line  129)
46577* 'GIMPLE_NOP':                          'GIMPLE_NOP'.       (line    6)
46578* gimple_nop_p:                          'GIMPLE_NOP'.       (line    9)
46579* gimple_no_warning_p:                   Manipulating GIMPLE statements.
46580                                                             (line   50)
46581* gimple_num_ops:                        Logical Operators.  (line   76)
46582* gimple_num_ops <1>:                    Manipulating GIMPLE statements.
46583                                                             (line   74)
46584* 'GIMPLE_OMP_ATOMIC_LOAD':              'GIMPLE_OMP_ATOMIC_LOAD'.
46585                                                             (line    6)
46586* gimple_omp_atomic_load_lhs:            'GIMPLE_OMP_ATOMIC_LOAD'.
46587                                                             (line   16)
46588* gimple_omp_atomic_load_rhs:            'GIMPLE_OMP_ATOMIC_LOAD'.
46589                                                             (line   23)
46590* gimple_omp_atomic_load_set_lhs:        'GIMPLE_OMP_ATOMIC_LOAD'.
46591                                                             (line   12)
46592* gimple_omp_atomic_load_set_rhs:        'GIMPLE_OMP_ATOMIC_LOAD'.
46593                                                             (line   19)
46594* 'GIMPLE_OMP_ATOMIC_STORE':             'GIMPLE_OMP_ATOMIC_STORE'.
46595                                                             (line    6)
46596* gimple_omp_atomic_store_set_val:       'GIMPLE_OMP_ATOMIC_STORE'.
46597                                                             (line   10)
46598* gimple_omp_atomic_store_val:           'GIMPLE_OMP_ATOMIC_STORE'.
46599                                                             (line   14)
46600* gimple_omp_body:                       'GIMPLE_OMP_PARALLEL'.
46601                                                             (line   23)
46602* 'GIMPLE_OMP_CONTINUE':                 'GIMPLE_OMP_CONTINUE'.
46603                                                             (line    6)
46604* gimple_omp_continue_control_def:       'GIMPLE_OMP_CONTINUE'.
46605                                                             (line   12)
46606* gimple_omp_continue_control_def_ptr:   'GIMPLE_OMP_CONTINUE'.
46607                                                             (line   16)
46608* gimple_omp_continue_control_use:       'GIMPLE_OMP_CONTINUE'.
46609                                                             (line   23)
46610* gimple_omp_continue_control_use_ptr:   'GIMPLE_OMP_CONTINUE'.
46611                                                             (line   27)
46612* gimple_omp_continue_set_control_def:   'GIMPLE_OMP_CONTINUE'.
46613                                                             (line   19)
46614* gimple_omp_continue_set_control_use:   'GIMPLE_OMP_CONTINUE'.
46615                                                             (line   30)
46616* 'GIMPLE_OMP_CRITICAL':                 'GIMPLE_OMP_CRITICAL'.
46617                                                             (line    6)
46618* gimple_omp_critical_name:              'GIMPLE_OMP_CRITICAL'.
46619                                                             (line   12)
46620* gimple_omp_critical_name_ptr:          'GIMPLE_OMP_CRITICAL'.
46621                                                             (line   15)
46622* gimple_omp_critical_set_name:          'GIMPLE_OMP_CRITICAL'.
46623                                                             (line   19)
46624* 'GIMPLE_OMP_FOR':                      'GIMPLE_OMP_FOR'.   (line    6)
46625* gimple_omp_for_clauses:                'GIMPLE_OMP_FOR'.   (line   19)
46626* gimple_omp_for_clauses_ptr:            'GIMPLE_OMP_FOR'.   (line   22)
46627* gimple_omp_for_cond:                   'GIMPLE_OMP_FOR'.   (line   82)
46628* gimple_omp_for_final:                  'GIMPLE_OMP_FOR'.   (line   50)
46629* gimple_omp_for_final_ptr:              'GIMPLE_OMP_FOR'.   (line   53)
46630* gimple_omp_for_incr:                   'GIMPLE_OMP_FOR'.   (line   60)
46631* gimple_omp_for_incr_ptr:               'GIMPLE_OMP_FOR'.   (line   63)
46632* gimple_omp_for_index:                  'GIMPLE_OMP_FOR'.   (line   30)
46633* gimple_omp_for_index_ptr:              'GIMPLE_OMP_FOR'.   (line   33)
46634* gimple_omp_for_initial:                'GIMPLE_OMP_FOR'.   (line   40)
46635* gimple_omp_for_initial_ptr:            'GIMPLE_OMP_FOR'.   (line   43)
46636* gimple_omp_for_pre_body:               'GIMPLE_OMP_FOR'.   (line   69)
46637* gimple_omp_for_set_clauses:            'GIMPLE_OMP_FOR'.   (line   25)
46638* gimple_omp_for_set_cond:               'GIMPLE_OMP_FOR'.   (line   78)
46639* gimple_omp_for_set_final:              'GIMPLE_OMP_FOR'.   (line   56)
46640* gimple_omp_for_set_incr:               'GIMPLE_OMP_FOR'.   (line   66)
46641* gimple_omp_for_set_index:              'GIMPLE_OMP_FOR'.   (line   36)
46642* gimple_omp_for_set_initial:            'GIMPLE_OMP_FOR'.   (line   46)
46643* gimple_omp_for_set_pre_body:           'GIMPLE_OMP_FOR'.   (line   73)
46644* 'GIMPLE_OMP_MASTER':                   'GIMPLE_OMP_MASTER'.
46645                                                             (line    6)
46646* 'GIMPLE_OMP_ORDERED':                  'GIMPLE_OMP_ORDERED'.
46647                                                             (line    6)
46648* 'GIMPLE_OMP_PARALLEL':                 'GIMPLE_OMP_PARALLEL'.
46649                                                             (line    6)
46650* gimple_omp_parallel_child_fn:          'GIMPLE_OMP_PARALLEL'.
46651                                                             (line   41)
46652* gimple_omp_parallel_child_fn_ptr:      'GIMPLE_OMP_PARALLEL'.
46653                                                             (line   45)
46654* gimple_omp_parallel_clauses:           'GIMPLE_OMP_PARALLEL'.
46655                                                             (line   30)
46656* gimple_omp_parallel_clauses_ptr:       'GIMPLE_OMP_PARALLEL'.
46657                                                             (line   33)
46658* gimple_omp_parallel_combined_p:        'GIMPLE_OMP_PARALLEL'.
46659                                                             (line   15)
46660* gimple_omp_parallel_data_arg:          'GIMPLE_OMP_PARALLEL'.
46661                                                             (line   53)
46662* gimple_omp_parallel_data_arg_ptr:      'GIMPLE_OMP_PARALLEL'.
46663                                                             (line   57)
46664* gimple_omp_parallel_set_child_fn:      'GIMPLE_OMP_PARALLEL'.
46665                                                             (line   49)
46666* gimple_omp_parallel_set_clauses:       'GIMPLE_OMP_PARALLEL'.
46667                                                             (line   36)
46668* gimple_omp_parallel_set_combined_p:    'GIMPLE_OMP_PARALLEL'.
46669                                                             (line   19)
46670* gimple_omp_parallel_set_data_arg:      'GIMPLE_OMP_PARALLEL'.
46671                                                             (line   60)
46672* 'GIMPLE_OMP_RETURN':                   'GIMPLE_OMP_RETURN'.
46673                                                             (line    6)
46674* gimple_omp_return_nowait_p:            'GIMPLE_OMP_RETURN'.
46675                                                             (line   13)
46676* gimple_omp_return_set_nowait:          'GIMPLE_OMP_RETURN'.
46677                                                             (line   10)
46678* 'GIMPLE_OMP_SECTION':                  'GIMPLE_OMP_SECTION'.
46679                                                             (line    6)
46680* 'GIMPLE_OMP_SECTIONS':                 'GIMPLE_OMP_SECTIONS'.
46681                                                             (line    6)
46682* gimple_omp_sections_clauses:           'GIMPLE_OMP_SECTIONS'.
46683                                                             (line   29)
46684* gimple_omp_sections_clauses_ptr:       'GIMPLE_OMP_SECTIONS'.
46685                                                             (line   32)
46686* gimple_omp_sections_control:           'GIMPLE_OMP_SECTIONS'.
46687                                                             (line   16)
46688* gimple_omp_sections_control_ptr:       'GIMPLE_OMP_SECTIONS'.
46689                                                             (line   20)
46690* gimple_omp_sections_set_clauses:       'GIMPLE_OMP_SECTIONS'.
46691                                                             (line   35)
46692* gimple_omp_sections_set_control:       'GIMPLE_OMP_SECTIONS'.
46693                                                             (line   24)
46694* gimple_omp_section_last_p:             'GIMPLE_OMP_SECTION'.
46695                                                             (line   11)
46696* gimple_omp_section_set_last:           'GIMPLE_OMP_SECTION'.
46697                                                             (line   15)
46698* gimple_omp_set_body:                   'GIMPLE_OMP_PARALLEL'.
46699                                                             (line   26)
46700* 'GIMPLE_OMP_SINGLE':                   'GIMPLE_OMP_SINGLE'.
46701                                                             (line    6)
46702* gimple_omp_single_clauses:             'GIMPLE_OMP_SINGLE'.
46703                                                             (line   13)
46704* gimple_omp_single_clauses_ptr:         'GIMPLE_OMP_SINGLE'.
46705                                                             (line   16)
46706* gimple_omp_single_set_clauses:         'GIMPLE_OMP_SINGLE'.
46707                                                             (line   19)
46708* gimple_op:                             Logical Operators.  (line   79)
46709* gimple_op <1>:                         Manipulating GIMPLE statements.
46710                                                             (line   80)
46711* gimple_ops:                            Logical Operators.  (line   82)
46712* gimple_ops <1>:                        Manipulating GIMPLE statements.
46713                                                             (line   77)
46714* gimple_op_ptr:                         Manipulating GIMPLE statements.
46715                                                             (line   83)
46716* 'GIMPLE_PHI':                          'GIMPLE_PHI'.       (line    6)
46717* gimple_phi_arg:                        'GIMPLE_PHI'.       (line   24)
46718* gimple_phi_capacity:                   'GIMPLE_PHI'.       (line    6)
46719* gimple_phi_num_args:                   'GIMPLE_PHI'.       (line   10)
46720* gimple_phi_result:                     'GIMPLE_PHI'.       (line   15)
46721* gimple_phi_result_ptr:                 'GIMPLE_PHI'.       (line   18)
46722* gimple_phi_set_arg:                    'GIMPLE_PHI'.       (line   28)
46723* gimple_phi_set_result:                 'GIMPLE_PHI'.       (line   21)
46724* gimple_plf:                            Manipulating GIMPLE statements.
46725                                                             (line   64)
46726* 'GIMPLE_RESX':                         'GIMPLE_RESX'.      (line    6)
46727* gimple_resx_region:                    'GIMPLE_RESX'.      (line   12)
46728* gimple_resx_set_region:                'GIMPLE_RESX'.      (line   15)
46729* 'GIMPLE_RETURN':                       'GIMPLE_RETURN'.    (line    6)
46730* gimple_return_retval:                  'GIMPLE_RETURN'.    (line    9)
46731* gimple_return_set_retval:              'GIMPLE_RETURN'.    (line   12)
46732* gimple_seq_add_seq:                    GIMPLE sequences.   (line   30)
46733* gimple_seq_add_stmt:                   GIMPLE sequences.   (line   24)
46734* gimple_seq_alloc:                      GIMPLE sequences.   (line   61)
46735* gimple_seq_copy:                       GIMPLE sequences.   (line   65)
46736* gimple_seq_deep_copy:                  GIMPLE sequences.   (line   36)
46737* gimple_seq_empty_p:                    GIMPLE sequences.   (line   69)
46738* gimple_seq_first:                      GIMPLE sequences.   (line   43)
46739* gimple_seq_init:                       GIMPLE sequences.   (line   58)
46740* gimple_seq_last:                       GIMPLE sequences.   (line   46)
46741* gimple_seq_reverse:                    GIMPLE sequences.   (line   39)
46742* gimple_seq_set_first:                  GIMPLE sequences.   (line   53)
46743* gimple_seq_set_last:                   GIMPLE sequences.   (line   49)
46744* gimple_seq_singleton_p:                GIMPLE sequences.   (line   78)
46745* gimple_set_block:                      Manipulating GIMPLE statements.
46746                                                             (line   38)
46747* gimple_set_def_ops:                    Manipulating GIMPLE statements.
46748                                                             (line   96)
46749* gimple_set_has_volatile_ops:           Manipulating GIMPLE statements.
46750                                                             (line  136)
46751* gimple_set_locus:                      Manipulating GIMPLE statements.
46752                                                             (line   44)
46753* gimple_set_op:                         Manipulating GIMPLE statements.
46754                                                             (line   86)
46755* gimple_set_plf:                        Manipulating GIMPLE statements.
46756                                                             (line   60)
46757* gimple_set_use_ops:                    Manipulating GIMPLE statements.
46758                                                             (line  103)
46759* gimple_set_vdef_ops:                   Manipulating GIMPLE statements.
46760                                                             (line  117)
46761* gimple_set_visited:                    Manipulating GIMPLE statements.
46762                                                             (line   53)
46763* gimple_set_vuse_ops:                   Manipulating GIMPLE statements.
46764                                                             (line  110)
46765* gimple_statement_base:                 Tuple representation.
46766                                                             (line   14)
46767* gimple_statement_with_ops:             Tuple representation.
46768                                                             (line   96)
46769* gimple_stored_syms:                    Manipulating GIMPLE statements.
46770                                                             (line  125)
46771* 'GIMPLE_SWITCH':                       'GIMPLE_SWITCH'.    (line    6)
46772* gimple_switch_default_label:           'GIMPLE_SWITCH'.    (line   38)
46773* gimple_switch_index:                   'GIMPLE_SWITCH'.    (line   23)
46774* gimple_switch_label:                   'GIMPLE_SWITCH'.    (line   29)
46775* gimple_switch_num_labels:              'GIMPLE_SWITCH'.    (line   14)
46776* gimple_switch_set_default_label:       'GIMPLE_SWITCH'.    (line   41)
46777* gimple_switch_set_index:               'GIMPLE_SWITCH'.    (line   26)
46778* gimple_switch_set_label:               'GIMPLE_SWITCH'.    (line   33)
46779* gimple_switch_set_num_labels:          'GIMPLE_SWITCH'.    (line   18)
46780* 'GIMPLE_TRY':                          'GIMPLE_TRY'.       (line    6)
46781* gimple_try_catch_is_cleanup:           'GIMPLE_TRY'.       (line   19)
46782* gimple_try_cleanup:                    'GIMPLE_TRY'.       (line   26)
46783* gimple_try_eval:                       'GIMPLE_TRY'.       (line   22)
46784* gimple_try_kind:                       'GIMPLE_TRY'.       (line   15)
46785* gimple_try_set_catch_is_cleanup:       'GIMPLE_TRY'.       (line   30)
46786* gimple_try_set_cleanup:                'GIMPLE_TRY'.       (line   39)
46787* gimple_try_set_eval:                   'GIMPLE_TRY'.       (line   34)
46788* gimple_use_ops:                        Manipulating GIMPLE statements.
46789                                                             (line  100)
46790* gimple_vdef_ops:                       Manipulating GIMPLE statements.
46791                                                             (line  114)
46792* gimple_visited_p:                      Manipulating GIMPLE statements.
46793                                                             (line   57)
46794* gimple_vuse_ops:                       Manipulating GIMPLE statements.
46795                                                             (line  107)
46796* gimple_wce_cleanup:                    'GIMPLE_WITH_CLEANUP_EXPR'.
46797                                                             (line   10)
46798* gimple_wce_cleanup_eh_only:            'GIMPLE_WITH_CLEANUP_EXPR'.
46799                                                             (line   17)
46800* gimple_wce_set_cleanup:                'GIMPLE_WITH_CLEANUP_EXPR'.
46801                                                             (line   13)
46802* gimple_wce_set_cleanup_eh_only:        'GIMPLE_WITH_CLEANUP_EXPR'.
46803                                                             (line   20)
46804* 'GIMPLE_WITH_CLEANUP_EXPR':            'GIMPLE_WITH_CLEANUP_EXPR'.
46805                                                             (line    6)
46806* gimplification:                        Parsing pass.       (line   13)
46807* gimplification <1>:                    Gimplification pass.
46808                                                             (line    6)
46809* gimplifier:                            Parsing pass.       (line   13)
46810* gimplify_assign:                       'GIMPLE_ASSIGN'.    (line   17)
46811* gimplify_expr:                         Gimplification pass.
46812                                                             (line   18)
46813* gimplify_function_tree:                Gimplification pass.
46814                                                             (line   18)
46815* GLOBAL_INIT_PRIORITY:                  Functions for C++.  (line  141)
46816* global_regs:                           Register Basics.    (line   59)
46817* 'GO_IF_LEGITIMATE_ADDRESS':            Addressing Modes.   (line   90)
46818* greater than:                          Comparisons.        (line   60)
46819* greater than <1>:                      Comparisons.        (line   64)
46820* greater than <2>:                      Comparisons.        (line   72)
46821* gsi_after_labels:                      Sequence iterators. (line   74)
46822* gsi_bb:                                Sequence iterators. (line   82)
46823* gsi_commit_edge_inserts:               Sequence iterators. (line  193)
46824* gsi_commit_edge_inserts <1>:           Maintaining the CFG.
46825                                                             (line  105)
46826* gsi_commit_one_edge_insert:            Sequence iterators. (line  188)
46827* gsi_end_p:                             Sequence iterators. (line   59)
46828* gsi_end_p <1>:                         Maintaining the CFG.
46829                                                             (line   48)
46830* gsi_for_stmt:                          Sequence iterators. (line  156)
46831* gsi_insert_after:                      Sequence iterators. (line  145)
46832* gsi_insert_after <1>:                  Maintaining the CFG.
46833                                                             (line   60)
46834* gsi_insert_before:                     Sequence iterators. (line  134)
46835* gsi_insert_before <1>:                 Maintaining the CFG.
46836                                                             (line   66)
46837* gsi_insert_on_edge:                    Sequence iterators. (line  173)
46838* gsi_insert_on_edge <1>:                Maintaining the CFG.
46839                                                             (line  105)
46840* gsi_insert_on_edge_immediate:          Sequence iterators. (line  183)
46841* gsi_insert_seq_after:                  Sequence iterators. (line  152)
46842* gsi_insert_seq_before:                 Sequence iterators. (line  141)
46843* gsi_insert_seq_on_edge:                Sequence iterators. (line  177)
46844* gsi_last:                              Sequence iterators. (line   49)
46845* gsi_last <1>:                          Maintaining the CFG.
46846                                                             (line   44)
46847* gsi_last_bb:                           Sequence iterators. (line   55)
46848* gsi_link_after:                        Sequence iterators. (line  113)
46849* gsi_link_before:                       Sequence iterators. (line  103)
46850* gsi_link_seq_after:                    Sequence iterators. (line  108)
46851* gsi_link_seq_before:                   Sequence iterators. (line   97)
46852* gsi_move_after:                        Sequence iterators. (line  159)
46853* gsi_move_before:                       Sequence iterators. (line  164)
46854* gsi_move_to_bb_end:                    Sequence iterators. (line  169)
46855* gsi_next:                              Sequence iterators. (line   65)
46856* gsi_next <1>:                          Maintaining the CFG.
46857                                                             (line   52)
46858* gsi_one_before_end_p:                  Sequence iterators. (line   62)
46859* gsi_prev:                              Sequence iterators. (line   68)
46860* gsi_prev <1>:                          Maintaining the CFG.
46861                                                             (line   56)
46862* gsi_remove:                            Sequence iterators. (line   88)
46863* gsi_remove <1>:                        Maintaining the CFG.
46864                                                             (line   72)
46865* gsi_replace:                           Sequence iterators. (line  128)
46866* gsi_seq:                               Sequence iterators. (line   85)
46867* gsi_split_seq_after:                   Sequence iterators. (line  118)
46868* gsi_split_seq_before:                  Sequence iterators. (line  123)
46869* gsi_start:                             Sequence iterators. (line   39)
46870* gsi_start <1>:                         Maintaining the CFG.
46871                                                             (line   40)
46872* gsi_start_bb:                          Sequence iterators. (line   45)
46873* gsi_stmt:                              Sequence iterators. (line   71)
46874* gsi_stmt_ptr:                          Sequence iterators. (line   79)
46875* gt:                                    Comparisons.        (line   60)
46876* 'gt' and attributes:                   Expressions.        (line   83)
46877* gtu:                                   Comparisons.        (line   64)
46878* 'gtu' and attributes:                  Expressions.        (line   83)
46879* GTY:                                   Type Information.   (line    6)
46880* GT_EXPR:                               Unary and Binary Expressions.
46881                                                             (line    6)
46882* 'H' in constraint:                     Simple Constraints. (line   96)
46883* HAmode:                                Machine Modes.      (line  143)
46884* HANDLER:                               Statements for C++. (line    6)
46885* HANDLER_BODY:                          Statements for C++. (line    6)
46886* HANDLER_PARMS:                         Statements for C++. (line    6)
46887* HANDLE_PRAGMA_PACK_WITH_EXPANSION:     Misc.               (line  434)
46888* hard registers:                        Regs and Memory.    (line    9)
46889* HARD_FRAME_POINTER_IS_ARG_POINTER:     Frame Registers.    (line   57)
46890* HARD_FRAME_POINTER_IS_FRAME_POINTER:   Frame Registers.    (line   50)
46891* HARD_FRAME_POINTER_REGNUM:             Frame Registers.    (line   19)
46892* HARD_REGNO_CALLER_SAVE_MODE:           Caller Saves.       (line   19)
46893* HARD_REGNO_CALL_PART_CLOBBERED:        Register Basics.    (line   52)
46894* HARD_REGNO_MODE_OK:                    Values in Registers.
46895                                                             (line   57)
46896* HARD_REGNO_NREGS:                      Values in Registers.
46897                                                             (line   10)
46898* HARD_REGNO_NREGS_HAS_PADDING:          Values in Registers.
46899                                                             (line   24)
46900* HARD_REGNO_NREGS_WITH_PADDING:         Values in Registers.
46901                                                             (line   42)
46902* HARD_REGNO_RENAME_OK:                  Values in Registers.
46903                                                             (line  117)
46904* HAS_INIT_SECTION:                      Macros for Initialization.
46905                                                             (line   18)
46906* HAS_LONG_COND_BRANCH:                  Misc.               (line    8)
46907* HAS_LONG_UNCOND_BRANCH:                Misc.               (line   17)
46908* HAVE_DOS_BASED_FILE_SYSTEM:            Filesystem.         (line   11)
46909* HAVE_POST_DECREMENT:                   Addressing Modes.   (line   11)
46910* HAVE_POST_INCREMENT:                   Addressing Modes.   (line   10)
46911* HAVE_POST_MODIFY_DISP:                 Addressing Modes.   (line   17)
46912* HAVE_POST_MODIFY_REG:                  Addressing Modes.   (line   23)
46913* HAVE_PRE_DECREMENT:                    Addressing Modes.   (line    9)
46914* HAVE_PRE_INCREMENT:                    Addressing Modes.   (line    8)
46915* HAVE_PRE_MODIFY_DISP:                  Addressing Modes.   (line   16)
46916* HAVE_PRE_MODIFY_REG:                   Addressing Modes.   (line   22)
46917* HCmode:                                Machine Modes.      (line  196)
46918* HFmode:                                Machine Modes.      (line   58)
46919* high:                                  Constants.          (line  119)
46920* HImode:                                Machine Modes.      (line   29)
46921* 'HImode', in 'insn':                   Insns.              (line  275)
46922* HONOR_REG_ALLOC_ORDER:                 Allocation Order.   (line   36)
46923* host configuration:                    Host Config.        (line    6)
46924* host functions:                        Host Common.        (line    6)
46925* host hooks:                            Host Common.        (line    6)
46926* host makefile fragment:                Host Fragment.      (line    6)
46927* HOST_BIT_BUCKET:                       Filesystem.         (line   51)
46928* HOST_EXECUTABLE_SUFFIX:                Filesystem.         (line   45)
46929* HOST_HOOKS_EXTRA_SIGNALS:              Host Common.        (line   11)
46930* HOST_HOOKS_GT_PCH_ALLOC_GRANULARITY:   Host Common.        (line   43)
46931* HOST_HOOKS_GT_PCH_GET_ADDRESS:         Host Common.        (line   15)
46932* HOST_HOOKS_GT_PCH_USE_ADDRESS:         Host Common.        (line   24)
46933* HOST_LACKS_INODE_NUMBERS:              Filesystem.         (line   89)
46934* HOST_LONG_FORMAT:                      Host Misc.          (line   45)
46935* HOST_LONG_LONG_FORMAT:                 Host Misc.          (line   41)
46936* HOST_OBJECT_SUFFIX:                    Filesystem.         (line   40)
46937* HOST_PTR_PRINTF:                       Host Misc.          (line   49)
46938* HOT_TEXT_SECTION_NAME:                 Sections.           (line   42)
46939* HQmode:                                Machine Modes.      (line  107)
46940* 'i' in constraint:                     Simple Constraints. (line   68)
46941* 'I' in constraint:                     Simple Constraints. (line   79)
46942* identifier:                            Identifiers.        (line    6)
46943* IDENTIFIER_LENGTH:                     Identifiers.        (line   22)
46944* IDENTIFIER_NODE:                       Identifiers.        (line    6)
46945* IDENTIFIER_OPNAME_P:                   Identifiers.        (line   27)
46946* IDENTIFIER_POINTER:                    Identifiers.        (line   17)
46947* IDENTIFIER_TYPENAME_P:                 Identifiers.        (line   33)
46948* IEEE 754-2008:                         Decimal float library routines.
46949                                                             (line    6)
46950* IFCVT_MACHDEP_INIT:                    Misc.               (line  559)
46951* IFCVT_MODIFY_CANCEL:                   Misc.               (line  553)
46952* IFCVT_MODIFY_FINAL:                    Misc.               (line  547)
46953* IFCVT_MODIFY_INSN:                     Misc.               (line  541)
46954* IFCVT_MODIFY_MULTIPLE_TESTS:           Misc.               (line  533)
46955* IFCVT_MODIFY_TESTS:                    Misc.               (line  523)
46956* IF_COND:                               Statements for C++. (line    6)
46957* if_marked:                             GTY Options.        (line  161)
46958* IF_STMT:                               Statements for C++. (line    6)
46959* if_then_else:                          Comparisons.        (line   80)
46960* 'if_then_else' and attributes:         Expressions.        (line   32)
46961* 'if_then_else' usage:                  Side Effects.       (line   56)
46962* IMAGPART_EXPR:                         Unary and Binary Expressions.
46963                                                             (line    6)
46964* Immediate Uses:                        SSA Operands.       (line  271)
46965* immediate_operand:                     Machine-Independent Predicates.
46966                                                             (line   10)
46967* IMMEDIATE_PREFIX:                      Instruction Output. (line  153)
46968* include:                               Including Patterns. (line    6)
46969* INCLUDE_DEFAULTS:                      Driver.             (line  327)
46970* inclusive-or, bitwise:                 Arithmetic.         (line  164)
46971* INCOMING_FRAME_SP_OFFSET:              Frame Layout.       (line  181)
46972* INCOMING_REGNO:                        Register Basics.    (line   87)
46973* INCOMING_RETURN_ADDR_RTX:              Frame Layout.       (line  137)
46974* INCOMING_STACK_BOUNDARY:               Storage Layout.     (line  159)
46975* INDEX_REG_CLASS:                       Register Classes.   (line  140)
46976* 'indirect_jump' instruction pattern:   Standard Names.     (line 1218)
46977* indirect_operand:                      Machine-Independent Predicates.
46978                                                             (line   70)
46979* INDIRECT_REF:                          Storage References. (line    6)
46980* initialization routines:               Initialization.     (line    6)
46981* INITIAL_ELIMINATION_OFFSET:            Elimination.        (line   84)
46982* INITIAL_FRAME_ADDRESS_RTX:             Frame Layout.       (line   81)
46983* INITIAL_FRAME_POINTER_OFFSET:          Elimination.        (line   34)
46984* INIT_ARRAY_SECTION_ASM_OP:             Sections.           (line  106)
46985* INIT_CUMULATIVE_ARGS:                  Register Arguments. (line  147)
46986* INIT_CUMULATIVE_INCOMING_ARGS:         Register Arguments. (line  175)
46987* INIT_CUMULATIVE_LIBCALL_ARGS:          Register Arguments. (line  169)
46988* INIT_ENVIRONMENT:                      Driver.             (line  305)
46989* INIT_EXPANDERS:                        Per-Function Data.  (line   36)
46990* INIT_EXPR:                             Unary and Binary Expressions.
46991                                                             (line    6)
46992* init_machine_status:                   Per-Function Data.  (line   42)
46993* init_one_libfunc:                      Library Calls.      (line   15)
46994* INIT_SECTION_ASM_OP:                   Sections.           (line   90)
46995* INIT_SECTION_ASM_OP <1>:               Macros for Initialization.
46996                                                             (line    9)
46997* inlining:                              Target Attributes.  (line   95)
46998* insert_insn_on_edge:                   Maintaining the CFG.
46999                                                             (line  105)
47000* insn:                                  Insns.              (line   63)
47001* 'insn' and '/f':                       Flags.              (line  107)
47002* 'insn' and '/j':                       Flags.              (line  157)
47003* 'insn' and '/s':                       Flags.              (line   49)
47004* 'insn' and '/s' <1>:                   Flags.              (line  148)
47005* 'insn' and '/u':                       Flags.              (line   39)
47006* 'insn' and '/v':                       Flags.              (line   44)
47007* insn attributes:                       Insn Attributes.    (line    6)
47008* insn canonicalization:                 Insn Canonicalizations.
47009                                                             (line    6)
47010* insn includes:                         Including Patterns. (line    6)
47011* insn lengths, computing:               Insn Lengths.       (line    6)
47012* insn notes, notes:                     Basic Blocks.       (line   52)
47013* insn splitting:                        Insn Splitting.     (line    6)
47014* insn-attr.h:                           Defining Attributes.
47015                                                             (line   32)
47016* insns:                                 Insns.              (line    6)
47017* insns, generating:                     RTL Template.       (line    6)
47018* insns, recognizing:                    RTL Template.       (line    6)
47019* INSN_ANNULLED_BRANCH_P:                Flags.              (line   39)
47020* INSN_CODE:                             Insns.              (line  302)
47021* INSN_DELETED_P:                        Flags.              (line   44)
47022* INSN_FROM_TARGET_P:                    Flags.              (line   49)
47023* insn_list:                             Insns.              (line  546)
47024* INSN_REFERENCES_ARE_DELAYED:           Misc.               (line  461)
47025* INSN_SETS_ARE_DELAYED:                 Misc.               (line  450)
47026* INSN_UID:                              Insns.              (line   23)
47027* INSN_VAR_LOCATION:                     Insns.              (line  243)
47028* instruction attributes:                Insn Attributes.    (line    6)
47029* instruction latency time:              Processor pipeline description.
47030                                                             (line    6)
47031* instruction latency time <1>:          Processor pipeline description.
47032                                                             (line  105)
47033* instruction latency time <2>:          Processor pipeline description.
47034                                                             (line  196)
47035* instruction patterns:                  Patterns.           (line    6)
47036* instruction splitting:                 Insn Splitting.     (line    6)
47037* 'insv' instruction pattern:            Standard Names.     (line 1017)
47038* 'insvM' instruction pattern:           Standard Names.     (line  969)
47039* 'insvmisalignM' instruction pattern:   Standard Names.     (line  979)
47040* int iterators in '.md' files:          Int Iterators.      (line    6)
47041* INT16_TYPE:                            Type Layout.        (line  253)
47042* INT32_TYPE:                            Type Layout.        (line  254)
47043* INT64_TYPE:                            Type Layout.        (line  255)
47044* INT8_TYPE:                             Type Layout.        (line  252)
47045* INTEGER_CST:                           Constant expressions.
47046                                                             (line    6)
47047* INTEGER_TYPE:                          Types.              (line    6)
47048* Interdependence of Patterns:           Dependent Patterns. (line    6)
47049* interfacing to GCC output:             Interface.          (line    6)
47050* interlock delays:                      Processor pipeline description.
47051                                                             (line    6)
47052* intermediate representation lowering:  Parsing pass.       (line   13)
47053* INTMAX_TYPE:                           Type Layout.        (line  229)
47054* INTPTR_TYPE:                           Type Layout.        (line  276)
47055* introduction:                          Top.                (line    6)
47056* INT_FAST16_TYPE:                       Type Layout.        (line  269)
47057* INT_FAST32_TYPE:                       Type Layout.        (line  270)
47058* INT_FAST64_TYPE:                       Type Layout.        (line  271)
47059* INT_FAST8_TYPE:                        Type Layout.        (line  268)
47060* INT_LEAST16_TYPE:                      Type Layout.        (line  261)
47061* INT_LEAST32_TYPE:                      Type Layout.        (line  262)
47062* INT_LEAST64_TYPE:                      Type Layout.        (line  263)
47063* INT_LEAST8_TYPE:                       Type Layout.        (line  260)
47064* INT_TYPE_SIZE:                         Type Layout.        (line   11)
47065* INVOKE__main:                          Macros for Initialization.
47066                                                             (line   50)
47067* in_struct:                             Flags.              (line  245)
47068* 'in_struct', in 'code_label' and 'note': Flags.            (line   59)
47069* 'in_struct', in 'insn' and 'jump_insn' and 'call_insn': Flags.
47070                                                             (line   49)
47071* 'in_struct', in 'insn', 'jump_insn' and 'call_insn': Flags.
47072                                                             (line  148)
47073* 'in_struct', in 'subreg':              Flags.              (line  187)
47074* ior:                                   Arithmetic.         (line  164)
47075* 'ior' and attributes:                  Expressions.        (line   50)
47076* 'ior', canonicalization of:            Insn Canonicalizations.
47077                                                             (line   51)
47078* 'iorM3' instruction pattern:           Standard Names.     (line  266)
47079* IRA_HARD_REGNO_ADD_COST_MULTIPLIER:    Allocation Order.   (line   44)
47080* IS_ASM_LOGICAL_LINE_SEPARATOR:         Data Output.        (line  119)
47081* is_gimple_addressable:                 Logical Operators.  (line  113)
47082* is_gimple_asm_val:                     Logical Operators.  (line  117)
47083* is_gimple_assign:                      Logical Operators.  (line  149)
47084* is_gimple_call:                        Logical Operators.  (line  152)
47085* is_gimple_call_addr:                   Logical Operators.  (line  120)
47086* is_gimple_constant:                    Logical Operators.  (line  128)
47087* is_gimple_debug:                       Logical Operators.  (line  155)
47088* is_gimple_ip_invariant:                Logical Operators.  (line  137)
47089* is_gimple_ip_invariant_address:        Logical Operators.  (line  142)
47090* is_gimple_mem_ref_addr:                Logical Operators.  (line  124)
47091* is_gimple_min_invariant:               Logical Operators.  (line  131)
47092* is_gimple_omp:                         'GIMPLE_OMP_PARALLEL'.
47093                                                             (line   64)
47094* is_gimple_val:                         Logical Operators.  (line  107)
47095* iterators in '.md' files:              Iterators.          (line    6)
47096* IV analysis on GIMPLE:                 Scalar evolutions.  (line    6)
47097* IV analysis on RTL:                    loop-iv.            (line    6)
47098* JMP_BUF_SIZE:                          Exception Region Output.
47099                                                             (line   82)
47100* jump:                                  Flags.              (line  286)
47101* 'jump' instruction pattern:            Standard Names.     (line 1096)
47102* jump instruction patterns:             Jump Patterns.      (line    6)
47103* jump instructions and 'set':           Side Effects.       (line   56)
47104* 'jump', in 'call_insn':                Flags.              (line  161)
47105* 'jump', in 'insn':                     Flags.              (line  157)
47106* 'jump', in 'mem':                      Flags.              (line   70)
47107* Jumps:                                 Jumps.              (line    6)
47108* JUMP_ALIGN:                            Alignment Output.   (line    8)
47109* jump_insn:                             Insns.              (line   73)
47110* 'jump_insn' and '/f':                  Flags.              (line  107)
47111* 'jump_insn' and '/s':                  Flags.              (line   49)
47112* 'jump_insn' and '/s' <1>:              Flags.              (line  148)
47113* 'jump_insn' and '/u':                  Flags.              (line   39)
47114* 'jump_insn' and '/v':                  Flags.              (line   44)
47115* JUMP_LABEL:                            Insns.              (line   80)
47116* JUMP_TABLES_IN_TEXT_SECTION:           Sections.           (line  150)
47117* LABEL_ALIGN:                           Alignment Output.   (line   57)
47118* LABEL_ALIGN_AFTER_BARRIER:             Alignment Output.   (line   26)
47119* LABEL_ALTERNATE_NAME:                  Edges.              (line  180)
47120* LABEL_ALT_ENTRY_P:                     Insns.              (line  146)
47121* LABEL_DECL:                            Declarations.       (line    6)
47122* LABEL_KIND:                            Insns.              (line  146)
47123* LABEL_NUSES:                           Insns.              (line  142)
47124* LABEL_PRESERVE_P:                      Flags.              (line   59)
47125* label_ref:                             Constants.          (line   96)
47126* 'label_ref' and '/v':                  Flags.              (line   65)
47127* 'label_ref', RTL sharing:              Sharing.            (line   35)
47128* LABEL_REF_NONLOCAL_P:                  Flags.              (line   65)
47129* language-dependent trees:              Language-dependent trees.
47130                                                             (line    6)
47131* language-independent intermediate representation: Parsing pass.
47132                                                             (line   13)
47133* lang_hooks.gimplify_expr:              Gimplification pass.
47134                                                             (line   18)
47135* lang_hooks.parse_file:                 Parsing pass.       (line    6)
47136* large return values:                   Aggregate Return.   (line    6)
47137* LARGEST_EXPONENT_IS_NORMAL:            Storage Layout.     (line  480)
47138* LAST_STACK_REG:                        Stack Registers.    (line   30)
47139* LAST_VIRTUAL_REGISTER:                 Regs and Memory.    (line   51)
47140* 'lceilMN2':                            Standard Names.     (line  687)
47141* LCSSA:                                 LCSSA.              (line    6)
47142* LDD_SUFFIX:                            Macros for Initialization.
47143                                                             (line  121)
47144* LD_FINI_SWITCH:                        Macros for Initialization.
47145                                                             (line   28)
47146* LD_INIT_SWITCH:                        Macros for Initialization.
47147                                                             (line   24)
47148* le:                                    Comparisons.        (line   76)
47149* 'le' and attributes:                   Expressions.        (line   83)
47150* leaf functions:                        Leaf Functions.     (line    6)
47151* leaf_function_p:                       Standard Names.     (line 1180)
47152* LEAF_REGISTERS:                        Leaf Functions.     (line   23)
47153* LEAF_REG_REMAP:                        Leaf Functions.     (line   37)
47154* left rotate:                           Arithmetic.         (line  196)
47155* left shift:                            Arithmetic.         (line  174)
47156* LEGITIMATE_PIC_OPERAND_P:              PIC.                (line   31)
47157* LEGITIMIZE_RELOAD_ADDRESS:             Addressing Modes.   (line  150)
47158* length:                                GTY Options.        (line   47)
47159* less than:                             Comparisons.        (line   68)
47160* less than or equal:                    Comparisons.        (line   76)
47161* leu:                                   Comparisons.        (line   76)
47162* 'leu' and attributes:                  Expressions.        (line   83)
47163* LE_EXPR:                               Unary and Binary Expressions.
47164                                                             (line    6)
47165* 'lfloorMN2':                           Standard Names.     (line  682)
47166* LIB2FUNCS_EXTRA:                       Target Fragment.    (line   11)
47167* LIBCALL_VALUE:                         Scalar Return.      (line   56)
47168* 'libgcc.a':                            Library Calls.      (line    6)
47169* LIBGCC2_CFLAGS:                        Target Fragment.    (line    8)
47170* LIBGCC2_GNU_PREFIX:                    Type Layout.        (line  127)
47171* LIBGCC2_HAS_DF_MODE:                   Type Layout.        (line  108)
47172* LIBGCC2_HAS_TF_MODE:                   Type Layout.        (line  121)
47173* LIBGCC2_HAS_XF_MODE:                   Type Layout.        (line  115)
47174* LIBGCC2_LONG_DOUBLE_TYPE_SIZE:         Type Layout.        (line  102)
47175* LIBGCC2_UNWIND_ATTRIBUTE:              Misc.               (line  963)
47176* LIBGCC_SPEC:                           Driver.             (line  115)
47177* library subroutine names:              Library Calls.      (line    6)
47178* LIBRARY_PATH_ENV:                      Misc.               (line  501)
47179* LIB_SPEC:                              Driver.             (line  107)
47180* LIMIT_RELOAD_CLASS:                    Register Classes.   (line  296)
47181* Linear loop transformations framework: Lambda.             (line    6)
47182* LINK_COMMAND_SPEC:                     Driver.             (line  236)
47183* LINK_EH_SPEC:                          Driver.             (line  142)
47184* LINK_GCC_C_SEQUENCE_SPEC:              Driver.             (line  232)
47185* LINK_LIBGCC_SPECIAL_1:                 Driver.             (line  227)
47186* LINK_SPEC:                             Driver.             (line  100)
47187* list:                                  Containers.         (line    6)
47188* Liveness representation:               Liveness information.
47189                                                             (line    6)
47190* load address instruction:              Simple Constraints. (line  162)
47191* LOAD_EXTEND_OP:                        Misc.               (line   59)
47192* 'load_multiple' instruction pattern:   Standard Names.     (line  136)
47193* Local Register Allocator (LRA):        RTL passes.         (line  199)
47194* LOCAL_ALIGNMENT:                       Storage Layout.     (line  246)
47195* LOCAL_CLASS_P:                         Classes.            (line   73)
47196* LOCAL_DECL_ALIGNMENT:                  Storage Layout.     (line  283)
47197* LOCAL_INCLUDE_DIR:                     Driver.             (line  312)
47198* LOCAL_LABEL_PREFIX:                    Instruction Output. (line  151)
47199* LOCAL_REGNO:                           Register Basics.    (line  101)
47200* Logical Operators:                     Logical Operators.  (line    6)
47201* logical-and, bitwise:                  Arithmetic.         (line  159)
47202* LOGICAL_OP_NON_SHORT_CIRCUIT:          Costs.              (line  264)
47203* 'logM2' instruction pattern:           Standard Names.     (line  595)
47204* LOG_LINKS:                             Insns.              (line  321)
47205* 'longjmp' and automatic variables:     Interface.          (line   52)
47206* LONG_ACCUM_TYPE_SIZE:                  Type Layout.        (line   92)
47207* LONG_DOUBLE_TYPE_SIZE:                 Type Layout.        (line   57)
47208* LONG_FRACT_TYPE_SIZE:                  Type Layout.        (line   72)
47209* LONG_LONG_ACCUM_TYPE_SIZE:             Type Layout.        (line   97)
47210* LONG_LONG_FRACT_TYPE_SIZE:             Type Layout.        (line   77)
47211* LONG_LONG_TYPE_SIZE:                   Type Layout.        (line   32)
47212* LONG_TYPE_SIZE:                        Type Layout.        (line   21)
47213* Loop analysis:                         Loop representation.
47214                                                             (line    6)
47215* Loop manipulation:                     Loop manipulation.  (line    6)
47216* Loop querying:                         Loop querying.      (line    6)
47217* Loop representation:                   Loop representation.
47218                                                             (line    6)
47219* Loop-closed SSA form:                  LCSSA.              (line    6)
47220* looping instruction patterns:          Looping Patterns.   (line    6)
47221* LOOP_ALIGN:                            Alignment Output.   (line   40)
47222* LOOP_EXPR:                             Unary and Binary Expressions.
47223                                                             (line    6)
47224* lowering, language-dependent intermediate representation: Parsing pass.
47225                                                             (line   13)
47226* lo_sum:                                Arithmetic.         (line   25)
47227* 'lrintMN2':                            Standard Names.     (line  672)
47228* 'lroundMN2':                           Standard Names.     (line  677)
47229* lshiftrt:                              Arithmetic.         (line  191)
47230* 'lshiftrt' and attributes:             Expressions.        (line   83)
47231* LSHIFT_EXPR:                           Unary and Binary Expressions.
47232                                                             (line    6)
47233* 'lshrM3' instruction pattern:          Standard Names.     (line  514)
47234* lt:                                    Comparisons.        (line   68)
47235* 'lt' and attributes:                   Expressions.        (line   83)
47236* LTGT_EXPR:                             Unary and Binary Expressions.
47237                                                             (line    6)
47238* lto:                                   LTO.                (line    6)
47239* ltrans:                                LTO.                (line    6)
47240* ltu:                                   Comparisons.        (line   68)
47241* LT_EXPR:                               Unary and Binary Expressions.
47242                                                             (line    6)
47243* 'm' in constraint:                     Simple Constraints. (line   17)
47244* machine attributes:                    Target Attributes.  (line    6)
47245* machine description macros:            Target Macros.      (line    6)
47246* machine descriptions:                  Machine Desc.       (line    6)
47247* machine mode conversions:              Conversions.        (line    6)
47248* machine modes:                         Machine Modes.      (line    6)
47249* machine specific constraints:          Machine Constraints.
47250                                                             (line    6)
47251* machine-independent predicates:        Machine-Independent Predicates.
47252                                                             (line    6)
47253* macros, target description:            Target Macros.      (line    6)
47254* 'maddMN4' instruction pattern:         Standard Names.     (line  437)
47255* makefile fragment:                     Fragments.          (line    6)
47256* makefile targets:                      Makefile.           (line    6)
47257* MAKE_DECL_ONE_ONLY:                    Label Output.       (line  246)
47258* make_safe_from:                        Expander Definitions.
47259                                                             (line  151)
47260* MALLOC_ABI_ALIGNMENT:                  Storage Layout.     (line  173)
47261* Manipulating GIMPLE statements:        Manipulating GIMPLE statements.
47262                                                             (line    6)
47263* marking roots:                         GGC Roots.          (line    6)
47264* mark_hook:                             GTY Options.        (line  177)
47265* MASK_RETURN_ADDR:                      Exception Region Output.
47266                                                             (line   34)
47267* matching constraint:                   Simple Constraints. (line  140)
47268* matching operands:                     Output Template.    (line   49)
47269* match_dup:                             RTL Template.       (line   73)
47270* match_dup <1>:                         define_peephole2.   (line   28)
47271* 'match_dup' and attributes:            Insn Lengths.       (line   16)
47272* match_operand:                         RTL Template.       (line   16)
47273* 'match_operand' and attributes:        Expressions.        (line   55)
47274* match_operator:                        RTL Template.       (line   95)
47275* match_op_dup:                          RTL Template.       (line  163)
47276* match_parallel:                        RTL Template.       (line  172)
47277* match_par_dup:                         RTL Template.       (line  219)
47278* match_scratch:                         RTL Template.       (line   58)
47279* match_scratch <1>:                     define_peephole2.   (line   28)
47280* 'match_test' and attributes:           Expressions.        (line   64)
47281* math library:                          Soft float library routines.
47282                                                             (line    6)
47283* math, in RTL:                          Arithmetic.         (line    6)
47284* matherr:                               Library Calls.      (line   52)
47285* MATH_LIBRARY:                          Misc.               (line  494)
47286* 'maxM3' instruction pattern:           Standard Names.     (line  301)
47287* MAX_BITS_PER_WORD:                     Storage Layout.     (line   59)
47288* MAX_CONDITIONAL_EXECUTE:               Misc.               (line  516)
47289* MAX_FIXED_MODE_SIZE:                   Storage Layout.     (line  428)
47290* MAX_MOVE_MAX:                          Misc.               (line  105)
47291* MAX_OFILE_ALIGNMENT:                   Storage Layout.     (line  208)
47292* MAX_REGS_PER_ADDRESS:                  Addressing Modes.   (line   42)
47293* MAX_STACK_ALIGNMENT:                   Storage Layout.     (line  202)
47294* maybe_undef:                           GTY Options.        (line  186)
47295* may_trap_p, tree_could_trap_p:         Edges.              (line  114)
47296* mcount:                                Profiling.          (line   12)
47297* MD_CAN_REDIRECT_BRANCH:                Misc.               (line  678)
47298* MD_EXEC_PREFIX:                        Driver.             (line  267)
47299* MD_FALLBACK_FRAME_STATE_FOR:           Exception Handling. (line   93)
47300* MD_HANDLE_UNWABI:                      Exception Handling. (line  112)
47301* MD_STARTFILE_PREFIX:                   Driver.             (line  295)
47302* MD_STARTFILE_PREFIX_1:                 Driver.             (line  300)
47303* mem:                                   Regs and Memory.    (line  370)
47304* 'mem' and '/c':                        Flags.              (line   81)
47305* 'mem' and '/f':                        Flags.              (line   85)
47306* 'mem' and '/j':                        Flags.              (line   70)
47307* 'mem' and '/u':                        Flags.              (line  134)
47308* 'mem' and '/v':                        Flags.              (line   76)
47309* 'mem', RTL sharing:                    Sharing.            (line   40)
47310* memory model:                          Memory model.       (line    6)
47311* memory reference, nonoffsettable:      Simple Constraints. (line  254)
47312* memory references in constraints:      Simple Constraints. (line   17)
47313* 'memory_barrier' instruction pattern:  Standard Names.     (line 1574)
47314* MEMORY_MOVE_COST:                      Costs.              (line   53)
47315* memory_operand:                        Machine-Independent Predicates.
47316                                                             (line   57)
47317* MEM_ADDR_SPACE:                        Special Accessors.  (line   48)
47318* MEM_ALIAS_SET:                         Special Accessors.  (line    9)
47319* MEM_ALIGN:                             Special Accessors.  (line   45)
47320* MEM_EXPR:                              Special Accessors.  (line   19)
47321* MEM_KEEP_ALIAS_SET_P:                  Flags.              (line   70)
47322* MEM_NOTRAP_P:                          Flags.              (line   81)
47323* MEM_OFFSET:                            Special Accessors.  (line   31)
47324* MEM_OFFSET_KNOWN_P:                    Special Accessors.  (line   27)
47325* MEM_POINTER:                           Flags.              (line   85)
47326* MEM_READONLY_P:                        Flags.              (line  134)
47327* MEM_REF:                               Storage References. (line    6)
47328* 'mem_signal_fenceMODE' instruction pattern: Standard Names.
47329                                                             (line 1844)
47330* MEM_SIZE:                              Special Accessors.  (line   39)
47331* MEM_SIZE_KNOWN_P:                      Special Accessors.  (line   35)
47332* 'mem_thread_fenceMODE' instruction pattern: Standard Names.
47333                                                             (line 1836)
47334* MEM_VOLATILE_P:                        Flags.              (line   76)
47335* METHOD_TYPE:                           Types.              (line    6)
47336* MINIMUM_ALIGNMENT:                     Storage Layout.     (line  296)
47337* MINIMUM_ATOMIC_ALIGNMENT:              Storage Layout.     (line  181)
47338* 'minM3' instruction pattern:           Standard Names.     (line  301)
47339* minus:                                 Arithmetic.         (line   38)
47340* 'minus' and attributes:                Expressions.        (line   83)
47341* 'minus', canonicalization of:          Insn Canonicalizations.
47342                                                             (line   27)
47343* MINUS_EXPR:                            Unary and Binary Expressions.
47344                                                             (line    6)
47345* MIN_UNITS_PER_WORD:                    Storage Layout.     (line   69)
47346* MIPS coprocessor-definition macros:    MIPS Coprocessors.  (line    6)
47347* mod:                                   Arithmetic.         (line  137)
47348* 'mod' and attributes:                  Expressions.        (line   83)
47349* mode classes:                          Machine Modes.      (line  218)
47350* mode iterators in '.md' files:         Mode Iterators.     (line    6)
47351* mode switching:                        Mode Switching.     (line    6)
47352* MODES_TIEABLE_P:                       Values in Registers.
47353                                                             (line  127)
47354* MODE_ACCUM:                            Machine Modes.      (line  248)
47355* MODE_AFTER:                            Mode Switching.     (line   48)
47356* MODE_BASE_REG_CLASS:                   Register Classes.   (line  116)
47357* MODE_BASE_REG_REG_CLASS:               Register Classes.   (line  122)
47358* MODE_CC:                               Machine Modes.      (line  267)
47359* MODE_CC <1>:                           MODE_CC Condition Codes.
47360                                                             (line    6)
47361* MODE_CODE_BASE_REG_CLASS:              Register Classes.   (line  129)
47362* MODE_COMPLEX_FLOAT:                    Machine Modes.      (line  259)
47363* MODE_COMPLEX_INT:                      Machine Modes.      (line  256)
47364* MODE_DECIMAL_FLOAT:                    Machine Modes.      (line  236)
47365* MODE_ENTRY:                            Mode Switching.     (line   54)
47366* MODE_EXIT:                             Mode Switching.     (line   60)
47367* MODE_FLOAT:                            Machine Modes.      (line  232)
47368* MODE_FRACT:                            Machine Modes.      (line  240)
47369* MODE_FUNCTION:                         Machine Modes.      (line  263)
47370* MODE_INT:                              Machine Modes.      (line  224)
47371* MODE_NEEDED:                           Mode Switching.     (line   41)
47372* MODE_PARTIAL_INT:                      Machine Modes.      (line  228)
47373* MODE_PRIORITY_TO_MODE:                 Mode Switching.     (line   66)
47374* MODE_RANDOM:                           Machine Modes.      (line  272)
47375* MODE_UACCUM:                           Machine Modes.      (line  252)
47376* MODE_UFRACT:                           Machine Modes.      (line  244)
47377* modifiers in constraints:              Modifiers.          (line    6)
47378* MODIFY_EXPR:                           Unary and Binary Expressions.
47379                                                             (line    6)
47380* MODIFY_JNI_METHOD_CALL:                Misc.               (line  765)
47381* 'modM3' instruction pattern:           Standard Names.     (line  266)
47382* modulo scheduling:                     RTL passes.         (line  131)
47383* MOVE_BY_PIECES_P:                      Costs.              (line  164)
47384* MOVE_MAX:                              Misc.               (line  100)
47385* MOVE_MAX_PIECES:                       Costs.              (line  170)
47386* MOVE_RATIO:                            Costs.              (line  148)
47387* 'movM' instruction pattern:            Standard Names.     (line   11)
47388* 'movmemM' instruction pattern:         Standard Names.     (line  744)
47389* 'movmisalignM' instruction pattern:    Standard Names.     (line  125)
47390* 'movMODEcc' instruction pattern:       Standard Names.     (line 1031)
47391* 'movstr' instruction pattern:          Standard Names.     (line  779)
47392* 'movstrictM' instruction pattern:      Standard Names.     (line  119)
47393* 'msubMN4' instruction pattern:         Standard Names.     (line  460)
47394* 'mulhisi3' instruction pattern:        Standard Names.     (line  413)
47395* 'mulM3' instruction pattern:           Standard Names.     (line  266)
47396* 'mulqihi3' instruction pattern:        Standard Names.     (line  417)
47397* 'mulsidi3' instruction pattern:        Standard Names.     (line  417)
47398* mult:                                  Arithmetic.         (line   93)
47399* 'mult' and attributes:                 Expressions.        (line   83)
47400* 'mult', canonicalization of:           Insn Canonicalizations.
47401                                                             (line   27)
47402* 'mult', canonicalization of <1>:       Insn Canonicalizations.
47403                                                             (line   91)
47404* MULTIARCH_DIRNAME:                     Target Fragment.    (line  170)
47405* MULTILIB_DEFAULTS:                     Driver.             (line  252)
47406* MULTILIB_DIRNAMES:                     Target Fragment.    (line   44)
47407* MULTILIB_EXCEPTIONS:                   Target Fragment.    (line   70)
47408* MULTILIB_EXTRA_OPTS:                   Target Fragment.    (line  132)
47409* MULTILIB_MATCHES:                      Target Fragment.    (line   63)
47410* MULTILIB_OPTIONS:                      Target Fragment.    (line   24)
47411* MULTILIB_OSDIRNAMES:                   Target Fragment.    (line  139)
47412* MULTILIB_REQUIRED:                     Target Fragment.    (line   82)
47413* MULTILIB_REUSE:                        Target Fragment.    (line  103)
47414* multiple alternative constraints:      Multi-Alternative.  (line    6)
47415* MULTIPLE_SYMBOL_SPACES:                Misc.               (line  474)
47416* multiplication:                        Arithmetic.         (line   93)
47417* multiplication with signed saturation: Arithmetic.         (line   93)
47418* multiplication with unsigned saturation: Arithmetic.       (line   93)
47419* MULT_EXPR:                             Unary and Binary Expressions.
47420                                                             (line    6)
47421* MULT_HIGHPART_EXPR:                    Unary and Binary Expressions.
47422                                                             (line    6)
47423* 'n' in constraint:                     Simple Constraints. (line   73)
47424* name:                                  Identifiers.        (line    6)
47425* named address spaces:                  Named Address Spaces.
47426                                                             (line    6)
47427* named patterns and conditions:         Patterns.           (line   47)
47428* names, pattern:                        Standard Names.     (line    6)
47429* namespace, scope:                      Namespaces.         (line    6)
47430* NAMESPACE_DECL:                        Declarations.       (line    6)
47431* NAMESPACE_DECL <1>:                    Namespaces.         (line    6)
47432* NATIVE_SYSTEM_HEADER_COMPONENT:        Driver.             (line  322)
47433* ne:                                    Comparisons.        (line   56)
47434* 'ne' and attributes:                   Expressions.        (line   83)
47435* 'nearbyintM2' instruction pattern:     Standard Names.     (line  654)
47436* neg:                                   Arithmetic.         (line   82)
47437* 'neg' and attributes:                  Expressions.        (line   83)
47438* 'neg', canonicalization of:            Insn Canonicalizations.
47439                                                             (line   27)
47440* NEGATE_EXPR:                           Unary and Binary Expressions.
47441                                                             (line    6)
47442* negation:                              Arithmetic.         (line   82)
47443* negation with signed saturation:       Arithmetic.         (line   82)
47444* negation with unsigned saturation:     Arithmetic.         (line   82)
47445* 'negM2' instruction pattern:           Standard Names.     (line  526)
47446* nested functions, trampolines for:     Trampolines.        (line    6)
47447* nested_ptr:                            GTY Options.        (line  194)
47448* next_bb, prev_bb, FOR_EACH_BB, FOR_ALL_BB: Basic Blocks.   (line   25)
47449* NEXT_INSN:                             Insns.              (line   30)
47450* NEXT_OBJC_RUNTIME:                     Library Calls.      (line   87)
47451* NE_EXPR:                               Unary and Binary Expressions.
47452                                                             (line    6)
47453* nil:                                   RTL Objects.        (line   73)
47454* NM_FLAGS:                              Macros for Initialization.
47455                                                             (line  110)
47456* nondeterministic finite state automaton: Processor pipeline description.
47457                                                             (line  304)
47458* nonimmediate_operand:                  Machine-Independent Predicates.
47459                                                             (line  100)
47460* nonlocal goto handler:                 Edges.              (line  171)
47461* 'nonlocal_goto' instruction pattern:   Standard Names.     (line 1406)
47462* 'nonlocal_goto_receiver' instruction pattern: Standard Names.
47463                                                             (line 1423)
47464* nonmemory_operand:                     Machine-Independent Predicates.
47465                                                             (line   96)
47466* nonoffsettable memory reference:       Simple Constraints. (line  254)
47467* NON_LVALUE_EXPR:                       Unary and Binary Expressions.
47468                                                             (line    6)
47469* 'nop' instruction pattern:             Standard Names.     (line 1213)
47470* NOP_EXPR:                              Unary and Binary Expressions.
47471                                                             (line    6)
47472* normal predicates:                     Predicates.         (line   31)
47473* not:                                   Arithmetic.         (line  155)
47474* 'not' and attributes:                  Expressions.        (line   50)
47475* not equal:                             Comparisons.        (line   56)
47476* 'not', canonicalization of:            Insn Canonicalizations.
47477                                                             (line   27)
47478* note:                                  Insns.              (line  173)
47479* 'note' and '/i':                       Flags.              (line   59)
47480* 'note' and '/v':                       Flags.              (line   44)
47481* NOTE_INSN_BASIC_BLOCK:                 Basic Blocks.       (line   50)
47482* NOTE_INSN_BASIC_BLOCK <1>:             Basic Blocks.       (line   52)
47483* NOTE_INSN_BLOCK_BEG:                   Insns.              (line  198)
47484* NOTE_INSN_BLOCK_END:                   Insns.              (line  198)
47485* NOTE_INSN_DELETED:                     Insns.              (line  188)
47486* NOTE_INSN_DELETED_LABEL:               Insns.              (line  193)
47487* NOTE_INSN_EH_REGION_BEG:               Insns.              (line  204)
47488* NOTE_INSN_EH_REGION_END:               Insns.              (line  204)
47489* NOTE_INSN_FUNCTION_BEG:                Insns.              (line  228)
47490* NOTE_INSN_LOOP_BEG:                    Insns.              (line  212)
47491* NOTE_INSN_LOOP_CONT:                   Insns.              (line  218)
47492* NOTE_INSN_LOOP_END:                    Insns.              (line  212)
47493* NOTE_INSN_LOOP_VTOP:                   Insns.              (line  222)
47494* NOTE_INSN_VAR_LOCATION:                Insns.              (line  232)
47495* NOTE_LINE_NUMBER:                      Insns.              (line  173)
47496* NOTE_SOURCE_FILE:                      Insns.              (line  173)
47497* NOTE_VAR_LOCATION:                     Insns.              (line  232)
47498* NOTICE_UPDATE_CC:                      CC0 Condition Codes.
47499                                                             (line   30)
47500* NO_DBX_BNSYM_ENSYM:                    DBX Hooks.          (line   25)
47501* NO_DBX_FUNCTION_END:                   DBX Hooks.          (line   19)
47502* NO_DBX_GCC_MARKER:                     File Names and DBX. (line   27)
47503* NO_DBX_MAIN_SOURCE_DIRECTORY:          File Names and DBX. (line   22)
47504* NO_DOLLAR_IN_LABEL:                    Label Output.       (line   64)
47505* NO_DOT_IN_LABEL:                       Label Output.       (line   70)
47506* NO_FUNCTION_CSE:                       Costs.              (line  260)
47507* NO_IMPLICIT_EXTERN_C:                  Misc.               (line  373)
47508* NO_PROFILE_COUNTERS:                   Profiling.          (line   27)
47509* NO_REGS:                               Register Classes.   (line   17)
47510* Number of iterations analysis:         Number of iterations.
47511                                                             (line    6)
47512* NUM_MACHINE_MODES:                     Machine Modes.      (line  285)
47513* NUM_MODES_FOR_MODE_SWITCHING:          Mode Switching.     (line   29)
47514* N_REG_CLASSES:                         Register Classes.   (line   81)
47515* 'o' in constraint:                     Simple Constraints. (line   23)
47516* OBJC_GEN_METHOD_LABEL:                 Label Output.       (line  447)
47517* OBJC_JBLEN:                            Misc.               (line  958)
47518* OBJECT_FORMAT_COFF:                    Macros for Initialization.
47519                                                             (line   96)
47520* offsettable address:                   Simple Constraints. (line   23)
47521* OFFSET_TYPE:                           Types.              (line    6)
47522* OImode:                                Machine Modes.      (line   51)
47523* Omega a solver for linear programming problems: Omega.     (line    6)
47524* OMP_ATOMIC:                            OpenMP.             (line    6)
47525* OMP_CLAUSE:                            OpenMP.             (line    6)
47526* OMP_CONTINUE:                          OpenMP.             (line    6)
47527* OMP_CRITICAL:                          OpenMP.             (line    6)
47528* OMP_FOR:                               OpenMP.             (line    6)
47529* OMP_MASTER:                            OpenMP.             (line    6)
47530* OMP_ORDERED:                           OpenMP.             (line    6)
47531* OMP_PARALLEL:                          OpenMP.             (line    6)
47532* OMP_RETURN:                            OpenMP.             (line    6)
47533* OMP_SECTION:                           OpenMP.             (line    6)
47534* OMP_SECTIONS:                          OpenMP.             (line    6)
47535* OMP_SINGLE:                            OpenMP.             (line    6)
47536* 'one_cmplM2' instruction pattern:      Standard Names.     (line  741)
47537* operand access:                        Accessors.          (line    6)
47538* Operand Access Routines:               SSA Operands.       (line  116)
47539* operand constraints:                   Constraints.        (line    6)
47540* Operand Iterators:                     SSA Operands.       (line  116)
47541* operand predicates:                    Predicates.         (line    6)
47542* operand substitution:                  Output Template.    (line    6)
47543* Operands:                              Operands.           (line    6)
47544* operands:                              SSA Operands.       (line    6)
47545* operands <1>:                          Patterns.           (line   53)
47546* operator predicates:                   Predicates.         (line    6)
47547* 'optc-gen.awk':                        Options.            (line    6)
47548* Optimization infrastructure for GIMPLE: Tree SSA.          (line    6)
47549* OPTIMIZE_MODE_SWITCHING:               Mode Switching.     (line    8)
47550* option specification files:            Options.            (line    6)
47551* optional hardware or system features:  Run-time Target.    (line   59)
47552* options, directory search:             Including Patterns. (line   47)
47553* OPTION_DEFAULT_SPECS:                  Driver.             (line   25)
47554* order of register allocation:          Allocation Order.   (line    6)
47555* ordered_comparison_operator:           Machine-Independent Predicates.
47556                                                             (line  115)
47557* ORDERED_EXPR:                          Unary and Binary Expressions.
47558                                                             (line    6)
47559* Ordering of Patterns:                  Pattern Ordering.   (line    6)
47560* ORIGINAL_REGNO:                        Special Accessors.  (line   53)
47561* other register constraints:            Simple Constraints. (line  171)
47562* outgoing_args_size:                    Stack Arguments.    (line   48)
47563* OUTGOING_REGNO:                        Register Basics.    (line   94)
47564* OUTGOING_REG_PARM_STACK_SPACE:         Stack Arguments.    (line   73)
47565* output of assembler code:              File Framework.     (line    6)
47566* output statements:                     Output Statement.   (line    6)
47567* output templates:                      Output Template.    (line    6)
47568* output_asm_insn:                       Output Statement.   (line   52)
47569* OUTPUT_QUOTED_STRING:                  File Framework.     (line  106)
47570* OVERLAPPING_REGISTER_NAMES:            Instruction Output. (line   20)
47571* OVERLOAD:                              Functions for C++.  (line    6)
47572* OVERRIDE_ABI_FORMAT:                   Register Arguments. (line  139)
47573* OVL_CURRENT:                           Functions for C++.  (line    6)
47574* OVL_NEXT:                              Functions for C++.  (line    6)
47575* 'p' in constraint:                     Simple Constraints. (line  162)
47576* PAD_VARARGS_DOWN:                      Register Arguments. (line  220)
47577* parallel:                              Side Effects.       (line  209)
47578* parameters, c++ abi:                   C++ ABI.            (line    6)
47579* parameters, miscellaneous:             Misc.               (line    6)
47580* parameters, precompiled headers:       PCH Target.         (line    6)
47581* paramN_is:                             GTY Options.        (line  134)
47582* param_is:                              GTY Options.        (line  115)
47583* parity:                                Arithmetic.         (line  243)
47584* 'parityM2' instruction pattern:        Standard Names.     (line  735)
47585* PARM_BOUNDARY:                         Storage Layout.     (line  138)
47586* PARM_DECL:                             Declarations.       (line    6)
47587* PARSE_LDD_OUTPUT:                      Macros for Initialization.
47588                                                             (line  125)
47589* passes and files of the compiler:      Passes.             (line    6)
47590* passing arguments:                     Interface.          (line   36)
47591* pass_duplicate_computed_gotos:         Edges.              (line  161)
47592* PATH_SEPARATOR:                        Filesystem.         (line   31)
47593* PATTERN:                               Insns.              (line  291)
47594* pattern conditions:                    Patterns.           (line   43)
47595* pattern names:                         Standard Names.     (line    6)
47596* Pattern Ordering:                      Pattern Ordering.   (line    6)
47597* patterns:                              Patterns.           (line    6)
47598* pc:                                    Regs and Memory.    (line  357)
47599* 'pc' and attributes:                   Insn Lengths.       (line   20)
47600* 'pc', RTL sharing:                     Sharing.            (line   25)
47601* PCC_BITFIELD_TYPE_MATTERS:             Storage Layout.     (line  322)
47602* PCC_STATIC_STRUCT_RETURN:              Aggregate Return.   (line   64)
47603* PC_REGNUM:                             Register Basics.    (line  108)
47604* pc_rtx:                                Regs and Memory.    (line  362)
47605* PDImode:                               Machine Modes.      (line   40)
47606* peephole optimization, RTL representation: Side Effects.   (line  243)
47607* peephole optimizer definitions:        Peephole Definitions.
47608                                                             (line    6)
47609* per-function data:                     Per-Function Data.  (line    6)
47610* percent sign:                          Output Template.    (line    6)
47611* PHI nodes:                             SSA.                (line   31)
47612* PHI_ARG_DEF:                           SSA.                (line   70)
47613* PHI_ARG_EDGE:                          SSA.                (line   67)
47614* PHI_ARG_ELT:                           SSA.                (line   62)
47615* PHI_NUM_ARGS:                          SSA.                (line   58)
47616* PHI_RESULT:                            SSA.                (line   55)
47617* PIC:                                   PIC.                (line    6)
47618* PIC_OFFSET_TABLE_REGNUM:               PIC.                (line   15)
47619* PIC_OFFSET_TABLE_REG_CALL_CLOBBERED:   PIC.                (line   25)
47620* pipeline hazard recognizer:            Processor pipeline description.
47621                                                             (line    6)
47622* pipeline hazard recognizer <1>:        Processor pipeline description.
47623                                                             (line   53)
47624* Plugins:                               Plugins.            (line    6)
47625* plus:                                  Arithmetic.         (line   14)
47626* 'plus' and attributes:                 Expressions.        (line   83)
47627* 'plus', canonicalization of:           Insn Canonicalizations.
47628                                                             (line   27)
47629* PLUS_EXPR:                             Unary and Binary Expressions.
47630                                                             (line    6)
47631* Pmode:                                 Misc.               (line  329)
47632* pmode_register_operand:                Machine-Independent Predicates.
47633                                                             (line   34)
47634* pointer:                               Types.              (line    6)
47635* POINTERS_EXTEND_UNSIGNED:              Storage Layout.     (line   81)
47636* POINTER_PLUS_EXPR:                     Unary and Binary Expressions.
47637                                                             (line    6)
47638* POINTER_SIZE:                          Storage Layout.     (line   75)
47639* POINTER_TYPE:                          Types.              (line    6)
47640* popcount:                              Arithmetic.         (line  239)
47641* 'popcountM2' instruction pattern:      Standard Names.     (line  729)
47642* pops_args:                             Function Entry.     (line  104)
47643* pop_operand:                           Machine-Independent Predicates.
47644                                                             (line   87)
47645* portability:                           Portability.        (line    6)
47646* position independent code:             PIC.                (line    6)
47647* POSTDECREMENT_EXPR:                    Unary and Binary Expressions.
47648                                                             (line    6)
47649* POSTINCREMENT_EXPR:                    Unary and Binary Expressions.
47650                                                             (line    6)
47651* post_dec:                              Incdec.             (line   25)
47652* post_inc:                              Incdec.             (line   30)
47653* post_modify:                           Incdec.             (line   33)
47654* post_order_compute, inverted_post_order_compute, walk_dominator_tree: Basic Blocks.
47655                                                             (line   34)
47656* POWI_MAX_MULTS:                        Misc.               (line  827)
47657* 'powM3' instruction pattern:           Standard Names.     (line  603)
47658* pragma:                                Misc.               (line  379)
47659* PREDECREMENT_EXPR:                     Unary and Binary Expressions.
47660                                                             (line    6)
47661* predefined macros:                     Run-time Target.    (line    6)
47662* predicates:                            Predicates.         (line    6)
47663* predicates and machine modes:          Predicates.         (line   31)
47664* predication:                           Conditional Execution.
47665                                                             (line    6)
47666* predication <1>:                       Cond Exec Macros.   (line    6)
47667* predict.def:                           Profile information.
47668                                                             (line   24)
47669* PREFERRED_DEBUGGING_TYPE:              All Debuggers.      (line   41)
47670* PREFERRED_RELOAD_CLASS:                Register Classes.   (line  249)
47671* PREFERRED_STACK_BOUNDARY:              Storage Layout.     (line  152)
47672* prefetch:                              Side Effects.       (line  316)
47673* 'prefetch' and '/v':                   Flags.              (line  214)
47674* 'prefetch' instruction pattern:        Standard Names.     (line 1549)
47675* PREFETCH_SCHEDULE_BARRIER_P:           Flags.              (line  214)
47676* PREINCREMENT_EXPR:                     Unary and Binary Expressions.
47677                                                             (line    6)
47678* presence_set:                          Processor pipeline description.
47679                                                             (line  223)
47680* preserving SSA form:                   SSA.                (line   76)
47681* preserving virtual SSA form:           SSA.                (line  184)
47682* pretend_args_size:                     Function Entry.     (line  110)
47683* prev_active_insn:                      define_peephole.    (line   60)
47684* PREV_INSN:                             Insns.              (line   26)
47685* pre_dec:                               Incdec.             (line    8)
47686* PRE_GCC3_DWARF_FRAME_REGISTERS:        Frame Registers.    (line  126)
47687* pre_inc:                               Incdec.             (line   22)
47688* pre_modify:                            Incdec.             (line   52)
47689* PRINT_OPERAND:                         Instruction Output. (line   95)
47690* PRINT_OPERAND_ADDRESS:                 Instruction Output. (line  122)
47691* PRINT_OPERAND_PUNCT_VALID_P:           Instruction Output. (line  115)
47692* 'probe_stack' instruction pattern:     Standard Names.     (line 1398)
47693* 'probe_stack_address' instruction pattern: Standard Names. (line 1391)
47694* processor functional units:            Processor pipeline description.
47695                                                             (line    6)
47696* processor functional units <1>:        Processor pipeline description.
47697                                                             (line   68)
47698* processor pipeline description:        Processor pipeline description.
47699                                                             (line    6)
47700* product:                               Arithmetic.         (line   93)
47701* profile feedback:                      Profile information.
47702                                                             (line   14)
47703* profile representation:                Profile information.
47704                                                             (line    6)
47705* PROFILE_BEFORE_PROLOGUE:               Profiling.          (line   34)
47706* PROFILE_HOOK:                          Profiling.          (line   22)
47707* profiling, code generation:            Profiling.          (line    6)
47708* program counter:                       Regs and Memory.    (line  358)
47709* prologue:                              Function Entry.     (line    6)
47710* 'prologue' instruction pattern:        Standard Names.     (line 1487)
47711* PROMOTE_MODE:                          Storage Layout.     (line   92)
47712* pseudo registers:                      Regs and Memory.    (line    9)
47713* PSImode:                               Machine Modes.      (line   32)
47714* PTRDIFF_TYPE:                          Type Layout.        (line  200)
47715* purge_dead_edges:                      Edges.              (line  103)
47716* purge_dead_edges <1>:                  Maintaining the CFG.
47717                                                             (line   81)
47718* push address instruction:              Simple Constraints. (line  162)
47719* 'pushM1' instruction pattern:          Standard Names.     (line  253)
47720* PUSH_ARGS:                             Stack Arguments.    (line   17)
47721* PUSH_ARGS_REVERSED:                    Stack Arguments.    (line   25)
47722* push_operand:                          Machine-Independent Predicates.
47723                                                             (line   80)
47724* push_reload:                           Addressing Modes.   (line  176)
47725* PUSH_ROUNDING:                         Stack Arguments.    (line   31)
47726* PUT_CODE:                              RTL Objects.        (line   47)
47727* PUT_MODE:                              Machine Modes.      (line  282)
47728* PUT_REG_NOTE_KIND:                     Insns.              (line  353)
47729* PUT_SDB_:                              SDB and DWARF.      (line  105)
47730* QCmode:                                Machine Modes.      (line  196)
47731* QFmode:                                Machine Modes.      (line   54)
47732* QImode:                                Machine Modes.      (line   25)
47733* 'QImode', in 'insn':                   Insns.              (line  275)
47734* QQmode:                                Machine Modes.      (line  103)
47735* qualified type:                        Types.              (line    6)
47736* qualified type <1>:                    Types for C++.      (line    6)
47737* querying function unit reservations:   Processor pipeline description.
47738                                                             (line   90)
47739* question mark:                         Multi-Alternative.  (line   41)
47740* quotient:                              Arithmetic.         (line  117)
47741* 'r' in constraint:                     Simple Constraints. (line   64)
47742* RDIV_EXPR:                             Unary and Binary Expressions.
47743                                                             (line    6)
47744* READONLY_DATA_SECTION_ASM_OP:          Sections.           (line   62)
47745* real operands:                         SSA Operands.       (line    6)
47746* REALPART_EXPR:                         Unary and Binary Expressions.
47747                                                             (line    6)
47748* REAL_ARITHMETIC:                       Floating Point.     (line   64)
47749* REAL_CST:                              Constant expressions.
47750                                                             (line    6)
47751* REAL_LIBGCC_SPEC:                      Driver.             (line  124)
47752* REAL_NM_FILE_NAME:                     Macros for Initialization.
47753                                                             (line  105)
47754* REAL_TYPE:                             Types.              (line    6)
47755* REAL_VALUES_EQUAL:                     Floating Point.     (line   31)
47756* REAL_VALUES_LESS:                      Floating Point.     (line   37)
47757* REAL_VALUE_ABS:                        Floating Point.     (line   81)
47758* REAL_VALUE_ATOF:                       Floating Point.     (line   48)
47759* REAL_VALUE_FIX:                        Floating Point.     (line   40)
47760* REAL_VALUE_FROM_INT:                   Floating Point.     (line   90)
47761* REAL_VALUE_ISINF:                      Floating Point.     (line   58)
47762* REAL_VALUE_ISNAN:                      Floating Point.     (line   61)
47763* REAL_VALUE_NEGATE:                     Floating Point.     (line   78)
47764* REAL_VALUE_NEGATIVE:                   Floating Point.     (line   55)
47765* REAL_VALUE_TO_INT:                     Floating Point.     (line   84)
47766* REAL_VALUE_TO_TARGET_DECIMAL128:       Data Output.        (line  143)
47767* REAL_VALUE_TO_TARGET_DECIMAL32:        Data Output.        (line  141)
47768* REAL_VALUE_TO_TARGET_DECIMAL64:        Data Output.        (line  142)
47769* REAL_VALUE_TO_TARGET_DOUBLE:           Data Output.        (line  139)
47770* REAL_VALUE_TO_TARGET_LONG_DOUBLE:      Data Output.        (line  140)
47771* REAL_VALUE_TO_TARGET_SINGLE:           Data Output.        (line  138)
47772* REAL_VALUE_TYPE:                       Floating Point.     (line   25)
47773* REAL_VALUE_UNSIGNED_FIX:               Floating Point.     (line   43)
47774* recognizing insns:                     RTL Template.       (line    6)
47775* recog_data.operand:                    Instruction Output. (line   54)
47776* RECORD_TYPE:                           Types.              (line    6)
47777* RECORD_TYPE <1>:                       Classes.            (line    6)
47778* redirect_edge_and_branch:              Profile information.
47779                                                             (line   71)
47780* redirect_edge_and_branch, redirect_jump: Maintaining the CFG.
47781                                                             (line   90)
47782* 'reduc_smax_M' instruction pattern:    Standard Names.     (line  307)
47783* 'reduc_smin_M' instruction pattern:    Standard Names.     (line  307)
47784* 'reduc_splus_M' instruction pattern:   Standard Names.     (line  319)
47785* 'reduc_umax_M' instruction pattern:    Standard Names.     (line  313)
47786* 'reduc_umin_M' instruction pattern:    Standard Names.     (line  313)
47787* 'reduc_uplus_M' instruction pattern:   Standard Names.     (line  325)
47788* reference:                             Types.              (line    6)
47789* REFERENCE_TYPE:                        Types.              (line    6)
47790* reg:                                   Regs and Memory.    (line    9)
47791* 'reg' and '/f':                        Flags.              (line   94)
47792* 'reg' and '/i':                        Flags.              (line   89)
47793* 'reg' and '/v':                        Flags.              (line   98)
47794* 'reg', RTL sharing:                    Sharing.            (line   17)
47795* regclass_for_constraint:               C Constraint Interface.
47796                                                             (line   58)
47797* register allocation order:             Allocation Order.   (line    6)
47798* register class definitions:            Register Classes.   (line    6)
47799* register class preference constraints: Class Preferences.  (line    6)
47800* register pairs:                        Values in Registers.
47801                                                             (line   69)
47802* Register Transfer Language (RTL):      RTL.                (line    6)
47803* register usage:                        Registers.          (line    6)
47804* registers arguments:                   Register Arguments. (line    6)
47805* registers in constraints:              Simple Constraints. (line   64)
47806* REGISTER_MOVE_COST:                    Costs.              (line    9)
47807* REGISTER_NAMES:                        Instruction Output. (line    8)
47808* register_operand:                      Machine-Independent Predicates.
47809                                                             (line   29)
47810* REGISTER_PREFIX:                       Instruction Output. (line  150)
47811* REGISTER_TARGET_PRAGMAS:               Misc.               (line  379)
47812* REGMODE_NATURAL_SIZE:                  Values in Registers.
47813                                                             (line   49)
47814* REGNO_MODE_CODE_OK_FOR_BASE_P:         Register Classes.   (line  172)
47815* REGNO_MODE_OK_FOR_BASE_P:              Register Classes.   (line  150)
47816* REGNO_MODE_OK_FOR_REG_BASE_P:          Register Classes.   (line  160)
47817* REGNO_OK_FOR_BASE_P:                   Register Classes.   (line  146)
47818* REGNO_OK_FOR_INDEX_P:                  Register Classes.   (line  186)
47819* REGNO_REG_CLASS:                       Register Classes.   (line  105)
47820* regs_ever_live:                        Function Entry.     (line   21)
47821* regular expressions:                   Processor pipeline description.
47822                                                             (line    6)
47823* regular expressions <1>:               Processor pipeline description.
47824                                                             (line  105)
47825* REG_ALLOC_ORDER:                       Allocation Order.   (line    8)
47826* REG_BR_PRED:                           Insns.              (line  532)
47827* REG_BR_PROB:                           Insns.              (line  526)
47828* REG_BR_PROB_BASE, BB_FREQ_BASE, count: Profile information.
47829                                                             (line   82)
47830* REG_BR_PROB_BASE, EDGE_FREQUENCY:      Profile information.
47831                                                             (line   52)
47832* REG_CC_SETTER:                         Insns.              (line  498)
47833* REG_CC_USER:                           Insns.              (line  498)
47834* reg_class_contents:                    Register Basics.    (line   59)
47835* REG_CLASS_CONTENTS:                    Register Classes.   (line   91)
47836* REG_CLASS_FROM_CONSTRAINT:             Old Constraints.    (line   33)
47837* REG_CLASS_FROM_LETTER:                 Old Constraints.    (line   25)
47838* REG_CLASS_NAMES:                       Register Classes.   (line   86)
47839* REG_CROSSING_JUMP:                     Insns.              (line  412)
47840* REG_DEAD:                              Insns.              (line  364)
47841* REG_DEAD, REG_UNUSED:                  Liveness information.
47842                                                             (line   32)
47843* REG_DEP_ANTI:                          Insns.              (line  520)
47844* REG_DEP_OUTPUT:                        Insns.              (line  516)
47845* REG_DEP_TRUE:                          Insns.              (line  513)
47846* REG_EH_REGION, EDGE_ABNORMAL_CALL:     Edges.              (line  109)
47847* REG_EQUAL:                             Insns.              (line  427)
47848* REG_EQUIV:                             Insns.              (line  427)
47849* REG_EXPR:                              Special Accessors.  (line   58)
47850* REG_FRAME_RELATED_EXPR:                Insns.              (line  538)
47851* REG_FUNCTION_VALUE_P:                  Flags.              (line   89)
47852* REG_INC:                               Insns.              (line  380)
47853* 'reg_label' and '/v':                  Flags.              (line   65)
47854* REG_LABEL_OPERAND:                     Insns.              (line  394)
47855* REG_LABEL_TARGET:                      Insns.              (line  403)
47856* reg_names:                             Register Basics.    (line   59)
47857* reg_names <1>:                         Instruction Output. (line  107)
47858* REG_NONNEG:                            Insns.              (line  386)
47859* REG_NOTES:                             Insns.              (line  328)
47860* REG_NOTE_KIND:                         Insns.              (line  353)
47861* REG_OFFSET:                            Special Accessors.  (line   62)
47862* REG_OK_STRICT:                         Addressing Modes.   (line   99)
47863* REG_PARM_STACK_SPACE:                  Stack Arguments.    (line   58)
47864* 'REG_PARM_STACK_SPACE', and 'TARGET_FUNCTION_ARG': Register Arguments.
47865                                                             (line   50)
47866* REG_POINTER:                           Flags.              (line   94)
47867* REG_SETJMP:                            Insns.              (line  421)
47868* REG_UNUSED:                            Insns.              (line  373)
47869* REG_USERVAR_P:                         Flags.              (line   98)
47870* REG_VALUE_IN_UNWIND_CONTEXT:           Frame Registers.    (line  158)
47871* REG_WORDS_BIG_ENDIAN:                  Storage Layout.     (line   35)
47872* relative costs:                        Costs.              (line    6)
47873* RELATIVE_PREFIX_NOT_LINKDIR:           Driver.             (line  262)
47874* reloading:                             RTL passes.         (line  182)
47875* reload_completed:                      Standard Names.     (line 1180)
47876* 'reload_in' instruction pattern:       Standard Names.     (line   98)
47877* reload_in_progress:                    Standard Names.     (line   57)
47878* 'reload_out' instruction pattern:      Standard Names.     (line   98)
47879* remainder:                             Arithmetic.         (line  137)
47880* 'remainderM3' instruction pattern:     Standard Names.     (line  549)
47881* reorder:                               GTY Options.        (line  220)
47882* representation of RTL:                 RTL.                (line    6)
47883* reservation delays:                    Processor pipeline description.
47884                                                             (line    6)
47885* 'restore_stack_block' instruction pattern: Standard Names. (line 1312)
47886* 'restore_stack_function' instruction pattern: Standard Names.
47887                                                             (line 1312)
47888* 'restore_stack_nonlocal' instruction pattern: Standard Names.
47889                                                             (line 1312)
47890* rest_of_decl_compilation:              Parsing pass.       (line   51)
47891* rest_of_type_compilation:              Parsing pass.       (line   51)
47892* RESULT_DECL:                           Declarations.       (line    6)
47893* return:                                Side Effects.       (line   72)
47894* 'return' instruction pattern:          Standard Names.     (line 1154)
47895* return values in registers:            Scalar Return.      (line    6)
47896* returning aggregate values:            Aggregate Return.   (line    6)
47897* returning structures and unions:       Interface.          (line   10)
47898* RETURN_ADDRESS_POINTER_REGNUM:         Frame Registers.    (line   64)
47899* RETURN_ADDR_IN_PREVIOUS_FRAME:         Frame Layout.       (line  133)
47900* RETURN_ADDR_OFFSET:                    Exception Handling. (line   59)
47901* RETURN_ADDR_RTX:                       Frame Layout.       (line  122)
47902* RETURN_EXPR:                           Statements for C++. (line    6)
47903* RETURN_STMT:                           Statements for C++. (line    6)
47904* return_val:                            Flags.              (line  274)
47905* 'return_val', in 'call_insn':          Flags.              (line   24)
47906* 'return_val', in 'reg':                Flags.              (line   89)
47907* 'return_val', in 'symbol_ref':         Flags.              (line  202)
47908* reverse probability:                   Profile information.
47909                                                             (line   66)
47910* REVERSE_CONDITION:                     MODE_CC Condition Codes.
47911                                                             (line   91)
47912* REVERSIBLE_CC_MODE:                    MODE_CC Condition Codes.
47913                                                             (line   77)
47914* right rotate:                          Arithmetic.         (line  196)
47915* right shift:                           Arithmetic.         (line  191)
47916* 'rintM2' instruction pattern:          Standard Names.     (line  662)
47917* RISC:                                  Processor pipeline description.
47918                                                             (line    6)
47919* RISC <1>:                              Processor pipeline description.
47920                                                             (line  223)
47921* roots, marking:                        GGC Roots.          (line    6)
47922* rotate:                                Arithmetic.         (line  196)
47923* rotate <1>:                            Arithmetic.         (line  196)
47924* rotatert:                              Arithmetic.         (line  196)
47925* 'rotlM3' instruction pattern:          Standard Names.     (line  514)
47926* 'rotrM3' instruction pattern:          Standard Names.     (line  514)
47927* 'roundM2' instruction pattern:         Standard Names.     (line  638)
47928* ROUND_DIV_EXPR:                        Unary and Binary Expressions.
47929                                                             (line    6)
47930* ROUND_MOD_EXPR:                        Unary and Binary Expressions.
47931                                                             (line    6)
47932* ROUND_TOWARDS_ZERO:                    Storage Layout.     (line  471)
47933* ROUND_TYPE_ALIGN:                      Storage Layout.     (line  419)
47934* RSHIFT_EXPR:                           Unary and Binary Expressions.
47935                                                             (line    6)
47936* RTL addition:                          Arithmetic.         (line   14)
47937* RTL addition with signed saturation:   Arithmetic.         (line   14)
47938* RTL addition with unsigned saturation: Arithmetic.         (line   14)
47939* RTL classes:                           RTL Classes.        (line    6)
47940* RTL comparison:                        Arithmetic.         (line   46)
47941* RTL comparison operations:             Comparisons.        (line    6)
47942* RTL constant expression types:         Constants.          (line    6)
47943* RTL constants:                         Constants.          (line    6)
47944* RTL declarations:                      RTL Declarations.   (line    6)
47945* RTL difference:                        Arithmetic.         (line   38)
47946* RTL expression:                        RTL Objects.        (line    6)
47947* RTL expressions for arithmetic:        Arithmetic.         (line    6)
47948* RTL format:                            RTL Classes.        (line   72)
47949* RTL format characters:                 RTL Classes.        (line   77)
47950* RTL function-call insns:               Calls.              (line    6)
47951* RTL insn template:                     RTL Template.       (line    6)
47952* RTL integers:                          RTL Objects.        (line    6)
47953* RTL memory expressions:                Regs and Memory.    (line    6)
47954* RTL object types:                      RTL Objects.        (line    6)
47955* RTL postdecrement:                     Incdec.             (line    6)
47956* RTL postincrement:                     Incdec.             (line    6)
47957* RTL predecrement:                      Incdec.             (line    6)
47958* RTL preincrement:                      Incdec.             (line    6)
47959* RTL register expressions:              Regs and Memory.    (line    6)
47960* RTL representation:                    RTL.                (line    6)
47961* RTL side effect expressions:           Side Effects.       (line    6)
47962* RTL strings:                           RTL Objects.        (line    6)
47963* RTL structure sharing assumptions:     Sharing.            (line    6)
47964* RTL subtraction:                       Arithmetic.         (line   38)
47965* RTL subtraction with signed saturation: Arithmetic.        (line   38)
47966* RTL subtraction with unsigned saturation: Arithmetic.      (line   38)
47967* RTL sum:                               Arithmetic.         (line   14)
47968* RTL vectors:                           RTL Objects.        (line    6)
47969* RTL_CONST_CALL_P:                      Flags.              (line   19)
47970* RTL_CONST_OR_PURE_CALL_P:              Flags.              (line   29)
47971* RTL_LOOPING_CONST_OR_PURE_CALL_P:      Flags.              (line   33)
47972* RTL_PURE_CALL_P:                       Flags.              (line   24)
47973* RTX (See RTL):                         RTL Objects.        (line    6)
47974* RTX codes, classes of:                 RTL Classes.        (line    6)
47975* RTX_FRAME_RELATED_P:                   Flags.              (line  107)
47976* run-time conventions:                  Interface.          (line    6)
47977* run-time target specification:         Run-time Target.    (line    6)
47978* 's' in constraint:                     Simple Constraints. (line  100)
47979* same_type_p:                           Types.              (line   86)
47980* SAmode:                                Machine Modes.      (line  147)
47981* 'satfractMN2' instruction pattern:     Standard Names.     (line  919)
47982* 'satfractunsMN2' instruction pattern:  Standard Names.     (line  932)
47983* satisfies_constraint_:                 C Constraint Interface.
47984                                                             (line   46)
47985* sat_fract:                             Conversions.        (line   90)
47986* SAVE_EXPR:                             Unary and Binary Expressions.
47987                                                             (line    6)
47988* 'save_stack_block' instruction pattern: Standard Names.    (line 1312)
47989* 'save_stack_function' instruction pattern: Standard Names. (line 1312)
47990* 'save_stack_nonlocal' instruction pattern: Standard Names. (line 1312)
47991* SBSS_SECTION_ASM_OP:                   Sections.           (line   75)
47992* Scalar evolutions:                     Scalar evolutions.  (line    6)
47993* scalars, returned as values:           Scalar Return.      (line    6)
47994* SCHED_GROUP_P:                         Flags.              (line  148)
47995* SCmode:                                Machine Modes.      (line  196)
47996* scratch:                               Regs and Memory.    (line  294)
47997* scratch operands:                      Regs and Memory.    (line  294)
47998* 'scratch', RTL sharing:                Sharing.            (line   35)
47999* scratch_operand:                       Machine-Independent Predicates.
48000                                                             (line   49)
48001* SDATA_SECTION_ASM_OP:                  Sections.           (line   57)
48002* SDB_ALLOW_FORWARD_REFERENCES:          SDB and DWARF.      (line  123)
48003* SDB_ALLOW_UNKNOWN_REFERENCES:          SDB and DWARF.      (line  118)
48004* SDB_DEBUGGING_INFO:                    SDB and DWARF.      (line    8)
48005* SDB_DELIM:                             SDB and DWARF.      (line  111)
48006* SDB_OUTPUT_SOURCE_LINE:                SDB and DWARF.      (line  128)
48007* SDmode:                                Machine Modes.      (line   85)
48008* 'sdot_prodM' instruction pattern:      Standard Names.     (line  331)
48009* search options:                        Including Patterns. (line   47)
48010* SECONDARY_INPUT_RELOAD_CLASS:          Register Classes.   (line  391)
48011* SECONDARY_MEMORY_NEEDED:               Register Classes.   (line  447)
48012* SECONDARY_MEMORY_NEEDED_MODE:          Register Classes.   (line  466)
48013* SECONDARY_MEMORY_NEEDED_RTX:           Register Classes.   (line  457)
48014* SECONDARY_OUTPUT_RELOAD_CLASS:         Register Classes.   (line  392)
48015* SECONDARY_RELOAD_CLASS:                Register Classes.   (line  390)
48016* SELECT_CC_MODE:                        MODE_CC Condition Codes.
48017                                                             (line    6)
48018* sequence:                              Side Effects.       (line  258)
48019* Sequence iterators:                    Sequence iterators. (line    6)
48020* set:                                   Side Effects.       (line   15)
48021* 'set' and '/f':                        Flags.              (line  107)
48022* 'setmemM' instruction pattern:         Standard Names.     (line  787)
48023* SETUP_FRAME_ADDRESSES:                 Frame Layout.       (line  100)
48024* SET_ASM_OP:                            Label Output.       (line  416)
48025* SET_ASM_OP <1>:                        Label Output.       (line  427)
48026* set_attr:                              Tagging Insns.      (line   31)
48027* set_attr_alternative:                  Tagging Insns.      (line   49)
48028* set_bb_seq:                            GIMPLE sequences.   (line   75)
48029* SET_BY_PIECES_P:                       Costs.              (line  205)
48030* SET_DEST:                              Side Effects.       (line   69)
48031* SET_IS_RETURN_P:                       Flags.              (line  157)
48032* SET_LABEL_KIND:                        Insns.              (line  146)
48033* set_optab_libfunc:                     Library Calls.      (line   15)
48034* SET_RATIO:                             Costs.              (line  193)
48035* SET_SRC:                               Side Effects.       (line   69)
48036* 'set_thread_pointerMODE' instruction pattern: Standard Names.
48037                                                             (line 1856)
48038* SET_TYPE_STRUCTURAL_EQUALITY:          Types.              (line    6)
48039* SET_TYPE_STRUCTURAL_EQUALITY <1>:      Types.              (line   81)
48040* SFmode:                                Machine Modes.      (line   66)
48041* SF_SIZE:                               Type Layout.        (line  135)
48042* sharing of RTL components:             Sharing.            (line    6)
48043* shift:                                 Arithmetic.         (line  174)
48044* SHIFT_COUNT_TRUNCATED:                 Misc.               (line  112)
48045* SHLIB_SUFFIX:                          Macros for Initialization.
48046                                                             (line  133)
48047* SHORT_ACCUM_TYPE_SIZE:                 Type Layout.        (line   82)
48048* SHORT_FRACT_TYPE_SIZE:                 Type Layout.        (line   62)
48049* SHORT_IMMEDIATES_SIGN_EXTEND:          Misc.               (line   86)
48050* SHORT_TYPE_SIZE:                       Type Layout.        (line   15)
48051* 'sibcall_epilogue' instruction pattern: Standard Names.    (line 1519)
48052* sibling call:                          Edges.              (line  121)
48053* SIBLING_CALL_P:                        Flags.              (line  161)
48054* signed division:                       Arithmetic.         (line  117)
48055* signed division with signed saturation: Arithmetic.        (line  117)
48056* signed maximum:                        Arithmetic.         (line  142)
48057* signed minimum:                        Arithmetic.         (line  142)
48058* sign_extend:                           Conversions.        (line   23)
48059* sign_extract:                          Bit-Fields.         (line    8)
48060* 'sign_extract', canonicalization of:   Insn Canonicalizations.
48061                                                             (line   87)
48062* SIG_ATOMIC_TYPE:                       Type Layout.        (line  251)
48063* SImode:                                Machine Modes.      (line   37)
48064* simple constraints:                    Simple Constraints. (line    6)
48065* simple_return:                         Side Effects.       (line   86)
48066* 'simple_return' instruction pattern:   Standard Names.     (line 1169)
48067* sincos math function, implicit usage:  Library Calls.      (line   78)
48068* 'sincosM3' instruction pattern:        Standard Names.     (line  574)
48069* 'sinM2' instruction pattern:           Standard Names.     (line  566)
48070* SIZETYPE:                              Type Layout.        (line  190)
48071* SIZE_ASM_OP:                           Label Output.       (line   33)
48072* SIZE_TYPE:                             Type Layout.        (line  174)
48073* skip:                                  GTY Options.        (line   76)
48074* SLOW_BYTE_ACCESS:                      Costs.              (line  117)
48075* SLOW_UNALIGNED_ACCESS:                 Costs.              (line  132)
48076* smax:                                  Arithmetic.         (line  142)
48077* smin:                                  Arithmetic.         (line  142)
48078* sms, swing, software pipelining:       RTL passes.         (line  131)
48079* 'smulM3_highpart' instruction pattern: Standard Names.     (line  429)
48080* soft float library:                    Soft float library routines.
48081                                                             (line    6)
48082* special:                               GTY Options.        (line  307)
48083* special predicates:                    Predicates.         (line   31)
48084* SPECS:                                 Target Fragment.    (line  191)
48085* speed of instructions:                 Costs.              (line    6)
48086* splitting instructions:                Insn Splitting.     (line    6)
48087* split_block:                           Maintaining the CFG.
48088                                                             (line   97)
48089* SQmode:                                Machine Modes.      (line  111)
48090* sqrt:                                  Arithmetic.         (line  207)
48091* 'sqrtM2' instruction pattern:          Standard Names.     (line  532)
48092* square root:                           Arithmetic.         (line  207)
48093* SSA:                                   SSA.                (line    6)
48094* 'ssaddM3' instruction pattern:         Standard Names.     (line  266)
48095* 'ssashlM3' instruction pattern:        Standard Names.     (line  504)
48096* SSA_NAME_DEF_STMT:                     SSA.                (line  218)
48097* SSA_NAME_VERSION:                      SSA.                (line  223)
48098* 'ssdivM3' instruction pattern:         Standard Names.     (line  266)
48099* 'ssmaddMN4' instruction pattern:       Standard Names.     (line  452)
48100* 'ssmsubMN4' instruction pattern:       Standard Names.     (line  476)
48101* 'ssmulM3' instruction pattern:         Standard Names.     (line  266)
48102* 'ssnegM2' instruction pattern:         Standard Names.     (line  526)
48103* 'sssubM3' instruction pattern:         Standard Names.     (line  266)
48104* 'ssum_widenM3' instruction pattern:    Standard Names.     (line  340)
48105* ss_abs:                                Arithmetic.         (line  201)
48106* ss_ashift:                             Arithmetic.         (line  174)
48107* ss_div:                                Arithmetic.         (line  117)
48108* ss_minus:                              Arithmetic.         (line   38)
48109* ss_mult:                               Arithmetic.         (line   93)
48110* ss_neg:                                Arithmetic.         (line   82)
48111* ss_plus:                               Arithmetic.         (line   14)
48112* ss_truncate:                           Conversions.        (line   43)
48113* stack arguments:                       Stack Arguments.    (line    6)
48114* stack frame layout:                    Frame Layout.       (line    6)
48115* stack smashing protection:             Stack Smashing Protection.
48116                                                             (line    6)
48117* STACK_ALIGNMENT_NEEDED:                Frame Layout.       (line   47)
48118* STACK_BOUNDARY:                        Storage Layout.     (line  144)
48119* STACK_CHECK_BUILTIN:                   Stack Checking.     (line   31)
48120* STACK_CHECK_FIXED_FRAME_SIZE:          Stack Checking.     (line   82)
48121* STACK_CHECK_MAX_FRAME_SIZE:            Stack Checking.     (line   73)
48122* STACK_CHECK_MAX_VAR_SIZE:              Stack Checking.     (line   89)
48123* STACK_CHECK_MOVING_SP:                 Stack Checking.     (line   53)
48124* STACK_CHECK_PROBE_INTERVAL_EXP:        Stack Checking.     (line   45)
48125* STACK_CHECK_PROTECT:                   Stack Checking.     (line   62)
48126* STACK_CHECK_STATIC_BUILTIN:            Stack Checking.     (line   38)
48127* STACK_DYNAMIC_OFFSET:                  Frame Layout.       (line   73)
48128* 'STACK_DYNAMIC_OFFSET' and virtual registers: Regs and Memory.
48129                                                             (line   83)
48130* STACK_GROWS_DOWNWARD:                  Frame Layout.       (line    8)
48131* STACK_PARMS_IN_REG_PARM_AREA:          Stack Arguments.    (line   83)
48132* STACK_POINTER_OFFSET:                  Frame Layout.       (line   57)
48133* 'STACK_POINTER_OFFSET' and virtual registers: Regs and Memory.
48134                                                             (line   93)
48135* STACK_POINTER_REGNUM:                  Frame Registers.    (line    8)
48136* 'STACK_POINTER_REGNUM' and virtual registers: Regs and Memory.
48137                                                             (line   83)
48138* stack_pointer_rtx:                     Frame Registers.    (line  104)
48139* 'stack_protect_set' instruction pattern: Standard Names.   (line 1866)
48140* 'stack_protect_test' instruction pattern: Standard Names.  (line 1877)
48141* STACK_PUSH_CODE:                       Frame Layout.       (line   16)
48142* STACK_REGS:                            Stack Registers.    (line   19)
48143* STACK_REG_COVER_CLASS:                 Stack Registers.    (line   22)
48144* STACK_SAVEAREA_MODE:                   Storage Layout.     (line  435)
48145* STACK_SIZE_MODE:                       Storage Layout.     (line  446)
48146* STACK_SLOT_ALIGNMENT:                  Storage Layout.     (line  267)
48147* standard pattern names:                Standard Names.     (line    6)
48148* STANDARD_STARTFILE_PREFIX:             Driver.             (line  274)
48149* STANDARD_STARTFILE_PREFIX_1:           Driver.             (line  281)
48150* STANDARD_STARTFILE_PREFIX_2:           Driver.             (line  288)
48151* STARTFILE_SPEC:                        Driver.             (line  147)
48152* STARTING_FRAME_OFFSET:                 Frame Layout.       (line   38)
48153* 'STARTING_FRAME_OFFSET' and virtual registers: Regs and Memory.
48154                                                             (line   74)
48155* Statement and operand traversals:      Statement and operand traversals.
48156                                                             (line    6)
48157* Statement Sequences:                   Statement Sequences.
48158                                                             (line    6)
48159* Statements:                            Statements.         (line    6)
48160* statements:                            Function Properties.
48161                                                             (line    6)
48162* statements <1>:                        Statements for C++. (line    6)
48163* Static profile estimation:             Profile information.
48164                                                             (line   24)
48165* static single assignment:              SSA.                (line    6)
48166* STATIC_CHAIN_INCOMING_REGNUM:          Frame Registers.    (line   77)
48167* STATIC_CHAIN_REGNUM:                   Frame Registers.    (line   76)
48168* 'stdarg.h' and register arguments:     Register Arguments. (line   45)
48169* STDC_0_IN_SYSTEM_HEADERS:              Misc.               (line  350)
48170* STMT_EXPR:                             Unary and Binary Expressions.
48171                                                             (line    6)
48172* STMT_IS_FULL_EXPR_P:                   Statements for C++. (line   22)
48173* storage layout:                        Storage Layout.     (line    6)
48174* STORE_BY_PIECES_P:                     Costs.              (line  212)
48175* STORE_FLAG_VALUE:                      Misc.               (line  201)
48176* 'store_multiple' instruction pattern:  Standard Names.     (line  159)
48177* strcpy:                                Storage Layout.     (line  228)
48178* STRICT_ALIGNMENT:                      Storage Layout.     (line  317)
48179* strict_low_part:                       RTL Declarations.   (line    9)
48180* strict_memory_address_p:               Addressing Modes.   (line  186)
48181* STRING_CST:                            Constant expressions.
48182                                                             (line    6)
48183* STRING_POOL_ADDRESS_P:                 Flags.              (line  165)
48184* 'strlenM' instruction pattern:         Standard Names.     (line  854)
48185* structure value address:               Aggregate Return.   (line    6)
48186* structures, returning:                 Interface.          (line   10)
48187* STRUCTURE_SIZE_BOUNDARY:               Storage Layout.     (line  309)
48188* 'subM3' instruction pattern:           Standard Names.     (line  266)
48189* SUBOBJECT:                             Statements for C++. (line    6)
48190* SUBOBJECT_CLEANUP:                     Statements for C++. (line    6)
48191* subreg:                                Regs and Memory.    (line   97)
48192* 'subreg' and '/s':                     Flags.              (line  187)
48193* 'subreg' and '/u':                     Flags.              (line  180)
48194* 'subreg' and '/u' and '/v':            Flags.              (line  170)
48195* 'subreg', in 'strict_low_part':        RTL Declarations.   (line    9)
48196* SUBREG_BYTE:                           Regs and Memory.    (line  285)
48197* SUBREG_PROMOTED_UNSIGNED_P:            Flags.              (line  170)
48198* SUBREG_PROMOTED_UNSIGNED_SET:          Flags.              (line  180)
48199* SUBREG_PROMOTED_VAR_P:                 Flags.              (line  187)
48200* SUBREG_REG:                            Regs and Memory.    (line  285)
48201* subst iterators in '.md' files:        Subst Iterators.    (line    6)
48202* SUCCESS_EXIT_CODE:                     Host Misc.          (line   12)
48203* SUPPORTS_INIT_PRIORITY:                Macros for Initialization.
48204                                                             (line   57)
48205* SUPPORTS_ONE_ONLY:                     Label Output.       (line  255)
48206* SUPPORTS_WEAK:                         Label Output.       (line  229)
48207* SWITCHABLE_TARGET:                     Run-time Target.    (line  164)
48208* SWITCH_BODY:                           Statements for C++. (line    6)
48209* SWITCH_COND:                           Statements for C++. (line    6)
48210* SWITCH_STMT:                           Statements for C++. (line    6)
48211* symbolic label:                        Sharing.            (line   20)
48212* SYMBOL_FLAG_ANCHOR:                    Special Accessors.  (line  117)
48213* SYMBOL_FLAG_EXTERNAL:                  Special Accessors.  (line   99)
48214* SYMBOL_FLAG_FUNCTION:                  Special Accessors.  (line   92)
48215* SYMBOL_FLAG_HAS_BLOCK_INFO:            Special Accessors.  (line  113)
48216* SYMBOL_FLAG_LOCAL:                     Special Accessors.  (line   95)
48217* SYMBOL_FLAG_SMALL:                     Special Accessors.  (line  104)
48218* SYMBOL_FLAG_TLS_SHIFT:                 Special Accessors.  (line  108)
48219* symbol_ref:                            Constants.          (line   86)
48220* 'symbol_ref' and '/f':                 Flags.              (line  165)
48221* 'symbol_ref' and '/i':                 Flags.              (line  202)
48222* 'symbol_ref' and '/u':                 Flags.              (line   10)
48223* 'symbol_ref' and '/v':                 Flags.              (line  206)
48224* 'symbol_ref', RTL sharing:             Sharing.            (line   20)
48225* SYMBOL_REF_ANCHOR_P:                   Special Accessors.  (line  117)
48226* SYMBOL_REF_BLOCK:                      Special Accessors.  (line  130)
48227* SYMBOL_REF_BLOCK_OFFSET:               Special Accessors.  (line  135)
48228* SYMBOL_REF_CONSTANT:                   Special Accessors.  (line   78)
48229* SYMBOL_REF_DATA:                       Special Accessors.  (line   82)
48230* SYMBOL_REF_DECL:                       Special Accessors.  (line   67)
48231* SYMBOL_REF_EXTERNAL_P:                 Special Accessors.  (line   99)
48232* SYMBOL_REF_FLAG:                       Flags.              (line  206)
48233* 'SYMBOL_REF_FLAG', in 'TARGET_ENCODE_SECTION_INFO': Sections.
48234                                                             (line  277)
48235* SYMBOL_REF_FLAGS:                      Special Accessors.  (line   86)
48236* SYMBOL_REF_FUNCTION_P:                 Special Accessors.  (line   92)
48237* SYMBOL_REF_HAS_BLOCK_INFO_P:           Special Accessors.  (line  113)
48238* SYMBOL_REF_LOCAL_P:                    Special Accessors.  (line   95)
48239* SYMBOL_REF_SMALL_P:                    Special Accessors.  (line  104)
48240* SYMBOL_REF_TLS_MODEL:                  Special Accessors.  (line  108)
48241* SYMBOL_REF_USED:                       Flags.              (line  197)
48242* SYMBOL_REF_WEAK:                       Flags.              (line  202)
48243* 'sync_addMODE' instruction pattern:    Standard Names.     (line 1622)
48244* 'sync_andMODE' instruction pattern:    Standard Names.     (line 1622)
48245* 'sync_compare_and_swapMODE' instruction pattern: Standard Names.
48246                                                             (line 1581)
48247* 'sync_iorMODE' instruction pattern:    Standard Names.     (line 1622)
48248* 'sync_lock_releaseMODE' instruction pattern: Standard Names.
48249                                                             (line 1691)
48250* 'sync_lock_test_and_setMODE' instruction pattern: Standard Names.
48251                                                             (line 1664)
48252* 'sync_nandMODE' instruction pattern:   Standard Names.     (line 1622)
48253* 'sync_new_addMODE' instruction pattern: Standard Names.    (line 1656)
48254* 'sync_new_andMODE' instruction pattern: Standard Names.    (line 1656)
48255* 'sync_new_iorMODE' instruction pattern: Standard Names.    (line 1656)
48256* 'sync_new_nandMODE' instruction pattern: Standard Names.   (line 1656)
48257* 'sync_new_subMODE' instruction pattern: Standard Names.    (line 1656)
48258* 'sync_new_xorMODE' instruction pattern: Standard Names.    (line 1656)
48259* 'sync_old_addMODE' instruction pattern: Standard Names.    (line 1638)
48260* 'sync_old_andMODE' instruction pattern: Standard Names.    (line 1638)
48261* 'sync_old_iorMODE' instruction pattern: Standard Names.    (line 1638)
48262* 'sync_old_nandMODE' instruction pattern: Standard Names.   (line 1638)
48263* 'sync_old_subMODE' instruction pattern: Standard Names.    (line 1638)
48264* 'sync_old_xorMODE' instruction pattern: Standard Names.    (line 1638)
48265* 'sync_subMODE' instruction pattern:    Standard Names.     (line 1622)
48266* 'sync_xorMODE' instruction pattern:    Standard Names.     (line 1622)
48267* SYSROOT_HEADERS_SUFFIX_SPEC:           Driver.             (line  176)
48268* SYSROOT_SUFFIX_SPEC:                   Driver.             (line  171)
48269* 't-TARGET':                            Target Fragment.    (line    6)
48270* table jump:                            Basic Blocks.       (line   67)
48271* 'tablejump' instruction pattern:       Standard Names.     (line 1242)
48272* tag:                                   GTY Options.        (line   82)
48273* tagging insns:                         Tagging Insns.      (line    6)
48274* tail calls:                            Tail Calls.         (line    6)
48275* TAmode:                                Machine Modes.      (line  155)
48276* target attributes:                     Target Attributes.  (line    6)
48277* target description macros:             Target Macros.      (line    6)
48278* target functions:                      Target Structure.   (line    6)
48279* target hooks:                          Target Structure.   (line    6)
48280* target makefile fragment:              Target Fragment.    (line    6)
48281* target specifications:                 Run-time Target.    (line    6)
48282* targetm:                               Target Structure.   (line    6)
48283* targets, makefile:                     Makefile.           (line    6)
48284* TARGET_ADDRESS_COST:                   Costs.              (line  300)
48285* TARGET_ADDR_SPACE_ADDRESS_MODE:        Named Address Spaces.
48286                                                             (line   43)
48287* TARGET_ADDR_SPACE_CONVERT:             Named Address Spaces.
48288                                                             (line   85)
48289* TARGET_ADDR_SPACE_LEGITIMATE_ADDRESS_P: Named Address Spaces.
48290                                                             (line   61)
48291* TARGET_ADDR_SPACE_LEGITIMIZE_ADDRESS:  Named Address Spaces.
48292                                                             (line   69)
48293* TARGET_ADDR_SPACE_POINTER_MODE:        Named Address Spaces.
48294                                                             (line   36)
48295* TARGET_ADDR_SPACE_SUBSET_P:            Named Address Spaces.
48296                                                             (line   76)
48297* TARGET_ADDR_SPACE_VALID_POINTER_MODE:  Named Address Spaces.
48298                                                             (line   50)
48299* TARGET_ALIGN_ANON_BITFIELD:            Storage Layout.     (line  394)
48300* TARGET_ALLOCATE_INITIAL_VALUE:         Misc.               (line  701)
48301* TARGET_ALLOCATE_STACK_SLOTS_FOR_ARGS:  Misc.               (line  980)
48302* TARGET_ALWAYS_STRIP_DOTDOT:            Driver.             (line  246)
48303* TARGET_ARG_PARTIAL_BYTES:              Register Arguments. (line   81)
48304* TARGET_ARM_EABI_UNWINDER:              Exception Region Output.
48305                                                             (line  127)
48306* TARGET_ARRAY_MODE_SUPPORTED_P:         Register Arguments. (line  333)
48307* TARGET_ASAN_SHADOW_OFFSET:             Misc.               (line 1008)
48308* TARGET_ASM_ALIGNED_DI_OP:              Data Output.        (line    9)
48309* TARGET_ASM_ALIGNED_HI_OP:              Data Output.        (line    7)
48310* TARGET_ASM_ALIGNED_SI_OP:              Data Output.        (line    8)
48311* TARGET_ASM_ALIGNED_TI_OP:              Data Output.        (line   10)
48312* TARGET_ASM_ASSEMBLE_VISIBILITY:        Label Output.       (line  266)
48313* TARGET_ASM_BYTE_OP:                    Data Output.        (line    6)
48314* TARGET_ASM_CAN_OUTPUT_MI_THUNK:        Function Entry.     (line  202)
48315* TARGET_ASM_CLOSE_PAREN:                Data Output.        (line  129)
48316* TARGET_ASM_CODE_END:                   File Framework.     (line   57)
48317* TARGET_ASM_CONSTRUCTOR:                Macros for Initialization.
48318                                                             (line   68)
48319* TARGET_ASM_DECLARE_CONSTANT_NAME:      Label Output.       (line  149)
48320* TARGET_ASM_DESTRUCTOR:                 Macros for Initialization.
48321                                                             (line   82)
48322* TARGET_ASM_EMIT_EXCEPT_PERSONALITY:    Dispatch Tables.    (line   80)
48323* TARGET_ASM_EMIT_EXCEPT_TABLE_LABEL:    Dispatch Tables.    (line   73)
48324* TARGET_ASM_EMIT_UNWIND_LABEL:          Dispatch Tables.    (line   61)
48325* TARGET_ASM_EXTERNAL_LIBCALL:           Label Output.       (line  302)
48326* TARGET_ASM_FILE_END:                   File Framework.     (line   35)
48327* TARGET_ASM_FILE_START:                 File Framework.     (line    8)
48328* TARGET_ASM_FILE_START_APP_OFF:         File Framework.     (line   16)
48329* TARGET_ASM_FILE_START_FILE_DIRECTIVE:  File Framework.     (line   29)
48330* TARGET_ASM_FINAL_POSTSCAN_INSN:        Instruction Output. (line   82)
48331* TARGET_ASM_FUNCTION_BEGIN_EPILOGUE:    Function Entry.     (line   59)
48332* TARGET_ASM_FUNCTION_END_PROLOGUE:      Function Entry.     (line   53)
48333* TARGET_ASM_FUNCTION_EPILOGUE:          Function Entry.     (line   65)
48334* TARGET_ASM_FUNCTION_PROLOGUE:          Function Entry.     (line    9)
48335* TARGET_ASM_FUNCTION_RODATA_SECTION:    Sections.           (line  213)
48336* TARGET_ASM_FUNCTION_SECTION:           File Framework.     (line  121)
48337* TARGET_ASM_FUNCTION_SWITCHED_TEXT_SECTIONS: File Framework.
48338                                                             (line  131)
48339* TARGET_ASM_GLOBALIZE_DECL_NAME:        Label Output.       (line  194)
48340* TARGET_ASM_GLOBALIZE_LABEL:            Label Output.       (line  185)
48341* TARGET_ASM_INIT_SECTIONS:              Sections.           (line  159)
48342* TARGET_ASM_INTEGER:                    Data Output.        (line   25)
48343* TARGET_ASM_INTERNAL_LABEL:             Label Output.       (line  345)
48344* TARGET_ASM_JUMP_ALIGN_MAX_SKIP:        Alignment Output.   (line   21)
48345* TARGET_ASM_LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP: Alignment Output.
48346                                                             (line   34)
48347* TARGET_ASM_LABEL_ALIGN_MAX_SKIP:       Alignment Output.   (line   68)
48348* TARGET_ASM_LOOP_ALIGN_MAX_SKIP:        Alignment Output.   (line   53)
48349* TARGET_ASM_LTO_END:                    File Framework.     (line   52)
48350* TARGET_ASM_LTO_START:                  File Framework.     (line   47)
48351* TARGET_ASM_MARK_DECL_PRESERVED:        Label Output.       (line  308)
48352* TARGET_ASM_MERGEABLE_RODATA_PREFIX:    Sections.           (line  221)
48353* TARGET_ASM_NAMED_SECTION:              File Framework.     (line  113)
48354* TARGET_ASM_OPEN_PAREN:                 Data Output.        (line  128)
48355* TARGET_ASM_OUTPUT_ADDR_CONST_EXTRA:    Data Output.        (line   38)
48356* TARGET_ASM_OUTPUT_ANCHOR:              Anchored Addresses. (line   42)
48357* TARGET_ASM_OUTPUT_DWARF_DTPREL:        SDB and DWARF.      (line   99)
48358* TARGET_ASM_OUTPUT_IDENT:               File Framework.     (line  100)
48359* TARGET_ASM_OUTPUT_MI_THUNK:            Function Entry.     (line  160)
48360* TARGET_ASM_OUTPUT_SOURCE_FILENAME:     File Framework.     (line   91)
48361* TARGET_ASM_RECORD_GCC_SWITCHES:        File Framework.     (line  162)
48362* TARGET_ASM_RECORD_GCC_SWITCHES_SECTION: File Framework.    (line  207)
48363* TARGET_ASM_RELOC_RW_MASK:              Sections.           (line  168)
48364* TARGET_ASM_SELECT_RTX_SECTION:         Sections.           (line  230)
48365* TARGET_ASM_SELECT_SECTION:             Sections.           (line  179)
48366* TARGET_ASM_TM_CLONE_TABLE_SECTION:     Sections.           (line  226)
48367* TARGET_ASM_TRAMPOLINE_TEMPLATE:        Trampolines.        (line   28)
48368* TARGET_ASM_TTYPE:                      Exception Region Output.
48369                                                             (line  121)
48370* TARGET_ASM_UNALIGNED_DI_OP:            Data Output.        (line   13)
48371* TARGET_ASM_UNALIGNED_HI_OP:            Data Output.        (line   11)
48372* TARGET_ASM_UNALIGNED_SI_OP:            Data Output.        (line   12)
48373* TARGET_ASM_UNALIGNED_TI_OP:            Data Output.        (line   14)
48374* TARGET_ASM_UNIQUE_SECTION:             Sections.           (line  201)
48375* TARGET_ASM_UNWIND_EMIT:                Dispatch Tables.    (line   87)
48376* TARGET_ASM_UNWIND_EMIT_BEFORE_INSN:    Dispatch Tables.    (line   92)
48377* TARGET_ATOMIC_TEST_AND_SET_TRUEVAL:    Misc.               (line 1018)
48378* TARGET_ATTRIBUTE_TABLE:                Target Attributes.  (line   10)
48379* TARGET_ATTRIBUTE_TAKES_IDENTIFIER_P:   Target Attributes.  (line   17)
48380* TARGET_BINDS_LOCAL_P:                  Sections.           (line  308)
48381* TARGET_BRANCH_TARGET_REGISTER_CALLEE_SAVED: Misc.          (line  798)
48382* TARGET_BRANCH_TARGET_REGISTER_CLASS:   Misc.               (line  791)
48383* TARGET_BUILD_BUILTIN_VA_LIST:          Register Arguments. (line  271)
48384* TARGET_BUILTIN_DECL:                   Misc.               (line  595)
48385* TARGET_BUILTIN_RECIPROCAL:             Addressing Modes.   (line  261)
48386* TARGET_BUILTIN_SETJMP_FRAME_VALUE:     Frame Layout.       (line  107)
48387* TARGET_C99_FUNCTIONS:                  Library Calls.      (line   70)
48388* TARGET_CALLEE_COPIES:                  Register Arguments. (line  113)
48389* TARGET_CANNOT_FORCE_CONST_MEM:         Addressing Modes.   (line  234)
48390* TARGET_CANNOT_MODIFY_JUMPS_P:          Misc.               (line  778)
48391* TARGET_CANONICALIZE_COMPARISON:        MODE_CC Condition Codes.
48392                                                             (line   54)
48393* TARGET_CANONICAL_VA_LIST_TYPE:         Register Arguments. (line  292)
48394* TARGET_CAN_ELIMINATE:                  Elimination.        (line   73)
48395* TARGET_CAN_FOLLOW_JUMP:                Misc.               (line  687)
48396* TARGET_CAN_INLINE_P:                   Target Attributes.  (line  157)
48397* TARGET_CASE_VALUES_THRESHOLD:          Misc.               (line   46)
48398* TARGET_CC_MODES_COMPATIBLE:            MODE_CC Condition Codes.
48399                                                             (line  119)
48400* TARGET_CHECK_PCH_TARGET_FLAGS:         PCH Target.         (line   26)
48401* TARGET_CHECK_STRING_OBJECT_FORMAT_ARG: Run-time Target.    (line  119)
48402* TARGET_CLASS_LIKELY_SPILLED_P:         Register Classes.   (line  489)
48403* TARGET_CLASS_MAX_NREGS:                Register Classes.   (line  505)
48404* TARGET_COMMUTATIVE_P:                  Misc.               (line  694)
48405* TARGET_COMPARE_VERSION_PRIORITY:       Misc.               (line  636)
48406* TARGET_COMP_TYPE_ATTRIBUTES:           Target Attributes.  (line   25)
48407* TARGET_CONDITIONAL_REGISTER_USAGE:     Register Basics.    (line   59)
48408* TARGET_CONST_ANCHOR:                   Misc.               (line  991)
48409* TARGET_CONST_NOT_OK_FOR_DEBUG_P:       Addressing Modes.   (line  230)
48410* TARGET_CONVERT_TO_TYPE:                Misc.               (line  945)
48411* TARGET_CPU_CPP_BUILTINS:               Run-time Target.    (line    8)
48412* TARGET_CXX_ADJUST_CLASS_AT_DEFINITION: C++ ABI.            (line   86)
48413* TARGET_CXX_CDTOR_RETURNS_THIS:         C++ ABI.            (line   37)
48414* TARGET_CXX_CLASS_DATA_ALWAYS_COMDAT:   C++ ABI.            (line   61)
48415* TARGET_CXX_COOKIE_HAS_SIZE:            C++ ABI.            (line   24)
48416* TARGET_CXX_DECL_MANGLING_CONTEXT:      C++ ABI.            (line   92)
48417* TARGET_CXX_DETERMINE_CLASS_DATA_VISIBILITY: C++ ABI.       (line   52)
48418* TARGET_CXX_GET_COOKIE_SIZE:            C++ ABI.            (line   17)
48419* TARGET_CXX_GUARD_MASK_BIT:             C++ ABI.            (line   11)
48420* TARGET_CXX_GUARD_TYPE:                 C++ ABI.            (line    6)
48421* TARGET_CXX_IMPORT_EXPORT_CLASS:        C++ ABI.            (line   28)
48422* TARGET_CXX_KEY_METHOD_MAY_BE_INLINE:   C++ ABI.            (line   42)
48423* TARGET_CXX_LIBRARY_RTTI_COMDAT:        C++ ABI.            (line   68)
48424* TARGET_CXX_USE_AEABI_ATEXIT:           C++ ABI.            (line   73)
48425* TARGET_CXX_USE_ATEXIT_FOR_CXA_ATEXIT:  C++ ABI.            (line   79)
48426* TARGET_C_PREINCLUDE:                   Misc.               (line  361)
48427* TARGET_DEBUG_UNWIND_INFO:              SDB and DWARF.      (line   36)
48428* TARGET_DECIMAL_FLOAT_SUPPORTED_P:      Storage Layout.     (line  518)
48429* TARGET_DECLSPEC:                       Target Attributes.  (line   72)
48430* TARGET_DEFAULT_PACK_STRUCT:            Misc.               (line  438)
48431* TARGET_DEFAULT_SHORT_ENUMS:            Type Layout.        (line  166)
48432* TARGET_DEFAULT_TARGET_FLAGS:           Run-time Target.    (line   55)
48433* TARGET_DEFERRED_OUTPUT_DEFS:           Label Output.       (line  430)
48434* TARGET_DELAY_SCHED2:                   SDB and DWARF.      (line   65)
48435* TARGET_DELAY_VARTRACK:                 SDB and DWARF.      (line   69)
48436* TARGET_DELEGITIMIZE_ADDRESS:           Addressing Modes.   (line  221)
48437* TARGET_DIFFERENT_ADDR_DISPLACEMENT_P:  Register Classes.   (line  564)
48438* TARGET_DLLIMPORT_DECL_ATTRIBUTES:      Target Attributes.  (line   55)
48439* TARGET_DWARF_CALLING_CONVENTION:       SDB and DWARF.      (line   16)
48440* TARGET_DWARF_HANDLE_FRAME_UNSPEC:      Frame Layout.       (line  169)
48441* TARGET_DWARF_REGISTER_SPAN:            Exception Region Output.
48442                                                             (line  104)
48443* TARGET_EDOM:                           Library Calls.      (line   52)
48444* TARGET_EMUTLS_DEBUG_FORM_TLS_ADDRESS:  Emulated TLS.       (line   67)
48445* TARGET_EMUTLS_GET_ADDRESS:             Emulated TLS.       (line   18)
48446* TARGET_EMUTLS_REGISTER_COMMON:         Emulated TLS.       (line   23)
48447* TARGET_EMUTLS_TMPL_PREFIX:             Emulated TLS.       (line   44)
48448* TARGET_EMUTLS_TMPL_SECTION:            Emulated TLS.       (line   35)
48449* TARGET_EMUTLS_VAR_ALIGN_FIXED:         Emulated TLS.       (line   62)
48450* TARGET_EMUTLS_VAR_FIELDS:              Emulated TLS.       (line   48)
48451* TARGET_EMUTLS_VAR_INIT:                Emulated TLS.       (line   55)
48452* TARGET_EMUTLS_VAR_PREFIX:              Emulated TLS.       (line   40)
48453* TARGET_EMUTLS_VAR_SECTION:             Emulated TLS.       (line   30)
48454* TARGET_ENCODE_SECTION_INFO:            Sections.           (line  251)
48455* 'TARGET_ENCODE_SECTION_INFO' and address validation: Addressing Modes.
48456                                                             (line   82)
48457* 'TARGET_ENCODE_SECTION_INFO' usage:    Instruction Output. (line  127)
48458* TARGET_ENUM_VA_LIST_P:                 Register Arguments. (line  275)
48459* TARGET_EXCEPT_UNWIND_INFO:             Exception Region Output.
48460                                                             (line   45)
48461* TARGET_EXECUTABLE_SUFFIX:              Misc.               (line  752)
48462* TARGET_EXPAND_BUILTIN:                 Misc.               (line  605)
48463* TARGET_EXPAND_BUILTIN_SAVEREGS:        Varargs.            (line   64)
48464* TARGET_EXPAND_TO_RTL_HOOK:             Storage Layout.     (line  524)
48465* TARGET_EXPR:                           Unary and Binary Expressions.
48466                                                             (line    6)
48467* TARGET_EXTRA_INCLUDES:                 Misc.               (line  837)
48468* TARGET_EXTRA_LIVE_ON_ENTRY:            Tail Calls.         (line   20)
48469* TARGET_EXTRA_PRE_INCLUDES:             Misc.               (line  844)
48470* TARGET_FIXED_CONDITION_CODE_REGS:      MODE_CC Condition Codes.
48471                                                             (line  104)
48472* TARGET_FIXED_POINT_SUPPORTED_P:        Storage Layout.     (line  521)
48473* target_flags:                          Run-time Target.    (line   51)
48474* TARGET_FLAGS_REGNUM:                   Register Arguments. (line  391)
48475* TARGET_FLT_EVAL_METHOD:                Type Layout.        (line  147)
48476* TARGET_FN_ABI_VA_LIST:                 Register Arguments. (line  287)
48477* TARGET_FOLD_BUILTIN:                   Misc.               (line  627)
48478* TARGET_FORCE_AT_COMP_DIR:              SDB and DWARF.      (line   60)
48479* TARGET_FORMAT_TYPES:                   Misc.               (line  865)
48480* TARGET_FRAME_POINTER_REQUIRED:         Elimination.        (line    8)
48481* TARGET_FUNCTION_ARG:                   Register Arguments. (line   10)
48482* TARGET_FUNCTION_ARG_ADVANCE:           Register Arguments. (line  184)
48483* TARGET_FUNCTION_ARG_BOUNDARY:          Register Arguments. (line  238)
48484* TARGET_FUNCTION_ARG_ROUND_BOUNDARY:    Register Arguments. (line  244)
48485* TARGET_FUNCTION_ATTRIBUTE_INLINABLE_P: Target Attributes.  (line   93)
48486* TARGET_FUNCTION_INCOMING_ARG:          Register Arguments. (line   65)
48487* TARGET_FUNCTION_OK_FOR_SIBCALL:        Tail Calls.         (line    6)
48488* TARGET_FUNCTION_VALUE:                 Scalar Return.      (line    9)
48489* TARGET_FUNCTION_VALUE_REGNO_P:         Scalar Return.      (line   96)
48490* TARGET_GENERATE_VERSION_DISPATCHER_BODY: Misc.             (line  652)
48491* TARGET_GET_DRAP_RTX:                   Misc.               (line  974)
48492* TARGET_GET_FUNCTION_VERSIONS_DISPATCHER: Misc.             (line  645)
48493* TARGET_GET_PCH_VALIDITY:               PCH Target.         (line    6)
48494* TARGET_GET_RAW_ARG_MODE:               Aggregate Return.   (line   82)
48495* TARGET_GET_RAW_RESULT_MODE:            Aggregate Return.   (line   76)
48496* TARGET_GIMPLIFY_VA_ARG_EXPR:           Register Arguments. (line  297)
48497* TARGET_HANDLE_C_OPTION:                Run-time Target.    (line   73)
48498* TARGET_HANDLE_OPTION:                  Run-time Target.    (line   59)
48499* TARGET_HARD_REGNO_SCRATCH_OK:          Values in Registers.
48500                                                             (line  141)
48501* TARGET_HAS_SINCOS:                     Library Calls.      (line   78)
48502* TARGET_HAVE_CONDITIONAL_EXECUTION:     Misc.               (line  812)
48503* TARGET_HAVE_CTORS_DTORS:               Macros for Initialization.
48504                                                             (line   63)
48505* TARGET_HAVE_NAMED_SECTIONS:            File Framework.     (line  139)
48506* TARGET_HAVE_SRODATA_SECTION:           Sections.           (line  297)
48507* TARGET_HAVE_SWITCHABLE_BSS_SECTIONS:   File Framework.     (line  144)
48508* TARGET_HAVE_TLS:                       Sections.           (line  317)
48509* TARGET_INIT_BUILTINS:                  Misc.               (line  579)
48510* TARGET_INIT_DWARF_REG_SIZES_EXTRA:     Exception Region Output.
48511                                                             (line  113)
48512* TARGET_INIT_LIBFUNCS:                  Library Calls.      (line   15)
48513* TARGET_INSERT_ATTRIBUTES:              Target Attributes.  (line   80)
48514* TARGET_INSTANTIATE_DECLS:              Storage Layout.     (line  532)
48515* TARGET_INVALID_ARG_FOR_UNPROTOTYPED_FN: Misc.              (line  898)
48516* TARGET_INVALID_BINARY_OP:              Misc.               (line  917)
48517* TARGET_INVALID_CONVERSION:             Misc.               (line  904)
48518* TARGET_INVALID_PARAMETER_TYPE:         Misc.               (line  923)
48519* TARGET_INVALID_RETURN_TYPE:            Misc.               (line  930)
48520* TARGET_INVALID_UNARY_OP:               Misc.               (line  910)
48521* TARGET_INVALID_WITHIN_DOLOOP:          Misc.               (line  659)
48522* TARGET_IN_SMALL_DATA_P:                Sections.           (line  293)
48523* TARGET_LEGITIMATE_ADDRESS_P:           Addressing Modes.   (line   48)
48524* TARGET_LEGITIMATE_COMBINED_INSN:       Misc.               (line  673)
48525* TARGET_LEGITIMATE_CONSTANT_P:          Addressing Modes.   (line  213)
48526* TARGET_LEGITIMIZE_ADDRESS:             Addressing Modes.   (line  129)
48527* TARGET_LIBCALL_VALUE:                  Scalar Return.      (line   65)
48528* TARGET_LIBFUNC_GNU_PREFIX:             Library Calls.      (line   24)
48529* TARGET_LIBGCC_CMP_RETURN_MODE:         Storage Layout.     (line  455)
48530* TARGET_LIBGCC_SDATA_SECTION:           Sections.           (line  131)
48531* TARGET_LIBGCC_SHIFT_COUNT_MODE:        Storage Layout.     (line  461)
48532* TARGET_LIB_INT_CMP_BIASED:             Library Calls.      (line   42)
48533* TARGET_LOOP_UNROLL_ADJUST:             Misc.               (line  818)
48534* TARGET_LRA_P:                          Register Classes.   (line  548)
48535* TARGET_MACHINE_DEPENDENT_REORG:        Misc.               (line  564)
48536* TARGET_MANGLE_ASSEMBLER_NAME:          Label Output.       (line  321)
48537* TARGET_MANGLE_DECL_ASSEMBLER_NAME:     Sections.           (line  241)
48538* TARGET_MANGLE_TYPE:                    Storage Layout.     (line  536)
48539* TARGET_MAX_ANCHOR_OFFSET:              Anchored Addresses. (line   38)
48540* TARGET_MD_ASM_CLOBBERS:                Misc.               (line  483)
48541* TARGET_MEMBER_TYPE_FORCES_BLK:         Storage Layout.     (line  407)
48542* TARGET_MEMMODEL_CHECK:                 Misc.               (line 1013)
48543* TARGET_MEMORY_MOVE_COST:               Costs.              (line   79)
48544* TARGET_MEM_CONSTRAINT:                 Addressing Modes.   (line  107)
48545* TARGET_MEM_REF:                        Storage References. (line    6)
48546* TARGET_MERGE_DECL_ATTRIBUTES:          Target Attributes.  (line   45)
48547* TARGET_MERGE_TYPE_ATTRIBUTES:          Target Attributes.  (line   37)
48548* TARGET_MIN_ANCHOR_OFFSET:              Anchored Addresses. (line   32)
48549* TARGET_MIN_DIVISIONS_FOR_RECIP_MUL:    Misc.               (line   90)
48550* TARGET_MODE_DEPENDENT_ADDRESS_P:       Addressing Modes.   (line  196)
48551* TARGET_MODE_REP_EXTENDED:              Misc.               (line  175)
48552* TARGET_MS_BITFIELD_LAYOUT_P:           Storage Layout.     (line  490)
48553* TARGET_MUST_PASS_IN_STACK:             Register Arguments. (line   58)
48554* 'TARGET_MUST_PASS_IN_STACK', and 'TARGET_FUNCTION_ARG': Register Arguments.
48555                                                             (line   50)
48556* TARGET_NARROW_VOLATILE_BITFIELD:       Storage Layout.     (line  400)
48557* TARGET_N_FORMAT_TYPES:                 Misc.               (line  870)
48558* TARGET_OBJC_CONSTRUCT_STRING_OBJECT:   Run-time Target.    (line   88)
48559* TARGET_OBJC_DECLARE_CLASS_DEFINITION:  Run-time Target.    (line  109)
48560* TARGET_OBJC_DECLARE_UNRESOLVED_CLASS_REFERENCE: Run-time Target.
48561                                                             (line  104)
48562* TARGET_OBJECT_SUFFIX:                  Misc.               (line  747)
48563* TARGET_OBJFMT_CPP_BUILTINS:            Run-time Target.    (line   45)
48564* TARGET_OPTF:                           Misc.               (line  852)
48565* TARGET_OPTION_DEFAULT_PARAMS:          Run-time Target.    (line  160)
48566* TARGET_OPTION_FUNCTION_VERSIONS:       Target Attributes.  (line  149)
48567* TARGET_OPTION_INIT_STRUCT:             Run-time Target.    (line  156)
48568* TARGET_OPTION_OPTIMIZATION_TABLE:      Run-time Target.    (line  142)
48569* TARGET_OPTION_OVERRIDE:                Target Attributes.  (line  136)
48570* TARGET_OPTION_PRAGMA_PARSE:            Target Attributes.  (line  129)
48571* TARGET_OPTION_PRINT:                   Target Attributes.  (line  123)
48572* TARGET_OPTION_RESTORE:                 Target Attributes.  (line  117)
48573* TARGET_OPTION_SAVE:                    Target Attributes.  (line  112)
48574* TARGET_OPTION_VALID_ATTRIBUTE_P:       Target Attributes.  (line  100)
48575* TARGET_OS_CPP_BUILTINS:                Run-time Target.    (line   41)
48576* TARGET_OVERRIDES_FORMAT_ATTRIBUTES:    Misc.               (line  874)
48577* TARGET_OVERRIDES_FORMAT_ATTRIBUTES_COUNT: Misc.            (line  880)
48578* TARGET_OVERRIDES_FORMAT_INIT:          Misc.               (line  884)
48579* TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE:  Run-time Target.    (line  126)
48580* TARGET_PASS_BY_REFERENCE:              Register Arguments. (line  101)
48581* TARGET_PCH_VALID_P:                    PCH Target.         (line   11)
48582* TARGET_POSIX_IO:                       Misc.               (line  508)
48583* TARGET_PREFERRED_OUTPUT_RELOAD_CLASS:  Register Classes.   (line  284)
48584* TARGET_PREFERRED_RELOAD_CLASS:         Register Classes.   (line  213)
48585* TARGET_PREFERRED_RENAME_CLASS:         Register Classes.   (line  201)
48586* TARGET_PREPARE_PCH_SAVE:               PCH Target.         (line   34)
48587* TARGET_PRETEND_OUTGOING_VARARGS_NAMED: Varargs.            (line  123)
48588* TARGET_PROFILE_BEFORE_PROLOGUE:        Sections.           (line  301)
48589* TARGET_PROMOTED_TYPE:                  Misc.               (line  937)
48590* TARGET_PROMOTE_FUNCTION_MODE:          Storage Layout.     (line  114)
48591* TARGET_PROMOTE_PROTOTYPES:             Stack Arguments.    (line   10)
48592* TARGET_PTRMEMFUNC_VBIT_LOCATION:       Type Layout.        (line  293)
48593* TARGET_REF_MAY_ALIAS_ERRNO:            Register Arguments. (line  308)
48594* TARGET_REGISTER_MOVE_COST:             Costs.              (line   31)
48595* TARGET_REGISTER_PRIORITY:              Register Classes.   (line  553)
48596* TARGET_RELAXED_ORDERING:               Misc.               (line  889)
48597* TARGET_RESOLVE_OVERLOADED_BUILTIN:     Misc.               (line  616)
48598* TARGET_RETURN_IN_MEMORY:               Aggregate Return.   (line   15)
48599* TARGET_RETURN_IN_MSB:                  Scalar Return.      (line  117)
48600* TARGET_RETURN_POPS_ARGS:               Stack Arguments.    (line   92)
48601* TARGET_RTX_COSTS:                      Costs.              (line  269)
48602* TARGET_SCALAR_MODE_SUPPORTED_P:        Register Arguments. (line  315)
48603* TARGET_SCHED_ADJUST_COST:              Scheduling.         (line   35)
48604* TARGET_SCHED_ADJUST_PRIORITY:          Scheduling.         (line   50)
48605* TARGET_SCHED_ALLOC_SCHED_CONTEXT:      Scheduling.         (line  272)
48606* TARGET_SCHED_CLEAR_SCHED_CONTEXT:      Scheduling.         (line  287)
48607* TARGET_SCHED_DEPENDENCIES_EVALUATION_HOOK: Scheduling.     (line   87)
48608* TARGET_SCHED_DFA_NEW_CYCLE:            Scheduling.         (line  234)
48609* TARGET_SCHED_DFA_POST_ADVANCE_CYCLE:   Scheduling.         (line  158)
48610* TARGET_SCHED_DFA_POST_CYCLE_INSN:      Scheduling.         (line  142)
48611* TARGET_SCHED_DFA_PRE_ADVANCE_CYCLE:    Scheduling.         (line  151)
48612* TARGET_SCHED_DFA_PRE_CYCLE_INSN:       Scheduling.         (line  130)
48613* TARGET_SCHED_DISPATCH:                 Scheduling.         (line  353)
48614* TARGET_SCHED_DISPATCH_DO:              Scheduling.         (line  358)
48615* TARGET_SCHED_EXPOSED_PIPELINE:         Scheduling.         (line  362)
48616* TARGET_SCHED_FINISH:                   Scheduling.         (line  108)
48617* TARGET_SCHED_FINISH_GLOBAL:            Scheduling.         (line  123)
48618* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_BACKTRACK: Scheduling.  (line  214)
48619* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_BEGIN: Scheduling.      (line  203)
48620* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD: Scheduling.
48621                                                             (line  165)
48622* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD: Scheduling.
48623                                                             (line  193)
48624* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD_SPEC: Scheduling.
48625                                                             (line  324)
48626* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_END: Scheduling.        (line  219)
48627* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_FINI: Scheduling.       (line  229)
48628* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_INIT: Scheduling.       (line  224)
48629* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_ISSUE: Scheduling.      (line  208)
48630* TARGET_SCHED_FREE_SCHED_CONTEXT:       Scheduling.         (line  291)
48631* TARGET_SCHED_GEN_SPEC_CHECK:           Scheduling.         (line  312)
48632* TARGET_SCHED_H_I_D_EXTENDED:           Scheduling.         (line  267)
48633* TARGET_SCHED_INIT:                     Scheduling.         (line   97)
48634* TARGET_SCHED_INIT_DFA_POST_CYCLE_INSN: Scheduling.         (line  147)
48635* TARGET_SCHED_INIT_DFA_PRE_CYCLE_INSN:  Scheduling.         (line  139)
48636* TARGET_SCHED_INIT_GLOBAL:              Scheduling.         (line  115)
48637* TARGET_SCHED_INIT_SCHED_CONTEXT:       Scheduling.         (line  276)
48638* TARGET_SCHED_ISSUE_RATE:               Scheduling.         (line   11)
48639* TARGET_SCHED_IS_COSTLY_DEPENDENCE:     Scheduling.         (line  245)
48640* TARGET_SCHED_NEEDS_BLOCK_P:            Scheduling.         (line  306)
48641* TARGET_SCHED_REASSOCIATION_WIDTH:      Scheduling.         (line  367)
48642* TARGET_SCHED_REORDER:                  Scheduling.         (line   58)
48643* TARGET_SCHED_REORDER2:                 Scheduling.         (line   75)
48644* TARGET_SCHED_SET_SCHED_CONTEXT:        Scheduling.         (line  283)
48645* TARGET_SCHED_SET_SCHED_FLAGS:          Scheduling.         (line  337)
48646* TARGET_SCHED_SMS_RES_MII:              Scheduling.         (line  344)
48647* TARGET_SCHED_SPECULATE_INSN:           Scheduling.         (line  294)
48648* TARGET_SCHED_VARIABLE_ISSUE:           Scheduling.         (line   22)
48649* TARGET_SECONDARY_RELOAD:               Register Classes.   (line  312)
48650* TARGET_SECTION_TYPE_FLAGS:             File Framework.     (line  149)
48651* TARGET_SETUP_INCOMING_VARARGS:         Varargs.            (line   71)
48652* TARGET_SET_CURRENT_FUNCTION:           Misc.               (line  729)
48653* TARGET_SET_DEFAULT_TYPE_ATTRIBUTES:    Target Attributes.  (line   33)
48654* TARGET_SET_UP_BY_PROLOGUE:             Tail Calls.         (line   29)
48655* TARGET_SHIFT_TRUNCATION_MASK:          Misc.               (line  138)
48656* TARGET_SMALL_REGISTER_CLASSES_FOR_MODE_P: Register Arguments.
48657                                                             (line  357)
48658* TARGET_SPILL_CLASS:                    Register Classes.   (line  571)
48659* TARGET_SPLIT_COMPLEX_ARG:              Register Arguments. (line  259)
48660* TARGET_STACK_PROTECT_FAIL:             Stack Smashing Protection.
48661                                                             (line   16)
48662* TARGET_STACK_PROTECT_GUARD:            Stack Smashing Protection.
48663                                                             (line    6)
48664* TARGET_STATIC_CHAIN:                   Frame Registers.    (line   90)
48665* TARGET_STRICT_ARGUMENT_NAMING:         Varargs.            (line  107)
48666* TARGET_STRING_OBJECT_REF_TYPE_P:       Run-time Target.    (line  114)
48667* TARGET_STRIP_NAME_ENCODING:            Sections.           (line  288)
48668* TARGET_STRUCT_VALUE_RTX:               Aggregate Return.   (line   44)
48669* TARGET_SUPPORTS_SPLIT_STACK:           Stack Smashing Protection.
48670                                                             (line   25)
48671* TARGET_SUPPORTS_WEAK:                  Label Output.       (line  237)
48672* TARGET_TERMINATE_DW2_EH_FRAME_INFO:    Exception Region Output.
48673                                                             (line   98)
48674* TARGET_TRAMPOLINE_ADJUST_ADDRESS:      Trampolines.        (line   74)
48675* TARGET_TRAMPOLINE_INIT:                Trampolines.        (line   54)
48676* TARGET_UNSPEC_MAY_TRAP_P:              Misc.               (line  720)
48677* TARGET_UNWIND_TABLES_DEFAULT:          Exception Region Output.
48678                                                             (line   72)
48679* TARGET_UNWIND_WORD_MODE:               Storage Layout.     (line  467)
48680* TARGET_UPDATE_STACK_BOUNDARY:          Misc.               (line  970)
48681* TARGET_USES_WEAK_UNWIND_INFO:          Exception Handling. (line  123)
48682* TARGET_USE_ANCHORS_FOR_SYMBOL_P:       Anchored Addresses. (line   53)
48683* TARGET_USE_BLOCKS_FOR_CONSTANT_P:      Addressing Modes.   (line  248)
48684* TARGET_USE_BLOCKS_FOR_DECL_P:          Addressing Modes.   (line  255)
48685* TARGET_USE_JCR_SECTION:                Misc.               (line  952)
48686* TARGET_VALID_DLLIMPORT_ATTRIBUTE_P:    Target Attributes.  (line   66)
48687* TARGET_VALID_POINTER_MODE:             Register Arguments. (line  303)
48688* TARGET_VECTORIZE_ADD_STMT_COST:        Addressing Modes.   (line  367)
48689* TARGET_VECTORIZE_AUTOVECTORIZE_VECTOR_SIZES: Addressing Modes.
48690                                                             (line  350)
48691* TARGET_VECTORIZE_BUILTIN_CONVERSION:   Addressing Modes.   (line  312)
48692* TARGET_VECTORIZE_BUILTIN_GATHER:       Addressing Modes.   (line  398)
48693* TARGET_VECTORIZE_BUILTIN_MASK_FOR_LOAD: Addressing Modes.  (line  271)
48694* TARGET_VECTORIZE_BUILTIN_TM_LOAD:      Addressing Modes.   (line  390)
48695* TARGET_VECTORIZE_BUILTIN_TM_STORE:     Addressing Modes.   (line  394)
48696* TARGET_VECTORIZE_BUILTIN_VECTORIZATION_COST: Addressing Modes.
48697                                                             (line  297)
48698* TARGET_VECTORIZE_BUILTIN_VECTORIZED_FUNCTION: Addressing Modes.
48699                                                             (line  324)
48700* TARGET_VECTORIZE_DESTROY_COST_DATA:    Addressing Modes.   (line  385)
48701* TARGET_VECTORIZE_FINISH_COST:          Addressing Modes.   (line  378)
48702* TARGET_VECTORIZE_INIT_COST:            Addressing Modes.   (line  358)
48703* TARGET_VECTORIZE_PREFERRED_SIMD_MODE:  Addressing Modes.   (line  343)
48704* TARGET_VECTORIZE_SUPPORT_VECTOR_MISALIGNMENT: Addressing Modes.
48705                                                             (line  333)
48706* TARGET_VECTORIZE_VECTOR_ALIGNMENT_REACHABLE: Addressing Modes.
48707                                                             (line  303)
48708* TARGET_VECTORIZE_VEC_PERM_CONST_OK:    Addressing Modes.   (line  308)
48709* TARGET_VECTOR_ALIGNMENT:               Storage Layout.     (line  260)
48710* TARGET_VECTOR_MODE_SUPPORTED_P:        Register Arguments. (line  327)
48711* TARGET_VTABLE_DATA_ENTRY_DISTANCE:     Type Layout.        (line  346)
48712* TARGET_VTABLE_ENTRY_ALIGN:             Type Layout.        (line  340)
48713* TARGET_VTABLE_USES_DESCRIPTORS:        Type Layout.        (line  329)
48714* TARGET_WANT_DEBUG_PUB_SECTIONS:        SDB and DWARF.      (line   55)
48715* TARGET_WARN_FUNC_RETURN:               Tail Calls.         (line   35)
48716* TARGET_WEAK_NOT_IN_ARCHIVE_TOC:        Label Output.       (line  273)
48717* TCmode:                                Machine Modes.      (line  196)
48718* TDmode:                                Machine Modes.      (line   94)
48719* TEMPLATE_DECL:                         Declarations.       (line    6)
48720* Temporaries:                           Temporaries.        (line    6)
48721* termination routines:                  Initialization.     (line    6)
48722* testing constraints:                   C Constraint Interface.
48723                                                             (line    6)
48724* TEXT_SECTION_ASM_OP:                   Sections.           (line   37)
48725* TFmode:                                Machine Modes.      (line   98)
48726* TF_SIZE:                               Type Layout.        (line  138)
48727* THEN_CLAUSE:                           Statements for C++. (line    6)
48728* THREAD_MODEL_SPEC:                     Driver.             (line  162)
48729* THROW_EXPR:                            Unary and Binary Expressions.
48730                                                             (line    6)
48731* THUNK_DECL:                            Declarations.       (line    6)
48732* THUNK_DELTA:                           Declarations.       (line    6)
48733* TImode:                                Machine Modes.      (line   48)
48734* 'TImode', in 'insn':                   Insns.              (line  275)
48735* TLS_COMMON_ASM_OP:                     Sections.           (line   80)
48736* TLS_SECTION_ASM_FLAG:                  Sections.           (line   85)
48737* 'tm.h' macros:                         Target Macros.      (line    6)
48738* TQFmode:                               Machine Modes.      (line   62)
48739* TQmode:                                Machine Modes.      (line  119)
48740* trampolines for nested functions:      Trampolines.        (line    6)
48741* TRAMPOLINE_ALIGNMENT:                  Trampolines.        (line   48)
48742* TRAMPOLINE_SECTION:                    Trampolines.        (line   39)
48743* TRAMPOLINE_SIZE:                       Trampolines.        (line   44)
48744* TRANSFER_FROM_TRAMPOLINE:              Trampolines.        (line  110)
48745* 'trap' instruction pattern:            Standard Names.     (line 1529)
48746* tree:                                  Tree overview.      (line    6)
48747* tree <1>:                              Macros and Functions.
48748                                                             (line    6)
48749* Tree SSA:                              Tree SSA.           (line    6)
48750* TREE_CHAIN:                            Macros and Functions.
48751                                                             (line    6)
48752* TREE_CODE:                             Tree overview.      (line    6)
48753* tree_int_cst_equal:                    Constant expressions.
48754                                                             (line    6)
48755* TREE_INT_CST_HIGH:                     Constant expressions.
48756                                                             (line    6)
48757* TREE_INT_CST_LOW:                      Constant expressions.
48758                                                             (line    6)
48759* tree_int_cst_lt:                       Constant expressions.
48760                                                             (line    6)
48761* TREE_LIST:                             Containers.         (line    6)
48762* TREE_OPERAND:                          Expression trees.   (line    6)
48763* TREE_PUBLIC:                           Function Basics.    (line    6)
48764* TREE_PUBLIC <1>:                       Function Properties.
48765                                                             (line   28)
48766* TREE_PURPOSE:                          Containers.         (line    6)
48767* TREE_READONLY:                         Function Properties.
48768                                                             (line   37)
48769* tree_size:                             Macros and Functions.
48770                                                             (line   13)
48771* TREE_STATIC:                           Function Properties.
48772                                                             (line   31)
48773* TREE_STRING_LENGTH:                    Constant expressions.
48774                                                             (line    6)
48775* TREE_STRING_POINTER:                   Constant expressions.
48776                                                             (line    6)
48777* TREE_THIS_VOLATILE:                    Function Properties.
48778                                                             (line   34)
48779* TREE_TYPE:                             Macros and Functions.
48780                                                             (line    6)
48781* TREE_TYPE <1>:                         Types.              (line    6)
48782* TREE_TYPE <2>:                         Working with declarations.
48783                                                             (line   11)
48784* TREE_TYPE <3>:                         Expression trees.   (line    6)
48785* TREE_TYPE <4>:                         Expression trees.   (line   17)
48786* TREE_TYPE <5>:                         Function Basics.    (line   47)
48787* TREE_TYPE <6>:                         Types for C++.      (line    6)
48788* TREE_VALUE:                            Containers.         (line    6)
48789* TREE_VEC:                              Containers.         (line    6)
48790* TREE_VEC_ELT:                          Containers.         (line    6)
48791* TREE_VEC_LENGTH:                       Containers.         (line    6)
48792* TRULY_NOOP_TRUNCATION:                 Misc.               (line  162)
48793* truncate:                              Conversions.        (line   38)
48794* 'truncMN2' instruction pattern:        Standard Names.     (line  897)
48795* TRUNC_DIV_EXPR:                        Unary and Binary Expressions.
48796                                                             (line    6)
48797* TRUNC_MOD_EXPR:                        Unary and Binary Expressions.
48798                                                             (line    6)
48799* TRUTH_ANDIF_EXPR:                      Unary and Binary Expressions.
48800                                                             (line    6)
48801* TRUTH_AND_EXPR:                        Unary and Binary Expressions.
48802                                                             (line    6)
48803* TRUTH_NOT_EXPR:                        Unary and Binary Expressions.
48804                                                             (line    6)
48805* TRUTH_ORIF_EXPR:                       Unary and Binary Expressions.
48806                                                             (line    6)
48807* TRUTH_OR_EXPR:                         Unary and Binary Expressions.
48808                                                             (line    6)
48809* TRUTH_XOR_EXPR:                        Unary and Binary Expressions.
48810                                                             (line    6)
48811* TRY_BLOCK:                             Statements for C++. (line    6)
48812* TRY_HANDLERS:                          Statements for C++. (line    6)
48813* TRY_STMTS:                             Statements for C++. (line    6)
48814* Tuple specific accessors:              Tuple specific accessors.
48815                                                             (line    6)
48816* tuples:                                Tuple representation.
48817                                                             (line    6)
48818* type:                                  Types.              (line    6)
48819* type declaration:                      Declarations.       (line    6)
48820* TYPENAME_TYPE:                         Types for C++.      (line    6)
48821* TYPENAME_TYPE_FULLNAME:                Types.              (line    6)
48822* TYPENAME_TYPE_FULLNAME <1>:            Types for C++.      (line    6)
48823* TYPEOF_TYPE:                           Types for C++.      (line    6)
48824* TYPE_ALIGN:                            Types.              (line    6)
48825* TYPE_ALIGN <1>:                        Types.              (line   30)
48826* TYPE_ALIGN <2>:                        Types for C++.      (line    6)
48827* TYPE_ALIGN <3>:                        Types for C++.      (line   44)
48828* TYPE_ARG_TYPES:                        Types.              (line    6)
48829* TYPE_ARG_TYPES <1>:                    Types for C++.      (line    6)
48830* TYPE_ASM_OP:                           Label Output.       (line   76)
48831* TYPE_ATTRIBUTES:                       Attributes.         (line   24)
48832* TYPE_BINFO:                            Classes.            (line    6)
48833* TYPE_BUILT_IN:                         Types for C++.      (line   66)
48834* TYPE_CANONICAL:                        Types.              (line    6)
48835* TYPE_CANONICAL <1>:                    Types.              (line   41)
48836* TYPE_CONTEXT:                          Types.              (line    6)
48837* TYPE_CONTEXT <1>:                      Types for C++.      (line    6)
48838* TYPE_DECL:                             Declarations.       (line    6)
48839* TYPE_FIELDS:                           Types.              (line    6)
48840* TYPE_FIELDS <1>:                       Types for C++.      (line    6)
48841* TYPE_FIELDS <2>:                       Classes.            (line    6)
48842* TYPE_HAS_ARRAY_NEW_OPERATOR:           Classes.            (line   96)
48843* TYPE_HAS_DEFAULT_CONSTRUCTOR:          Classes.            (line   81)
48844* TYPE_HAS_MUTABLE_P:                    Classes.            (line   86)
48845* TYPE_HAS_NEW_OPERATOR:                 Classes.            (line   93)
48846* TYPE_MAIN_VARIANT:                     Types.              (line    6)
48847* TYPE_MAIN_VARIANT <1>:                 Types.              (line   19)
48848* TYPE_MAIN_VARIANT <2>:                 Types for C++.      (line    6)
48849* TYPE_MAX_VALUE:                        Types.              (line    6)
48850* TYPE_METHODS:                          Classes.            (line    6)
48851* TYPE_METHOD_BASETYPE:                  Types.              (line    6)
48852* TYPE_METHOD_BASETYPE <1>:              Types for C++.      (line    6)
48853* TYPE_MIN_VALUE:                        Types.              (line    6)
48854* TYPE_NAME:                             Types.              (line    6)
48855* TYPE_NAME <1>:                         Types.              (line   33)
48856* TYPE_NAME <2>:                         Types for C++.      (line    6)
48857* TYPE_NAME <3>:                         Types for C++.      (line   47)
48858* TYPE_NOTHROW_P:                        Functions for C++.  (line  154)
48859* TYPE_OFFSET_BASETYPE:                  Types.              (line    6)
48860* TYPE_OFFSET_BASETYPE <1>:              Types for C++.      (line    6)
48861* TYPE_OPERAND_FMT:                      Label Output.       (line   87)
48862* TYPE_OVERLOADS_ARRAY_REF:              Classes.            (line  104)
48863* TYPE_OVERLOADS_ARROW:                  Classes.            (line  107)
48864* TYPE_OVERLOADS_CALL_EXPR:              Classes.            (line  100)
48865* TYPE_POLYMORPHIC_P:                    Classes.            (line   77)
48866* TYPE_PRECISION:                        Types.              (line    6)
48867* TYPE_PRECISION <1>:                    Types for C++.      (line    6)
48868* TYPE_PTRDATAMEM_P:                     Types for C++.      (line    6)
48869* TYPE_PTRDATAMEM_P <1>:                 Types for C++.      (line   69)
48870* TYPE_PTRFN_P:                          Types for C++.      (line   76)
48871* TYPE_PTROBV_P:                         Types for C++.      (line    6)
48872* TYPE_PTROB_P:                          Types for C++.      (line   79)
48873* TYPE_PTR_P:                            Types for C++.      (line   72)
48874* TYPE_QUAL_CONST:                       Types.              (line    6)
48875* TYPE_QUAL_CONST <1>:                   Types for C++.      (line    6)
48876* TYPE_QUAL_RESTRICT:                    Types.              (line    6)
48877* TYPE_QUAL_RESTRICT <1>:                Types for C++.      (line    6)
48878* TYPE_QUAL_VOLATILE:                    Types.              (line    6)
48879* TYPE_QUAL_VOLATILE <1>:                Types for C++.      (line    6)
48880* TYPE_RAISES_EXCEPTIONS:                Functions for C++.  (line  149)
48881* TYPE_SIZE:                             Types.              (line    6)
48882* TYPE_SIZE <1>:                         Types.              (line   25)
48883* TYPE_SIZE <2>:                         Types for C++.      (line    6)
48884* TYPE_SIZE <3>:                         Types for C++.      (line   39)
48885* TYPE_STRUCTURAL_EQUALITY_P:            Types.              (line    6)
48886* TYPE_STRUCTURAL_EQUALITY_P <1>:        Types.              (line   77)
48887* TYPE_UNQUALIFIED:                      Types.              (line    6)
48888* TYPE_UNQUALIFIED <1>:                  Types for C++.      (line    6)
48889* TYPE_VFIELD:                           Classes.            (line    6)
48890* UDAmode:                               Machine Modes.      (line  167)
48891* udiv:                                  Arithmetic.         (line  131)
48892* 'udivM3' instruction pattern:          Standard Names.     (line  266)
48893* 'udivmodM4' instruction pattern:       Standard Names.     (line  501)
48894* 'udot_prodM' instruction pattern:      Standard Names.     (line  332)
48895* UDQmode:                               Machine Modes.      (line  135)
48896* UHAmode:                               Machine Modes.      (line  159)
48897* UHQmode:                               Machine Modes.      (line  127)
48898* UINT16_TYPE:                           Type Layout.        (line  257)
48899* UINT32_TYPE:                           Type Layout.        (line  258)
48900* UINT64_TYPE:                           Type Layout.        (line  259)
48901* UINT8_TYPE:                            Type Layout.        (line  256)
48902* UINTMAX_TYPE:                          Type Layout.        (line  240)
48903* UINTPTR_TYPE:                          Type Layout.        (line  277)
48904* UINT_FAST16_TYPE:                      Type Layout.        (line  273)
48905* UINT_FAST32_TYPE:                      Type Layout.        (line  274)
48906* UINT_FAST64_TYPE:                      Type Layout.        (line  275)
48907* UINT_FAST8_TYPE:                       Type Layout.        (line  272)
48908* UINT_LEAST16_TYPE:                     Type Layout.        (line  265)
48909* UINT_LEAST32_TYPE:                     Type Layout.        (line  266)
48910* UINT_LEAST64_TYPE:                     Type Layout.        (line  267)
48911* UINT_LEAST8_TYPE:                      Type Layout.        (line  264)
48912* 'umaddMN4' instruction pattern:        Standard Names.     (line  448)
48913* umax:                                  Arithmetic.         (line  150)
48914* 'umaxM3' instruction pattern:          Standard Names.     (line  266)
48915* umin:                                  Arithmetic.         (line  150)
48916* 'uminM3' instruction pattern:          Standard Names.     (line  266)
48917* umod:                                  Arithmetic.         (line  137)
48918* 'umodM3' instruction pattern:          Standard Names.     (line  266)
48919* 'umsubMN4' instruction pattern:        Standard Names.     (line  472)
48920* 'umulhisi3' instruction pattern:       Standard Names.     (line  420)
48921* 'umulM3_highpart' instruction pattern: Standard Names.     (line  434)
48922* 'umulqihi3' instruction pattern:       Standard Names.     (line  420)
48923* 'umulsidi3' instruction pattern:       Standard Names.     (line  420)
48924* unchanging:                            Flags.              (line  296)
48925* 'unchanging', in 'call_insn':          Flags.              (line   19)
48926* 'unchanging', in 'jump_insn', 'call_insn' and 'insn': Flags.
48927                                                             (line   39)
48928* 'unchanging', in 'mem':                Flags.              (line  134)
48929* 'unchanging', in 'subreg':             Flags.              (line  170)
48930* 'unchanging', in 'subreg' <1>:         Flags.              (line  180)
48931* 'unchanging', in 'symbol_ref':         Flags.              (line   10)
48932* UNEQ_EXPR:                             Unary and Binary Expressions.
48933                                                             (line    6)
48934* UNGE_EXPR:                             Unary and Binary Expressions.
48935                                                             (line    6)
48936* UNGT_EXPR:                             Unary and Binary Expressions.
48937                                                             (line    6)
48938* unions, returning:                     Interface.          (line   10)
48939* UNION_TYPE:                            Types.              (line    6)
48940* UNION_TYPE <1>:                        Classes.            (line    6)
48941* UNITS_PER_WORD:                        Storage Layout.     (line   65)
48942* UNKNOWN_TYPE:                          Types.              (line    6)
48943* UNKNOWN_TYPE <1>:                      Types for C++.      (line    6)
48944* UNLE_EXPR:                             Unary and Binary Expressions.
48945                                                             (line    6)
48946* UNLIKELY_EXECUTED_TEXT_SECTION_NAME:   Sections.           (line   48)
48947* UNLT_EXPR:                             Unary and Binary Expressions.
48948                                                             (line    6)
48949* UNORDERED_EXPR:                        Unary and Binary Expressions.
48950                                                             (line    6)
48951* unshare_all_rtl:                       Sharing.            (line   58)
48952* unsigned division:                     Arithmetic.         (line  131)
48953* unsigned division with unsigned saturation: Arithmetic.    (line  131)
48954* unsigned greater than:                 Comparisons.        (line   64)
48955* unsigned greater than <1>:             Comparisons.        (line   72)
48956* unsigned less than:                    Comparisons.        (line   68)
48957* unsigned less than <1>:                Comparisons.        (line   76)
48958* unsigned minimum and maximum:          Arithmetic.         (line  150)
48959* unsigned_fix:                          Conversions.        (line   77)
48960* unsigned_float:                        Conversions.        (line   62)
48961* unsigned_fract_convert:                Conversions.        (line   97)
48962* unsigned_sat_fract:                    Conversions.        (line  103)
48963* unspec:                                Side Effects.       (line  291)
48964* unspec <1>:                            Constant Definitions.
48965                                                             (line  111)
48966* unspec_volatile:                       Side Effects.       (line  291)
48967* unspec_volatile <1>:                   Constant Definitions.
48968                                                             (line   99)
48969* 'untyped_call' instruction pattern:    Standard Names.     (line 1139)
48970* 'untyped_return' instruction pattern:  Standard Names.     (line 1202)
48971* UPDATE_PATH_HOST_CANONICALIZE (PATH):  Filesystem.         (line   59)
48972* update_ssa:                            SSA.                (line   76)
48973* update_stmt:                           Manipulating GIMPLE statements.
48974                                                             (line  140)
48975* update_stmt <1>:                       SSA Operands.       (line    6)
48976* update_stmt_if_modified:               Manipulating GIMPLE statements.
48977                                                             (line  143)
48978* UQQmode:                               Machine Modes.      (line  123)
48979* 'usaddM3' instruction pattern:         Standard Names.     (line  266)
48980* USAmode:                               Machine Modes.      (line  163)
48981* 'usashlM3' instruction pattern:        Standard Names.     (line  504)
48982* 'usdivM3' instruction pattern:         Standard Names.     (line  266)
48983* use:                                   Side Effects.       (line  168)
48984* used:                                  Flags.              (line  314)
48985* 'used', in 'symbol_ref':               Flags.              (line  197)
48986* user:                                  GTY Options.        (line  314)
48987* user gc:                               User GC.            (line    6)
48988* USER_LABEL_PREFIX:                     Instruction Output. (line  152)
48989* USE_C_ALLOCA:                          Host Misc.          (line   19)
48990* USE_LD_AS_NEEDED:                      Driver.             (line  135)
48991* USE_LOAD_POST_DECREMENT:               Costs.              (line  225)
48992* USE_LOAD_POST_INCREMENT:               Costs.              (line  220)
48993* USE_LOAD_PRE_DECREMENT:                Costs.              (line  235)
48994* USE_LOAD_PRE_INCREMENT:                Costs.              (line  230)
48995* use_param:                             GTY Options.        (line  115)
48996* use_paramN:                            GTY Options.        (line  134)
48997* use_params:                            GTY Options.        (line  143)
48998* USE_SELECT_SECTION_FOR_FUNCTIONS:      Sections.           (line  193)
48999* USE_STORE_POST_DECREMENT:              Costs.              (line  245)
49000* USE_STORE_POST_INCREMENT:              Costs.              (line  240)
49001* USE_STORE_PRE_DECREMENT:               Costs.              (line  255)
49002* USE_STORE_PRE_INCREMENT:               Costs.              (line  250)
49003* USING_STMT:                            Statements for C++. (line    6)
49004* 'usmaddMN4' instruction pattern:       Standard Names.     (line  456)
49005* 'usmsubMN4' instruction pattern:       Standard Names.     (line  480)
49006* 'usmulhisi3' instruction pattern:      Standard Names.     (line  424)
49007* 'usmulM3' instruction pattern:         Standard Names.     (line  266)
49008* 'usmulqihi3' instruction pattern:      Standard Names.     (line  424)
49009* 'usmulsidi3' instruction pattern:      Standard Names.     (line  424)
49010* 'usnegM2' instruction pattern:         Standard Names.     (line  526)
49011* USQmode:                               Machine Modes.      (line  131)
49012* 'ussubM3' instruction pattern:         Standard Names.     (line  266)
49013* 'usum_widenM3' instruction pattern:    Standard Names.     (line  341)
49014* us_ashift:                             Arithmetic.         (line  174)
49015* us_minus:                              Arithmetic.         (line   38)
49016* us_mult:                               Arithmetic.         (line   93)
49017* us_neg:                                Arithmetic.         (line   82)
49018* us_plus:                               Arithmetic.         (line   14)
49019* us_truncate:                           Conversions.        (line   48)
49020* UTAmode:                               Machine Modes.      (line  171)
49021* UTQmode:                               Machine Modes.      (line  139)
49022* 'V' in constraint:                     Simple Constraints. (line   43)
49023* values, returned by functions:         Scalar Return.      (line    6)
49024* varargs implementation:                Varargs.            (line    6)
49025* variable:                              Declarations.       (line    6)
49026* Variable Location Debug Information in RTL: Debug Information.
49027                                                             (line    6)
49028* variable_size:                         GTY Options.        (line  241)
49029* VAR_DECL:                              Declarations.       (line    6)
49030* var_location:                          Debug Information.  (line   14)
49031* 'vashlM3' instruction pattern:         Standard Names.     (line  518)
49032* 'vashrM3' instruction pattern:         Standard Names.     (line  518)
49033* VA_ARG_EXPR:                           Unary and Binary Expressions.
49034                                                             (line    6)
49035* 'vcondMN' instruction pattern:         Standard Names.     (line  213)
49036* vector:                                Containers.         (line    6)
49037* vector operations:                     Vector Operations.  (line    6)
49038* VECTOR_CST:                            Constant expressions.
49039                                                             (line    6)
49040* VECTOR_STORE_FLAG_VALUE:               Misc.               (line  293)
49041* vec_concat:                            Vector Operations.  (line   28)
49042* vec_duplicate:                         Vector Operations.  (line   33)
49043* 'vec_extractM' instruction pattern:    Standard Names.     (line  203)
49044* 'vec_initM' instruction pattern:       Standard Names.     (line  208)
49045* 'vec_load_lanesMN' instruction pattern: Standard Names.    (line  165)
49046* VEC_LSHIFT_EXPR:                       Vectors.            (line    6)
49047* vec_merge:                             Vector Operations.  (line   11)
49048* VEC_PACK_FIX_TRUNC_EXPR:               Vectors.            (line    6)
49049* VEC_PACK_SAT_EXPR:                     Vectors.            (line    6)
49050* 'vec_pack_sfix_trunc_M' instruction pattern: Standard Names.
49051                                                             (line  367)
49052* 'vec_pack_ssat_M' instruction pattern: Standard Names.     (line  360)
49053* VEC_PACK_TRUNC_EXPR:                   Vectors.            (line    6)
49054* 'vec_pack_trunc_M' instruction pattern: Standard Names.    (line  353)
49055* 'vec_pack_ufix_trunc_M' instruction pattern: Standard Names.
49056                                                             (line  367)
49057* 'vec_pack_usat_M' instruction pattern: Standard Names.     (line  360)
49058* 'vec_permM' instruction pattern:       Standard Names.     (line  223)
49059* 'vec_perm_constM' instruction pattern: Standard Names.     (line  239)
49060* VEC_RSHIFT_EXPR:                       Vectors.            (line    6)
49061* vec_select:                            Vector Operations.  (line   19)
49062* 'vec_setM' instruction pattern:        Standard Names.     (line  198)
49063* 'vec_shl_M' instruction pattern:       Standard Names.     (line  347)
49064* 'vec_shr_M' instruction pattern:       Standard Names.     (line  347)
49065* 'vec_store_lanesMN' instruction pattern: Standard Names.   (line  187)
49066* 'vec_unpacks_float_hi_M' instruction pattern: Standard Names.
49067                                                             (line  388)
49068* 'vec_unpacks_float_lo_M' instruction pattern: Standard Names.
49069                                                             (line  388)
49070* 'vec_unpacks_hi_M' instruction pattern: Standard Names.    (line  374)
49071* 'vec_unpacks_lo_M' instruction pattern: Standard Names.    (line  374)
49072* 'vec_unpacku_float_hi_M' instruction pattern: Standard Names.
49073                                                             (line  388)
49074* 'vec_unpacku_float_lo_M' instruction pattern: Standard Names.
49075                                                             (line  388)
49076* 'vec_unpacku_hi_M' instruction pattern: Standard Names.    (line  381)
49077* 'vec_unpacku_lo_M' instruction pattern: Standard Names.    (line  381)
49078* VEC_UNPACK_FLOAT_HI_EXPR:              Vectors.            (line    6)
49079* VEC_UNPACK_FLOAT_LO_EXPR:              Vectors.            (line    6)
49080* VEC_UNPACK_HI_EXPR:                    Vectors.            (line    6)
49081* VEC_UNPACK_LO_EXPR:                    Vectors.            (line    6)
49082* VEC_WIDEN_MULT_HI_EXPR:                Vectors.            (line    6)
49083* VEC_WIDEN_MULT_LO_EXPR:                Vectors.            (line    6)
49084* 'vec_widen_smult_even_M' instruction pattern: Standard Names.
49085                                                             (line  397)
49086* 'vec_widen_smult_hi_M' instruction pattern: Standard Names.
49087                                                             (line  397)
49088* 'vec_widen_smult_lo_M' instruction pattern: Standard Names.
49089                                                             (line  397)
49090* 'vec_widen_smult_odd_M' instruction pattern: Standard Names.
49091                                                             (line  397)
49092* 'vec_widen_sshiftl_hi_M' instruction pattern: Standard Names.
49093                                                             (line  406)
49094* 'vec_widen_sshiftl_lo_M' instruction pattern: Standard Names.
49095                                                             (line  406)
49096* 'vec_widen_umult_even_M' instruction pattern: Standard Names.
49097                                                             (line  397)
49098* 'vec_widen_umult_hi_M' instruction pattern: Standard Names.
49099                                                             (line  397)
49100* 'vec_widen_umult_lo_M' instruction pattern: Standard Names.
49101                                                             (line  397)
49102* 'vec_widen_umult_odd_M' instruction pattern: Standard Names.
49103                                                             (line  397)
49104* 'vec_widen_ushiftl_hi_M' instruction pattern: Standard Names.
49105                                                             (line  406)
49106* 'vec_widen_ushiftl_lo_M' instruction pattern: Standard Names.
49107                                                             (line  406)
49108* verify_flow_info:                      Maintaining the CFG.
49109                                                             (line  117)
49110* virtual operands:                      SSA Operands.       (line    6)
49111* VIRTUAL_INCOMING_ARGS_REGNUM:          Regs and Memory.    (line   59)
49112* VIRTUAL_OUTGOING_ARGS_REGNUM:          Regs and Memory.    (line   87)
49113* VIRTUAL_STACK_DYNAMIC_REGNUM:          Regs and Memory.    (line   78)
49114* VIRTUAL_STACK_VARS_REGNUM:             Regs and Memory.    (line   69)
49115* VLIW:                                  Processor pipeline description.
49116                                                             (line    6)
49117* VLIW <1>:                              Processor pipeline description.
49118                                                             (line  223)
49119* 'vlshrM3' instruction pattern:         Standard Names.     (line  518)
49120* VMS:                                   Filesystem.         (line   37)
49121* VMS_DEBUGGING_INFO:                    VMS Debug.          (line    8)
49122* VOIDmode:                              Machine Modes.      (line  189)
49123* VOID_TYPE:                             Types.              (line    6)
49124* volatil:                               Flags.              (line  328)
49125* 'volatil', in 'insn', 'call_insn', 'jump_insn', 'code_label', 'barrier', and 'note': Flags.
49126                                                             (line   44)
49127* 'volatil', in 'label_ref' and 'reg_label': Flags.          (line   65)
49128* 'volatil', in 'mem', 'asm_operands', and 'asm_input': Flags.
49129                                                             (line   76)
49130* 'volatil', in 'reg':                   Flags.              (line   98)
49131* 'volatil', in 'subreg':                Flags.              (line  170)
49132* 'volatil', in 'subreg' <1>:            Flags.              (line  180)
49133* 'volatil', in 'symbol_ref':            Flags.              (line  206)
49134* volatile memory references:            Flags.              (line  329)
49135* 'volatile', in 'prefetch':             Flags.              (line  214)
49136* voting between constraint alternatives: Class Preferences. (line    6)
49137* 'vrotlM3' instruction pattern:         Standard Names.     (line  518)
49138* 'vrotrM3' instruction pattern:         Standard Names.     (line  518)
49139* walk_dominator_tree:                   SSA.                (line  253)
49140* walk_gimple_op:                        Statement and operand traversals.
49141                                                             (line   30)
49142* walk_gimple_seq:                       Statement and operand traversals.
49143                                                             (line   47)
49144* walk_gimple_stmt:                      Statement and operand traversals.
49145                                                             (line   10)
49146* walk_use_def_chains:                   SSA.                (line  229)
49147* WCHAR_TYPE:                            Type Layout.        (line  208)
49148* WCHAR_TYPE_SIZE:                       Type Layout.        (line  216)
49149* which_alternative:                     Output Statement.   (line   58)
49150* WHILE_BODY:                            Statements for C++. (line    6)
49151* WHILE_COND:                            Statements for C++. (line    6)
49152* WHILE_STMT:                            Statements for C++. (line    6)
49153* whopr:                                 LTO.                (line    6)
49154* WIDEST_HARDWARE_FP_SIZE:               Type Layout.        (line  153)
49155* 'window_save' instruction pattern:     Standard Names.     (line 1500)
49156* WINT_TYPE:                             Type Layout.        (line  221)
49157* WORDS_BIG_ENDIAN:                      Storage Layout.     (line   28)
49158* 'WORDS_BIG_ENDIAN', effect on 'subreg': Regs and Memory.   (line  215)
49159* word_mode:                             Machine Modes.      (line  335)
49160* WORD_REGISTER_OPERATIONS:              Misc.               (line   53)
49161* wpa:                                   LTO.                (line    6)
49162* 'X' in constraint:                     Simple Constraints. (line  122)
49163* 'x-HOST':                              Host Fragment.      (line    6)
49164* XCmode:                                Machine Modes.      (line  196)
49165* XCOFF_DEBUGGING_INFO:                  DBX Options.        (line   12)
49166* XEXP:                                  Accessors.          (line    6)
49167* XFmode:                                Machine Modes.      (line   79)
49168* XF_SIZE:                               Type Layout.        (line  137)
49169* XINT:                                  Accessors.          (line    6)
49170* 'xm-MACHINE.h':                        Filesystem.         (line    6)
49171* 'xm-MACHINE.h' <1>:                    Host Misc.          (line    6)
49172* xor:                                   Arithmetic.         (line  169)
49173* 'xor', canonicalization of:            Insn Canonicalizations.
49174                                                             (line   78)
49175* 'xorM3' instruction pattern:           Standard Names.     (line  266)
49176* XSTR:                                  Accessors.          (line    6)
49177* XVEC:                                  Accessors.          (line   41)
49178* XVECEXP:                               Accessors.          (line   48)
49179* XVECLEN:                               Accessors.          (line   44)
49180* XWINT:                                 Accessors.          (line    6)
49181* zero_extend:                           Conversions.        (line   28)
49182* 'zero_extendMN2' instruction pattern:  Standard Names.     (line  907)
49183* zero_extract:                          Bit-Fields.         (line   30)
49184* 'zero_extract', canonicalization of:   Insn Canonicalizations.
49185                                                             (line   87)
49186
49187
49188
49189Tag Table:
49190Node: Top1789
49191Node: Contributing4877
49192Node: Portability5606
49193Node: Interface7394
49194Node: Libgcc10435
49195Node: Integer library routines12262
49196Node: Soft float library routines19104
49197Node: Decimal float library routines31042
49198Node: Fixed-point fractional library routines46800
49199Node: Exception handling routines147196
49200Node: Miscellaneous routines148303
49201Node: Languages150423
49202Node: Source Tree151970
49203Node: Configure Terms152552
49204Node: Top Level155508
49205Node: gcc Directory159083
49206Node: Subdirectories160035
49207Node: Configuration162203
49208Node: Config Fragments162923
49209Node: System Config164148
49210Node: Configuration Files165084
49211Node: Build167901
49212Node: Makefile168313
49213Ref: Makefile-Footnote-1175117
49214Ref: Makefile-Footnote-2175264
49215Node: Library Files175338
49216Node: Headers175900
49217Node: Documentation177983
49218Node: Texinfo Manuals178842
49219Node: Man Page Generation181171
49220Node: Miscellaneous Docs183084
49221Node: Front End184471
49222Node: Front End Directory188145
49223Node: Front End Config189461
49224Node: Front End Makefile192277
49225Node: Back End196045
49226Node: Testsuites199826
49227Node: Test Idioms200757
49228Node: Test Directives204155
49229Node: Directives204682
49230Node: Selectors214979
49231Node: Effective-Target Keywords216335
49232Ref: arm_neon_ok223889
49233Ref: arm_neonv2_ok224047
49234Ref: arm_neon_fp16_ok224219
49235Node: Add Options234594
49236Node: Require Support235791
49237Node: Final Actions238298
49238Node: Ada Tests243463
49239Node: C Tests244794
49240Node: libgcj Tests249189
49241Node: LTO Testing250316
49242Node: gcov Testing251964
49243Node: profopt Testing254954
49244Node: compat Testing256669
49245Node: Torture Tests260909
49246Node: Options262524
49247Node: Option file format262965
49248Node: Option properties269954
49249Node: Passes282830
49250Node: Parsing pass283570
49251Node: Gimplification pass287098
49252Node: Pass manager288931
49253Node: Tree SSA passes290726
49254Node: RTL passes313180
49255Node: RTL326295
49256Node: RTL Objects328476
49257Node: RTL Classes332350
49258Node: Accessors337347
49259Node: Special Accessors339741
49260Node: Flags345528
49261Node: Machine Modes360254
49262Node: Constants372564
49263Node: Regs and Memory379292
49264Node: Arithmetic397180
49265Node: Comparisons407262
49266Node: Bit-Fields411554
49267Node: Vector Operations413106
49268Node: Conversions414987
49269Node: RTL Declarations419485
49270Node: Side Effects420306
49271Node: Incdec436900
49272Node: Assembler440236
49273Node: Debug Information441781
49274Node: Insns442978
49275Node: Calls469469
49276Node: Sharing472062
49277Node: Reading RTL475173
49278Node: GENERIC476164
49279Node: Deficiencies478035
49280Node: Tree overview478276
49281Node: Macros and Functions482400
49282Node: Identifiers483225
49283Node: Containers484834
49284Node: Types485991
49285Node: Declarations498065
49286Node: Working with declarations498560
49287Node: Internal structure504164
49288Node: Current structure hierarchy504548
49289Node: Adding new DECL node types506641
49290Node: Attributes510713
49291Node: Expression trees511957
49292Node: Constant expressions513711
49293Node: Storage References517924
49294Node: Unary and Binary Expressions521443
49295Node: Vectors541295
49296Node: Statements546027
49297Node: Basic Statements546547
49298Node: Blocks551054
49299Node: Statement Sequences552458
49300Node: Empty Statements552791
49301Node: Jumps553365
49302Node: Cleanups554018
49303Node: OpenMP555785
49304Node: Functions561630
49305Node: Function Basics562101
49306Node: Function Properties565785
49307Node: Language-dependent trees568566
49308Node: C and C++ Trees569453
49309Node: Types for C++572357
49310Node: Namespaces577327
49311Node: Classes580433
49312Node: Functions for C++585510
49313Node: Statements for C++591761
49314Node: C++ Expressions599814
49315Node: Java Trees601319
49316Node: GIMPLE601432
49317Node: Tuple representation605056
49318Node: GIMPLE instruction set613360
49319Node: GIMPLE Exception Handling614976
49320Node: Temporaries616888
49321Ref: Temporaries-Footnote-1618206
49322Node: Operands618271
49323Node: Compound Expressions619032
49324Node: Compound Lvalues619266
49325Node: Conditional Expressions620028
49326Node: Logical Operators620687
49327Node: Manipulating GIMPLE statements627443
49328Node: Tuple specific accessors633379
49329Node: 'GIMPLE_ASM'634198
49330Node: 'GIMPLE_ASSIGN'636831
49331Node: 'GIMPLE_BIND'640937
49332Node: 'GIMPLE_CALL'642745
49333Node: 'GIMPLE_CATCH'647016
49334Node: 'GIMPLE_COND'648160
49335Node: 'GIMPLE_DEBUG'650948
49336Node: 'GIMPLE_EH_FILTER'654326
49337Node: 'GIMPLE_LABEL'655814
49338Node: 'GIMPLE_NOP'656789
49339Node: 'GIMPLE_OMP_ATOMIC_LOAD'657158
49340Node: 'GIMPLE_OMP_ATOMIC_STORE'658068
49341Node: 'GIMPLE_OMP_CONTINUE'658708
49342Node: 'GIMPLE_OMP_CRITICAL'660058
49343Node: 'GIMPLE_OMP_FOR'660996
49344Node: 'GIMPLE_OMP_MASTER'664511
49345Node: 'GIMPLE_OMP_ORDERED'664895
49346Node: 'GIMPLE_OMP_PARALLEL'665295
49347Node: 'GIMPLE_OMP_RETURN'668067
49348Node: 'GIMPLE_OMP_SECTION'668718
49349Node: 'GIMPLE_OMP_SECTIONS'669384
49350Node: 'GIMPLE_OMP_SINGLE'670991
49351Node: 'GIMPLE_PHI'671929
49352Node: 'GIMPLE_RESX'673216
49353Node: 'GIMPLE_RETURN'673935
49354Node: 'GIMPLE_SWITCH'674503
49355Node: 'GIMPLE_TRY'676305
49356Node: 'GIMPLE_WITH_CLEANUP_EXPR'678096
49357Node: GIMPLE sequences678979
49358Node: Sequence iterators682185
49359Node: Adding a new GIMPLE statement code690640
49360Node: Statement and operand traversals691916
49361Node: Tree SSA694508
49362Node: Annotations696325
49363Node: SSA Operands696851
49364Node: SSA711376
49365Node: Alias analysis723496
49366Node: Memory model727270
49367Node: Loop Analysis and Representation728629
49368Node: Loop representation729806
49369Node: Loop querying736723
49370Node: Loop manipulation739539
49371Node: LCSSA741900
49372Node: Scalar evolutions743969
49373Node: loop-iv747213
49374Node: Number of iterations749135
49375Node: Dependency analysis751941
49376Node: Lambda758306
49377Node: Omega759978
49378Node: Control Flow761543
49379Node: Basic Blocks763319
49380Node: Edges768608
49381Node: Profile information777237
49382Node: Maintaining the CFG781921
49383Node: Liveness information787782
49384Node: Machine Desc789908
49385Node: Overview792451
49386Node: Patterns794491
49387Node: Example797929
49388Node: RTL Template799363
49389Node: Output Template810018
49390Node: Output Statement813981
49391Node: Predicates818320
49392Node: Machine-Independent Predicates821238
49393Node: Defining Predicates826182
49394Node: Constraints832145
49395Node: Simple Constraints833627
49396Node: Multi-Alternative846467
49397Node: Class Preferences849308
49398Node: Modifiers850200
49399Node: Machine Constraints854446
49400Node: Disable Insn Alternatives906312
49401Node: Define Constraints909216
49402Node: C Constraint Interface916001
49403Node: Standard Names919653
49404Ref: shift patterns942197
49405Ref: prologue instruction pattern987100
49406Ref: window_save instruction pattern987593
49407Ref: epilogue instruction pattern987870
49408Node: Pattern Ordering1005456
49409Node: Dependent Patterns1006692
49410Node: Jump Patterns1008312
49411Ref: Jump Patterns-Footnote-11010459
49412Node: Looping Patterns1010507
49413Node: Insn Canonicalizations1015236
49414Node: Expander Definitions1019821
49415Node: Insn Splitting1028035
49416Node: Including Patterns1037638
49417Node: Peephole Definitions1039422
49418Node: define_peephole1040675
49419Node: define_peephole21047005
49420Node: Insn Attributes1050072
49421Node: Defining Attributes1051178
49422Ref: define_enum_attr1054393
49423Node: Expressions1055429
49424Node: Tagging Insns1062179
49425Node: Attr Example1066532
49426Node: Insn Lengths1068905
49427Node: Constant Attributes1071964
49428Node: Delay Slots1073133
49429Node: Processor pipeline description1076357
49430Ref: Processor pipeline description-Footnote-11095175
49431Node: Conditional Execution1095499
49432Node: Define Subst1098562
49433Node: Define Subst Example1100598
49434Node: Define Subst Pattern Matching1103592
49435Node: Define Subst Output Template1104818
49436Node: Constant Definitions1106888
49437Ref: define_enum1110670
49438Node: Iterators1111158
49439Node: Mode Iterators1111736
49440Node: Defining Mode Iterators1112714
49441Node: Substitutions1114208
49442Node: Examples1116450
49443Node: Code Iterators1117898
49444Node: Int Iterators1120177
49445Node: Subst Iterators1122638
49446Node: Target Macros1124330
49447Node: Target Structure1127418
49448Node: Driver1129534
49449Node: Run-time Target1148319
49450Node: Per-Function Data1157484
49451Node: Storage Layout1160248
49452Node: Type Layout1186303
49453Node: Registers1201626
49454Node: Register Basics1202600
49455Node: Allocation Order1208108
49456Node: Values in Registers1210554
49457Node: Leaf Functions1218032
49458Node: Stack Registers1220891
49459Node: Register Classes1222163
49460Node: Old Constraints1252130
49461Node: Stack and Calling1259270
49462Node: Frame Layout1259804
49463Node: Exception Handling1270680
49464Node: Stack Checking1276892
49465Node: Frame Registers1281706
49466Node: Elimination1289965
49467Node: Stack Arguments1294195
49468Node: Register Arguments1301058
49469Node: Scalar Return1321361
49470Node: Aggregate Return1327448
49471Node: Caller Saves1331659
49472Node: Function Entry1332836
49473Node: Profiling1343930
49474Node: Tail Calls1345629
49475Node: Stack Smashing Protection1347532
49476Node: Varargs1349160
49477Node: Trampolines1355847
49478Node: Library Calls1361890
49479Node: Addressing Modes1366829
49480Node: Anchored Addresses1386844
49481Node: Condition Code1389487
49482Node: CC0 Condition Codes1391616
49483Node: MODE_CC Condition Codes1394862
49484Node: Cond Exec Macros1401386
49485Node: Costs1401732
49486Node: Scheduling1418194
49487Node: Sections1437611
49488Node: PIC1453309
49489Node: Assembler Format1455368
49490Node: File Framework1456506
49491Ref: TARGET_HAVE_SWITCHABLE_BSS_SECTIONS1463438
49492Node: Data Output1466708
49493Node: Uninitialized Data1474477
49494Node: Label Output1479488
49495Node: Initialization1502444
49496Node: Macros for Initialization1508405
49497Node: Instruction Output1515124
49498Node: Dispatch Tables1525619
49499Node: Exception Region Output1529997
49500Node: Alignment Output1536675
49501Node: Debugging Info1541221
49502Node: All Debuggers1541891
49503Node: DBX Options1544746
49504Node: DBX Hooks1550184
49505Node: File Names and DBX1551493
49506Node: SDB and DWARF1553605
49507Node: VMS Debug1559677
49508Node: Floating Point1560264
49509Node: Mode Switching1564740
49510Node: Target Attributes1568736
49511Node: Emulated TLS1577050
49512Node: MIPS Coprocessors1580440
49513Node: PCH Target1581737
49514Node: C++ ABI1583579
49515Node: Named Address Spaces1588373
49516Node: Misc1593307
49517Ref: TARGET_SHIFT_TRUNCATION_MASK1600049
49518Node: Host Config1645205
49519Node: Host Common1646273
49520Node: Filesystem1648647
49521Node: Host Misc1652762
49522Node: Fragments1655211
49523Node: Target Fragment1656406
49524Node: Host Fragment1667034
49525Node: Collect21667274
49526Node: Header Dirs1669910
49527Node: Type Information1671333
49528Node: GTY Options1674552
49529Node: User GC1688886
49530Node: GGC Roots1692617
49531Node: Files1693330
49532Node: Invoking the garbage collector1696037
49533Node: Troubleshooting1697542
49534Node: Plugins1698617
49535Node: Plugins loading1699735
49536Node: Plugin API1700605
49537Node: Plugins pass1707633
49538Node: Plugins GC1709604
49539Node: Plugins description1711269
49540Node: Plugins attr1711805
49541Node: Plugins recording1713692
49542Node: Plugins gate1714542
49543Node: Plugins tracking1715133
49544Node: Plugins building1715721
49545Node: LTO1717508
49546Node: LTO Overview1718369
49547Node: LTO object file layout1724201
49548Node: IPA1728831
49549Node: WHOPR1737796
49550Node: Internal flags1742485
49551Node: Funding1743697
49552Node: GNU Project1746181
49553Node: Copying1746830
49554Node: GNU Free Documentation License1784342
49555Node: Contributors1809463
49556Node: Option Index1846864
49557Node: Concept Index1847668
49558
49559End Tag Table
49560