1This is gccint.info, produced by makeinfo version 5.1 from gccint.texi.
2
3Copyright (C) 1988-2020 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-2020 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
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 (GNU
58Toolchain for the A-profile Architecture 10.3-2021.07 (arm-10.29))
59version 10.3.1.  The use of the GNU compilers is documented in a
60separate manual.  *Note Introduction: (gcc)Top.
61
62 This manual is mainly a reference manual rather than a tutorial.  It
63discusses how to contribute to GCC (*note Contributing::), the
64characteristics of the machines supported by GCC as hosts and targets
65(*note Portability::), how GCC relates to the ABIs on such systems
66(*note Interface::), and the characteristics of the languages for which
67GCC front ends are written (*note Languages::).  It then describes the
68GCC source tree structure and build system, some of the interfaces to
69GCC front ends, and how support for a target system is implemented in
70GCC.
71
72 Additional tutorial information is linked to from
73<http://gcc.gnu.org/readings.html>.
74
75* Menu:
76
77* Contributing::    How to contribute to testing and developing GCC.
78* Portability::     Goals of GCC's portability features.
79* Interface::       Function-call interface of GCC output.
80* Libgcc::          Low-level runtime library used by GCC.
81* Languages::       Languages for which GCC front ends are written.
82* Source Tree::     GCC source tree structure and build system.
83* Testsuites::      GCC testsuites.
84* Options::         Option specification files.
85* Passes::          Order of passes, what they do, and what each file is for.
86* poly_int::        Representation of runtime sizes and offsets.
87* GENERIC::         Language-independent representation generated by Front Ends
88* GIMPLE::          Tuple representation used by Tree SSA optimizers
89* Tree SSA::        Analysis and optimization of GIMPLE
90* RTL::             Machine-dependent low-level intermediate representation.
91* Control Flow::    Maintaining and manipulating the control flow graph.
92* Loop Analysis and Representation:: Analysis and representation of loops
93* Machine Desc::    How to write machine description instruction patterns.
94* Target Macros::   How to write the machine description C macros and functions.
95* Host Config::     Writing the 'xm-MACHINE.h' file.
96* Fragments::       Writing the 't-TARGET' and 'x-HOST' files.
97* Collect2::        How 'collect2' works; how it finds 'ld'.
98* Header Dirs::     Understanding the standard header file directories.
99* Type Information:: GCC's memory management; generating type information.
100* Plugins::         Extending the compiler with plugins.
101* LTO::             Using Link-Time Optimization.
102
103* Match and Simplify:: How to write expression simplification patterns for GIMPLE and GENERIC
104* Static Analyzer:: Working with the static analyzer.
105* User Experience Guidelines:: Guidelines for implementing diagnostics and options.
106* Funding::         How to help assure funding for free software.
107* GNU Project::     The GNU Project and GNU/Linux.
108
109* Copying::         GNU General Public License says
110                    how you can copy and share GCC.
111* GNU Free Documentation License:: How you can copy and share this manual.
112* Contributors::    People who have contributed to GCC.
113
114* Option Index::    Index to command line options.
115* Concept Index::   Index of concepts and symbol names.
116
117
118File: gccint.info,  Node: Contributing,  Next: Portability,  Up: Top
119
1201 Contributing to GCC Development
121*********************************
122
123If you would like to help pretest GCC releases to assure they work well,
124current development sources are available via Git (see
125<http://gcc.gnu.org/git.html>).  Source and binary snapshots are also
126available for FTP; see <http://gcc.gnu.org/snapshots.html>.
127
128 If you would like to work on improvements to GCC, please read the
129advice at these URLs:
130
131     <http://gcc.gnu.org/contribute.html>
132     <http://gcc.gnu.org/contributewhy.html>
133
134for information on how to make useful contributions and avoid
135duplication of effort.  Suggested projects are listed at
136<http://gcc.gnu.org/projects/>.
137
138
139File: gccint.info,  Node: Portability,  Next: Interface,  Prev: Contributing,  Up: Top
140
1412 GCC and Portability
142*********************
143
144GCC itself aims to be portable to any machine where 'int' is at least a
14532-bit type.  It aims to target machines with a flat (non-segmented)
146byte addressed data address space (the code address space can be
147separate).  Target ABIs may have 8, 16, 32 or 64-bit 'int' type.  'char'
148can be wider than 8 bits.
149
150 GCC gets most of the information about the target machine from a
151machine description which gives an algebraic formula for each of the
152machine's instructions.  This is a very clean way to describe the
153target.  But when the compiler needs information that is difficult to
154express in this fashion, ad-hoc parameters have been defined for machine
155descriptions.  The purpose of portability is to reduce the total work
156needed on the compiler; it was not of interest for its own sake.
157
158 GCC does not contain machine dependent code, but it does contain code
159that depends on machine parameters such as endianness (whether the most
160significant byte has the highest or lowest address of the bytes in a
161word) and the availability of autoincrement addressing.  In the
162RTL-generation pass, it is often necessary to have multiple strategies
163for generating code for a particular kind of syntax tree, strategies
164that are usable for different combinations of parameters.  Often, not
165all possible cases have been addressed, but only the common ones or only
166the ones that have been encountered.  As a result, a new target may
167require additional strategies.  You will know if this happens because
168the compiler will call 'abort'.  Fortunately, the new strategies can be
169added in a machine-independent fashion, and will affect only the target
170machines that need them.
171
172
173File: gccint.info,  Node: Interface,  Next: Libgcc,  Prev: Portability,  Up: Top
174
1753 Interfacing to GCC Output
176***************************
177
178GCC is normally configured to use the same function calling convention
179normally in use on the target system.  This is done with the
180machine-description macros described (*note Target Macros::).
181
182 However, returning of structure and union values is done differently on
183some target machines.  As a result, functions compiled with PCC
184returning such types cannot be called from code compiled with GCC, and
185vice versa.  This does not cause trouble often because few Unix library
186routines return structures or unions.
187
188 GCC code returns structures and unions that are 1, 2, 4 or 8 bytes long
189in the same registers used for 'int' or 'double' return values.  (GCC
190typically allocates variables of such types in registers also.)
191Structures and unions of other sizes are returned by storing them into
192an address passed by the caller (usually in a register).  The target
193hook 'TARGET_STRUCT_VALUE_RTX' tells GCC where to pass this address.
194
195 By contrast, PCC on most target machines returns structures and unions
196of any size by copying the data into an area of static storage, and then
197returning the address of that storage as if it were a pointer value.
198The caller must copy the data from that memory area to the place where
199the value is wanted.  This is slower than the method used by GCC, and
200fails to be reentrant.
201
202 On some target machines, such as RISC machines and the 80386, the
203standard system convention is to pass to the subroutine the address of
204where to return the value.  On these machines, GCC has been configured
205to be compatible with the standard compiler, when this method is used.
206It may not be compatible for structures of 1, 2, 4 or 8 bytes.
207
208 GCC uses the system's standard convention for passing arguments.  On
209some machines, the first few arguments are passed in registers; in
210others, all are passed on the stack.  It would be possible to use
211registers for argument passing on any machine, and this would probably
212result in a significant speedup.  But the result would be complete
213incompatibility with code that follows the standard convention.  So this
214change is practical only if you are switching to GCC as the sole C
215compiler for the system.  We may implement register argument passing on
216certain machines once we have a complete GNU system so that we can
217compile the libraries with GCC.
218
219 On some machines (particularly the SPARC), certain types of arguments
220are passed "by invisible reference".  This means that the value is
221stored in memory, and the address of the memory location is passed to
222the subroutine.
223
224 If you use 'longjmp', beware of automatic variables.  ISO C says that
225automatic variables that are not declared 'volatile' have undefined
226values after a 'longjmp'.  And this is all GCC promises to do, because
227it is very difficult to restore register variables correctly, and one of
228GCC's features is that it can put variables in registers without your
229asking it to.
230
231
232File: gccint.info,  Node: Libgcc,  Next: Languages,  Prev: Interface,  Up: Top
233
2344 The GCC low-level runtime library
235***********************************
236
237GCC provides a low-level runtime library, 'libgcc.a' or 'libgcc_s.so.1'
238on some platforms.  GCC generates calls to routines in this library
239automatically, whenever it needs to perform some operation that is too
240complicated to emit inline code for.
241
242 Most of the routines in 'libgcc' handle arithmetic operations that the
243target processor cannot perform directly.  This includes integer
244multiply and divide on some machines, and all floating-point and
245fixed-point operations on other machines.  'libgcc' also includes
246routines for exception handling, and a handful of miscellaneous
247operations.
248
249 Some of these routines can be defined in mostly machine-independent C.
250Others must be hand-written in assembly language for each processor that
251needs them.
252
253 GCC will also generate calls to C library routines, such as 'memcpy'
254and 'memset', in some cases.  The set of routines that GCC may possibly
255use is documented in *note (gcc)Other Builtins::.
256
257 These routines take arguments and return values of a specific machine
258mode, not a specific C type.  *Note Machine Modes::, for an explanation
259of this concept.  For illustrative purposes, in this chapter the
260floating point type 'float' is assumed to correspond to 'SFmode';
261'double' to 'DFmode'; and 'long double' to both 'TFmode' and 'XFmode'.
262Similarly, the integer types 'int' and 'unsigned int' correspond to
263'SImode'; 'long' and 'unsigned long' to 'DImode'; and 'long long' and
264'unsigned long long' to 'TImode'.
265
266* Menu:
267
268* Integer library routines::
269* Soft float library routines::
270* Decimal float library routines::
271* Fixed-point fractional library routines::
272* Exception handling routines::
273* Miscellaneous routines::
274
275
276File: gccint.info,  Node: Integer library routines,  Next: Soft float library routines,  Up: Libgcc
277
2784.1 Routines for integer arithmetic
279===================================
280
281The integer arithmetic routines are used on platforms that don't provide
282hardware support for arithmetic operations on some modes.
283
2844.1.1 Arithmetic functions
285--------------------------
286
287 -- Runtime Function: int __ashlsi3 (int A, int B)
288 -- Runtime Function: long __ashldi3 (long A, int B)
289 -- Runtime Function: long long __ashlti3 (long long A, int B)
290     These functions return the result of shifting A left by B bits.
291
292 -- Runtime Function: int __ashrsi3 (int A, int B)
293 -- Runtime Function: long __ashrdi3 (long A, int B)
294 -- Runtime Function: long long __ashrti3 (long long A, int B)
295     These functions return the result of arithmetically shifting A
296     right by B bits.
297
298 -- Runtime Function: int __divsi3 (int A, int B)
299 -- Runtime Function: long __divdi3 (long A, long B)
300 -- Runtime Function: long long __divti3 (long long A, long long B)
301     These functions return the quotient of the signed division of A and
302     B.
303
304 -- Runtime Function: int __lshrsi3 (int A, int B)
305 -- Runtime Function: long __lshrdi3 (long A, int B)
306 -- Runtime Function: long long __lshrti3 (long long A, int B)
307     These functions return the result of logically shifting A right by
308     B bits.
309
310 -- Runtime Function: int __modsi3 (int A, int B)
311 -- Runtime Function: long __moddi3 (long A, long B)
312 -- Runtime Function: long long __modti3 (long long A, long long B)
313     These functions return the remainder of the signed division of A
314     and B.
315
316 -- Runtime Function: int __mulsi3 (int A, int B)
317 -- Runtime Function: long __muldi3 (long A, long B)
318 -- Runtime Function: long long __multi3 (long long A, long long B)
319     These functions return the product of A and B.
320
321 -- Runtime Function: long __negdi2 (long A)
322 -- Runtime Function: long long __negti2 (long long A)
323     These functions return the negation of A.
324
325 -- Runtime Function: unsigned int __udivsi3 (unsigned int A, unsigned
326          int B)
327 -- Runtime Function: unsigned long __udivdi3 (unsigned long A, unsigned
328          long B)
329 -- Runtime Function: unsigned long long __udivti3 (unsigned long long
330          A, unsigned long long B)
331     These functions return the quotient of the unsigned division of A
332     and B.
333
334 -- Runtime Function: unsigned long __udivmoddi4 (unsigned long A,
335          unsigned long B, unsigned long *C)
336 -- Runtime Function: unsigned long long __udivmodti4 (unsigned long
337          long A, unsigned long long B, unsigned long long *C)
338     These functions calculate both the quotient and remainder of the
339     unsigned division of A and B.  The return value is the quotient,
340     and the remainder is placed in variable pointed to by C.
341
342 -- Runtime Function: unsigned int __umodsi3 (unsigned int A, unsigned
343          int B)
344 -- Runtime Function: unsigned long __umoddi3 (unsigned long A, unsigned
345          long B)
346 -- Runtime Function: unsigned long long __umodti3 (unsigned long long
347          A, unsigned long long B)
348     These functions return the remainder of the unsigned division of A
349     and B.
350
3514.1.2 Comparison functions
352--------------------------
353
354The following functions implement integral comparisons.  These functions
355implement a low-level compare, upon which the higher level comparison
356operators (such as less than and greater than or equal to) can be
357constructed.  The returned values lie in the range zero to two, to allow
358the high-level operators to be implemented by testing the returned
359result using either signed or unsigned comparison.
360
361 -- Runtime Function: int __cmpdi2 (long A, long B)
362 -- Runtime Function: int __cmpti2 (long long A, long long B)
363     These functions perform a signed comparison of A and B.  If A is
364     less than B, they return 0; if A is greater than B, they return 2;
365     and if A and B are equal they return 1.
366
367 -- Runtime Function: int __ucmpdi2 (unsigned long A, unsigned long B)
368 -- Runtime Function: int __ucmpti2 (unsigned long long A, unsigned long
369          long B)
370     These functions perform an unsigned comparison of A and B.  If A is
371     less than B, they return 0; if A is greater than B, they return 2;
372     and if A and B are equal they return 1.
373
3744.1.3 Trapping arithmetic functions
375-----------------------------------
376
377The following functions implement trapping arithmetic.  These functions
378call the libc function 'abort' upon signed arithmetic overflow.
379
380 -- Runtime Function: int __absvsi2 (int A)
381 -- Runtime Function: long __absvdi2 (long A)
382     These functions return the absolute value of A.
383
384 -- Runtime Function: int __addvsi3 (int A, int B)
385 -- Runtime Function: long __addvdi3 (long A, long B)
386     These functions return the sum of A and B; that is 'A + B'.
387
388 -- Runtime Function: int __mulvsi3 (int A, int B)
389 -- Runtime Function: long __mulvdi3 (long A, long B)
390     The functions return the product of A and B; that is 'A * B'.
391
392 -- Runtime Function: int __negvsi2 (int A)
393 -- Runtime Function: long __negvdi2 (long A)
394     These functions return the negation of A; that is '-A'.
395
396 -- Runtime Function: int __subvsi3 (int A, int B)
397 -- Runtime Function: long __subvdi3 (long A, long B)
398     These functions return the difference between B and A; that is 'A -
399     B'.
400
4014.1.4 Bit operations
402--------------------
403
404 -- Runtime Function: int __clzsi2 (unsigned int A)
405 -- Runtime Function: int __clzdi2 (unsigned long A)
406 -- Runtime Function: int __clzti2 (unsigned long long A)
407     These functions return the number of leading 0-bits in A, starting
408     at the most significant bit position.  If A is zero, the result is
409     undefined.
410
411 -- Runtime Function: int __ctzsi2 (unsigned int A)
412 -- Runtime Function: int __ctzdi2 (unsigned long A)
413 -- Runtime Function: int __ctzti2 (unsigned long long A)
414     These functions return the number of trailing 0-bits in A, starting
415     at the least significant bit position.  If A is zero, the result is
416     undefined.
417
418 -- Runtime Function: int __ffsdi2 (unsigned long A)
419 -- Runtime Function: int __ffsti2 (unsigned long long A)
420     These functions return the index of the least significant 1-bit in
421     A, or the value zero if A is zero.  The least significant bit is
422     index one.
423
424 -- Runtime Function: int __paritysi2 (unsigned int A)
425 -- Runtime Function: int __paritydi2 (unsigned long A)
426 -- Runtime Function: int __parityti2 (unsigned long long A)
427     These functions return the value zero if the number of bits set in
428     A is even, and the value one otherwise.
429
430 -- Runtime Function: int __popcountsi2 (unsigned int A)
431 -- Runtime Function: int __popcountdi2 (unsigned long A)
432 -- Runtime Function: int __popcountti2 (unsigned long long A)
433     These functions return the number of bits set in A.
434
435 -- Runtime Function: int32_t __bswapsi2 (int32_t A)
436 -- Runtime Function: int64_t __bswapdi2 (int64_t A)
437     These functions return the A byteswapped.
438
439
440File: gccint.info,  Node: Soft float library routines,  Next: Decimal float library routines,  Prev: Integer library routines,  Up: Libgcc
441
4424.2 Routines for floating point emulation
443=========================================
444
445The software floating point library is used on machines which do not
446have hardware support for floating point.  It is also used whenever
447'-msoft-float' is used to disable generation of floating point
448instructions.  (Not all targets support this switch.)
449
450 For compatibility with other compilers, the floating point emulation
451routines can be renamed with the 'DECLARE_LIBRARY_RENAMES' macro (*note
452Library Calls::).  In this section, the default names are used.
453
454 Presently the library does not support 'XFmode', which is used for
455'long double' on some architectures.
456
4574.2.1 Arithmetic functions
458--------------------------
459
460 -- Runtime Function: float __addsf3 (float A, float B)
461 -- Runtime Function: double __adddf3 (double A, double B)
462 -- Runtime Function: long double __addtf3 (long double A, long double
463          B)
464 -- Runtime Function: long double __addxf3 (long double A, long double
465          B)
466     These functions return the sum of A and B.
467
468 -- Runtime Function: float __subsf3 (float A, float B)
469 -- Runtime Function: double __subdf3 (double A, double B)
470 -- Runtime Function: long double __subtf3 (long double A, long double
471          B)
472 -- Runtime Function: long double __subxf3 (long double A, long double
473          B)
474     These functions return the difference between B and A; that is,
475     A - B.
476
477 -- Runtime Function: float __mulsf3 (float A, float B)
478 -- Runtime Function: double __muldf3 (double A, double B)
479 -- Runtime Function: long double __multf3 (long double A, long double
480          B)
481 -- Runtime Function: long double __mulxf3 (long double A, long double
482          B)
483     These functions return the product of A and B.
484
485 -- Runtime Function: float __divsf3 (float A, float B)
486 -- Runtime Function: double __divdf3 (double A, double B)
487 -- Runtime Function: long double __divtf3 (long double A, long double
488          B)
489 -- Runtime Function: long double __divxf3 (long double A, long double
490          B)
491     These functions return the quotient of A and B; that is, A / B.
492
493 -- Runtime Function: float __negsf2 (float A)
494 -- Runtime Function: double __negdf2 (double A)
495 -- Runtime Function: long double __negtf2 (long double A)
496 -- Runtime Function: long double __negxf2 (long double A)
497     These functions return the negation of A.  They simply flip the
498     sign bit, so they can produce negative zero and negative NaN.
499
5004.2.2 Conversion functions
501--------------------------
502
503 -- Runtime Function: double __extendsfdf2 (float A)
504 -- Runtime Function: long double __extendsftf2 (float A)
505 -- Runtime Function: long double __extendsfxf2 (float A)
506 -- Runtime Function: long double __extenddftf2 (double A)
507 -- Runtime Function: long double __extenddfxf2 (double A)
508     These functions extend A to the wider mode of their return type.
509
510 -- Runtime Function: double __truncxfdf2 (long double A)
511 -- Runtime Function: double __trunctfdf2 (long double A)
512 -- Runtime Function: float __truncxfsf2 (long double A)
513 -- Runtime Function: float __trunctfsf2 (long double A)
514 -- Runtime Function: float __truncdfsf2 (double A)
515     These functions truncate A to the narrower mode of their return
516     type, rounding toward zero.
517
518 -- Runtime Function: int __fixsfsi (float A)
519 -- Runtime Function: int __fixdfsi (double A)
520 -- Runtime Function: int __fixtfsi (long double A)
521 -- Runtime Function: int __fixxfsi (long double A)
522     These functions convert A to a signed integer, rounding toward
523     zero.
524
525 -- Runtime Function: long __fixsfdi (float A)
526 -- Runtime Function: long __fixdfdi (double A)
527 -- Runtime Function: long __fixtfdi (long double A)
528 -- Runtime Function: long __fixxfdi (long double A)
529     These functions convert A to a signed long, rounding toward zero.
530
531 -- Runtime Function: long long __fixsfti (float A)
532 -- Runtime Function: long long __fixdfti (double A)
533 -- Runtime Function: long long __fixtfti (long double A)
534 -- Runtime Function: long long __fixxfti (long double A)
535     These functions convert A to a signed long long, rounding toward
536     zero.
537
538 -- Runtime Function: unsigned int __fixunssfsi (float A)
539 -- Runtime Function: unsigned int __fixunsdfsi (double A)
540 -- Runtime Function: unsigned int __fixunstfsi (long double A)
541 -- Runtime Function: unsigned int __fixunsxfsi (long double A)
542     These functions convert A to an unsigned integer, rounding toward
543     zero.  Negative values all become zero.
544
545 -- Runtime Function: unsigned long __fixunssfdi (float A)
546 -- Runtime Function: unsigned long __fixunsdfdi (double A)
547 -- Runtime Function: unsigned long __fixunstfdi (long double A)
548 -- Runtime Function: unsigned long __fixunsxfdi (long double A)
549     These functions convert A to an unsigned long, rounding toward
550     zero.  Negative values all become zero.
551
552 -- Runtime Function: unsigned long long __fixunssfti (float A)
553 -- Runtime Function: unsigned long long __fixunsdfti (double A)
554 -- Runtime Function: unsigned long long __fixunstfti (long double A)
555 -- Runtime Function: unsigned long long __fixunsxfti (long double A)
556     These functions convert A to an unsigned long long, rounding toward
557     zero.  Negative values all become zero.
558
559 -- Runtime Function: float __floatsisf (int I)
560 -- Runtime Function: double __floatsidf (int I)
561 -- Runtime Function: long double __floatsitf (int I)
562 -- Runtime Function: long double __floatsixf (int I)
563     These functions convert I, a signed integer, to floating point.
564
565 -- Runtime Function: float __floatdisf (long I)
566 -- Runtime Function: double __floatdidf (long I)
567 -- Runtime Function: long double __floatditf (long I)
568 -- Runtime Function: long double __floatdixf (long I)
569     These functions convert I, a signed long, to floating point.
570
571 -- Runtime Function: float __floattisf (long long I)
572 -- Runtime Function: double __floattidf (long long I)
573 -- Runtime Function: long double __floattitf (long long I)
574 -- Runtime Function: long double __floattixf (long long I)
575     These functions convert I, a signed long long, to floating point.
576
577 -- Runtime Function: float __floatunsisf (unsigned int I)
578 -- Runtime Function: double __floatunsidf (unsigned int I)
579 -- Runtime Function: long double __floatunsitf (unsigned int I)
580 -- Runtime Function: long double __floatunsixf (unsigned int I)
581     These functions convert I, an unsigned integer, to floating point.
582
583 -- Runtime Function: float __floatundisf (unsigned long I)
584 -- Runtime Function: double __floatundidf (unsigned long I)
585 -- Runtime Function: long double __floatunditf (unsigned long I)
586 -- Runtime Function: long double __floatundixf (unsigned long I)
587     These functions convert I, an unsigned long, to floating point.
588
589 -- Runtime Function: float __floatuntisf (unsigned long long I)
590 -- Runtime Function: double __floatuntidf (unsigned long long I)
591 -- Runtime Function: long double __floatuntitf (unsigned long long I)
592 -- Runtime Function: long double __floatuntixf (unsigned long long I)
593     These functions convert I, an unsigned long long, to floating
594     point.
595
5964.2.3 Comparison functions
597--------------------------
598
599There are two sets of basic comparison functions.
600
601 -- Runtime Function: int __cmpsf2 (float A, float B)
602 -- Runtime Function: int __cmpdf2 (double A, double B)
603 -- Runtime Function: int __cmptf2 (long double A, long double B)
604     These functions calculate a <=> b.  That is, if A is less than B,
605     they return -1; if A is greater than B, they return 1; and if A and
606     B are equal they return 0.  If either argument is NaN they return
607     1, but you should not rely on this; if NaN is a possibility, use
608     one of the higher-level comparison functions.
609
610 -- Runtime Function: int __unordsf2 (float A, float B)
611 -- Runtime Function: int __unorddf2 (double A, double B)
612 -- Runtime Function: int __unordtf2 (long double A, long double B)
613     These functions return a nonzero value if either argument is NaN,
614     otherwise 0.
615
616 There is also a complete group of higher level functions which
617correspond directly to comparison operators.  They implement the ISO C
618semantics for floating-point comparisons, taking NaN into account.  Pay
619careful attention to the return values defined for each set.  Under the
620hood, all of these routines are implemented as
621
622       if (__unordXf2 (a, b))
623         return E;
624       return __cmpXf2 (a, b);
625
626where E is a constant chosen to give the proper behavior for NaN.  Thus,
627the meaning of the return value is different for each set.  Do not rely
628on this implementation; only the semantics documented below are
629guaranteed.
630
631 -- Runtime Function: int __eqsf2 (float A, float B)
632 -- Runtime Function: int __eqdf2 (double A, double B)
633 -- Runtime Function: int __eqtf2 (long double A, long double B)
634     These functions return zero if neither argument is NaN, and A and B
635     are equal.
636
637 -- Runtime Function: int __nesf2 (float A, float B)
638 -- Runtime Function: int __nedf2 (double A, double B)
639 -- Runtime Function: int __netf2 (long double A, long double B)
640     These functions return a nonzero value if either argument is NaN,
641     or if A and B are unequal.
642
643 -- Runtime Function: int __gesf2 (float A, float B)
644 -- Runtime Function: int __gedf2 (double A, double B)
645 -- Runtime Function: int __getf2 (long double A, long double B)
646     These functions return a value greater than or equal to zero if
647     neither argument is NaN, and A is greater than or equal to B.
648
649 -- Runtime Function: int __ltsf2 (float A, float B)
650 -- Runtime Function: int __ltdf2 (double A, double B)
651 -- Runtime Function: int __lttf2 (long double A, long double B)
652     These functions return a value less than zero if neither argument
653     is NaN, and A is strictly less than B.
654
655 -- Runtime Function: int __lesf2 (float A, float B)
656 -- Runtime Function: int __ledf2 (double A, double B)
657 -- Runtime Function: int __letf2 (long double A, long double B)
658     These functions return a value less than or equal to zero if
659     neither argument is NaN, and A is less than or equal to B.
660
661 -- Runtime Function: int __gtsf2 (float A, float B)
662 -- Runtime Function: int __gtdf2 (double A, double B)
663 -- Runtime Function: int __gttf2 (long double A, long double B)
664     These functions return a value greater than zero if neither
665     argument is NaN, and A is strictly greater than B.
666
6674.2.4 Other floating-point functions
668------------------------------------
669
670 -- Runtime Function: float __powisf2 (float A, int B)
671 -- Runtime Function: double __powidf2 (double A, int B)
672 -- Runtime Function: long double __powitf2 (long double A, int B)
673 -- Runtime Function: long double __powixf2 (long double A, int B)
674     These functions convert raise A to the power B.
675
676 -- Runtime Function: complex float __mulsc3 (float A, float B, float C,
677          float D)
678 -- Runtime Function: complex double __muldc3 (double A, double B,
679          double C, double D)
680 -- Runtime Function: complex long double __multc3 (long double A, long
681          double B, long double C, long double D)
682 -- Runtime Function: complex long double __mulxc3 (long double A, long
683          double B, long double C, long double D)
684     These functions return the product of A + iB and C + iD, following
685     the rules of C99 Annex G.
686
687 -- Runtime Function: complex float __divsc3 (float A, float B, float C,
688          float D)
689 -- Runtime Function: complex double __divdc3 (double A, double B,
690          double C, double D)
691 -- Runtime Function: complex long double __divtc3 (long double A, long
692          double B, long double C, long double D)
693 -- Runtime Function: complex long double __divxc3 (long double A, long
694          double B, long double C, long double D)
695     These functions return the quotient of A + iB and C + iD (i.e., (A
696     + iB) / (C + iD)), following the rules of C99 Annex G.
697
698
699File: gccint.info,  Node: Decimal float library routines,  Next: Fixed-point fractional library routines,  Prev: Soft float library routines,  Up: Libgcc
700
7014.3 Routines for decimal floating point emulation
702=================================================
703
704The software decimal floating point library implements IEEE 754-2008
705decimal floating point arithmetic and is only activated on selected
706targets.
707
708 The software decimal floating point library supports either DPD
709(Densely Packed Decimal) or BID (Binary Integer Decimal) encoding as
710selected at configure time.
711
7124.3.1 Arithmetic functions
713--------------------------
714
715 -- Runtime Function: _Decimal32 __dpd_addsd3 (_Decimal32 A, _Decimal32
716          B)
717 -- Runtime Function: _Decimal32 __bid_addsd3 (_Decimal32 A, _Decimal32
718          B)
719 -- Runtime Function: _Decimal64 __dpd_adddd3 (_Decimal64 A, _Decimal64
720          B)
721 -- Runtime Function: _Decimal64 __bid_adddd3 (_Decimal64 A, _Decimal64
722          B)
723 -- Runtime Function: _Decimal128 __dpd_addtd3 (_Decimal128 A,
724          _Decimal128 B)
725 -- Runtime Function: _Decimal128 __bid_addtd3 (_Decimal128 A,
726          _Decimal128 B)
727     These functions return the sum of A and B.
728
729 -- Runtime Function: _Decimal32 __dpd_subsd3 (_Decimal32 A, _Decimal32
730          B)
731 -- Runtime Function: _Decimal32 __bid_subsd3 (_Decimal32 A, _Decimal32
732          B)
733 -- Runtime Function: _Decimal64 __dpd_subdd3 (_Decimal64 A, _Decimal64
734          B)
735 -- Runtime Function: _Decimal64 __bid_subdd3 (_Decimal64 A, _Decimal64
736          B)
737 -- Runtime Function: _Decimal128 __dpd_subtd3 (_Decimal128 A,
738          _Decimal128 B)
739 -- Runtime Function: _Decimal128 __bid_subtd3 (_Decimal128 A,
740          _Decimal128 B)
741     These functions return the difference between B and A; that is,
742     A - B.
743
744 -- Runtime Function: _Decimal32 __dpd_mulsd3 (_Decimal32 A, _Decimal32
745          B)
746 -- Runtime Function: _Decimal32 __bid_mulsd3 (_Decimal32 A, _Decimal32
747          B)
748 -- Runtime Function: _Decimal64 __dpd_muldd3 (_Decimal64 A, _Decimal64
749          B)
750 -- Runtime Function: _Decimal64 __bid_muldd3 (_Decimal64 A, _Decimal64
751          B)
752 -- Runtime Function: _Decimal128 __dpd_multd3 (_Decimal128 A,
753          _Decimal128 B)
754 -- Runtime Function: _Decimal128 __bid_multd3 (_Decimal128 A,
755          _Decimal128 B)
756     These functions return the product of A and B.
757
758 -- Runtime Function: _Decimal32 __dpd_divsd3 (_Decimal32 A, _Decimal32
759          B)
760 -- Runtime Function: _Decimal32 __bid_divsd3 (_Decimal32 A, _Decimal32
761          B)
762 -- Runtime Function: _Decimal64 __dpd_divdd3 (_Decimal64 A, _Decimal64
763          B)
764 -- Runtime Function: _Decimal64 __bid_divdd3 (_Decimal64 A, _Decimal64
765          B)
766 -- Runtime Function: _Decimal128 __dpd_divtd3 (_Decimal128 A,
767          _Decimal128 B)
768 -- Runtime Function: _Decimal128 __bid_divtd3 (_Decimal128 A,
769          _Decimal128 B)
770     These functions return the quotient of A and B; that is, A / B.
771
772 -- Runtime Function: _Decimal32 __dpd_negsd2 (_Decimal32 A)
773 -- Runtime Function: _Decimal32 __bid_negsd2 (_Decimal32 A)
774 -- Runtime Function: _Decimal64 __dpd_negdd2 (_Decimal64 A)
775 -- Runtime Function: _Decimal64 __bid_negdd2 (_Decimal64 A)
776 -- Runtime Function: _Decimal128 __dpd_negtd2 (_Decimal128 A)
777 -- Runtime Function: _Decimal128 __bid_negtd2 (_Decimal128 A)
778     These functions return the negation of A.  They simply flip the
779     sign bit, so they can produce negative zero and negative NaN.
780
7814.3.2 Conversion functions
782--------------------------
783
784 -- Runtime Function: _Decimal64 __dpd_extendsddd2 (_Decimal32 A)
785 -- Runtime Function: _Decimal64 __bid_extendsddd2 (_Decimal32 A)
786 -- Runtime Function: _Decimal128 __dpd_extendsdtd2 (_Decimal32 A)
787 -- Runtime Function: _Decimal128 __bid_extendsdtd2 (_Decimal32 A)
788 -- Runtime Function: _Decimal128 __dpd_extendddtd2 (_Decimal64 A)
789 -- Runtime Function: _Decimal128 __bid_extendddtd2 (_Decimal64 A)
790 -- Runtime Function: _Decimal32 __dpd_truncddsd2 (_Decimal64 A)
791 -- Runtime Function: _Decimal32 __bid_truncddsd2 (_Decimal64 A)
792 -- Runtime Function: _Decimal32 __dpd_trunctdsd2 (_Decimal128 A)
793 -- Runtime Function: _Decimal32 __bid_trunctdsd2 (_Decimal128 A)
794 -- Runtime Function: _Decimal64 __dpd_trunctddd2 (_Decimal128 A)
795 -- Runtime Function: _Decimal64 __bid_trunctddd2 (_Decimal128 A)
796     These functions convert the value A from one decimal floating type
797     to another.
798
799 -- Runtime Function: _Decimal64 __dpd_extendsfdd (float A)
800 -- Runtime Function: _Decimal64 __bid_extendsfdd (float A)
801 -- Runtime Function: _Decimal128 __dpd_extendsftd (float A)
802 -- Runtime Function: _Decimal128 __bid_extendsftd (float A)
803 -- Runtime Function: _Decimal128 __dpd_extenddftd (double A)
804 -- Runtime Function: _Decimal128 __bid_extenddftd (double A)
805 -- Runtime Function: _Decimal128 __dpd_extendxftd (long double A)
806 -- Runtime Function: _Decimal128 __bid_extendxftd (long double A)
807 -- Runtime Function: _Decimal32 __dpd_truncdfsd (double A)
808 -- Runtime Function: _Decimal32 __bid_truncdfsd (double A)
809 -- Runtime Function: _Decimal32 __dpd_truncxfsd (long double A)
810 -- Runtime Function: _Decimal32 __bid_truncxfsd (long double A)
811 -- Runtime Function: _Decimal32 __dpd_trunctfsd (long double A)
812 -- Runtime Function: _Decimal32 __bid_trunctfsd (long double A)
813 -- Runtime Function: _Decimal64 __dpd_truncxfdd (long double A)
814 -- Runtime Function: _Decimal64 __bid_truncxfdd (long double A)
815 -- Runtime Function: _Decimal64 __dpd_trunctfdd (long double A)
816 -- Runtime Function: _Decimal64 __bid_trunctfdd (long double A)
817     These functions convert the value of A from a binary floating type
818     to a decimal floating type of a different size.
819
820 -- Runtime Function: float __dpd_truncddsf (_Decimal64 A)
821 -- Runtime Function: float __bid_truncddsf (_Decimal64 A)
822 -- Runtime Function: float __dpd_trunctdsf (_Decimal128 A)
823 -- Runtime Function: float __bid_trunctdsf (_Decimal128 A)
824 -- Runtime Function: double __dpd_extendsddf (_Decimal32 A)
825 -- Runtime Function: double __bid_extendsddf (_Decimal32 A)
826 -- Runtime Function: double __dpd_trunctddf (_Decimal128 A)
827 -- Runtime Function: double __bid_trunctddf (_Decimal128 A)
828 -- Runtime Function: long double __dpd_extendsdxf (_Decimal32 A)
829 -- Runtime Function: long double __bid_extendsdxf (_Decimal32 A)
830 -- Runtime Function: long double __dpd_extendddxf (_Decimal64 A)
831 -- Runtime Function: long double __bid_extendddxf (_Decimal64 A)
832 -- Runtime Function: long double __dpd_trunctdxf (_Decimal128 A)
833 -- Runtime Function: long double __bid_trunctdxf (_Decimal128 A)
834 -- Runtime Function: long double __dpd_extendsdtf (_Decimal32 A)
835 -- Runtime Function: long double __bid_extendsdtf (_Decimal32 A)
836 -- Runtime Function: long double __dpd_extendddtf (_Decimal64 A)
837 -- Runtime Function: long double __bid_extendddtf (_Decimal64 A)
838     These functions convert the value of A from a decimal floating type
839     to a binary floating type of a different size.
840
841 -- Runtime Function: _Decimal32 __dpd_extendsfsd (float A)
842 -- Runtime Function: _Decimal32 __bid_extendsfsd (float A)
843 -- Runtime Function: _Decimal64 __dpd_extenddfdd (double A)
844 -- Runtime Function: _Decimal64 __bid_extenddfdd (double A)
845 -- Runtime Function: _Decimal128 __dpd_extendtftd (long double A)
846 -- Runtime Function: _Decimal128 __bid_extendtftd (long double A)
847 -- Runtime Function: float __dpd_truncsdsf (_Decimal32 A)
848 -- Runtime Function: float __bid_truncsdsf (_Decimal32 A)
849 -- Runtime Function: double __dpd_truncdddf (_Decimal64 A)
850 -- Runtime Function: double __bid_truncdddf (_Decimal64 A)
851 -- Runtime Function: long double __dpd_trunctdtf (_Decimal128 A)
852 -- Runtime Function: long double __bid_trunctdtf (_Decimal128 A)
853     These functions convert the value of A between decimal and binary
854     floating types of the same size.
855
856 -- Runtime Function: int __dpd_fixsdsi (_Decimal32 A)
857 -- Runtime Function: int __bid_fixsdsi (_Decimal32 A)
858 -- Runtime Function: int __dpd_fixddsi (_Decimal64 A)
859 -- Runtime Function: int __bid_fixddsi (_Decimal64 A)
860 -- Runtime Function: int __dpd_fixtdsi (_Decimal128 A)
861 -- Runtime Function: int __bid_fixtdsi (_Decimal128 A)
862     These functions convert A to a signed integer.
863
864 -- Runtime Function: long __dpd_fixsddi (_Decimal32 A)
865 -- Runtime Function: long __bid_fixsddi (_Decimal32 A)
866 -- Runtime Function: long __dpd_fixdddi (_Decimal64 A)
867 -- Runtime Function: long __bid_fixdddi (_Decimal64 A)
868 -- Runtime Function: long __dpd_fixtddi (_Decimal128 A)
869 -- Runtime Function: long __bid_fixtddi (_Decimal128 A)
870     These functions convert A to a signed long.
871
872 -- Runtime Function: unsigned int __dpd_fixunssdsi (_Decimal32 A)
873 -- Runtime Function: unsigned int __bid_fixunssdsi (_Decimal32 A)
874 -- Runtime Function: unsigned int __dpd_fixunsddsi (_Decimal64 A)
875 -- Runtime Function: unsigned int __bid_fixunsddsi (_Decimal64 A)
876 -- Runtime Function: unsigned int __dpd_fixunstdsi (_Decimal128 A)
877 -- Runtime Function: unsigned int __bid_fixunstdsi (_Decimal128 A)
878     These functions convert A to an unsigned integer.  Negative values
879     all become zero.
880
881 -- Runtime Function: unsigned long __dpd_fixunssddi (_Decimal32 A)
882 -- Runtime Function: unsigned long __bid_fixunssddi (_Decimal32 A)
883 -- Runtime Function: unsigned long __dpd_fixunsdddi (_Decimal64 A)
884 -- Runtime Function: unsigned long __bid_fixunsdddi (_Decimal64 A)
885 -- Runtime Function: unsigned long __dpd_fixunstddi (_Decimal128 A)
886 -- Runtime Function: unsigned long __bid_fixunstddi (_Decimal128 A)
887     These functions convert A to an unsigned long.  Negative values all
888     become zero.
889
890 -- Runtime Function: _Decimal32 __dpd_floatsisd (int I)
891 -- Runtime Function: _Decimal32 __bid_floatsisd (int I)
892 -- Runtime Function: _Decimal64 __dpd_floatsidd (int I)
893 -- Runtime Function: _Decimal64 __bid_floatsidd (int I)
894 -- Runtime Function: _Decimal128 __dpd_floatsitd (int I)
895 -- Runtime Function: _Decimal128 __bid_floatsitd (int I)
896     These functions convert I, a signed integer, to decimal floating
897     point.
898
899 -- Runtime Function: _Decimal32 __dpd_floatdisd (long I)
900 -- Runtime Function: _Decimal32 __bid_floatdisd (long I)
901 -- Runtime Function: _Decimal64 __dpd_floatdidd (long I)
902 -- Runtime Function: _Decimal64 __bid_floatdidd (long I)
903 -- Runtime Function: _Decimal128 __dpd_floatditd (long I)
904 -- Runtime Function: _Decimal128 __bid_floatditd (long I)
905     These functions convert I, a signed long, to decimal floating
906     point.
907
908 -- Runtime Function: _Decimal32 __dpd_floatunssisd (unsigned int I)
909 -- Runtime Function: _Decimal32 __bid_floatunssisd (unsigned int I)
910 -- Runtime Function: _Decimal64 __dpd_floatunssidd (unsigned int I)
911 -- Runtime Function: _Decimal64 __bid_floatunssidd (unsigned int I)
912 -- Runtime Function: _Decimal128 __dpd_floatunssitd (unsigned int I)
913 -- Runtime Function: _Decimal128 __bid_floatunssitd (unsigned int I)
914     These functions convert I, an unsigned integer, to decimal floating
915     point.
916
917 -- Runtime Function: _Decimal32 __dpd_floatunsdisd (unsigned long I)
918 -- Runtime Function: _Decimal32 __bid_floatunsdisd (unsigned long I)
919 -- Runtime Function: _Decimal64 __dpd_floatunsdidd (unsigned long I)
920 -- Runtime Function: _Decimal64 __bid_floatunsdidd (unsigned long I)
921 -- Runtime Function: _Decimal128 __dpd_floatunsditd (unsigned long I)
922 -- Runtime Function: _Decimal128 __bid_floatunsditd (unsigned long I)
923     These functions convert I, an unsigned long, to decimal floating
924     point.
925
9264.3.3 Comparison functions
927--------------------------
928
929 -- Runtime Function: int __dpd_unordsd2 (_Decimal32 A, _Decimal32 B)
930 -- Runtime Function: int __bid_unordsd2 (_Decimal32 A, _Decimal32 B)
931 -- Runtime Function: int __dpd_unorddd2 (_Decimal64 A, _Decimal64 B)
932 -- Runtime Function: int __bid_unorddd2 (_Decimal64 A, _Decimal64 B)
933 -- Runtime Function: int __dpd_unordtd2 (_Decimal128 A, _Decimal128 B)
934 -- Runtime Function: int __bid_unordtd2 (_Decimal128 A, _Decimal128 B)
935     These functions return a nonzero value if either argument is NaN,
936     otherwise 0.
937
938 There is also a complete group of higher level functions which
939correspond directly to comparison operators.  They implement the ISO C
940semantics for floating-point comparisons, taking NaN into account.  Pay
941careful attention to the return values defined for each set.  Under the
942hood, all of these routines are implemented as
943
944       if (__bid_unordXd2 (a, b))
945         return E;
946       return __bid_cmpXd2 (a, b);
947
948where E is a constant chosen to give the proper behavior for NaN.  Thus,
949the meaning of the return value is different for each set.  Do not rely
950on this implementation; only the semantics documented below are
951guaranteed.
952
953 -- Runtime Function: int __dpd_eqsd2 (_Decimal32 A, _Decimal32 B)
954 -- Runtime Function: int __bid_eqsd2 (_Decimal32 A, _Decimal32 B)
955 -- Runtime Function: int __dpd_eqdd2 (_Decimal64 A, _Decimal64 B)
956 -- Runtime Function: int __bid_eqdd2 (_Decimal64 A, _Decimal64 B)
957 -- Runtime Function: int __dpd_eqtd2 (_Decimal128 A, _Decimal128 B)
958 -- Runtime Function: int __bid_eqtd2 (_Decimal128 A, _Decimal128 B)
959     These functions return zero if neither argument is NaN, and A and B
960     are equal.
961
962 -- Runtime Function: int __dpd_nesd2 (_Decimal32 A, _Decimal32 B)
963 -- Runtime Function: int __bid_nesd2 (_Decimal32 A, _Decimal32 B)
964 -- Runtime Function: int __dpd_nedd2 (_Decimal64 A, _Decimal64 B)
965 -- Runtime Function: int __bid_nedd2 (_Decimal64 A, _Decimal64 B)
966 -- Runtime Function: int __dpd_netd2 (_Decimal128 A, _Decimal128 B)
967 -- Runtime Function: int __bid_netd2 (_Decimal128 A, _Decimal128 B)
968     These functions return a nonzero value if either argument is NaN,
969     or if A and B are unequal.
970
971 -- Runtime Function: int __dpd_gesd2 (_Decimal32 A, _Decimal32 B)
972 -- Runtime Function: int __bid_gesd2 (_Decimal32 A, _Decimal32 B)
973 -- Runtime Function: int __dpd_gedd2 (_Decimal64 A, _Decimal64 B)
974 -- Runtime Function: int __bid_gedd2 (_Decimal64 A, _Decimal64 B)
975 -- Runtime Function: int __dpd_getd2 (_Decimal128 A, _Decimal128 B)
976 -- Runtime Function: int __bid_getd2 (_Decimal128 A, _Decimal128 B)
977     These functions return a value greater than or equal to zero if
978     neither argument is NaN, and A is greater than or equal to B.
979
980 -- Runtime Function: int __dpd_ltsd2 (_Decimal32 A, _Decimal32 B)
981 -- Runtime Function: int __bid_ltsd2 (_Decimal32 A, _Decimal32 B)
982 -- Runtime Function: int __dpd_ltdd2 (_Decimal64 A, _Decimal64 B)
983 -- Runtime Function: int __bid_ltdd2 (_Decimal64 A, _Decimal64 B)
984 -- Runtime Function: int __dpd_lttd2 (_Decimal128 A, _Decimal128 B)
985 -- Runtime Function: int __bid_lttd2 (_Decimal128 A, _Decimal128 B)
986     These functions return a value less than zero if neither argument
987     is NaN, and A is strictly less than B.
988
989 -- Runtime Function: int __dpd_lesd2 (_Decimal32 A, _Decimal32 B)
990 -- Runtime Function: int __bid_lesd2 (_Decimal32 A, _Decimal32 B)
991 -- Runtime Function: int __dpd_ledd2 (_Decimal64 A, _Decimal64 B)
992 -- Runtime Function: int __bid_ledd2 (_Decimal64 A, _Decimal64 B)
993 -- Runtime Function: int __dpd_letd2 (_Decimal128 A, _Decimal128 B)
994 -- Runtime Function: int __bid_letd2 (_Decimal128 A, _Decimal128 B)
995     These functions return a value less than or equal to zero if
996     neither argument is NaN, and A is less than or equal to B.
997
998 -- Runtime Function: int __dpd_gtsd2 (_Decimal32 A, _Decimal32 B)
999 -- Runtime Function: int __bid_gtsd2 (_Decimal32 A, _Decimal32 B)
1000 -- Runtime Function: int __dpd_gtdd2 (_Decimal64 A, _Decimal64 B)
1001 -- Runtime Function: int __bid_gtdd2 (_Decimal64 A, _Decimal64 B)
1002 -- Runtime Function: int __dpd_gttd2 (_Decimal128 A, _Decimal128 B)
1003 -- Runtime Function: int __bid_gttd2 (_Decimal128 A, _Decimal128 B)
1004     These functions return a value greater than zero if neither
1005     argument is NaN, and A is strictly greater than B.
1006
1007
1008File: gccint.info,  Node: Fixed-point fractional library routines,  Next: Exception handling routines,  Prev: Decimal float library routines,  Up: Libgcc
1009
10104.4 Routines for fixed-point fractional emulation
1011=================================================
1012
1013The software fixed-point library implements fixed-point fractional
1014arithmetic, and is only activated on selected targets.
1015
1016 For ease of comprehension 'fract' is an alias for the '_Fract' type,
1017'accum' an alias for '_Accum', and 'sat' an alias for '_Sat'.
1018
1019 For illustrative purposes, in this section the fixed-point fractional
1020type 'short fract' is assumed to correspond to machine mode 'QQmode';
1021'unsigned short fract' to 'UQQmode'; 'fract' to 'HQmode';
1022'unsigned fract' to 'UHQmode'; 'long fract' to 'SQmode';
1023'unsigned long fract' to 'USQmode'; 'long long fract' to 'DQmode'; and
1024'unsigned long long fract' to 'UDQmode'.  Similarly the fixed-point
1025accumulator type 'short accum' corresponds to 'HAmode';
1026'unsigned short accum' to 'UHAmode'; 'accum' to 'SAmode';
1027'unsigned accum' to 'USAmode'; 'long accum' to 'DAmode';
1028'unsigned long accum' to 'UDAmode'; 'long long accum' to 'TAmode'; and
1029'unsigned long long accum' to 'UTAmode'.
1030
10314.4.1 Arithmetic functions
1032--------------------------
1033
1034 -- Runtime Function: short fract __addqq3 (short fract A, short fract
1035          B)
1036 -- Runtime Function: fract __addhq3 (fract A, fract B)
1037 -- Runtime Function: long fract __addsq3 (long fract A, long fract B)
1038 -- Runtime Function: long long fract __adddq3 (long long fract A, long
1039          long fract B)
1040 -- Runtime Function: unsigned short fract __adduqq3 (unsigned short
1041          fract A, unsigned short fract B)
1042 -- Runtime Function: unsigned fract __adduhq3 (unsigned fract A,
1043          unsigned fract B)
1044 -- Runtime Function: unsigned long fract __addusq3 (unsigned long fract
1045          A, unsigned long fract B)
1046 -- Runtime Function: unsigned long long fract __addudq3 (unsigned long
1047          long fract A, unsigned long long fract B)
1048 -- Runtime Function: short accum __addha3 (short accum A, short accum
1049          B)
1050 -- Runtime Function: accum __addsa3 (accum A, accum B)
1051 -- Runtime Function: long accum __addda3 (long accum A, long accum B)
1052 -- Runtime Function: long long accum __addta3 (long long accum A, long
1053          long accum B)
1054 -- Runtime Function: unsigned short accum __adduha3 (unsigned short
1055          accum A, unsigned short accum B)
1056 -- Runtime Function: unsigned accum __addusa3 (unsigned accum A,
1057          unsigned accum B)
1058 -- Runtime Function: unsigned long accum __adduda3 (unsigned long accum
1059          A, unsigned long accum B)
1060 -- Runtime Function: unsigned long long accum __adduta3 (unsigned long
1061          long accum A, unsigned long long accum B)
1062     These functions return the sum of A and B.
1063
1064 -- Runtime Function: short fract __ssaddqq3 (short fract A, short fract
1065          B)
1066 -- Runtime Function: fract __ssaddhq3 (fract A, fract B)
1067 -- Runtime Function: long fract __ssaddsq3 (long fract A, long fract B)
1068 -- Runtime Function: long long fract __ssadddq3 (long long fract A,
1069          long long fract B)
1070 -- Runtime Function: short accum __ssaddha3 (short accum A, short accum
1071          B)
1072 -- Runtime Function: accum __ssaddsa3 (accum A, accum B)
1073 -- Runtime Function: long accum __ssaddda3 (long accum A, long accum B)
1074 -- Runtime Function: long long accum __ssaddta3 (long long accum A,
1075          long long accum B)
1076     These functions return the sum of A and B with signed saturation.
1077
1078 -- Runtime Function: unsigned short fract __usadduqq3 (unsigned short
1079          fract A, unsigned short fract B)
1080 -- Runtime Function: unsigned fract __usadduhq3 (unsigned fract A,
1081          unsigned fract B)
1082 -- Runtime Function: unsigned long fract __usaddusq3 (unsigned long
1083          fract A, unsigned long fract B)
1084 -- Runtime Function: unsigned long long fract __usaddudq3 (unsigned
1085          long long fract A, unsigned long long fract B)
1086 -- Runtime Function: unsigned short accum __usadduha3 (unsigned short
1087          accum A, unsigned short accum B)
1088 -- Runtime Function: unsigned accum __usaddusa3 (unsigned accum A,
1089          unsigned accum B)
1090 -- Runtime Function: unsigned long accum __usadduda3 (unsigned long
1091          accum A, unsigned long accum B)
1092 -- Runtime Function: unsigned long long accum __usadduta3 (unsigned
1093          long long accum A, unsigned long long accum B)
1094     These functions return the sum of A and B with unsigned saturation.
1095
1096 -- Runtime Function: short fract __subqq3 (short fract A, short fract
1097          B)
1098 -- Runtime Function: fract __subhq3 (fract A, fract B)
1099 -- Runtime Function: long fract __subsq3 (long fract A, long fract B)
1100 -- Runtime Function: long long fract __subdq3 (long long fract A, long
1101          long fract B)
1102 -- Runtime Function: unsigned short fract __subuqq3 (unsigned short
1103          fract A, unsigned short fract B)
1104 -- Runtime Function: unsigned fract __subuhq3 (unsigned fract A,
1105          unsigned fract B)
1106 -- Runtime Function: unsigned long fract __subusq3 (unsigned long fract
1107          A, unsigned long fract B)
1108 -- Runtime Function: unsigned long long fract __subudq3 (unsigned long
1109          long fract A, unsigned long long fract B)
1110 -- Runtime Function: short accum __subha3 (short accum A, short accum
1111          B)
1112 -- Runtime Function: accum __subsa3 (accum A, accum B)
1113 -- Runtime Function: long accum __subda3 (long accum A, long accum B)
1114 -- Runtime Function: long long accum __subta3 (long long accum A, long
1115          long accum B)
1116 -- Runtime Function: unsigned short accum __subuha3 (unsigned short
1117          accum A, unsigned short accum B)
1118 -- Runtime Function: unsigned accum __subusa3 (unsigned accum A,
1119          unsigned accum B)
1120 -- Runtime Function: unsigned long accum __subuda3 (unsigned long accum
1121          A, unsigned long accum B)
1122 -- Runtime Function: unsigned long long accum __subuta3 (unsigned long
1123          long accum A, unsigned long long accum B)
1124     These functions return the difference of A and B; that is, 'A - B'.
1125
1126 -- Runtime Function: short fract __sssubqq3 (short fract A, short fract
1127          B)
1128 -- Runtime Function: fract __sssubhq3 (fract A, fract B)
1129 -- Runtime Function: long fract __sssubsq3 (long fract A, long fract B)
1130 -- Runtime Function: long long fract __sssubdq3 (long long fract A,
1131          long long fract B)
1132 -- Runtime Function: short accum __sssubha3 (short accum A, short accum
1133          B)
1134 -- Runtime Function: accum __sssubsa3 (accum A, accum B)
1135 -- Runtime Function: long accum __sssubda3 (long accum A, long accum B)
1136 -- Runtime Function: long long accum __sssubta3 (long long accum A,
1137          long long accum B)
1138     These functions return the difference of A and B with signed
1139     saturation; that is, 'A - B'.
1140
1141 -- Runtime Function: unsigned short fract __ussubuqq3 (unsigned short
1142          fract A, unsigned short fract B)
1143 -- Runtime Function: unsigned fract __ussubuhq3 (unsigned fract A,
1144          unsigned fract B)
1145 -- Runtime Function: unsigned long fract __ussubusq3 (unsigned long
1146          fract A, unsigned long fract B)
1147 -- Runtime Function: unsigned long long fract __ussubudq3 (unsigned
1148          long long fract A, unsigned long long fract B)
1149 -- Runtime Function: unsigned short accum __ussubuha3 (unsigned short
1150          accum A, unsigned short accum B)
1151 -- Runtime Function: unsigned accum __ussubusa3 (unsigned accum A,
1152          unsigned accum B)
1153 -- Runtime Function: unsigned long accum __ussubuda3 (unsigned long
1154          accum A, unsigned long accum B)
1155 -- Runtime Function: unsigned long long accum __ussubuta3 (unsigned
1156          long long accum A, unsigned long long accum B)
1157     These functions return the difference of A and B with unsigned
1158     saturation; that is, 'A - B'.
1159
1160 -- Runtime Function: short fract __mulqq3 (short fract A, short fract
1161          B)
1162 -- Runtime Function: fract __mulhq3 (fract A, fract B)
1163 -- Runtime Function: long fract __mulsq3 (long fract A, long fract B)
1164 -- Runtime Function: long long fract __muldq3 (long long fract A, long
1165          long fract B)
1166 -- Runtime Function: unsigned short fract __muluqq3 (unsigned short
1167          fract A, unsigned short fract B)
1168 -- Runtime Function: unsigned fract __muluhq3 (unsigned fract A,
1169          unsigned fract B)
1170 -- Runtime Function: unsigned long fract __mulusq3 (unsigned long fract
1171          A, unsigned long fract B)
1172 -- Runtime Function: unsigned long long fract __muludq3 (unsigned long
1173          long fract A, unsigned long long fract B)
1174 -- Runtime Function: short accum __mulha3 (short accum A, short accum
1175          B)
1176 -- Runtime Function: accum __mulsa3 (accum A, accum B)
1177 -- Runtime Function: long accum __mulda3 (long accum A, long accum B)
1178 -- Runtime Function: long long accum __multa3 (long long accum A, long
1179          long accum B)
1180 -- Runtime Function: unsigned short accum __muluha3 (unsigned short
1181          accum A, unsigned short accum B)
1182 -- Runtime Function: unsigned accum __mulusa3 (unsigned accum A,
1183          unsigned accum B)
1184 -- Runtime Function: unsigned long accum __muluda3 (unsigned long accum
1185          A, unsigned long accum B)
1186 -- Runtime Function: unsigned long long accum __muluta3 (unsigned long
1187          long accum A, unsigned long long accum B)
1188     These functions return the product of A and B.
1189
1190 -- Runtime Function: short fract __ssmulqq3 (short fract A, short fract
1191          B)
1192 -- Runtime Function: fract __ssmulhq3 (fract A, fract B)
1193 -- Runtime Function: long fract __ssmulsq3 (long fract A, long fract B)
1194 -- Runtime Function: long long fract __ssmuldq3 (long long fract A,
1195          long long fract B)
1196 -- Runtime Function: short accum __ssmulha3 (short accum A, short accum
1197          B)
1198 -- Runtime Function: accum __ssmulsa3 (accum A, accum B)
1199 -- Runtime Function: long accum __ssmulda3 (long accum A, long accum B)
1200 -- Runtime Function: long long accum __ssmulta3 (long long accum A,
1201          long long accum B)
1202     These functions return the product of A and B with signed
1203     saturation.
1204
1205 -- Runtime Function: unsigned short fract __usmuluqq3 (unsigned short
1206          fract A, unsigned short fract B)
1207 -- Runtime Function: unsigned fract __usmuluhq3 (unsigned fract A,
1208          unsigned fract B)
1209 -- Runtime Function: unsigned long fract __usmulusq3 (unsigned long
1210          fract A, unsigned long fract B)
1211 -- Runtime Function: unsigned long long fract __usmuludq3 (unsigned
1212          long long fract A, unsigned long long fract B)
1213 -- Runtime Function: unsigned short accum __usmuluha3 (unsigned short
1214          accum A, unsigned short accum B)
1215 -- Runtime Function: unsigned accum __usmulusa3 (unsigned accum A,
1216          unsigned accum B)
1217 -- Runtime Function: unsigned long accum __usmuluda3 (unsigned long
1218          accum A, unsigned long accum B)
1219 -- Runtime Function: unsigned long long accum __usmuluta3 (unsigned
1220          long long accum A, unsigned long long accum B)
1221     These functions return the product of A and B with unsigned
1222     saturation.
1223
1224 -- Runtime Function: short fract __divqq3 (short fract A, short fract
1225          B)
1226 -- Runtime Function: fract __divhq3 (fract A, fract B)
1227 -- Runtime Function: long fract __divsq3 (long fract A, long fract B)
1228 -- Runtime Function: long long fract __divdq3 (long long fract A, long
1229          long fract B)
1230 -- Runtime Function: short accum __divha3 (short accum A, short accum
1231          B)
1232 -- Runtime Function: accum __divsa3 (accum A, accum B)
1233 -- Runtime Function: long accum __divda3 (long accum A, long accum B)
1234 -- Runtime Function: long long accum __divta3 (long long accum A, long
1235          long accum B)
1236     These functions return the quotient of the signed division of A and
1237     B.
1238
1239 -- Runtime Function: unsigned short fract __udivuqq3 (unsigned short
1240          fract A, unsigned short fract B)
1241 -- Runtime Function: unsigned fract __udivuhq3 (unsigned fract A,
1242          unsigned fract B)
1243 -- Runtime Function: unsigned long fract __udivusq3 (unsigned long
1244          fract A, unsigned long fract B)
1245 -- Runtime Function: unsigned long long fract __udivudq3 (unsigned long
1246          long fract A, unsigned long long fract B)
1247 -- Runtime Function: unsigned short accum __udivuha3 (unsigned short
1248          accum A, unsigned short accum B)
1249 -- Runtime Function: unsigned accum __udivusa3 (unsigned accum A,
1250          unsigned accum B)
1251 -- Runtime Function: unsigned long accum __udivuda3 (unsigned long
1252          accum A, unsigned long accum B)
1253 -- Runtime Function: unsigned long long accum __udivuta3 (unsigned long
1254          long accum A, unsigned long long accum B)
1255     These functions return the quotient of the unsigned division of A
1256     and B.
1257
1258 -- Runtime Function: short fract __ssdivqq3 (short fract A, short fract
1259          B)
1260 -- Runtime Function: fract __ssdivhq3 (fract A, fract B)
1261 -- Runtime Function: long fract __ssdivsq3 (long fract A, long fract B)
1262 -- Runtime Function: long long fract __ssdivdq3 (long long fract A,
1263          long long fract B)
1264 -- Runtime Function: short accum __ssdivha3 (short accum A, short accum
1265          B)
1266 -- Runtime Function: accum __ssdivsa3 (accum A, accum B)
1267 -- Runtime Function: long accum __ssdivda3 (long accum A, long accum B)
1268 -- Runtime Function: long long accum __ssdivta3 (long long accum A,
1269          long long accum B)
1270     These functions return the quotient of the signed division of A and
1271     B with signed saturation.
1272
1273 -- Runtime Function: unsigned short fract __usdivuqq3 (unsigned short
1274          fract A, unsigned short fract B)
1275 -- Runtime Function: unsigned fract __usdivuhq3 (unsigned fract A,
1276          unsigned fract B)
1277 -- Runtime Function: unsigned long fract __usdivusq3 (unsigned long
1278          fract A, unsigned long fract B)
1279 -- Runtime Function: unsigned long long fract __usdivudq3 (unsigned
1280          long long fract A, unsigned long long fract B)
1281 -- Runtime Function: unsigned short accum __usdivuha3 (unsigned short
1282          accum A, unsigned short accum B)
1283 -- Runtime Function: unsigned accum __usdivusa3 (unsigned accum A,
1284          unsigned accum B)
1285 -- Runtime Function: unsigned long accum __usdivuda3 (unsigned long
1286          accum A, unsigned long accum B)
1287 -- Runtime Function: unsigned long long accum __usdivuta3 (unsigned
1288          long long accum A, unsigned long long accum B)
1289     These functions return the quotient of the unsigned division of A
1290     and B with unsigned saturation.
1291
1292 -- Runtime Function: short fract __negqq2 (short fract A)
1293 -- Runtime Function: fract __neghq2 (fract A)
1294 -- Runtime Function: long fract __negsq2 (long fract A)
1295 -- Runtime Function: long long fract __negdq2 (long long fract A)
1296 -- Runtime Function: unsigned short fract __neguqq2 (unsigned short
1297          fract A)
1298 -- Runtime Function: unsigned fract __neguhq2 (unsigned fract A)
1299 -- Runtime Function: unsigned long fract __negusq2 (unsigned long fract
1300          A)
1301 -- Runtime Function: unsigned long long fract __negudq2 (unsigned long
1302          long fract A)
1303 -- Runtime Function: short accum __negha2 (short accum A)
1304 -- Runtime Function: accum __negsa2 (accum A)
1305 -- Runtime Function: long accum __negda2 (long accum A)
1306 -- Runtime Function: long long accum __negta2 (long long accum A)
1307 -- Runtime Function: unsigned short accum __neguha2 (unsigned short
1308          accum A)
1309 -- Runtime Function: unsigned accum __negusa2 (unsigned accum A)
1310 -- Runtime Function: unsigned long accum __neguda2 (unsigned long accum
1311          A)
1312 -- Runtime Function: unsigned long long accum __neguta2 (unsigned long
1313          long accum A)
1314     These functions return the negation of A.
1315
1316 -- Runtime Function: short fract __ssnegqq2 (short fract A)
1317 -- Runtime Function: fract __ssneghq2 (fract A)
1318 -- Runtime Function: long fract __ssnegsq2 (long fract A)
1319 -- Runtime Function: long long fract __ssnegdq2 (long long fract A)
1320 -- Runtime Function: short accum __ssnegha2 (short accum A)
1321 -- Runtime Function: accum __ssnegsa2 (accum A)
1322 -- Runtime Function: long accum __ssnegda2 (long accum A)
1323 -- Runtime Function: long long accum __ssnegta2 (long long accum A)
1324     These functions return the negation of A with signed saturation.
1325
1326 -- Runtime Function: unsigned short fract __usneguqq2 (unsigned short
1327          fract A)
1328 -- Runtime Function: unsigned fract __usneguhq2 (unsigned fract A)
1329 -- Runtime Function: unsigned long fract __usnegusq2 (unsigned long
1330          fract A)
1331 -- Runtime Function: unsigned long long fract __usnegudq2 (unsigned
1332          long long fract A)
1333 -- Runtime Function: unsigned short accum __usneguha2 (unsigned short
1334          accum A)
1335 -- Runtime Function: unsigned accum __usnegusa2 (unsigned accum A)
1336 -- Runtime Function: unsigned long accum __usneguda2 (unsigned long
1337          accum A)
1338 -- Runtime Function: unsigned long long accum __usneguta2 (unsigned
1339          long long accum A)
1340     These functions return the negation of A with unsigned saturation.
1341
1342 -- Runtime Function: short fract __ashlqq3 (short fract A, int B)
1343 -- Runtime Function: fract __ashlhq3 (fract A, int B)
1344 -- Runtime Function: long fract __ashlsq3 (long fract A, int B)
1345 -- Runtime Function: long long fract __ashldq3 (long long fract A, int
1346          B)
1347 -- Runtime Function: unsigned short fract __ashluqq3 (unsigned short
1348          fract A, int B)
1349 -- Runtime Function: unsigned fract __ashluhq3 (unsigned fract A, int
1350          B)
1351 -- Runtime Function: unsigned long fract __ashlusq3 (unsigned long
1352          fract A, int B)
1353 -- Runtime Function: unsigned long long fract __ashludq3 (unsigned long
1354          long fract A, int B)
1355 -- Runtime Function: short accum __ashlha3 (short accum A, int B)
1356 -- Runtime Function: accum __ashlsa3 (accum A, int B)
1357 -- Runtime Function: long accum __ashlda3 (long accum A, int B)
1358 -- Runtime Function: long long accum __ashlta3 (long long accum A, int
1359          B)
1360 -- Runtime Function: unsigned short accum __ashluha3 (unsigned short
1361          accum A, int B)
1362 -- Runtime Function: unsigned accum __ashlusa3 (unsigned accum A, int
1363          B)
1364 -- Runtime Function: unsigned long accum __ashluda3 (unsigned long
1365          accum A, int B)
1366 -- Runtime Function: unsigned long long accum __ashluta3 (unsigned long
1367          long accum A, int B)
1368     These functions return the result of shifting A left by B bits.
1369
1370 -- Runtime Function: short fract __ashrqq3 (short fract A, int B)
1371 -- Runtime Function: fract __ashrhq3 (fract A, int B)
1372 -- Runtime Function: long fract __ashrsq3 (long fract A, int B)
1373 -- Runtime Function: long long fract __ashrdq3 (long long fract A, int
1374          B)
1375 -- Runtime Function: short accum __ashrha3 (short accum A, int B)
1376 -- Runtime Function: accum __ashrsa3 (accum A, int B)
1377 -- Runtime Function: long accum __ashrda3 (long accum A, int B)
1378 -- Runtime Function: long long accum __ashrta3 (long long accum A, int
1379          B)
1380     These functions return the result of arithmetically shifting A
1381     right by B bits.
1382
1383 -- Runtime Function: unsigned short fract __lshruqq3 (unsigned short
1384          fract A, int B)
1385 -- Runtime Function: unsigned fract __lshruhq3 (unsigned fract A, int
1386          B)
1387 -- Runtime Function: unsigned long fract __lshrusq3 (unsigned long
1388          fract A, int B)
1389 -- Runtime Function: unsigned long long fract __lshrudq3 (unsigned long
1390          long fract A, int B)
1391 -- Runtime Function: unsigned short accum __lshruha3 (unsigned short
1392          accum A, int B)
1393 -- Runtime Function: unsigned accum __lshrusa3 (unsigned accum A, int
1394          B)
1395 -- Runtime Function: unsigned long accum __lshruda3 (unsigned long
1396          accum A, int B)
1397 -- Runtime Function: unsigned long long accum __lshruta3 (unsigned long
1398          long accum A, int B)
1399     These functions return the result of logically shifting A right by
1400     B bits.
1401
1402 -- Runtime Function: fract __ssashlhq3 (fract A, int B)
1403 -- Runtime Function: long fract __ssashlsq3 (long fract A, int B)
1404 -- Runtime Function: long long fract __ssashldq3 (long long fract A,
1405          int B)
1406 -- Runtime Function: short accum __ssashlha3 (short accum A, int B)
1407 -- Runtime Function: accum __ssashlsa3 (accum A, int B)
1408 -- Runtime Function: long accum __ssashlda3 (long accum A, int B)
1409 -- Runtime Function: long long accum __ssashlta3 (long long accum A,
1410          int B)
1411     These functions return the result of shifting A left by B bits with
1412     signed saturation.
1413
1414 -- Runtime Function: unsigned short fract __usashluqq3 (unsigned short
1415          fract A, int B)
1416 -- Runtime Function: unsigned fract __usashluhq3 (unsigned fract A, int
1417          B)
1418 -- Runtime Function: unsigned long fract __usashlusq3 (unsigned long
1419          fract A, int B)
1420 -- Runtime Function: unsigned long long fract __usashludq3 (unsigned
1421          long long fract A, int B)
1422 -- Runtime Function: unsigned short accum __usashluha3 (unsigned short
1423          accum A, int B)
1424 -- Runtime Function: unsigned accum __usashlusa3 (unsigned accum A, int
1425          B)
1426 -- Runtime Function: unsigned long accum __usashluda3 (unsigned long
1427          accum A, int B)
1428 -- Runtime Function: unsigned long long accum __usashluta3 (unsigned
1429          long long accum A, int B)
1430     These functions return the result of shifting A left by B bits with
1431     unsigned saturation.
1432
14334.4.2 Comparison functions
1434--------------------------
1435
1436The following functions implement fixed-point comparisons.  These
1437functions implement a low-level compare, upon which the higher level
1438comparison operators (such as less than and greater than or equal to)
1439can be constructed.  The returned values lie in the range zero to two,
1440to allow the high-level operators to be implemented by testing the
1441returned result using either signed or unsigned comparison.
1442
1443 -- Runtime Function: int __cmpqq2 (short fract A, short fract B)
1444 -- Runtime Function: int __cmphq2 (fract A, fract B)
1445 -- Runtime Function: int __cmpsq2 (long fract A, long fract B)
1446 -- Runtime Function: int __cmpdq2 (long long fract A, long long fract
1447          B)
1448 -- Runtime Function: int __cmpuqq2 (unsigned short fract A, unsigned
1449          short fract B)
1450 -- Runtime Function: int __cmpuhq2 (unsigned fract A, unsigned fract B)
1451 -- Runtime Function: int __cmpusq2 (unsigned long fract A, unsigned
1452          long fract B)
1453 -- Runtime Function: int __cmpudq2 (unsigned long long fract A,
1454          unsigned long long fract B)
1455 -- Runtime Function: int __cmpha2 (short accum A, short accum B)
1456 -- Runtime Function: int __cmpsa2 (accum A, accum B)
1457 -- Runtime Function: int __cmpda2 (long accum A, long accum B)
1458 -- Runtime Function: int __cmpta2 (long long accum A, long long accum
1459          B)
1460 -- Runtime Function: int __cmpuha2 (unsigned short accum A, unsigned
1461          short accum B)
1462 -- Runtime Function: int __cmpusa2 (unsigned accum A, unsigned accum B)
1463 -- Runtime Function: int __cmpuda2 (unsigned long accum A, unsigned
1464          long accum B)
1465 -- Runtime Function: int __cmputa2 (unsigned long long accum A,
1466          unsigned long long accum B)
1467     These functions perform a signed or unsigned comparison of A and B
1468     (depending on the selected machine mode).  If A is less than B,
1469     they return 0; if A is greater than B, they return 2; and if A and
1470     B are equal they return 1.
1471
14724.4.3 Conversion functions
1473--------------------------
1474
1475 -- Runtime Function: fract __fractqqhq2 (short fract A)
1476 -- Runtime Function: long fract __fractqqsq2 (short fract A)
1477 -- Runtime Function: long long fract __fractqqdq2 (short fract A)
1478 -- Runtime Function: short accum __fractqqha (short fract A)
1479 -- Runtime Function: accum __fractqqsa (short fract A)
1480 -- Runtime Function: long accum __fractqqda (short fract A)
1481 -- Runtime Function: long long accum __fractqqta (short fract A)
1482 -- Runtime Function: unsigned short fract __fractqquqq (short fract A)
1483 -- Runtime Function: unsigned fract __fractqquhq (short fract A)
1484 -- Runtime Function: unsigned long fract __fractqqusq (short fract A)
1485 -- Runtime Function: unsigned long long fract __fractqqudq (short fract
1486          A)
1487 -- Runtime Function: unsigned short accum __fractqquha (short fract A)
1488 -- Runtime Function: unsigned accum __fractqqusa (short fract A)
1489 -- Runtime Function: unsigned long accum __fractqquda (short fract A)
1490 -- Runtime Function: unsigned long long accum __fractqquta (short fract
1491          A)
1492 -- Runtime Function: signed char __fractqqqi (short fract A)
1493 -- Runtime Function: short __fractqqhi (short fract A)
1494 -- Runtime Function: int __fractqqsi (short fract A)
1495 -- Runtime Function: long __fractqqdi (short fract A)
1496 -- Runtime Function: long long __fractqqti (short fract A)
1497 -- Runtime Function: float __fractqqsf (short fract A)
1498 -- Runtime Function: double __fractqqdf (short fract A)
1499 -- Runtime Function: short fract __fracthqqq2 (fract A)
1500 -- Runtime Function: long fract __fracthqsq2 (fract A)
1501 -- Runtime Function: long long fract __fracthqdq2 (fract A)
1502 -- Runtime Function: short accum __fracthqha (fract A)
1503 -- Runtime Function: accum __fracthqsa (fract A)
1504 -- Runtime Function: long accum __fracthqda (fract A)
1505 -- Runtime Function: long long accum __fracthqta (fract A)
1506 -- Runtime Function: unsigned short fract __fracthquqq (fract A)
1507 -- Runtime Function: unsigned fract __fracthquhq (fract A)
1508 -- Runtime Function: unsigned long fract __fracthqusq (fract A)
1509 -- Runtime Function: unsigned long long fract __fracthqudq (fract A)
1510 -- Runtime Function: unsigned short accum __fracthquha (fract A)
1511 -- Runtime Function: unsigned accum __fracthqusa (fract A)
1512 -- Runtime Function: unsigned long accum __fracthquda (fract A)
1513 -- Runtime Function: unsigned long long accum __fracthquta (fract A)
1514 -- Runtime Function: signed char __fracthqqi (fract A)
1515 -- Runtime Function: short __fracthqhi (fract A)
1516 -- Runtime Function: int __fracthqsi (fract A)
1517 -- Runtime Function: long __fracthqdi (fract A)
1518 -- Runtime Function: long long __fracthqti (fract A)
1519 -- Runtime Function: float __fracthqsf (fract A)
1520 -- Runtime Function: double __fracthqdf (fract A)
1521 -- Runtime Function: short fract __fractsqqq2 (long fract A)
1522 -- Runtime Function: fract __fractsqhq2 (long fract A)
1523 -- Runtime Function: long long fract __fractsqdq2 (long fract A)
1524 -- Runtime Function: short accum __fractsqha (long fract A)
1525 -- Runtime Function: accum __fractsqsa (long fract A)
1526 -- Runtime Function: long accum __fractsqda (long fract A)
1527 -- Runtime Function: long long accum __fractsqta (long fract A)
1528 -- Runtime Function: unsigned short fract __fractsquqq (long fract A)
1529 -- Runtime Function: unsigned fract __fractsquhq (long fract A)
1530 -- Runtime Function: unsigned long fract __fractsqusq (long fract A)
1531 -- Runtime Function: unsigned long long fract __fractsqudq (long fract
1532          A)
1533 -- Runtime Function: unsigned short accum __fractsquha (long fract A)
1534 -- Runtime Function: unsigned accum __fractsqusa (long fract A)
1535 -- Runtime Function: unsigned long accum __fractsquda (long fract A)
1536 -- Runtime Function: unsigned long long accum __fractsquta (long fract
1537          A)
1538 -- Runtime Function: signed char __fractsqqi (long fract A)
1539 -- Runtime Function: short __fractsqhi (long fract A)
1540 -- Runtime Function: int __fractsqsi (long fract A)
1541 -- Runtime Function: long __fractsqdi (long fract A)
1542 -- Runtime Function: long long __fractsqti (long fract A)
1543 -- Runtime Function: float __fractsqsf (long fract A)
1544 -- Runtime Function: double __fractsqdf (long fract A)
1545 -- Runtime Function: short fract __fractdqqq2 (long long fract A)
1546 -- Runtime Function: fract __fractdqhq2 (long long fract A)
1547 -- Runtime Function: long fract __fractdqsq2 (long long fract A)
1548 -- Runtime Function: short accum __fractdqha (long long fract A)
1549 -- Runtime Function: accum __fractdqsa (long long fract A)
1550 -- Runtime Function: long accum __fractdqda (long long fract A)
1551 -- Runtime Function: long long accum __fractdqta (long long fract A)
1552 -- Runtime Function: unsigned short fract __fractdquqq (long long fract
1553          A)
1554 -- Runtime Function: unsigned fract __fractdquhq (long long fract A)
1555 -- Runtime Function: unsigned long fract __fractdqusq (long long fract
1556          A)
1557 -- Runtime Function: unsigned long long fract __fractdqudq (long long
1558          fract A)
1559 -- Runtime Function: unsigned short accum __fractdquha (long long fract
1560          A)
1561 -- Runtime Function: unsigned accum __fractdqusa (long long fract A)
1562 -- Runtime Function: unsigned long accum __fractdquda (long long fract
1563          A)
1564 -- Runtime Function: unsigned long long accum __fractdquta (long long
1565          fract A)
1566 -- Runtime Function: signed char __fractdqqi (long long fract A)
1567 -- Runtime Function: short __fractdqhi (long long fract A)
1568 -- Runtime Function: int __fractdqsi (long long fract A)
1569 -- Runtime Function: long __fractdqdi (long long fract A)
1570 -- Runtime Function: long long __fractdqti (long long fract A)
1571 -- Runtime Function: float __fractdqsf (long long fract A)
1572 -- Runtime Function: double __fractdqdf (long long fract A)
1573 -- Runtime Function: short fract __fracthaqq (short accum A)
1574 -- Runtime Function: fract __fracthahq (short accum A)
1575 -- Runtime Function: long fract __fracthasq (short accum A)
1576 -- Runtime Function: long long fract __fracthadq (short accum A)
1577 -- Runtime Function: accum __fracthasa2 (short accum A)
1578 -- Runtime Function: long accum __fracthada2 (short accum A)
1579 -- Runtime Function: long long accum __fracthata2 (short accum A)
1580 -- Runtime Function: unsigned short fract __fracthauqq (short accum A)
1581 -- Runtime Function: unsigned fract __fracthauhq (short accum A)
1582 -- Runtime Function: unsigned long fract __fracthausq (short accum A)
1583 -- Runtime Function: unsigned long long fract __fracthaudq (short accum
1584          A)
1585 -- Runtime Function: unsigned short accum __fracthauha (short accum A)
1586 -- Runtime Function: unsigned accum __fracthausa (short accum A)
1587 -- Runtime Function: unsigned long accum __fracthauda (short accum A)
1588 -- Runtime Function: unsigned long long accum __fracthauta (short accum
1589          A)
1590 -- Runtime Function: signed char __fracthaqi (short accum A)
1591 -- Runtime Function: short __fracthahi (short accum A)
1592 -- Runtime Function: int __fracthasi (short accum A)
1593 -- Runtime Function: long __fracthadi (short accum A)
1594 -- Runtime Function: long long __fracthati (short accum A)
1595 -- Runtime Function: float __fracthasf (short accum A)
1596 -- Runtime Function: double __fracthadf (short accum A)
1597 -- Runtime Function: short fract __fractsaqq (accum A)
1598 -- Runtime Function: fract __fractsahq (accum A)
1599 -- Runtime Function: long fract __fractsasq (accum A)
1600 -- Runtime Function: long long fract __fractsadq (accum A)
1601 -- Runtime Function: short accum __fractsaha2 (accum A)
1602 -- Runtime Function: long accum __fractsada2 (accum A)
1603 -- Runtime Function: long long accum __fractsata2 (accum A)
1604 -- Runtime Function: unsigned short fract __fractsauqq (accum A)
1605 -- Runtime Function: unsigned fract __fractsauhq (accum A)
1606 -- Runtime Function: unsigned long fract __fractsausq (accum A)
1607 -- Runtime Function: unsigned long long fract __fractsaudq (accum A)
1608 -- Runtime Function: unsigned short accum __fractsauha (accum A)
1609 -- Runtime Function: unsigned accum __fractsausa (accum A)
1610 -- Runtime Function: unsigned long accum __fractsauda (accum A)
1611 -- Runtime Function: unsigned long long accum __fractsauta (accum A)
1612 -- Runtime Function: signed char __fractsaqi (accum A)
1613 -- Runtime Function: short __fractsahi (accum A)
1614 -- Runtime Function: int __fractsasi (accum A)
1615 -- Runtime Function: long __fractsadi (accum A)
1616 -- Runtime Function: long long __fractsati (accum A)
1617 -- Runtime Function: float __fractsasf (accum A)
1618 -- Runtime Function: double __fractsadf (accum A)
1619 -- Runtime Function: short fract __fractdaqq (long accum A)
1620 -- Runtime Function: fract __fractdahq (long accum A)
1621 -- Runtime Function: long fract __fractdasq (long accum A)
1622 -- Runtime Function: long long fract __fractdadq (long accum A)
1623 -- Runtime Function: short accum __fractdaha2 (long accum A)
1624 -- Runtime Function: accum __fractdasa2 (long accum A)
1625 -- Runtime Function: long long accum __fractdata2 (long accum A)
1626 -- Runtime Function: unsigned short fract __fractdauqq (long accum A)
1627 -- Runtime Function: unsigned fract __fractdauhq (long accum A)
1628 -- Runtime Function: unsigned long fract __fractdausq (long accum A)
1629 -- Runtime Function: unsigned long long fract __fractdaudq (long accum
1630          A)
1631 -- Runtime Function: unsigned short accum __fractdauha (long accum A)
1632 -- Runtime Function: unsigned accum __fractdausa (long accum A)
1633 -- Runtime Function: unsigned long accum __fractdauda (long accum A)
1634 -- Runtime Function: unsigned long long accum __fractdauta (long accum
1635          A)
1636 -- Runtime Function: signed char __fractdaqi (long accum A)
1637 -- Runtime Function: short __fractdahi (long accum A)
1638 -- Runtime Function: int __fractdasi (long accum A)
1639 -- Runtime Function: long __fractdadi (long accum A)
1640 -- Runtime Function: long long __fractdati (long accum A)
1641 -- Runtime Function: float __fractdasf (long accum A)
1642 -- Runtime Function: double __fractdadf (long accum A)
1643 -- Runtime Function: short fract __fracttaqq (long long accum A)
1644 -- Runtime Function: fract __fracttahq (long long accum A)
1645 -- Runtime Function: long fract __fracttasq (long long accum A)
1646 -- Runtime Function: long long fract __fracttadq (long long accum A)
1647 -- Runtime Function: short accum __fracttaha2 (long long accum A)
1648 -- Runtime Function: accum __fracttasa2 (long long accum A)
1649 -- Runtime Function: long accum __fracttada2 (long long accum A)
1650 -- Runtime Function: unsigned short fract __fracttauqq (long long accum
1651          A)
1652 -- Runtime Function: unsigned fract __fracttauhq (long long accum A)
1653 -- Runtime Function: unsigned long fract __fracttausq (long long accum
1654          A)
1655 -- Runtime Function: unsigned long long fract __fracttaudq (long long
1656          accum A)
1657 -- Runtime Function: unsigned short accum __fracttauha (long long accum
1658          A)
1659 -- Runtime Function: unsigned accum __fracttausa (long long accum A)
1660 -- Runtime Function: unsigned long accum __fracttauda (long long accum
1661          A)
1662 -- Runtime Function: unsigned long long accum __fracttauta (long long
1663          accum A)
1664 -- Runtime Function: signed char __fracttaqi (long long accum A)
1665 -- Runtime Function: short __fracttahi (long long accum A)
1666 -- Runtime Function: int __fracttasi (long long accum A)
1667 -- Runtime Function: long __fracttadi (long long accum A)
1668 -- Runtime Function: long long __fracttati (long long accum A)
1669 -- Runtime Function: float __fracttasf (long long accum A)
1670 -- Runtime Function: double __fracttadf (long long accum A)
1671 -- Runtime Function: short fract __fractuqqqq (unsigned short fract A)
1672 -- Runtime Function: fract __fractuqqhq (unsigned short fract A)
1673 -- Runtime Function: long fract __fractuqqsq (unsigned short fract A)
1674 -- Runtime Function: long long fract __fractuqqdq (unsigned short fract
1675          A)
1676 -- Runtime Function: short accum __fractuqqha (unsigned short fract A)
1677 -- Runtime Function: accum __fractuqqsa (unsigned short fract A)
1678 -- Runtime Function: long accum __fractuqqda (unsigned short fract A)
1679 -- Runtime Function: long long accum __fractuqqta (unsigned short fract
1680          A)
1681 -- Runtime Function: unsigned fract __fractuqquhq2 (unsigned short
1682          fract A)
1683 -- Runtime Function: unsigned long fract __fractuqqusq2 (unsigned short
1684          fract A)
1685 -- Runtime Function: unsigned long long fract __fractuqqudq2 (unsigned
1686          short fract A)
1687 -- Runtime Function: unsigned short accum __fractuqquha (unsigned short
1688          fract A)
1689 -- Runtime Function: unsigned accum __fractuqqusa (unsigned short fract
1690          A)
1691 -- Runtime Function: unsigned long accum __fractuqquda (unsigned short
1692          fract A)
1693 -- Runtime Function: unsigned long long accum __fractuqquta (unsigned
1694          short fract A)
1695 -- Runtime Function: signed char __fractuqqqi (unsigned short fract A)
1696 -- Runtime Function: short __fractuqqhi (unsigned short fract A)
1697 -- Runtime Function: int __fractuqqsi (unsigned short fract A)
1698 -- Runtime Function: long __fractuqqdi (unsigned short fract A)
1699 -- Runtime Function: long long __fractuqqti (unsigned short fract A)
1700 -- Runtime Function: float __fractuqqsf (unsigned short fract A)
1701 -- Runtime Function: double __fractuqqdf (unsigned short fract A)
1702 -- Runtime Function: short fract __fractuhqqq (unsigned fract A)
1703 -- Runtime Function: fract __fractuhqhq (unsigned fract A)
1704 -- Runtime Function: long fract __fractuhqsq (unsigned fract A)
1705 -- Runtime Function: long long fract __fractuhqdq (unsigned fract A)
1706 -- Runtime Function: short accum __fractuhqha (unsigned fract A)
1707 -- Runtime Function: accum __fractuhqsa (unsigned fract A)
1708 -- Runtime Function: long accum __fractuhqda (unsigned fract A)
1709 -- Runtime Function: long long accum __fractuhqta (unsigned fract A)
1710 -- Runtime Function: unsigned short fract __fractuhquqq2 (unsigned
1711          fract A)
1712 -- Runtime Function: unsigned long fract __fractuhqusq2 (unsigned fract
1713          A)
1714 -- Runtime Function: unsigned long long fract __fractuhqudq2 (unsigned
1715          fract A)
1716 -- Runtime Function: unsigned short accum __fractuhquha (unsigned fract
1717          A)
1718 -- Runtime Function: unsigned accum __fractuhqusa (unsigned fract A)
1719 -- Runtime Function: unsigned long accum __fractuhquda (unsigned fract
1720          A)
1721 -- Runtime Function: unsigned long long accum __fractuhquta (unsigned
1722          fract A)
1723 -- Runtime Function: signed char __fractuhqqi (unsigned fract A)
1724 -- Runtime Function: short __fractuhqhi (unsigned fract A)
1725 -- Runtime Function: int __fractuhqsi (unsigned fract A)
1726 -- Runtime Function: long __fractuhqdi (unsigned fract A)
1727 -- Runtime Function: long long __fractuhqti (unsigned fract A)
1728 -- Runtime Function: float __fractuhqsf (unsigned fract A)
1729 -- Runtime Function: double __fractuhqdf (unsigned fract A)
1730 -- Runtime Function: short fract __fractusqqq (unsigned long fract A)
1731 -- Runtime Function: fract __fractusqhq (unsigned long fract A)
1732 -- Runtime Function: long fract __fractusqsq (unsigned long fract A)
1733 -- Runtime Function: long long fract __fractusqdq (unsigned long fract
1734          A)
1735 -- Runtime Function: short accum __fractusqha (unsigned long fract A)
1736 -- Runtime Function: accum __fractusqsa (unsigned long fract A)
1737 -- Runtime Function: long accum __fractusqda (unsigned long fract A)
1738 -- Runtime Function: long long accum __fractusqta (unsigned long fract
1739          A)
1740 -- Runtime Function: unsigned short fract __fractusquqq2 (unsigned long
1741          fract A)
1742 -- Runtime Function: unsigned fract __fractusquhq2 (unsigned long fract
1743          A)
1744 -- Runtime Function: unsigned long long fract __fractusqudq2 (unsigned
1745          long fract A)
1746 -- Runtime Function: unsigned short accum __fractusquha (unsigned long
1747          fract A)
1748 -- Runtime Function: unsigned accum __fractusqusa (unsigned long fract
1749          A)
1750 -- Runtime Function: unsigned long accum __fractusquda (unsigned long
1751          fract A)
1752 -- Runtime Function: unsigned long long accum __fractusquta (unsigned
1753          long fract A)
1754 -- Runtime Function: signed char __fractusqqi (unsigned long fract A)
1755 -- Runtime Function: short __fractusqhi (unsigned long fract A)
1756 -- Runtime Function: int __fractusqsi (unsigned long fract A)
1757 -- Runtime Function: long __fractusqdi (unsigned long fract A)
1758 -- Runtime Function: long long __fractusqti (unsigned long fract A)
1759 -- Runtime Function: float __fractusqsf (unsigned long fract A)
1760 -- Runtime Function: double __fractusqdf (unsigned long fract A)
1761 -- Runtime Function: short fract __fractudqqq (unsigned long long fract
1762          A)
1763 -- Runtime Function: fract __fractudqhq (unsigned long long fract A)
1764 -- Runtime Function: long fract __fractudqsq (unsigned long long fract
1765          A)
1766 -- Runtime Function: long long fract __fractudqdq (unsigned long long
1767          fract A)
1768 -- Runtime Function: short accum __fractudqha (unsigned long long fract
1769          A)
1770 -- Runtime Function: accum __fractudqsa (unsigned long long fract A)
1771 -- Runtime Function: long accum __fractudqda (unsigned long long fract
1772          A)
1773 -- Runtime Function: long long accum __fractudqta (unsigned long long
1774          fract A)
1775 -- Runtime Function: unsigned short fract __fractudquqq2 (unsigned long
1776          long fract A)
1777 -- Runtime Function: unsigned fract __fractudquhq2 (unsigned long long
1778          fract A)
1779 -- Runtime Function: unsigned long fract __fractudqusq2 (unsigned long
1780          long fract A)
1781 -- Runtime Function: unsigned short accum __fractudquha (unsigned long
1782          long fract A)
1783 -- Runtime Function: unsigned accum __fractudqusa (unsigned long long
1784          fract A)
1785 -- Runtime Function: unsigned long accum __fractudquda (unsigned long
1786          long fract A)
1787 -- Runtime Function: unsigned long long accum __fractudquta (unsigned
1788          long long fract A)
1789 -- Runtime Function: signed char __fractudqqi (unsigned long long fract
1790          A)
1791 -- Runtime Function: short __fractudqhi (unsigned long long fract A)
1792 -- Runtime Function: int __fractudqsi (unsigned long long fract A)
1793 -- Runtime Function: long __fractudqdi (unsigned long long fract A)
1794 -- Runtime Function: long long __fractudqti (unsigned long long fract
1795          A)
1796 -- Runtime Function: float __fractudqsf (unsigned long long fract A)
1797 -- Runtime Function: double __fractudqdf (unsigned long long fract A)
1798 -- Runtime Function: short fract __fractuhaqq (unsigned short accum A)
1799 -- Runtime Function: fract __fractuhahq (unsigned short accum A)
1800 -- Runtime Function: long fract __fractuhasq (unsigned short accum A)
1801 -- Runtime Function: long long fract __fractuhadq (unsigned short accum
1802          A)
1803 -- Runtime Function: short accum __fractuhaha (unsigned short accum A)
1804 -- Runtime Function: accum __fractuhasa (unsigned short accum A)
1805 -- Runtime Function: long accum __fractuhada (unsigned short accum A)
1806 -- Runtime Function: long long accum __fractuhata (unsigned short accum
1807          A)
1808 -- Runtime Function: unsigned short fract __fractuhauqq (unsigned short
1809          accum A)
1810 -- Runtime Function: unsigned fract __fractuhauhq (unsigned short accum
1811          A)
1812 -- Runtime Function: unsigned long fract __fractuhausq (unsigned short
1813          accum A)
1814 -- Runtime Function: unsigned long long fract __fractuhaudq (unsigned
1815          short accum A)
1816 -- Runtime Function: unsigned accum __fractuhausa2 (unsigned short
1817          accum A)
1818 -- Runtime Function: unsigned long accum __fractuhauda2 (unsigned short
1819          accum A)
1820 -- Runtime Function: unsigned long long accum __fractuhauta2 (unsigned
1821          short accum A)
1822 -- Runtime Function: signed char __fractuhaqi (unsigned short accum A)
1823 -- Runtime Function: short __fractuhahi (unsigned short accum A)
1824 -- Runtime Function: int __fractuhasi (unsigned short accum A)
1825 -- Runtime Function: long __fractuhadi (unsigned short accum A)
1826 -- Runtime Function: long long __fractuhati (unsigned short accum A)
1827 -- Runtime Function: float __fractuhasf (unsigned short accum A)
1828 -- Runtime Function: double __fractuhadf (unsigned short accum A)
1829 -- Runtime Function: short fract __fractusaqq (unsigned accum A)
1830 -- Runtime Function: fract __fractusahq (unsigned accum A)
1831 -- Runtime Function: long fract __fractusasq (unsigned accum A)
1832 -- Runtime Function: long long fract __fractusadq (unsigned accum A)
1833 -- Runtime Function: short accum __fractusaha (unsigned accum A)
1834 -- Runtime Function: accum __fractusasa (unsigned accum A)
1835 -- Runtime Function: long accum __fractusada (unsigned accum A)
1836 -- Runtime Function: long long accum __fractusata (unsigned accum A)
1837 -- Runtime Function: unsigned short fract __fractusauqq (unsigned accum
1838          A)
1839 -- Runtime Function: unsigned fract __fractusauhq (unsigned accum A)
1840 -- Runtime Function: unsigned long fract __fractusausq (unsigned accum
1841          A)
1842 -- Runtime Function: unsigned long long fract __fractusaudq (unsigned
1843          accum A)
1844 -- Runtime Function: unsigned short accum __fractusauha2 (unsigned
1845          accum A)
1846 -- Runtime Function: unsigned long accum __fractusauda2 (unsigned accum
1847          A)
1848 -- Runtime Function: unsigned long long accum __fractusauta2 (unsigned
1849          accum A)
1850 -- Runtime Function: signed char __fractusaqi (unsigned accum A)
1851 -- Runtime Function: short __fractusahi (unsigned accum A)
1852 -- Runtime Function: int __fractusasi (unsigned accum A)
1853 -- Runtime Function: long __fractusadi (unsigned accum A)
1854 -- Runtime Function: long long __fractusati (unsigned accum A)
1855 -- Runtime Function: float __fractusasf (unsigned accum A)
1856 -- Runtime Function: double __fractusadf (unsigned accum A)
1857 -- Runtime Function: short fract __fractudaqq (unsigned long accum A)
1858 -- Runtime Function: fract __fractudahq (unsigned long accum A)
1859 -- Runtime Function: long fract __fractudasq (unsigned long accum A)
1860 -- Runtime Function: long long fract __fractudadq (unsigned long accum
1861          A)
1862 -- Runtime Function: short accum __fractudaha (unsigned long accum A)
1863 -- Runtime Function: accum __fractudasa (unsigned long accum A)
1864 -- Runtime Function: long accum __fractudada (unsigned long accum A)
1865 -- Runtime Function: long long accum __fractudata (unsigned long accum
1866          A)
1867 -- Runtime Function: unsigned short fract __fractudauqq (unsigned long
1868          accum A)
1869 -- Runtime Function: unsigned fract __fractudauhq (unsigned long accum
1870          A)
1871 -- Runtime Function: unsigned long fract __fractudausq (unsigned long
1872          accum A)
1873 -- Runtime Function: unsigned long long fract __fractudaudq (unsigned
1874          long accum A)
1875 -- Runtime Function: unsigned short accum __fractudauha2 (unsigned long
1876          accum A)
1877 -- Runtime Function: unsigned accum __fractudausa2 (unsigned long accum
1878          A)
1879 -- Runtime Function: unsigned long long accum __fractudauta2 (unsigned
1880          long accum A)
1881 -- Runtime Function: signed char __fractudaqi (unsigned long accum A)
1882 -- Runtime Function: short __fractudahi (unsigned long accum A)
1883 -- Runtime Function: int __fractudasi (unsigned long accum A)
1884 -- Runtime Function: long __fractudadi (unsigned long accum A)
1885 -- Runtime Function: long long __fractudati (unsigned long accum A)
1886 -- Runtime Function: float __fractudasf (unsigned long accum A)
1887 -- Runtime Function: double __fractudadf (unsigned long accum A)
1888 -- Runtime Function: short fract __fractutaqq (unsigned long long accum
1889          A)
1890 -- Runtime Function: fract __fractutahq (unsigned long long accum A)
1891 -- Runtime Function: long fract __fractutasq (unsigned long long accum
1892          A)
1893 -- Runtime Function: long long fract __fractutadq (unsigned long long
1894          accum A)
1895 -- Runtime Function: short accum __fractutaha (unsigned long long accum
1896          A)
1897 -- Runtime Function: accum __fractutasa (unsigned long long accum A)
1898 -- Runtime Function: long accum __fractutada (unsigned long long accum
1899          A)
1900 -- Runtime Function: long long accum __fractutata (unsigned long long
1901          accum A)
1902 -- Runtime Function: unsigned short fract __fractutauqq (unsigned long
1903          long accum A)
1904 -- Runtime Function: unsigned fract __fractutauhq (unsigned long long
1905          accum A)
1906 -- Runtime Function: unsigned long fract __fractutausq (unsigned long
1907          long accum A)
1908 -- Runtime Function: unsigned long long fract __fractutaudq (unsigned
1909          long long accum A)
1910 -- Runtime Function: unsigned short accum __fractutauha2 (unsigned long
1911          long accum A)
1912 -- Runtime Function: unsigned accum __fractutausa2 (unsigned long long
1913          accum A)
1914 -- Runtime Function: unsigned long accum __fractutauda2 (unsigned long
1915          long accum A)
1916 -- Runtime Function: signed char __fractutaqi (unsigned long long accum
1917          A)
1918 -- Runtime Function: short __fractutahi (unsigned long long accum A)
1919 -- Runtime Function: int __fractutasi (unsigned long long accum A)
1920 -- Runtime Function: long __fractutadi (unsigned long long accum A)
1921 -- Runtime Function: long long __fractutati (unsigned long long accum
1922          A)
1923 -- Runtime Function: float __fractutasf (unsigned long long accum A)
1924 -- Runtime Function: double __fractutadf (unsigned long long accum A)
1925 -- Runtime Function: short fract __fractqiqq (signed char A)
1926 -- Runtime Function: fract __fractqihq (signed char A)
1927 -- Runtime Function: long fract __fractqisq (signed char A)
1928 -- Runtime Function: long long fract __fractqidq (signed char A)
1929 -- Runtime Function: short accum __fractqiha (signed char A)
1930 -- Runtime Function: accum __fractqisa (signed char A)
1931 -- Runtime Function: long accum __fractqida (signed char A)
1932 -- Runtime Function: long long accum __fractqita (signed char A)
1933 -- Runtime Function: unsigned short fract __fractqiuqq (signed char A)
1934 -- Runtime Function: unsigned fract __fractqiuhq (signed char A)
1935 -- Runtime Function: unsigned long fract __fractqiusq (signed char A)
1936 -- Runtime Function: unsigned long long fract __fractqiudq (signed char
1937          A)
1938 -- Runtime Function: unsigned short accum __fractqiuha (signed char A)
1939 -- Runtime Function: unsigned accum __fractqiusa (signed char A)
1940 -- Runtime Function: unsigned long accum __fractqiuda (signed char A)
1941 -- Runtime Function: unsigned long long accum __fractqiuta (signed char
1942          A)
1943 -- Runtime Function: short fract __fracthiqq (short A)
1944 -- Runtime Function: fract __fracthihq (short A)
1945 -- Runtime Function: long fract __fracthisq (short A)
1946 -- Runtime Function: long long fract __fracthidq (short A)
1947 -- Runtime Function: short accum __fracthiha (short A)
1948 -- Runtime Function: accum __fracthisa (short A)
1949 -- Runtime Function: long accum __fracthida (short A)
1950 -- Runtime Function: long long accum __fracthita (short A)
1951 -- Runtime Function: unsigned short fract __fracthiuqq (short A)
1952 -- Runtime Function: unsigned fract __fracthiuhq (short A)
1953 -- Runtime Function: unsigned long fract __fracthiusq (short A)
1954 -- Runtime Function: unsigned long long fract __fracthiudq (short A)
1955 -- Runtime Function: unsigned short accum __fracthiuha (short A)
1956 -- Runtime Function: unsigned accum __fracthiusa (short A)
1957 -- Runtime Function: unsigned long accum __fracthiuda (short A)
1958 -- Runtime Function: unsigned long long accum __fracthiuta (short A)
1959 -- Runtime Function: short fract __fractsiqq (int A)
1960 -- Runtime Function: fract __fractsihq (int A)
1961 -- Runtime Function: long fract __fractsisq (int A)
1962 -- Runtime Function: long long fract __fractsidq (int A)
1963 -- Runtime Function: short accum __fractsiha (int A)
1964 -- Runtime Function: accum __fractsisa (int A)
1965 -- Runtime Function: long accum __fractsida (int A)
1966 -- Runtime Function: long long accum __fractsita (int A)
1967 -- Runtime Function: unsigned short fract __fractsiuqq (int A)
1968 -- Runtime Function: unsigned fract __fractsiuhq (int A)
1969 -- Runtime Function: unsigned long fract __fractsiusq (int A)
1970 -- Runtime Function: unsigned long long fract __fractsiudq (int A)
1971 -- Runtime Function: unsigned short accum __fractsiuha (int A)
1972 -- Runtime Function: unsigned accum __fractsiusa (int A)
1973 -- Runtime Function: unsigned long accum __fractsiuda (int A)
1974 -- Runtime Function: unsigned long long accum __fractsiuta (int A)
1975 -- Runtime Function: short fract __fractdiqq (long A)
1976 -- Runtime Function: fract __fractdihq (long A)
1977 -- Runtime Function: long fract __fractdisq (long A)
1978 -- Runtime Function: long long fract __fractdidq (long A)
1979 -- Runtime Function: short accum __fractdiha (long A)
1980 -- Runtime Function: accum __fractdisa (long A)
1981 -- Runtime Function: long accum __fractdida (long A)
1982 -- Runtime Function: long long accum __fractdita (long A)
1983 -- Runtime Function: unsigned short fract __fractdiuqq (long A)
1984 -- Runtime Function: unsigned fract __fractdiuhq (long A)
1985 -- Runtime Function: unsigned long fract __fractdiusq (long A)
1986 -- Runtime Function: unsigned long long fract __fractdiudq (long A)
1987 -- Runtime Function: unsigned short accum __fractdiuha (long A)
1988 -- Runtime Function: unsigned accum __fractdiusa (long A)
1989 -- Runtime Function: unsigned long accum __fractdiuda (long A)
1990 -- Runtime Function: unsigned long long accum __fractdiuta (long A)
1991 -- Runtime Function: short fract __fracttiqq (long long A)
1992 -- Runtime Function: fract __fracttihq (long long A)
1993 -- Runtime Function: long fract __fracttisq (long long A)
1994 -- Runtime Function: long long fract __fracttidq (long long A)
1995 -- Runtime Function: short accum __fracttiha (long long A)
1996 -- Runtime Function: accum __fracttisa (long long A)
1997 -- Runtime Function: long accum __fracttida (long long A)
1998 -- Runtime Function: long long accum __fracttita (long long A)
1999 -- Runtime Function: unsigned short fract __fracttiuqq (long long A)
2000 -- Runtime Function: unsigned fract __fracttiuhq (long long A)
2001 -- Runtime Function: unsigned long fract __fracttiusq (long long A)
2002 -- Runtime Function: unsigned long long fract __fracttiudq (long long
2003          A)
2004 -- Runtime Function: unsigned short accum __fracttiuha (long long A)
2005 -- Runtime Function: unsigned accum __fracttiusa (long long A)
2006 -- Runtime Function: unsigned long accum __fracttiuda (long long A)
2007 -- Runtime Function: unsigned long long accum __fracttiuta (long long
2008          A)
2009 -- Runtime Function: short fract __fractsfqq (float A)
2010 -- Runtime Function: fract __fractsfhq (float A)
2011 -- Runtime Function: long fract __fractsfsq (float A)
2012 -- Runtime Function: long long fract __fractsfdq (float A)
2013 -- Runtime Function: short accum __fractsfha (float A)
2014 -- Runtime Function: accum __fractsfsa (float A)
2015 -- Runtime Function: long accum __fractsfda (float A)
2016 -- Runtime Function: long long accum __fractsfta (float A)
2017 -- Runtime Function: unsigned short fract __fractsfuqq (float A)
2018 -- Runtime Function: unsigned fract __fractsfuhq (float A)
2019 -- Runtime Function: unsigned long fract __fractsfusq (float A)
2020 -- Runtime Function: unsigned long long fract __fractsfudq (float A)
2021 -- Runtime Function: unsigned short accum __fractsfuha (float A)
2022 -- Runtime Function: unsigned accum __fractsfusa (float A)
2023 -- Runtime Function: unsigned long accum __fractsfuda (float A)
2024 -- Runtime Function: unsigned long long accum __fractsfuta (float A)
2025 -- Runtime Function: short fract __fractdfqq (double A)
2026 -- Runtime Function: fract __fractdfhq (double A)
2027 -- Runtime Function: long fract __fractdfsq (double A)
2028 -- Runtime Function: long long fract __fractdfdq (double A)
2029 -- Runtime Function: short accum __fractdfha (double A)
2030 -- Runtime Function: accum __fractdfsa (double A)
2031 -- Runtime Function: long accum __fractdfda (double A)
2032 -- Runtime Function: long long accum __fractdfta (double A)
2033 -- Runtime Function: unsigned short fract __fractdfuqq (double A)
2034 -- Runtime Function: unsigned fract __fractdfuhq (double A)
2035 -- Runtime Function: unsigned long fract __fractdfusq (double A)
2036 -- Runtime Function: unsigned long long fract __fractdfudq (double A)
2037 -- Runtime Function: unsigned short accum __fractdfuha (double A)
2038 -- Runtime Function: unsigned accum __fractdfusa (double A)
2039 -- Runtime Function: unsigned long accum __fractdfuda (double A)
2040 -- Runtime Function: unsigned long long accum __fractdfuta (double A)
2041     These functions convert from fractional and signed non-fractionals
2042     to fractionals and signed non-fractionals, without saturation.
2043
2044 -- Runtime Function: fract __satfractqqhq2 (short fract A)
2045 -- Runtime Function: long fract __satfractqqsq2 (short fract A)
2046 -- Runtime Function: long long fract __satfractqqdq2 (short fract A)
2047 -- Runtime Function: short accum __satfractqqha (short fract A)
2048 -- Runtime Function: accum __satfractqqsa (short fract A)
2049 -- Runtime Function: long accum __satfractqqda (short fract A)
2050 -- Runtime Function: long long accum __satfractqqta (short fract A)
2051 -- Runtime Function: unsigned short fract __satfractqquqq (short fract
2052          A)
2053 -- Runtime Function: unsigned fract __satfractqquhq (short fract A)
2054 -- Runtime Function: unsigned long fract __satfractqqusq (short fract
2055          A)
2056 -- Runtime Function: unsigned long long fract __satfractqqudq (short
2057          fract A)
2058 -- Runtime Function: unsigned short accum __satfractqquha (short fract
2059          A)
2060 -- Runtime Function: unsigned accum __satfractqqusa (short fract A)
2061 -- Runtime Function: unsigned long accum __satfractqquda (short fract
2062          A)
2063 -- Runtime Function: unsigned long long accum __satfractqquta (short
2064          fract A)
2065 -- Runtime Function: short fract __satfracthqqq2 (fract A)
2066 -- Runtime Function: long fract __satfracthqsq2 (fract A)
2067 -- Runtime Function: long long fract __satfracthqdq2 (fract A)
2068 -- Runtime Function: short accum __satfracthqha (fract A)
2069 -- Runtime Function: accum __satfracthqsa (fract A)
2070 -- Runtime Function: long accum __satfracthqda (fract A)
2071 -- Runtime Function: long long accum __satfracthqta (fract A)
2072 -- Runtime Function: unsigned short fract __satfracthquqq (fract A)
2073 -- Runtime Function: unsigned fract __satfracthquhq (fract A)
2074 -- Runtime Function: unsigned long fract __satfracthqusq (fract A)
2075 -- Runtime Function: unsigned long long fract __satfracthqudq (fract A)
2076 -- Runtime Function: unsigned short accum __satfracthquha (fract A)
2077 -- Runtime Function: unsigned accum __satfracthqusa (fract A)
2078 -- Runtime Function: unsigned long accum __satfracthquda (fract A)
2079 -- Runtime Function: unsigned long long accum __satfracthquta (fract A)
2080 -- Runtime Function: short fract __satfractsqqq2 (long fract A)
2081 -- Runtime Function: fract __satfractsqhq2 (long fract A)
2082 -- Runtime Function: long long fract __satfractsqdq2 (long fract A)
2083 -- Runtime Function: short accum __satfractsqha (long fract A)
2084 -- Runtime Function: accum __satfractsqsa (long fract A)
2085 -- Runtime Function: long accum __satfractsqda (long fract A)
2086 -- Runtime Function: long long accum __satfractsqta (long fract A)
2087 -- Runtime Function: unsigned short fract __satfractsquqq (long fract
2088          A)
2089 -- Runtime Function: unsigned fract __satfractsquhq (long fract A)
2090 -- Runtime Function: unsigned long fract __satfractsqusq (long fract A)
2091 -- Runtime Function: unsigned long long fract __satfractsqudq (long
2092          fract A)
2093 -- Runtime Function: unsigned short accum __satfractsquha (long fract
2094          A)
2095 -- Runtime Function: unsigned accum __satfractsqusa (long fract A)
2096 -- Runtime Function: unsigned long accum __satfractsquda (long fract A)
2097 -- Runtime Function: unsigned long long accum __satfractsquta (long
2098          fract A)
2099 -- Runtime Function: short fract __satfractdqqq2 (long long fract A)
2100 -- Runtime Function: fract __satfractdqhq2 (long long fract A)
2101 -- Runtime Function: long fract __satfractdqsq2 (long long fract A)
2102 -- Runtime Function: short accum __satfractdqha (long long fract A)
2103 -- Runtime Function: accum __satfractdqsa (long long fract A)
2104 -- Runtime Function: long accum __satfractdqda (long long fract A)
2105 -- Runtime Function: long long accum __satfractdqta (long long fract A)
2106 -- Runtime Function: unsigned short fract __satfractdquqq (long long
2107          fract A)
2108 -- Runtime Function: unsigned fract __satfractdquhq (long long fract A)
2109 -- Runtime Function: unsigned long fract __satfractdqusq (long long
2110          fract A)
2111 -- Runtime Function: unsigned long long fract __satfractdqudq (long
2112          long fract A)
2113 -- Runtime Function: unsigned short accum __satfractdquha (long long
2114          fract A)
2115 -- Runtime Function: unsigned accum __satfractdqusa (long long fract A)
2116 -- Runtime Function: unsigned long accum __satfractdquda (long long
2117          fract A)
2118 -- Runtime Function: unsigned long long accum __satfractdquta (long
2119          long fract A)
2120 -- Runtime Function: short fract __satfracthaqq (short accum A)
2121 -- Runtime Function: fract __satfracthahq (short accum A)
2122 -- Runtime Function: long fract __satfracthasq (short accum A)
2123 -- Runtime Function: long long fract __satfracthadq (short accum A)
2124 -- Runtime Function: accum __satfracthasa2 (short accum A)
2125 -- Runtime Function: long accum __satfracthada2 (short accum A)
2126 -- Runtime Function: long long accum __satfracthata2 (short accum A)
2127 -- Runtime Function: unsigned short fract __satfracthauqq (short accum
2128          A)
2129 -- Runtime Function: unsigned fract __satfracthauhq (short accum A)
2130 -- Runtime Function: unsigned long fract __satfracthausq (short accum
2131          A)
2132 -- Runtime Function: unsigned long long fract __satfracthaudq (short
2133          accum A)
2134 -- Runtime Function: unsigned short accum __satfracthauha (short accum
2135          A)
2136 -- Runtime Function: unsigned accum __satfracthausa (short accum A)
2137 -- Runtime Function: unsigned long accum __satfracthauda (short accum
2138          A)
2139 -- Runtime Function: unsigned long long accum __satfracthauta (short
2140          accum A)
2141 -- Runtime Function: short fract __satfractsaqq (accum A)
2142 -- Runtime Function: fract __satfractsahq (accum A)
2143 -- Runtime Function: long fract __satfractsasq (accum A)
2144 -- Runtime Function: long long fract __satfractsadq (accum A)
2145 -- Runtime Function: short accum __satfractsaha2 (accum A)
2146 -- Runtime Function: long accum __satfractsada2 (accum A)
2147 -- Runtime Function: long long accum __satfractsata2 (accum A)
2148 -- Runtime Function: unsigned short fract __satfractsauqq (accum A)
2149 -- Runtime Function: unsigned fract __satfractsauhq (accum A)
2150 -- Runtime Function: unsigned long fract __satfractsausq (accum A)
2151 -- Runtime Function: unsigned long long fract __satfractsaudq (accum A)
2152 -- Runtime Function: unsigned short accum __satfractsauha (accum A)
2153 -- Runtime Function: unsigned accum __satfractsausa (accum A)
2154 -- Runtime Function: unsigned long accum __satfractsauda (accum A)
2155 -- Runtime Function: unsigned long long accum __satfractsauta (accum A)
2156 -- Runtime Function: short fract __satfractdaqq (long accum A)
2157 -- Runtime Function: fract __satfractdahq (long accum A)
2158 -- Runtime Function: long fract __satfractdasq (long accum A)
2159 -- Runtime Function: long long fract __satfractdadq (long accum A)
2160 -- Runtime Function: short accum __satfractdaha2 (long accum A)
2161 -- Runtime Function: accum __satfractdasa2 (long accum A)
2162 -- Runtime Function: long long accum __satfractdata2 (long accum A)
2163 -- Runtime Function: unsigned short fract __satfractdauqq (long accum
2164          A)
2165 -- Runtime Function: unsigned fract __satfractdauhq (long accum A)
2166 -- Runtime Function: unsigned long fract __satfractdausq (long accum A)
2167 -- Runtime Function: unsigned long long fract __satfractdaudq (long
2168          accum A)
2169 -- Runtime Function: unsigned short accum __satfractdauha (long accum
2170          A)
2171 -- Runtime Function: unsigned accum __satfractdausa (long accum A)
2172 -- Runtime Function: unsigned long accum __satfractdauda (long accum A)
2173 -- Runtime Function: unsigned long long accum __satfractdauta (long
2174          accum A)
2175 -- Runtime Function: short fract __satfracttaqq (long long accum A)
2176 -- Runtime Function: fract __satfracttahq (long long accum A)
2177 -- Runtime Function: long fract __satfracttasq (long long accum A)
2178 -- Runtime Function: long long fract __satfracttadq (long long accum A)
2179 -- Runtime Function: short accum __satfracttaha2 (long long accum A)
2180 -- Runtime Function: accum __satfracttasa2 (long long accum A)
2181 -- Runtime Function: long accum __satfracttada2 (long long accum A)
2182 -- Runtime Function: unsigned short fract __satfracttauqq (long long
2183          accum A)
2184 -- Runtime Function: unsigned fract __satfracttauhq (long long accum A)
2185 -- Runtime Function: unsigned long fract __satfracttausq (long long
2186          accum A)
2187 -- Runtime Function: unsigned long long fract __satfracttaudq (long
2188          long accum A)
2189 -- Runtime Function: unsigned short accum __satfracttauha (long long
2190          accum A)
2191 -- Runtime Function: unsigned accum __satfracttausa (long long accum A)
2192 -- Runtime Function: unsigned long accum __satfracttauda (long long
2193          accum A)
2194 -- Runtime Function: unsigned long long accum __satfracttauta (long
2195          long accum A)
2196 -- Runtime Function: short fract __satfractuqqqq (unsigned short fract
2197          A)
2198 -- Runtime Function: fract __satfractuqqhq (unsigned short fract A)
2199 -- Runtime Function: long fract __satfractuqqsq (unsigned short fract
2200          A)
2201 -- Runtime Function: long long fract __satfractuqqdq (unsigned short
2202          fract A)
2203 -- Runtime Function: short accum __satfractuqqha (unsigned short fract
2204          A)
2205 -- Runtime Function: accum __satfractuqqsa (unsigned short fract A)
2206 -- Runtime Function: long accum __satfractuqqda (unsigned short fract
2207          A)
2208 -- Runtime Function: long long accum __satfractuqqta (unsigned short
2209          fract A)
2210 -- Runtime Function: unsigned fract __satfractuqquhq2 (unsigned short
2211          fract A)
2212 -- Runtime Function: unsigned long fract __satfractuqqusq2 (unsigned
2213          short fract A)
2214 -- Runtime Function: unsigned long long fract __satfractuqqudq2
2215          (unsigned short fract A)
2216 -- Runtime Function: unsigned short accum __satfractuqquha (unsigned
2217          short fract A)
2218 -- Runtime Function: unsigned accum __satfractuqqusa (unsigned short
2219          fract A)
2220 -- Runtime Function: unsigned long accum __satfractuqquda (unsigned
2221          short fract A)
2222 -- Runtime Function: unsigned long long accum __satfractuqquta
2223          (unsigned short fract A)
2224 -- Runtime Function: short fract __satfractuhqqq (unsigned fract A)
2225 -- Runtime Function: fract __satfractuhqhq (unsigned fract A)
2226 -- Runtime Function: long fract __satfractuhqsq (unsigned fract A)
2227 -- Runtime Function: long long fract __satfractuhqdq (unsigned fract A)
2228 -- Runtime Function: short accum __satfractuhqha (unsigned fract A)
2229 -- Runtime Function: accum __satfractuhqsa (unsigned fract A)
2230 -- Runtime Function: long accum __satfractuhqda (unsigned fract A)
2231 -- Runtime Function: long long accum __satfractuhqta (unsigned fract A)
2232 -- Runtime Function: unsigned short fract __satfractuhquqq2 (unsigned
2233          fract A)
2234 -- Runtime Function: unsigned long fract __satfractuhqusq2 (unsigned
2235          fract A)
2236 -- Runtime Function: unsigned long long fract __satfractuhqudq2
2237          (unsigned fract A)
2238 -- Runtime Function: unsigned short accum __satfractuhquha (unsigned
2239          fract A)
2240 -- Runtime Function: unsigned accum __satfractuhqusa (unsigned fract A)
2241 -- Runtime Function: unsigned long accum __satfractuhquda (unsigned
2242          fract A)
2243 -- Runtime Function: unsigned long long accum __satfractuhquta
2244          (unsigned fract A)
2245 -- Runtime Function: short fract __satfractusqqq (unsigned long fract
2246          A)
2247 -- Runtime Function: fract __satfractusqhq (unsigned long fract A)
2248 -- Runtime Function: long fract __satfractusqsq (unsigned long fract A)
2249 -- Runtime Function: long long fract __satfractusqdq (unsigned long
2250          fract A)
2251 -- Runtime Function: short accum __satfractusqha (unsigned long fract
2252          A)
2253 -- Runtime Function: accum __satfractusqsa (unsigned long fract A)
2254 -- Runtime Function: long accum __satfractusqda (unsigned long fract A)
2255 -- Runtime Function: long long accum __satfractusqta (unsigned long
2256          fract A)
2257 -- Runtime Function: unsigned short fract __satfractusquqq2 (unsigned
2258          long fract A)
2259 -- Runtime Function: unsigned fract __satfractusquhq2 (unsigned long
2260          fract A)
2261 -- Runtime Function: unsigned long long fract __satfractusqudq2
2262          (unsigned long fract A)
2263 -- Runtime Function: unsigned short accum __satfractusquha (unsigned
2264          long fract A)
2265 -- Runtime Function: unsigned accum __satfractusqusa (unsigned long
2266          fract A)
2267 -- Runtime Function: unsigned long accum __satfractusquda (unsigned
2268          long fract A)
2269 -- Runtime Function: unsigned long long accum __satfractusquta
2270          (unsigned long fract A)
2271 -- Runtime Function: short fract __satfractudqqq (unsigned long long
2272          fract A)
2273 -- Runtime Function: fract __satfractudqhq (unsigned long long fract A)
2274 -- Runtime Function: long fract __satfractudqsq (unsigned long long
2275          fract A)
2276 -- Runtime Function: long long fract __satfractudqdq (unsigned long
2277          long fract A)
2278 -- Runtime Function: short accum __satfractudqha (unsigned long long
2279          fract A)
2280 -- Runtime Function: accum __satfractudqsa (unsigned long long fract A)
2281 -- Runtime Function: long accum __satfractudqda (unsigned long long
2282          fract A)
2283 -- Runtime Function: long long accum __satfractudqta (unsigned long
2284          long fract A)
2285 -- Runtime Function: unsigned short fract __satfractudquqq2 (unsigned
2286          long long fract A)
2287 -- Runtime Function: unsigned fract __satfractudquhq2 (unsigned long
2288          long fract A)
2289 -- Runtime Function: unsigned long fract __satfractudqusq2 (unsigned
2290          long long fract A)
2291 -- Runtime Function: unsigned short accum __satfractudquha (unsigned
2292          long long fract A)
2293 -- Runtime Function: unsigned accum __satfractudqusa (unsigned long
2294          long fract A)
2295 -- Runtime Function: unsigned long accum __satfractudquda (unsigned
2296          long long fract A)
2297 -- Runtime Function: unsigned long long accum __satfractudquta
2298          (unsigned long long fract A)
2299 -- Runtime Function: short fract __satfractuhaqq (unsigned short accum
2300          A)
2301 -- Runtime Function: fract __satfractuhahq (unsigned short accum A)
2302 -- Runtime Function: long fract __satfractuhasq (unsigned short accum
2303          A)
2304 -- Runtime Function: long long fract __satfractuhadq (unsigned short
2305          accum A)
2306 -- Runtime Function: short accum __satfractuhaha (unsigned short accum
2307          A)
2308 -- Runtime Function: accum __satfractuhasa (unsigned short accum A)
2309 -- Runtime Function: long accum __satfractuhada (unsigned short accum
2310          A)
2311 -- Runtime Function: long long accum __satfractuhata (unsigned short
2312          accum A)
2313 -- Runtime Function: unsigned short fract __satfractuhauqq (unsigned
2314          short accum A)
2315 -- Runtime Function: unsigned fract __satfractuhauhq (unsigned short
2316          accum A)
2317 -- Runtime Function: unsigned long fract __satfractuhausq (unsigned
2318          short accum A)
2319 -- Runtime Function: unsigned long long fract __satfractuhaudq
2320          (unsigned short accum A)
2321 -- Runtime Function: unsigned accum __satfractuhausa2 (unsigned short
2322          accum A)
2323 -- Runtime Function: unsigned long accum __satfractuhauda2 (unsigned
2324          short accum A)
2325 -- Runtime Function: unsigned long long accum __satfractuhauta2
2326          (unsigned short accum A)
2327 -- Runtime Function: short fract __satfractusaqq (unsigned accum A)
2328 -- Runtime Function: fract __satfractusahq (unsigned accum A)
2329 -- Runtime Function: long fract __satfractusasq (unsigned accum A)
2330 -- Runtime Function: long long fract __satfractusadq (unsigned accum A)
2331 -- Runtime Function: short accum __satfractusaha (unsigned accum A)
2332 -- Runtime Function: accum __satfractusasa (unsigned accum A)
2333 -- Runtime Function: long accum __satfractusada (unsigned accum A)
2334 -- Runtime Function: long long accum __satfractusata (unsigned accum A)
2335 -- Runtime Function: unsigned short fract __satfractusauqq (unsigned
2336          accum A)
2337 -- Runtime Function: unsigned fract __satfractusauhq (unsigned accum A)
2338 -- Runtime Function: unsigned long fract __satfractusausq (unsigned
2339          accum A)
2340 -- Runtime Function: unsigned long long fract __satfractusaudq
2341          (unsigned accum A)
2342 -- Runtime Function: unsigned short accum __satfractusauha2 (unsigned
2343          accum A)
2344 -- Runtime Function: unsigned long accum __satfractusauda2 (unsigned
2345          accum A)
2346 -- Runtime Function: unsigned long long accum __satfractusauta2
2347          (unsigned accum A)
2348 -- Runtime Function: short fract __satfractudaqq (unsigned long accum
2349          A)
2350 -- Runtime Function: fract __satfractudahq (unsigned long accum A)
2351 -- Runtime Function: long fract __satfractudasq (unsigned long accum A)
2352 -- Runtime Function: long long fract __satfractudadq (unsigned long
2353          accum A)
2354 -- Runtime Function: short accum __satfractudaha (unsigned long accum
2355          A)
2356 -- Runtime Function: accum __satfractudasa (unsigned long accum A)
2357 -- Runtime Function: long accum __satfractudada (unsigned long accum A)
2358 -- Runtime Function: long long accum __satfractudata (unsigned long
2359          accum A)
2360 -- Runtime Function: unsigned short fract __satfractudauqq (unsigned
2361          long accum A)
2362 -- Runtime Function: unsigned fract __satfractudauhq (unsigned long
2363          accum A)
2364 -- Runtime Function: unsigned long fract __satfractudausq (unsigned
2365          long accum A)
2366 -- Runtime Function: unsigned long long fract __satfractudaudq
2367          (unsigned long accum A)
2368 -- Runtime Function: unsigned short accum __satfractudauha2 (unsigned
2369          long accum A)
2370 -- Runtime Function: unsigned accum __satfractudausa2 (unsigned long
2371          accum A)
2372 -- Runtime Function: unsigned long long accum __satfractudauta2
2373          (unsigned long accum A)
2374 -- Runtime Function: short fract __satfractutaqq (unsigned long long
2375          accum A)
2376 -- Runtime Function: fract __satfractutahq (unsigned long long accum A)
2377 -- Runtime Function: long fract __satfractutasq (unsigned long long
2378          accum A)
2379 -- Runtime Function: long long fract __satfractutadq (unsigned long
2380          long accum A)
2381 -- Runtime Function: short accum __satfractutaha (unsigned long long
2382          accum A)
2383 -- Runtime Function: accum __satfractutasa (unsigned long long accum A)
2384 -- Runtime Function: long accum __satfractutada (unsigned long long
2385          accum A)
2386 -- Runtime Function: long long accum __satfractutata (unsigned long
2387          long accum A)
2388 -- Runtime Function: unsigned short fract __satfractutauqq (unsigned
2389          long long accum A)
2390 -- Runtime Function: unsigned fract __satfractutauhq (unsigned long
2391          long accum A)
2392 -- Runtime Function: unsigned long fract __satfractutausq (unsigned
2393          long long accum A)
2394 -- Runtime Function: unsigned long long fract __satfractutaudq
2395          (unsigned long long accum A)
2396 -- Runtime Function: unsigned short accum __satfractutauha2 (unsigned
2397          long long accum A)
2398 -- Runtime Function: unsigned accum __satfractutausa2 (unsigned long
2399          long accum A)
2400 -- Runtime Function: unsigned long accum __satfractutauda2 (unsigned
2401          long long accum A)
2402 -- Runtime Function: short fract __satfractqiqq (signed char A)
2403 -- Runtime Function: fract __satfractqihq (signed char A)
2404 -- Runtime Function: long fract __satfractqisq (signed char A)
2405 -- Runtime Function: long long fract __satfractqidq (signed char A)
2406 -- Runtime Function: short accum __satfractqiha (signed char A)
2407 -- Runtime Function: accum __satfractqisa (signed char A)
2408 -- Runtime Function: long accum __satfractqida (signed char A)
2409 -- Runtime Function: long long accum __satfractqita (signed char A)
2410 -- Runtime Function: unsigned short fract __satfractqiuqq (signed char
2411          A)
2412 -- Runtime Function: unsigned fract __satfractqiuhq (signed char A)
2413 -- Runtime Function: unsigned long fract __satfractqiusq (signed char
2414          A)
2415 -- Runtime Function: unsigned long long fract __satfractqiudq (signed
2416          char A)
2417 -- Runtime Function: unsigned short accum __satfractqiuha (signed char
2418          A)
2419 -- Runtime Function: unsigned accum __satfractqiusa (signed char A)
2420 -- Runtime Function: unsigned long accum __satfractqiuda (signed char
2421          A)
2422 -- Runtime Function: unsigned long long accum __satfractqiuta (signed
2423          char A)
2424 -- Runtime Function: short fract __satfracthiqq (short A)
2425 -- Runtime Function: fract __satfracthihq (short A)
2426 -- Runtime Function: long fract __satfracthisq (short A)
2427 -- Runtime Function: long long fract __satfracthidq (short A)
2428 -- Runtime Function: short accum __satfracthiha (short A)
2429 -- Runtime Function: accum __satfracthisa (short A)
2430 -- Runtime Function: long accum __satfracthida (short A)
2431 -- Runtime Function: long long accum __satfracthita (short A)
2432 -- Runtime Function: unsigned short fract __satfracthiuqq (short A)
2433 -- Runtime Function: unsigned fract __satfracthiuhq (short A)
2434 -- Runtime Function: unsigned long fract __satfracthiusq (short A)
2435 -- Runtime Function: unsigned long long fract __satfracthiudq (short A)
2436 -- Runtime Function: unsigned short accum __satfracthiuha (short A)
2437 -- Runtime Function: unsigned accum __satfracthiusa (short A)
2438 -- Runtime Function: unsigned long accum __satfracthiuda (short A)
2439 -- Runtime Function: unsigned long long accum __satfracthiuta (short A)
2440 -- Runtime Function: short fract __satfractsiqq (int A)
2441 -- Runtime Function: fract __satfractsihq (int A)
2442 -- Runtime Function: long fract __satfractsisq (int A)
2443 -- Runtime Function: long long fract __satfractsidq (int A)
2444 -- Runtime Function: short accum __satfractsiha (int A)
2445 -- Runtime Function: accum __satfractsisa (int A)
2446 -- Runtime Function: long accum __satfractsida (int A)
2447 -- Runtime Function: long long accum __satfractsita (int A)
2448 -- Runtime Function: unsigned short fract __satfractsiuqq (int A)
2449 -- Runtime Function: unsigned fract __satfractsiuhq (int A)
2450 -- Runtime Function: unsigned long fract __satfractsiusq (int A)
2451 -- Runtime Function: unsigned long long fract __satfractsiudq (int A)
2452 -- Runtime Function: unsigned short accum __satfractsiuha (int A)
2453 -- Runtime Function: unsigned accum __satfractsiusa (int A)
2454 -- Runtime Function: unsigned long accum __satfractsiuda (int A)
2455 -- Runtime Function: unsigned long long accum __satfractsiuta (int A)
2456 -- Runtime Function: short fract __satfractdiqq (long A)
2457 -- Runtime Function: fract __satfractdihq (long A)
2458 -- Runtime Function: long fract __satfractdisq (long A)
2459 -- Runtime Function: long long fract __satfractdidq (long A)
2460 -- Runtime Function: short accum __satfractdiha (long A)
2461 -- Runtime Function: accum __satfractdisa (long A)
2462 -- Runtime Function: long accum __satfractdida (long A)
2463 -- Runtime Function: long long accum __satfractdita (long A)
2464 -- Runtime Function: unsigned short fract __satfractdiuqq (long A)
2465 -- Runtime Function: unsigned fract __satfractdiuhq (long A)
2466 -- Runtime Function: unsigned long fract __satfractdiusq (long A)
2467 -- Runtime Function: unsigned long long fract __satfractdiudq (long A)
2468 -- Runtime Function: unsigned short accum __satfractdiuha (long A)
2469 -- Runtime Function: unsigned accum __satfractdiusa (long A)
2470 -- Runtime Function: unsigned long accum __satfractdiuda (long A)
2471 -- Runtime Function: unsigned long long accum __satfractdiuta (long A)
2472 -- Runtime Function: short fract __satfracttiqq (long long A)
2473 -- Runtime Function: fract __satfracttihq (long long A)
2474 -- Runtime Function: long fract __satfracttisq (long long A)
2475 -- Runtime Function: long long fract __satfracttidq (long long A)
2476 -- Runtime Function: short accum __satfracttiha (long long A)
2477 -- Runtime Function: accum __satfracttisa (long long A)
2478 -- Runtime Function: long accum __satfracttida (long long A)
2479 -- Runtime Function: long long accum __satfracttita (long long A)
2480 -- Runtime Function: unsigned short fract __satfracttiuqq (long long A)
2481 -- Runtime Function: unsigned fract __satfracttiuhq (long long A)
2482 -- Runtime Function: unsigned long fract __satfracttiusq (long long A)
2483 -- Runtime Function: unsigned long long fract __satfracttiudq (long
2484          long A)
2485 -- Runtime Function: unsigned short accum __satfracttiuha (long long A)
2486 -- Runtime Function: unsigned accum __satfracttiusa (long long A)
2487 -- Runtime Function: unsigned long accum __satfracttiuda (long long A)
2488 -- Runtime Function: unsigned long long accum __satfracttiuta (long
2489          long A)
2490 -- Runtime Function: short fract __satfractsfqq (float A)
2491 -- Runtime Function: fract __satfractsfhq (float A)
2492 -- Runtime Function: long fract __satfractsfsq (float A)
2493 -- Runtime Function: long long fract __satfractsfdq (float A)
2494 -- Runtime Function: short accum __satfractsfha (float A)
2495 -- Runtime Function: accum __satfractsfsa (float A)
2496 -- Runtime Function: long accum __satfractsfda (float A)
2497 -- Runtime Function: long long accum __satfractsfta (float A)
2498 -- Runtime Function: unsigned short fract __satfractsfuqq (float A)
2499 -- Runtime Function: unsigned fract __satfractsfuhq (float A)
2500 -- Runtime Function: unsigned long fract __satfractsfusq (float A)
2501 -- Runtime Function: unsigned long long fract __satfractsfudq (float A)
2502 -- Runtime Function: unsigned short accum __satfractsfuha (float A)
2503 -- Runtime Function: unsigned accum __satfractsfusa (float A)
2504 -- Runtime Function: unsigned long accum __satfractsfuda (float A)
2505 -- Runtime Function: unsigned long long accum __satfractsfuta (float A)
2506 -- Runtime Function: short fract __satfractdfqq (double A)
2507 -- Runtime Function: fract __satfractdfhq (double A)
2508 -- Runtime Function: long fract __satfractdfsq (double A)
2509 -- Runtime Function: long long fract __satfractdfdq (double A)
2510 -- Runtime Function: short accum __satfractdfha (double A)
2511 -- Runtime Function: accum __satfractdfsa (double A)
2512 -- Runtime Function: long accum __satfractdfda (double A)
2513 -- Runtime Function: long long accum __satfractdfta (double A)
2514 -- Runtime Function: unsigned short fract __satfractdfuqq (double A)
2515 -- Runtime Function: unsigned fract __satfractdfuhq (double A)
2516 -- Runtime Function: unsigned long fract __satfractdfusq (double A)
2517 -- Runtime Function: unsigned long long fract __satfractdfudq (double
2518          A)
2519 -- Runtime Function: unsigned short accum __satfractdfuha (double A)
2520 -- Runtime Function: unsigned accum __satfractdfusa (double A)
2521 -- Runtime Function: unsigned long accum __satfractdfuda (double A)
2522 -- Runtime Function: unsigned long long accum __satfractdfuta (double
2523          A)
2524     The functions convert from fractional and signed non-fractionals to
2525     fractionals, with saturation.
2526
2527 -- Runtime Function: unsigned char __fractunsqqqi (short fract A)
2528 -- Runtime Function: unsigned short __fractunsqqhi (short fract A)
2529 -- Runtime Function: unsigned int __fractunsqqsi (short fract A)
2530 -- Runtime Function: unsigned long __fractunsqqdi (short fract A)
2531 -- Runtime Function: unsigned long long __fractunsqqti (short fract A)
2532 -- Runtime Function: unsigned char __fractunshqqi (fract A)
2533 -- Runtime Function: unsigned short __fractunshqhi (fract A)
2534 -- Runtime Function: unsigned int __fractunshqsi (fract A)
2535 -- Runtime Function: unsigned long __fractunshqdi (fract A)
2536 -- Runtime Function: unsigned long long __fractunshqti (fract A)
2537 -- Runtime Function: unsigned char __fractunssqqi (long fract A)
2538 -- Runtime Function: unsigned short __fractunssqhi (long fract A)
2539 -- Runtime Function: unsigned int __fractunssqsi (long fract A)
2540 -- Runtime Function: unsigned long __fractunssqdi (long fract A)
2541 -- Runtime Function: unsigned long long __fractunssqti (long fract A)
2542 -- Runtime Function: unsigned char __fractunsdqqi (long long fract A)
2543 -- Runtime Function: unsigned short __fractunsdqhi (long long fract A)
2544 -- Runtime Function: unsigned int __fractunsdqsi (long long fract A)
2545 -- Runtime Function: unsigned long __fractunsdqdi (long long fract A)
2546 -- Runtime Function: unsigned long long __fractunsdqti (long long fract
2547          A)
2548 -- Runtime Function: unsigned char __fractunshaqi (short accum A)
2549 -- Runtime Function: unsigned short __fractunshahi (short accum A)
2550 -- Runtime Function: unsigned int __fractunshasi (short accum A)
2551 -- Runtime Function: unsigned long __fractunshadi (short accum A)
2552 -- Runtime Function: unsigned long long __fractunshati (short accum A)
2553 -- Runtime Function: unsigned char __fractunssaqi (accum A)
2554 -- Runtime Function: unsigned short __fractunssahi (accum A)
2555 -- Runtime Function: unsigned int __fractunssasi (accum A)
2556 -- Runtime Function: unsigned long __fractunssadi (accum A)
2557 -- Runtime Function: unsigned long long __fractunssati (accum A)
2558 -- Runtime Function: unsigned char __fractunsdaqi (long accum A)
2559 -- Runtime Function: unsigned short __fractunsdahi (long accum A)
2560 -- Runtime Function: unsigned int __fractunsdasi (long accum A)
2561 -- Runtime Function: unsigned long __fractunsdadi (long accum A)
2562 -- Runtime Function: unsigned long long __fractunsdati (long accum A)
2563 -- Runtime Function: unsigned char __fractunstaqi (long long accum A)
2564 -- Runtime Function: unsigned short __fractunstahi (long long accum A)
2565 -- Runtime Function: unsigned int __fractunstasi (long long accum A)
2566 -- Runtime Function: unsigned long __fractunstadi (long long accum A)
2567 -- Runtime Function: unsigned long long __fractunstati (long long accum
2568          A)
2569 -- Runtime Function: unsigned char __fractunsuqqqi (unsigned short
2570          fract A)
2571 -- Runtime Function: unsigned short __fractunsuqqhi (unsigned short
2572          fract A)
2573 -- Runtime Function: unsigned int __fractunsuqqsi (unsigned short fract
2574          A)
2575 -- Runtime Function: unsigned long __fractunsuqqdi (unsigned short
2576          fract A)
2577 -- Runtime Function: unsigned long long __fractunsuqqti (unsigned short
2578          fract A)
2579 -- Runtime Function: unsigned char __fractunsuhqqi (unsigned fract A)
2580 -- Runtime Function: unsigned short __fractunsuhqhi (unsigned fract A)
2581 -- Runtime Function: unsigned int __fractunsuhqsi (unsigned fract A)
2582 -- Runtime Function: unsigned long __fractunsuhqdi (unsigned fract A)
2583 -- Runtime Function: unsigned long long __fractunsuhqti (unsigned fract
2584          A)
2585 -- Runtime Function: unsigned char __fractunsusqqi (unsigned long fract
2586          A)
2587 -- Runtime Function: unsigned short __fractunsusqhi (unsigned long
2588          fract A)
2589 -- Runtime Function: unsigned int __fractunsusqsi (unsigned long fract
2590          A)
2591 -- Runtime Function: unsigned long __fractunsusqdi (unsigned long fract
2592          A)
2593 -- Runtime Function: unsigned long long __fractunsusqti (unsigned long
2594          fract A)
2595 -- Runtime Function: unsigned char __fractunsudqqi (unsigned long long
2596          fract A)
2597 -- Runtime Function: unsigned short __fractunsudqhi (unsigned long long
2598          fract A)
2599 -- Runtime Function: unsigned int __fractunsudqsi (unsigned long long
2600          fract A)
2601 -- Runtime Function: unsigned long __fractunsudqdi (unsigned long long
2602          fract A)
2603 -- Runtime Function: unsigned long long __fractunsudqti (unsigned long
2604          long fract A)
2605 -- Runtime Function: unsigned char __fractunsuhaqi (unsigned short
2606          accum A)
2607 -- Runtime Function: unsigned short __fractunsuhahi (unsigned short
2608          accum A)
2609 -- Runtime Function: unsigned int __fractunsuhasi (unsigned short accum
2610          A)
2611 -- Runtime Function: unsigned long __fractunsuhadi (unsigned short
2612          accum A)
2613 -- Runtime Function: unsigned long long __fractunsuhati (unsigned short
2614          accum A)
2615 -- Runtime Function: unsigned char __fractunsusaqi (unsigned accum A)
2616 -- Runtime Function: unsigned short __fractunsusahi (unsigned accum A)
2617 -- Runtime Function: unsigned int __fractunsusasi (unsigned accum A)
2618 -- Runtime Function: unsigned long __fractunsusadi (unsigned accum A)
2619 -- Runtime Function: unsigned long long __fractunsusati (unsigned accum
2620          A)
2621 -- Runtime Function: unsigned char __fractunsudaqi (unsigned long accum
2622          A)
2623 -- Runtime Function: unsigned short __fractunsudahi (unsigned long
2624          accum A)
2625 -- Runtime Function: unsigned int __fractunsudasi (unsigned long accum
2626          A)
2627 -- Runtime Function: unsigned long __fractunsudadi (unsigned long accum
2628          A)
2629 -- Runtime Function: unsigned long long __fractunsudati (unsigned long
2630          accum A)
2631 -- Runtime Function: unsigned char __fractunsutaqi (unsigned long long
2632          accum A)
2633 -- Runtime Function: unsigned short __fractunsutahi (unsigned long long
2634          accum A)
2635 -- Runtime Function: unsigned int __fractunsutasi (unsigned long long
2636          accum A)
2637 -- Runtime Function: unsigned long __fractunsutadi (unsigned long long
2638          accum A)
2639 -- Runtime Function: unsigned long long __fractunsutati (unsigned long
2640          long accum A)
2641 -- Runtime Function: short fract __fractunsqiqq (unsigned char A)
2642 -- Runtime Function: fract __fractunsqihq (unsigned char A)
2643 -- Runtime Function: long fract __fractunsqisq (unsigned char A)
2644 -- Runtime Function: long long fract __fractunsqidq (unsigned char A)
2645 -- Runtime Function: short accum __fractunsqiha (unsigned char A)
2646 -- Runtime Function: accum __fractunsqisa (unsigned char A)
2647 -- Runtime Function: long accum __fractunsqida (unsigned char A)
2648 -- Runtime Function: long long accum __fractunsqita (unsigned char A)
2649 -- Runtime Function: unsigned short fract __fractunsqiuqq (unsigned
2650          char A)
2651 -- Runtime Function: unsigned fract __fractunsqiuhq (unsigned char A)
2652 -- Runtime Function: unsigned long fract __fractunsqiusq (unsigned char
2653          A)
2654 -- Runtime Function: unsigned long long fract __fractunsqiudq (unsigned
2655          char A)
2656 -- Runtime Function: unsigned short accum __fractunsqiuha (unsigned
2657          char A)
2658 -- Runtime Function: unsigned accum __fractunsqiusa (unsigned char A)
2659 -- Runtime Function: unsigned long accum __fractunsqiuda (unsigned char
2660          A)
2661 -- Runtime Function: unsigned long long accum __fractunsqiuta (unsigned
2662          char A)
2663 -- Runtime Function: short fract __fractunshiqq (unsigned short A)
2664 -- Runtime Function: fract __fractunshihq (unsigned short A)
2665 -- Runtime Function: long fract __fractunshisq (unsigned short A)
2666 -- Runtime Function: long long fract __fractunshidq (unsigned short A)
2667 -- Runtime Function: short accum __fractunshiha (unsigned short A)
2668 -- Runtime Function: accum __fractunshisa (unsigned short A)
2669 -- Runtime Function: long accum __fractunshida (unsigned short A)
2670 -- Runtime Function: long long accum __fractunshita (unsigned short A)
2671 -- Runtime Function: unsigned short fract __fractunshiuqq (unsigned
2672          short A)
2673 -- Runtime Function: unsigned fract __fractunshiuhq (unsigned short A)
2674 -- Runtime Function: unsigned long fract __fractunshiusq (unsigned
2675          short A)
2676 -- Runtime Function: unsigned long long fract __fractunshiudq (unsigned
2677          short A)
2678 -- Runtime Function: unsigned short accum __fractunshiuha (unsigned
2679          short A)
2680 -- Runtime Function: unsigned accum __fractunshiusa (unsigned short A)
2681 -- Runtime Function: unsigned long accum __fractunshiuda (unsigned
2682          short A)
2683 -- Runtime Function: unsigned long long accum __fractunshiuta (unsigned
2684          short A)
2685 -- Runtime Function: short fract __fractunssiqq (unsigned int A)
2686 -- Runtime Function: fract __fractunssihq (unsigned int A)
2687 -- Runtime Function: long fract __fractunssisq (unsigned int A)
2688 -- Runtime Function: long long fract __fractunssidq (unsigned int A)
2689 -- Runtime Function: short accum __fractunssiha (unsigned int A)
2690 -- Runtime Function: accum __fractunssisa (unsigned int A)
2691 -- Runtime Function: long accum __fractunssida (unsigned int A)
2692 -- Runtime Function: long long accum __fractunssita (unsigned int A)
2693 -- Runtime Function: unsigned short fract __fractunssiuqq (unsigned int
2694          A)
2695 -- Runtime Function: unsigned fract __fractunssiuhq (unsigned int A)
2696 -- Runtime Function: unsigned long fract __fractunssiusq (unsigned int
2697          A)
2698 -- Runtime Function: unsigned long long fract __fractunssiudq (unsigned
2699          int A)
2700 -- Runtime Function: unsigned short accum __fractunssiuha (unsigned int
2701          A)
2702 -- Runtime Function: unsigned accum __fractunssiusa (unsigned int A)
2703 -- Runtime Function: unsigned long accum __fractunssiuda (unsigned int
2704          A)
2705 -- Runtime Function: unsigned long long accum __fractunssiuta (unsigned
2706          int A)
2707 -- Runtime Function: short fract __fractunsdiqq (unsigned long A)
2708 -- Runtime Function: fract __fractunsdihq (unsigned long A)
2709 -- Runtime Function: long fract __fractunsdisq (unsigned long A)
2710 -- Runtime Function: long long fract __fractunsdidq (unsigned long A)
2711 -- Runtime Function: short accum __fractunsdiha (unsigned long A)
2712 -- Runtime Function: accum __fractunsdisa (unsigned long A)
2713 -- Runtime Function: long accum __fractunsdida (unsigned long A)
2714 -- Runtime Function: long long accum __fractunsdita (unsigned long A)
2715 -- Runtime Function: unsigned short fract __fractunsdiuqq (unsigned
2716          long A)
2717 -- Runtime Function: unsigned fract __fractunsdiuhq (unsigned long A)
2718 -- Runtime Function: unsigned long fract __fractunsdiusq (unsigned long
2719          A)
2720 -- Runtime Function: unsigned long long fract __fractunsdiudq (unsigned
2721          long A)
2722 -- Runtime Function: unsigned short accum __fractunsdiuha (unsigned
2723          long A)
2724 -- Runtime Function: unsigned accum __fractunsdiusa (unsigned long A)
2725 -- Runtime Function: unsigned long accum __fractunsdiuda (unsigned long
2726          A)
2727 -- Runtime Function: unsigned long long accum __fractunsdiuta (unsigned
2728          long A)
2729 -- Runtime Function: short fract __fractunstiqq (unsigned long long A)
2730 -- Runtime Function: fract __fractunstihq (unsigned long long A)
2731 -- Runtime Function: long fract __fractunstisq (unsigned long long A)
2732 -- Runtime Function: long long fract __fractunstidq (unsigned long long
2733          A)
2734 -- Runtime Function: short accum __fractunstiha (unsigned long long A)
2735 -- Runtime Function: accum __fractunstisa (unsigned long long A)
2736 -- Runtime Function: long accum __fractunstida (unsigned long long A)
2737 -- Runtime Function: long long accum __fractunstita (unsigned long long
2738          A)
2739 -- Runtime Function: unsigned short fract __fractunstiuqq (unsigned
2740          long long A)
2741 -- Runtime Function: unsigned fract __fractunstiuhq (unsigned long long
2742          A)
2743 -- Runtime Function: unsigned long fract __fractunstiusq (unsigned long
2744          long A)
2745 -- Runtime Function: unsigned long long fract __fractunstiudq (unsigned
2746          long long A)
2747 -- Runtime Function: unsigned short accum __fractunstiuha (unsigned
2748          long long A)
2749 -- Runtime Function: unsigned accum __fractunstiusa (unsigned long long
2750          A)
2751 -- Runtime Function: unsigned long accum __fractunstiuda (unsigned long
2752          long A)
2753 -- Runtime Function: unsigned long long accum __fractunstiuta (unsigned
2754          long long A)
2755     These functions convert from fractionals to unsigned
2756     non-fractionals; and from unsigned non-fractionals to fractionals,
2757     without saturation.
2758
2759 -- Runtime Function: short fract __satfractunsqiqq (unsigned char A)
2760 -- Runtime Function: fract __satfractunsqihq (unsigned char A)
2761 -- Runtime Function: long fract __satfractunsqisq (unsigned char A)
2762 -- Runtime Function: long long fract __satfractunsqidq (unsigned char
2763          A)
2764 -- Runtime Function: short accum __satfractunsqiha (unsigned char A)
2765 -- Runtime Function: accum __satfractunsqisa (unsigned char A)
2766 -- Runtime Function: long accum __satfractunsqida (unsigned char A)
2767 -- Runtime Function: long long accum __satfractunsqita (unsigned char
2768          A)
2769 -- Runtime Function: unsigned short fract __satfractunsqiuqq (unsigned
2770          char A)
2771 -- Runtime Function: unsigned fract __satfractunsqiuhq (unsigned char
2772          A)
2773 -- Runtime Function: unsigned long fract __satfractunsqiusq (unsigned
2774          char A)
2775 -- Runtime Function: unsigned long long fract __satfractunsqiudq
2776          (unsigned char A)
2777 -- Runtime Function: unsigned short accum __satfractunsqiuha (unsigned
2778          char A)
2779 -- Runtime Function: unsigned accum __satfractunsqiusa (unsigned char
2780          A)
2781 -- Runtime Function: unsigned long accum __satfractunsqiuda (unsigned
2782          char A)
2783 -- Runtime Function: unsigned long long accum __satfractunsqiuta
2784          (unsigned char A)
2785 -- Runtime Function: short fract __satfractunshiqq (unsigned short A)
2786 -- Runtime Function: fract __satfractunshihq (unsigned short A)
2787 -- Runtime Function: long fract __satfractunshisq (unsigned short A)
2788 -- Runtime Function: long long fract __satfractunshidq (unsigned short
2789          A)
2790 -- Runtime Function: short accum __satfractunshiha (unsigned short A)
2791 -- Runtime Function: accum __satfractunshisa (unsigned short A)
2792 -- Runtime Function: long accum __satfractunshida (unsigned short A)
2793 -- Runtime Function: long long accum __satfractunshita (unsigned short
2794          A)
2795 -- Runtime Function: unsigned short fract __satfractunshiuqq (unsigned
2796          short A)
2797 -- Runtime Function: unsigned fract __satfractunshiuhq (unsigned short
2798          A)
2799 -- Runtime Function: unsigned long fract __satfractunshiusq (unsigned
2800          short A)
2801 -- Runtime Function: unsigned long long fract __satfractunshiudq
2802          (unsigned short A)
2803 -- Runtime Function: unsigned short accum __satfractunshiuha (unsigned
2804          short A)
2805 -- Runtime Function: unsigned accum __satfractunshiusa (unsigned short
2806          A)
2807 -- Runtime Function: unsigned long accum __satfractunshiuda (unsigned
2808          short A)
2809 -- Runtime Function: unsigned long long accum __satfractunshiuta
2810          (unsigned short A)
2811 -- Runtime Function: short fract __satfractunssiqq (unsigned int A)
2812 -- Runtime Function: fract __satfractunssihq (unsigned int A)
2813 -- Runtime Function: long fract __satfractunssisq (unsigned int A)
2814 -- Runtime Function: long long fract __satfractunssidq (unsigned int A)
2815 -- Runtime Function: short accum __satfractunssiha (unsigned int A)
2816 -- Runtime Function: accum __satfractunssisa (unsigned int A)
2817 -- Runtime Function: long accum __satfractunssida (unsigned int A)
2818 -- Runtime Function: long long accum __satfractunssita (unsigned int A)
2819 -- Runtime Function: unsigned short fract __satfractunssiuqq (unsigned
2820          int A)
2821 -- Runtime Function: unsigned fract __satfractunssiuhq (unsigned int A)
2822 -- Runtime Function: unsigned long fract __satfractunssiusq (unsigned
2823          int A)
2824 -- Runtime Function: unsigned long long fract __satfractunssiudq
2825          (unsigned int A)
2826 -- Runtime Function: unsigned short accum __satfractunssiuha (unsigned
2827          int A)
2828 -- Runtime Function: unsigned accum __satfractunssiusa (unsigned int A)
2829 -- Runtime Function: unsigned long accum __satfractunssiuda (unsigned
2830          int A)
2831 -- Runtime Function: unsigned long long accum __satfractunssiuta
2832          (unsigned int A)
2833 -- Runtime Function: short fract __satfractunsdiqq (unsigned long A)
2834 -- Runtime Function: fract __satfractunsdihq (unsigned long A)
2835 -- Runtime Function: long fract __satfractunsdisq (unsigned long A)
2836 -- Runtime Function: long long fract __satfractunsdidq (unsigned long
2837          A)
2838 -- Runtime Function: short accum __satfractunsdiha (unsigned long A)
2839 -- Runtime Function: accum __satfractunsdisa (unsigned long A)
2840 -- Runtime Function: long accum __satfractunsdida (unsigned long A)
2841 -- Runtime Function: long long accum __satfractunsdita (unsigned long
2842          A)
2843 -- Runtime Function: unsigned short fract __satfractunsdiuqq (unsigned
2844          long A)
2845 -- Runtime Function: unsigned fract __satfractunsdiuhq (unsigned long
2846          A)
2847 -- Runtime Function: unsigned long fract __satfractunsdiusq (unsigned
2848          long A)
2849 -- Runtime Function: unsigned long long fract __satfractunsdiudq
2850          (unsigned long A)
2851 -- Runtime Function: unsigned short accum __satfractunsdiuha (unsigned
2852          long A)
2853 -- Runtime Function: unsigned accum __satfractunsdiusa (unsigned long
2854          A)
2855 -- Runtime Function: unsigned long accum __satfractunsdiuda (unsigned
2856          long A)
2857 -- Runtime Function: unsigned long long accum __satfractunsdiuta
2858          (unsigned long A)
2859 -- Runtime Function: short fract __satfractunstiqq (unsigned long long
2860          A)
2861 -- Runtime Function: fract __satfractunstihq (unsigned long long A)
2862 -- Runtime Function: long fract __satfractunstisq (unsigned long long
2863          A)
2864 -- Runtime Function: long long fract __satfractunstidq (unsigned long
2865          long A)
2866 -- Runtime Function: short accum __satfractunstiha (unsigned long long
2867          A)
2868 -- Runtime Function: accum __satfractunstisa (unsigned long long A)
2869 -- Runtime Function: long accum __satfractunstida (unsigned long long
2870          A)
2871 -- Runtime Function: long long accum __satfractunstita (unsigned long
2872          long A)
2873 -- Runtime Function: unsigned short fract __satfractunstiuqq (unsigned
2874          long long A)
2875 -- Runtime Function: unsigned fract __satfractunstiuhq (unsigned long
2876          long A)
2877 -- Runtime Function: unsigned long fract __satfractunstiusq (unsigned
2878          long long A)
2879 -- Runtime Function: unsigned long long fract __satfractunstiudq
2880          (unsigned long long A)
2881 -- Runtime Function: unsigned short accum __satfractunstiuha (unsigned
2882          long long A)
2883 -- Runtime Function: unsigned accum __satfractunstiusa (unsigned long
2884          long A)
2885 -- Runtime Function: unsigned long accum __satfractunstiuda (unsigned
2886          long long A)
2887 -- Runtime Function: unsigned long long accum __satfractunstiuta
2888          (unsigned long long A)
2889     These functions convert from unsigned non-fractionals to
2890     fractionals, with saturation.
2891
2892
2893File: gccint.info,  Node: Exception handling routines,  Next: Miscellaneous routines,  Prev: Fixed-point fractional library routines,  Up: Libgcc
2894
28954.5 Language-independent routines for exception handling
2896========================================================
2897
2898document me!
2899
2900       _Unwind_DeleteException
2901       _Unwind_Find_FDE
2902       _Unwind_ForcedUnwind
2903       _Unwind_GetGR
2904       _Unwind_GetIP
2905       _Unwind_GetLanguageSpecificData
2906       _Unwind_GetRegionStart
2907       _Unwind_GetTextRelBase
2908       _Unwind_GetDataRelBase
2909       _Unwind_RaiseException
2910       _Unwind_Resume
2911       _Unwind_SetGR
2912       _Unwind_SetIP
2913       _Unwind_FindEnclosingFunction
2914       _Unwind_SjLj_Register
2915       _Unwind_SjLj_Unregister
2916       _Unwind_SjLj_RaiseException
2917       _Unwind_SjLj_ForcedUnwind
2918       _Unwind_SjLj_Resume
2919       __deregister_frame
2920       __deregister_frame_info
2921       __deregister_frame_info_bases
2922       __register_frame
2923       __register_frame_info
2924       __register_frame_info_bases
2925       __register_frame_info_table
2926       __register_frame_info_table_bases
2927       __register_frame_table
2928
2929
2930File: gccint.info,  Node: Miscellaneous routines,  Prev: Exception handling routines,  Up: Libgcc
2931
29324.6 Miscellaneous runtime library routines
2933==========================================
2934
29354.6.1 Cache control functions
2936-----------------------------
2937
2938 -- Runtime Function: void __clear_cache (char *BEG, char *END)
2939     This function clears the instruction cache between BEG and END.
2940
29414.6.2 Split stack functions and variables
2942-----------------------------------------
2943
2944 -- Runtime Function: void * __splitstack_find (void *SEGMENT_ARG, void
2945          *SP, size_t LEN, void **NEXT_SEGMENT, void **NEXT_SP, void
2946          **INITIAL_SP)
2947     When using '-fsplit-stack', this call may be used to iterate over
2948     the stack segments.  It may be called like this:
2949            void *next_segment = NULL;
2950            void *next_sp = NULL;
2951            void *initial_sp = NULL;
2952            void *stack;
2953            size_t stack_size;
2954            while ((stack = __splitstack_find (next_segment, next_sp,
2955                                               &stack_size, &next_segment,
2956                                               &next_sp, &initial_sp))
2957                   != NULL)
2958              {
2959                /* Stack segment starts at stack and is
2960                   stack_size bytes long.  */
2961              }
2962
2963     There is no way to iterate over the stack segments of a different
2964     thread.  However, what is permitted is for one thread to call this
2965     with the SEGMENT_ARG and SP arguments NULL, to pass NEXT_SEGMENT,
2966     NEXT_SP, and INITIAL_SP to a different thread, and then to suspend
2967     one way or another.  A different thread may run the subsequent
2968     '__splitstack_find' iterations.  Of course, this will only work if
2969     the first thread is suspended while the second thread is calling
2970     '__splitstack_find'.  If not, the second thread could be looking at
2971     the stack while it is changing, and anything could happen.
2972
2973 -- Variable: __morestack_segments
2974 -- Variable: __morestack_current_segment
2975 -- Variable: __morestack_initial_sp
2976     Internal variables used by the '-fsplit-stack' implementation.
2977
2978
2979File: gccint.info,  Node: Languages,  Next: Source Tree,  Prev: Libgcc,  Up: Top
2980
29815 Language Front Ends in GCC
2982****************************
2983
2984The interface to front ends for languages in GCC, and in particular the
2985'tree' structure (*note GENERIC::), was initially designed for C, and
2986many aspects of it are still somewhat biased towards C and C-like
2987languages.  It is, however, reasonably well suited to other procedural
2988languages, and front ends for many such languages have been written for
2989GCC.
2990
2991 Writing a compiler as a front end for GCC, rather than compiling
2992directly to assembler or generating C code which is then compiled by
2993GCC, has several advantages:
2994
2995   * GCC front ends benefit from the support for many different target
2996     machines already present in GCC.
2997   * GCC front ends benefit from all the optimizations in GCC.  Some of
2998     these, such as alias analysis, may work better when GCC is
2999     compiling directly from source code then when it is compiling from
3000     generated C code.
3001   * Better debugging information is generated when compiling directly
3002     from source code than when going via intermediate generated C code.
3003
3004 Because of the advantages of writing a compiler as a GCC front end, GCC
3005front ends have also been created for languages very different from
3006those for which GCC was designed, such as the declarative
3007logic/functional language Mercury.  For these reasons, it may also be
3008useful to implement compilers created for specialized purposes (for
3009example, as part of a research project) as GCC front ends.
3010
3011
3012File: gccint.info,  Node: Source Tree,  Next: Testsuites,  Prev: Languages,  Up: Top
3013
30146 Source Tree Structure and Build System
3015****************************************
3016
3017This chapter describes the structure of the GCC source tree, and how GCC
3018is built.  The user documentation for building and installing GCC is in
3019a separate manual (<http://gcc.gnu.org/install/>), with which it is
3020presumed that you are familiar.
3021
3022* Menu:
3023
3024* Configure Terms:: Configuration terminology and history.
3025* Top Level::       The top level source directory.
3026* gcc Directory::   The 'gcc' subdirectory.
3027
3028
3029File: gccint.info,  Node: Configure Terms,  Next: Top Level,  Up: Source Tree
3030
30316.1 Configure Terms and History
3032===============================
3033
3034The configure and build process has a long and colorful history, and can
3035be confusing to anyone who doesn't know why things are the way they are.
3036While there are other documents which describe the configuration process
3037in detail, here are a few things that everyone working on GCC should
3038know.
3039
3040 There are three system names that the build knows about: the machine
3041you are building on ("build"), the machine that you are building for
3042("host"), and the machine that GCC will produce code for ("target").
3043When you configure GCC, you specify these with '--build=', '--host=',
3044and '--target='.
3045
3046 Specifying the host without specifying the build should be avoided, as
3047'configure' may (and once did) assume that the host you specify is also
3048the build, which may not be true.
3049
3050 If build, host, and target are all the same, this is called a "native".
3051If build and host are the same but target is different, this is called a
3052"cross".  If build, host, and target are all different this is called a
3053"canadian" (for obscure reasons dealing with Canada's political party
3054and the background of the person working on the build at that time).  If
3055host and target are the same, but build is different, you are using a
3056cross-compiler to build a native for a different system.  Some people
3057call this a "host-x-host", "crossed native", or "cross-built native".
3058If build and target are the same, but host is different, you are using a
3059cross compiler to build a cross compiler that produces code for the
3060machine you're building on.  This is rare, so there is no common way of
3061describing it.  There is a proposal to call this a "crossback".
3062
3063 If build and host are the same, the GCC you are building will also be
3064used to build the target libraries (like 'libstdc++').  If build and
3065host are different, you must have already built and installed a cross
3066compiler that will be used to build the target libraries (if you
3067configured with '--target=foo-bar', this compiler will be called
3068'foo-bar-gcc').
3069
3070 In the case of target libraries, the machine you're building for is the
3071machine you specified with '--target'.  So, build is the machine you're
3072building on (no change there), host is the machine you're building for
3073(the target libraries are built for the target, so host is the target
3074you specified), and target doesn't apply (because you're not building a
3075compiler, you're building libraries).  The configure/make process will
3076adjust these variables as needed.  It also sets '$with_cross_host' to
3077the original '--host' value in case you need it.
3078
3079 The 'libiberty' support library is built up to three times: once for
3080the host, once for the target (even if they are the same), and once for
3081the build if build and host are different.  This allows it to be used by
3082all programs which are generated in the course of the build process.
3083
3084
3085File: gccint.info,  Node: Top Level,  Next: gcc Directory,  Prev: Configure Terms,  Up: Source Tree
3086
30876.2 Top Level Source Directory
3088==============================
3089
3090The top level source directory in a GCC distribution contains several
3091files and directories that are shared with other software distributions
3092such as that of GNU Binutils.  It also contains several subdirectories
3093that contain parts of GCC and its runtime libraries:
3094
3095'boehm-gc'
3096     The Boehm conservative garbage collector, optionally used as part
3097     of the ObjC runtime library when configured with
3098     '--enable-objc-gc'.
3099
3100'config'
3101     Autoconf macros and Makefile fragments used throughout the tree.
3102
3103'contrib'
3104     Contributed scripts that may be found useful in conjunction with
3105     GCC.  One of these, 'contrib/texi2pod.pl', is used to generate man
3106     pages from Texinfo manuals as part of the GCC build process.
3107
3108'fixincludes'
3109     The support for fixing system headers to work with GCC.  See
3110     'fixincludes/README' for more information.  The headers fixed by
3111     this mechanism are installed in 'LIBSUBDIR/include-fixed'.  Along
3112     with those headers, 'README-fixinc' is also installed, as
3113     'LIBSUBDIR/include-fixed/README'.
3114
3115'gcc'
3116     The main sources of GCC itself (except for runtime libraries),
3117     including optimizers, support for different target architectures,
3118     language front ends, and testsuites.  *Note The 'gcc' Subdirectory:
3119     gcc Directory, for details.
3120
3121'gnattools'
3122     Support tools for GNAT.
3123
3124'include'
3125     Headers for the 'libiberty' library.
3126
3127'intl'
3128     GNU 'libintl', from GNU 'gettext', for systems which do not include
3129     it in 'libc'.
3130
3131'libada'
3132     The Ada runtime library.
3133
3134'libatomic'
3135     The runtime support library for atomic operations (e.g. for
3136     '__sync' and '__atomic').
3137
3138'libcpp'
3139     The C preprocessor library.
3140
3141'libdecnumber'
3142     The Decimal Float support library.
3143
3144'libffi'
3145     The 'libffi' library, used as part of the Go runtime library.
3146
3147'libgcc'
3148     The GCC runtime library.
3149
3150'libgfortran'
3151     The Fortran runtime library.
3152
3153'libgo'
3154     The Go runtime library.  The bulk of this library is mirrored from
3155     the master Go repository (https://github.com/golang/go).
3156
3157'libgomp'
3158     The GNU Offloading and Multi Processing Runtime Library.
3159
3160'libiberty'
3161     The 'libiberty' library, used for portability and for some
3162     generally useful data structures and algorithms.  *Note
3163     Introduction: (libiberty)Top, for more information about this
3164     library.
3165
3166'libitm'
3167     The runtime support library for transactional memory.
3168
3169'libobjc'
3170     The Objective-C and Objective-C++ runtime library.
3171
3172'libquadmath'
3173     The runtime support library for quad-precision math operations.
3174
3175'libphobos'
3176     The D standard and runtime library.  The bulk of this library is
3177     mirrored from the master D repositories (https://github.com/dlang).
3178
3179'libssp'
3180     The Stack protector runtime library.
3181
3182'libstdc++-v3'
3183     The C++ runtime library.
3184
3185'lto-plugin'
3186     Plugin used by the linker if link-time optimizations are enabled.
3187
3188'maintainer-scripts'
3189     Scripts used by the 'gccadmin' account on 'gcc.gnu.org'.
3190
3191'zlib'
3192     The 'zlib' compression library, used for compressing and
3193     uncompressing GCC's intermediate language in LTO object files.
3194
3195 The build system in the top level directory, including how recursion
3196into subdirectories works and how building runtime libraries for
3197multilibs is handled, is documented in a separate manual, included with
3198GNU Binutils.  *Note GNU configure and build system: (configure)Top, for
3199details.
3200
3201
3202File: gccint.info,  Node: gcc Directory,  Prev: Top Level,  Up: Source Tree
3203
32046.3 The 'gcc' Subdirectory
3205==========================
3206
3207The 'gcc' directory contains many files that are part of the C sources
3208of GCC, other files used as part of the configuration and build process,
3209and subdirectories including documentation and a testsuite.  The files
3210that are sources of GCC are documented in a separate chapter.  *Note
3211Passes and Files of the Compiler: Passes.
3212
3213* Menu:
3214
3215* Subdirectories:: Subdirectories of 'gcc'.
3216* Configuration::  The configuration process, and the files it uses.
3217* Build::          The build system in the 'gcc' directory.
3218* Makefile::       Targets in 'gcc/Makefile'.
3219* Library Files::  Library source files and headers under 'gcc/'.
3220* Headers::        Headers installed by GCC.
3221* Documentation::  Building documentation in GCC.
3222* Front End::      Anatomy of a language front end.
3223* Back End::       Anatomy of a target back end.
3224
3225
3226File: gccint.info,  Node: Subdirectories,  Next: Configuration,  Up: gcc Directory
3227
32286.3.1 Subdirectories of 'gcc'
3229-----------------------------
3230
3231The 'gcc' directory contains the following subdirectories:
3232
3233'LANGUAGE'
3234     Subdirectories for various languages.  Directories containing a
3235     file 'config-lang.in' are language subdirectories.  The contents of
3236     the subdirectories 'c' (for C), 'cp' (for C++), 'objc' (for
3237     Objective-C), 'objcp' (for Objective-C++), and 'lto' (for LTO) are
3238     documented in this manual (*note Passes and Files of the Compiler:
3239     Passes.); those for other languages are not.  *Note Anatomy of a
3240     Language Front End: Front End, for details of the files in these
3241     directories.
3242
3243'common'
3244     Source files shared between the compiler drivers (such as 'gcc')
3245     and the compilers proper (such as 'cc1').  If an architecture
3246     defines target hooks shared between those places, it also has a
3247     subdirectory in 'common/config'.  *Note Target Structure::.
3248
3249'config'
3250     Configuration files for supported architectures and operating
3251     systems.  *Note Anatomy of a Target Back End: Back End, for details
3252     of the files in this directory.
3253
3254'doc'
3255     Texinfo documentation for GCC, together with automatically
3256     generated man pages and support for converting the installation
3257     manual to HTML.  *Note Documentation::.
3258
3259'ginclude'
3260     System headers installed by GCC, mainly those required by the C
3261     standard of freestanding implementations.  *Note Headers Installed
3262     by GCC: Headers, for details of when these and other headers are
3263     installed.
3264
3265'po'
3266     Message catalogs with translations of messages produced by GCC into
3267     various languages, 'LANGUAGE.po'.  This directory also contains
3268     'gcc.pot', the template for these message catalogues, 'exgettext',
3269     a wrapper around 'gettext' to extract the messages from the GCC
3270     sources and create 'gcc.pot', which is run by 'make gcc.pot', and
3271     'EXCLUDES', a list of files from which messages should not be
3272     extracted.
3273
3274'testsuite'
3275     The GCC testsuites (except for those for runtime libraries).  *Note
3276     Testsuites::.
3277
3278
3279File: gccint.info,  Node: Configuration,  Next: Build,  Prev: Subdirectories,  Up: gcc Directory
3280
32816.3.2 Configuration in the 'gcc' Directory
3282------------------------------------------
3283
3284The 'gcc' directory is configured with an Autoconf-generated script
3285'configure'.  The 'configure' script is generated from 'configure.ac'
3286and 'aclocal.m4'.  From the files 'configure.ac' and 'acconfig.h',
3287Autoheader generates the file 'config.in'.  The file 'cstamp-h.in' is
3288used as a timestamp.
3289
3290* Menu:
3291
3292* Config Fragments::     Scripts used by 'configure'.
3293* System Config::        The 'config.build', 'config.host', and
3294                         'config.gcc' files.
3295* Configuration Files::  Files created by running 'configure'.
3296
3297
3298File: gccint.info,  Node: Config Fragments,  Next: System Config,  Up: Configuration
3299
33006.3.2.1 Scripts Used by 'configure'
3301...................................
3302
3303'configure' uses some other scripts to help in its work:
3304
3305   * The standard GNU 'config.sub' and 'config.guess' files, kept in the
3306     top level directory, are used.
3307
3308   * The file 'config.gcc' is used to handle configuration specific to
3309     the particular target machine.  The file 'config.build' is used to
3310     handle configuration specific to the particular build machine.  The
3311     file 'config.host' is used to handle configuration specific to the
3312     particular host machine.  (In general, these should only be used
3313     for features that cannot reasonably be tested in Autoconf feature
3314     tests.)  *Note The 'config.build'; 'config.host'; and 'config.gcc'
3315     Files: System Config, for details of the contents of these files.
3316
3317   * Each language subdirectory has a file 'LANGUAGE/config-lang.in'
3318     that is used for front-end-specific configuration.  *Note The Front
3319     End 'config-lang.in' File: Front End Config, for details of this
3320     file.
3321
3322   * A helper script 'configure.frag' is used as part of creating the
3323     output of 'configure'.
3324
3325
3326File: gccint.info,  Node: System Config,  Next: Configuration Files,  Prev: Config Fragments,  Up: Configuration
3327
33286.3.2.2 The 'config.build'; 'config.host'; and 'config.gcc' Files
3329.................................................................
3330
3331The 'config.build' file contains specific rules for particular systems
3332which GCC is built on.  This should be used as rarely as possible, as
3333the behavior of the build system can always be detected by autoconf.
3334
3335 The 'config.host' file contains specific rules for particular systems
3336which GCC will run on.  This is rarely needed.
3337
3338 The 'config.gcc' file contains specific rules for particular systems
3339which GCC will generate code for.  This is usually needed.
3340
3341 Each file has a list of the shell variables it sets, with descriptions,
3342at the top of the file.
3343
3344 FIXME: document the contents of these files, and what variables should
3345be set to control build, host and target configuration.
3346
3347
3348File: gccint.info,  Node: Configuration Files,  Prev: System Config,  Up: Configuration
3349
33506.3.2.3 Files Created by 'configure'
3351....................................
3352
3353Here we spell out what files will be set up by 'configure' in the 'gcc'
3354directory.  Some other files are created as temporary files in the
3355configuration process, and are not used in the subsequent build; these
3356are not documented.
3357
3358   * 'Makefile' is constructed from 'Makefile.in', together with the
3359     host and target fragments (*note Makefile Fragments: Fragments.)
3360     't-TARGET' and 'x-HOST' from 'config', if any, and language
3361     Makefile fragments 'LANGUAGE/Make-lang.in'.
3362   * 'auto-host.h' contains information about the host machine
3363     determined by 'configure'.  If the host machine is different from
3364     the build machine, then 'auto-build.h' is also created, containing
3365     such information about the build machine.
3366   * 'config.status' is a script that may be run to recreate the current
3367     configuration.
3368   * 'configargs.h' is a header containing details of the arguments
3369     passed to 'configure' to configure GCC, and of the thread model
3370     used.
3371   * 'cstamp-h' is used as a timestamp.
3372   * If a language 'config-lang.in' file (*note The Front End
3373     'config-lang.in' File: Front End Config.) sets 'outputs', then the
3374     files listed in 'outputs' there are also generated.
3375
3376 The following configuration headers are created from the Makefile,
3377using 'mkconfig.sh', rather than directly by 'configure'.  'config.h',
3378'bconfig.h' and 'tconfig.h' all contain the 'xm-MACHINE.h' header, if
3379any, appropriate to the host, build and target machines respectively,
3380the configuration headers for the target, and some definitions; for the
3381host and build machines, these include the autoconfigured headers
3382generated by 'configure'.  The other configuration headers are
3383determined by 'config.gcc'.  They also contain the typedefs for 'rtx',
3384'rtvec' and 'tree'.
3385
3386   * 'config.h', for use in programs that run on the host machine.
3387   * 'bconfig.h', for use in programs that run on the build machine.
3388   * 'tconfig.h', for use in programs and libraries for the target
3389     machine.
3390   * 'tm_p.h', which includes the header 'MACHINE-protos.h' that
3391     contains prototypes for functions in the target 'MACHINE.c' file.
3392     The 'MACHINE-protos.h' header is included after the 'rtl.h' and/or
3393     'tree.h' would have been included.  The 'tm_p.h' also includes the
3394     header 'tm-preds.h' which is generated by 'genpreds' program during
3395     the build to define the declarations and inline functions for the
3396     predicate functions.
3397
3398
3399File: gccint.info,  Node: Build,  Next: Makefile,  Prev: Configuration,  Up: gcc Directory
3400
34016.3.3 Build System in the 'gcc' Directory
3402-----------------------------------------
3403
3404FIXME: describe the build system, including what is built in what
3405stages.  Also list the various source files that are used in the build
3406process but aren't source files of GCC itself and so aren't documented
3407below (*note Passes::).
3408
3409
3410File: gccint.info,  Node: Makefile,  Next: Library Files,  Prev: Build,  Up: gcc Directory
3411
34126.3.4 Makefile Targets
3413----------------------
3414
3415These targets are available from the 'gcc' directory:
3416
3417'all'
3418     This is the default target.  Depending on what your
3419     build/host/target configuration is, it coordinates all the things
3420     that need to be built.
3421
3422'doc'
3423     Produce info-formatted documentation and man pages.  Essentially it
3424     calls 'make man' and 'make info'.
3425
3426'dvi'
3427     Produce DVI-formatted documentation.
3428
3429'pdf'
3430     Produce PDF-formatted documentation.
3431
3432'html'
3433     Produce HTML-formatted documentation.
3434
3435'man'
3436     Generate man pages.
3437
3438'info'
3439     Generate info-formatted pages.
3440
3441'mostlyclean'
3442     Delete the files made while building the compiler.
3443
3444'clean'
3445     That, and all the other files built by 'make all'.
3446
3447'distclean'
3448     That, and all the files created by 'configure'.
3449
3450'maintainer-clean'
3451     Distclean plus any file that can be generated from other files.
3452     Note that additional tools may be required beyond what is normally
3453     needed to build GCC.
3454
3455'srcextra'
3456     Generates files in the source directory that are not
3457     version-controlled but should go into a release tarball.
3458
3459'srcinfo'
3460'srcman'
3461     Copies the info-formatted and manpage documentation into the source
3462     directory usually for the purpose of generating a release tarball.
3463
3464'install'
3465     Installs GCC.
3466
3467'uninstall'
3468     Deletes installed files, though this is not supported.
3469
3470'check'
3471     Run the testsuite.  This creates a 'testsuite' subdirectory that
3472     has various '.sum' and '.log' files containing the results of the
3473     testing.  You can run subsets with, for example, 'make check-gcc'.
3474     You can specify specific tests by setting 'RUNTESTFLAGS' to be the
3475     name of the '.exp' file, optionally followed by (for some tests) an
3476     equals and a file wildcard, like:
3477
3478          make check-gcc RUNTESTFLAGS="execute.exp=19980413-*"
3479
3480     Note that running the testsuite may require additional tools be
3481     installed, such as Tcl or DejaGnu.
3482
3483 The toplevel tree from which you start GCC compilation is not the GCC
3484directory, but rather a complex Makefile that coordinates the various
3485steps of the build, including bootstrapping the compiler and using the
3486new compiler to build target libraries.
3487
3488 When GCC is configured for a native configuration, the default action
3489for 'make' is to do a full three-stage bootstrap.  This means that GCC
3490is built three times--once with the native compiler, once with the
3491native-built compiler it just built, and once with the compiler it built
3492the second time.  In theory, the last two should produce the same
3493results, which 'make compare' can check.  Each stage is configured
3494separately and compiled into a separate directory, to minimize problems
3495due to ABI incompatibilities between the native compiler and GCC.
3496
3497 If you do a change, rebuilding will also start from the first stage and
3498"bubble" up the change through the three stages.  Each stage is taken
3499from its build directory (if it had been built previously), rebuilt, and
3500copied to its subdirectory.  This will allow you to, for example,
3501continue a bootstrap after fixing a bug which causes the stage2 build to
3502crash.  It does not provide as good coverage of the compiler as
3503bootstrapping from scratch, but it ensures that the new code is
3504syntactically correct (e.g., that you did not use GCC extensions by
3505mistake), and avoids spurious bootstrap comparison failures(1).
3506
3507 Other targets available from the top level include:
3508
3509'bootstrap-lean'
3510     Like 'bootstrap', except that the various stages are removed once
3511     they're no longer needed.  This saves disk space.
3512
3513'bootstrap2'
3514'bootstrap2-lean'
3515     Performs only the first two stages of bootstrap.  Unlike a
3516     three-stage bootstrap, this does not perform a comparison to test
3517     that the compiler is running properly.  Note that the disk space
3518     required by a "lean" bootstrap is approximately independent of the
3519     number of stages.
3520
3521'stageN-bubble (N = 1...4, profile, feedback)'
3522     Rebuild all the stages up to N, with the appropriate flags,
3523     "bubbling" the changes as described above.
3524
3525'all-stageN (N = 1...4, profile, feedback)'
3526     Assuming that stage N has already been built, rebuild it with the
3527     appropriate flags.  This is rarely needed.
3528
3529'cleanstrap'
3530     Remove everything ('make clean') and rebuilds ('make bootstrap').
3531
3532'compare'
3533     Compares the results of stages 2 and 3.  This ensures that the
3534     compiler is running properly, since it should produce the same
3535     object files regardless of how it itself was compiled.
3536
3537'profiledbootstrap'
3538     Builds a compiler with profiling feedback information.  In this
3539     case, the second and third stages are named 'profile' and
3540     'feedback', respectively.  For more information, see the
3541     installation instructions.
3542
3543'restrap'
3544     Restart a bootstrap, so that everything that was not built with the
3545     system compiler is rebuilt.
3546
3547'stageN-start (N = 1...4, profile, feedback)'
3548     For each package that is bootstrapped, rename directories so that,
3549     for example, 'gcc' points to the stageN GCC, compiled with the
3550     stageN-1 GCC(2).
3551
3552     You will invoke this target if you need to test or debug the stageN
3553     GCC.  If you only need to execute GCC (but you need not run 'make'
3554     either to rebuild it or to run test suites), you should be able to
3555     work directly in the 'stageN-gcc' directory.  This makes it easier
3556     to debug multiple stages in parallel.
3557
3558'stage'
3559     For each package that is bootstrapped, relocate its build directory
3560     to indicate its stage.  For example, if the 'gcc' directory points
3561     to the stage2 GCC, after invoking this target it will be renamed to
3562     'stage2-gcc'.
3563
3564 If you wish to use non-default GCC flags when compiling the stage2 and
3565stage3 compilers, set 'BOOT_CFLAGS' on the command line when doing
3566'make'.
3567
3568 Usually, the first stage only builds the languages that the compiler is
3569written in: typically, C and maybe Ada.  If you are debugging a
3570miscompilation of a different stage2 front-end (for example, of the
3571Fortran front-end), you may want to have front-ends for other languages
3572in the first stage as well.  To do so, set 'STAGE1_LANGUAGES' on the
3573command line when doing 'make'.
3574
3575 For example, in the aforementioned scenario of debugging a Fortran
3576front-end miscompilation caused by the stage1 compiler, you may need a
3577command like
3578
3579     make stage2-bubble STAGE1_LANGUAGES=c,fortran
3580
3581 Alternatively, you can use per-language targets to build and test
3582languages that are not enabled by default in stage1.  For example, 'make
3583f951' will build a Fortran compiler even in the stage1 build directory.
3584
3585   ---------- Footnotes ----------
3586
3587   (1) Except if the compiler was buggy and miscompiled some of the
3588files that were not modified.  In this case, it's best to use 'make
3589restrap'.
3590
3591   (2) Customarily, the system compiler is also termed the 'stage0' GCC.
3592
3593
3594File: gccint.info,  Node: Library Files,  Next: Headers,  Prev: Makefile,  Up: gcc Directory
3595
35966.3.5 Library Source Files and Headers under the 'gcc' Directory
3597----------------------------------------------------------------
3598
3599FIXME: list here, with explanation, all the C source files and headers
3600under the 'gcc' directory that aren't built into the GCC executable but
3601rather are part of runtime libraries and object files, such as
3602'crtstuff.c' and 'unwind-dw2.c'.  *Note Headers Installed by GCC:
3603Headers, for more information about the 'ginclude' directory.
3604
3605
3606File: gccint.info,  Node: Headers,  Next: Documentation,  Prev: Library Files,  Up: gcc Directory
3607
36086.3.6 Headers Installed by GCC
3609------------------------------
3610
3611In general, GCC expects the system C library to provide most of the
3612headers to be used with it.  However, GCC will fix those headers if
3613necessary to make them work with GCC, and will install some headers
3614required of freestanding implementations.  These headers are installed
3615in 'LIBSUBDIR/include'.  Headers for non-C runtime libraries are also
3616installed by GCC; these are not documented here.  (FIXME: document them
3617somewhere.)
3618
3619 Several of the headers GCC installs are in the 'ginclude' directory.
3620These headers, 'iso646.h', 'stdarg.h', 'stdbool.h', and 'stddef.h', are
3621installed in 'LIBSUBDIR/include', unless the target Makefile fragment
3622(*note Target Fragment::) overrides this by setting 'USER_H'.
3623
3624 In addition to these headers and those generated by fixing system
3625headers to work with GCC, some other headers may also be installed in
3626'LIBSUBDIR/include'.  'config.gcc' may set 'extra_headers'; this
3627specifies additional headers under 'config' to be installed on some
3628systems.
3629
3630 GCC installs its own version of '<float.h>', from 'ginclude/float.h'.
3631This is done to cope with command-line options that change the
3632representation of floating point numbers.
3633
3634 GCC also installs its own version of '<limits.h>'; this is generated
3635from 'glimits.h', together with 'limitx.h' and 'limity.h' if the system
3636also has its own version of '<limits.h>'.  (GCC provides its own header
3637because it is required of ISO C freestanding implementations, but needs
3638to include the system header from its own header as well because other
3639standards such as POSIX specify additional values to be defined in
3640'<limits.h>'.)  The system's '<limits.h>' header is used via
3641'LIBSUBDIR/include/syslimits.h', which is copied from 'gsyslimits.h' if
3642it does not need fixing to work with GCC; if it needs fixing,
3643'syslimits.h' is the fixed copy.
3644
3645 GCC can also install '<tgmath.h>'.  It will do this when 'config.gcc'
3646sets 'use_gcc_tgmath' to 'yes'.
3647
3648
3649File: gccint.info,  Node: Documentation,  Next: Front End,  Prev: Headers,  Up: gcc Directory
3650
36516.3.7 Building Documentation
3652----------------------------
3653
3654The main GCC documentation is in the form of manuals in Texinfo format.
3655These are installed in Info format; DVI versions may be generated by
3656'make dvi', PDF versions by 'make pdf', and HTML versions by 'make
3657html'.  In addition, some man pages are generated from the Texinfo
3658manuals, there are some other text files with miscellaneous
3659documentation, and runtime libraries have their own documentation
3660outside the 'gcc' directory.  FIXME: document the documentation for
3661runtime libraries somewhere.
3662
3663* Menu:
3664
3665* Texinfo Manuals::      GCC manuals in Texinfo format.
3666* Man Page Generation::  Generating man pages from Texinfo manuals.
3667* Miscellaneous Docs::   Miscellaneous text files with documentation.
3668
3669
3670File: gccint.info,  Node: Texinfo Manuals,  Next: Man Page Generation,  Up: Documentation
3671
36726.3.7.1 Texinfo Manuals
3673.......................
3674
3675The manuals for GCC as a whole, and the C and C++ front ends, are in
3676files 'doc/*.texi'.  Other front ends have their own manuals in files
3677'LANGUAGE/*.texi'.  Common files 'doc/include/*.texi' are provided which
3678may be included in multiple manuals; the following files are in
3679'doc/include':
3680
3681'fdl.texi'
3682     The GNU Free Documentation License.
3683'funding.texi'
3684     The section "Funding Free Software".
3685'gcc-common.texi'
3686     Common definitions for manuals.
3687'gpl_v3.texi'
3688     The GNU General Public License.
3689'texinfo.tex'
3690     A copy of 'texinfo.tex' known to work with the GCC manuals.
3691
3692 DVI-formatted manuals are generated by 'make dvi', which uses
3693'texi2dvi' (via the Makefile macro '$(TEXI2DVI)').  PDF-formatted
3694manuals are generated by 'make pdf', which uses 'texi2pdf' (via the
3695Makefile macro '$(TEXI2PDF)').  HTML formatted manuals are generated by
3696'make html'.  Info manuals are generated by 'make info' (which is run as
3697part of a bootstrap); this generates the manuals in the source
3698directory, using 'makeinfo' via the Makefile macro '$(MAKEINFO)', and
3699they are included in release distributions.
3700
3701 Manuals are also provided on the GCC web site, in both HTML and
3702PostScript forms.  This is done via the script
3703'maintainer-scripts/update_web_docs_git'.  Each manual to be provided
3704online must be listed in the definition of 'MANUALS' in that file; a
3705file 'NAME.texi' must only appear once in the source tree, and the
3706output manual must have the same name as the source file.  (However,
3707other Texinfo files, included in manuals but not themselves the root
3708files of manuals, may have names that appear more than once in the
3709source tree.)  The manual file 'NAME.texi' should only include other
3710files in its own directory or in 'doc/include'.  HTML manuals will be
3711generated by 'makeinfo --html', PostScript manuals by 'texi2dvi' and
3712'dvips', and PDF manuals by 'texi2pdf'.  All Texinfo files that are
3713parts of manuals must be version-controlled, even if they are generated
3714files, for the generation of online manuals to work.
3715
3716 The installation manual, 'doc/install.texi', is also provided on the
3717GCC web site.  The HTML version is generated by the script
3718'doc/install.texi2html'.
3719
3720
3721File: gccint.info,  Node: Man Page Generation,  Next: Miscellaneous Docs,  Prev: Texinfo Manuals,  Up: Documentation
3722
37236.3.7.2 Man Page Generation
3724...........................
3725
3726Because of user demand, in addition to full Texinfo manuals, man pages
3727are provided which contain extracts from those manuals.  These man pages
3728are generated from the Texinfo manuals using 'contrib/texi2pod.pl' and
3729'pod2man'.  (The man page for 'g++', 'cp/g++.1', just contains a '.so'
3730reference to 'gcc.1', but all the other man pages are generated from
3731Texinfo manuals.)
3732
3733 Because many systems may not have the necessary tools installed to
3734generate the man pages, they are only generated if the 'configure'
3735script detects that recent enough tools are installed, and the Makefiles
3736allow generating man pages to fail without aborting the build.  Man
3737pages are also included in release distributions.  They are generated in
3738the source directory.
3739
3740 Magic comments in Texinfo files starting '@c man' control what parts of
3741a Texinfo file go into a man page.  Only a subset of Texinfo is
3742supported by 'texi2pod.pl', and it may be necessary to add support for
3743more Texinfo features to this script when generating new man pages.  To
3744improve the man page output, some special Texinfo macros are provided in
3745'doc/include/gcc-common.texi' which 'texi2pod.pl' understands:
3746
3747'@gcctabopt'
3748     Use in the form '@table @gcctabopt' for tables of options, where
3749     for printed output the effect of '@code' is better than that of
3750     '@option' but for man page output a different effect is wanted.
3751'@gccoptlist'
3752     Use for summary lists of options in manuals.
3753'@gol'
3754     Use at the end of each line inside '@gccoptlist'.  This is
3755     necessary to avoid problems with differences in how the
3756     '@gccoptlist' macro is handled by different Texinfo formatters.
3757
3758 FIXME: describe the 'texi2pod.pl' input language and magic comments in
3759more detail.
3760
3761
3762File: gccint.info,  Node: Miscellaneous Docs,  Prev: Man Page Generation,  Up: Documentation
3763
37646.3.7.3 Miscellaneous Documentation
3765...................................
3766
3767In addition to the formal documentation that is installed by GCC, there
3768are several other text files in the 'gcc' subdirectory with
3769miscellaneous documentation:
3770
3771'ABOUT-GCC-NLS'
3772     Notes on GCC's Native Language Support.  FIXME: this should be part
3773     of this manual rather than a separate file.
3774'ABOUT-NLS'
3775     Notes on the Free Translation Project.
3776'COPYING'
3777'COPYING3'
3778     The GNU General Public License, Versions 2 and 3.
3779'COPYING.LIB'
3780'COPYING3.LIB'
3781     The GNU Lesser General Public License, Versions 2.1 and 3.
3782'*ChangeLog*'
3783'*/ChangeLog*'
3784     Change log files for various parts of GCC.
3785'LANGUAGES'
3786     Details of a few changes to the GCC front-end interface.  FIXME:
3787     the information in this file should be part of general
3788     documentation of the front-end interface in this manual.
3789'ONEWS'
3790     Information about new features in old versions of GCC.  (For recent
3791     versions, the information is on the GCC web site.)
3792'README.Portability'
3793     Information about portability issues when writing code in GCC.
3794     FIXME: why isn't this part of this manual or of the GCC Coding
3795     Conventions?
3796
3797 FIXME: document such files in subdirectories, at least 'config', 'c',
3798'cp', 'objc', 'testsuite'.
3799
3800
3801File: gccint.info,  Node: Front End,  Next: Back End,  Prev: Documentation,  Up: gcc Directory
3802
38036.3.8 Anatomy of a Language Front End
3804-------------------------------------
3805
3806A front end for a language in GCC has the following parts:
3807
3808   * A directory 'LANGUAGE' under 'gcc' containing source files for that
3809     front end.  *Note The Front End 'LANGUAGE' Directory: Front End
3810     Directory, for details.
3811   * A mention of the language in the list of supported languages in
3812     'gcc/doc/install.texi'.
3813   * A mention of the name under which the language's runtime library is
3814     recognized by '--enable-shared=PACKAGE' in the documentation of
3815     that option in 'gcc/doc/install.texi'.
3816   * A mention of any special prerequisites for building the front end
3817     in the documentation of prerequisites in 'gcc/doc/install.texi'.
3818   * Details of contributors to that front end in
3819     'gcc/doc/contrib.texi'.  If the details are in that front end's own
3820     manual then there should be a link to that manual's list in
3821     'contrib.texi'.
3822   * Information about support for that language in
3823     'gcc/doc/frontends.texi'.
3824   * Information about standards for that language, and the front end's
3825     support for them, in 'gcc/doc/standards.texi'.  This may be a link
3826     to such information in the front end's own manual.
3827   * Details of source file suffixes for that language and '-x LANG'
3828     options supported, in 'gcc/doc/invoke.texi'.
3829   * Entries in 'default_compilers' in 'gcc.c' for source file suffixes
3830     for that language.
3831   * Preferably testsuites, which may be under 'gcc/testsuite' or
3832     runtime library directories.  FIXME: document somewhere how to
3833     write testsuite harnesses.
3834   * Probably a runtime library for the language, outside the 'gcc'
3835     directory.  FIXME: document this further.
3836   * Details of the directories of any runtime libraries in
3837     'gcc/doc/sourcebuild.texi'.
3838   * Check targets in 'Makefile.def' for the top-level 'Makefile' to
3839     check just the compiler or the compiler and runtime library for the
3840     language.
3841
3842 If the front end is added to the official GCC source repository, the
3843following are also necessary:
3844
3845   * At least one Bugzilla component for bugs in that front end and
3846     runtime libraries.  This category needs to be added to the Bugzilla
3847     database.
3848   * Normally, one or more maintainers of that front end listed in
3849     'MAINTAINERS'.
3850   * Mentions on the GCC web site in 'index.html' and 'frontends.html',
3851     with any relevant links on 'readings.html'.  (Front ends that are
3852     not an official part of GCC may also be listed on 'frontends.html',
3853     with relevant links.)
3854   * A news item on 'index.html', and possibly an announcement on the
3855     <gcc-announce@gcc.gnu.org> mailing list.
3856   * The front end's manuals should be mentioned in
3857     'maintainer-scripts/update_web_docs_git' (*note Texinfo Manuals::)
3858     and the online manuals should be linked to from
3859     'onlinedocs/index.html'.
3860   * Any old releases or CVS repositories of the front end, before its
3861     inclusion in GCC, should be made available on the GCC web site at
3862     <https://gcc.gnu.org/pub/gcc/old-releases/>.
3863   * The release and snapshot script 'maintainer-scripts/gcc_release'
3864     should be updated to generate appropriate tarballs for this front
3865     end.
3866   * If this front end includes its own version files that include the
3867     current date, 'maintainer-scripts/update_version' should be updated
3868     accordingly.
3869
3870* Menu:
3871
3872* Front End Directory::  The front end 'LANGUAGE' directory.
3873* Front End Config::     The front end 'config-lang.in' file.
3874* Front End Makefile::   The front end 'Make-lang.in' file.
3875
3876
3877File: gccint.info,  Node: Front End Directory,  Next: Front End Config,  Up: Front End
3878
38796.3.8.1 The Front End 'LANGUAGE' Directory
3880..........................................
3881
3882A front end 'LANGUAGE' directory contains the source files of that front
3883end (but not of any runtime libraries, which should be outside the 'gcc'
3884directory).  This includes documentation, and possibly some subsidiary
3885programs built alongside the front end.  Certain files are special and
3886other parts of the compiler depend on their names:
3887
3888'config-lang.in'
3889     This file is required in all language subdirectories.  *Note The
3890     Front End 'config-lang.in' File: Front End Config, for details of
3891     its contents
3892'Make-lang.in'
3893     This file is required in all language subdirectories.  *Note The
3894     Front End 'Make-lang.in' File: Front End Makefile, for details of
3895     its contents.
3896'lang.opt'
3897     This file registers the set of switches that the front end accepts
3898     on the command line, and their '--help' text.  *Note Options::.
3899'lang-specs.h'
3900     This file provides entries for 'default_compilers' in 'gcc.c' which
3901     override the default of giving an error that a compiler for that
3902     language is not installed.
3903'LANGUAGE-tree.def'
3904     This file, which need not exist, defines any language-specific tree
3905     codes.
3906
3907
3908File: gccint.info,  Node: Front End Config,  Next: Front End Makefile,  Prev: Front End Directory,  Up: Front End
3909
39106.3.8.2 The Front End 'config-lang.in' File
3911...........................................
3912
3913Each language subdirectory contains a 'config-lang.in' file.  This file
3914is a shell script that may define some variables describing the
3915language:
3916
3917'language'
3918     This definition must be present, and gives the name of the language
3919     for some purposes such as arguments to '--enable-languages'.
3920'lang_requires'
3921     If defined, this variable lists (space-separated) language front
3922     ends other than C that this front end requires to be enabled (with
3923     the names given being their 'language' settings).  For example, the
3924     Obj-C++ front end depends on the C++ and ObjC front ends, so sets
3925     'lang_requires="objc c++"'.
3926'subdir_requires'
3927     If defined, this variable lists (space-separated) front end
3928     directories other than C that this front end requires to be
3929     present.  For example, the Objective-C++ front end uses source
3930     files from the C++ and Objective-C front ends, so sets
3931     'subdir_requires="cp objc"'.
3932'target_libs'
3933     If defined, this variable lists (space-separated) targets in the
3934     top level 'Makefile' to build the runtime libraries for this
3935     language, such as 'target-libobjc'.
3936'lang_dirs'
3937     If defined, this variable lists (space-separated) top level
3938     directories (parallel to 'gcc'), apart from the runtime libraries,
3939     that should not be configured if this front end is not built.
3940'build_by_default'
3941     If defined to 'no', this language front end is not built unless
3942     enabled in a '--enable-languages' argument.  Otherwise, front ends
3943     are built by default, subject to any special logic in
3944     'configure.ac' (as is present to disable the Ada front end if the
3945     Ada compiler is not already installed).
3946'boot_language'
3947     If defined to 'yes', this front end is built in stage1 of the
3948     bootstrap.  This is only relevant to front ends written in their
3949     own languages.
3950'compilers'
3951     If defined, a space-separated list of compiler executables that
3952     will be run by the driver.  The names here will each end with
3953     '\$(exeext)'.
3954'outputs'
3955     If defined, a space-separated list of files that should be
3956     generated by 'configure' substituting values in them.  This
3957     mechanism can be used to create a file 'LANGUAGE/Makefile' from
3958     'LANGUAGE/Makefile.in', but this is deprecated, building everything
3959     from the single 'gcc/Makefile' is preferred.
3960'gtfiles'
3961     If defined, a space-separated list of files that should be scanned
3962     by 'gengtype.c' to generate the garbage collection tables and
3963     routines for this language.  This excludes the files that are
3964     common to all front ends.  *Note Type Information::.
3965
3966
3967File: gccint.info,  Node: Front End Makefile,  Prev: Front End Config,  Up: Front End
3968
39696.3.8.3 The Front End 'Make-lang.in' File
3970.........................................
3971
3972Each language subdirectory contains a 'Make-lang.in' file.  It contains
3973targets 'LANG.HOOK' (where 'LANG' is the setting of 'language' in
3974'config-lang.in') for the following values of 'HOOK', and any other
3975Makefile rules required to build those targets (which may if necessary
3976use other Makefiles specified in 'outputs' in 'config-lang.in', although
3977this is deprecated).  It also adds any testsuite targets that can use
3978the standard rule in 'gcc/Makefile.in' to the variable 'lang_checks'.
3979
3980'all.cross'
3981'start.encap'
3982'rest.encap'
3983     FIXME: exactly what goes in each of these targets?
3984'tags'
3985     Build an 'etags' 'TAGS' file in the language subdirectory in the
3986     source tree.
3987'info'
3988     Build info documentation for the front end, in the build directory.
3989     This target is only called by 'make bootstrap' if a suitable
3990     version of 'makeinfo' is available, so does not need to check for
3991     this, and should fail if an error occurs.
3992'dvi'
3993     Build DVI documentation for the front end, in the build directory.
3994     This should be done using '$(TEXI2DVI)', with appropriate '-I'
3995     arguments pointing to directories of included files.
3996'pdf'
3997     Build PDF documentation for the front end, in the build directory.
3998     This should be done using '$(TEXI2PDF)', with appropriate '-I'
3999     arguments pointing to directories of included files.
4000'html'
4001     Build HTML documentation for the front end, in the build directory.
4002'man'
4003     Build generated man pages for the front end from Texinfo manuals
4004     (*note Man Page Generation::), in the build directory.  This target
4005     is only called if the necessary tools are available, but should
4006     ignore errors so as not to stop the build if errors occur; man
4007     pages are optional and the tools involved may be installed in a
4008     broken way.
4009'install-common'
4010     Install everything that is part of the front end, apart from the
4011     compiler executables listed in 'compilers' in 'config-lang.in'.
4012'install-info'
4013     Install info documentation for the front end, if it is present in
4014     the source directory.  This target should have dependencies on info
4015     files that should be installed.
4016'install-man'
4017     Install man pages for the front end.  This target should ignore
4018     errors.
4019'install-plugin'
4020     Install headers needed for plugins.
4021'srcextra'
4022     Copies its dependencies into the source directory.  This generally
4023     should be used for generated files such as Bison output files which
4024     are not version-controlled, but should be included in any release
4025     tarballs.  This target will be executed during a bootstrap if
4026     '--enable-generated-files-in-srcdir' was specified as a 'configure'
4027     option.
4028'srcinfo'
4029'srcman'
4030     Copies its dependencies into the source directory.  These targets
4031     will be executed during a bootstrap if
4032     '--enable-generated-files-in-srcdir' was specified as a 'configure'
4033     option.
4034'uninstall'
4035     Uninstall files installed by installing the compiler.  This is
4036     currently documented not to be supported, so the hook need not do
4037     anything.
4038'mostlyclean'
4039'clean'
4040'distclean'
4041'maintainer-clean'
4042     The language parts of the standard GNU '*clean' targets.  *Note
4043     Standard Targets for Users: (standards)Standard Targets, for
4044     details of the standard targets.  For GCC, 'maintainer-clean'
4045     should delete all generated files in the source directory that are
4046     not version-controlled, but should not delete anything that is.
4047
4048 'Make-lang.in' must also define a variable 'LANG_OBJS' to a list of
4049host object files that are used by that language.
4050
4051
4052File: gccint.info,  Node: Back End,  Prev: Front End,  Up: gcc Directory
4053
40546.3.9 Anatomy of a Target Back End
4055----------------------------------
4056
4057A back end for a target architecture in GCC has the following parts:
4058
4059   * A directory 'MACHINE' under 'gcc/config', containing a machine
4060     description 'MACHINE.md' file (*note Machine Descriptions: Machine
4061     Desc.), header files 'MACHINE.h' and 'MACHINE-protos.h' and a
4062     source file 'MACHINE.c' (*note Target Description Macros and
4063     Functions: Target Macros.), possibly a target Makefile fragment
4064     't-MACHINE' (*note The Target Makefile Fragment: Target Fragment.),
4065     and maybe some other files.  The names of these files may be
4066     changed from the defaults given by explicit specifications in
4067     'config.gcc'.
4068   * If necessary, a file 'MACHINE-modes.def' in the 'MACHINE'
4069     directory, containing additional machine modes to represent
4070     condition codes.  *Note Condition Code::, for further details.
4071   * An optional 'MACHINE.opt' file in the 'MACHINE' directory,
4072     containing a list of target-specific options.  You can also add
4073     other option files using the 'extra_options' variable in
4074     'config.gcc'.  *Note Options::.
4075   * Entries in 'config.gcc' (*note The 'config.gcc' File: System
4076     Config.) for the systems with this target architecture.
4077   * Documentation in 'gcc/doc/invoke.texi' for any command-line options
4078     supported by this target (*note Run-time Target Specification:
4079     Run-time Target.).  This means both entries in the summary table of
4080     options and details of the individual options.
4081   * Documentation in 'gcc/doc/extend.texi' for any target-specific
4082     attributes supported (*note Defining target-specific uses of
4083     '__attribute__': Target Attributes.), including where the same
4084     attribute is already supported on some targets, which are
4085     enumerated in the manual.
4086   * Documentation in 'gcc/doc/extend.texi' for any target-specific
4087     pragmas supported.
4088   * Documentation in 'gcc/doc/extend.texi' of any target-specific
4089     built-in functions supported.
4090   * Documentation in 'gcc/doc/extend.texi' of any target-specific
4091     format checking styles supported.
4092   * Documentation in 'gcc/doc/md.texi' of any target-specific
4093     constraint letters (*note Constraints for Particular Machines:
4094     Machine Constraints.).
4095   * A note in 'gcc/doc/contrib.texi' under the person or people who
4096     contributed the target support.
4097   * Entries in 'gcc/doc/install.texi' for all target triplets supported
4098     with this target architecture, giving details of any special notes
4099     about installation for this target, or saying that there are no
4100     special notes if there are none.
4101   * Possibly other support outside the 'gcc' directory for runtime
4102     libraries.  FIXME: reference docs for this.  The 'libstdc++'
4103     porting manual needs to be installed as info for this to work, or
4104     to be a chapter of this manual.
4105
4106 The 'MACHINE.h' header is included very early in GCC's standard
4107sequence of header files, while 'MACHINE-protos.h' is included late in
4108the sequence.  Thus 'MACHINE-protos.h' can include declarations
4109referencing types that are not defined when 'MACHINE.h' is included,
4110specifically including those from 'rtl.h' and 'tree.h'.  Since both RTL
4111and tree types may not be available in every context where
4112'MACHINE-protos.h' is included, in this file you should guard
4113declarations using these types inside appropriate '#ifdef RTX_CODE' or
4114'#ifdef TREE_CODE' conditional code segments.
4115
4116 If the backend uses shared data structures that require 'GTY' markers
4117for garbage collection (*note Type Information::), you must declare
4118those in 'MACHINE.h' rather than 'MACHINE-protos.h'.  Any definitions
4119required for building libgcc must also go in 'MACHINE.h'.
4120
4121 GCC uses the macro 'IN_TARGET_CODE' to distinguish between
4122machine-specific '.c' and '.cc' files and machine-independent '.c' and
4123'.cc' files.  Machine-specific files should use the directive:
4124
4125     #define IN_TARGET_CODE 1
4126
4127 before including 'config.h'.
4128
4129 If the back end is added to the official GCC source repository, the
4130following are also necessary:
4131
4132   * An entry for the target architecture in 'readings.html' on the GCC
4133     web site, with any relevant links.
4134   * Details of the properties of the back end and target architecture
4135     in 'backends.html' on the GCC web site.
4136   * A news item about the contribution of support for that target
4137     architecture, in 'index.html' on the GCC web site.
4138   * Normally, one or more maintainers of that target listed in
4139     'MAINTAINERS'.  Some existing architectures may be unmaintained,
4140     but it would be unusual to add support for a target that does not
4141     have a maintainer when support is added.
4142   * Target triplets covering all 'config.gcc' stanzas for the target,
4143     in the list in 'contrib/config-list.mk'.
4144
4145
4146File: gccint.info,  Node: Testsuites,  Next: Options,  Prev: Source Tree,  Up: Top
4147
41487 Testsuites
4149************
4150
4151GCC contains several testsuites to help maintain compiler quality.  Most
4152of the runtime libraries and language front ends in GCC have testsuites.
4153Currently only the C language testsuites are documented here; FIXME:
4154document the others.
4155
4156* Menu:
4157
4158* Test Idioms::     Idioms used in testsuite code.
4159* Test Directives:: Directives used within DejaGnu tests.
4160* Ada Tests::       The Ada language testsuites.
4161* C Tests::         The C language testsuites.
4162* LTO Testing::     Support for testing link-time optimizations.
4163* gcov Testing::    Support for testing gcov.
4164* profopt Testing:: Support for testing profile-directed optimizations.
4165* compat Testing::  Support for testing binary compatibility.
4166* Torture Tests::   Support for torture testing using multiple options.
4167* GIMPLE Tests::    Support for testing GIMPLE passes.
4168* RTL Tests::       Support for testing RTL passes.
4169
4170
4171File: gccint.info,  Node: Test Idioms,  Next: Test Directives,  Up: Testsuites
4172
41737.1 Idioms Used in Testsuite Code
4174=================================
4175
4176In general, C testcases have a trailing '-N.c', starting with '-1.c', in
4177case other testcases with similar names are added later.  If the test is
4178a test of some well-defined feature, it should have a name referring to
4179that feature such as 'FEATURE-1.c'.  If it does not test a well-defined
4180feature but just happens to exercise a bug somewhere in the compiler,
4181and a bug report has been filed for this bug in the GCC bug database,
4182'prBUG-NUMBER-1.c' is the appropriate form of name.  Otherwise (for
4183miscellaneous bugs not filed in the GCC bug database), and previously
4184more generally, test cases are named after the date on which they were
4185added.  This allows people to tell at a glance whether a test failure is
4186because of a recently found bug that has not yet been fixed, or whether
4187it may be a regression, but does not give any other information about
4188the bug or where discussion of it may be found.  Some other language
4189testsuites follow similar conventions.
4190
4191 In the 'gcc.dg' testsuite, it is often necessary to test that an error
4192is indeed a hard error and not just a warning--for example, where it is
4193a constraint violation in the C standard, which must become an error
4194with '-pedantic-errors'.  The following idiom, where the first line
4195shown is line LINE of the file and the line that generates the error, is
4196used for this:
4197
4198     /* { dg-bogus "warning" "warning in place of error" } */
4199     /* { dg-error "REGEXP" "MESSAGE" { target *-*-* } LINE } */
4200
4201 It may be necessary to check that an expression is an integer constant
4202expression and has a certain value.  To check that 'E' has value 'V', an
4203idiom similar to the following is used:
4204
4205     char x[((E) == (V) ? 1 : -1)];
4206
4207 In 'gcc.dg' tests, '__typeof__' is sometimes used to make assertions
4208about the types of expressions.  See, for example,
4209'gcc.dg/c99-condexpr-1.c'.  The more subtle uses depend on the exact
4210rules for the types of conditional expressions in the C standard; see,
4211for example, 'gcc.dg/c99-intconst-1.c'.
4212
4213 It is useful to be able to test that optimizations are being made
4214properly.  This cannot be done in all cases, but it can be done where
4215the optimization will lead to code being optimized away (for example,
4216where flow analysis or alias analysis should show that certain code
4217cannot be called) or to functions not being called because they have
4218been expanded as built-in functions.  Such tests go in
4219'gcc.c-torture/execute'.  Where code should be optimized away, a call to
4220a nonexistent function such as 'link_failure ()' may be inserted; a
4221definition
4222
4223     #ifndef __OPTIMIZE__
4224     void
4225     link_failure (void)
4226     {
4227       abort ();
4228     }
4229     #endif
4230
4231will also be needed so that linking still succeeds when the test is run
4232without optimization.  When all calls to a built-in function should have
4233been optimized and no calls to the non-built-in version of the function
4234should remain, that function may be defined as 'static' to call 'abort
4235()' (although redeclaring a function as static may not work on all
4236targets).
4237
4238 All testcases must be portable.  Target-specific testcases must have
4239appropriate code to avoid causing failures on unsupported systems;
4240unfortunately, the mechanisms for this differ by directory.
4241
4242 FIXME: discuss non-C testsuites here.
4243
4244
4245File: gccint.info,  Node: Test Directives,  Next: Ada Tests,  Prev: Test Idioms,  Up: Testsuites
4246
42477.2 Directives used within DejaGnu tests
4248========================================
4249
4250* Menu:
4251
4252* Directives::  Syntax and descriptions of test directives.
4253* Selectors:: Selecting targets to which a test applies.
4254* Effective-Target Keywords:: Keywords describing target attributes.
4255* Add Options:: Features for 'dg-add-options'
4256* Require Support:: Variants of 'dg-require-SUPPORT'
4257* Final Actions:: Commands for use in 'dg-final'
4258
4259
4260File: gccint.info,  Node: Directives,  Next: Selectors,  Up: Test Directives
4261
42627.2.1 Syntax and Descriptions of test directives
4263------------------------------------------------
4264
4265Test directives appear within comments in a test source file and begin
4266with 'dg-'.  Some of these are defined within DejaGnu and others are
4267local to the GCC testsuite.
4268
4269 The order in which test directives appear in a test can be important:
4270directives local to GCC sometimes override information used by the
4271DejaGnu directives, which know nothing about the GCC directives, so the
4272DejaGnu directives must precede GCC directives.
4273
4274 Several test directives include selectors (*note Selectors::) which are
4275usually preceded by the keyword 'target' or 'xfail'.
4276
42777.2.1.1 Specify how to build the test
4278.....................................
4279
4280'{ dg-do DO-WHAT-KEYWORD [{ target/xfail SELECTOR }] }'
4281     DO-WHAT-KEYWORD specifies how the test is compiled and whether it
4282     is executed.  It is one of:
4283
4284     'preprocess'
4285          Compile with '-E' to run only the preprocessor.
4286     'compile'
4287          Compile with '-S' to produce an assembly code file.
4288     'assemble'
4289          Compile with '-c' to produce a relocatable object file.
4290     'link'
4291          Compile, assemble, and link to produce an executable file.
4292     'run'
4293          Produce and run an executable file, which is expected to
4294          return an exit code of 0.
4295
4296     The default is 'compile'.  That can be overridden for a set of
4297     tests by redefining 'dg-do-what-default' within the '.exp' file for
4298     those tests.
4299
4300     If the directive includes the optional '{ target SELECTOR }' then
4301     the test is skipped unless the target system matches the SELECTOR.
4302
4303     If DO-WHAT-KEYWORD is 'run' and the directive includes the optional
4304     '{ xfail SELECTOR }' and the selector is met then the test is
4305     expected to fail.  The 'xfail' clause is ignored for other values
4306     of DO-WHAT-KEYWORD; those tests can use directive 'dg-xfail-if'.
4307
43087.2.1.2 Specify additional compiler options
4309...........................................
4310
4311'{ dg-options OPTIONS [{ target SELECTOR }] }'
4312     This DejaGnu directive provides a list of compiler options, to be
4313     used if the target system matches SELECTOR, that replace the
4314     default options used for this set of tests.
4315
4316'{ dg-add-options FEATURE ... }'
4317     Add any compiler options that are needed to access certain
4318     features.  This directive does nothing on targets that enable the
4319     features by default, or that don't provide them at all.  It must
4320     come after all 'dg-options' directives.  For supported values of
4321     FEATURE see *note Add Options::.
4322
4323'{ dg-additional-options OPTIONS [{ target SELECTOR }] }'
4324     This directive provides a list of compiler options, to be used if
4325     the target system matches SELECTOR, that are added to the default
4326     options used for this set of tests.
4327
43287.2.1.3 Modify the test timeout value
4329.....................................
4330
4331The normal timeout limit, in seconds, is found by searching the
4332following in order:
4333
4334   * the value defined by an earlier 'dg-timeout' directive in the test
4335
4336   * variable TOOL_TIMEOUT defined by the set of tests
4337
4338   * GCC,TIMEOUT set in the target board
4339
4340   * 300
4341
4342'{ dg-timeout N [{target SELECTOR }] }'
4343     Set the time limit for the compilation and for the execution of the
4344     test to the specified number of seconds.
4345
4346'{ dg-timeout-factor X [{ target SELECTOR }] }'
4347     Multiply the normal time limit for compilation and execution of the
4348     test by the specified floating-point factor.
4349
43507.2.1.4 Skip a test for some targets
4351....................................
4352
4353'{ dg-skip-if COMMENT { SELECTOR } [{ INCLUDE-OPTS } [{ EXCLUDE-OPTS }]] }'
4354     Arguments INCLUDE-OPTS and EXCLUDE-OPTS are lists in which each
4355     element is a string of zero or more GCC options.  Skip the test if
4356     all of the following conditions are met:
4357        * the test system is included in SELECTOR
4358
4359        * for at least one of the option strings in INCLUDE-OPTS, every
4360          option from that string is in the set of options with which
4361          the test would be compiled; use '"*"' for an INCLUDE-OPTS list
4362          that matches any options; that is the default if INCLUDE-OPTS
4363          is not specified
4364
4365        * for each of the option strings in EXCLUDE-OPTS, at least one
4366          option from that string is not in the set of options with
4367          which the test would be compiled; use '""' for an empty
4368          EXCLUDE-OPTS list; that is the default if EXCLUDE-OPTS is not
4369          specified
4370
4371     For example, to skip a test if option '-Os' is present:
4372
4373          /* { dg-skip-if "" { *-*-* }  { "-Os" } { "" } } */
4374
4375     To skip a test if both options '-O2' and '-g' are present:
4376
4377          /* { dg-skip-if "" { *-*-* }  { "-O2 -g" } { "" } } */
4378
4379     To skip a test if either '-O2' or '-O3' is present:
4380
4381          /* { dg-skip-if "" { *-*-* }  { "-O2" "-O3" } { "" } } */
4382
4383     To skip a test unless option '-Os' is present:
4384
4385          /* { dg-skip-if "" { *-*-* }  { "*" } { "-Os" } } */
4386
4387     To skip a test if either '-O2' or '-O3' is used with '-g' but not
4388     if '-fpic' is also present:
4389
4390          /* { dg-skip-if "" { *-*-* }  { "-O2 -g" "-O3 -g" } { "-fpic" } } */
4391
4392'{ dg-require-effective-target KEYWORD [{ SELECTOR }] }'
4393     Skip the test if the test target, including current multilib flags,
4394     is not covered by the effective-target keyword.  If the directive
4395     includes the optional '{ SELECTOR }' then the effective-target test
4396     is only performed if the target system matches the SELECTOR.  This
4397     directive must appear after any 'dg-do' directive in the test and
4398     before any 'dg-additional-sources' directive.  *Note
4399     Effective-Target Keywords::.
4400
4401'{ dg-require-SUPPORT args }'
4402     Skip the test if the target does not provide the required support.
4403     These directives must appear after any 'dg-do' directive in the
4404     test and before any 'dg-additional-sources' directive.  They
4405     require at least one argument, which can be an empty string if the
4406     specific procedure does not examine the argument.  *Note Require
4407     Support::, for a complete list of these directives.
4408
44097.2.1.5 Expect a test to fail for some targets
4410..............................................
4411
4412'{ dg-xfail-if COMMENT { SELECTOR } [{ INCLUDE-OPTS } [{ EXCLUDE-OPTS }]] }'
4413     Expect the test to fail if the conditions (which are the same as
4414     for 'dg-skip-if') are met.  This does not affect the execute step.
4415
4416'{ dg-xfail-run-if COMMENT { SELECTOR } [{ INCLUDE-OPTS } [{ EXCLUDE-OPTS }]] }'
4417     Expect the execute step of a test to fail if the conditions (which
4418     are the same as for 'dg-skip-if') are met.
4419
44207.2.1.6 Expect the test executable to fail
4421..........................................
4422
4423'{ dg-shouldfail COMMENT [{ SELECTOR } [{ INCLUDE-OPTS } [{ EXCLUDE-OPTS }]]] }'
4424     Expect the test executable to return a nonzero exit status if the
4425     conditions (which are the same as for 'dg-skip-if') are met.
4426
44277.2.1.7 Verify compiler messages
4428................................
4429
4430Where LINE is an accepted argument for these commands, a value of '0'
4431can be used if there is no line associated with the message.
4432
4433'{ dg-error REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] ]] }'
4434     This DejaGnu directive appears on a source line that is expected to
4435     get an error message, or else specifies the source line associated
4436     with the message.  If there is no message for that line or if the
4437     text of that message is not matched by REGEXP then the check fails
4438     and COMMENT is included in the 'FAIL' message.  The check does not
4439     look for the string 'error' unless it is part of REGEXP.
4440
4441'{ dg-warning REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] ]] }'
4442     This DejaGnu directive appears on a source line that is expected to
4443     get a warning message, or else specifies the source line associated
4444     with the message.  If there is no message for that line or if the
4445     text of that message is not matched by REGEXP then the check fails
4446     and COMMENT is included in the 'FAIL' message.  The check does not
4447     look for the string 'warning' unless it is part of REGEXP.
4448
4449'{ dg-message REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] ]] }'
4450     The line is expected to get a message other than an error or
4451     warning.  If there is no message for that line or if the text of
4452     that message is not matched by REGEXP then the check fails and
4453     COMMENT is included in the 'FAIL' message.
4454
4455'{ dg-bogus REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] ]] }'
4456     This DejaGnu directive appears on a source line that should not get
4457     a message matching REGEXP, or else specifies the source line
4458     associated with the bogus message.  It is usually used with 'xfail'
4459     to indicate that the message is a known problem for a particular
4460     set of targets.
4461
4462'{ dg-line LINENUMVAR }'
4463     This DejaGnu directive sets the variable LINENUMVAR to the line
4464     number of the source line.  The variable LINENUMVAR can then be
4465     used in subsequent 'dg-error', 'dg-warning', 'dg-message' and
4466     'dg-bogus' directives.  For example:
4467
4468          int a;   /* { dg-line first_def_a } */
4469          float a; /* { dg-error "conflicting types of" } */
4470          /* { dg-message "previous declaration of" "" { target *-*-* } first_def_a } */
4471
4472'{ dg-excess-errors COMMENT [{ target/xfail SELECTOR }] }'
4473     This DejaGnu directive indicates that the test is expected to fail
4474     due to compiler messages that are not handled by 'dg-error',
4475     'dg-warning' or 'dg-bogus'.  For this directive 'xfail' has the
4476     same effect as 'target'.
4477
4478'{ dg-prune-output REGEXP }'
4479     Prune messages matching REGEXP from the test output.
4480
44817.2.1.8 Verify output of the test executable
4482............................................
4483
4484'{ dg-output REGEXP [{ target/xfail SELECTOR }] }'
4485     This DejaGnu directive compares REGEXP to the combined output that
4486     the test executable writes to 'stdout' and 'stderr'.
4487
44887.2.1.9 Specify environment variables for a test
4489................................................
4490
4491'{ dg-set-compiler-env-var VAR_NAME "VAR_VALUE" }'
4492     Specify that the environment variable VAR_NAME needs to be set to
4493     VAR_VALUE before invoking the compiler on the test file.
4494
4495'{ dg-set-target-env-var VAR_NAME "VAR_VALUE" }'
4496     Specify that the environment variable VAR_NAME needs to be set to
4497     VAR_VALUE before execution of the program created by the test.
4498
44997.2.1.10 Specify additional files for a test
4500............................................
4501
4502'{ dg-additional-files "FILELIST" }'
4503     Specify additional files, other than source files, that must be
4504     copied to the system where the compiler runs.
4505
4506'{ dg-additional-sources "FILELIST" }'
4507     Specify additional source files to appear in the compile line
4508     following the main test file.
4509
45107.2.1.11 Add checks at the end of a test
4511........................................
4512
4513'{ dg-final { LOCAL-DIRECTIVE } }'
4514     This DejaGnu directive is placed within a comment anywhere in the
4515     source file and is processed after the test has been compiled and
4516     run.  Multiple 'dg-final' commands are processed in the order in
4517     which they appear in the source file.  *Note Final Actions::, for a
4518     list of directives that can be used within 'dg-final'.
4519
4520
4521File: gccint.info,  Node: Selectors,  Next: Effective-Target Keywords,  Prev: Directives,  Up: Test Directives
4522
45237.2.2 Selecting targets to which a test applies
4524-----------------------------------------------
4525
4526Several test directives include SELECTORs to limit the targets for which
4527a test is run or to declare that a test is expected to fail on
4528particular targets.
4529
4530 A selector is:
4531   * one or more target triplets, possibly including wildcard
4532     characters; use '*-*-*' to match any target
4533   * a single effective-target keyword (*note Effective-Target
4534     Keywords::)
4535   * a logical expression
4536
4537 Depending on the context, the selector specifies whether a test is
4538skipped and reported as unsupported or is expected to fail.  A context
4539that allows either 'target' or 'xfail' also allows '{ target SELECTOR1
4540xfail SELECTOR2 }' to skip the test for targets that don't match
4541SELECTOR1 and the test to fail for targets that match SELECTOR2.
4542
4543 A selector expression appears within curly braces and uses a single
4544logical operator: one of '!', '&&', or '||'.  An operand is another
4545selector expression, an effective-target keyword, a single target
4546triplet, or a list of target triplets within quotes or curly braces.
4547For example:
4548
4549     { target { ! "hppa*-*-* ia64*-*-*" } }
4550     { target { powerpc*-*-* && lp64 } }
4551     { xfail { lp64 || vect_no_align } }
4552
4553
4554File: gccint.info,  Node: Effective-Target Keywords,  Next: Add Options,  Prev: Selectors,  Up: Test Directives
4555
45567.2.3 Keywords describing target attributes
4557-------------------------------------------
4558
4559Effective-target keywords identify sets of targets that support
4560particular functionality.  They are used to limit tests to be run only
4561for particular targets, or to specify that particular sets of targets
4562are expected to fail some tests.
4563
4564 Effective-target keywords are defined in 'lib/target-supports.exp' in
4565the GCC testsuite, with the exception of those that are documented as
4566being local to a particular test directory.
4567
4568 The 'effective target' takes into account all of the compiler options
4569with which the test will be compiled, including the multilib options.
4570By convention, keywords ending in '_nocache' can also include options
4571specified for the particular test in an earlier 'dg-options' or
4572'dg-add-options' directive.
4573
45747.2.3.1 Endianness
4575..................
4576
4577'be'
4578     Target uses big-endian memory order for multi-byte and multi-word
4579     data.
4580
4581'le'
4582     Target uses little-endian memory order for multi-byte and
4583     multi-word data.
4584
45857.2.3.2 Data type sizes
4586.......................
4587
4588'ilp32'
4589     Target has 32-bit 'int', 'long', and pointers.
4590
4591'lp64'
4592     Target has 32-bit 'int', 64-bit 'long' and pointers.
4593
4594'llp64'
4595     Target has 32-bit 'int' and 'long', 64-bit 'long long' and
4596     pointers.
4597
4598'double64'
4599     Target has 64-bit 'double'.
4600
4601'double64plus'
4602     Target has 'double' that is 64 bits or longer.
4603
4604'longdouble128'
4605     Target has 128-bit 'long double'.
4606
4607'int32plus'
4608     Target has 'int' that is at 32 bits or longer.
4609
4610'int16'
4611     Target has 'int' that is 16 bits or shorter.
4612
4613'longlong64'
4614     Target has 64-bit 'long long'.
4615
4616'long_neq_int'
4617     Target has 'int' and 'long' with different sizes.
4618
4619'int_eq_float'
4620     Target has 'int' and 'float' with the same size.
4621
4622'ptr_eq_long'
4623     Target has pointers ('void *') and 'long' with the same size.
4624
4625'large_double'
4626     Target supports 'double' that is longer than 'float'.
4627
4628'large_long_double'
4629     Target supports 'long double' that is longer than 'double'.
4630
4631'ptr32plus'
4632     Target has pointers that are 32 bits or longer.
4633
4634'size20plus'
4635     Target has a 20-bit or larger address space, so at least supports
4636     16-bit array and structure sizes.
4637
4638'size32plus'
4639     Target has a 32-bit or larger address space, so at least supports
4640     24-bit array and structure sizes.
4641
4642'4byte_wchar_t'
4643     Target has 'wchar_t' that is at least 4 bytes.
4644
4645'floatN'
4646     Target has the '_FloatN' type.
4647
4648'floatNx'
4649     Target has the '_FloatNx' type.
4650
4651'floatN_runtime'
4652     Target has the '_FloatN' type, including runtime support for any
4653     options added with 'dg-add-options'.
4654
4655'floatNx_runtime'
4656     Target has the '_FloatNx' type, including runtime support for any
4657     options added with 'dg-add-options'.
4658
4659'floatn_nx_runtime'
4660     Target has runtime support for any options added with
4661     'dg-add-options' for any '_FloatN' or '_FloatNx' type.
4662
4663'inf'
4664     Target supports floating point infinite ('inf') for type 'double'.
4665
46667.2.3.3 Fortran-specific attributes
4667...................................
4668
4669'fortran_integer_16'
4670     Target supports Fortran 'integer' that is 16 bytes or longer.
4671
4672'fortran_real_10'
4673     Target supports Fortran 'real' that is 10 bytes or longer.
4674
4675'fortran_real_16'
4676     Target supports Fortran 'real' that is 16 bytes or longer.
4677
4678'fortran_large_int'
4679     Target supports Fortran 'integer' kinds larger than 'integer(8)'.
4680
4681'fortran_large_real'
4682     Target supports Fortran 'real' kinds larger than 'real(8)'.
4683
46847.2.3.4 Vector-specific attributes
4685..................................
4686
4687'vect_align_stack_vars'
4688     The target's ABI allows stack variables to be aligned to the
4689     preferred vector alignment.
4690
4691'vect_avg_qi'
4692     Target supports both signed and unsigned averaging operations on
4693     vectors of bytes.
4694
4695'vect_mulhrs_hi'
4696     Target supports both signed and unsigned
4697     multiply-high-with-round-and-scale operations on vectors of
4698     half-words.
4699
4700'vect_sdiv_pow2_si'
4701     Target supports signed division by constant power-of-2 operations
4702     on vectors of 4-byte integers.
4703
4704'vect_condition'
4705     Target supports vector conditional operations.
4706
4707'vect_cond_mixed'
4708     Target supports vector conditional operations where comparison
4709     operands have different type from the value operands.
4710
4711'vect_double'
4712     Target supports hardware vectors of 'double'.
4713
4714'vect_double_cond_arith'
4715     Target supports conditional addition, subtraction, multiplication,
4716     division, minimum and maximum on vectors of 'double', via the
4717     'cond_' optabs.
4718
4719'vect_element_align_preferred'
4720     The target's preferred vector alignment is the same as the element
4721     alignment.
4722
4723'vect_float'
4724     Target supports hardware vectors of 'float' when
4725     '-funsafe-math-optimizations' is in effect.
4726
4727'vect_float_strict'
4728     Target supports hardware vectors of 'float' when
4729     '-funsafe-math-optimizations' is not in effect.  This implies
4730     'vect_float'.
4731
4732'vect_int'
4733     Target supports hardware vectors of 'int'.
4734
4735'vect_long'
4736     Target supports hardware vectors of 'long'.
4737
4738'vect_long_long'
4739     Target supports hardware vectors of 'long long'.
4740
4741'vect_check_ptrs'
4742     Target supports the 'check_raw_ptrs' and 'check_war_ptrs' optabs on
4743     vectors.
4744
4745'vect_fully_masked'
4746     Target supports fully-masked (also known as fully-predicated)
4747     loops, so that vector loops can handle partial as well as full
4748     vectors.
4749
4750'vect_masked_store'
4751     Target supports vector masked stores.
4752
4753'vect_scatter_store'
4754     Target supports vector scatter stores.
4755
4756'vect_aligned_arrays'
4757     Target aligns arrays to vector alignment boundary.
4758
4759'vect_hw_misalign'
4760     Target supports a vector misalign access.
4761
4762'vect_no_align'
4763     Target does not support a vector alignment mechanism.
4764
4765'vect_peeling_profitable'
4766     Target might require to peel loops for alignment purposes.
4767
4768'vect_no_int_min_max'
4769     Target does not support a vector min and max instruction on 'int'.
4770
4771'vect_no_int_add'
4772     Target does not support a vector add instruction on 'int'.
4773
4774'vect_no_bitwise'
4775     Target does not support vector bitwise instructions.
4776
4777'vect_bool_cmp'
4778     Target supports comparison of 'bool' vectors for at least one
4779     vector length.
4780
4781'vect_char_add'
4782     Target supports addition of 'char' vectors for at least one vector
4783     length.
4784
4785'vect_char_mult'
4786     Target supports 'vector char' multiplication.
4787
4788'vect_short_mult'
4789     Target supports 'vector short' multiplication.
4790
4791'vect_int_mult'
4792     Target supports 'vector int' multiplication.
4793
4794'vect_long_mult'
4795     Target supports 64 bit 'vector long' multiplication.
4796
4797'vect_extract_even_odd'
4798     Target supports vector even/odd element extraction.
4799
4800'vect_extract_even_odd_wide'
4801     Target supports vector even/odd element extraction of vectors with
4802     elements 'SImode' or larger.
4803
4804'vect_interleave'
4805     Target supports vector interleaving.
4806
4807'vect_strided'
4808     Target supports vector interleaving and extract even/odd.
4809
4810'vect_strided_wide'
4811     Target supports vector interleaving and extract even/odd for wide
4812     element types.
4813
4814'vect_perm'
4815     Target supports vector permutation.
4816
4817'vect_perm_byte'
4818     Target supports permutation of vectors with 8-bit elements.
4819
4820'vect_perm_short'
4821     Target supports permutation of vectors with 16-bit elements.
4822
4823'vect_perm3_byte'
4824     Target supports permutation of vectors with 8-bit elements, and for
4825     the default vector length it is possible to permute:
4826          { a0, a1, a2, b0, b1, b2, ... }
4827     to:
4828          { a0, a0, a0, b0, b0, b0, ... }
4829          { a1, a1, a1, b1, b1, b1, ... }
4830          { a2, a2, a2, b2, b2, b2, ... }
4831     using only two-vector permutes, regardless of how long the sequence
4832     is.
4833
4834'vect_perm3_int'
4835     Like 'vect_perm3_byte', but for 32-bit elements.
4836
4837'vect_perm3_short'
4838     Like 'vect_perm3_byte', but for 16-bit elements.
4839
4840'vect_shift'
4841     Target supports a hardware vector shift operation.
4842
4843'vect_unaligned_possible'
4844     Target prefers vectors to have an alignment greater than element
4845     alignment, but also allows unaligned vector accesses in some
4846     circumstances.
4847
4848'vect_variable_length'
4849     Target has variable-length vectors.
4850
4851'vect_widen_sum_hi_to_si'
4852     Target supports a vector widening summation of 'short' operands
4853     into 'int' results, or can promote (unpack) from 'short' to 'int'.
4854
4855'vect_widen_sum_qi_to_hi'
4856     Target supports a vector widening summation of 'char' operands into
4857     'short' results, or can promote (unpack) from 'char' to 'short'.
4858
4859'vect_widen_sum_qi_to_si'
4860     Target supports a vector widening summation of 'char' operands into
4861     'int' results.
4862
4863'vect_widen_mult_qi_to_hi'
4864     Target supports a vector widening multiplication of 'char' operands
4865     into 'short' results, or can promote (unpack) from 'char' to
4866     'short' and perform non-widening multiplication of 'short'.
4867
4868'vect_widen_mult_hi_to_si'
4869     Target supports a vector widening multiplication of 'short'
4870     operands into 'int' results, or can promote (unpack) from 'short'
4871     to 'int' and perform non-widening multiplication of 'int'.
4872
4873'vect_widen_mult_si_to_di_pattern'
4874     Target supports a vector widening multiplication of 'int' operands
4875     into 'long' results.
4876
4877'vect_sdot_qi'
4878     Target supports a vector dot-product of 'signed char'.
4879
4880'vect_udot_qi'
4881     Target supports a vector dot-product of 'unsigned char'.
4882
4883'vect_sdot_hi'
4884     Target supports a vector dot-product of 'signed short'.
4885
4886'vect_udot_hi'
4887     Target supports a vector dot-product of 'unsigned short'.
4888
4889'vect_pack_trunc'
4890     Target supports a vector demotion (packing) of 'short' to 'char'
4891     and from 'int' to 'short' using modulo arithmetic.
4892
4893'vect_unpack'
4894     Target supports a vector promotion (unpacking) of 'char' to 'short'
4895     and from 'char' to 'int'.
4896
4897'vect_intfloat_cvt'
4898     Target supports conversion from 'signed int' to 'float'.
4899
4900'vect_uintfloat_cvt'
4901     Target supports conversion from 'unsigned int' to 'float'.
4902
4903'vect_floatint_cvt'
4904     Target supports conversion from 'float' to 'signed int'.
4905
4906'vect_floatuint_cvt'
4907     Target supports conversion from 'float' to 'unsigned int'.
4908
4909'vect_intdouble_cvt'
4910     Target supports conversion from 'signed int' to 'double'.
4911
4912'vect_doubleint_cvt'
4913     Target supports conversion from 'double' to 'signed int'.
4914
4915'vect_max_reduc'
4916     Target supports max reduction for vectors.
4917
4918'vect_sizes_16B_8B'
4919     Target supports 16- and 8-bytes vectors.
4920
4921'vect_sizes_32B_16B'
4922     Target supports 32- and 16-bytes vectors.
4923
4924'vect_logical_reduc'
4925     Target supports AND, IOR and XOR reduction on vectors.
4926
4927'vect_fold_extract_last'
4928     Target supports the 'fold_extract_last' optab.
4929
49307.2.3.5 Thread Local Storage attributes
4931.......................................
4932
4933'tls'
4934     Target supports thread-local storage.
4935
4936'tls_native'
4937     Target supports native (rather than emulated) thread-local storage.
4938
4939'tls_runtime'
4940     Test system supports executing TLS executables.
4941
49427.2.3.6 Decimal floating point attributes
4943.........................................
4944
4945'dfp'
4946     Targets supports compiling decimal floating point extension to C.
4947
4948'dfp_nocache'
4949     Including the options used to compile this particular test, the
4950     target supports compiling decimal floating point extension to C.
4951
4952'dfprt'
4953     Test system can execute decimal floating point tests.
4954
4955'dfprt_nocache'
4956     Including the options used to compile this particular test, the
4957     test system can execute decimal floating point tests.
4958
4959'hard_dfp'
4960     Target generates decimal floating point instructions with current
4961     options.
4962
49637.2.3.7 ARM-specific attributes
4964...............................
4965
4966'arm32'
4967     ARM target generates 32-bit code.
4968
4969'arm_little_endian'
4970     ARM target that generates little-endian code.
4971
4972'arm_eabi'
4973     ARM target adheres to the ABI for the ARM Architecture.
4974
4975'arm_fp_ok'
4976     ARM target defines '__ARM_FP' using '-mfloat-abi=softfp' or
4977     equivalent options.  Some multilibs may be incompatible with these
4978     options.
4979
4980'arm_fp_dp_ok'
4981     ARM target defines '__ARM_FP' with double-precision support using
4982     '-mfloat-abi=softfp' or equivalent options.  Some multilibs may be
4983     incompatible with these options.
4984
4985'arm_hf_eabi'
4986     ARM target adheres to the VFP and Advanced SIMD Register Arguments
4987     variant of the ABI for the ARM Architecture (as selected with
4988     '-mfloat-abi=hard').
4989
4990'arm_softfloat'
4991     ARM target uses the soft-float ABI with no floating-point
4992     instructions used whatsoever (as selected with '-mfloat-abi=soft').
4993
4994'arm_hard_vfp_ok'
4995     ARM target supports '-mfpu=vfp -mfloat-abi=hard'.  Some multilibs
4996     may be incompatible with these options.
4997
4998'arm_iwmmxt_ok'
4999     ARM target supports '-mcpu=iwmmxt'.  Some multilibs may be
5000     incompatible with this option.
5001
5002'arm_neon'
5003     ARM target supports generating NEON instructions.
5004
5005'arm_tune_string_ops_prefer_neon'
5006     Test CPU tune supports inlining string operations with NEON
5007     instructions.
5008
5009'arm_neon_hw'
5010     Test system supports executing NEON instructions.
5011
5012'arm_neonv2_hw'
5013     Test system supports executing NEON v2 instructions.
5014
5015'arm_neon_ok'
5016     ARM Target supports '-mfpu=neon -mfloat-abi=softfp' or compatible
5017     options.  Some multilibs may be incompatible with these options.
5018
5019'arm_neon_ok_no_float_abi'
5020     ARM Target supports NEON with '-mfpu=neon', but without any
5021     -mfloat-abi= option.  Some multilibs may be incompatible with this
5022     option.
5023
5024'arm_neonv2_ok'
5025     ARM Target supports '-mfpu=neon-vfpv4 -mfloat-abi=softfp' or
5026     compatible options.  Some multilibs may be incompatible with these
5027     options.
5028
5029'arm_fp16_ok'
5030     Target supports options to generate VFP half-precision
5031     floating-point instructions.  Some multilibs may be incompatible
5032     with these options.  This test is valid for ARM only.
5033
5034'arm_fp16_hw'
5035     Target supports executing VFP half-precision floating-point
5036     instructions.  This test is valid for ARM only.
5037
5038'arm_neon_fp16_ok'
5039     ARM Target supports '-mfpu=neon-fp16 -mfloat-abi=softfp' or
5040     compatible options, including '-mfp16-format=ieee' if necessary to
5041     obtain the '__fp16' type.  Some multilibs may be incompatible with
5042     these options.
5043
5044'arm_neon_fp16_hw'
5045     Test system supports executing Neon half-precision float
5046     instructions.  (Implies previous.)
5047
5048'arm_fp16_alternative_ok'
5049     ARM target supports the ARM FP16 alternative format.  Some
5050     multilibs may be incompatible with the options needed.
5051
5052'arm_fp16_none_ok'
5053     ARM target supports specifying none as the ARM FP16 format.
5054
5055'arm_thumb1_ok'
5056     ARM target generates Thumb-1 code for '-mthumb'.
5057
5058'arm_thumb2_ok'
5059     ARM target generates Thumb-2 code for '-mthumb'.
5060
5061'arm_nothumb'
5062     ARM target that is not using Thumb.
5063
5064'arm_vfp_ok'
5065     ARM target supports '-mfpu=vfp -mfloat-abi=softfp'.  Some multilibs
5066     may be incompatible with these options.
5067
5068'arm_vfp3_ok'
5069     ARM target supports '-mfpu=vfp3 -mfloat-abi=softfp'.  Some
5070     multilibs may be incompatible with these options.
5071
5072'arm_arch_v8a_hard_ok'
5073     The compiler is targeting 'arm*-*-*' and can compile and assemble
5074     code using the options '-march=armv8-a -mfpu=neon-fp-armv8
5075     -mfloat-abi=hard'.  This is not enough to guarantee that linking
5076     works.
5077
5078'arm_arch_v8a_hard_multilib'
5079     The compiler is targeting 'arm*-*-*' and can build programs using
5080     the options '-march=armv8-a -mfpu=neon-fp-armv8 -mfloat-abi=hard'.
5081     The target can also run the resulting binaries.
5082
5083'arm_v8_vfp_ok'
5084     ARM target supports '-mfpu=fp-armv8 -mfloat-abi=softfp'.  Some
5085     multilibs may be incompatible with these options.
5086
5087'arm_v8_neon_ok'
5088     ARM target supports '-mfpu=neon-fp-armv8 -mfloat-abi=softfp'.  Some
5089     multilibs may be incompatible with these options.
5090
5091'arm_v8_1a_neon_ok'
5092     ARM target supports options to generate ARMv8.1-A Adv.SIMD
5093     instructions.  Some multilibs may be incompatible with these
5094     options.
5095
5096'arm_v8_1a_neon_hw'
5097     ARM target supports executing ARMv8.1-A Adv.SIMD instructions.
5098     Some multilibs may be incompatible with the options needed.
5099     Implies arm_v8_1a_neon_ok.
5100
5101'arm_acq_rel'
5102     ARM target supports acquire-release instructions.
5103
5104'arm_v8_2a_fp16_scalar_ok'
5105     ARM target supports options to generate instructions for ARMv8.2-A
5106     and scalar instructions from the FP16 extension.  Some multilibs
5107     may be incompatible with these options.
5108
5109'arm_v8_2a_fp16_scalar_hw'
5110     ARM target supports executing instructions for ARMv8.2-A and scalar
5111     instructions from the FP16 extension.  Some multilibs may be
5112     incompatible with these options.  Implies arm_v8_2a_fp16_neon_ok.
5113
5114'arm_v8_2a_fp16_neon_ok'
5115     ARM target supports options to generate instructions from ARMv8.2-A
5116     with the FP16 extension.  Some multilibs may be incompatible with
5117     these options.  Implies arm_v8_2a_fp16_scalar_ok.
5118
5119'arm_v8_2a_fp16_neon_hw'
5120     ARM target supports executing instructions from ARMv8.2-A with the
5121     FP16 extension.  Some multilibs may be incompatible with these
5122     options.  Implies arm_v8_2a_fp16_neon_ok and
5123     arm_v8_2a_fp16_scalar_hw.
5124
5125'arm_v8_2a_dotprod_neon_ok'
5126     ARM target supports options to generate instructions from ARMv8.2-A
5127     with the Dot Product extension.  Some multilibs may be incompatible
5128     with these options.
5129
5130'arm_v8_2a_dotprod_neon_hw'
5131     ARM target supports executing instructions from ARMv8.2-A with the
5132     Dot Product extension.  Some multilibs may be incompatible with
5133     these options.  Implies arm_v8_2a_dotprod_neon_ok.
5134
5135'arm_fp16fml_neon_ok'
5136     ARM target supports extensions to generate the 'VFMAL' and 'VFMLS'
5137     half-precision floating-point instructions available from ARMv8.2-A
5138     and onwards.  Some multilibs may be incompatible with these
5139     options.
5140
5141'arm_v8_2a_bf16_neon_ok'
5142     ARM target supports options to generate instructions from ARMv8.2-A
5143     with the BFloat16 extension (bf16).  Some multilibs may be
5144     incompatible with these options.
5145
5146'arm_v8_2a_i8mm_ok'
5147     ARM target supports options to generate instructions from ARMv8.2-A
5148     with the 8-Bit Integer Matrix Multiply extension (i8mm).  Some
5149     multilibs may be incompatible with these options.
5150
5151'arm_v8_1m_mve_ok'
5152     ARM target supports options to generate instructions from ARMv8.1-M
5153     with the M-Profile Vector Extension (MVE). Some multilibs may be
5154     incompatible with these options.
5155
5156'arm_v8_1m_mve_fp_ok'
5157     ARM target supports options to generate instructions from ARMv8.1-M
5158     with the Half-precision floating-point instructions (HP),
5159     Floating-point Extension (FP) along with M-Profile Vector Extension
5160     (MVE). Some multilibs may be incompatible with these options.
5161
5162'arm_mve_hw'
5163     Test system supports executing MVE instructions.
5164
5165'arm_v8m_main_cde'
5166     ARM target supports options to generate instructions from ARMv8-M
5167     with the Custom Datapath Extension (CDE). Some multilibs may be
5168     incompatible with these options.
5169
5170'arm_v8m_main_cde_fp'
5171     ARM target supports options to generate instructions from ARMv8-M
5172     with the Custom Datapath Extension (CDE) and floating-point (VFP).
5173     Some multilibs may be incompatible with these options.
5174
5175'arm_v8_1m_main_cde_mve'
5176     ARM target supports options to generate instructions from ARMv8.1-M
5177     with the Custom Datapath Extension (CDE) and M-Profile Vector
5178     Extension (MVE). Some multilibs may be incompatible with these
5179     options.
5180
5181'arm_prefer_ldrd_strd'
5182     ARM target prefers 'LDRD' and 'STRD' instructions over 'LDM' and
5183     'STM' instructions.
5184
5185'arm_thumb1_movt_ok'
5186     ARM target generates Thumb-1 code for '-mthumb' with 'MOVW' and
5187     'MOVT' instructions available.
5188
5189'arm_thumb1_cbz_ok'
5190     ARM target generates Thumb-1 code for '-mthumb' with 'CBZ' and
5191     'CBNZ' instructions available.
5192
5193'arm_divmod_simode'
5194     ARM target for which divmod transform is disabled, if it supports
5195     hardware div instruction.
5196
5197'arm_cmse_ok'
5198     ARM target supports ARMv8-M Security Extensions, enabled by the
5199     '-mcmse' option.
5200
5201'arm_coproc1_ok'
5202     ARM target supports the following coprocessor instructions: 'CDP',
5203     'LDC', 'STC', 'MCR' and 'MRC'.
5204
5205'arm_coproc2_ok'
5206     ARM target supports all the coprocessor instructions also listed as
5207     supported in *note arm_coproc1_ok:: in addition to the following:
5208     'CDP2', 'LDC2', 'LDC2l', 'STC2', 'STC2l', 'MCR2' and 'MRC2'.
5209
5210'arm_coproc3_ok'
5211     ARM target supports all the coprocessor instructions also listed as
5212     supported in *note arm_coproc2_ok:: in addition the following:
5213     'MCRR' and 'MRRC'.
5214
5215'arm_coproc4_ok'
5216     ARM target supports all the coprocessor instructions also listed as
5217     supported in *note arm_coproc3_ok:: in addition the following:
5218     'MCRR2' and 'MRRC2'.
5219
5220'arm_simd32_ok'
5221     ARM Target supports options suitable for accessing the SIMD32
5222     intrinsics from 'arm_acle.h'.  Some multilibs may be incompatible
5223     with these options.
5224
5225'arm_qbit_ok'
5226     ARM Target supports options suitable for accessing the Q-bit
5227     manipulation intrinsics from 'arm_acle.h'.  Some multilibs may be
5228     incompatible with these options.
5229
5230'arm_softfp_ok'
5231     ARM target supports the '-mfloat-abi=softfp' option.
5232
5233'arm_hard_ok'
5234     ARM target supports the '-mfloat-abi=hard' option.
5235
52367.2.3.8 AArch64-specific attributes
5237...................................
5238
5239'aarch64_asm_<ext>_ok'
5240     AArch64 assembler supports the architecture extension 'ext' via the
5241     '.arch_extension' pseudo-op.
5242'aarch64_tiny'
5243     AArch64 target which generates instruction sequences for tiny
5244     memory model.
5245'aarch64_small'
5246     AArch64 target which generates instruction sequences for small
5247     memory model.
5248'aarch64_large'
5249     AArch64 target which generates instruction sequences for large
5250     memory model.
5251'aarch64_little_endian'
5252     AArch64 target which generates instruction sequences for little
5253     endian.
5254'aarch64_big_endian'
5255     AArch64 target which generates instruction sequences for big
5256     endian.
5257'aarch64_small_fpic'
5258     Binutils installed on test system supports relocation types
5259     required by -fpic for AArch64 small memory model.
5260'aarch64_sve_hw'
5261     AArch64 target that is able to generate and execute SVE code
5262     (regardless of whether it does so by default).
5263'aarch64_sve128_hw'
5264'aarch64_sve256_hw'
5265'aarch64_sve512_hw'
5266'aarch64_sve1024_hw'
5267'aarch64_sve2048_hw'
5268     Like 'aarch64_sve_hw', but also test for an exact hardware vector
5269     length.
5270
5271'aarch64_fjcvtzs_hw'
5272     AArch64 target that is able to generate and execute armv8.3-a
5273     FJCVTZS instruction.
5274
52757.2.3.9 MIPS-specific attributes
5276................................
5277
5278'mips64'
5279     MIPS target supports 64-bit instructions.
5280
5281'nomips16'
5282     MIPS target does not produce MIPS16 code.
5283
5284'mips16_attribute'
5285     MIPS target can generate MIPS16 code.
5286
5287'mips_loongson'
5288     MIPS target is a Loongson-2E or -2F target using an ABI that
5289     supports the Loongson vector modes.
5290
5291'mips_msa'
5292     MIPS target supports '-mmsa', MIPS SIMD Architecture (MSA).
5293
5294'mips_newabi_large_long_double'
5295     MIPS target supports 'long double' larger than 'double' when using
5296     the new ABI.
5297
5298'mpaired_single'
5299     MIPS target supports '-mpaired-single'.
5300
53017.2.3.10 PowerPC-specific attributes
5302....................................
5303
5304'dfp_hw'
5305     PowerPC target supports executing hardware DFP instructions.
5306
5307'p8vector_hw'
5308     PowerPC target supports executing VSX instructions (ISA 2.07).
5309
5310'powerpc64'
5311     Test system supports executing 64-bit instructions.
5312
5313'powerpc_altivec'
5314     PowerPC target supports AltiVec.
5315
5316'powerpc_altivec_ok'
5317     PowerPC target supports '-maltivec'.
5318
5319'powerpc_eabi_ok'
5320     PowerPC target supports '-meabi'.
5321
5322'powerpc_elfv2'
5323     PowerPC target supports '-mabi=elfv2'.
5324
5325'powerpc_fprs'
5326     PowerPC target supports floating-point registers.
5327
5328'powerpc_hard_double'
5329     PowerPC target supports hardware double-precision floating-point.
5330
5331'powerpc_htm_ok'
5332     PowerPC target supports '-mhtm'
5333
5334'powerpc_p8vector_ok'
5335     PowerPC target supports '-mpower8-vector'
5336
5337'powerpc_popcntb_ok'
5338     PowerPC target supports the 'popcntb' instruction, indicating that
5339     this target supports '-mcpu=power5'.
5340
5341'powerpc_ppu_ok'
5342     PowerPC target supports '-mcpu=cell'.
5343
5344'powerpc_spe'
5345     PowerPC target supports PowerPC SPE.
5346
5347'powerpc_spe_nocache'
5348     Including the options used to compile this particular test, the
5349     PowerPC target supports PowerPC SPE.
5350
5351'powerpc_spu'
5352     PowerPC target supports PowerPC SPU.
5353
5354'powerpc_vsx_ok'
5355     PowerPC target supports '-mvsx'.
5356
5357'powerpc_405_nocache'
5358     Including the options used to compile this particular test, the
5359     PowerPC target supports PowerPC 405.
5360
5361'ppc_recip_hw'
5362     PowerPC target supports executing reciprocal estimate instructions.
5363
5364'vmx_hw'
5365     PowerPC target supports executing AltiVec instructions.
5366
5367'vsx_hw'
5368     PowerPC target supports executing VSX instructions (ISA 2.06).
5369
53707.2.3.11 Other hardware attributes
5371..................................
5372
5373'autoincdec'
5374     Target supports autoincrement/decrement addressing.
5375
5376'avx'
5377     Target supports compiling 'avx' instructions.
5378
5379'avx_runtime'
5380     Target supports the execution of 'avx' instructions.
5381
5382'avx2'
5383     Target supports compiling 'avx2' instructions.
5384
5385'avx2_runtime'
5386     Target supports the execution of 'avx2' instructions.
5387
5388'avx512f'
5389     Target supports compiling 'avx512f' instructions.
5390
5391'avx512f_runtime'
5392     Target supports the execution of 'avx512f' instructions.
5393
5394'avx512vp2intersect'
5395     Target supports the execution of 'avx512vp2intersect' instructions.
5396
5397'cell_hw'
5398     Test system can execute AltiVec and Cell PPU instructions.
5399
5400'coldfire_fpu'
5401     Target uses a ColdFire FPU.
5402
5403'divmod'
5404     Target supporting hardware divmod insn or divmod libcall.
5405
5406'divmod_simode'
5407     Target supporting hardware divmod insn or divmod libcall for
5408     SImode.
5409
5410'hard_float'
5411     Target supports FPU instructions.
5412
5413'non_strict_align'
5414     Target does not require strict alignment.
5415
5416'pie_copyreloc'
5417     The x86-64 target linker supports PIE with copy reloc.
5418
5419'rdrand'
5420     Target supports x86 'rdrand' instruction.
5421
5422'sqrt_insn'
5423     Target has a square root instruction that the compiler can
5424     generate.
5425
5426'sse'
5427     Target supports compiling 'sse' instructions.
5428
5429'sse_runtime'
5430     Target supports the execution of 'sse' instructions.
5431
5432'sse2'
5433     Target supports compiling 'sse2' instructions.
5434
5435'sse2_runtime'
5436     Target supports the execution of 'sse2' instructions.
5437
5438'sync_char_short'
5439     Target supports atomic operations on 'char' and 'short'.
5440
5441'sync_int_long'
5442     Target supports atomic operations on 'int' and 'long'.
5443
5444'ultrasparc_hw'
5445     Test environment appears to run executables on a simulator that
5446     accepts only 'EM_SPARC' executables and chokes on 'EM_SPARC32PLUS'
5447     or 'EM_SPARCV9' executables.
5448
5449'vect_cmdline_needed'
5450     Target requires a command line argument to enable a SIMD
5451     instruction set.
5452
5453'xorsign'
5454     Target supports the xorsign optab expansion.
5455
54567.2.3.12 Environment attributes
5457...............................
5458
5459'c'
5460     The language for the compiler under test is C.
5461
5462'c++'
5463     The language for the compiler under test is C++.
5464
5465'c99_runtime'
5466     Target provides a full C99 runtime.
5467
5468'correct_iso_cpp_string_wchar_protos'
5469     Target 'string.h' and 'wchar.h' headers provide C++ required
5470     overloads for 'strchr' etc.  functions.
5471
5472'd_runtime'
5473     Target provides the D runtime.
5474
5475'd_runtime_has_std_library'
5476     Target provides the D standard library (Phobos).
5477
5478'dummy_wcsftime'
5479     Target uses a dummy 'wcsftime' function that always returns zero.
5480
5481'fd_truncate'
5482     Target can truncate a file from a file descriptor, as used by
5483     'libgfortran/io/unix.c:fd_truncate'; i.e. 'ftruncate' or 'chsize'.
5484
5485'fenv'
5486     Target provides 'fenv.h' include file.
5487
5488'fenv_exceptions'
5489     Target supports 'fenv.h' with all the standard IEEE exceptions and
5490     floating-point exceptions are raised by arithmetic operations.
5491
5492'fileio'
5493     Target offers such file I/O library functions as 'fopen', 'fclose',
5494     'tmpnam', and 'remove'.  This is a link-time requirement for the
5495     presence of the functions in the library; even if they fail at
5496     runtime, the requirement is still regarded as satisfied.
5497
5498'freestanding'
5499     Target is 'freestanding' as defined in section 4 of the C99
5500     standard.  Effectively, it is a target which supports no extra
5501     headers or libraries other than what is considered essential.
5502
5503'gettimeofday'
5504     Target supports 'gettimeofday'.
5505
5506'init_priority'
5507     Target supports constructors with initialization priority
5508     arguments.
5509
5510'inttypes_types'
5511     Target has the basic signed and unsigned types in 'inttypes.h'.
5512     This is for tests that GCC's notions of these types agree with
5513     those in the header, as some systems have only 'inttypes.h'.
5514
5515'lax_strtofp'
5516     Target might have errors of a few ULP in string to floating-point
5517     conversion functions and overflow is not always detected correctly
5518     by those functions.
5519
5520'mempcpy'
5521     Target provides 'mempcpy' function.
5522
5523'mmap'
5524     Target supports 'mmap'.
5525
5526'newlib'
5527     Target supports Newlib.
5528
5529'newlib_nano_io'
5530     GCC was configured with '--enable-newlib-nano-formatted-io', which
5531     reduces the code size of Newlib formatted I/O functions.
5532
5533'pow10'
5534     Target provides 'pow10' function.
5535
5536'pthread'
5537     Target can compile using 'pthread.h' with no errors or warnings.
5538
5539'pthread_h'
5540     Target has 'pthread.h'.
5541
5542'run_expensive_tests'
5543     Expensive testcases (usually those that consume excessive amounts
5544     of CPU time) should be run on this target.  This can be enabled by
5545     setting the 'GCC_TEST_RUN_EXPENSIVE' environment variable to a
5546     non-empty string.
5547
5548'simulator'
5549     Test system runs executables on a simulator (i.e. slowly) rather
5550     than hardware (i.e. fast).
5551
5552'signal'
5553     Target has 'signal.h'.
5554
5555'stabs'
5556     Target supports the stabs debugging format.
5557
5558'stdint_types'
5559     Target has the basic signed and unsigned C types in 'stdint.h'.
5560     This will be obsolete when GCC ensures a working 'stdint.h' for all
5561     targets.
5562
5563'stpcpy'
5564     Target provides 'stpcpy' function.
5565
5566'trampolines'
5567     Target supports trampolines.
5568
5569'uclibc'
5570     Target supports uClibc.
5571
5572'unwrapped'
5573     Target does not use a status wrapper.
5574
5575'vxworks_kernel'
5576     Target is a VxWorks kernel.
5577
5578'vxworks_rtp'
5579     Target is a VxWorks RTP.
5580
5581'wchar'
5582     Target supports wide characters.
5583
55847.2.3.13 Other attributes
5585.........................
5586
5587'automatic_stack_alignment'
5588     Target supports automatic stack alignment.
5589
5590'branch_cost'
5591     Target supports '-branch-cost=N'.
5592
5593'cxa_atexit'
5594     Target uses '__cxa_atexit'.
5595
5596'default_packed'
5597     Target has packed layout of structure members by default.
5598
5599'exceptions'
5600     Target supports exceptions.
5601
5602'exceptions_enabled'
5603     Target supports exceptions and they are enabled in the current
5604     testing configuration.
5605
5606'fgraphite'
5607     Target supports Graphite optimizations.
5608
5609'fixed_point'
5610     Target supports fixed-point extension to C.
5611
5612'fopenacc'
5613     Target supports OpenACC via '-fopenacc'.
5614
5615'fopenmp'
5616     Target supports OpenMP via '-fopenmp'.
5617
5618'fpic'
5619     Target supports '-fpic' and '-fPIC'.
5620
5621'freorder'
5622     Target supports '-freorder-blocks-and-partition'.
5623
5624'fstack_protector'
5625     Target supports '-fstack-protector'.
5626
5627'gas'
5628     Target uses GNU 'as'.
5629
5630'gc_sections'
5631     Target supports '--gc-sections'.
5632
5633'gld'
5634     Target uses GNU 'ld'.
5635
5636'keeps_null_pointer_checks'
5637     Target keeps null pointer checks, either due to the use of
5638     '-fno-delete-null-pointer-checks' or hardwired into the target.
5639
5640'llvm_binutils'
5641     Target is using an LLVM assembler and/or linker, instead of GNU
5642     Binutils.
5643
5644'lto'
5645     Compiler has been configured to support link-time optimization
5646     (LTO).
5647
5648'lto_incremental'
5649     Compiler and linker support link-time optimization relocatable
5650     linking with '-r' and '-flto' options.
5651
5652'naked_functions'
5653     Target supports the 'naked' function attribute.
5654
5655'named_sections'
5656     Target supports named sections.
5657
5658'natural_alignment_32'
5659     Target uses natural alignment (aligned to type size) for types of
5660     32 bits or less.
5661
5662'target_natural_alignment_64'
5663     Target uses natural alignment (aligned to type size) for types of
5664     64 bits or less.
5665
5666'noinit'
5667     Target supports the 'noinit' variable attribute.
5668
5669'nonpic'
5670     Target does not generate PIC by default.
5671
5672'offload_gcn'
5673     Target has been configured for OpenACC/OpenMP offloading on AMD
5674     GCN.
5675
5676'pie_enabled'
5677     Target generates PIE by default.
5678
5679'pcc_bitfield_type_matters'
5680     Target defines 'PCC_BITFIELD_TYPE_MATTERS'.
5681
5682'pe_aligned_commons'
5683     Target supports '-mpe-aligned-commons'.
5684
5685'pie'
5686     Target supports '-pie', '-fpie' and '-fPIE'.
5687
5688'rdynamic'
5689     Target supports '-rdynamic'.
5690
5691'scalar_all_fma'
5692     Target supports all four fused multiply-add optabs for both 'float'
5693     and 'double'.  These optabs are: 'fma_optab', 'fms_optab',
5694     'fnma_optab' and 'fnms_optab'.
5695
5696'section_anchors'
5697     Target supports section anchors.
5698
5699'short_enums'
5700     Target defaults to short enums.
5701
5702'stack_size'
5703     Target has limited stack size.  The stack size limit can be
5704     obtained using the STACK_SIZE macro defined by *note
5705     'dg-add-options' feature 'stack_size': stack_size_ao.
5706
5707'static'
5708     Target supports '-static'.
5709
5710'static_libgfortran'
5711     Target supports statically linking 'libgfortran'.
5712
5713'string_merging'
5714     Target supports merging string constants at link time.
5715
5716'ucn'
5717     Target supports compiling and assembling UCN.
5718
5719'ucn_nocache'
5720     Including the options used to compile this particular test, the
5721     target supports compiling and assembling UCN.
5722
5723'unaligned_stack'
5724     Target does not guarantee that its 'STACK_BOUNDARY' is greater than
5725     or equal to the required vector alignment.
5726
5727'vector_alignment_reachable'
5728     Vector alignment is reachable for types of 32 bits or less.
5729
5730'vector_alignment_reachable_for_64bit'
5731     Vector alignment is reachable for types of 64 bits or less.
5732
5733'wchar_t_char16_t_compatible'
5734     Target supports 'wchar_t' that is compatible with 'char16_t'.
5735
5736'wchar_t_char32_t_compatible'
5737     Target supports 'wchar_t' that is compatible with 'char32_t'.
5738
5739'comdat_group'
5740     Target uses comdat groups.
5741
5742'indirect_calls'
5743     Target supports indirect calls, i.e.  calls where the target is not
5744     constant.
5745
57467.2.3.14 Local to tests in 'gcc.target/i386'
5747............................................
5748
5749'3dnow'
5750     Target supports compiling '3dnow' instructions.
5751
5752'aes'
5753     Target supports compiling 'aes' instructions.
5754
5755'fma4'
5756     Target supports compiling 'fma4' instructions.
5757
5758'mfentry'
5759     Target supports the '-mfentry' option that alters the position of
5760     profiling calls such that they precede the prologue.
5761
5762'ms_hook_prologue'
5763     Target supports attribute 'ms_hook_prologue'.
5764
5765'pclmul'
5766     Target supports compiling 'pclmul' instructions.
5767
5768'sse3'
5769     Target supports compiling 'sse3' instructions.
5770
5771'sse4'
5772     Target supports compiling 'sse4' instructions.
5773
5774'sse4a'
5775     Target supports compiling 'sse4a' instructions.
5776
5777'ssse3'
5778     Target supports compiling 'ssse3' instructions.
5779
5780'vaes'
5781     Target supports compiling 'vaes' instructions.
5782
5783'vpclmul'
5784     Target supports compiling 'vpclmul' instructions.
5785
5786'xop'
5787     Target supports compiling 'xop' instructions.
5788
57897.2.3.15 Local to tests in 'gcc.test-framework'
5790...............................................
5791
5792'no'
5793     Always returns 0.
5794
5795'yes'
5796     Always returns 1.
5797
5798
5799File: gccint.info,  Node: Add Options,  Next: Require Support,  Prev: Effective-Target Keywords,  Up: Test Directives
5800
58017.2.4 Features for 'dg-add-options'
5802-----------------------------------
5803
5804The supported values of FEATURE for directive 'dg-add-options' are:
5805
5806'arm_fp'
5807     '__ARM_FP' definition.  Only ARM targets support this feature, and
5808     only then in certain modes; see the *note arm_fp_ok effective
5809     target keyword: arm_fp_ok.
5810
5811'arm_fp_dp'
5812     '__ARM_FP' definition with double-precision support.  Only ARM
5813     targets support this feature, and only then in certain modes; see
5814     the *note arm_fp_dp_ok effective target keyword: arm_fp_dp_ok.
5815
5816'arm_neon'
5817     NEON support.  Only ARM targets support this feature, and only then
5818     in certain modes; see the *note arm_neon_ok effective target
5819     keyword: arm_neon_ok.
5820
5821'arm_fp16'
5822     VFP half-precision floating point support.  This does not select
5823     the FP16 format; for that, use *note arm_fp16_ieee: arm_fp16_ieee.
5824     or *note arm_fp16_alternative: arm_fp16_alternative. instead.  This
5825     feature is only supported by ARM targets and then only in certain
5826     modes; see the *note arm_fp16_ok effective target keyword:
5827     arm_fp16_ok.
5828
5829'arm_fp16_ieee'
5830     ARM IEEE 754-2008 format VFP half-precision floating point support.
5831     This feature is only supported by ARM targets and then only in
5832     certain modes; see the *note arm_fp16_ok effective target keyword:
5833     arm_fp16_ok.
5834
5835'arm_fp16_alternative'
5836     ARM Alternative format VFP half-precision floating point support.
5837     This feature is only supported by ARM targets and then only in
5838     certain modes; see the *note arm_fp16_ok effective target keyword:
5839     arm_fp16_ok.
5840
5841'arm_neon_fp16'
5842     NEON and half-precision floating point support.  Only ARM targets
5843     support this feature, and only then in certain modes; see the *note
5844     arm_neon_fp16_ok effective target keyword: arm_neon_fp16_ok.
5845
5846'arm_vfp3'
5847     arm vfp3 floating point support; see the *note arm_vfp3_ok
5848     effective target keyword: arm_vfp3_ok.
5849
5850'arm_arch_v8a_hard'
5851     Add options for ARMv8-A and the hard-float variant of the AAPCS, if
5852     this is supported by the compiler; see the *note
5853     arm_arch_v8a_hard_ok: arm_arch_v8a_hard_ok. effective target
5854     keyword.
5855
5856'arm_v8_1a_neon'
5857     Add options for ARMv8.1-A with Adv.SIMD support, if this is
5858     supported by the target; see the *note arm_v8_1a_neon_ok:
5859     arm_v8_1a_neon_ok. effective target keyword.
5860
5861'arm_v8_2a_fp16_scalar'
5862     Add options for ARMv8.2-A with scalar FP16 support, if this is
5863     supported by the target; see the *note arm_v8_2a_fp16_scalar_ok:
5864     arm_v8_2a_fp16_scalar_ok. effective target keyword.
5865
5866'arm_v8_2a_fp16_neon'
5867     Add options for ARMv8.2-A with Adv.SIMD FP16 support, if this is
5868     supported by the target; see the *note arm_v8_2a_fp16_neon_ok:
5869     arm_v8_2a_fp16_neon_ok. effective target keyword.
5870
5871'arm_v8_2a_dotprod_neon'
5872     Add options for ARMv8.2-A with Adv.SIMD Dot Product support, if
5873     this is supported by the target; see the *note
5874     arm_v8_2a_dotprod_neon_ok:: effective target keyword.
5875
5876'arm_fp16fml_neon'
5877     Add options to enable generation of the 'VFMAL' and 'VFMSL'
5878     instructions, if this is supported by the target; see the *note
5879     arm_fp16fml_neon_ok:: effective target keyword.
5880
5881'bind_pic_locally'
5882     Add the target-specific flags needed to enable functions to bind
5883     locally when using pic/PIC passes in the testsuite.
5884
5885'floatN'
5886     Add the target-specific flags needed to use the '_FloatN' type.
5887
5888'floatNx'
5889     Add the target-specific flags needed to use the '_FloatNx' type.
5890
5891'ieee'
5892     Add the target-specific flags needed to enable full IEEE compliance
5893     mode.
5894
5895'mips16_attribute'
5896     'mips16' function attributes.  Only MIPS targets support this
5897     feature, and only then in certain modes.
5898
5899'stack_size'
5900     Add the flags needed to define macro STACK_SIZE and set it to the
5901     stack size limit associated with the *note 'stack_size' effective
5902     target: stack_size_et.
5903
5904'sqrt_insn'
5905     Add the target-specific flags needed to enable hardware square root
5906     instructions, if any.
5907
5908'tls'
5909     Add the target-specific flags needed to use thread-local storage.
5910
5911
5912File: gccint.info,  Node: Require Support,  Next: Final Actions,  Prev: Add Options,  Up: Test Directives
5913
59147.2.5 Variants of 'dg-require-SUPPORT'
5915--------------------------------------
5916
5917A few of the 'dg-require' directives take arguments.
5918
5919'dg-require-iconv CODESET'
5920     Skip the test if the target does not support iconv.  CODESET is the
5921     codeset to convert to.
5922
5923'dg-require-profiling PROFOPT'
5924     Skip the test if the target does not support profiling with option
5925     PROFOPT.
5926
5927'dg-require-stack-check CHECK'
5928     Skip the test if the target does not support the '-fstack-check'
5929     option.  If CHECK is '""', support for '-fstack-check' is checked,
5930     for '-fstack-check=("CHECK")' otherwise.
5931
5932'dg-require-stack-size SIZE'
5933     Skip the test if the target does not support a stack size of SIZE.
5934
5935'dg-require-visibility VIS'
5936     Skip the test if the target does not support the 'visibility'
5937     attribute.  If VIS is '""', support for 'visibility("hidden")' is
5938     checked, for 'visibility("VIS")' otherwise.
5939
5940 The original 'dg-require' directives were defined before there was
5941support for effective-target keywords.  The directives that do not take
5942arguments could be replaced with effective-target keywords.
5943
5944'dg-require-alias ""'
5945     Skip the test if the target does not support the 'alias' attribute.
5946
5947'dg-require-ascii-locale ""'
5948     Skip the test if the host does not support an ASCII locale.
5949
5950'dg-require-compat-dfp ""'
5951     Skip this test unless both compilers in a 'compat' testsuite
5952     support decimal floating point.
5953
5954'dg-require-cxa-atexit ""'
5955     Skip the test if the target does not support '__cxa_atexit'.  This
5956     is equivalent to 'dg-require-effective-target cxa_atexit'.
5957
5958'dg-require-dll ""'
5959     Skip the test if the target does not support DLL attributes.
5960
5961'dg-require-dot ""'
5962     Skip the test if the host does not have 'dot'.
5963
5964'dg-require-fork ""'
5965     Skip the test if the target does not support 'fork'.
5966
5967'dg-require-gc-sections ""'
5968     Skip the test if the target's linker does not support the
5969     '--gc-sections' flags.  This is equivalent to
5970     'dg-require-effective-target gc-sections'.
5971
5972'dg-require-host-local ""'
5973     Skip the test if the host is remote, rather than the same as the
5974     build system.  Some tests are incompatible with DejaGnu's handling
5975     of remote hosts, which involves copying the source file to the host
5976     and compiling it with a relative path and "'-o a.out'".
5977
5978'dg-require-mkfifo ""'
5979     Skip the test if the target does not support 'mkfifo'.
5980
5981'dg-require-named-sections ""'
5982     Skip the test is the target does not support named sections.  This
5983     is equivalent to 'dg-require-effective-target named_sections'.
5984
5985'dg-require-weak ""'
5986     Skip the test if the target does not support weak symbols.
5987
5988'dg-require-weak-override ""'
5989     Skip the test if the target does not support overriding weak
5990     symbols.
5991
5992
5993File: gccint.info,  Node: Final Actions,  Prev: Require Support,  Up: Test Directives
5994
59957.2.6 Commands for use in 'dg-final'
5996------------------------------------
5997
5998The GCC testsuite defines the following directives to be used within
5999'dg-final'.
6000
60017.2.6.1 Scan a particular file
6002..............................
6003
6004'scan-file FILENAME REGEXP [{ target/xfail SELECTOR }]'
6005     Passes if REGEXP matches text in FILENAME.
6006'scan-file-not FILENAME REGEXP [{ target/xfail SELECTOR }]'
6007     Passes if REGEXP does not match text in FILENAME.
6008'scan-module MODULE REGEXP [{ target/xfail SELECTOR }]'
6009     Passes if REGEXP matches in Fortran module MODULE.
6010'dg-check-dot FILENAME'
6011     Passes if FILENAME is a valid '.dot' file (by running 'dot -Tpng'
6012     on it, and verifying the exit code is 0).
6013
60147.2.6.2 Scan the assembly output
6015................................
6016
6017'scan-assembler REGEX [{ target/xfail SELECTOR }]'
6018     Passes if REGEX matches text in the test's assembler output.
6019
6020'scan-assembler-not REGEX [{ target/xfail SELECTOR }]'
6021     Passes if REGEX does not match text in the test's assembler output.
6022
6023'scan-assembler-times REGEX NUM [{ target/xfail SELECTOR }]'
6024     Passes if REGEX is matched exactly NUM times in the test's
6025     assembler output.
6026
6027'scan-assembler-dem REGEX [{ target/xfail SELECTOR }]'
6028     Passes if REGEX matches text in the test's demangled assembler
6029     output.
6030
6031'scan-assembler-dem-not REGEX [{ target/xfail SELECTOR }]'
6032     Passes if REGEX does not match text in the test's demangled
6033     assembler output.
6034
6035'scan-hidden SYMBOL [{ target/xfail SELECTOR }]'
6036     Passes if SYMBOL is defined as a hidden symbol in the test's
6037     assembly output.
6038
6039'scan-not-hidden SYMBOL [{ target/xfail SELECTOR }]'
6040     Passes if SYMBOL is not defined as a hidden symbol in the test's
6041     assembly output.
6042
6043'check-function-bodies PREFIX TERMINATOR [OPTIONS [{ target/xfail SELECTOR }]]'
6044     Looks through the source file for comments that give the expected
6045     assembly output for selected functions.  Each line of expected
6046     output starts with the prefix string PREFIX and the expected output
6047     for a function as a whole is followed by a line that starts with
6048     the string TERMINATOR.  Specifying an empty terminator is
6049     equivalent to specifying '"*/"'.
6050
6051     OPTIONS, if specified, is a list of regular expressions, each of
6052     which matches a full command-line option.  A non-empty list
6053     prevents the test from running unless all of the given options are
6054     present on the command line.  This can help if a source file is
6055     compiled both with and without optimization, since it is rarely
6056     useful to check the full function body for unoptimized code.
6057
6058     The first line of the expected output for a function FN has the
6059     form:
6060
6061          PREFIX FN:  [{ target/xfail SELECTOR }]
6062
6063     Subsequent lines of the expected output also start with PREFIX.  In
6064     both cases, whitespace after PREFIX is not significant.
6065
6066     The test discards assembly directives such as '.cfi_startproc' and
6067     local label definitions such as '.LFB0' from the compiler's
6068     assembly output.  It then matches the result against the expected
6069     output for a function as a single regular expression.  This means
6070     that later lines can use backslashes to refer back to '(...)'
6071     captures on earlier lines.  For example:
6072
6073          /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
6074          ...
6075          /*
6076          ** add_w0_s8_m:
6077          **	mov	(z[0-9]+\.b), w0
6078          **	add	z0\.b, p0/m, z0\.b, \1
6079          **	ret
6080          */
6081          svint8_t add_w0_s8_m (...) { ... }
6082          ...
6083          /*
6084          ** add_b0_s8_m:
6085          **	mov	(z[0-9]+\.b), b0
6086          **	add	z1\.b, p0/m, z1\.b, \1
6087          **	ret
6088          */
6089          svint8_t add_b0_s8_m (...) { ... }
6090
6091     checks whether the implementations of 'add_w0_s8_m' and
6092     'add_b0_s8_m' match the regular expressions given.  The test only
6093     runs when '-DCHECK_ASM' is passed on the command line.
6094
6095     It is possible to create non-capturing multi-line regular
6096     expression groups of the form '(A|B|...)' by putting the '(', '|'
6097     and ')' on separate lines (each still using PREFIX).  For example:
6098
6099          /*
6100          ** cmple_f16_tied:
6101          ** (
6102          **	fcmge	p0\.h, p0/z, z1\.h, z0\.h
6103          ** |
6104          **	fcmle	p0\.h, p0/z, z0\.h, z1\.h
6105          ** )
6106          **	ret
6107          */
6108          svbool_t cmple_f16_tied (...) { ... }
6109
6110     checks whether 'cmple_f16_tied' is implemented by the 'fcmge'
6111     instruction followed by 'ret' or by the 'fcmle' instruction
6112     followed by 'ret'.  The test is still a single regular rexpression.
6113
6114     A line containing just:
6115
6116          PREFIX ...
6117
6118     stands for zero or more unmatched lines; the whitespace after
6119     PREFIX is again not significant.
6120
61217.2.6.3 Scan optimization dump files
6122....................................
6123
6124These commands are available for KIND of 'tree', 'ltrans-tree',
6125'offload-tree', 'rtl', 'offload-rtl', 'ipa', and 'wpa-ipa'.
6126
6127'scan-KIND-dump REGEX SUFFIX [{ target/xfail SELECTOR }]'
6128     Passes if REGEX matches text in the dump file with suffix SUFFIX.
6129
6130'scan-KIND-dump-not REGEX SUFFIX [{ target/xfail SELECTOR }]'
6131     Passes if REGEX does not match text in the dump file with suffix
6132     SUFFIX.
6133
6134'scan-KIND-dump-times REGEX NUM SUFFIX [{ target/xfail SELECTOR }]'
6135     Passes if REGEX is found exactly NUM times in the dump file with
6136     suffix SUFFIX.
6137
6138'scan-KIND-dump-dem REGEX SUFFIX [{ target/xfail SELECTOR }]'
6139     Passes if REGEX matches demangled text in the dump file with suffix
6140     SUFFIX.
6141
6142'scan-KIND-dump-dem-not REGEX SUFFIX [{ target/xfail SELECTOR }]'
6143     Passes if REGEX does not match demangled text in the dump file with
6144     suffix SUFFIX.
6145
61467.2.6.4 Check for output files
6147..............................
6148
6149'output-exists [{ target/xfail SELECTOR }]'
6150     Passes if compiler output file exists.
6151
6152'output-exists-not [{ target/xfail SELECTOR }]'
6153     Passes if compiler output file does not exist.
6154
6155'scan-symbol REGEXP [{ target/xfail SELECTOR }]'
6156     Passes if the pattern is present in the final executable.
6157
6158'scan-symbol-not REGEXP [{ target/xfail SELECTOR }]'
6159     Passes if the pattern is absent from the final executable.
6160
61617.2.6.5 Checks for 'gcov' tests
6162...............................
6163
6164'run-gcov SOURCEFILE'
6165     Check line counts in 'gcov' tests.
6166
6167'run-gcov [branches] [calls] { OPTS SOURCEFILE }'
6168     Check branch and/or call counts, in addition to line counts, in
6169     'gcov' tests.
6170
61717.2.6.6 Clean up generated test files
6172.....................................
6173
6174Usually the test-framework removes files that were generated during
6175testing.  If a testcase, for example, uses any dumping mechanism to
6176inspect a passes dump file, the testsuite recognized the dump option
6177passed to the tool and schedules a final cleanup to remove these files.
6178
6179 There are, however, following additional cleanup directives that can be
6180used to annotate a testcase "manually".
6181'cleanup-coverage-files'
6182     Removes coverage data files generated for this test.
6183
6184'cleanup-modules "LIST-OF-EXTRA-MODULES"'
6185     Removes Fortran module files generated for this test, excluding the
6186     module names listed in keep-modules.  Cleaning up module files is
6187     usually done automatically by the testsuite by looking at the
6188     source files and removing the modules after the test has been
6189     executed.
6190          module MoD1
6191          end module MoD1
6192          module Mod2
6193          end module Mod2
6194          module moD3
6195          end module moD3
6196          module mod4
6197          end module mod4
6198          ! { dg-final { cleanup-modules "mod1 mod2" } } ! redundant
6199          ! { dg-final { keep-modules "mod3 mod4" } }
6200
6201'keep-modules "LIST-OF-MODULES-NOT-TO-DELETE"'
6202     Whitespace separated list of module names that should not be
6203     deleted by cleanup-modules.  If the list of modules is empty, all
6204     modules defined in this file are kept.
6205          module maybe_unneeded
6206          end module maybe_unneeded
6207          module keep1
6208          end module keep1
6209          module keep2
6210          end module keep2
6211          ! { dg-final { keep-modules "keep1 keep2" } } ! just keep these two
6212          ! { dg-final { keep-modules "" } } ! keep all
6213
6214'dg-keep-saved-temps "LIST-OF-SUFFIXES-NOT-TO-DELETE"'
6215     Whitespace separated list of suffixes that should not be deleted
6216     automatically in a testcase that uses '-save-temps'.
6217          // { dg-options "-save-temps -fpch-preprocess -I." }
6218          int main() { return 0; }
6219          // { dg-keep-saved-temps ".s" } ! just keep assembler file
6220          // { dg-keep-saved-temps ".s" ".i" } ! ... and .i
6221          // { dg-keep-saved-temps ".ii" ".o" } ! or just .ii and .o
6222
6223'cleanup-profile-file'
6224     Removes profiling files generated for this test.
6225
6226
6227File: gccint.info,  Node: Ada Tests,  Next: C Tests,  Prev: Test Directives,  Up: Testsuites
6228
62297.3 Ada Language Testsuites
6230===========================
6231
6232The Ada testsuite includes executable tests from the ACATS testsuite,
6233publicly available at <http://www.ada-auth.org/acats.html>.
6234
6235 These tests are integrated in the GCC testsuite in the 'ada/acats'
6236directory, and enabled automatically when running 'make check', assuming
6237the Ada language has been enabled when configuring GCC.
6238
6239 You can also run the Ada testsuite independently, using 'make
6240check-ada', or run a subset of the tests by specifying which chapter to
6241run, e.g.:
6242
6243     $ make check-ada CHAPTERS="c3 c9"
6244
6245 The tests are organized by directory, each directory corresponding to a
6246chapter of the Ada Reference Manual.  So for example, 'c9' corresponds
6247to chapter 9, which deals with tasking features of the language.
6248
6249 The tests are run using two 'sh' scripts: 'run_acats' and 'run_all.sh'.
6250To run the tests using a simulator or a cross target, see the small
6251customization section at the top of 'run_all.sh'.
6252
6253 These tests are run using the build tree: they can be run without doing
6254a 'make install'.
6255
6256
6257File: gccint.info,  Node: C Tests,  Next: LTO Testing,  Prev: Ada Tests,  Up: Testsuites
6258
62597.4 C Language Testsuites
6260=========================
6261
6262GCC contains the following C language testsuites, in the 'gcc/testsuite'
6263directory:
6264
6265'gcc.dg'
6266     This contains tests of particular features of the C compiler, using
6267     the more modern 'dg' harness.  Correctness tests for various
6268     compiler features should go here if possible.
6269
6270     Magic comments determine whether the file is preprocessed,
6271     compiled, linked or run.  In these tests, error and warning message
6272     texts are compared against expected texts or regular expressions
6273     given in comments.  These tests are run with the options '-ansi
6274     -pedantic' unless other options are given in the test.  Except as
6275     noted below they are not run with multiple optimization options.
6276'gcc.dg/compat'
6277     This subdirectory contains tests for binary compatibility using
6278     'lib/compat.exp', which in turn uses the language-independent
6279     support (*note Support for testing binary compatibility: compat
6280     Testing.).
6281'gcc.dg/cpp'
6282     This subdirectory contains tests of the preprocessor.
6283'gcc.dg/debug'
6284     This subdirectory contains tests for debug formats.  Tests in this
6285     subdirectory are run for each debug format that the compiler
6286     supports.
6287'gcc.dg/format'
6288     This subdirectory contains tests of the '-Wformat' format checking.
6289     Tests in this directory are run with and without '-DWIDE'.
6290'gcc.dg/noncompile'
6291     This subdirectory contains tests of code that should not compile
6292     and does not need any special compilation options.  They are run
6293     with multiple optimization options, since sometimes invalid code
6294     crashes the compiler with optimization.
6295'gcc.dg/special'
6296     FIXME: describe this.
6297
6298'gcc.c-torture'
6299     This contains particular code fragments which have historically
6300     broken easily.  These tests are run with multiple optimization
6301     options, so tests for features which only break at some
6302     optimization levels belong here.  This also contains tests to check
6303     that certain optimizations occur.  It might be worthwhile to
6304     separate the correctness tests cleanly from the code quality tests,
6305     but it hasn't been done yet.
6306
6307'gcc.c-torture/compat'
6308     FIXME: describe this.
6309
6310     This directory should probably not be used for new tests.
6311'gcc.c-torture/compile'
6312     This testsuite contains test cases that should compile, but do not
6313     need to link or run.  These test cases are compiled with several
6314     different combinations of optimization options.  All warnings are
6315     disabled for these test cases, so this directory is not suitable if
6316     you wish to test for the presence or absence of compiler warnings.
6317     While special options can be set, and tests disabled on specific
6318     platforms, by the use of '.x' files, mostly these test cases should
6319     not contain platform dependencies.  FIXME: discuss how defines such
6320     as 'STACK_SIZE' are used.
6321'gcc.c-torture/execute'
6322     This testsuite contains test cases that should compile, link and
6323     run; otherwise the same comments as for 'gcc.c-torture/compile'
6324     apply.
6325'gcc.c-torture/execute/ieee'
6326     This contains tests which are specific to IEEE floating point.
6327'gcc.c-torture/unsorted'
6328     FIXME: describe this.
6329
6330     This directory should probably not be used for new tests.
6331'gcc.misc-tests'
6332     This directory contains C tests that require special handling.
6333     Some of these tests have individual expect files, and others share
6334     special-purpose expect files:
6335
6336     'bprob*.c'
6337          Test '-fbranch-probabilities' using
6338          'gcc.misc-tests/bprob.exp', which in turn uses the generic,
6339          language-independent framework (*note Support for testing
6340          profile-directed optimizations: profopt Testing.).
6341
6342     'gcov*.c'
6343          Test 'gcov' output using 'gcov.exp', which in turn uses the
6344          language-independent support (*note Support for testing gcov:
6345          gcov Testing.).
6346
6347     'i386-pf-*.c'
6348          Test i386-specific support for data prefetch using
6349          'i386-prefetch.exp'.
6350
6351'gcc.test-framework'
6352     'dg-*.c'
6353          Test the testsuite itself using
6354          'gcc.test-framework/test-framework.exp'.
6355
6356 FIXME: merge in 'testsuite/README.gcc' and discuss the format of test
6357cases and magic comments more.
6358
6359
6360File: gccint.info,  Node: LTO Testing,  Next: gcov Testing,  Prev: C Tests,  Up: Testsuites
6361
63627.5 Support for testing link-time optimizations
6363===============================================
6364
6365Tests for link-time optimizations usually require multiple source files
6366that are compiled separately, perhaps with different sets of options.
6367There are several special-purpose test directives used for these tests.
6368
6369'{ dg-lto-do DO-WHAT-KEYWORD }'
6370     DO-WHAT-KEYWORD specifies how the test is compiled and whether it
6371     is executed.  It is one of:
6372
6373     'assemble'
6374          Compile with '-c' to produce a relocatable object file.
6375     'link'
6376          Compile, assemble, and link to produce an executable file.
6377     'run'
6378          Produce and run an executable file, which is expected to
6379          return an exit code of 0.
6380
6381     The default is 'assemble'.  That can be overridden for a set of
6382     tests by redefining 'dg-do-what-default' within the '.exp' file for
6383     those tests.
6384
6385     Unlike 'dg-do', 'dg-lto-do' does not support an optional 'target'
6386     or 'xfail' list.  Use 'dg-skip-if', 'dg-xfail-if', or
6387     'dg-xfail-run-if'.
6388
6389'{ dg-lto-options { { OPTIONS } [{ OPTIONS }] } [{ target SELECTOR }]}'
6390     This directive provides a list of one or more sets of compiler
6391     options to override LTO_OPTIONS.  Each test will be compiled and
6392     run with each of these sets of options.
6393
6394'{ dg-extra-ld-options OPTIONS [{ target SELECTOR }]}'
6395     This directive adds OPTIONS to the linker options used.
6396
6397'{ dg-suppress-ld-options OPTIONS [{ target SELECTOR }]}'
6398     This directive removes OPTIONS from the set of linker options used.
6399
6400
6401File: gccint.info,  Node: gcov Testing,  Next: profopt Testing,  Prev: LTO Testing,  Up: Testsuites
6402
64037.6 Support for testing 'gcov'
6404==============================
6405
6406Language-independent support for testing 'gcov', and for checking that
6407branch profiling produces expected values, is provided by the expect
6408file 'lib/gcov.exp'.  'gcov' tests also rely on procedures in
6409'lib/gcc-dg.exp' to compile and run the test program.  A typical 'gcov'
6410test contains the following DejaGnu commands within comments:
6411
6412     { dg-options "--coverage" }
6413     { dg-do run { target native } }
6414     { dg-final { run-gcov sourcefile } }
6415
6416 Checks of 'gcov' output can include line counts, branch percentages,
6417and call return percentages.  All of these checks are requested via
6418commands that appear in comments in the test's source file.  Commands to
6419check line counts are processed by default.  Commands to check branch
6420percentages and call return percentages are processed if the 'run-gcov'
6421command has arguments 'branches' or 'calls', respectively.  For example,
6422the following specifies checking both, as well as passing '-b' to
6423'gcov':
6424
6425     { dg-final { run-gcov branches calls { -b sourcefile } } }
6426
6427 A line count command appears within a comment on the source line that
6428is expected to get the specified count and has the form 'count(CNT)'.  A
6429test should only check line counts for lines that will get the same
6430count for any architecture.
6431
6432 Commands to check branch percentages ('branch') and call return
6433percentages ('returns') are very similar to each other.  A beginning
6434command appears on or before the first of a range of lines that will
6435report the percentage, and the ending command follows that range of
6436lines.  The beginning command can include a list of percentages, all of
6437which are expected to be found within the range.  A range is terminated
6438by the next command of the same kind.  A command 'branch(end)' or
6439'returns(end)' marks the end of a range without starting a new one.  For
6440example:
6441
6442     if (i > 10 && j > i && j < 20)  /* branch(27 50 75) */
6443                                     /* branch(end) */
6444       foo (i, j);
6445
6446 For a call return percentage, the value specified is the percentage of
6447calls reported to return.  For a branch percentage, the value is either
6448the expected percentage or 100 minus that value, since the direction of
6449a branch can differ depending on the target or the optimization level.
6450
6451 Not all branches and calls need to be checked.  A test should not check
6452for branches that might be optimized away or replaced with predicated
6453instructions.  Don't check for calls inserted by the compiler or ones
6454that might be inlined or optimized away.
6455
6456 A single test can check for combinations of line counts, branch
6457percentages, and call return percentages.  The command to check a line
6458count must appear on the line that will report that count, but commands
6459to check branch percentages and call return percentages can bracket the
6460lines that report them.
6461
6462
6463File: gccint.info,  Node: profopt Testing,  Next: compat Testing,  Prev: gcov Testing,  Up: Testsuites
6464
64657.7 Support for testing profile-directed optimizations
6466======================================================
6467
6468The file 'profopt.exp' provides language-independent support for
6469checking correct execution of a test built with profile-directed
6470optimization.  This testing requires that a test program be built and
6471executed twice.  The first time it is compiled to generate profile data,
6472and the second time it is compiled to use the data that was generated
6473during the first execution.  The second execution is to verify that the
6474test produces the expected results.
6475
6476 To check that the optimization actually generated better code, a test
6477can be built and run a third time with normal optimizations to verify
6478that the performance is better with the profile-directed optimizations.
6479'profopt.exp' has the beginnings of this kind of support.
6480
6481 'profopt.exp' provides generic support for profile-directed
6482optimizations.  Each set of tests that uses it provides information
6483about a specific optimization:
6484
6485'tool'
6486     tool being tested, e.g., 'gcc'
6487
6488'profile_option'
6489     options used to generate profile data
6490
6491'feedback_option'
6492     options used to optimize using that profile data
6493
6494'prof_ext'
6495     suffix of profile data files
6496
6497'PROFOPT_OPTIONS'
6498     list of options with which to run each test, similar to the lists
6499     for torture tests
6500
6501'{ dg-final-generate { LOCAL-DIRECTIVE } }'
6502     This directive is similar to 'dg-final', but the LOCAL-DIRECTIVE is
6503     run after the generation of profile data.
6504
6505'{ dg-final-use { LOCAL-DIRECTIVE } }'
6506     The LOCAL-DIRECTIVE is run after the profile data have been used.
6507
6508
6509File: gccint.info,  Node: compat Testing,  Next: Torture Tests,  Prev: profopt Testing,  Up: Testsuites
6510
65117.8 Support for testing binary compatibility
6512============================================
6513
6514The file 'compat.exp' provides language-independent support for binary
6515compatibility testing.  It supports testing interoperability of two
6516compilers that follow the same ABI, or of multiple sets of compiler
6517options that should not affect binary compatibility.  It is intended to
6518be used for testsuites that complement ABI testsuites.
6519
6520 A test supported by this framework has three parts, each in a separate
6521source file: a main program and two pieces that interact with each other
6522to split up the functionality being tested.
6523
6524'TESTNAME_main.SUFFIX'
6525     Contains the main program, which calls a function in file
6526     'TESTNAME_x.SUFFIX'.
6527
6528'TESTNAME_x.SUFFIX'
6529     Contains at least one call to a function in 'TESTNAME_y.SUFFIX'.
6530
6531'TESTNAME_y.SUFFIX'
6532     Shares data with, or gets arguments from, 'TESTNAME_x.SUFFIX'.
6533
6534 Within each test, the main program and one functional piece are
6535compiled by the GCC under test.  The other piece can be compiled by an
6536alternate compiler.  If no alternate compiler is specified, then all
6537three source files are all compiled by the GCC under test.  You can
6538specify pairs of sets of compiler options.  The first element of such a
6539pair specifies options used with the GCC under test, and the second
6540element of the pair specifies options used with the alternate compiler.
6541Each test is compiled with each pair of options.
6542
6543 'compat.exp' defines default pairs of compiler options.  These can be
6544overridden by defining the environment variable 'COMPAT_OPTIONS' as:
6545
6546     COMPAT_OPTIONS="[list [list {TST1} {ALT1}]
6547       ...[list {TSTN} {ALTN}]]"
6548
6549 where TSTI and ALTI are lists of options, with TSTI used by the
6550compiler under test and ALTI used by the alternate compiler.  For
6551example, with '[list [list {-g -O0} {-O3}] [list {-fpic} {-fPIC -O2}]]',
6552the test is first built with '-g -O0' by the compiler under test and
6553with '-O3' by the alternate compiler.  The test is built a second time
6554using '-fpic' by the compiler under test and '-fPIC -O2' by the
6555alternate compiler.
6556
6557 An alternate compiler is specified by defining an environment variable
6558to be the full pathname of an installed compiler; for C define
6559'ALT_CC_UNDER_TEST', and for C++ define 'ALT_CXX_UNDER_TEST'.  These
6560will be written to the 'site.exp' file used by DejaGnu.  The default is
6561to build each test with the compiler under test using the first of each
6562pair of compiler options from 'COMPAT_OPTIONS'.  When
6563'ALT_CC_UNDER_TEST' or 'ALT_CXX_UNDER_TEST' is 'same', each test is
6564built using the compiler under test but with combinations of the options
6565from 'COMPAT_OPTIONS'.
6566
6567 To run only the C++ compatibility suite using the compiler under test
6568and another version of GCC using specific compiler options, do the
6569following from 'OBJDIR/gcc':
6570
6571     rm site.exp
6572     make -k \
6573       ALT_CXX_UNDER_TEST=${alt_prefix}/bin/g++ \
6574       COMPAT_OPTIONS="LISTS AS SHOWN ABOVE" \
6575       check-c++ \
6576       RUNTESTFLAGS="compat.exp"
6577
6578 A test that fails when the source files are compiled with different
6579compilers, but passes when the files are compiled with the same
6580compiler, demonstrates incompatibility of the generated code or runtime
6581support.  A test that fails for the alternate compiler but passes for
6582the compiler under test probably tests for a bug that was fixed in the
6583compiler under test but is present in the alternate compiler.
6584
6585 The binary compatibility tests support a small number of test framework
6586commands that appear within comments in a test file.
6587
6588'dg-require-*'
6589     These commands can be used in 'TESTNAME_main.SUFFIX' to skip the
6590     test if specific support is not available on the target.
6591
6592'dg-options'
6593     The specified options are used for compiling this particular source
6594     file, appended to the options from 'COMPAT_OPTIONS'.  When this
6595     command appears in 'TESTNAME_main.SUFFIX' the options are also used
6596     to link the test program.
6597
6598'dg-xfail-if'
6599     This command can be used in a secondary source file to specify that
6600     compilation is expected to fail for particular options on
6601     particular targets.
6602
6603
6604File: gccint.info,  Node: Torture Tests,  Next: GIMPLE Tests,  Prev: compat Testing,  Up: Testsuites
6605
66067.9 Support for torture testing using multiple options
6607======================================================
6608
6609Throughout the compiler testsuite there are several directories whose
6610tests are run multiple times, each with a different set of options.
6611These are known as torture tests.  'lib/torture-options.exp' defines
6612procedures to set up these lists:
6613
6614'torture-init'
6615     Initialize use of torture lists.
6616'set-torture-options'
6617     Set lists of torture options to use for tests with and without
6618     loops.  Optionally combine a set of torture options with a set of
6619     other options, as is done with Objective-C runtime options.
6620'torture-finish'
6621     Finalize use of torture lists.
6622
6623 The '.exp' file for a set of tests that use torture options must
6624include calls to these three procedures if:
6625
6626   * It calls 'gcc-dg-runtest' and overrides DG_TORTURE_OPTIONS.
6627
6628   * It calls ${TOOL}'-torture' or ${TOOL}'-torture-execute', where TOOL
6629     is 'c', 'fortran', or 'objc'.
6630
6631   * It calls 'dg-pch'.
6632
6633 It is not necessary for a '.exp' file that calls 'gcc-dg-runtest' to
6634call the torture procedures if the tests should use the list in
6635DG_TORTURE_OPTIONS defined in 'gcc-dg.exp'.
6636
6637 Most uses of torture options can override the default lists by defining
6638TORTURE_OPTIONS or add to the default list by defining
6639ADDITIONAL_TORTURE_OPTIONS.  Define these in a '.dejagnurc' file or add
6640them to the 'site.exp' file; for example
6641
6642     set ADDITIONAL_TORTURE_OPTIONS  [list \
6643       { -O2 -ftree-loop-linear } \
6644       { -O2 -fpeel-loops } ]
6645
6646
6647File: gccint.info,  Node: GIMPLE Tests,  Next: RTL Tests,  Prev: Torture Tests,  Up: Testsuites
6648
66497.10 Support for testing GIMPLE passes
6650======================================
6651
6652As of gcc 7, C functions can be tagged with '__GIMPLE' to indicate that
6653the function body will be GIMPLE, rather than C. The compiler requires
6654the option '-fgimple' to enable this functionality.  For example:
6655
6656     /* { dg-do compile } */
6657     /* { dg-options "-O -fgimple" } */
6658
6659     void __GIMPLE (startwith ("dse2")) foo ()
6660     {
6661       int a;
6662
6663     bb_2:
6664       if (a > 4)
6665         goto bb_3;
6666       else
6667         goto bb_4;
6668
6669     bb_3:
6670       a_2 = 10;
6671       goto bb_5;
6672
6673     bb_4:
6674       a_3 = 20;
6675
6676     bb_5:
6677       a_1 = __PHI (bb_3: a_2, bb_4: a_3);
6678       a_4 = a_1 + 4;
6679
6680       return;
6681     }
6682
6683 The 'startwith' argument indicates at which pass to begin.
6684
6685 Use the dump modifier '-gimple' (e.g. '-fdump-tree-all-gimple') to make
6686tree dumps more closely follow the format accepted by the GIMPLE parser.
6687
6688 Example DejaGnu tests of GIMPLE can be seen in the source tree at
6689'gcc/testsuite/gcc.dg/gimplefe-*.c'.
6690
6691 The '__GIMPLE' parser is integrated with the C tokenizer and
6692preprocessor, so it should be possible to use macros to build out test
6693coverage.
6694
6695
6696File: gccint.info,  Node: RTL Tests,  Prev: GIMPLE Tests,  Up: Testsuites
6697
66987.11 Support for testing RTL passes
6699===================================
6700
6701As of gcc 7, C functions can be tagged with '__RTL' to indicate that the
6702function body will be RTL, rather than C. For example:
6703
6704     double __RTL (startwith ("ira")) test (struct foo *f, const struct bar *b)
6705     {
6706       (function "test"
6707          [...snip; various directives go in here...]
6708       ) ;; function "test"
6709     }
6710
6711 The 'startwith' argument indicates at which pass to begin.
6712
6713 The parser expects the RTL body to be in the format emitted by this
6714dumping function:
6715
6716     DEBUG_FUNCTION void
6717     print_rtx_function (FILE *outfile, function *fn, bool compact);
6718
6719 when "compact" is true.  So you can capture RTL in the correct format
6720from the debugger using:
6721
6722     (gdb) print_rtx_function (stderr, cfun, true);
6723
6724 and copy and paste the output into the body of the C function.
6725
6726 Example DejaGnu tests of RTL can be seen in the source tree under
6727'gcc/testsuite/gcc.dg/rtl'.
6728
6729 The '__RTL' parser is not integrated with the C tokenizer or
6730preprocessor, and works simply by reading the relevant lines within the
6731braces.  In particular, the RTL body must be on separate lines from the
6732enclosing braces, and the preprocessor is not usable within it.
6733
6734
6735File: gccint.info,  Node: Options,  Next: Passes,  Prev: Testsuites,  Up: Top
6736
67378 Option specification files
6738****************************
6739
6740Most GCC command-line options are described by special option definition
6741files, the names of which conventionally end in '.opt'.  This chapter
6742describes the format of these files.
6743
6744* Menu:
6745
6746* Option file format::   The general layout of the files
6747* Option properties::    Supported option properties
6748
6749
6750File: gccint.info,  Node: Option file format,  Next: Option properties,  Up: Options
6751
67528.1 Option file format
6753======================
6754
6755Option files are a simple list of records in which each field occupies
6756its own line and in which the records themselves are separated by blank
6757lines.  Comments may appear on their own line anywhere within the file
6758and are preceded by semicolons.  Whitespace is allowed before the
6759semicolon.
6760
6761 The files can contain the following types of record:
6762
6763   * A language definition record.  These records have two fields: the
6764     string 'Language' and the name of the language.  Once a language
6765     has been declared in this way, it can be used as an option
6766     property.  *Note Option properties::.
6767
6768   * A target specific save record to save additional information.
6769     These records have two fields: the string 'TargetSave', and a
6770     declaration type to go in the 'cl_target_option' structure.
6771
6772   * A variable record to define a variable used to store option
6773     information.  These records have two fields: the string 'Variable',
6774     and a declaration of the type and name of the variable, optionally
6775     with an initializer (but without any trailing ';').  These records
6776     may be used for variables used for many options where declaring the
6777     initializer in a single option definition record, or duplicating it
6778     in many records, would be inappropriate, or for variables set in
6779     option handlers rather than referenced by 'Var' properties.
6780
6781   * A variable record to define a variable used to store option
6782     information.  These records have two fields: the string
6783     'TargetVariable', and a declaration of the type and name of the
6784     variable, optionally with an initializer (but without any trailing
6785     ';').  'TargetVariable' is a combination of 'Variable' and
6786     'TargetSave' records in that the variable is defined in the
6787     'gcc_options' structure, but these variables are also stored in the
6788     'cl_target_option' structure.  The variables are saved in the
6789     target save code and restored in the target restore code.
6790
6791   * A variable record to record any additional files that the
6792     'options.h' file should include.  This is useful to provide
6793     enumeration or structure definitions needed for target variables.
6794     These records have two fields: the string 'HeaderInclude' and the
6795     name of the include file.
6796
6797   * A variable record to record any additional files that the
6798     'options.c' or 'options-save.c' file should include.  This is
6799     useful to provide inline functions needed for target variables
6800     and/or '#ifdef' sequences to properly set up the initialization.
6801     These records have two fields: the string 'SourceInclude' and the
6802     name of the include file.
6803
6804   * An enumeration record to define a set of strings that may be used
6805     as arguments to an option or options.  These records have three
6806     fields: the string 'Enum', a space-separated list of properties and
6807     help text used to describe the set of strings in '--help' output.
6808     Properties use the same format as option properties; the following
6809     are valid:
6810     'Name(NAME)'
6811          This property is required; NAME must be a name (suitable for
6812          use in C identifiers) used to identify the set of strings in
6813          'Enum' option properties.
6814
6815     'Type(TYPE)'
6816          This property is required; TYPE is the C type for variables
6817          set by options using this enumeration together with 'Var'.
6818
6819     'UnknownError(MESSAGE)'
6820          The message MESSAGE will be used as an error message if the
6821          argument is invalid; for enumerations without 'UnknownError',
6822          a generic error message is used.  MESSAGE should contain a
6823          single '%qs' format, which will be used to format the invalid
6824          argument.
6825
6826   * An enumeration value record to define one of the strings in a set
6827     given in an 'Enum' record.  These records have two fields: the
6828     string 'EnumValue' and a space-separated list of properties.
6829     Properties use the same format as option properties; the following
6830     are valid:
6831     'Enum(NAME)'
6832          This property is required; NAME says which 'Enum' record this
6833          'EnumValue' record corresponds to.
6834
6835     'String(STRING)'
6836          This property is required; STRING is the string option
6837          argument being described by this record.
6838
6839     'Value(VALUE)'
6840          This property is required; it says what value (representable
6841          as 'int') should be used for the given string.
6842
6843     'Canonical'
6844          This property is optional.  If present, it says the present
6845          string is the canonical one among all those with the given
6846          value.  Other strings yielding that value will be mapped to
6847          this one so specs do not need to handle them.
6848
6849     'DriverOnly'
6850          This property is optional.  If present, the present string
6851          will only be accepted by the driver.  This is used for cases
6852          such as '-march=native' that are processed by the driver so
6853          that 'gcc -v' shows how the options chosen depended on the
6854          system on which the compiler was run.
6855
6856   * An option definition record.  These records have the following
6857     fields:
6858       1. the name of the option, with the leading "-" removed
6859       2. a space-separated list of option properties (*note Option
6860          properties::)
6861       3. the help text to use for '--help' (omitted if the second field
6862          contains the 'Undocumented' property).
6863
6864     By default, all options beginning with "f", "W" or "m" are
6865     implicitly assumed to take a "no-" form.  This form should not be
6866     listed separately.  If an option beginning with one of these
6867     letters does not have a "no-" form, you can use the
6868     'RejectNegative' property to reject it.
6869
6870     The help text is automatically line-wrapped before being displayed.
6871     Normally the name of the option is printed on the left-hand side of
6872     the output and the help text is printed on the right.  However, if
6873     the help text contains a tab character, the text to the left of the
6874     tab is used instead of the option's name and the text to the right
6875     of the tab forms the help text.  This allows you to elaborate on
6876     what type of argument the option takes.
6877
6878   * A target mask record.  These records have one field of the form
6879     'Mask(X)'.  The options-processing script will automatically
6880     allocate a bit in 'target_flags' (*note Run-time Target::) for each
6881     mask name X and set the macro 'MASK_X' to the appropriate bitmask.
6882     It will also declare a 'TARGET_X' macro that has the value 1 when
6883     bit 'MASK_X' is set and 0 otherwise.
6884
6885     They are primarily intended to declare target masks that are not
6886     associated with user options, either because these masks represent
6887     internal switches or because the options are not available on all
6888     configurations and yet the masks always need to be defined.
6889
6890
6891File: gccint.info,  Node: Option properties,  Prev: Option file format,  Up: Options
6892
68938.2 Option properties
6894=====================
6895
6896The second field of an option record can specify any of the following
6897properties.  When an option takes an argument, it is enclosed in
6898parentheses following the option property name.  The parser that handles
6899option files is quite simplistic, and will be tricked by any nested
6900parentheses within the argument text itself; in this case, the entire
6901option argument can be wrapped in curly braces within the parentheses to
6902demarcate it, e.g.:
6903
6904     Condition({defined (USE_CYGWIN_LIBSTDCXX_WRAPPERS)})
6905
6906'Common'
6907     The option is available for all languages and targets.
6908
6909'Target'
6910     The option is available for all languages but is target-specific.
6911
6912'Driver'
6913     The option is handled by the compiler driver using code not shared
6914     with the compilers proper ('cc1' etc.).
6915
6916'LANGUAGE'
6917     The option is available when compiling for the given language.
6918
6919     It is possible to specify several different languages for the same
6920     option.  Each LANGUAGE must have been declared by an earlier
6921     'Language' record.  *Note Option file format::.
6922
6923'RejectDriver'
6924     The option is only handled by the compilers proper ('cc1' etc.) and
6925     should not be accepted by the driver.
6926
6927'RejectNegative'
6928     The option does not have a "no-" form.  All options beginning with
6929     "f", "W" or "m" are assumed to have a "no-" form unless this
6930     property is used.
6931
6932'Negative(OTHERNAME)'
6933     The option will turn off another option OTHERNAME, which is the
6934     option name with the leading "-" removed.  This chain action will
6935     propagate through the 'Negative' property of the option to be
6936     turned off.  The driver will prune options, removing those that are
6937     turned off by some later option.  This pruning is not done for
6938     options with 'Joined' or 'JoinedOrMissing' properties, unless the
6939     options have either 'RejectNegative' property or the 'Negative'
6940     property mentions an option other than itself.
6941
6942     As a consequence, if you have a group of mutually-exclusive
6943     options, their 'Negative' properties should form a circular chain.
6944     For example, if options '-A', '-B' and '-C' are mutually exclusive,
6945     their respective 'Negative' properties should be 'Negative(B)',
6946     'Negative(C)' and 'Negative(A)'.
6947
6948'Joined'
6949'Separate'
6950     The option takes a mandatory argument.  'Joined' indicates that the
6951     option and argument can be included in the same 'argv' entry (as
6952     with '-mflush-func=NAME', for example).  'Separate' indicates that
6953     the option and argument can be separate 'argv' entries (as with
6954     '-o').  An option is allowed to have both of these properties.
6955
6956'JoinedOrMissing'
6957     The option takes an optional argument.  If the argument is given,
6958     it will be part of the same 'argv' entry as the option itself.
6959
6960     This property cannot be used alongside 'Joined' or 'Separate'.
6961
6962'MissingArgError(MESSAGE)'
6963     For an option marked 'Joined' or 'Separate', the message MESSAGE
6964     will be used as an error message if the mandatory argument is
6965     missing; for options without 'MissingArgError', a generic error
6966     message is used.  MESSAGE should contain a single '%qs' format,
6967     which will be used to format the name of the option passed.
6968
6969'Args(N)'
6970     For an option marked 'Separate', indicate that it takes N
6971     arguments.  The default is 1.
6972
6973'UInteger'
6974     The option's argument is a non-negative integer consisting of
6975     either decimal or hexadecimal digits interpreted as 'int'.
6976     Hexadecimal integers may optionally start with the '0x' or '0X'
6977     prefix.  The option parser validates and converts the argument
6978     before passing it to the relevant option handler.  'UInteger'
6979     should also be used with options like '-falign-loops' where both
6980     '-falign-loops' and '-falign-loops'=N are supported to make sure
6981     the saved options are given a full integer.  Positive values of the
6982     argument in excess of 'INT_MAX' wrap around zero.
6983
6984'Host_Wide_Int'
6985     The option's argument is a non-negative integer consisting of
6986     either decimal or hexadecimal digits interpreted as the widest
6987     integer type on the host.  As with an 'UInteger' argument,
6988     hexadecimal integers may optionally start with the '0x' or '0X'
6989     prefix.  The option parser validates and converts the argument
6990     before passing it to the relevant option handler.  'Host_Wide_Int'
6991     should be used with options that need to accept very large values.
6992     Positive values of the argument in excess of 'HOST_WIDE_INT_M1U'
6993     are assigned 'HOST_WIDE_INT_M1U'.
6994
6995'IntegerRange(N, M)'
6996     The options's arguments are integers of type 'int'.  The option's
6997     parser validates that the value of an option integer argument is
6998     within the closed range [N, M].
6999
7000'ByteSize'
7001     A property applicable only to 'UInteger' or 'Host_Wide_Int'
7002     arguments.  The option's integer argument is interpreted as if in
7003     infinite precision using saturation arithmetic in the corresponding
7004     type.  The argument may be followed by a 'byte-size' suffix
7005     designating a multiple of bytes such as 'kB' and 'KiB' for kilobyte
7006     and kibibyte, respectively, 'MB' and 'MiB' for megabyte and
7007     mebibyte, 'GB' and 'GiB' for gigabyte and gigibyte, and so on.
7008     'ByteSize' should be used for with options that take a very large
7009     argument representing a size in bytes, such as '-Wlarger-than='.
7010
7011'ToLower'
7012     The option's argument should be converted to lowercase as part of
7013     putting it in canonical form, and before comparing with the strings
7014     indicated by any 'Enum' property.
7015
7016'NoDriverArg'
7017     For an option marked 'Separate', the option only takes an argument
7018     in the compiler proper, not in the driver.  This is for
7019     compatibility with existing options that are used both directly and
7020     via '-Wp,'; new options should not have this property.
7021
7022'Var(VAR)'
7023     The state of this option should be stored in variable VAR (actually
7024     a macro for 'global_options.x_VAR').  The way that the state is
7025     stored depends on the type of option:
7026
7027'WarnRemoved'
7028     The option is removed and every usage of such option will result in
7029     a warning.  We use it option backward compatibility.
7030
7031'Var(VAR, SET)'
7032     The option controls an integer variable VAR and is active when VAR
7033     equals SET.  The option parser will set VAR to SET when the
7034     positive form of the option is used and '!SET' when the "no-" form
7035     is used.
7036
7037     VAR is declared in the same way as for the single-argument form
7038     described above.
7039
7040        * If the option uses the 'Mask' or 'InverseMask' properties, VAR
7041          is the integer variable that contains the mask.
7042
7043        * If the option is a normal on/off switch, VAR is an integer
7044          variable that is nonzero when the option is enabled.  The
7045          options parser will set the variable to 1 when the positive
7046          form of the option is used and 0 when the "no-" form is used.
7047
7048        * If the option takes an argument and has the 'UInteger'
7049          property, VAR is an integer variable that stores the value of
7050          the argument.
7051
7052        * If the option takes an argument and has the 'Enum' property,
7053          VAR is a variable (type given in the 'Type' property of the
7054          'Enum' record whose 'Name' property has the same argument as
7055          the 'Enum' property of this option) that stores the value of
7056          the argument.
7057
7058        * If the option has the 'Defer' property, VAR is a pointer to a
7059          'VEC(cl_deferred_option,heap)' that stores the option for
7060          later processing.  (VAR is declared with type 'void *' and
7061          needs to be cast to 'VEC(cl_deferred_option,heap)' before
7062          use.)
7063
7064        * Otherwise, if the option takes an argument, VAR is a pointer
7065          to the argument string.  The pointer will be null if the
7066          argument is optional and wasn't given.
7067
7068     The option-processing script will usually zero-initialize VAR.  You
7069     can modify this behavior using 'Init'.
7070
7071'Init(VALUE)'
7072     The variable specified by the 'Var' property should be statically
7073     initialized to VALUE.  If more than one option using the same
7074     variable specifies 'Init', all must specify the same initializer.
7075
7076'Mask(NAME)'
7077     The option is associated with a bit in the 'target_flags' variable
7078     (*note Run-time Target::) and is active when that bit is set.  You
7079     may also specify 'Var' to select a variable other than
7080     'target_flags'.
7081
7082     The options-processing script will automatically allocate a unique
7083     bit for the option.  If the option is attached to 'target_flags',
7084     the script will set the macro 'MASK_NAME' to the appropriate
7085     bitmask.  It will also declare a 'TARGET_NAME' macro that has the
7086     value 1 when the option is active and 0 otherwise.  If you use
7087     'Var' to attach the option to a different variable, the bitmask
7088     macro with be called 'OPTION_MASK_NAME'.
7089
7090'InverseMask(OTHERNAME)'
7091'InverseMask(OTHERNAME, THISNAME)'
7092     The option is the inverse of another option that has the
7093     'Mask(OTHERNAME)' property.  If THISNAME is given, the
7094     options-processing script will declare a 'TARGET_THISNAME' macro
7095     that is 1 when the option is active and 0 otherwise.
7096
7097'Enum(NAME)'
7098     The option's argument is a string from the set of strings
7099     associated with the corresponding 'Enum' record.  The string is
7100     checked and converted to the integer specified in the corresponding
7101     'EnumValue' record before being passed to option handlers.
7102
7103'Defer'
7104     The option should be stored in a vector, specified with 'Var', for
7105     later processing.
7106
7107'Alias(OPT)'
7108'Alias(OPT, ARG)'
7109'Alias(OPT, POSARG, NEGARG)'
7110     The option is an alias for '-OPT' (or the negative form of that
7111     option, depending on 'NegativeAlias').  In the first form, any
7112     argument passed to the alias is considered to be passed to '-OPT',
7113     and '-OPT' is considered to be negated if the alias is used in
7114     negated form.  In the second form, the alias may not be negated or
7115     have an argument, and POSARG is considered to be passed as an
7116     argument to '-OPT'.  In the third form, the alias may not have an
7117     argument, if the alias is used in the positive form then POSARG is
7118     considered to be passed to '-OPT', and if the alias is used in the
7119     negative form then NEGARG is considered to be passed to '-OPT'.
7120
7121     Aliases should not specify 'Var' or 'Mask' or 'UInteger'.  Aliases
7122     should normally specify the same languages as the target of the
7123     alias; the flags on the target will be used to determine any
7124     diagnostic for use of an option for the wrong language, while those
7125     on the alias will be used to identify what command-line text is the
7126     option and what text is any argument to that option.
7127
7128     When an 'Alias' definition is used for an option, driver specs do
7129     not need to handle it and no 'OPT_' enumeration value is defined
7130     for it; only the canonical form of the option will be seen in those
7131     places.
7132
7133'NegativeAlias'
7134     For an option marked with 'Alias(OPT)', the option is considered to
7135     be an alias for the positive form of '-OPT' if negated and for the
7136     negative form of '-OPT' if not negated.  'NegativeAlias' may not be
7137     used with the forms of 'Alias' taking more than one argument.
7138
7139'Ignore'
7140     This option is ignored apart from printing any warning specified
7141     using 'Warn'.  The option will not be seen by specs and no 'OPT_'
7142     enumeration value is defined for it.
7143
7144'SeparateAlias'
7145     For an option marked with 'Joined', 'Separate' and 'Alias', the
7146     option only acts as an alias when passed a separate argument; with
7147     a joined argument it acts as a normal option, with an 'OPT_'
7148     enumeration value.  This is for compatibility with the Java '-d'
7149     option and should not be used for new options.
7150
7151'Warn(MESSAGE)'
7152     If this option is used, output the warning MESSAGE.  MESSAGE is a
7153     format string, either taking a single operand with a '%qs' format
7154     which is the option name, or not taking any operands, which is
7155     passed to the 'warning' function.  If an alias is marked 'Warn',
7156     the target of the alias must not also be marked 'Warn'.
7157
7158'Report'
7159     The state of the option should be printed by '-fverbose-asm'.
7160
7161'Warning'
7162     This is a warning option and should be shown as such in '--help'
7163     output.  This flag does not currently affect anything other than
7164     '--help'.
7165
7166'Optimization'
7167     This is an optimization option.  It should be shown as such in
7168     '--help' output, and any associated variable named using 'Var'
7169     should be saved and restored when the optimization level is changed
7170     with 'optimize' attributes.
7171
7172'PerFunction'
7173     This is an option that can be overridden on a per-function basis.
7174     'Optimization' implies 'PerFunction', but options that do not
7175     affect executable code generation may use this flag instead, so
7176     that the option is not taken into account in ways that might affect
7177     executable code generation.
7178
7179'Param'
7180     This is an option that is a parameter.
7181
7182'Undocumented'
7183     The option is deliberately missing documentation and should not be
7184     included in the '--help' output.
7185
7186'Condition(COND)'
7187     The option should only be accepted if preprocessor condition COND
7188     is true.  Note that any C declarations associated with the option
7189     will be present even if COND is false; COND simply controls whether
7190     the option is accepted and whether it is printed in the '--help'
7191     output.
7192
7193'Save'
7194     Build the 'cl_target_option' structure to hold a copy of the
7195     option, add the functions 'cl_target_option_save' and
7196     'cl_target_option_restore' to save and restore the options.
7197
7198'SetByCombined'
7199     The option may also be set by a combined option such as
7200     '-ffast-math'.  This causes the 'gcc_options' struct to have a
7201     field 'frontend_set_NAME', where 'NAME' is the name of the field
7202     holding the value of this option (without the leading 'x_').  This
7203     gives the front end a way to indicate that the value has been set
7204     explicitly and should not be changed by the combined option.  For
7205     example, some front ends use this to prevent '-ffast-math' and
7206     '-fno-fast-math' from changing the value of '-fmath-errno' for
7207     languages that do not use 'errno'.
7208
7209'EnabledBy(OPT)'
7210'EnabledBy(OPT || OPT2)'
7211'EnabledBy(OPT && OPT2)'
7212     If not explicitly set, the option is set to the value of '-OPT';
7213     multiple options can be given, separated by '||'.  The third form
7214     using '&&' specifies that the option is only set if both OPT and
7215     OPT2 are set.  The options OPT and OPT2 must have the 'Common'
7216     property; otherwise, use 'LangEnabledBy'.
7217
7218'LangEnabledBy(LANGUAGE, OPT)'
7219'LangEnabledBy(LANGUAGE, OPT, POSARG, NEGARG)'
7220     When compiling for the given language, the option is set to the
7221     value of '-OPT', if not explicitly set.  OPT can be also a list of
7222     '||' separated options.  In the second form, if OPT is used in the
7223     positive form then POSARG is considered to be passed to the option,
7224     and if OPT is used in the negative form then NEGARG is considered
7225     to be passed to the option.  It is possible to specify several
7226     different languages.  Each LANGUAGE must have been declared by an
7227     earlier 'Language' record.  *Note Option file format::.
7228
7229'NoDWARFRecord'
7230     The option is omitted from the producer string written by
7231     '-grecord-gcc-switches'.
7232
7233'PchIgnore'
7234     Even if this is a target option, this option will not be recorded /
7235     compared to determine if a precompiled header file matches.
7236
7237'CPP(VAR)'
7238     The state of this option should be kept in sync with the
7239     preprocessor option VAR.  If this property is set, then properties
7240     'Var' and 'Init' must be set as well.
7241
7242'CppReason(CPP_W_ENUM)'
7243     This warning option corresponds to 'cpplib.h' warning reason code
7244     CPP_W_ENUM.  This should only be used for warning options of the
7245     C-family front-ends.
7246
7247
7248File: gccint.info,  Node: Passes,  Next: poly_int,  Prev: Options,  Up: Top
7249
72509 Passes and Files of the Compiler
7251**********************************
7252
7253This chapter is dedicated to giving an overview of the optimization and
7254code generation passes of the compiler.  In the process, it describes
7255some of the language front end interface, though this description is no
7256where near complete.
7257
7258* Menu:
7259
7260* Parsing pass::         The language front end turns text into bits.
7261* Gimplification pass::  The bits are turned into something we can optimize.
7262* Pass manager::         Sequencing the optimization passes.
7263* IPA passes::           Inter-procedural optimizations.
7264* Tree SSA passes::      Optimizations on a high-level representation.
7265* RTL passes::           Optimizations on a low-level representation.
7266* Optimization info::    Dumping optimization information from passes.
7267
7268
7269File: gccint.info,  Node: Parsing pass,  Next: Gimplification pass,  Up: Passes
7270
72719.1 Parsing pass
7272================
7273
7274The language front end is invoked only once, via
7275'lang_hooks.parse_file', to parse the entire input.  The language front
7276end may use any intermediate language representation deemed appropriate.
7277The C front end uses GENERIC trees (*note GENERIC::), plus a double
7278handful of language specific tree codes defined in 'c-common.def'.  The
7279Fortran front end uses a completely different private representation.
7280
7281 At some point the front end must translate the representation used in
7282the front end to a representation understood by the language-independent
7283portions of the compiler.  Current practice takes one of two forms.  The
7284C front end manually invokes the gimplifier (*note GIMPLE::) on each
7285function, and uses the gimplifier callbacks to convert the
7286language-specific tree nodes directly to GIMPLE before passing the
7287function off to be compiled.  The Fortran front end converts from a
7288private representation to GENERIC, which is later lowered to GIMPLE when
7289the function is compiled.  Which route to choose probably depends on how
7290well GENERIC (plus extensions) can be made to match up with the source
7291language and necessary parsing data structures.
7292
7293 BUG: Gimplification must occur before nested function lowering, and
7294nested function lowering must be done by the front end before passing
7295the data off to cgraph.
7296
7297 TODO: Cgraph should control nested function lowering.  It would only be
7298invoked when it is certain that the outer-most function is used.
7299
7300 TODO: Cgraph needs a gimplify_function callback.  It should be invoked
7301when (1) it is certain that the function is used, (2) warning flags
7302specified by the user require some amount of compilation in order to
7303honor, (3) the language indicates that semantic analysis is not complete
7304until gimplification occurs.  Hum... this sounds overly complicated.
7305Perhaps we should just have the front end gimplify always; in most cases
7306it's only one function call.
7307
7308 The front end needs to pass all function definitions and top level
7309declarations off to the middle-end so that they can be compiled and
7310emitted to the object file.  For a simple procedural language, it is
7311usually most convenient to do this as each top level declaration or
7312definition is seen.  There is also a distinction to be made between
7313generating functional code and generating complete debug information.
7314The only thing that is absolutely required for functional code is that
7315function and data _definitions_ be passed to the middle-end.  For
7316complete debug information, function, data and type declarations should
7317all be passed as well.
7318
7319 In any case, the front end needs each complete top-level function or
7320data declaration, and each data definition should be passed to
7321'rest_of_decl_compilation'.  Each complete type definition should be
7322passed to 'rest_of_type_compilation'.  Each function definition should
7323be passed to 'cgraph_finalize_function'.
7324
7325 TODO: I know rest_of_compilation currently has all sorts of RTL
7326generation semantics.  I plan to move all code generation bits (both
7327Tree and RTL) to compile_function.  Should we hide cgraph from the front
7328ends and move back to rest_of_compilation as the official interface?
7329Possibly we should rename all three interfaces such that the names match
7330in some meaningful way and that is more descriptive than "rest_of".
7331
7332 The middle-end will, at its option, emit the function and data
7333definitions immediately or queue them for later processing.
7334
7335
7336File: gccint.info,  Node: Gimplification pass,  Next: Pass manager,  Prev: Parsing pass,  Up: Passes
7337
73389.2 Gimplification pass
7339=======================
7340
7341"Gimplification" is a whimsical term for the process of converting the
7342intermediate representation of a function into the GIMPLE language
7343(*note GIMPLE::).  The term stuck, and so words like "gimplification",
7344"gimplify", "gimplifier" and the like are sprinkled throughout this
7345section of code.
7346
7347 While a front end may certainly choose to generate GIMPLE directly if
7348it chooses, this can be a moderately complex process unless the
7349intermediate language used by the front end is already fairly simple.
7350Usually it is easier to generate GENERIC trees plus extensions and let
7351the language-independent gimplifier do most of the work.
7352
7353 The main entry point to this pass is 'gimplify_function_tree' located
7354in 'gimplify.c'.  From here we process the entire function gimplifying
7355each statement in turn.  The main workhorse for this pass is
7356'gimplify_expr'.  Approximately everything passes through here at least
7357once, and it is from here that we invoke the 'lang_hooks.gimplify_expr'
7358callback.
7359
7360 The callback should examine the expression in question and return
7361'GS_UNHANDLED' if the expression is not a language specific construct
7362that requires attention.  Otherwise it should alter the expression in
7363some way to such that forward progress is made toward producing valid
7364GIMPLE.  If the callback is certain that the transformation is complete
7365and the expression is valid GIMPLE, it should return 'GS_ALL_DONE'.
7366Otherwise it should return 'GS_OK', which will cause the expression to
7367be processed again.  If the callback encounters an error during the
7368transformation (because the front end is relying on the gimplification
7369process to finish semantic checks), it should return 'GS_ERROR'.
7370
7371
7372File: gccint.info,  Node: Pass manager,  Next: IPA passes,  Prev: Gimplification pass,  Up: Passes
7373
73749.3 Pass manager
7375================
7376
7377The pass manager is located in 'passes.c', 'tree-optimize.c' and
7378'tree-pass.h'.  It processes passes as described in 'passes.def'.  Its
7379job is to run all of the individual passes in the correct order, and
7380take care of standard bookkeeping that applies to every pass.
7381
7382 The theory of operation is that each pass defines a structure that
7383represents everything we need to know about that pass--when it should be
7384run, how it should be run, what intermediate language form or
7385on-the-side data structures it needs.  We register the pass to be run in
7386some particular order, and the pass manager arranges for everything to
7387happen in the correct order.
7388
7389 The actuality doesn't completely live up to the theory at present.
7390Command-line switches and 'timevar_id_t' enumerations must still be
7391defined elsewhere.  The pass manager validates constraints but does not
7392attempt to (re-)generate data structures or lower intermediate language
7393form based on the requirements of the next pass.  Nevertheless, what is
7394present is useful, and a far sight better than nothing at all.
7395
7396 Each pass should have a unique name.  Each pass may have its own dump
7397file (for GCC debugging purposes).  Passes with a name starting with a
7398star do not dump anything.  Sometimes passes are supposed to share a
7399dump file / option name.  To still give these unique names, you can use
7400a prefix that is delimited by a space from the part that is used for the
7401dump file / option name.  E.g.  When the pass name is "ud dce", the name
7402used for dump file/options is "dce".
7403
7404 TODO: describe the global variables set up by the pass manager, and a
7405brief description of how a new pass should use it.  I need to look at
7406what info RTL passes use first...
7407
7408
7409File: gccint.info,  Node: IPA passes,  Next: Tree SSA passes,  Prev: Pass manager,  Up: Passes
7410
74119.4 Inter-procedural optimization passes
7412========================================
7413
7414The inter-procedural optimization (IPA) passes use call graph
7415information to perform transformations across function boundaries.  IPA
7416is a critical part of link-time optimization (LTO) and whole-program
7417(WHOPR) optimization, and these passes are structured with the needs of
7418LTO and WHOPR in mind by dividing their operations into stages.  For
7419detailed discussion of the LTO/WHOPR IPA pass stages and interfaces, see
7420*note IPA::.
7421
7422 The following briefly describes the inter-procedural optimization (IPA)
7423passes, which are split into small IPA passes, regular IPA passes, and
7424late IPA passes, according to the LTO/WHOPR processing model.
7425
7426* Menu:
7427
7428* Small IPA passes::
7429* Regular IPA passes::
7430* Late IPA passes::
7431
7432
7433File: gccint.info,  Node: Small IPA passes,  Next: Regular IPA passes,  Up: IPA passes
7434
74359.4.1 Small IPA passes
7436----------------------
7437
7438A small IPA pass is a pass derived from 'simple_ipa_opt_pass'.  As
7439described in *note IPA::, it does everything at once and defines only
7440the _Execute_ stage.  During this stage it accesses and modifies the
7441function bodies.  No 'generate_summary', 'read_summary', or
7442'write_summary' hooks are defined.
7443
7444   * IPA free lang data
7445
7446     This pass frees resources that are used by the front end but are
7447     not needed once it is done.  It is located in 'tree.c' and is
7448     described by 'pass_ipa_free_lang_data'.
7449
7450   * IPA function and variable visibility
7451
7452     This is a local function pass handling visibilities of all symbols.
7453     This happens before LTO streaming, so '-fwhole-program' should be
7454     ignored at this level.  It is located in 'ipa-visibility.c' and is
7455     described by 'pass_ipa_function_and_variable_visibility'.
7456
7457   * IPA remove symbols
7458
7459     This pass performs reachability analysis and reclaims all
7460     unreachable nodes.  It is located in 'passes.c' and is described by
7461     'pass_ipa_remove_symbols'.
7462
7463   * IPA OpenACC
7464
7465     This is a pass group for OpenACC processing.  It is located in
7466     'tree-ssa-loop.c' and is described by 'pass_ipa_oacc'.
7467
7468   * IPA points-to analysis
7469
7470     This is a tree-based points-to analysis pass.  The idea behind this
7471     analyzer is to generate set constraints from the program, then
7472     solve the resulting constraints in order to generate the points-to
7473     sets.  It is located in 'tree-ssa-structalias.c' and is described
7474     by 'pass_ipa_pta'.
7475
7476   * IPA OpenACC kernels
7477
7478     This is a pass group for processing OpenACC kernels regions.  It is
7479     a subpass of the IPA OpenACC pass group that runs on offloaded
7480     functions containing OpenACC kernels loops.  It is located in
7481     'tree-ssa-loop.c' and is described by 'pass_ipa_oacc_kernels'.
7482
7483   * Target clone
7484
7485     This is a pass for parsing functions with multiple target
7486     attributes.  It is located in 'multiple_target.c' and is described
7487     by 'pass_target_clone'.
7488
7489   * IPA auto profile
7490
7491     This pass uses AutoFDO profiling data to annotate the control flow
7492     graph.  It is located in 'auto-profile.c' and is described by
7493     'pass_ipa_auto_profile'.
7494
7495   * IPA tree profile
7496
7497     This pass does profiling for all functions in the call graph.  It
7498     calculates branch probabilities and basic block execution counts.
7499     It is located in 'tree-profile.c' and is described by
7500     'pass_ipa_tree_profile'.
7501
7502   * IPA free function summary
7503
7504     This pass is a small IPA pass when argument 'small_p' is true.  It
7505     releases inline function summaries and call summaries.  It is
7506     located in 'ipa-fnsummary.c' and is described by
7507     'pass_ipa_free_free_fn_summary'.
7508
7509   * IPA increase alignment
7510
7511     This pass increases the alignment of global arrays to improve
7512     vectorization.  It is located in 'tree-vectorizer.c' and is
7513     described by 'pass_ipa_increase_alignment'.
7514
7515   * IPA transactional memory
7516
7517     This pass is for transactional memory support.  It is located in
7518     'trans-mem.c' and is described by 'pass_ipa_tm'.
7519
7520   * IPA lower emulated TLS
7521
7522     This pass lowers thread-local storage (TLS) operations to emulation
7523     functions provided by libgcc.  It is located in 'tree-emutls.c' and
7524     is described by 'pass_ipa_lower_emutls'.
7525
7526
7527File: gccint.info,  Node: Regular IPA passes,  Next: Late IPA passes,  Prev: Small IPA passes,  Up: IPA passes
7528
75299.4.2 Regular IPA passes
7530------------------------
7531
7532A regular IPA pass is a pass derived from 'ipa_opt_pass_d' that is
7533executed in WHOPR compilation.  Regular IPA passes may have summary
7534hooks implemented in any of the LGEN, WPA or LTRANS stages (*note
7535IPA::).
7536
7537   * IPA whole program visibility
7538
7539     This pass performs various optimizations involving symbol
7540     visibility with '-fwhole-program', including symbol privatization,
7541     discovering local functions, and dismantling comdat groups.  It is
7542     located in 'ipa-visibility.c' and is described by
7543     'pass_ipa_whole_program_visibility'.
7544
7545   * IPA profile
7546
7547     The IPA profile pass propagates profiling frequencies across the
7548     call graph.  It is located in 'ipa-profile.c' and is described by
7549     'pass_ipa_profile'.
7550
7551   * IPA identical code folding
7552
7553     This is the inter-procedural identical code folding pass.  The goal
7554     of this transformation is to discover functions and read-only
7555     variables that have exactly the same semantics.  It is located in
7556     'ipa-icf.c' and is described by 'pass_ipa_icf'.
7557
7558   * IPA devirtualization
7559
7560     This pass performs speculative devirtualization based on the type
7561     inheritance graph.  When a polymorphic call has only one likely
7562     target in the unit, it is turned into a speculative call.  It is
7563     located in 'ipa-devirt.c' and is described by 'pass_ipa_devirt'.
7564
7565   * IPA constant propagation
7566
7567     The goal of this pass is to discover functions that are always
7568     invoked with some arguments with the same known constant values and
7569     to modify the functions accordingly.  It can also do partial
7570     specialization and type-based devirtualization.  It is located in
7571     'ipa-cp.c' and is described by 'pass_ipa_cp'.
7572
7573   * IPA scalar replacement of aggregates
7574
7575     This pass can replace an aggregate parameter with a set of other
7576     parameters representing part of the original, turning those passed
7577     by reference into new ones which pass the value directly.  It also
7578     removes unused function return values and unused function
7579     parameters.  This pass is located in 'ipa-sra.c' and is described
7580     by 'pass_ipa_sra'.
7581
7582   * IPA constructor/destructor merge
7583
7584     This pass merges multiple constructors and destructors for static
7585     objects into single functions.  It's only run at LTO time unless
7586     the target doesn't support constructors and destructors natively.
7587     The pass is located in 'ipa.c' and is described by
7588     'pass_ipa_cdtor_merge'.
7589
7590   * IPA HSA
7591
7592     This pass is part of the GCC support for HSA (Heterogeneous System
7593     Architecture) accelerators.  It is responsible for creation of HSA
7594     clones and emitting HSAIL instructions for them.  It is located in
7595     'ipa-hsa.c' and is described by 'pass_ipa_hsa'.
7596
7597   * IPA function summary
7598
7599     This pass provides function analysis for inter-procedural passes.
7600     It collects estimates of function body size, execution time, and
7601     frame size for each function.  It also estimates information about
7602     function calls: call statement size, time and how often the
7603     parameters change for each call.  It is located in
7604     'ipa-fnsummary.c' and is described by 'pass_ipa_fn_summary'.
7605
7606   * IPA inline
7607
7608     The IPA inline pass handles function inlining with whole-program
7609     knowledge.  Small functions that are candidates for inlining are
7610     ordered in increasing badness, bounded by unit growth parameters.
7611     Unreachable functions are removed from the call graph.  Functions
7612     called once and not exported from the unit are inlined.  This pass
7613     is located in 'ipa-inline.c' and is described by 'pass_ipa_inline'.
7614
7615   * IPA pure/const analysis
7616
7617     This pass marks functions as being either const ('TREE_READONLY')
7618     or pure ('DECL_PURE_P').  The per-function information is produced
7619     by 'pure_const_generate_summary', then the global information is
7620     computed by performing a transitive closure over the call graph.
7621     It is located in 'ipa-pure-const.c' and is described by
7622     'pass_ipa_pure_const'.
7623
7624   * IPA free function summary
7625
7626     This pass is a regular IPA pass when argument 'small_p' is false.
7627     It releases inline function summaries and call summaries.  It is
7628     located in 'ipa-fnsummary.c' and is described by
7629     'pass_ipa_free_fn_summary'.
7630
7631   * IPA reference
7632
7633     This pass gathers information about how variables whose scope is
7634     confined to the compilation unit are used.  It is located in
7635     'ipa-reference.c' and is described by 'pass_ipa_reference'.
7636
7637   * IPA single use
7638
7639     This pass checks whether variables are used by a single function.
7640     It is located in 'ipa.c' and is described by 'pass_ipa_single_use'.
7641
7642   * IPA comdats
7643
7644     This pass looks for static symbols that are used exclusively within
7645     one comdat group, and moves them into that comdat group.  It is
7646     located in 'ipa-comdats.c' and is described by 'pass_ipa_comdats'.
7647
7648
7649File: gccint.info,  Node: Late IPA passes,  Prev: Regular IPA passes,  Up: IPA passes
7650
76519.4.3 Late IPA passes
7652---------------------
7653
7654Late IPA passes are simple IPA passes executed after the regular passes.
7655In WHOPR mode the passes are executed after partitioning and thus see
7656just parts of the compiled unit.
7657
7658   * Materialize all clones
7659
7660     Once all functions from compilation unit are in memory, produce all
7661     clones and update all calls.  It is located in 'ipa.c' and is
7662     described by 'pass_materialize_all_clones'.
7663
7664   * IPA points-to analysis
7665
7666     Points-to analysis; this is the same as the points-to-analysis pass
7667     run with the small IPA passes (*note Small IPA passes::).
7668
7669   * OpenMP simd clone
7670
7671     This is the OpenMP constructs' SIMD clone pass.  It creates the
7672     appropriate SIMD clones for functions tagged as elemental SIMD
7673     functions.  It is located in 'omp-simd-clone.c' and is described by
7674     'pass_omp_simd_clone'.
7675
7676
7677File: gccint.info,  Node: Tree SSA passes,  Next: RTL passes,  Prev: IPA passes,  Up: Passes
7678
76799.5 Tree SSA passes
7680===================
7681
7682The following briefly describes the Tree optimization passes that are
7683run after gimplification and what source files they are located in.
7684
7685   * Remove useless statements
7686
7687     This pass is an extremely simple sweep across the gimple code in
7688     which we identify obviously dead code and remove it.  Here we do
7689     things like simplify 'if' statements with constant conditions,
7690     remove exception handling constructs surrounding code that
7691     obviously cannot throw, remove lexical bindings that contain no
7692     variables, and other assorted simplistic cleanups.  The idea is to
7693     get rid of the obvious stuff quickly rather than wait until later
7694     when it's more work to get rid of it.  This pass is located in
7695     'tree-cfg.c' and described by 'pass_remove_useless_stmts'.
7696
7697   * OpenMP lowering
7698
7699     If OpenMP generation ('-fopenmp') is enabled, this pass lowers
7700     OpenMP constructs into GIMPLE.
7701
7702     Lowering of OpenMP constructs involves creating replacement
7703     expressions for local variables that have been mapped using data
7704     sharing clauses, exposing the control flow of most synchronization
7705     directives and adding region markers to facilitate the creation of
7706     the control flow graph.  The pass is located in 'omp-low.c' and is
7707     described by 'pass_lower_omp'.
7708
7709   * OpenMP expansion
7710
7711     If OpenMP generation ('-fopenmp') is enabled, this pass expands
7712     parallel regions into their own functions to be invoked by the
7713     thread library.  The pass is located in 'omp-low.c' and is
7714     described by 'pass_expand_omp'.
7715
7716   * Lower control flow
7717
7718     This pass flattens 'if' statements ('COND_EXPR') and moves lexical
7719     bindings ('BIND_EXPR') out of line.  After this pass, all 'if'
7720     statements will have exactly two 'goto' statements in its 'then'
7721     and 'else' arms.  Lexical binding information for each statement
7722     will be found in 'TREE_BLOCK' rather than being inferred from its
7723     position under a 'BIND_EXPR'.  This pass is found in 'gimple-low.c'
7724     and is described by 'pass_lower_cf'.
7725
7726   * Lower exception handling control flow
7727
7728     This pass decomposes high-level exception handling constructs
7729     ('TRY_FINALLY_EXPR' and 'TRY_CATCH_EXPR') into a form that
7730     explicitly represents the control flow involved.  After this pass,
7731     'lookup_stmt_eh_region' will return a non-negative number for any
7732     statement that may have EH control flow semantics; examine
7733     'tree_can_throw_internal' or 'tree_can_throw_external' for exact
7734     semantics.  Exact control flow may be extracted from
7735     'foreach_reachable_handler'.  The EH region nesting tree is defined
7736     in 'except.h' and built in 'except.c'.  The lowering pass itself is
7737     in 'tree-eh.c' and is described by 'pass_lower_eh'.
7738
7739   * Build the control flow graph
7740
7741     This pass decomposes a function into basic blocks and creates all
7742     of the edges that connect them.  It is located in 'tree-cfg.c' and
7743     is described by 'pass_build_cfg'.
7744
7745   * Find all referenced variables
7746
7747     This pass walks the entire function and collects an array of all
7748     variables referenced in the function, 'referenced_vars'.  The index
7749     at which a variable is found in the array is used as a UID for the
7750     variable within this function.  This data is needed by the SSA
7751     rewriting routines.  The pass is located in 'tree-dfa.c' and is
7752     described by 'pass_referenced_vars'.
7753
7754   * Enter static single assignment form
7755
7756     This pass rewrites the function such that it is in SSA form.  After
7757     this pass, all 'is_gimple_reg' variables will be referenced by
7758     'SSA_NAME', and all occurrences of other variables will be
7759     annotated with 'VDEFS' and 'VUSES'; PHI nodes will have been
7760     inserted as necessary for each basic block.  This pass is located
7761     in 'tree-ssa.c' and is described by 'pass_build_ssa'.
7762
7763   * Warn for uninitialized variables
7764
7765     This pass scans the function for uses of 'SSA_NAME's that are fed
7766     by default definition.  For non-parameter variables, such uses are
7767     uninitialized.  The pass is run twice, before and after
7768     optimization (if turned on).  In the first pass we only warn for
7769     uses that are positively uninitialized; in the second pass we warn
7770     for uses that are possibly uninitialized.  The pass is located in
7771     'tree-ssa.c' and is defined by 'pass_early_warn_uninitialized' and
7772     'pass_late_warn_uninitialized'.
7773
7774   * Dead code elimination
7775
7776     This pass scans the function for statements without side effects
7777     whose result is unused.  It does not do memory life analysis, so
7778     any value that is stored in memory is considered used.  The pass is
7779     run multiple times throughout the optimization process.  It is
7780     located in 'tree-ssa-dce.c' and is described by 'pass_dce'.
7781
7782   * Dominator optimizations
7783
7784     This pass performs trivial dominator-based copy and constant
7785     propagation, expression simplification, and jump threading.  It is
7786     run multiple times throughout the optimization process.  It is
7787     located in 'tree-ssa-dom.c' and is described by 'pass_dominator'.
7788
7789   * Forward propagation of single-use variables
7790
7791     This pass attempts to remove redundant computation by substituting
7792     variables that are used once into the expression that uses them and
7793     seeing if the result can be simplified.  It is located in
7794     'tree-ssa-forwprop.c' and is described by 'pass_forwprop'.
7795
7796   * Copy Renaming
7797
7798     This pass attempts to change the name of compiler temporaries
7799     involved in copy operations such that SSA->normal can coalesce the
7800     copy away.  When compiler temporaries are copies of user variables,
7801     it also renames the compiler temporary to the user variable
7802     resulting in better use of user symbols.  It is located in
7803     'tree-ssa-copyrename.c' and is described by 'pass_copyrename'.
7804
7805   * PHI node optimizations
7806
7807     This pass recognizes forms of PHI inputs that can be represented as
7808     conditional expressions and rewrites them into straight line code.
7809     It is located in 'tree-ssa-phiopt.c' and is described by
7810     'pass_phiopt'.
7811
7812   * May-alias optimization
7813
7814     This pass performs a flow sensitive SSA-based points-to analysis.
7815     The resulting may-alias, must-alias, and escape analysis
7816     information is used to promote variables from in-memory addressable
7817     objects to non-aliased variables that can be renamed into SSA form.
7818     We also update the 'VDEF'/'VUSE' memory tags for non-renameable
7819     aggregates so that we get fewer false kills.  The pass is located
7820     in 'tree-ssa-alias.c' and is described by 'pass_may_alias'.
7821
7822     Interprocedural points-to information is located in
7823     'tree-ssa-structalias.c' and described by 'pass_ipa_pta'.
7824
7825   * Profiling
7826
7827     This pass instruments the function in order to collect runtime
7828     block and value profiling data.  Such data may be fed back into the
7829     compiler on a subsequent run so as to allow optimization based on
7830     expected execution frequencies.  The pass is located in
7831     'tree-profile.c' and is described by 'pass_ipa_tree_profile'.
7832
7833   * Static profile estimation
7834
7835     This pass implements series of heuristics to guess propababilities
7836     of branches.  The resulting predictions are turned into edge
7837     profile by propagating branches across the control flow graphs.
7838     The pass is located in 'tree-profile.c' and is described by
7839     'pass_profile'.
7840
7841   * Lower complex arithmetic
7842
7843     This pass rewrites complex arithmetic operations into their
7844     component scalar arithmetic operations.  The pass is located in
7845     'tree-complex.c' and is described by 'pass_lower_complex'.
7846
7847   * Scalar replacement of aggregates
7848
7849     This pass rewrites suitable non-aliased local aggregate variables
7850     into a set of scalar variables.  The resulting scalar variables are
7851     rewritten into SSA form, which allows subsequent optimization
7852     passes to do a significantly better job with them.  The pass is
7853     located in 'tree-sra.c' and is described by 'pass_sra'.
7854
7855   * Dead store elimination
7856
7857     This pass eliminates stores to memory that are subsequently
7858     overwritten by another store, without any intervening loads.  The
7859     pass is located in 'tree-ssa-dse.c' and is described by 'pass_dse'.
7860
7861   * Tail recursion elimination
7862
7863     This pass transforms tail recursion into a loop.  It is located in
7864     'tree-tailcall.c' and is described by 'pass_tail_recursion'.
7865
7866   * Forward store motion
7867
7868     This pass sinks stores and assignments down the flowgraph closer to
7869     their use point.  The pass is located in 'tree-ssa-sink.c' and is
7870     described by 'pass_sink_code'.
7871
7872   * Partial redundancy elimination
7873
7874     This pass eliminates partially redundant computations, as well as
7875     performing load motion.  The pass is located in 'tree-ssa-pre.c'
7876     and is described by 'pass_pre'.
7877
7878     Just before partial redundancy elimination, if
7879     '-funsafe-math-optimizations' is on, GCC tries to convert divisions
7880     to multiplications by the reciprocal.  The pass is located in
7881     'tree-ssa-math-opts.c' and is described by 'pass_cse_reciprocal'.
7882
7883   * Full redundancy elimination
7884
7885     This is a simpler form of PRE that only eliminates redundancies
7886     that occur on all paths.  It is located in 'tree-ssa-pre.c' and
7887     described by 'pass_fre'.
7888
7889   * Loop optimization
7890
7891     The main driver of the pass is placed in 'tree-ssa-loop.c' and
7892     described by 'pass_loop'.
7893
7894     The optimizations performed by this pass are:
7895
7896     Loop invariant motion.  This pass moves only invariants that would
7897     be hard to handle on RTL level (function calls, operations that
7898     expand to nontrivial sequences of insns).  With '-funswitch-loops'
7899     it also moves operands of conditions that are invariant out of the
7900     loop, so that we can use just trivial invariantness analysis in
7901     loop unswitching.  The pass also includes store motion.  The pass
7902     is implemented in 'tree-ssa-loop-im.c'.
7903
7904     Canonical induction variable creation.  This pass creates a simple
7905     counter for number of iterations of the loop and replaces the exit
7906     condition of the loop using it, in case when a complicated analysis
7907     is necessary to determine the number of iterations.  Later
7908     optimizations then may determine the number easily.  The pass is
7909     implemented in 'tree-ssa-loop-ivcanon.c'.
7910
7911     Induction variable optimizations.  This pass performs standard
7912     induction variable optimizations, including strength reduction,
7913     induction variable merging and induction variable elimination.  The
7914     pass is implemented in 'tree-ssa-loop-ivopts.c'.
7915
7916     Loop unswitching.  This pass moves the conditional jumps that are
7917     invariant out of the loops.  To achieve this, a duplicate of the
7918     loop is created for each possible outcome of conditional jump(s).
7919     The pass is implemented in 'tree-ssa-loop-unswitch.c'.
7920
7921     Loop splitting.  If a loop contains a conditional statement that is
7922     always true for one part of the iteration space and false for the
7923     other this pass splits the loop into two, one dealing with one side
7924     the other only with the other, thereby removing one inner-loop
7925     conditional.  The pass is implemented in 'tree-ssa-loop-split.c'.
7926
7927     The optimizations also use various utility functions contained in
7928     'tree-ssa-loop-manip.c', 'cfgloop.c', 'cfgloopanal.c' and
7929     'cfgloopmanip.c'.
7930
7931     Vectorization.  This pass transforms loops to operate on vector
7932     types instead of scalar types.  Data parallelism across loop
7933     iterations is exploited to group data elements from consecutive
7934     iterations into a vector and operate on them in parallel.
7935     Depending on available target support the loop is conceptually
7936     unrolled by a factor 'VF' (vectorization factor), which is the
7937     number of elements operated upon in parallel in each iteration, and
7938     the 'VF' copies of each scalar operation are fused to form a vector
7939     operation.  Additional loop transformations such as peeling and
7940     versioning may take place to align the number of iterations, and to
7941     align the memory accesses in the loop.  The pass is implemented in
7942     'tree-vectorizer.c' (the main driver), 'tree-vect-loop.c' and
7943     'tree-vect-loop-manip.c' (loop specific parts and general loop
7944     utilities), 'tree-vect-slp' (loop-aware SLP functionality),
7945     'tree-vect-stmts.c' and 'tree-vect-data-refs.c'.  Analysis of data
7946     references is in 'tree-data-ref.c'.
7947
7948     SLP Vectorization.  This pass performs vectorization of
7949     straight-line code.  The pass is implemented in 'tree-vectorizer.c'
7950     (the main driver), 'tree-vect-slp.c', 'tree-vect-stmts.c' and
7951     'tree-vect-data-refs.c'.
7952
7953     Autoparallelization.  This pass splits the loop iteration space to
7954     run into several threads.  The pass is implemented in
7955     'tree-parloops.c'.
7956
7957     Graphite is a loop transformation framework based on the polyhedral
7958     model.  Graphite stands for Gimple Represented as Polyhedra.  The
7959     internals of this infrastructure are documented in
7960     <http://gcc.gnu.org/wiki/Graphite>.  The passes working on this
7961     representation are implemented in the various 'graphite-*' files.
7962
7963   * Tree level if-conversion for vectorizer
7964
7965     This pass applies if-conversion to simple loops to help vectorizer.
7966     We identify if convertible loops, if-convert statements and merge
7967     basic blocks in one big block.  The idea is to present loop in such
7968     form so that vectorizer can have one to one mapping between
7969     statements and available vector operations.  This pass is located
7970     in 'tree-if-conv.c' and is described by 'pass_if_conversion'.
7971
7972   * Conditional constant propagation
7973
7974     This pass relaxes a lattice of values in order to identify those
7975     that must be constant even in the presence of conditional branches.
7976     The pass is located in 'tree-ssa-ccp.c' and is described by
7977     'pass_ccp'.
7978
7979     A related pass that works on memory loads and stores, and not just
7980     register values, is located in 'tree-ssa-ccp.c' and described by
7981     'pass_store_ccp'.
7982
7983   * Conditional copy propagation
7984
7985     This is similar to constant propagation but the lattice of values
7986     is the "copy-of" relation.  It eliminates redundant copies from the
7987     code.  The pass is located in 'tree-ssa-copy.c' and described by
7988     'pass_copy_prop'.
7989
7990     A related pass that works on memory copies, and not just register
7991     copies, is located in 'tree-ssa-copy.c' and described by
7992     'pass_store_copy_prop'.
7993
7994   * Value range propagation
7995
7996     This transformation is similar to constant propagation but instead
7997     of propagating single constant values, it propagates known value
7998     ranges.  The implementation is based on Patterson's range
7999     propagation algorithm (Accurate Static Branch Prediction by Value
8000     Range Propagation, J. R. C. Patterson, PLDI '95).  In contrast to
8001     Patterson's algorithm, this implementation does not propagate
8002     branch probabilities nor it uses more than a single range per SSA
8003     name.  This means that the current implementation cannot be used
8004     for branch prediction (though adapting it would not be difficult).
8005     The pass is located in 'tree-vrp.c' and is described by 'pass_vrp'.
8006
8007   * Folding built-in functions
8008
8009     This pass simplifies built-in functions, as applicable, with
8010     constant arguments or with inferable string lengths.  It is located
8011     in 'tree-ssa-ccp.c' and is described by 'pass_fold_builtins'.
8012
8013   * Split critical edges
8014
8015     This pass identifies critical edges and inserts empty basic blocks
8016     such that the edge is no longer critical.  The pass is located in
8017     'tree-cfg.c' and is described by 'pass_split_crit_edges'.
8018
8019   * Control dependence dead code elimination
8020
8021     This pass is a stronger form of dead code elimination that can
8022     eliminate unnecessary control flow statements.  It is located in
8023     'tree-ssa-dce.c' and is described by 'pass_cd_dce'.
8024
8025   * Tail call elimination
8026
8027     This pass identifies function calls that may be rewritten into
8028     jumps.  No code transformation is actually applied here, but the
8029     data and control flow problem is solved.  The code transformation
8030     requires target support, and so is delayed until RTL.  In the
8031     meantime 'CALL_EXPR_TAILCALL' is set indicating the possibility.
8032     The pass is located in 'tree-tailcall.c' and is described by
8033     'pass_tail_calls'.  The RTL transformation is handled by
8034     'fixup_tail_calls' in 'calls.c'.
8035
8036   * Warn for function return without value
8037
8038     For non-void functions, this pass locates return statements that do
8039     not specify a value and issues a warning.  Such a statement may
8040     have been injected by falling off the end of the function.  This
8041     pass is run last so that we have as much time as possible to prove
8042     that the statement is not reachable.  It is located in 'tree-cfg.c'
8043     and is described by 'pass_warn_function_return'.
8044
8045   * Leave static single assignment form
8046
8047     This pass rewrites the function such that it is in normal form.  At
8048     the same time, we eliminate as many single-use temporaries as
8049     possible, so the intermediate language is no longer GIMPLE, but
8050     GENERIC.  The pass is located in 'tree-outof-ssa.c' and is
8051     described by 'pass_del_ssa'.
8052
8053   * Merge PHI nodes that feed into one another
8054
8055     This is part of the CFG cleanup passes.  It attempts to join PHI
8056     nodes from a forwarder CFG block into another block with PHI nodes.
8057     The pass is located in 'tree-cfgcleanup.c' and is described by
8058     'pass_merge_phi'.
8059
8060   * Return value optimization
8061
8062     If a function always returns the same local variable, and that
8063     local variable is an aggregate type, then the variable is replaced
8064     with the return value for the function (i.e., the function's
8065     DECL_RESULT). This is equivalent to the C++ named return value
8066     optimization applied to GIMPLE.  The pass is located in
8067     'tree-nrv.c' and is described by 'pass_nrv'.
8068
8069   * Return slot optimization
8070
8071     If a function returns a memory object and is called as 'var =
8072     foo()', this pass tries to change the call so that the address of
8073     'var' is sent to the caller to avoid an extra memory copy.  This
8074     pass is located in 'tree-nrv.c' and is described by
8075     'pass_return_slot'.
8076
8077   * Optimize calls to '__builtin_object_size'
8078
8079     This is a propagation pass similar to CCP that tries to remove
8080     calls to '__builtin_object_size' when the size of the object can be
8081     computed at compile-time.  This pass is located in
8082     'tree-object-size.c' and is described by 'pass_object_sizes'.
8083
8084   * Loop invariant motion
8085
8086     This pass removes expensive loop-invariant computations out of
8087     loops.  The pass is located in 'tree-ssa-loop.c' and described by
8088     'pass_lim'.
8089
8090   * Loop nest optimizations
8091
8092     This is a family of loop transformations that works on loop nests.
8093     It includes loop interchange, scaling, skewing and reversal and
8094     they are all geared to the optimization of data locality in array
8095     traversals and the removal of dependencies that hamper
8096     optimizations such as loop parallelization and vectorization.  The
8097     pass is located in 'tree-loop-linear.c' and described by
8098     'pass_linear_transform'.
8099
8100   * Removal of empty loops
8101
8102     This pass removes loops with no code in them.  The pass is located
8103     in 'tree-ssa-loop-ivcanon.c' and described by 'pass_empty_loop'.
8104
8105   * Unrolling of small loops
8106
8107     This pass completely unrolls loops with few iterations.  The pass
8108     is located in 'tree-ssa-loop-ivcanon.c' and described by
8109     'pass_complete_unroll'.
8110
8111   * Predictive commoning
8112
8113     This pass makes the code reuse the computations from the previous
8114     iterations of the loops, especially loads and stores to memory.  It
8115     does so by storing the values of these computations to a bank of
8116     temporary variables that are rotated at the end of loop.  To avoid
8117     the need for this rotation, the loop is then unrolled and the
8118     copies of the loop body are rewritten to use the appropriate
8119     version of the temporary variable.  This pass is located in
8120     'tree-predcom.c' and described by 'pass_predcom'.
8121
8122   * Array prefetching
8123
8124     This pass issues prefetch instructions for array references inside
8125     loops.  The pass is located in 'tree-ssa-loop-prefetch.c' and
8126     described by 'pass_loop_prefetch'.
8127
8128   * Reassociation
8129
8130     This pass rewrites arithmetic expressions to enable optimizations
8131     that operate on them, like redundancy elimination and
8132     vectorization.  The pass is located in 'tree-ssa-reassoc.c' and
8133     described by 'pass_reassoc'.
8134
8135   * Optimization of 'stdarg' functions
8136
8137     This pass tries to avoid the saving of register arguments into the
8138     stack on entry to 'stdarg' functions.  If the function doesn't use
8139     any 'va_start' macros, no registers need to be saved.  If
8140     'va_start' macros are used, the 'va_list' variables don't escape
8141     the function, it is only necessary to save registers that will be
8142     used in 'va_arg' macros.  For instance, if 'va_arg' is only used
8143     with integral types in the function, floating point registers don't
8144     need to be saved.  This pass is located in 'tree-stdarg.c' and
8145     described by 'pass_stdarg'.
8146
8147
8148File: gccint.info,  Node: RTL passes,  Next: Optimization info,  Prev: Tree SSA passes,  Up: Passes
8149
81509.6 RTL passes
8151==============
8152
8153The following briefly describes the RTL generation and optimization
8154passes that are run after the Tree optimization passes.
8155
8156   * RTL generation
8157
8158     The source files for RTL generation include 'stmt.c', 'calls.c',
8159     'expr.c', 'explow.c', 'expmed.c', 'function.c', 'optabs.c' and
8160     'emit-rtl.c'.  Also, the file 'insn-emit.c', generated from the
8161     machine description by the program 'genemit', is used in this pass.
8162     The header file 'expr.h' is used for communication within this
8163     pass.
8164
8165     The header files 'insn-flags.h' and 'insn-codes.h', generated from
8166     the machine description by the programs 'genflags' and 'gencodes',
8167     tell this pass which standard names are available for use and which
8168     patterns correspond to them.
8169
8170   * Generation of exception landing pads
8171
8172     This pass generates the glue that handles communication between the
8173     exception handling library routines and the exception handlers
8174     within the function.  Entry points in the function that are invoked
8175     by the exception handling library are called "landing pads".  The
8176     code for this pass is located in 'except.c'.
8177
8178   * Control flow graph cleanup
8179
8180     This pass removes unreachable code, simplifies jumps to next, jumps
8181     to jump, jumps across jumps, etc.  The pass is run multiple times.
8182     For historical reasons, it is occasionally referred to as the "jump
8183     optimization pass".  The bulk of the code for this pass is in
8184     'cfgcleanup.c', and there are support routines in 'cfgrtl.c' and
8185     'jump.c'.
8186
8187   * Forward propagation of single-def values
8188
8189     This pass attempts to remove redundant computation by substituting
8190     variables that come from a single definition, and seeing if the
8191     result can be simplified.  It performs copy propagation and
8192     addressing mode selection.  The pass is run twice, with values
8193     being propagated into loops only on the second run.  The code is
8194     located in 'fwprop.c'.
8195
8196   * Common subexpression elimination
8197
8198     This pass removes redundant computation within basic blocks, and
8199     optimizes addressing modes based on cost.  The pass is run twice.
8200     The code for this pass is located in 'cse.c'.
8201
8202   * Global common subexpression elimination
8203
8204     This pass performs two different types of GCSE depending on whether
8205     you are optimizing for size or not (LCM based GCSE tends to
8206     increase code size for a gain in speed, while Morel-Renvoise based
8207     GCSE does not).  When optimizing for size, GCSE is done using
8208     Morel-Renvoise Partial Redundancy Elimination, with the exception
8209     that it does not try to move invariants out of loops--that is left
8210     to the loop optimization pass.  If MR PRE GCSE is done, code
8211     hoisting (aka unification) is also done, as well as load motion.
8212     If you are optimizing for speed, LCM (lazy code motion) based GCSE
8213     is done.  LCM is based on the work of Knoop, Ruthing, and Steffen.
8214     LCM based GCSE also does loop invariant code motion.  We also
8215     perform load and store motion when optimizing for speed.
8216     Regardless of which type of GCSE is used, the GCSE pass also
8217     performs global constant and copy propagation.  The source file for
8218     this pass is 'gcse.c', and the LCM routines are in 'lcm.c'.
8219
8220   * Loop optimization
8221
8222     This pass performs several loop related optimizations.  The source
8223     files 'cfgloopanal.c' and 'cfgloopmanip.c' contain generic loop
8224     analysis and manipulation code.  Initialization and finalization of
8225     loop structures is handled by 'loop-init.c'.  A loop invariant
8226     motion pass is implemented in 'loop-invariant.c'.  Basic block
8227     level optimizations--unrolling, and peeling loops-- are implemented
8228     in 'loop-unroll.c'.  Replacing of the exit condition of loops by
8229     special machine-dependent instructions is handled by
8230     'loop-doloop.c'.
8231
8232   * Jump bypassing
8233
8234     This pass is an aggressive form of GCSE that transforms the control
8235     flow graph of a function by propagating constants into conditional
8236     branch instructions.  The source file for this pass is 'gcse.c'.
8237
8238   * If conversion
8239
8240     This pass attempts to replace conditional branches and surrounding
8241     assignments with arithmetic, boolean value producing comparison
8242     instructions, and conditional move instructions.  In the very last
8243     invocation after reload/LRA, it will generate predicated
8244     instructions when supported by the target.  The code is located in
8245     'ifcvt.c'.
8246
8247   * Web construction
8248
8249     This pass splits independent uses of each pseudo-register.  This
8250     can improve effect of the other transformation, such as CSE or
8251     register allocation.  The code for this pass is located in 'web.c'.
8252
8253   * Instruction combination
8254
8255     This pass attempts to combine groups of two or three instructions
8256     that are related by data flow into single instructions.  It
8257     combines the RTL expressions for the instructions by substitution,
8258     simplifies the result using algebra, and then attempts to match the
8259     result against the machine description.  The code is located in
8260     'combine.c'.
8261
8262   * Mode switching optimization
8263
8264     This pass looks for instructions that require the processor to be
8265     in a specific "mode" and minimizes the number of mode changes
8266     required to satisfy all users.  What these modes are, and what they
8267     apply to are completely target-specific.  The code for this pass is
8268     located in 'mode-switching.c'.
8269
8270   * Modulo scheduling
8271
8272     This pass looks at innermost loops and reorders their instructions
8273     by overlapping different iterations.  Modulo scheduling is
8274     performed immediately before instruction scheduling.  The code for
8275     this pass is located in 'modulo-sched.c'.
8276
8277   * Instruction scheduling
8278
8279     This pass looks for instructions whose output will not be available
8280     by the time that it is used in subsequent instructions.  Memory
8281     loads and floating point instructions often have this behavior on
8282     RISC machines.  It re-orders instructions within a basic block to
8283     try to separate the definition and use of items that otherwise
8284     would cause pipeline stalls.  This pass is performed twice, before
8285     and after register allocation.  The code for this pass is located
8286     in 'haifa-sched.c', 'sched-deps.c', 'sched-ebb.c', 'sched-rgn.c'
8287     and 'sched-vis.c'.
8288
8289   * Register allocation
8290
8291     These passes make sure that all occurrences of pseudo registers are
8292     eliminated, either by allocating them to a hard register, replacing
8293     them by an equivalent expression (e.g. a constant) or by placing
8294     them on the stack.  This is done in several subpasses:
8295
8296        * The integrated register allocator (IRA).  It is called
8297          integrated because coalescing, register live range splitting,
8298          and hard register preferencing are done on-the-fly during
8299          coloring.  It also has better integration with the reload/LRA
8300          pass.  Pseudo-registers spilled by the allocator or the
8301          reload/LRA have still a chance to get hard-registers if the
8302          reload/LRA evicts some pseudo-registers from hard-registers.
8303          The allocator helps to choose better pseudos for spilling
8304          based on their live ranges and to coalesce stack slots
8305          allocated for the spilled pseudo-registers.  IRA is a regional
8306          register allocator which is transformed into Chaitin-Briggs
8307          allocator if there is one region.  By default, IRA chooses
8308          regions using register pressure but the user can force it to
8309          use one region or regions corresponding to all loops.
8310
8311          Source files of the allocator are 'ira.c', 'ira-build.c',
8312          'ira-costs.c', 'ira-conflicts.c', 'ira-color.c', 'ira-emit.c',
8313          'ira-lives', plus header files 'ira.h' and 'ira-int.h' used
8314          for the communication between the allocator and the rest of
8315          the compiler and between the IRA files.
8316
8317        * Reloading.  This pass renumbers pseudo registers with the
8318          hardware registers numbers they were allocated.  Pseudo
8319          registers that did not get hard registers are replaced with
8320          stack slots.  Then it finds instructions that are invalid
8321          because a value has failed to end up in a register, or has
8322          ended up in a register of the wrong kind.  It fixes up these
8323          instructions by reloading the problematical values temporarily
8324          into registers.  Additional instructions are generated to do
8325          the copying.
8326
8327          The reload pass also optionally eliminates the frame pointer
8328          and inserts instructions to save and restore call-clobbered
8329          registers around calls.
8330
8331          Source files are 'reload.c' and 'reload1.c', plus the header
8332          'reload.h' used for communication between them.
8333
8334        * This pass is a modern replacement of the reload pass.  Source
8335          files are 'lra.c', 'lra-assign.c', 'lra-coalesce.c',
8336          'lra-constraints.c', 'lra-eliminations.c', 'lra-lives.c',
8337          'lra-remat.c', 'lra-spills.c', the header 'lra-int.h' used for
8338          communication between them, and the header 'lra.h' used for
8339          communication between LRA and the rest of compiler.
8340
8341          Unlike the reload pass, intermediate LRA decisions are
8342          reflected in RTL as much as possible.  This reduces the number
8343          of target-dependent macros and hooks, leaving instruction
8344          constraints as the primary source of control.
8345
8346          LRA is run on targets for which TARGET_LRA_P returns true.
8347
8348   * Basic block reordering
8349
8350     This pass implements profile guided code positioning.  If profile
8351     information is not available, various types of static analysis are
8352     performed to make the predictions normally coming from the profile
8353     feedback (IE execution frequency, branch probability, etc).  It is
8354     implemented in the file 'bb-reorder.c', and the various prediction
8355     routines are in 'predict.c'.
8356
8357   * Variable tracking
8358
8359     This pass computes where the variables are stored at each position
8360     in code and generates notes describing the variable locations to
8361     RTL code.  The location lists are then generated according to these
8362     notes to debug information if the debugging information format
8363     supports location lists.  The code is located in 'var-tracking.c'.
8364
8365   * Delayed branch scheduling
8366
8367     This optional pass attempts to find instructions that can go into
8368     the delay slots of other instructions, usually jumps and calls.
8369     The code for this pass is located in 'reorg.c'.
8370
8371   * Branch shortening
8372
8373     On many RISC machines, branch instructions have a limited range.
8374     Thus, longer sequences of instructions must be used for long
8375     branches.  In this pass, the compiler figures out what how far each
8376     instruction will be from each other instruction, and therefore
8377     whether the usual instructions, or the longer sequences, must be
8378     used for each branch.  The code for this pass is located in
8379     'final.c'.
8380
8381   * Register-to-stack conversion
8382
8383     Conversion from usage of some hard registers to usage of a register
8384     stack may be done at this point.  Currently, this is supported only
8385     for the floating-point registers of the Intel 80387 coprocessor.
8386     The code for this pass is located in 'reg-stack.c'.
8387
8388   * Final
8389
8390     This pass outputs the assembler code for the function.  The source
8391     files are 'final.c' plus 'insn-output.c'; the latter is generated
8392     automatically from the machine description by the tool 'genoutput'.
8393     The header file 'conditions.h' is used for communication between
8394     these files.
8395
8396   * Debugging information output
8397
8398     This is run after final because it must output the stack slot
8399     offsets for pseudo registers that did not get hard registers.
8400     Source files are 'dbxout.c' for DBX symbol table format,
8401     'dwarfout.c' for DWARF symbol table format, files 'dwarf2out.c' and
8402     'dwarf2asm.c' for DWARF2 symbol table format, and 'vmsdbgout.c' for
8403     VMS debug symbol table format.
8404
8405
8406File: gccint.info,  Node: Optimization info,  Prev: RTL passes,  Up: Passes
8407
84089.7 Optimization info
8409=====================
8410
8411This section is describes dump infrastructure which is common to both
8412pass dumps as well as optimization dumps.  The goal for this
8413infrastructure is to provide both gcc developers and users detailed
8414information about various compiler transformations and optimizations.
8415
8416* Menu:
8417
8418* Dump setup::                         Setup of optimization dumps.
8419* Optimization groups::                Groups made up of optimization passes.
8420* Dump files and streams::             Dump output file names and streams.
8421* Dump output verbosity::              How much information to dump.
8422* Dump types::                         Various types of dump functions.
8423* Dump examples::                      Sample usage.
8424
8425
8426File: gccint.info,  Node: Dump setup,  Next: Optimization groups,  Up: Optimization info
8427
84289.7.1 Dump setup
8429----------------
8430
8431A dump_manager class is defined in 'dumpfile.h'.  Various passes
8432register dumping pass-specific information via 'dump_register' in
8433'passes.c'.  During the registration, an optimization pass can select
8434its optimization group (*note Optimization groups::).  After that
8435optimization information corresponding to the entire group (presumably
8436from multiple passes) can be output via command-line switches.  Note
8437that if a pass does not fit into any of the pre-defined groups, it can
8438select 'OPTGROUP_NONE'.
8439
8440 Note that in general, a pass need not know its dump output file name,
8441whether certain flags are enabled, etc.  However, for legacy reasons,
8442passes could also call 'dump_begin' which returns a stream in case the
8443particular pass has optimization dumps enabled.  A pass could call
8444'dump_end' when the dump has ended.  These methods should go away once
8445all the passes are converted to use the new dump infrastructure.
8446
8447 The recommended way to setup the dump output is via 'dump_start' and
8448'dump_end'.
8449
8450
8451File: gccint.info,  Node: Optimization groups,  Next: Dump files and streams,  Prev: Dump setup,  Up: Optimization info
8452
84539.7.2 Optimization groups
8454-------------------------
8455
8456The optimization passes are grouped into several categories.  Currently
8457defined categories in 'dumpfile.h' are
8458
8459'OPTGROUP_IPA'
8460     IPA optimization passes.  Enabled by '-ipa'
8461
8462'OPTGROUP_LOOP'
8463     Loop optimization passes.  Enabled by '-loop'.
8464
8465'OPTGROUP_INLINE'
8466     Inlining passes.  Enabled by '-inline'.
8467
8468'OPTGROUP_OMP'
8469     OMP (Offloading and Multi Processing) passes.  Enabled by '-omp'.
8470
8471'OPTGROUP_VEC'
8472     Vectorization passes.  Enabled by '-vec'.
8473
8474'OPTGROUP_OTHER'
8475     All other optimization passes which do not fall into one of the
8476     above.
8477
8478'OPTGROUP_ALL'
8479     All optimization passes.  Enabled by '-optall'.
8480
8481 By using groups a user could selectively enable optimization
8482information only for a group of passes.  By default, the optimization
8483information for all the passes is dumped.
8484
8485
8486File: gccint.info,  Node: Dump files and streams,  Next: Dump output verbosity,  Prev: Optimization groups,  Up: Optimization info
8487
84889.7.3 Dump files and streams
8489----------------------------
8490
8491There are two separate output streams available for outputting
8492optimization information from passes.  Note that both these streams
8493accept 'stderr' and 'stdout' as valid streams and thus it is possible to
8494dump output to standard output or error.  This is specially handy for
8495outputting all available information in a single file by redirecting
8496'stderr'.
8497
8498'pstream'
8499     This stream is for pass-specific dump output.  For example,
8500     '-fdump-tree-vect=foo.v' dumps tree vectorization pass output into
8501     the given file name 'foo.v'.  If the file name is not provided, the
8502     default file name is based on the source file and pass number.
8503     Note that one could also use special file names 'stdout' and
8504     'stderr' for dumping to standard output and standard error
8505     respectively.
8506
8507'alt_stream'
8508     This steam is used for printing optimization specific output in
8509     response to the '-fopt-info'.  Again a file name can be given.  If
8510     the file name is not given, it defaults to 'stderr'.
8511
8512
8513File: gccint.info,  Node: Dump output verbosity,  Next: Dump types,  Prev: Dump files and streams,  Up: Optimization info
8514
85159.7.4 Dump output verbosity
8516---------------------------
8517
8518The dump verbosity has the following options
8519
8520'optimized'
8521     Print information when an optimization is successfully applied.  It
8522     is up to a pass to decide which information is relevant.  For
8523     example, the vectorizer passes print the source location of loops
8524     which got successfully vectorized.
8525
8526'missed'
8527     Print information about missed optimizations.  Individual passes
8528     control which information to include in the output.  For example,
8529
8530          gcc -O2 -ftree-vectorize -fopt-info-vec-missed
8531
8532     will print information about missed optimization opportunities from
8533     vectorization passes on stderr.
8534
8535'note'
8536     Print verbose information about optimizations, such as certain
8537     transformations, more detailed messages about decisions etc.
8538
8539'all'
8540     Print detailed optimization information.  This includes OPTIMIZED,
8541     MISSED, and NOTE.
8542
8543
8544File: gccint.info,  Node: Dump types,  Next: Dump examples,  Prev: Dump output verbosity,  Up: Optimization info
8545
85469.7.5 Dump types
8547----------------
8548
8549'dump_printf'
8550
8551     This is a generic method for doing formatted output.  It takes an
8552     additional argument 'dump_kind' which signifies the type of dump.
8553     This method outputs information only when the dumps are enabled for
8554     this particular 'dump_kind'.  Note that the caller doesn't need to
8555     know if the particular dump is enabled or not, or even the file
8556     name.  The caller only needs to decide which dump output
8557     information is relevant, and under what conditions.  This
8558     determines the associated flags.
8559
8560     Consider the following example from 'loop-unroll.c' where an
8561     informative message about a loop (along with its location) is
8562     printed when any of the following flags is enabled
8563
8564        - optimization messages
8565        - RTL dumps
8566        - detailed dumps
8567
8568          int report_flags = MSG_OPTIMIZED_LOCATIONS | TDF_RTL | TDF_DETAILS;
8569          dump_printf_loc (report_flags, insn,
8570                           "loop turned into non-loop; it never loops.\n");
8571
8572'dump_basic_block'
8573     Output basic block.
8574'dump_generic_expr'
8575     Output generic expression.
8576'dump_gimple_stmt'
8577     Output gimple statement.
8578
8579     Note that the above methods also have variants prefixed with
8580     '_loc', such as 'dump_printf_loc', which are similar except they
8581     also output the source location information.  The '_loc' variants
8582     take a 'const dump_location_t &'.  This class can be constructed
8583     from a 'gimple *' or from a 'rtx_insn *', and so callers can pass a
8584     'gimple *' or a 'rtx_insn *' as the '_loc' argument.  The
8585     'dump_location_t' constructor will extract the source location from
8586     the statement or instruction, along with the profile count, and the
8587     location in GCC's own source code (or the plugin) from which the
8588     dump call was emitted.  Only the source location is currently used.
8589     There is also a 'dump_user_location_t' class, capturing the source
8590     location and profile count, but not the dump emission location, so
8591     that locations in the user's code can be passed around.  This can
8592     also be constructed from a 'gimple *' and from a 'rtx_insn *', and
8593     it too can be passed as the '_loc' argument.
8594
8595
8596File: gccint.info,  Node: Dump examples,  Prev: Dump types,  Up: Optimization info
8597
85989.7.6 Dump examples
8599-------------------
8600
8601     gcc -O3 -fopt-info-missed=missed.all
8602
8603 outputs missed optimization report from all the passes into
8604'missed.all'.
8605
8606 As another example,
8607     gcc -O3 -fopt-info-inline-optimized-missed=inline.txt
8608
8609 will output information about missed optimizations as well as optimized
8610locations from all the inlining passes into 'inline.txt'.
8611
8612 If the FILENAME is provided, then the dumps from all the applicable
8613optimizations are concatenated into the 'filename'.  Otherwise the dump
8614is output onto 'stderr'.  If OPTIONS is omitted, it defaults to
8615'optimized-optall', which means dump all information about successful
8616optimizations from all the passes.  In the following example, the
8617optimization information is output on to 'stderr'.
8618
8619     gcc -O3 -fopt-info
8620
8621 Note that '-fopt-info-vec-missed' behaves the same as
8622'-fopt-info-missed-vec'.  The order of the optimization group names and
8623message types listed after '-fopt-info' does not matter.
8624
8625 As another example, consider
8626
8627     gcc -fopt-info-vec-missed=vec.miss -fopt-info-loop-optimized=loop.opt
8628
8629 Here the two output file names 'vec.miss' and 'loop.opt' are in
8630conflict since only one output file is allowed.  In this case, only the
8631first option takes effect and the subsequent options are ignored.  Thus
8632only the 'vec.miss' is produced which containts dumps from the
8633vectorizer about missed opportunities.
8634
8635
8636File: gccint.info,  Node: poly_int,  Next: GENERIC,  Prev: Passes,  Up: Top
8637
863810 Sizes and offsets as runtime invariants
8639******************************************
8640
8641GCC allows the size of a hardware register to be a runtime invariant
8642rather than a compile-time constant.  This in turn means that various
8643sizes and offsets must also be runtime invariants rather than
8644compile-time constants, such as:
8645
8646   * the size of a general 'machine_mode' (*note Machine Modes::);
8647
8648   * the size of a spill slot;
8649
8650   * the offset of something within a stack frame;
8651
8652   * the number of elements in a vector;
8653
8654   * the size and offset of a 'mem' rtx (*note Regs and Memory::); and
8655
8656   * the byte offset in a 'subreg' rtx (*note Regs and Memory::).
8657
8658 The motivating example is the Arm SVE ISA, whose vector registers can
8659be any multiple of 128 bits between 128 and 2048 inclusive.  The
8660compiler normally produces code that works for all SVE register sizes,
8661with the actual size only being known at runtime.
8662
8663 GCC's main representation of such runtime invariants is the 'poly_int'
8664class.  This chapter describes what 'poly_int' does, lists the available
8665operations, and gives some general usage guidelines.
8666
8667* Menu:
8668
8669* Overview of 'poly_int'::
8670* Consequences of using 'poly_int'::
8671* Comparisons involving 'poly_int'::
8672* Arithmetic on 'poly_int's::
8673* Alignment of 'poly_int's::
8674* Computing bounds on 'poly_int's::
8675* Converting 'poly_int's::
8676* Miscellaneous 'poly_int' routines::
8677* Guidelines for using 'poly_int'::
8678
8679
8680File: gccint.info,  Node: Overview of 'poly_int',  Next: Consequences of using 'poly_int',  Up: poly_int
8681
868210.1 Overview of 'poly_int'
8683===========================
8684
8685We define indeterminates X1, ..., XN whose values are only known at
8686runtime and use polynomials of the form:
8687
8688     C0 + C1 * X1 + ... + CN * XN
8689
8690 to represent a size or offset whose value might depend on some of these
8691indeterminates.  The coefficients C0, ..., CN are always known at
8692compile time, with the C0 term being the "constant" part that does not
8693depend on any runtime value.
8694
8695 GCC uses the 'poly_int' class to represent these coefficients.  The
8696class has two template parameters: the first specifies the number of
8697coefficients (N + 1) and the second specifies the type of the
8698coefficients.  For example, 'poly_int<2, unsigned short>' represents a
8699polynomial with two coefficients (and thus one indeterminate), with each
8700coefficient having type 'unsigned short'.  When N is 0, the class
8701degenerates to a single compile-time constant C0.
8702
8703 The number of coefficients needed for compilation is a fixed property
8704of each target and is specified by the configuration macro
8705'NUM_POLY_INT_COEFFS'.  The default value is 1, since most targets do
8706not have such runtime invariants.  Targets that need a different value
8707should '#define' the macro in their 'CPU-modes.def' file.  *Note Back
8708End::.
8709
8710 'poly_int' makes the simplifying requirement that each indeterminate
8711must be a nonnegative integer.  An indeterminate value of 0 should
8712usually represent the minimum possible runtime value, with C0 specifying
8713the value in that case.
8714
8715 For example, when targetting the Arm SVE ISA, the single indeterminate
8716represents the number of 128-bit blocks in a vector _beyond the minimum
8717length of 128 bits_.  Thus the number of 64-bit doublewords in a vector
8718is 2 + 2 * X1.  If an aggregate has a single SVE vector and 16
8719additional bytes, its total size is 32 + 16 * X1 bytes.
8720
8721 The header file 'poly-int-types.h' provides typedefs for the most
8722common forms of 'poly_int', all having 'NUM_POLY_INT_COEFFS'
8723coefficients:
8724
8725'poly_uint16'
8726     a 'poly_int' with 'unsigned short' coefficients.
8727
8728'poly_int64'
8729     a 'poly_int' with 'HOST_WIDE_INT' coefficients.
8730
8731'poly_uint64'
8732     a 'poly_int' with 'unsigned HOST_WIDE_INT' coefficients.
8733
8734'poly_offset_int'
8735     a 'poly_int' with 'offset_int' coefficients.
8736
8737'poly_wide_int'
8738     a 'poly_int' with 'wide_int' coefficients.
8739
8740'poly_widest_int'
8741     a 'poly_int' with 'widest_int' coefficients.
8742
8743 Since the main purpose of 'poly_int' is to represent sizes and offsets,
8744the last two typedefs are only rarely used.
8745
8746
8747File: gccint.info,  Node: Consequences of using 'poly_int',  Next: Comparisons involving 'poly_int',  Prev: Overview of 'poly_int',  Up: poly_int
8748
874910.2 Consequences of using 'poly_int'
8750=====================================
8751
8752The two main consequences of using polynomial sizes and offsets are
8753that:
8754
8755   * there is no total ordering between the values at compile time, and
8756
8757   * some operations might yield results that cannot be expressed as a
8758     'poly_int'.
8759
8760 For example, if X is a runtime invariant, we cannot tell at compile
8761time whether:
8762
8763     3 + 4X <= 1 + 5X
8764
8765 since the condition is false when X <= 1 and true when X >= 2.
8766
8767 Similarly, 'poly_int' cannot represent the result of:
8768
8769     (3 + 4X) * (1 + 5X)
8770
8771 since it cannot (and in practice does not need to) store powers greater
8772than one.  It also cannot represent the result of:
8773
8774     (3 + 4X) / (1 + 5X)
8775
8776 The following sections describe how we deal with these restrictions.
8777
8778 As described earlier, a 'poly_int<1, T>' has no indeterminates and so
8779degenerates to a compile-time constant of type T.  It would be possible
8780in that case to do all normal arithmetic on the T, and to compare the T
8781using the normal C++ operators.  We deliberately prevent
8782target-independent code from doing this, since the compiler needs to
8783support other 'poly_int<N, T>' as well, regardless of the current
8784target's 'NUM_POLY_INT_COEFFS'.
8785
8786 However, it would be very artificial to force target-specific code to
8787follow these restrictions if the target has no runtime indeterminates.
8788There is therefore an implicit conversion from 'poly_int<1, T>' to T
8789when compiling target-specific translation units.
8790
8791
8792File: gccint.info,  Node: Comparisons involving 'poly_int',  Next: Arithmetic on 'poly_int's,  Prev: Consequences of using 'poly_int',  Up: poly_int
8793
879410.3 Comparisons involving 'poly_int'
8795=====================================
8796
8797In general we need to compare sizes and offsets in two situations: those
8798in which the values need to be ordered, and those in which the values
8799can be unordered.  More loosely, the distinction is often between values
8800that have a definite link (usually because they refer to the same
8801underlying register or memory location) and values that have no definite
8802link.  An example of the former is the relationship between the inner
8803and outer sizes of a subreg, where we must know at compile time whether
8804the subreg is paradoxical, partial, or complete.  An example of the
8805latter is alias analysis: we might want to check whether two arbitrary
8806memory references overlap.
8807
8808 Referring back to the examples in the previous section, it makes sense
8809to ask whether a memory reference of size '3 + 4X' overlaps one of size
8810'1 + 5X', but it does not make sense to have a subreg in which the outer
8811mode has '3 + 4X' bytes and the inner mode has '1 + 5X' bytes (or vice
8812versa).  Such subregs are always invalid and should trigger an internal
8813compiler error if formed.
8814
8815 The underlying operators are the same in both cases, but the
8816distinction affects how they are used.
8817
8818* Menu:
8819
8820* Comparison functions for 'poly_int'::
8821* Properties of the 'poly_int' comparisons::
8822* Comparing potentially-unordered 'poly_int's::
8823* Comparing ordered 'poly_int's::
8824* Checking for a 'poly_int' marker value::
8825* Range checks on 'poly_int's::
8826* Sorting 'poly_int's::
8827
8828
8829File: gccint.info,  Node: Comparison functions for 'poly_int',  Next: Properties of the 'poly_int' comparisons,  Up: Comparisons involving 'poly_int'
8830
883110.3.1 Comparison functions for 'poly_int'
8832------------------------------------------
8833
8834'poly_int' provides the following routines for checking whether a
8835particular condition "may be" (might be) true:
8836
8837     maybe_lt maybe_le maybe_eq maybe_ge maybe_gt
8838                       maybe_ne
8839
8840 The functions have their natural meaning:
8841
8842'maybe_lt(A, B)'
8843     Return true if A might be less than B.
8844
8845'maybe_le(A, B)'
8846     Return true if A might be less than or equal to B.
8847
8848'maybe_eq(A, B)'
8849     Return true if A might be equal to B.
8850
8851'maybe_ne(A, B)'
8852     Return true if A might not be equal to B.
8853
8854'maybe_ge(A, B)'
8855     Return true if A might be greater than or equal to B.
8856
8857'maybe_gt(A, B)'
8858     Return true if A might be greater than B.
8859
8860 For readability, 'poly_int' also provides "known" inverses of these
8861functions:
8862
8863     known_lt (A, B) == !maybe_ge (A, B)
8864     known_le (A, B) == !maybe_gt (A, B)
8865     known_eq (A, B) == !maybe_ne (A, B)
8866     known_ge (A, B) == !maybe_lt (A, B)
8867     known_gt (A, B) == !maybe_le (A, B)
8868     known_ne (A, B) == !maybe_eq (A, B)
8869
8870
8871File: gccint.info,  Node: Properties of the 'poly_int' comparisons,  Next: Comparing potentially-unordered 'poly_int's,  Prev: Comparison functions for 'poly_int',  Up: Comparisons involving 'poly_int'
8872
887310.3.2 Properties of the 'poly_int' comparisons
8874-----------------------------------------------
8875
8876All "maybe" relations except 'maybe_ne' are transitive, so for example:
8877
8878     maybe_lt (A, B) && maybe_lt (B, C) implies maybe_lt (A, C)
8879
8880 for all A, B and C.  'maybe_lt', 'maybe_gt' and 'maybe_ne' are
8881irreflexive, so for example:
8882
8883     !maybe_lt (A, A)
8884
8885 is true for all A.  'maybe_le', 'maybe_eq' and 'maybe_ge' are
8886reflexive, so for example:
8887
8888     maybe_le (A, A)
8889
8890 is true for all A.  'maybe_eq' and 'maybe_ne' are symmetric, so:
8891
8892     maybe_eq (A, B) == maybe_eq (B, A)
8893     maybe_ne (A, B) == maybe_ne (B, A)
8894
8895 for all A and B.  In addition:
8896
8897     maybe_le (A, B) == maybe_lt (A, B) || maybe_eq (A, B)
8898     maybe_ge (A, B) == maybe_gt (A, B) || maybe_eq (A, B)
8899     maybe_lt (A, B) == maybe_gt (B, A)
8900     maybe_le (A, B) == maybe_ge (B, A)
8901
8902 However:
8903
8904     maybe_le (A, B) && maybe_le (B, A) does not imply !maybe_ne (A, B) [== known_eq (A, B)]
8905     maybe_ge (A, B) && maybe_ge (B, A) does not imply !maybe_ne (A, B) [== known_eq (A, B)]
8906
8907 One example is again 'A == 3 + 4X' and 'B == 1 + 5X', where 'maybe_le
8908(A, B)', 'maybe_ge (A, B)' and 'maybe_ne (A, B)' all hold.  'maybe_le'
8909and 'maybe_ge' are therefore not antisymetric and do not form a partial
8910order.
8911
8912 From the above, it follows that:
8913
8914   * All "known" relations except 'known_ne' are transitive.
8915
8916   * 'known_lt', 'known_ne' and 'known_gt' are irreflexive.
8917
8918   * 'known_le', 'known_eq' and 'known_ge' are reflexive.
8919
8920 Also:
8921
8922     known_lt (A, B) == known_gt (B, A)
8923     known_le (A, B) == known_ge (B, A)
8924     known_lt (A, B) implies !known_lt (B, A)  [asymmetry]
8925     known_gt (A, B) implies !known_gt (B, A)
8926     known_le (A, B) && known_le (B, A) == known_eq (A, B) [== !maybe_ne (A, B)]
8927     known_ge (A, B) && known_ge (B, A) == known_eq (A, B) [== !maybe_ne (A, B)]
8928
8929 'known_le' and 'known_ge' are therefore antisymmetric and are partial
8930orders.  However:
8931
8932     known_le (A, B) does not imply known_lt (A, B) || known_eq (A, B)
8933     known_ge (A, B) does not imply known_gt (A, B) || known_eq (A, B)
8934
8935 For example, 'known_le (4, 4 + 4X)' holds because the runtime
8936indeterminate X is a nonnegative integer, but neither 'known_lt (4, 4 +
89374X)' nor 'known_eq (4, 4 + 4X)' hold.
8938
8939
8940File: gccint.info,  Node: Comparing potentially-unordered 'poly_int's,  Next: Comparing ordered 'poly_int's,  Prev: Properties of the 'poly_int' comparisons,  Up: Comparisons involving 'poly_int'
8941
894210.3.3 Comparing potentially-unordered 'poly_int's
8943--------------------------------------------------
8944
8945In cases where there is no definite link between two 'poly_int's, we can
8946usually make a conservatively-correct assumption.  For example, the
8947conservative assumption for alias analysis is that two references
8948_might_ alias.
8949
8950 One way of checking whether [BEGIN1, END1) might overlap [BEGIN2, END2)
8951using the 'poly_int' comparisons is:
8952
8953     maybe_gt (END1, BEGIN2) && maybe_gt (END2, BEGIN1)
8954
8955 and another (equivalent) way is:
8956
8957     !(known_le (END1, BEGIN2) || known_le (END2, BEGIN1))
8958
8959 However, in this particular example, it is better to use the range
8960helper functions instead.  *Note Range checks on 'poly_int's::.
8961
8962
8963File: gccint.info,  Node: Comparing ordered 'poly_int's,  Next: Checking for a 'poly_int' marker value,  Prev: Comparing potentially-unordered 'poly_int's,  Up: Comparisons involving 'poly_int'
8964
896510.3.4 Comparing ordered 'poly_int's
8966------------------------------------
8967
8968In cases where there is a definite link between two 'poly_int's, such as
8969the outer and inner sizes of subregs, we usually require the sizes to be
8970ordered by the 'known_le' partial order.  'poly_int' provides the
8971following utility functions for ordered values:
8972
8973'ordered_p (A, B)'
8974     Return true if A and B are ordered by the 'known_le' partial order.
8975
8976'ordered_min (A, B)'
8977     Assert that A and B are ordered by 'known_le' and return the
8978     minimum of the two.  When using this function, please add a comment
8979     explaining why the values are known to be ordered.
8980
8981'ordered_max (A, B)'
8982     Assert that A and B are ordered by 'known_le' and return the
8983     maximum of the two.  When using this function, please add a comment
8984     explaining why the values are known to be ordered.
8985
8986 For example, if a subreg has an outer mode of size OUTER and an inner
8987mode of size INNER:
8988
8989   * the subreg is complete if known_eq (INNER, OUTER)
8990
8991   * otherwise, the subreg is paradoxical if known_le (INNER, OUTER)
8992
8993   * otherwise, the subreg is partial if known_le (OUTER, INNER)
8994
8995   * otherwise, the subreg is ill-formed
8996
8997 Thus the subreg is only valid if 'ordered_p (OUTER, INNER)' is true.
8998If this condition is already known to be true then:
8999
9000   * the subreg is complete if known_eq (INNER, OUTER)
9001
9002   * the subreg is paradoxical if maybe_lt (INNER, OUTER)
9003
9004   * the subreg is partial if maybe_lt (OUTER, INNER)
9005
9006 with the three conditions being mutually exclusive.
9007
9008 Code that checks whether a subreg is valid would therefore generally
9009check whether 'ordered_p' holds (in addition to whatever other checks
9010are required for subreg validity).  Code that is dealing with existing
9011subregs can assert that 'ordered_p' holds and use either of the
9012classifications above.
9013
9014
9015File: gccint.info,  Node: Checking for a 'poly_int' marker value,  Next: Range checks on 'poly_int's,  Prev: Comparing ordered 'poly_int's,  Up: Comparisons involving 'poly_int'
9016
901710.3.5 Checking for a 'poly_int' marker value
9018---------------------------------------------
9019
9020It is sometimes useful to have a special "marker value" that is not
9021meant to be taken literally.  For example, some code uses a size of -1
9022to represent an unknown size, rather than having to carry around a
9023separate boolean to say whether the size is known.
9024
9025 The best way of checking whether something is a marker value is
9026'known_eq'.  Conversely the best way of checking whether something is
9027_not_ a marker value is 'maybe_ne'.
9028
9029 Thus in the size example just mentioned, 'known_eq (size, -1)' would
9030check for an unknown size and 'maybe_ne (size, -1)' would check for a
9031known size.
9032
9033
9034File: gccint.info,  Node: Range checks on 'poly_int's,  Next: Sorting 'poly_int's,  Prev: Checking for a 'poly_int' marker value,  Up: Comparisons involving 'poly_int'
9035
903610.3.6 Range checks on 'poly_int's
9037----------------------------------
9038
9039As well as the core comparisons (*note Comparison functions for
9040'poly_int'::), 'poly_int' provides utilities for various kinds of range
9041check.  In each case the range is represented by a start position and a
9042size rather than a start position and an end position; this is because
9043the former is used much more often than the latter in GCC.  Also, the
9044sizes can be -1 (or all ones for unsigned sizes) to indicate a range
9045with a known start position but an unknown size.  All other sizes must
9046be nonnegative.  A range of size 0 does not contain anything or overlap
9047anything.
9048
9049'known_size_p (SIZE)'
9050     Return true if SIZE represents a known range size, false if it is
9051     -1 or all ones (for signed and unsigned types respectively).
9052
9053'ranges_maybe_overlap_p (POS1, SIZE1, POS2, SIZE2)'
9054     Return true if the range described by POS1 and SIZE1 _might_
9055     overlap the range described by POS2 and SIZE2 (in other words,
9056     return true if we cannot prove that the ranges are disjoint).
9057
9058'ranges_known_overlap_p (POS1, SIZE1, POS2, SIZE2)'
9059     Return true if the range described by POS1 and SIZE1 is known to
9060     overlap the range described by POS2 and SIZE2.
9061
9062'known_subrange_p (POS1, SIZE1, POS2, SIZE2)'
9063     Return true if the range described by POS1 and SIZE1 is known to be
9064     contained in the range described by POS2 and SIZE2.
9065
9066'maybe_in_range_p (VALUE, POS, SIZE)'
9067     Return true if VALUE _might_ be in the range described by POS and
9068     SIZE (in other words, return true if we cannot prove that VALUE is
9069     outside that range).
9070
9071'known_in_range_p (VALUE, POS, SIZE)'
9072     Return true if VALUE is known to be in the range described by POS
9073     and SIZE.
9074
9075'endpoint_representable_p (POS, SIZE)'
9076     Return true if the range described by POS and SIZE is open-ended or
9077     if the endpoint (POS + SIZE) is representable in the same type as
9078     POS and SIZE.  The function returns false if adding SIZE to POS
9079     makes conceptual sense but could overflow.
9080
9081 There is also a 'poly_int' version of the 'IN_RANGE_P' macro:
9082
9083'coeffs_in_range_p (X, LOWER, UPPER)'
9084     Return true if every coefficient of X is in the inclusive range
9085     [LOWER, UPPER].  This function can be useful when testing whether
9086     an operation would cause the values of coefficients to overflow.
9087
9088     Note that the function does not indicate whether X itself is in the
9089     given range.  X can be either a constant or a 'poly_int'.
9090
9091
9092File: gccint.info,  Node: Sorting 'poly_int's,  Prev: Range checks on 'poly_int's,  Up: Comparisons involving 'poly_int'
9093
909410.3.7 Sorting 'poly_int's
9095--------------------------
9096
9097'poly_int' provides the following routine for sorting:
9098
9099'compare_sizes_for_sort (A, B)'
9100     Compare A and B in reverse lexicographical order (that is, compare
9101     the highest-indexed coefficients first).  This can be useful when
9102     sorting data structures, since it has the effect of separating
9103     constant and non-constant values.  If all values are nonnegative,
9104     the constant values come first.
9105
9106     Note that the values do not necessarily end up in numerical order.
9107     For example, '1 + 1X' would come after '100' in the sort order, but
9108     may well be less than '100' at run time.
9109
9110
9111File: gccint.info,  Node: Arithmetic on 'poly_int's,  Next: Alignment of 'poly_int's,  Prev: Comparisons involving 'poly_int',  Up: poly_int
9112
911310.4 Arithmetic on 'poly_int's
9114==============================
9115
9116Addition, subtraction, negation and bit inversion all work normally for
9117'poly_int's.  Multiplication by a constant multiplier and left shifting
9118by a constant shift amount also work normally.  General multiplication
9119of two 'poly_int's is not supported and is not useful in practice.
9120
9121 Other operations are only conditionally supported: the operation might
9122succeed or might fail, depending on the inputs.
9123
9124 This section describes both types of operation.
9125
9126* Menu:
9127
9128* Using 'poly_int' with C++ arithmetic operators::
9129* 'wi' arithmetic on 'poly_int's::
9130* Division of 'poly_int's::
9131* Other 'poly_int' arithmetic::
9132
9133
9134File: gccint.info,  Node: Using 'poly_int' with C++ arithmetic operators,  Next: 'wi' arithmetic on 'poly_int's,  Up: Arithmetic on 'poly_int's
9135
913610.4.1 Using 'poly_int' with C++ arithmetic operators
9137-----------------------------------------------------
9138
9139The following C++ expressions are supported, where P1 and P2 are
9140'poly_int's and where C1 and C2 are scalars:
9141
9142     -P1
9143     ~P1
9144
9145     P1 + P2
9146     P1 + C2
9147     C1 + P2
9148
9149     P1 - P2
9150     P1 - C2
9151     C1 - P2
9152
9153     C1 * P2
9154     P1 * C2
9155
9156     P1 << C2
9157
9158     P1 += P2
9159     P1 += C2
9160
9161     P1 -= P2
9162     P1 -= C2
9163
9164     P1 *= C2
9165     P1 <<= C2
9166
9167 These arithmetic operations handle integer ranks in a similar way to
9168C++.  The main difference is that every coefficient narrower than
9169'HOST_WIDE_INT' promotes to 'HOST_WIDE_INT', whereas in C++ everything
9170narrower than 'int' promotes to 'int'.  For example:
9171
9172     poly_uint16     + int          -> poly_int64
9173     unsigned int    + poly_uint16  -> poly_int64
9174     poly_int64      + int          -> poly_int64
9175     poly_int32      + poly_uint64  -> poly_uint64
9176     uint64          + poly_int64   -> poly_uint64
9177     poly_offset_int + int32        -> poly_offset_int
9178     offset_int      + poly_uint16  -> poly_offset_int
9179
9180 In the first two examples, both coefficients are narrower than
9181'HOST_WIDE_INT', so the result has coefficients of type 'HOST_WIDE_INT'.
9182In the other examples, the coefficient with the highest rank "wins".
9183
9184 If one of the operands is 'wide_int' or 'poly_wide_int', the rules are
9185the same as for 'wide_int' arithmetic.
9186
9187
9188File: gccint.info,  Node: 'wi' arithmetic on 'poly_int's,  Next: Division of 'poly_int's,  Prev: Using 'poly_int' with C++ arithmetic operators,  Up: Arithmetic on 'poly_int's
9189
919010.4.2 'wi' arithmetic on 'poly_int's
9191-------------------------------------
9192
9193As well as the C++ operators, 'poly_int' supports the following 'wi'
9194routines:
9195
9196     wi::neg (P1, &OVERFLOW)
9197
9198     wi::add (P1, P2)
9199     wi::add (P1, C2)
9200     wi::add (C1, P1)
9201     wi::add (P1, P2, SIGN, &OVERFLOW)
9202
9203     wi::sub (P1, P2)
9204     wi::sub (P1, C2)
9205     wi::sub (C1, P1)
9206     wi::sub (P1, P2, SIGN, &OVERFLOW)
9207
9208     wi::mul (P1, C2)
9209     wi::mul (C1, P1)
9210     wi::mul (P1, C2, SIGN, &OVERFLOW)
9211
9212     wi::lshift (P1, C2)
9213
9214 These routines just check whether overflow occurs on any individual
9215coefficient; it is not possible to know at compile time whether the
9216final runtime value would overflow.
9217
9218
9219File: gccint.info,  Node: Division of 'poly_int's,  Next: Other 'poly_int' arithmetic,  Prev: 'wi' arithmetic on 'poly_int's,  Up: Arithmetic on 'poly_int's
9220
922110.4.3 Division of 'poly_int's
9222------------------------------
9223
9224Division of 'poly_int's is possible for certain inputs.  The functions
9225for division return true if the operation is possible and in most cases
9226return the results by pointer.  The routines are:
9227
9228'multiple_p (A, B)'
9229'multiple_p (A, B, &QUOTIENT)'
9230     Return true if A is an exact multiple of B, storing the result in
9231     QUOTIENT if so.  There are overloads for various combinations of
9232     polynomial and constant A, B and QUOTIENT.
9233
9234'constant_multiple_p (A, B)'
9235'constant_multiple_p (A, B, &QUOTIENT)'
9236     Like 'multiple_p', but also test whether the multiple is a
9237     compile-time constant.
9238
9239'can_div_trunc_p (A, B, &QUOTIENT)'
9240'can_div_trunc_p (A, B, &QUOTIENT, &REMAINDER)'
9241     Return true if we can calculate 'trunc (A / B)' at compile time,
9242     storing the result in QUOTIENT and REMAINDER if so.
9243
9244'can_div_away_from_zero_p (A, B, &QUOTIENT)'
9245     Return true if we can calculate 'A / B' at compile time, rounding
9246     away from zero.  Store the result in QUOTIENT if so.
9247
9248     Note that this is true if and only if 'can_div_trunc_p' is true.
9249     The only difference is in the rounding of the result.
9250
9251 There is also an asserting form of division:
9252
9253'exact_div (A, B)'
9254     Assert that A is a multiple of B and return 'A / B'.  The result is
9255     a 'poly_int' if A is a 'poly_int'.
9256
9257
9258File: gccint.info,  Node: Other 'poly_int' arithmetic,  Prev: Division of 'poly_int's,  Up: Arithmetic on 'poly_int's
9259
926010.4.4 Other 'poly_int' arithmetic
9261----------------------------------
9262
9263There are tentative routines for other operations besides division:
9264
9265'can_ior_p (A, B, &RESULT)'
9266     Return true if we can calculate 'A | B' at compile time, storing
9267     the result in RESULT if so.
9268
9269 Also, ANDs with a value '(1 << Y) - 1' or its inverse can be treated as
9270alignment operations.  *Note Alignment of 'poly_int's::.
9271
9272 In addition, the following miscellaneous routines are available:
9273
9274'coeff_gcd (A)'
9275     Return the greatest common divisor of all nonzero coefficients in
9276     A, or zero if A is known to be zero.
9277
9278'common_multiple (A, B)'
9279     Return a value that is a multiple of both A and B, where one value
9280     is a 'poly_int' and the other is a scalar.  The result will be the
9281     least common multiple for some indeterminate values but not
9282     necessarily for all.
9283
9284'force_common_multiple (A, B)'
9285     Return a value that is a multiple of both 'poly_int' A and
9286     'poly_int' B, asserting that such a value exists.  The result will
9287     be the least common multiple for some indeterminate values but not
9288     necessarily for all.
9289
9290     When using this routine, please add a comment explaining why the
9291     assertion is known to hold.
9292
9293 Please add any other operations that you find to be useful.
9294
9295
9296File: gccint.info,  Node: Alignment of 'poly_int's,  Next: Computing bounds on 'poly_int's,  Prev: Arithmetic on 'poly_int's,  Up: poly_int
9297
929810.5 Alignment of 'poly_int's
9299=============================
9300
9301'poly_int' provides various routines for aligning values and for
9302querying misalignments.  In each case the alignment must be a power of
93032.
9304
9305'can_align_p (VALUE, ALIGN)'
9306     Return true if we can align VALUE up or down to the nearest
9307     multiple of ALIGN at compile time.  The answer is the same for both
9308     directions.
9309
9310'can_align_down (VALUE, ALIGN, &ALIGNED)'
9311     Return true if 'can_align_p'; if so, set ALIGNED to the greatest
9312     aligned value that is less than or equal to VALUE.
9313
9314'can_align_up (VALUE, ALIGN, &ALIGNED)'
9315     Return true if 'can_align_p'; if so, set ALIGNED to the lowest
9316     aligned value that is greater than or equal to VALUE.
9317
9318'known_equal_after_align_down (A, B, ALIGN)'
9319     Return true if we can align A and B down to the nearest ALIGN
9320     boundary at compile time and if the two results are equal.
9321
9322'known_equal_after_align_up (A, B, ALIGN)'
9323     Return true if we can align A and B up to the nearest ALIGN
9324     boundary at compile time and if the two results are equal.
9325
9326'aligned_lower_bound (VALUE, ALIGN)'
9327     Return a result that is no greater than VALUE and that is aligned
9328     to ALIGN.  The result will the closest aligned value for some
9329     indeterminate values but not necessarily for all.
9330
9331     For example, suppose we are allocating an object of SIZE bytes in a
9332     downward-growing stack whose current limit is given by LIMIT.  If
9333     the object requires ALIGN bytes of alignment, the new stack limit
9334     is given by:
9335
9336          aligned_lower_bound (LIMIT - SIZE, ALIGN)
9337
9338'aligned_upper_bound (VALUE, ALIGN)'
9339     Likewise return a result that is no less than VALUE and that is
9340     aligned to ALIGN.  This is the routine that would be used for
9341     upward-growing stacks in the scenario just described.
9342
9343'known_misalignment (VALUE, ALIGN, &MISALIGN)'
9344     Return true if we can calculate the misalignment of VALUE with
9345     respect to ALIGN at compile time, storing the result in MISALIGN if
9346     so.
9347
9348'known_alignment (VALUE)'
9349     Return the minimum alignment that VALUE is known to have (in other
9350     words, the largest alignment that can be guaranteed whatever the
9351     values of the indeterminates turn out to be).  Return 0 if VALUE is
9352     known to be 0.
9353
9354'force_align_down (VALUE, ALIGN)'
9355     Assert that VALUE can be aligned down to ALIGN at compile time and
9356     return the result.  When using this routine, please add a comment
9357     explaining why the assertion is known to hold.
9358
9359'force_align_up (VALUE, ALIGN)'
9360     Likewise, but aligning up.
9361
9362'force_align_down_and_div (VALUE, ALIGN)'
9363     Divide the result of 'force_align_down' by ALIGN.  Again, please
9364     add a comment explaining why the assertion in 'force_align_down' is
9365     known to hold.
9366
9367'force_align_up_and_div (VALUE, ALIGN)'
9368     Likewise for 'force_align_up'.
9369
9370'force_get_misalignment (VALUE, ALIGN)'
9371     Assert that we can calculate the misalignment of VALUE with respect
9372     to ALIGN at compile time and return the misalignment.  When using
9373     this function, please add a comment explaining why the assertion is
9374     known to hold.
9375
9376
9377File: gccint.info,  Node: Computing bounds on 'poly_int's,  Next: Converting 'poly_int's,  Prev: Alignment of 'poly_int's,  Up: poly_int
9378
937910.6 Computing bounds on 'poly_int's
9380====================================
9381
9382'poly_int' also provides routines for calculating lower and upper
9383bounds:
9384
9385'constant_lower_bound (A)'
9386     Assert that A is nonnegative and return the smallest value it can
9387     have.
9388
9389'constant_lower_bound_with_limit (A, B)'
9390     Return the least value A can have, given that the context in which
9391     A appears guarantees that the answer is no less than B.  In other
9392     words, the caller is asserting that A is greater than or equal to B
9393     even if 'known_ge (A, B)' doesn't hold.
9394
9395'constant_upper_bound_with_limit (A, B)'
9396     Return the greatest value A can have, given that the context in
9397     which A appears guarantees that the answer is no greater than B.
9398     In other words, the caller is asserting that A is less than or
9399     equal to B even if 'known_le (A, B)' doesn't hold.
9400
9401'lower_bound (A, B)'
9402     Return a value that is always less than or equal to both A and B.
9403     It will be the greatest such value for some indeterminate values
9404     but necessarily for all.
9405
9406'upper_bound (A, B)'
9407     Return a value that is always greater than or equal to both A and
9408     B.  It will be the least such value for some indeterminate values
9409     but necessarily for all.
9410
9411
9412File: gccint.info,  Node: Converting 'poly_int's,  Next: Miscellaneous 'poly_int' routines,  Prev: Computing bounds on 'poly_int's,  Up: poly_int
9413
941410.7 Converting 'poly_int's
9415===========================
9416
9417A 'poly_int<N, T>' can be constructed from up to N individual T
9418coefficients, with the remaining coefficients being implicitly zero.  In
9419particular, this means that every 'poly_int<N, T>' can be constructed
9420from a single scalar T, or something compatible with T.
9421
9422 Also, a 'poly_int<N, T>' can be constructed from a 'poly_int<N, U>' if
9423T can be constructed from U.
9424
9425 The following functions provide other forms of conversion, or test
9426whether such a conversion would succeed.
9427
9428'VALUE.is_constant ()'
9429     Return true if 'poly_int' VALUE is a compile-time constant.
9430
9431'VALUE.is_constant (&C1)'
9432     Return true if 'poly_int' VALUE is a compile-time constant, storing
9433     it in C1 if so.  C1 must be able to hold all constant values of
9434     VALUE without loss of precision.
9435
9436'VALUE.to_constant ()'
9437     Assert that VALUE is a compile-time constant and return its value.
9438     When using this function, please add a comment explaining why the
9439     condition is known to hold (for example, because an earlier phase
9440     of analysis rejected non-constants).
9441
9442'VALUE.to_shwi (&P2)'
9443     Return true if 'poly_int<N, T>' VALUE can be represented without
9444     loss of precision as a 'poly_int<N, 'HOST_WIDE_INT'>', storing it
9445     in that form in P2 if so.
9446
9447'VALUE.to_uhwi (&P2)'
9448     Return true if 'poly_int<N, T>' VALUE can be represented without
9449     loss of precision as a 'poly_int<N, 'unsigned HOST_WIDE_INT'>',
9450     storing it in that form in P2 if so.
9451
9452'VALUE.force_shwi ()'
9453     Forcibly convert each coefficient of 'poly_int<N, T>' VALUE to
9454     'HOST_WIDE_INT', truncating any that are out of range.  Return the
9455     result as a 'poly_int<N, 'HOST_WIDE_INT'>'.
9456
9457'VALUE.force_uhwi ()'
9458     Forcibly convert each coefficient of 'poly_int<N, T>' VALUE to
9459     'unsigned HOST_WIDE_INT', truncating any that are out of range.
9460     Return the result as a 'poly_int<N, 'unsigned HOST_WIDE_INT'>'.
9461
9462'wi::shwi (VALUE, PRECISION)'
9463     Return a 'poly_int' with the same value as VALUE, but with the
9464     coefficients converted from 'HOST_WIDE_INT' to 'wide_int'.
9465     PRECISION specifies the precision of the 'wide_int' cofficients; if
9466     this is wider than a 'HOST_WIDE_INT', the coefficients of VALUE
9467     will be sign-extended to fit.
9468
9469'wi::uhwi (VALUE, PRECISION)'
9470     Like 'wi::shwi', except that VALUE has coefficients of type
9471     'unsigned HOST_WIDE_INT'.  If PRECISION is wider than a
9472     'HOST_WIDE_INT', the coefficients of VALUE will be zero-extended to
9473     fit.
9474
9475'wi::sext (VALUE, PRECISION)'
9476     Return a 'poly_int' of the same type as VALUE, sign-extending every
9477     coefficient from the low PRECISION bits.  This in effect applies
9478     'wi::sext' to each coefficient individually.
9479
9480'wi::zext (VALUE, PRECISION)'
9481     Like 'wi::sext', but for zero extension.
9482
9483'poly_wide_int::from (VALUE, PRECISION, SIGN)'
9484     Convert VALUE to a 'poly_wide_int' in which each coefficient has
9485     PRECISION bits.  Extend the coefficients according to SIGN if the
9486     coefficients have fewer bits.
9487
9488'poly_offset_int::from (VALUE, SIGN)'
9489     Convert VALUE to a 'poly_offset_int', extending its coefficients
9490     according to SIGN if they have fewer bits than 'offset_int'.
9491
9492'poly_widest_int::from (VALUE, SIGN)'
9493     Convert VALUE to a 'poly_widest_int', extending its coefficients
9494     according to SIGN if they have fewer bits than 'widest_int'.
9495
9496
9497File: gccint.info,  Node: Miscellaneous 'poly_int' routines,  Next: Guidelines for using 'poly_int',  Prev: Converting 'poly_int's,  Up: poly_int
9498
949910.8 Miscellaneous 'poly_int' routines
9500======================================
9501
9502'print_dec (VALUE, FILE, SIGN)'
9503'print_dec (VALUE, FILE)'
9504     Print VALUE to FILE as a decimal value, interpreting the
9505     coefficients according to SIGN.  The final argument is optional if
9506     VALUE has an inherent sign; for example, 'poly_int64' values print
9507     as signed by default and 'poly_uint64' values print as unsigned by
9508     default.
9509
9510     This is a simply a 'poly_int' version of a wide-int routine.
9511
9512
9513File: gccint.info,  Node: Guidelines for using 'poly_int',  Prev: Miscellaneous 'poly_int' routines,  Up: poly_int
9514
951510.9 Guidelines for using 'poly_int'
9516====================================
9517
9518One of the main design goals of 'poly_int' was to make it easy to write
9519target-independent code that handles variable-sized registers even when
9520the current target has fixed-sized registers.  There are two aspects to
9521this:
9522
9523   * The set of 'poly_int' operations should be complete enough that the
9524     question in most cases becomes "Can we do this operation on these
9525     particular 'poly_int' values?  If not, bail out" rather than "Are
9526     these 'poly_int' values constant?  If so, do the operation,
9527     otherwise bail out".
9528
9529   * If target-independent code compiles and runs correctly on a target
9530     with one value of 'NUM_POLY_INT_COEFFS', and if the code does not
9531     use asserting functions like 'to_constant', it is reasonable to
9532     assume that the code also works on targets with other values of
9533     'NUM_POLY_INT_COEFFS'.  There is no need to check this during
9534     everyday development.
9535
9536 So the general principle is: if target-independent code is dealing with
9537a 'poly_int' value, it is better to operate on it as a 'poly_int' if at
9538all possible, choosing conservatively-correct behavior if a particular
9539operation fails.  For example, the following code handles an index 'pos'
9540into a sequence of vectors that each have 'nunits' elements:
9541
9542     /* Calculate which vector contains the result, and which lane of
9543        that vector we need.  */
9544     if (!can_div_trunc_p (pos, nunits, &vec_entry, &vec_index))
9545       {
9546         if (dump_enabled_p ())
9547           dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
9548                            "Cannot determine which vector holds the"
9549                            " final result.\n");
9550         return false;
9551       }
9552
9553 However, there are some contexts in which operating on a 'poly_int' is
9554not possible or does not make sense.  One example is when handling
9555static initializers, since no current target supports the concept of a
9556variable-length static initializer.  In these situations, a reasonable
9557fallback is:
9558
9559     if (POLY_VALUE.is_constant (&CONST_VALUE))
9560       {
9561         ...
9562         /* Operate on CONST_VALUE.  */
9563         ...
9564       }
9565     else
9566       {
9567         ...
9568         /* Conservatively correct fallback.  */
9569         ...
9570       }
9571
9572 'poly_int' also provides some asserting functions like 'to_constant'.
9573Please only use these functions if there is a good theoretical reason to
9574believe that the assertion cannot fire.  For example, if some work is
9575divided into an analysis phase and an implementation phase, the analysis
9576phase might reject inputs that are not 'is_constant', in which case the
9577implementation phase can reasonably use 'to_constant' on the remaining
9578inputs.  The assertions should not be used to discover whether a
9579condition ever occurs "in the field"; in other words, they should not be
9580used to restrict code to constants at first, with the intention of only
9581implementing a 'poly_int' version if a user hits the assertion.
9582
9583 If a particular asserting function like 'to_constant' is needed more
9584than once for the same reason, it is probably worth adding a helper
9585function or macro for that situation, so that the justification only
9586needs to be given once.  For example:
9587
9588     /* Return the size of an element in a vector of size SIZE, given that
9589        the vector has NELTS elements.  The return value is in the same units
9590        as SIZE (either bits or bytes).
9591
9592        to_constant () is safe in this situation because vector elements are
9593        always constant-sized scalars.  */
9594     #define vector_element_size(SIZE, NELTS) \
9595       (exact_div (SIZE, NELTS).to_constant ())
9596
9597 Target-specific code in 'config/CPU' only needs to handle non-constant
9598'poly_int's if 'NUM_POLY_INT_COEFFS' is greater than one.  For other
9599targets, 'poly_int' degenerates to a compile-time constant and is often
9600interchangable with a normal scalar integer.  There are two main
9601exceptions:
9602
9603   * Sometimes an explicit cast to an integer type might be needed, such
9604     as to resolve ambiguities in a '?:' expression, or when passing
9605     values through '...' to things like print functions.
9606
9607   * Target macros are included in target-independent code and so do not
9608     have access to the implicit conversion to a scalar integer.  If
9609     this becomes a problem for a particular target macro, the possible
9610     solutions, in order of preference, are:
9611
9612        * Convert the target macro to a target hook (for all targets).
9613
9614        * Put the target's implementation of the target macro in its
9615          'CPU.c' file and call it from the target macro in the 'CPU.h'
9616          file.
9617
9618        * Add 'to_constant ()' calls where necessary.  The previous
9619          option is preferable because it will help with any future
9620          conversion of the macro to a hook.
9621
9622
9623File: gccint.info,  Node: GENERIC,  Next: GIMPLE,  Prev: poly_int,  Up: Top
9624
962511 GENERIC
9626**********
9627
9628The purpose of GENERIC is simply to provide a language-independent way
9629of representing an entire function in trees.  To this end, it was
9630necessary to add a few new tree codes to the back end, but almost
9631everything was already there.  If you can express it with the codes in
9632'gcc/tree.def', it's GENERIC.
9633
9634 Early on, there was a great deal of debate about how to think about
9635statements in a tree IL.  In GENERIC, a statement is defined as any
9636expression whose value, if any, is ignored.  A statement will always
9637have 'TREE_SIDE_EFFECTS' set (or it will be discarded), but a
9638non-statement expression may also have side effects.  A 'CALL_EXPR', for
9639instance.
9640
9641 It would be possible for some local optimizations to work on the
9642GENERIC form of a function; indeed, the adapted tree inliner works fine
9643on GENERIC, but the current compiler performs inlining after lowering to
9644GIMPLE (a restricted form described in the next section).  Indeed,
9645currently the frontends perform this lowering before handing off to
9646'tree_rest_of_compilation', but this seems inelegant.
9647
9648* Menu:
9649
9650* Deficiencies::                Topics net yet covered in this document.
9651* Tree overview::               All about 'tree's.
9652* Types::                       Fundamental and aggregate types.
9653* Declarations::                Type declarations and variables.
9654* Attributes::                  Declaration and type attributes.
9655* Expressions: Expression trees.            Operating on data.
9656* Statements::                  Control flow and related trees.
9657* Functions::           	Function bodies, linkage, and other aspects.
9658* Language-dependent trees::    Topics and trees specific to language front ends.
9659* C and C++ Trees::     	Trees specific to C and C++.
9660
9661
9662File: gccint.info,  Node: Deficiencies,  Next: Tree overview,  Up: GENERIC
9663
966411.1 Deficiencies
9665=================
9666
9667There are many places in which this document is incomplet and incorrekt.
9668It is, as of yet, only _preliminary_ documentation.
9669
9670
9671File: gccint.info,  Node: Tree overview,  Next: Types,  Prev: Deficiencies,  Up: GENERIC
9672
967311.2 Overview
9674=============
9675
9676The central data structure used by the internal representation is the
9677'tree'.  These nodes, while all of the C type 'tree', are of many
9678varieties.  A 'tree' is a pointer type, but the object to which it
9679points may be of a variety of types.  From this point forward, we will
9680refer to trees in ordinary type, rather than in 'this font', except when
9681talking about the actual C type 'tree'.
9682
9683 You can tell what kind of node a particular tree is by using the
9684'TREE_CODE' macro.  Many, many macros take trees as input and return
9685trees as output.  However, most macros require a certain kind of tree
9686node as input.  In other words, there is a type-system for trees, but it
9687is not reflected in the C type-system.
9688
9689 For safety, it is useful to configure GCC with '--enable-checking'.
9690Although this results in a significant performance penalty (since all
9691tree types are checked at run-time), and is therefore inappropriate in a
9692release version, it is extremely helpful during the development process.
9693
9694 Many macros behave as predicates.  Many, although not all, of these
9695predicates end in '_P'.  Do not rely on the result type of these macros
9696being of any particular type.  You may, however, rely on the fact that
9697the type can be compared to '0', so that statements like
9698     if (TEST_P (t) && !TEST_P (y))
9699       x = 1;
9700and
9701     int i = (TEST_P (t) != 0);
9702are legal.  Macros that return 'int' values now may be changed to return
9703'tree' values, or other pointers in the future.  Even those that
9704continue to return 'int' may return multiple nonzero codes where
9705previously they returned only zero and one.  Therefore, you should not
9706write code like
9707     if (TEST_P (t) == 1)
9708as this code is not guaranteed to work correctly in the future.
9709
9710 You should not take the address of values returned by the macros or
9711functions described here.  In particular, no guarantee is given that the
9712values are lvalues.
9713
9714 In general, the names of macros are all in uppercase, while the names
9715of functions are entirely in lowercase.  There are rare exceptions to
9716this rule.  You should assume that any macro or function whose name is
9717made up entirely of uppercase letters may evaluate its arguments more
9718than once.  You may assume that a macro or function whose name is made
9719up entirely of lowercase letters will evaluate its arguments only once.
9720
9721 The 'error_mark_node' is a special tree.  Its tree code is
9722'ERROR_MARK', but since there is only ever one node with that code, the
9723usual practice is to compare the tree against 'error_mark_node'.  (This
9724test is just a test for pointer equality.)  If an error has occurred
9725during front-end processing the flag 'errorcount' will be set.  If the
9726front end has encountered code it cannot handle, it will issue a message
9727to the user and set 'sorrycount'.  When these flags are set, any macro
9728or function which normally returns a tree of a particular kind may
9729instead return the 'error_mark_node'.  Thus, if you intend to do any
9730processing of erroneous code, you must be prepared to deal with the
9731'error_mark_node'.
9732
9733 Occasionally, a particular tree slot (like an operand to an expression,
9734or a particular field in a declaration) will be referred to as "reserved
9735for the back end".  These slots are used to store RTL when the tree is
9736converted to RTL for use by the GCC back end.  However, if that process
9737is not taking place (e.g., if the front end is being hooked up to an
9738intelligent editor), then those slots may be used by the back end
9739presently in use.
9740
9741 If you encounter situations that do not match this documentation, such
9742as tree nodes of types not mentioned here, or macros documented to
9743return entities of a particular kind that instead return entities of
9744some different kind, you have found a bug, either in the front end or in
9745the documentation.  Please report these bugs as you would any other bug.
9746
9747* Menu:
9748
9749* Macros and Functions::Macros and functions that can be used with all trees.
9750* Identifiers::         The names of things.
9751* Containers::          Lists and vectors.
9752
9753
9754File: gccint.info,  Node: Macros and Functions,  Next: Identifiers,  Up: Tree overview
9755
975611.2.1 Trees
9757------------
9758
9759All GENERIC trees have two fields in common.  First, 'TREE_CHAIN' is a
9760pointer that can be used as a singly-linked list to other trees.  The
9761other is 'TREE_TYPE'.  Many trees store the type of an expression or
9762declaration in this field.
9763
9764 These are some other functions for handling trees:
9765
9766'tree_size'
9767     Return the number of bytes a tree takes.
9768
9769'build0'
9770'build1'
9771'build2'
9772'build3'
9773'build4'
9774'build5'
9775'build6'
9776
9777     These functions build a tree and supply values to put in each
9778     parameter.  The basic signature is 'code, type, [operands]'.
9779     'code' is the 'TREE_CODE', and 'type' is a tree representing the
9780     'TREE_TYPE'.  These are followed by the operands, each of which is
9781     also a tree.
9782
9783
9784File: gccint.info,  Node: Identifiers,  Next: Containers,  Prev: Macros and Functions,  Up: Tree overview
9785
978611.2.2 Identifiers
9787------------------
9788
9789An 'IDENTIFIER_NODE' represents a slightly more general concept than the
9790standard C or C++ concept of identifier.  In particular, an
9791'IDENTIFIER_NODE' may contain a '$', or other extraordinary characters.
9792
9793 There are never two distinct 'IDENTIFIER_NODE's representing the same
9794identifier.  Therefore, you may use pointer equality to compare
9795'IDENTIFIER_NODE's, rather than using a routine like 'strcmp'.  Use
9796'get_identifier' to obtain the unique 'IDENTIFIER_NODE' for a supplied
9797string.
9798
9799 You can use the following macros to access identifiers:
9800'IDENTIFIER_POINTER'
9801     The string represented by the identifier, represented as a 'char*'.
9802     This string is always 'NUL'-terminated, and contains no embedded
9803     'NUL' characters.
9804
9805'IDENTIFIER_LENGTH'
9806     The length of the string returned by 'IDENTIFIER_POINTER', not
9807     including the trailing 'NUL'.  This value of 'IDENTIFIER_LENGTH
9808     (x)' is always the same as 'strlen (IDENTIFIER_POINTER (x))'.
9809
9810'IDENTIFIER_OPNAME_P'
9811     This predicate holds if the identifier represents the name of an
9812     overloaded operator.  In this case, you should not depend on the
9813     contents of either the 'IDENTIFIER_POINTER' or the
9814     'IDENTIFIER_LENGTH'.
9815
9816'IDENTIFIER_TYPENAME_P'
9817     This predicate holds if the identifier represents the name of a
9818     user-defined conversion operator.  In this case, the 'TREE_TYPE' of
9819     the 'IDENTIFIER_NODE' holds the type to which the conversion
9820     operator converts.
9821
9822
9823File: gccint.info,  Node: Containers,  Prev: Identifiers,  Up: Tree overview
9824
982511.2.3 Containers
9826-----------------
9827
9828Two common container data structures can be represented directly with
9829tree nodes.  A 'TREE_LIST' is a singly linked list containing two trees
9830per node.  These are the 'TREE_PURPOSE' and 'TREE_VALUE' of each node.
9831(Often, the 'TREE_PURPOSE' contains some kind of tag, or additional
9832information, while the 'TREE_VALUE' contains the majority of the
9833payload.  In other cases, the 'TREE_PURPOSE' is simply 'NULL_TREE',
9834while in still others both the 'TREE_PURPOSE' and 'TREE_VALUE' are of
9835equal stature.)  Given one 'TREE_LIST' node, the next node is found by
9836following the 'TREE_CHAIN'.  If the 'TREE_CHAIN' is 'NULL_TREE', then
9837you have reached the end of the list.
9838
9839 A 'TREE_VEC' is a simple vector.  The 'TREE_VEC_LENGTH' is an integer
9840(not a tree) giving the number of nodes in the vector.  The nodes
9841themselves are accessed using the 'TREE_VEC_ELT' macro, which takes two
9842arguments.  The first is the 'TREE_VEC' in question; the second is an
9843integer indicating which element in the vector is desired.  The elements
9844are indexed from zero.
9845
9846
9847File: gccint.info,  Node: Types,  Next: Declarations,  Prev: Tree overview,  Up: GENERIC
9848
984911.3 Types
9850==========
9851
9852All types have corresponding tree nodes.  However, you should not assume
9853that there is exactly one tree node corresponding to each type.  There
9854are often multiple nodes corresponding to the same type.
9855
9856 For the most part, different kinds of types have different tree codes.
9857(For example, pointer types use a 'POINTER_TYPE' code while arrays use
9858an 'ARRAY_TYPE' code.)  However, pointers to member functions use the
9859'RECORD_TYPE' code.  Therefore, when writing a 'switch' statement that
9860depends on the code associated with a particular type, you should take
9861care to handle pointers to member functions under the 'RECORD_TYPE' case
9862label.
9863
9864 The following functions and macros deal with cv-qualification of types:
9865'TYPE_MAIN_VARIANT'
9866     This macro returns the unqualified version of a type.  It may be
9867     applied to an unqualified type, but it is not always the identity
9868     function in that case.
9869
9870 A few other macros and functions are usable with all types:
9871'TYPE_SIZE'
9872     The number of bits required to represent the type, represented as
9873     an 'INTEGER_CST'.  For an incomplete type, 'TYPE_SIZE' will be
9874     'NULL_TREE'.
9875
9876'TYPE_ALIGN'
9877     The alignment of the type, in bits, represented as an 'int'.
9878
9879'TYPE_NAME'
9880     This macro returns a declaration (in the form of a 'TYPE_DECL') for
9881     the type.  (Note this macro does _not_ return an 'IDENTIFIER_NODE',
9882     as you might expect, given its name!)  You can look at the
9883     'DECL_NAME' of the 'TYPE_DECL' to obtain the actual name of the
9884     type.  The 'TYPE_NAME' will be 'NULL_TREE' for a type that is not a
9885     built-in type, the result of a typedef, or a named class type.
9886
9887'TYPE_CANONICAL'
9888     This macro returns the "canonical" type for the given type node.
9889     Canonical types are used to improve performance in the C++ and
9890     Objective-C++ front ends by allowing efficient comparison between
9891     two type nodes in 'same_type_p': if the 'TYPE_CANONICAL' values of
9892     the types are equal, the types are equivalent; otherwise, the types
9893     are not equivalent.  The notion of equivalence for canonical types
9894     is the same as the notion of type equivalence in the language
9895     itself.  For instance,
9896
9897     When 'TYPE_CANONICAL' is 'NULL_TREE', there is no canonical type
9898     for the given type node.  In this case, comparison between this
9899     type and any other type requires the compiler to perform a deep,
9900     "structural" comparison to see if the two type nodes have the same
9901     form and properties.
9902
9903     The canonical type for a node is always the most fundamental type
9904     in the equivalence class of types.  For instance, 'int' is its own
9905     canonical type.  A typedef 'I' of 'int' will have 'int' as its
9906     canonical type.  Similarly, 'I*' and a typedef 'IP' (defined to
9907     'I*') will has 'int*' as their canonical type.  When building a new
9908     type node, be sure to set 'TYPE_CANONICAL' to the appropriate
9909     canonical type.  If the new type is a compound type (built from
9910     other types), and any of those other types require structural
9911     equality, use 'SET_TYPE_STRUCTURAL_EQUALITY' to ensure that the new
9912     type also requires structural equality.  Finally, if for some
9913     reason you cannot guarantee that 'TYPE_CANONICAL' will point to the
9914     canonical type, use 'SET_TYPE_STRUCTURAL_EQUALITY' to make sure
9915     that the new type-and any type constructed based on it-requires
9916     structural equality.  If you suspect that the canonical type system
9917     is miscomparing types, pass '--param verify-canonical-types=1' to
9918     the compiler or configure with '--enable-checking' to force the
9919     compiler to verify its canonical-type comparisons against the
9920     structural comparisons; the compiler will then print any warnings
9921     if the canonical types miscompare.
9922
9923'TYPE_STRUCTURAL_EQUALITY_P'
9924     This predicate holds when the node requires structural equality
9925     checks, e.g., when 'TYPE_CANONICAL' is 'NULL_TREE'.
9926
9927'SET_TYPE_STRUCTURAL_EQUALITY'
9928     This macro states that the type node it is given requires
9929     structural equality checks, e.g., it sets 'TYPE_CANONICAL' to
9930     'NULL_TREE'.
9931
9932'same_type_p'
9933     This predicate takes two types as input, and holds if they are the
9934     same type.  For example, if one type is a 'typedef' for the other,
9935     or both are 'typedef's for the same type.  This predicate also
9936     holds if the two trees given as input are simply copies of one
9937     another; i.e., there is no difference between them at the source
9938     level, but, for whatever reason, a duplicate has been made in the
9939     representation.  You should never use '==' (pointer equality) to
9940     compare types; always use 'same_type_p' instead.
9941
9942 Detailed below are the various kinds of types, and the macros that can
9943be used to access them.  Although other kinds of types are used
9944elsewhere in G++, the types described here are the only ones that you
9945will encounter while examining the intermediate representation.
9946
9947'VOID_TYPE'
9948     Used to represent the 'void' type.
9949
9950'INTEGER_TYPE'
9951     Used to represent the various integral types, including 'char',
9952     'short', 'int', 'long', and 'long long'.  This code is not used for
9953     enumeration types, nor for the 'bool' type.  The 'TYPE_PRECISION'
9954     is the number of bits used in the representation, represented as an
9955     'unsigned int'.  (Note that in the general case this is not the
9956     same value as 'TYPE_SIZE'; suppose that there were a 24-bit integer
9957     type, but that alignment requirements for the ABI required 32-bit
9958     alignment.  Then, 'TYPE_SIZE' would be an 'INTEGER_CST' for 32,
9959     while 'TYPE_PRECISION' would be 24.)  The integer type is unsigned
9960     if 'TYPE_UNSIGNED' holds; otherwise, it is signed.
9961
9962     The 'TYPE_MIN_VALUE' is an 'INTEGER_CST' for the smallest integer
9963     that may be represented by this type.  Similarly, the
9964     'TYPE_MAX_VALUE' is an 'INTEGER_CST' for the largest integer that
9965     may be represented by this type.
9966
9967'REAL_TYPE'
9968     Used to represent the 'float', 'double', and 'long double' types.
9969     The number of bits in the floating-point representation is given by
9970     'TYPE_PRECISION', as in the 'INTEGER_TYPE' case.
9971
9972'FIXED_POINT_TYPE'
9973     Used to represent the 'short _Fract', '_Fract', 'long _Fract',
9974     'long long _Fract', 'short _Accum', '_Accum', 'long _Accum', and
9975     'long long _Accum' types.  The number of bits in the fixed-point
9976     representation is given by 'TYPE_PRECISION', as in the
9977     'INTEGER_TYPE' case.  There may be padding bits, fractional bits
9978     and integral bits.  The number of fractional bits is given by
9979     'TYPE_FBIT', and the number of integral bits is given by
9980     'TYPE_IBIT'.  The fixed-point type is unsigned if 'TYPE_UNSIGNED'
9981     holds; otherwise, it is signed.  The fixed-point type is saturating
9982     if 'TYPE_SATURATING' holds; otherwise, it is not saturating.
9983
9984'COMPLEX_TYPE'
9985     Used to represent GCC built-in '__complex__' data types.  The
9986     'TREE_TYPE' is the type of the real and imaginary parts.
9987
9988'ENUMERAL_TYPE'
9989     Used to represent an enumeration type.  The 'TYPE_PRECISION' gives
9990     (as an 'int'), the number of bits used to represent the type.  If
9991     there are no negative enumeration constants, 'TYPE_UNSIGNED' will
9992     hold.  The minimum and maximum enumeration constants may be
9993     obtained with 'TYPE_MIN_VALUE' and 'TYPE_MAX_VALUE', respectively;
9994     each of these macros returns an 'INTEGER_CST'.
9995
9996     The actual enumeration constants themselves may be obtained by
9997     looking at the 'TYPE_VALUES'.  This macro will return a
9998     'TREE_LIST', containing the constants.  The 'TREE_PURPOSE' of each
9999     node will be an 'IDENTIFIER_NODE' giving the name of the constant;
10000     the 'TREE_VALUE' will be an 'INTEGER_CST' giving the value assigned
10001     to that constant.  These constants will appear in the order in
10002     which they were declared.  The 'TREE_TYPE' of each of these
10003     constants will be the type of enumeration type itself.
10004
10005'BOOLEAN_TYPE'
10006     Used to represent the 'bool' type.
10007
10008'POINTER_TYPE'
10009     Used to represent pointer types, and pointer to data member types.
10010     The 'TREE_TYPE' gives the type to which this type points.
10011
10012'REFERENCE_TYPE'
10013     Used to represent reference types.  The 'TREE_TYPE' gives the type
10014     to which this type refers.
10015
10016'FUNCTION_TYPE'
10017     Used to represent the type of non-member functions and of static
10018     member functions.  The 'TREE_TYPE' gives the return type of the
10019     function.  The 'TYPE_ARG_TYPES' are a 'TREE_LIST' of the argument
10020     types.  The 'TREE_VALUE' of each node in this list is the type of
10021     the corresponding argument; the 'TREE_PURPOSE' is an expression for
10022     the default argument value, if any.  If the last node in the list
10023     is 'void_list_node' (a 'TREE_LIST' node whose 'TREE_VALUE' is the
10024     'void_type_node'), then functions of this type do not take variable
10025     arguments.  Otherwise, they do take a variable number of arguments.
10026
10027     Note that in C (but not in C++) a function declared like 'void f()'
10028     is an unprototyped function taking a variable number of arguments;
10029     the 'TYPE_ARG_TYPES' of such a function will be 'NULL'.
10030
10031'METHOD_TYPE'
10032     Used to represent the type of a non-static member function.  Like a
10033     'FUNCTION_TYPE', the return type is given by the 'TREE_TYPE'.  The
10034     type of '*this', i.e., the class of which functions of this type
10035     are a member, is given by the 'TYPE_METHOD_BASETYPE'.  The
10036     'TYPE_ARG_TYPES' is the parameter list, as for a 'FUNCTION_TYPE',
10037     and includes the 'this' argument.
10038
10039'ARRAY_TYPE'
10040     Used to represent array types.  The 'TREE_TYPE' gives the type of
10041     the elements in the array.  If the array-bound is present in the
10042     type, the 'TYPE_DOMAIN' is an 'INTEGER_TYPE' whose 'TYPE_MIN_VALUE'
10043     and 'TYPE_MAX_VALUE' will be the lower and upper bounds of the
10044     array, respectively.  The 'TYPE_MIN_VALUE' will always be an
10045     'INTEGER_CST' for zero, while the 'TYPE_MAX_VALUE' will be one less
10046     than the number of elements in the array, i.e., the highest value
10047     which may be used to index an element in the array.
10048
10049'RECORD_TYPE'
10050     Used to represent 'struct' and 'class' types, as well as pointers
10051     to member functions and similar constructs in other languages.
10052     'TYPE_FIELDS' contains the items contained in this type, each of
10053     which can be a 'FIELD_DECL', 'VAR_DECL', 'CONST_DECL', or
10054     'TYPE_DECL'.  You may not make any assumptions about the ordering
10055     of the fields in the type or whether one or more of them overlap.
10056
10057'UNION_TYPE'
10058     Used to represent 'union' types.  Similar to 'RECORD_TYPE' except
10059     that all 'FIELD_DECL' nodes in 'TYPE_FIELD' start at bit position
10060     zero.
10061
10062'QUAL_UNION_TYPE'
10063     Used to represent part of a variant record in Ada.  Similar to
10064     'UNION_TYPE' except that each 'FIELD_DECL' has a 'DECL_QUALIFIER'
10065     field, which contains a boolean expression that indicates whether
10066     the field is present in the object.  The type will only have one
10067     field, so each field's 'DECL_QUALIFIER' is only evaluated if none
10068     of the expressions in the previous fields in 'TYPE_FIELDS' are
10069     nonzero.  Normally these expressions will reference a field in the
10070     outer object using a 'PLACEHOLDER_EXPR'.
10071
10072'LANG_TYPE'
10073     This node is used to represent a language-specific type.  The front
10074     end must handle it.
10075
10076'OFFSET_TYPE'
10077     This node is used to represent a pointer-to-data member.  For a
10078     data member 'X::m' the 'TYPE_OFFSET_BASETYPE' is 'X' and the
10079     'TREE_TYPE' is the type of 'm'.
10080
10081 There are variables whose values represent some of the basic types.
10082These include:
10083'void_type_node'
10084     A node for 'void'.
10085
10086'integer_type_node'
10087     A node for 'int'.
10088
10089'unsigned_type_node.'
10090     A node for 'unsigned int'.
10091
10092'char_type_node.'
10093     A node for 'char'.
10094It may sometimes be useful to compare one of these variables with a type
10095in hand, using 'same_type_p'.
10096
10097
10098File: gccint.info,  Node: Declarations,  Next: Attributes,  Prev: Types,  Up: GENERIC
10099
1010011.4 Declarations
10101=================
10102
10103This section covers the various kinds of declarations that appear in the
10104internal representation, except for declarations of functions
10105(represented by 'FUNCTION_DECL' nodes), which are described in *note
10106Functions::.
10107
10108* Menu:
10109
10110* Working with declarations::  Macros and functions that work on
10111declarations.
10112* Internal structure:: How declaration nodes are represented.
10113
10114
10115File: gccint.info,  Node: Working with declarations,  Next: Internal structure,  Up: Declarations
10116
1011711.4.1 Working with declarations
10118--------------------------------
10119
10120Some macros can be used with any kind of declaration.  These include:
10121'DECL_NAME'
10122     This macro returns an 'IDENTIFIER_NODE' giving the name of the
10123     entity.
10124
10125'TREE_TYPE'
10126     This macro returns the type of the entity declared.
10127
10128'EXPR_FILENAME'
10129     This macro returns the name of the file in which the entity was
10130     declared, as a 'char*'.  For an entity declared implicitly by the
10131     compiler (like '__builtin_memcpy'), this will be the string
10132     '"<internal>"'.
10133
10134'EXPR_LINENO'
10135     This macro returns the line number at which the entity was
10136     declared, as an 'int'.
10137
10138'DECL_ARTIFICIAL'
10139     This predicate holds if the declaration was implicitly generated by
10140     the compiler.  For example, this predicate will hold of an
10141     implicitly declared member function, or of the 'TYPE_DECL'
10142     implicitly generated for a class type.  Recall that in C++ code
10143     like:
10144          struct S {};
10145     is roughly equivalent to C code like:
10146          struct S {};
10147          typedef struct S S;
10148     The implicitly generated 'typedef' declaration is represented by a
10149     'TYPE_DECL' for which 'DECL_ARTIFICIAL' holds.
10150
10151 The various kinds of declarations include:
10152'LABEL_DECL'
10153     These nodes are used to represent labels in function bodies.  For
10154     more information, see *note Functions::.  These nodes only appear
10155     in block scopes.
10156
10157'CONST_DECL'
10158     These nodes are used to represent enumeration constants.  The value
10159     of the constant is given by 'DECL_INITIAL' which will be an
10160     'INTEGER_CST' with the same type as the 'TREE_TYPE' of the
10161     'CONST_DECL', i.e., an 'ENUMERAL_TYPE'.
10162
10163'RESULT_DECL'
10164     These nodes represent the value returned by a function.  When a
10165     value is assigned to a 'RESULT_DECL', that indicates that the value
10166     should be returned, via bitwise copy, by the function.  You can use
10167     'DECL_SIZE' and 'DECL_ALIGN' on a 'RESULT_DECL', just as with a
10168     'VAR_DECL'.
10169
10170'TYPE_DECL'
10171     These nodes represent 'typedef' declarations.  The 'TREE_TYPE' is
10172     the type declared to have the name given by 'DECL_NAME'.  In some
10173     cases, there is no associated name.
10174
10175'VAR_DECL'
10176     These nodes represent variables with namespace or block scope, as
10177     well as static data members.  The 'DECL_SIZE' and 'DECL_ALIGN' are
10178     analogous to 'TYPE_SIZE' and 'TYPE_ALIGN'.  For a declaration, you
10179     should always use the 'DECL_SIZE' and 'DECL_ALIGN' rather than the
10180     'TYPE_SIZE' and 'TYPE_ALIGN' given by the 'TREE_TYPE', since
10181     special attributes may have been applied to the variable to give it
10182     a particular size and alignment.  You may use the predicates
10183     'DECL_THIS_STATIC' or 'DECL_THIS_EXTERN' to test whether the
10184     storage class specifiers 'static' or 'extern' were used to declare
10185     a variable.
10186
10187     If this variable is initialized (but does not require a
10188     constructor), the 'DECL_INITIAL' will be an expression for the
10189     initializer.  The initializer should be evaluated, and a bitwise
10190     copy into the variable performed.  If the 'DECL_INITIAL' is the
10191     'error_mark_node', there is an initializer, but it is given by an
10192     explicit statement later in the code; no bitwise copy is required.
10193
10194     GCC provides an extension that allows either automatic variables,
10195     or global variables, to be placed in particular registers.  This
10196     extension is being used for a particular 'VAR_DECL' if
10197     'DECL_REGISTER' holds for the 'VAR_DECL', and if
10198     'DECL_ASSEMBLER_NAME' is not equal to 'DECL_NAME'.  In that case,
10199     'DECL_ASSEMBLER_NAME' is the name of the register into which the
10200     variable will be placed.
10201
10202'PARM_DECL'
10203     Used to represent a parameter to a function.  Treat these nodes
10204     similarly to 'VAR_DECL' nodes.  These nodes only appear in the
10205     'DECL_ARGUMENTS' for a 'FUNCTION_DECL'.
10206
10207     The 'DECL_ARG_TYPE' for a 'PARM_DECL' is the type that will
10208     actually be used when a value is passed to this function.  It may
10209     be a wider type than the 'TREE_TYPE' of the parameter; for example,
10210     the ordinary type might be 'short' while the 'DECL_ARG_TYPE' is
10211     'int'.
10212
10213'DEBUG_EXPR_DECL'
10214     Used to represent an anonymous debug-information temporary created
10215     to hold an expression as it is optimized away, so that its value
10216     can be referenced in debug bind statements.
10217
10218'FIELD_DECL'
10219     These nodes represent non-static data members.  The 'DECL_SIZE' and
10220     'DECL_ALIGN' behave as for 'VAR_DECL' nodes.  The position of the
10221     field within the parent record is specified by a combination of
10222     three attributes.  'DECL_FIELD_OFFSET' is the position, counting in
10223     bytes, of the 'DECL_OFFSET_ALIGN'-bit sized word containing the bit
10224     of the field closest to the beginning of the structure.
10225     'DECL_FIELD_BIT_OFFSET' is the bit offset of the first bit of the
10226     field within this word; this may be nonzero even for fields that
10227     are not bit-fields, since 'DECL_OFFSET_ALIGN' may be greater than
10228     the natural alignment of the field's type.
10229
10230     If 'DECL_C_BIT_FIELD' holds, this field is a bit-field.  In a
10231     bit-field, 'DECL_BIT_FIELD_TYPE' also contains the type that was
10232     originally specified for it, while DECL_TYPE may be a modified type
10233     with lesser precision, according to the size of the bit field.
10234
10235'NAMESPACE_DECL'
10236     Namespaces provide a name hierarchy for other declarations.  They
10237     appear in the 'DECL_CONTEXT' of other '_DECL' nodes.
10238
10239
10240File: gccint.info,  Node: Internal structure,  Prev: Working with declarations,  Up: Declarations
10241
1024211.4.2 Internal structure
10243-------------------------
10244
10245'DECL' nodes are represented internally as a hierarchy of structures.
10246
10247* Menu:
10248
10249* Current structure hierarchy::  The current DECL node structure
10250hierarchy.
10251* Adding new DECL node types:: How to add a new DECL node to a
10252frontend.
10253
10254
10255File: gccint.info,  Node: Current structure hierarchy,  Next: Adding new DECL node types,  Up: Internal structure
10256
1025711.4.2.1 Current structure hierarchy
10258....................................
10259
10260'struct tree_decl_minimal'
10261     This is the minimal structure to inherit from in order for common
10262     'DECL' macros to work.  The fields it contains are a unique ID,
10263     source location, context, and name.
10264
10265'struct tree_decl_common'
10266     This structure inherits from 'struct tree_decl_minimal'.  It
10267     contains fields that most 'DECL' nodes need, such as a field to
10268     store alignment, machine mode, size, and attributes.
10269
10270'struct tree_field_decl'
10271     This structure inherits from 'struct tree_decl_common'.  It is used
10272     to represent 'FIELD_DECL'.
10273
10274'struct tree_label_decl'
10275     This structure inherits from 'struct tree_decl_common'.  It is used
10276     to represent 'LABEL_DECL'.
10277
10278'struct tree_translation_unit_decl'
10279     This structure inherits from 'struct tree_decl_common'.  It is used
10280     to represent 'TRANSLATION_UNIT_DECL'.
10281
10282'struct tree_decl_with_rtl'
10283     This structure inherits from 'struct tree_decl_common'.  It
10284     contains a field to store the low-level RTL associated with a
10285     'DECL' node.
10286
10287'struct tree_result_decl'
10288     This structure inherits from 'struct tree_decl_with_rtl'.  It is
10289     used to represent 'RESULT_DECL'.
10290
10291'struct tree_const_decl'
10292     This structure inherits from 'struct tree_decl_with_rtl'.  It is
10293     used to represent 'CONST_DECL'.
10294
10295'struct tree_parm_decl'
10296     This structure inherits from 'struct tree_decl_with_rtl'.  It is
10297     used to represent 'PARM_DECL'.
10298
10299'struct tree_decl_with_vis'
10300     This structure inherits from 'struct tree_decl_with_rtl'.  It
10301     contains fields necessary to store visibility information, as well
10302     as a section name and assembler name.
10303
10304'struct tree_var_decl'
10305     This structure inherits from 'struct tree_decl_with_vis'.  It is
10306     used to represent 'VAR_DECL'.
10307
10308'struct tree_function_decl'
10309     This structure inherits from 'struct tree_decl_with_vis'.  It is
10310     used to represent 'FUNCTION_DECL'.
10311
10312
10313File: gccint.info,  Node: Adding new DECL node types,  Prev: Current structure hierarchy,  Up: Internal structure
10314
1031511.4.2.2 Adding new DECL node types
10316...................................
10317
10318Adding a new 'DECL' tree consists of the following steps
10319
10320Add a new tree code for the 'DECL' node
10321     For language specific 'DECL' nodes, there is a '.def' file in each
10322     frontend directory where the tree code should be added.  For 'DECL'
10323     nodes that are part of the middle-end, the code should be added to
10324     'tree.def'.
10325
10326Create a new structure type for the 'DECL' node
10327     These structures should inherit from one of the existing structures
10328     in the language hierarchy by using that structure as the first
10329     member.
10330
10331          struct tree_foo_decl
10332          {
10333             struct tree_decl_with_vis common;
10334          }
10335
10336     Would create a structure name 'tree_foo_decl' that inherits from
10337     'struct tree_decl_with_vis'.
10338
10339     For language specific 'DECL' nodes, this new structure type should
10340     go in the appropriate '.h' file.  For 'DECL' nodes that are part of
10341     the middle-end, the structure type should go in 'tree.h'.
10342
10343Add a member to the tree structure enumerator for the node
10344     For garbage collection and dynamic checking purposes, each 'DECL'
10345     node structure type is required to have a unique enumerator value
10346     specified with it.  For language specific 'DECL' nodes, this new
10347     enumerator value should go in the appropriate '.def' file.  For
10348     'DECL' nodes that are part of the middle-end, the enumerator values
10349     are specified in 'treestruct.def'.
10350
10351Update 'union tree_node'
10352     In order to make your new structure type usable, it must be added
10353     to 'union tree_node'.  For language specific 'DECL' nodes, a new
10354     entry should be added to the appropriate '.h' file of the form
10355            struct tree_foo_decl GTY ((tag ("TS_VAR_DECL"))) foo_decl;
10356     For 'DECL' nodes that are part of the middle-end, the additional
10357     member goes directly into 'union tree_node' in 'tree.h'.
10358
10359Update dynamic checking info
10360     In order to be able to check whether accessing a named portion of
10361     'union tree_node' is legal, and whether a certain 'DECL' node
10362     contains one of the enumerated 'DECL' node structures in the
10363     hierarchy, a simple lookup table is used.  This lookup table needs
10364     to be kept up to date with the tree structure hierarchy, or else
10365     checking and containment macros will fail inappropriately.
10366
10367     For language specific 'DECL' nodes, their is an 'init_ts' function
10368     in an appropriate '.c' file, which initializes the lookup table.
10369     Code setting up the table for new 'DECL' nodes should be added
10370     there.  For each 'DECL' tree code and enumerator value representing
10371     a member of the inheritance hierarchy, the table should contain 1
10372     if that tree code inherits (directly or indirectly) from that
10373     member.  Thus, a 'FOO_DECL' node derived from 'struct
10374     decl_with_rtl', and enumerator value 'TS_FOO_DECL', would be set up
10375     as follows
10376          tree_contains_struct[FOO_DECL][TS_FOO_DECL] = 1;
10377          tree_contains_struct[FOO_DECL][TS_DECL_WRTL] = 1;
10378          tree_contains_struct[FOO_DECL][TS_DECL_COMMON] = 1;
10379          tree_contains_struct[FOO_DECL][TS_DECL_MINIMAL] = 1;
10380
10381     For 'DECL' nodes that are part of the middle-end, the setup code
10382     goes into 'tree.c'.
10383
10384Add macros to access any new fields and flags
10385
10386     Each added field or flag should have a macro that is used to access
10387     it, that performs appropriate checking to ensure only the right
10388     type of 'DECL' nodes access the field.
10389
10390     These macros generally take the following form
10391          #define FOO_DECL_FIELDNAME(NODE) FOO_DECL_CHECK(NODE)->foo_decl.fieldname
10392     However, if the structure is simply a base class for further
10393     structures, something like the following should be used
10394          #define BASE_STRUCT_CHECK(T) CONTAINS_STRUCT_CHECK(T, TS_BASE_STRUCT)
10395          #define BASE_STRUCT_FIELDNAME(NODE) \
10396             (BASE_STRUCT_CHECK(NODE)->base_struct.fieldname
10397
10398     Reading them from the generated 'all-tree.def' file (which in turn
10399     includes all the 'tree.def' files), 'gencheck.c' is used during
10400     GCC's build to generate the '*_CHECK' macros for all tree codes.
10401
10402
10403File: gccint.info,  Node: Attributes,  Next: Expression trees,  Prev: Declarations,  Up: GENERIC
10404
1040511.5 Attributes in trees
10406========================
10407
10408Attributes, as specified using the '__attribute__' keyword, are
10409represented internally as a 'TREE_LIST'.  The 'TREE_PURPOSE' is the name
10410of the attribute, as an 'IDENTIFIER_NODE'.  The 'TREE_VALUE' is a
10411'TREE_LIST' of the arguments of the attribute, if any, or 'NULL_TREE' if
10412there are no arguments; the arguments are stored as the 'TREE_VALUE' of
10413successive entries in the list, and may be identifiers or expressions.
10414The 'TREE_CHAIN' of the attribute is the next attribute in a list of
10415attributes applying to the same declaration or type, or 'NULL_TREE' if
10416there are no further attributes in the list.
10417
10418 Attributes may be attached to declarations and to types; these
10419attributes may be accessed with the following macros.  All attributes
10420are stored in this way, and many also cause other changes to the
10421declaration or type or to other internal compiler data structures.
10422
10423 -- Tree Macro: tree DECL_ATTRIBUTES (tree DECL)
10424     This macro returns the attributes on the declaration DECL.
10425
10426 -- Tree Macro: tree TYPE_ATTRIBUTES (tree TYPE)
10427     This macro returns the attributes on the type TYPE.
10428
10429
10430File: gccint.info,  Node: Expression trees,  Next: Statements,  Prev: Attributes,  Up: GENERIC
10431
1043211.6 Expressions
10433================
10434
10435The internal representation for expressions is for the most part quite
10436straightforward.  However, there are a few facts that one must bear in
10437mind.  In particular, the expression "tree" is actually a directed
10438acyclic graph.  (For example there may be many references to the integer
10439constant zero throughout the source program; many of these will be
10440represented by the same expression node.)  You should not rely on
10441certain kinds of node being shared, nor should you rely on certain kinds
10442of nodes being unshared.
10443
10444 The following macros can be used with all expression nodes:
10445
10446'TREE_TYPE'
10447     Returns the type of the expression.  This value may not be
10448     precisely the same type that would be given the expression in the
10449     original program.
10450
10451 In what follows, some nodes that one might expect to always have type
10452'bool' are documented to have either integral or boolean type.  At some
10453point in the future, the C front end may also make use of this same
10454intermediate representation, and at this point these nodes will
10455certainly have integral type.  The previous sentence is not meant to
10456imply that the C++ front end does not or will not give these nodes
10457integral type.
10458
10459 Below, we list the various kinds of expression nodes.  Except where
10460noted otherwise, the operands to an expression are accessed using the
10461'TREE_OPERAND' macro.  For example, to access the first operand to a
10462binary plus expression 'expr', use:
10463
10464     TREE_OPERAND (expr, 0)
10465
10466 As this example indicates, the operands are zero-indexed.
10467
10468* Menu:
10469
10470* Constants: Constant expressions.
10471* Storage References::
10472* Unary and Binary Expressions::
10473* Vectors::
10474
10475
10476File: gccint.info,  Node: Constant expressions,  Next: Storage References,  Up: Expression trees
10477
1047811.6.1 Constant expressions
10479---------------------------
10480
10481The table below begins with constants, moves on to unary expressions,
10482then proceeds to binary expressions, and concludes with various other
10483kinds of expressions:
10484
10485'INTEGER_CST'
10486     These nodes represent integer constants.  Note that the type of
10487     these constants is obtained with 'TREE_TYPE'; they are not always
10488     of type 'int'.  In particular, 'char' constants are represented
10489     with 'INTEGER_CST' nodes.  The value of the integer constant 'e' is
10490     represented in an array of HOST_WIDE_INT. There are enough elements
10491     in the array to represent the value without taking extra elements
10492     for redundant 0s or -1.  The number of elements used to represent
10493     'e' is available via 'TREE_INT_CST_NUNITS'.  Element 'i' can be
10494     extracted by using 'TREE_INT_CST_ELT (e, i)'.  'TREE_INT_CST_LOW'
10495     is a shorthand for 'TREE_INT_CST_ELT (e, 0)'.
10496
10497     The functions 'tree_fits_shwi_p' and 'tree_fits_uhwi_p' can be used
10498     to tell if the value is small enough to fit in a signed
10499     HOST_WIDE_INT or an unsigned HOST_WIDE_INT respectively.  The value
10500     can then be extracted using 'tree_to_shwi' and 'tree_to_uhwi'.
10501
10502'REAL_CST'
10503
10504     FIXME: Talk about how to obtain representations of this constant,
10505     do comparisons, and so forth.
10506
10507'FIXED_CST'
10508
10509     These nodes represent fixed-point constants.  The type of these
10510     constants is obtained with 'TREE_TYPE'.  'TREE_FIXED_CST_PTR'
10511     points to a 'struct fixed_value'; 'TREE_FIXED_CST' returns the
10512     structure itself.  'struct fixed_value' contains 'data' with the
10513     size of two 'HOST_BITS_PER_WIDE_INT' and 'mode' as the associated
10514     fixed-point machine mode for 'data'.
10515
10516'COMPLEX_CST'
10517     These nodes are used to represent complex number constants, that is
10518     a '__complex__' whose parts are constant nodes.  The
10519     'TREE_REALPART' and 'TREE_IMAGPART' return the real and the
10520     imaginary parts respectively.
10521
10522'VECTOR_CST'
10523     These nodes are used to represent vector constants.  Each vector
10524     constant V is treated as a specific instance of an arbitrary-length
10525     sequence that itself contains 'VECTOR_CST_NPATTERNS (V)'
10526     interleaved patterns.  Each pattern has the form:
10527
10528          { BASE0, BASE1, BASE1 + STEP, BASE1 + STEP * 2, ... }
10529
10530     The first three elements in each pattern are enough to determine
10531     the values of the other elements.  However, if all STEPs are zero,
10532     only the first two elements are needed.  If in addition each BASE1
10533     is equal to the corresponding BASE0, only the first element in each
10534     pattern is needed.  The number of encoded elements per pattern is
10535     given by 'VECTOR_CST_NELTS_PER_PATTERN (V)'.
10536
10537     For example, the constant:
10538
10539          { 0, 1, 2, 6, 3, 8, 4, 10, 5, 12, 6, 14, 7, 16, 8, 18 }
10540
10541     is interpreted as an interleaving of the sequences:
10542
10543          { 0, 2, 3, 4, 5, 6, 7, 8 }
10544          { 1, 6, 8, 10, 12, 14, 16, 18 }
10545
10546     where the sequences are represented by the following patterns:
10547
10548          BASE0 == 0, BASE1 == 2, STEP == 1
10549          BASE0 == 1, BASE1 == 6, STEP == 2
10550
10551     In this case:
10552
10553          VECTOR_CST_NPATTERNS (V) == 2
10554          VECTOR_CST_NELTS_PER_PATTERN (V) == 3
10555
10556     The vector is therefore encoded using the first 6 elements ('{ 0,
10557     1, 2, 6, 3, 8 }'), with the remaining 10 elements being implicit
10558     extensions of them.
10559
10560     Sometimes this scheme can create two possible encodings of the same
10561     vector.  For example { 0, 1 } could be seen as two patterns with
10562     one element each or one pattern with two elements (BASE0 and
10563     BASE1).  The canonical encoding is always the one with the fewest
10564     patterns or (if both encodings have the same number of petterns)
10565     the one with the fewest encoded elements.
10566
10567     'vector_cst_encoding_nelts (V)' gives the total number of encoded
10568     elements in V, which is 6 in the example above.
10569     'VECTOR_CST_ENCODED_ELTS (V)' gives a pointer to the elements
10570     encoded in V and 'VECTOR_CST_ENCODED_ELT (V, I)' accesses the value
10571     of encoded element I.
10572
10573     'VECTOR_CST_DUPLICATE_P (V)' is true if V simply contains repeated
10574     instances of 'VECTOR_CST_NPATTERNS (V)' values.  This is a
10575     shorthand for testing 'VECTOR_CST_NELTS_PER_PATTERN (V) == 1'.
10576
10577     'VECTOR_CST_STEPPED_P (V)' is true if at least one pattern in V has
10578     a nonzero step.  This is a shorthand for testing
10579     'VECTOR_CST_NELTS_PER_PATTERN (V) == 3'.
10580
10581     The utility function 'vector_cst_elt' gives the value of an
10582     arbitrary index as a 'tree'.  'vector_cst_int_elt' gives the same
10583     value as a 'wide_int'.
10584
10585'STRING_CST'
10586     These nodes represent string-constants.  The 'TREE_STRING_LENGTH'
10587     returns the length of the string, as an 'int'.  The
10588     'TREE_STRING_POINTER' is a 'char*' containing the string itself.
10589     The string may not be 'NUL'-terminated, and it may contain embedded
10590     'NUL' characters.  Therefore, the 'TREE_STRING_LENGTH' includes the
10591     trailing 'NUL' if it is present.
10592
10593     For wide string constants, the 'TREE_STRING_LENGTH' is the number
10594     of bytes in the string, and the 'TREE_STRING_POINTER' points to an
10595     array of the bytes of the string, as represented on the target
10596     system (that is, as integers in the target endianness).  Wide and
10597     non-wide string constants are distinguished only by the 'TREE_TYPE'
10598     of the 'STRING_CST'.
10599
10600     FIXME: The formats of string constants are not well-defined when
10601     the target system bytes are not the same width as host system
10602     bytes.
10603
10604'POLY_INT_CST'
10605     These nodes represent invariants that depend on some
10606     target-specific runtime parameters.  They consist of
10607     'NUM_POLY_INT_COEFFS' coefficients, with the first coefficient
10608     being the constant term and the others being multipliers that are
10609     applied to the runtime parameters.
10610
10611     'POLY_INT_CST_ELT (X, I)' references coefficient number I of
10612     'POLY_INT_CST' node X.  Each coefficient is an 'INTEGER_CST'.
10613
10614
10615File: gccint.info,  Node: Storage References,  Next: Unary and Binary Expressions,  Prev: Constant expressions,  Up: Expression trees
10616
1061711.6.2 References to storage
10618----------------------------
10619
10620'ARRAY_REF'
10621     These nodes represent array accesses.  The first operand is the
10622     array; the second is the index.  To calculate the address of the
10623     memory accessed, you must scale the index by the size of the type
10624     of the array elements.  The type of these expressions must be the
10625     type of a component of the array.  The third and fourth operands
10626     are used after gimplification to represent the lower bound and
10627     component size but should not be used directly; call
10628     'array_ref_low_bound' and 'array_ref_element_size' instead.
10629
10630'ARRAY_RANGE_REF'
10631     These nodes represent access to a range (or "slice") of an array.
10632     The operands are the same as that for 'ARRAY_REF' and have the same
10633     meanings.  The type of these expressions must be an array whose
10634     component type is the same as that of the first operand.  The range
10635     of that array type determines the amount of data these expressions
10636     access.
10637
10638'TARGET_MEM_REF'
10639     These nodes represent memory accesses whose address directly map to
10640     an addressing mode of the target architecture.  The first argument
10641     is 'TMR_SYMBOL' and must be a 'VAR_DECL' of an object with a fixed
10642     address.  The second argument is 'TMR_BASE' and the third one is
10643     'TMR_INDEX'.  The fourth argument is 'TMR_STEP' and must be an
10644     'INTEGER_CST'.  The fifth argument is 'TMR_OFFSET' and must be an
10645     'INTEGER_CST'.  Any of the arguments may be NULL if the appropriate
10646     component does not appear in the address.  Address of the
10647     'TARGET_MEM_REF' is determined in the following way.
10648
10649          &TMR_SYMBOL + TMR_BASE + TMR_INDEX * TMR_STEP + TMR_OFFSET
10650
10651     The sixth argument is the reference to the original memory access,
10652     which is preserved for the purposes of the RTL alias analysis.  The
10653     seventh argument is a tag representing the results of tree level
10654     alias analysis.
10655
10656'ADDR_EXPR'
10657     These nodes are used to represent the address of an object.  (These
10658     expressions will always have pointer or reference type.)  The
10659     operand may be another expression, or it may be a declaration.
10660
10661     As an extension, GCC allows users to take the address of a label.
10662     In this case, the operand of the 'ADDR_EXPR' will be a
10663     'LABEL_DECL'.  The type of such an expression is 'void*'.
10664
10665     If the object addressed is not an lvalue, a temporary is created,
10666     and the address of the temporary is used.
10667
10668'INDIRECT_REF'
10669     These nodes are used to represent the object pointed to by a
10670     pointer.  The operand is the pointer being dereferenced; it will
10671     always have pointer or reference type.
10672
10673'MEM_REF'
10674     These nodes are used to represent the object pointed to by a
10675     pointer offset by a constant.  The first operand is the pointer
10676     being dereferenced; it will always have pointer or reference type.
10677     The second operand is a pointer constant.  Its type is specifying
10678     the type to be used for type-based alias analysis.
10679
10680'COMPONENT_REF'
10681     These nodes represent non-static data member accesses.  The first
10682     operand is the object (rather than a pointer to it); the second
10683     operand is the 'FIELD_DECL' for the data member.  The third operand
10684     represents the byte offset of the field, but should not be used
10685     directly; call 'component_ref_field_offset' instead.
10686
10687
10688File: gccint.info,  Node: Unary and Binary Expressions,  Next: Vectors,  Prev: Storage References,  Up: Expression trees
10689
1069011.6.3 Unary and Binary Expressions
10691-----------------------------------
10692
10693'NEGATE_EXPR'
10694     These nodes represent unary negation of the single operand, for
10695     both integer and floating-point types.  The type of negation can be
10696     determined by looking at the type of the expression.
10697
10698     The behavior of this operation on signed arithmetic overflow is
10699     controlled by the 'flag_wrapv' and 'flag_trapv' variables.
10700
10701'ABS_EXPR'
10702     These nodes represent the absolute value of the single operand, for
10703     both integer and floating-point types.  This is typically used to
10704     implement the 'abs', 'labs' and 'llabs' builtins for integer types,
10705     and the 'fabs', 'fabsf' and 'fabsl' builtins for floating point
10706     types.  The type of abs operation can be determined by looking at
10707     the type of the expression.
10708
10709     This node is not used for complex types.  To represent the modulus
10710     or complex abs of a complex value, use the 'BUILT_IN_CABS',
10711     'BUILT_IN_CABSF' or 'BUILT_IN_CABSL' builtins, as used to implement
10712     the C99 'cabs', 'cabsf' and 'cabsl' built-in functions.
10713
10714'ABSU_EXPR'
10715     These nodes represent the absolute value of the single operand in
10716     equivalent unsigned type such that 'ABSU_EXPR' of 'TYPE_MIN' is
10717     well defined.
10718
10719'BIT_NOT_EXPR'
10720     These nodes represent bitwise complement, and will always have
10721     integral type.  The only operand is the value to be complemented.
10722
10723'TRUTH_NOT_EXPR'
10724     These nodes represent logical negation, and will always have
10725     integral (or boolean) type.  The operand is the value being
10726     negated.  The type of the operand and that of the result are always
10727     of 'BOOLEAN_TYPE' or 'INTEGER_TYPE'.
10728
10729'PREDECREMENT_EXPR'
10730'PREINCREMENT_EXPR'
10731'POSTDECREMENT_EXPR'
10732'POSTINCREMENT_EXPR'
10733     These nodes represent increment and decrement expressions.  The
10734     value of the single operand is computed, and the operand
10735     incremented or decremented.  In the case of 'PREDECREMENT_EXPR' and
10736     'PREINCREMENT_EXPR', the value of the expression is the value
10737     resulting after the increment or decrement; in the case of
10738     'POSTDECREMENT_EXPR' and 'POSTINCREMENT_EXPR' is the value before
10739     the increment or decrement occurs.  The type of the operand, like
10740     that of the result, will be either integral, boolean, or
10741     floating-point.
10742
10743'FIX_TRUNC_EXPR'
10744     These nodes represent conversion of a floating-point value to an
10745     integer.  The single operand will have a floating-point type, while
10746     the complete expression will have an integral (or boolean) type.
10747     The operand is rounded towards zero.
10748
10749'FLOAT_EXPR'
10750     These nodes represent conversion of an integral (or boolean) value
10751     to a floating-point value.  The single operand will have integral
10752     type, while the complete expression will have a floating-point
10753     type.
10754
10755     FIXME: How is the operand supposed to be rounded?  Is this
10756     dependent on '-mieee'?
10757
10758'COMPLEX_EXPR'
10759     These nodes are used to represent complex numbers constructed from
10760     two expressions of the same (integer or real) type.  The first
10761     operand is the real part and the second operand is the imaginary
10762     part.
10763
10764'CONJ_EXPR'
10765     These nodes represent the conjugate of their operand.
10766
10767'REALPART_EXPR'
10768'IMAGPART_EXPR'
10769     These nodes represent respectively the real and the imaginary parts
10770     of complex numbers (their sole argument).
10771
10772'NON_LVALUE_EXPR'
10773     These nodes indicate that their one and only operand is not an
10774     lvalue.  A back end can treat these identically to the single
10775     operand.
10776
10777'NOP_EXPR'
10778     These nodes are used to represent conversions that do not require
10779     any code-generation.  For example, conversion of a 'char*' to an
10780     'int*' does not require any code be generated; such a conversion is
10781     represented by a 'NOP_EXPR'.  The single operand is the expression
10782     to be converted.  The conversion from a pointer to a reference is
10783     also represented with a 'NOP_EXPR'.
10784
10785'CONVERT_EXPR'
10786     These nodes are similar to 'NOP_EXPR's, but are used in those
10787     situations where code may need to be generated.  For example, if an
10788     'int*' is converted to an 'int' code may need to be generated on
10789     some platforms.  These nodes are never used for C++-specific
10790     conversions, like conversions between pointers to different classes
10791     in an inheritance hierarchy.  Any adjustments that need to be made
10792     in such cases are always indicated explicitly.  Similarly, a
10793     user-defined conversion is never represented by a 'CONVERT_EXPR';
10794     instead, the function calls are made explicit.
10795
10796'FIXED_CONVERT_EXPR'
10797     These nodes are used to represent conversions that involve
10798     fixed-point values.  For example, from a fixed-point value to
10799     another fixed-point value, from an integer to a fixed-point value,
10800     from a fixed-point value to an integer, from a floating-point value
10801     to a fixed-point value, or from a fixed-point value to a
10802     floating-point value.
10803
10804'LSHIFT_EXPR'
10805'RSHIFT_EXPR'
10806     These nodes represent left and right shifts, respectively.  The
10807     first operand is the value to shift; it will always be of integral
10808     type.  The second operand is an expression for the number of bits
10809     by which to shift.  Right shift should be treated as arithmetic,
10810     i.e., the high-order bits should be zero-filled when the expression
10811     has unsigned type and filled with the sign bit when the expression
10812     has signed type.  Note that the result is undefined if the second
10813     operand is larger than or equal to the first operand's type size.
10814     Unlike most nodes, these can have a vector as first operand and a
10815     scalar as second operand.
10816
10817'BIT_IOR_EXPR'
10818'BIT_XOR_EXPR'
10819'BIT_AND_EXPR'
10820     These nodes represent bitwise inclusive or, bitwise exclusive or,
10821     and bitwise and, respectively.  Both operands will always have
10822     integral type.
10823
10824'TRUTH_ANDIF_EXPR'
10825'TRUTH_ORIF_EXPR'
10826     These nodes represent logical "and" and logical "or", respectively.
10827     These operators are not strict; i.e., the second operand is
10828     evaluated only if the value of the expression is not determined by
10829     evaluation of the first operand.  The type of the operands and that
10830     of the result are always of 'BOOLEAN_TYPE' or 'INTEGER_TYPE'.
10831
10832'TRUTH_AND_EXPR'
10833'TRUTH_OR_EXPR'
10834'TRUTH_XOR_EXPR'
10835     These nodes represent logical and, logical or, and logical
10836     exclusive or.  They are strict; both arguments are always
10837     evaluated.  There are no corresponding operators in C or C++, but
10838     the front end will sometimes generate these expressions anyhow, if
10839     it can tell that strictness does not matter.  The type of the
10840     operands and that of the result are always of 'BOOLEAN_TYPE' or
10841     'INTEGER_TYPE'.
10842
10843'POINTER_PLUS_EXPR'
10844     This node represents pointer arithmetic.  The first operand is
10845     always a pointer/reference type.  The second operand is always an
10846     unsigned integer type compatible with sizetype.  This and
10847     POINTER_DIFF_EXPR are the only binary arithmetic operators that can
10848     operate on pointer types.
10849
10850'POINTER_DIFF_EXPR'
10851     This node represents pointer subtraction.  The two operands always
10852     have pointer/reference type.  It returns a signed integer of the
10853     same precision as the pointers.  The behavior is undefined if the
10854     difference of the two pointers, seen as infinite precision
10855     non-negative integers, does not fit in the result type.  The result
10856     does not depend on the pointer type, it is not divided by the size
10857     of the pointed-to type.
10858
10859'PLUS_EXPR'
10860'MINUS_EXPR'
10861'MULT_EXPR'
10862     These nodes represent various binary arithmetic operations.
10863     Respectively, these operations are addition, subtraction (of the
10864     second operand from the first) and multiplication.  Their operands
10865     may have either integral or floating type, but there will never be
10866     case in which one operand is of floating type and the other is of
10867     integral type.
10868
10869     The behavior of these operations on signed arithmetic overflow is
10870     controlled by the 'flag_wrapv' and 'flag_trapv' variables.
10871
10872'MULT_HIGHPART_EXPR'
10873     This node represents the "high-part" of a widening multiplication.
10874     For an integral type with B bits of precision, the result is the
10875     most significant B bits of the full 2B product.
10876
10877'RDIV_EXPR'
10878     This node represents a floating point division operation.
10879
10880'TRUNC_DIV_EXPR'
10881'FLOOR_DIV_EXPR'
10882'CEIL_DIV_EXPR'
10883'ROUND_DIV_EXPR'
10884     These nodes represent integer division operations that return an
10885     integer result.  'TRUNC_DIV_EXPR' rounds towards zero,
10886     'FLOOR_DIV_EXPR' rounds towards negative infinity, 'CEIL_DIV_EXPR'
10887     rounds towards positive infinity and 'ROUND_DIV_EXPR' rounds to the
10888     closest integer.  Integer division in C and C++ is truncating, i.e.
10889     'TRUNC_DIV_EXPR'.
10890
10891     The behavior of these operations on signed arithmetic overflow,
10892     when dividing the minimum signed integer by minus one, is
10893     controlled by the 'flag_wrapv' and 'flag_trapv' variables.
10894
10895'TRUNC_MOD_EXPR'
10896'FLOOR_MOD_EXPR'
10897'CEIL_MOD_EXPR'
10898'ROUND_MOD_EXPR'
10899     These nodes represent the integer remainder or modulus operation.
10900     The integer modulus of two operands 'a' and 'b' is defined as 'a -
10901     (a/b)*b' where the division calculated using the corresponding
10902     division operator.  Hence for 'TRUNC_MOD_EXPR' this definition
10903     assumes division using truncation towards zero, i.e.
10904     'TRUNC_DIV_EXPR'.  Integer remainder in C and C++ uses truncating
10905     division, i.e. 'TRUNC_MOD_EXPR'.
10906
10907'EXACT_DIV_EXPR'
10908     The 'EXACT_DIV_EXPR' code is used to represent integer divisions
10909     where the numerator is known to be an exact multiple of the
10910     denominator.  This allows the backend to choose between the faster
10911     of 'TRUNC_DIV_EXPR', 'CEIL_DIV_EXPR' and 'FLOOR_DIV_EXPR' for the
10912     current target.
10913
10914'LT_EXPR'
10915'LE_EXPR'
10916'GT_EXPR'
10917'GE_EXPR'
10918'LTGT_EXPR'
10919'EQ_EXPR'
10920'NE_EXPR'
10921     These nodes represent the less than, less than or equal to, greater
10922     than, greater than or equal to, less or greater than, equal, and
10923     not equal comparison operators.  The first and second operands will
10924     either be both of integral type, both of floating type or both of
10925     vector type, except for LTGT_EXPR where they will only be both of
10926     floating type.  The result type of these expressions will always be
10927     of integral, boolean or signed integral vector type.  These
10928     operations return the result type's zero value for false, the
10929     result type's one value for true, and a vector whose elements are
10930     zero (false) or minus one (true) for vectors.
10931
10932     For floating point comparisons, if we honor IEEE NaNs and either
10933     operand is NaN, then 'NE_EXPR' always returns true and the
10934     remaining operators always return false.  On some targets,
10935     comparisons against an IEEE NaN, other than equality and
10936     inequality, may generate a floating-point exception.
10937
10938'ORDERED_EXPR'
10939'UNORDERED_EXPR'
10940     These nodes represent non-trapping ordered and unordered comparison
10941     operators.  These operations take two floating point operands and
10942     determine whether they are ordered or unordered relative to each
10943     other.  If either operand is an IEEE NaN, their comparison is
10944     defined to be unordered, otherwise the comparison is defined to be
10945     ordered.  The result type of these expressions will always be of
10946     integral or boolean type.  These operations return the result
10947     type's zero value for false, and the result type's one value for
10948     true.
10949
10950'UNLT_EXPR'
10951'UNLE_EXPR'
10952'UNGT_EXPR'
10953'UNGE_EXPR'
10954'UNEQ_EXPR'
10955     These nodes represent the unordered comparison operators.  These
10956     operations take two floating point operands and determine whether
10957     the operands are unordered or are less than, less than or equal to,
10958     greater than, greater than or equal to, or equal respectively.  For
10959     example, 'UNLT_EXPR' returns true if either operand is an IEEE NaN
10960     or the first operand is less than the second.  All these operations
10961     are guaranteed not to generate a floating point exception.  The
10962     result type of these expressions will always be of integral or
10963     boolean type.  These operations return the result type's zero value
10964     for false, and the result type's one value for true.
10965
10966'MODIFY_EXPR'
10967     These nodes represent assignment.  The left-hand side is the first
10968     operand; the right-hand side is the second operand.  The left-hand
10969     side will be a 'VAR_DECL', 'INDIRECT_REF', 'COMPONENT_REF', or
10970     other lvalue.
10971
10972     These nodes are used to represent not only assignment with '=' but
10973     also compound assignments (like '+='), by reduction to '='
10974     assignment.  In other words, the representation for 'i += 3' looks
10975     just like that for 'i = i + 3'.
10976
10977'INIT_EXPR'
10978     These nodes are just like 'MODIFY_EXPR', but are used only when a
10979     variable is initialized, rather than assigned to subsequently.
10980     This means that we can assume that the target of the initialization
10981     is not used in computing its own value; any reference to the lhs in
10982     computing the rhs is undefined.
10983
10984'COMPOUND_EXPR'
10985     These nodes represent comma-expressions.  The first operand is an
10986     expression whose value is computed and thrown away prior to the
10987     evaluation of the second operand.  The value of the entire
10988     expression is the value of the second operand.
10989
10990'COND_EXPR'
10991     These nodes represent '?:' expressions.  The first operand is of
10992     boolean or integral type.  If it evaluates to a nonzero value, the
10993     second operand should be evaluated, and returned as the value of
10994     the expression.  Otherwise, the third operand is evaluated, and
10995     returned as the value of the expression.
10996
10997     The second operand must have the same type as the entire
10998     expression, unless it unconditionally throws an exception or calls
10999     a noreturn function, in which case it should have void type.  The
11000     same constraints apply to the third operand.  This allows array
11001     bounds checks to be represented conveniently as '(i >= 0 && i < 10)
11002     ? i : abort()'.
11003
11004     As a GNU extension, the C language front-ends allow the second
11005     operand of the '?:' operator may be omitted in the source.  For
11006     example, 'x ? : 3' is equivalent to 'x ? x : 3', assuming that 'x'
11007     is an expression without side effects.  In the tree representation,
11008     however, the second operand is always present, possibly protected
11009     by 'SAVE_EXPR' if the first argument does cause side effects.
11010
11011'CALL_EXPR'
11012     These nodes are used to represent calls to functions, including
11013     non-static member functions.  'CALL_EXPR's are implemented as
11014     expression nodes with a variable number of operands.  Rather than
11015     using 'TREE_OPERAND' to extract them, it is preferable to use the
11016     specialized accessor macros and functions that operate specifically
11017     on 'CALL_EXPR' nodes.
11018
11019     'CALL_EXPR_FN' returns a pointer to the function to call; it is
11020     always an expression whose type is a 'POINTER_TYPE'.
11021
11022     The number of arguments to the call is returned by
11023     'call_expr_nargs', while the arguments themselves can be accessed
11024     with the 'CALL_EXPR_ARG' macro.  The arguments are zero-indexed and
11025     numbered left-to-right.  You can iterate over the arguments using
11026     'FOR_EACH_CALL_EXPR_ARG', as in:
11027
11028          tree call, arg;
11029          call_expr_arg_iterator iter;
11030          FOR_EACH_CALL_EXPR_ARG (arg, iter, call)
11031            /* arg is bound to successive arguments of call.  */
11032            ...;
11033
11034     For non-static member functions, there will be an operand
11035     corresponding to the 'this' pointer.  There will always be
11036     expressions corresponding to all of the arguments, even if the
11037     function is declared with default arguments and some arguments are
11038     not explicitly provided at the call sites.
11039
11040     'CALL_EXPR's also have a 'CALL_EXPR_STATIC_CHAIN' operand that is
11041     used to implement nested functions.  This operand is otherwise
11042     null.
11043
11044'CLEANUP_POINT_EXPR'
11045     These nodes represent full-expressions.  The single operand is an
11046     expression to evaluate.  Any destructor calls engendered by the
11047     creation of temporaries during the evaluation of that expression
11048     should be performed immediately after the expression is evaluated.
11049
11050'CONSTRUCTOR'
11051     These nodes represent the brace-enclosed initializers for a
11052     structure or an array.  They contain a sequence of component values
11053     made out of a vector of constructor_elt, which is a ('INDEX',
11054     'VALUE') pair.
11055
11056     If the 'TREE_TYPE' of the 'CONSTRUCTOR' is a 'RECORD_TYPE',
11057     'UNION_TYPE' or 'QUAL_UNION_TYPE' then the 'INDEX' of each node in
11058     the sequence will be a 'FIELD_DECL' and the 'VALUE' will be the
11059     expression used to initialize that field.
11060
11061     If the 'TREE_TYPE' of the 'CONSTRUCTOR' is an 'ARRAY_TYPE', then
11062     the 'INDEX' of each node in the sequence will be an 'INTEGER_CST'
11063     or a 'RANGE_EXPR' of two 'INTEGER_CST's.  A single 'INTEGER_CST'
11064     indicates which element of the array is being assigned to.  A
11065     'RANGE_EXPR' indicates an inclusive range of elements to
11066     initialize.  In both cases the 'VALUE' is the corresponding
11067     initializer.  It is re-evaluated for each element of a
11068     'RANGE_EXPR'.  If the 'INDEX' is 'NULL_TREE', then the initializer
11069     is for the next available array element.
11070
11071     In the front end, you should not depend on the fields appearing in
11072     any particular order.  However, in the middle end, fields must
11073     appear in declaration order.  You should not assume that all fields
11074     will be represented.  Unrepresented fields will be cleared
11075     (zeroed), unless the CONSTRUCTOR_NO_CLEARING flag is set, in which
11076     case their value becomes undefined.
11077
11078'COMPOUND_LITERAL_EXPR'
11079     These nodes represent ISO C99 compound literals.  The
11080     'COMPOUND_LITERAL_EXPR_DECL_EXPR' is a 'DECL_EXPR' containing an
11081     anonymous 'VAR_DECL' for the unnamed object represented by the
11082     compound literal; the 'DECL_INITIAL' of that 'VAR_DECL' is a
11083     'CONSTRUCTOR' representing the brace-enclosed list of initializers
11084     in the compound literal.  That anonymous 'VAR_DECL' can also be
11085     accessed directly by the 'COMPOUND_LITERAL_EXPR_DECL' macro.
11086
11087'SAVE_EXPR'
11088
11089     A 'SAVE_EXPR' represents an expression (possibly involving side
11090     effects) that is used more than once.  The side effects should
11091     occur only the first time the expression is evaluated.  Subsequent
11092     uses should just reuse the computed value.  The first operand to
11093     the 'SAVE_EXPR' is the expression to evaluate.  The side effects
11094     should be executed where the 'SAVE_EXPR' is first encountered in a
11095     depth-first preorder traversal of the expression tree.
11096
11097'TARGET_EXPR'
11098     A 'TARGET_EXPR' represents a temporary object.  The first operand
11099     is a 'VAR_DECL' for the temporary variable.  The second operand is
11100     the initializer for the temporary.  The initializer is evaluated
11101     and, if non-void, copied (bitwise) into the temporary.  If the
11102     initializer is void, that means that it will perform the
11103     initialization itself.
11104
11105     Often, a 'TARGET_EXPR' occurs on the right-hand side of an
11106     assignment, or as the second operand to a comma-expression which is
11107     itself the right-hand side of an assignment, etc.  In this case, we
11108     say that the 'TARGET_EXPR' is "normal"; otherwise, we say it is
11109     "orphaned".  For a normal 'TARGET_EXPR' the temporary variable
11110     should be treated as an alias for the left-hand side of the
11111     assignment, rather than as a new temporary variable.
11112
11113     The third operand to the 'TARGET_EXPR', if present, is a
11114     cleanup-expression (i.e., destructor call) for the temporary.  If
11115     this expression is orphaned, then this expression must be executed
11116     when the statement containing this expression is complete.  These
11117     cleanups must always be executed in the order opposite to that in
11118     which they were encountered.  Note that if a temporary is created
11119     on one branch of a conditional operator (i.e., in the second or
11120     third operand to a 'COND_EXPR'), the cleanup must be run only if
11121     that branch is actually executed.
11122
11123'VA_ARG_EXPR'
11124     This node is used to implement support for the C/C++ variable
11125     argument-list mechanism.  It represents expressions like 'va_arg
11126     (ap, type)'.  Its 'TREE_TYPE' yields the tree representation for
11127     'type' and its sole argument yields the representation for 'ap'.
11128
11129'ANNOTATE_EXPR'
11130     This node is used to attach markers to an expression.  The first
11131     operand is the annotated expression, the second is an 'INTEGER_CST'
11132     with a value from 'enum annot_expr_kind', the third is an
11133     'INTEGER_CST'.
11134
11135
11136File: gccint.info,  Node: Vectors,  Prev: Unary and Binary Expressions,  Up: Expression trees
11137
1113811.6.4 Vectors
11139--------------
11140
11141'VEC_DUPLICATE_EXPR'
11142     This node has a single operand and represents a vector in which
11143     every element is equal to that operand.
11144
11145'VEC_SERIES_EXPR'
11146     This node represents a vector formed from a scalar base and step,
11147     given as the first and second operands respectively.  Element I of
11148     the result is equal to 'BASE + I*STEP'.
11149
11150     This node is restricted to integral types, in order to avoid
11151     specifying the rounding behavior for floating-point types.
11152
11153'VEC_LSHIFT_EXPR'
11154'VEC_RSHIFT_EXPR'
11155     These nodes represent whole vector left and right shifts,
11156     respectively.  The first operand is the vector to shift; it will
11157     always be of vector type.  The second operand is an expression for
11158     the number of bits by which to shift.  Note that the result is
11159     undefined if the second operand is larger than or equal to the
11160     first operand's type size.
11161
11162'VEC_WIDEN_MULT_HI_EXPR'
11163'VEC_WIDEN_MULT_LO_EXPR'
11164     These nodes represent widening vector multiplication of the high
11165     and low parts of the two input vectors, respectively.  Their
11166     operands are vectors that contain the same number of elements ('N')
11167     of the same integral type.  The result is a vector that contains
11168     half as many elements, of an integral type whose size is twice as
11169     wide.  In the case of 'VEC_WIDEN_MULT_HI_EXPR' the high 'N/2'
11170     elements of the two vector are multiplied to produce the vector of
11171     'N/2' products.  In the case of 'VEC_WIDEN_MULT_LO_EXPR' the low
11172     'N/2' elements of the two vector are multiplied to produce the
11173     vector of 'N/2' products.
11174
11175'VEC_UNPACK_HI_EXPR'
11176'VEC_UNPACK_LO_EXPR'
11177     These nodes represent unpacking of the high and low parts of the
11178     input vector, respectively.  The single operand is a vector that
11179     contains 'N' elements of the same integral or floating point type.
11180     The result is a vector that contains half as many elements, of an
11181     integral or floating point type whose size is twice as wide.  In
11182     the case of 'VEC_UNPACK_HI_EXPR' the high 'N/2' elements of the
11183     vector are extracted and widened (promoted).  In the case of
11184     'VEC_UNPACK_LO_EXPR' the low 'N/2' elements of the vector are
11185     extracted and widened (promoted).
11186
11187'VEC_UNPACK_FLOAT_HI_EXPR'
11188'VEC_UNPACK_FLOAT_LO_EXPR'
11189     These nodes represent unpacking of the high and low parts of the
11190     input vector, where the values are converted from fixed point to
11191     floating point.  The single operand is a vector that contains 'N'
11192     elements of the same integral type.  The result is a vector that
11193     contains half as many elements of a floating point type whose size
11194     is twice as wide.  In the case of 'VEC_UNPACK_FLOAT_HI_EXPR' the
11195     high 'N/2' elements of the vector are extracted, converted and
11196     widened.  In the case of 'VEC_UNPACK_FLOAT_LO_EXPR' the low 'N/2'
11197     elements of the vector are extracted, converted and widened.
11198
11199'VEC_UNPACK_FIX_TRUNC_HI_EXPR'
11200'VEC_UNPACK_FIX_TRUNC_LO_EXPR'
11201     These nodes represent unpacking of the high and low parts of the
11202     input vector, where the values are truncated from floating point to
11203     fixed point.  The single operand is a vector that contains 'N'
11204     elements of the same floating point type.  The result is a vector
11205     that contains half as many elements of an integral type whose size
11206     is twice as wide.  In the case of 'VEC_UNPACK_FIX_TRUNC_HI_EXPR'
11207     the high 'N/2' elements of the vector are extracted and converted
11208     with truncation.  In the case of 'VEC_UNPACK_FIX_TRUNC_LO_EXPR' the
11209     low 'N/2' elements of the vector are extracted and converted with
11210     truncation.
11211
11212'VEC_PACK_TRUNC_EXPR'
11213     This node represents packing of truncated elements of the two input
11214     vectors into the output vector.  Input operands are vectors that
11215     contain the same number of elements of the same integral or
11216     floating point type.  The result is a vector that contains twice as
11217     many elements of an integral or floating point type whose size is
11218     half as wide.  The elements of the two vectors are demoted and
11219     merged (concatenated) to form the output vector.
11220
11221'VEC_PACK_SAT_EXPR'
11222     This node represents packing of elements of the two input vectors
11223     into the output vector using saturation.  Input operands are
11224     vectors that contain the same number of elements of the same
11225     integral type.  The result is a vector that contains twice as many
11226     elements of an integral type whose size is half as wide.  The
11227     elements of the two vectors are demoted and merged (concatenated)
11228     to form the output vector.
11229
11230'VEC_PACK_FIX_TRUNC_EXPR'
11231     This node represents packing of elements of the two input vectors
11232     into the output vector, where the values are converted from
11233     floating point to fixed point.  Input operands are vectors that
11234     contain the same number of elements of a floating point type.  The
11235     result is a vector that contains twice as many elements of an
11236     integral type whose size is half as wide.  The elements of the two
11237     vectors are merged (concatenated) to form the output vector.
11238
11239'VEC_PACK_FLOAT_EXPR'
11240     This node represents packing of elements of the two input vectors
11241     into the output vector, where the values are converted from fixed
11242     point to floating point.  Input operands are vectors that contain
11243     the same number of elements of an integral type.  The result is a
11244     vector that contains twice as many elements of floating point type
11245     whose size is half as wide.  The elements of the two vectors are
11246     merged (concatenated) to form the output vector.
11247
11248'VEC_COND_EXPR'
11249     These nodes represent '?:' expressions.  The three operands must be
11250     vectors of the same size and number of elements.  The second and
11251     third operands must have the same type as the entire expression.
11252     The first operand is of signed integral vector type.  If an element
11253     of the first operand evaluates to a zero value, the corresponding
11254     element of the result is taken from the third operand.  If it
11255     evaluates to a minus one value, it is taken from the second
11256     operand.  It should never evaluate to any other value currently,
11257     but optimizations should not rely on that property.  In contrast
11258     with a 'COND_EXPR', all operands are always evaluated.
11259
11260'SAD_EXPR'
11261     This node represents the Sum of Absolute Differences operation.
11262     The three operands must be vectors of integral types.  The first
11263     and second operand must have the same type.  The size of the vector
11264     element of the third operand must be at lease twice of the size of
11265     the vector element of the first and second one.  The SAD is
11266     calculated between the first and second operands, added to the
11267     third operand, and returned.
11268
11269
11270File: gccint.info,  Node: Statements,  Next: Functions,  Prev: Expression trees,  Up: GENERIC
11271
1127211.7 Statements
11273===============
11274
11275Most statements in GIMPLE are assignment statements, represented by
11276'GIMPLE_ASSIGN'.  No other C expressions can appear at statement level;
11277a reference to a volatile object is converted into a 'GIMPLE_ASSIGN'.
11278
11279 There are also several varieties of complex statements.
11280
11281* Menu:
11282
11283* Basic Statements::
11284* Blocks::
11285* Statement Sequences::
11286* Empty Statements::
11287* Jumps::
11288* Cleanups::
11289* OpenMP::
11290* OpenACC::
11291
11292
11293File: gccint.info,  Node: Basic Statements,  Next: Blocks,  Up: Statements
11294
1129511.7.1 Basic Statements
11296-----------------------
11297
11298'ASM_EXPR'
11299
11300     Used to represent an inline assembly statement.  For an inline
11301     assembly statement like:
11302          asm ("mov x, y");
11303     The 'ASM_STRING' macro will return a 'STRING_CST' node for '"mov x,
11304     y"'.  If the original statement made use of the extended-assembly
11305     syntax, then 'ASM_OUTPUTS', 'ASM_INPUTS', and 'ASM_CLOBBERS' will
11306     be the outputs, inputs, and clobbers for the statement, represented
11307     as 'STRING_CST' nodes.  The extended-assembly syntax looks like:
11308          asm ("fsinx %1,%0" : "=f" (result) : "f" (angle));
11309     The first string is the 'ASM_STRING', containing the instruction
11310     template.  The next two strings are the output and inputs,
11311     respectively; this statement has no clobbers.  As this example
11312     indicates, "plain" assembly statements are merely a special case of
11313     extended assembly statements; they have no cv-qualifiers, outputs,
11314     inputs, or clobbers.  All of the strings will be 'NUL'-terminated,
11315     and will contain no embedded 'NUL'-characters.
11316
11317     If the assembly statement is declared 'volatile', or if the
11318     statement was not an extended assembly statement, and is therefore
11319     implicitly volatile, then the predicate 'ASM_VOLATILE_P' will hold
11320     of the 'ASM_EXPR'.
11321
11322'DECL_EXPR'
11323
11324     Used to represent a local declaration.  The 'DECL_EXPR_DECL' macro
11325     can be used to obtain the entity declared.  This declaration may be
11326     a 'LABEL_DECL', indicating that the label declared is a local
11327     label.  (As an extension, GCC allows the declaration of labels with
11328     scope.)  In C, this declaration may be a 'FUNCTION_DECL',
11329     indicating the use of the GCC nested function extension.  For more
11330     information, *note Functions::.
11331
11332'LABEL_EXPR'
11333
11334     Used to represent a label.  The 'LABEL_DECL' declared by this
11335     statement can be obtained with the 'LABEL_EXPR_LABEL' macro.  The
11336     'IDENTIFIER_NODE' giving the name of the label can be obtained from
11337     the 'LABEL_DECL' with 'DECL_NAME'.
11338
11339'GOTO_EXPR'
11340
11341     Used to represent a 'goto' statement.  The 'GOTO_DESTINATION' will
11342     usually be a 'LABEL_DECL'.  However, if the "computed goto"
11343     extension has been used, the 'GOTO_DESTINATION' will be an
11344     arbitrary expression indicating the destination.  This expression
11345     will always have pointer type.
11346
11347'RETURN_EXPR'
11348
11349     Used to represent a 'return' statement.  Operand 0 represents the
11350     value to return.  It should either be the 'RESULT_DECL' for the
11351     containing function, or a 'MODIFY_EXPR' or 'INIT_EXPR' setting the
11352     function's 'RESULT_DECL'.  It will be 'NULL_TREE' if the statement
11353     was just
11354          return;
11355
11356'LOOP_EXPR'
11357     These nodes represent "infinite" loops.  The 'LOOP_EXPR_BODY'
11358     represents the body of the loop.  It should be executed forever,
11359     unless an 'EXIT_EXPR' is encountered.
11360
11361'EXIT_EXPR'
11362     These nodes represent conditional exits from the nearest enclosing
11363     'LOOP_EXPR'.  The single operand is the condition; if it is
11364     nonzero, then the loop should be exited.  An 'EXIT_EXPR' will only
11365     appear within a 'LOOP_EXPR'.
11366
11367'SWITCH_STMT'
11368
11369     Used to represent a 'switch' statement.  The 'SWITCH_STMT_COND' is
11370     the expression on which the switch is occurring.  See the
11371     documentation for an 'IF_STMT' for more information on the
11372     representation used for the condition.  The 'SWITCH_STMT_BODY' is
11373     the body of the switch statement.  The 'SWITCH_STMT_TYPE' is the
11374     original type of switch expression as given in the source, before
11375     any compiler conversions.
11376
11377'CASE_LABEL_EXPR'
11378
11379     Use to represent a 'case' label, range of 'case' labels, or a
11380     'default' label.  If 'CASE_LOW' is 'NULL_TREE', then this is a
11381     'default' label.  Otherwise, if 'CASE_HIGH' is 'NULL_TREE', then
11382     this is an ordinary 'case' label.  In this case, 'CASE_LOW' is an
11383     expression giving the value of the label.  Both 'CASE_LOW' and
11384     'CASE_HIGH' are 'INTEGER_CST' nodes.  These values will have the
11385     same type as the condition expression in the switch statement.
11386
11387     Otherwise, if both 'CASE_LOW' and 'CASE_HIGH' are defined, the
11388     statement is a range of case labels.  Such statements originate
11389     with the extension that allows users to write things of the form:
11390          case 2 ... 5:
11391     The first value will be 'CASE_LOW', while the second will be
11392     'CASE_HIGH'.
11393
11394'DEBUG_BEGIN_STMT'
11395
11396     Marks the beginning of a source statement, for purposes of debug
11397     information generation.
11398
11399
11400File: gccint.info,  Node: Blocks,  Next: Statement Sequences,  Prev: Basic Statements,  Up: Statements
11401
1140211.7.2 Blocks
11403-------------
11404
11405Block scopes and the variables they declare in GENERIC are expressed
11406using the 'BIND_EXPR' code, which in previous versions of GCC was
11407primarily used for the C statement-expression extension.
11408
11409 Variables in a block are collected into 'BIND_EXPR_VARS' in declaration
11410order through their 'TREE_CHAIN' field.  Any runtime initialization is
11411moved out of 'DECL_INITIAL' and into a statement in the controlled
11412block.  When gimplifying from C or C++, this initialization replaces the
11413'DECL_STMT'.  These variables will never require cleanups.  The scope of
11414these variables is just the body
11415
11416 Variable-length arrays (VLAs) complicate this process, as their size
11417often refers to variables initialized earlier in the block and their
11418initialization involves an explicit stack allocation.  To handle this,
11419we add an indirection and replace them with a pointer to stack space
11420allocated by means of 'alloca'.  In most cases, we also arrange for this
11421space to be reclaimed when the enclosing 'BIND_EXPR' is exited, the
11422exception to this being when there is an explicit call to 'alloca' in
11423the source code, in which case the stack is left depressed on exit of
11424the 'BIND_EXPR'.
11425
11426 A C++ program will usually contain more 'BIND_EXPR's than there are
11427syntactic blocks in the source code, since several C++ constructs have
11428implicit scopes associated with them.  On the other hand, although the
11429C++ front end uses pseudo-scopes to handle cleanups for objects with
11430destructors, these don't translate into the GIMPLE form; multiple
11431declarations at the same level use the same 'BIND_EXPR'.
11432
11433
11434File: gccint.info,  Node: Statement Sequences,  Next: Empty Statements,  Prev: Blocks,  Up: Statements
11435
1143611.7.3 Statement Sequences
11437--------------------------
11438
11439Multiple statements at the same nesting level are collected into a
11440'STATEMENT_LIST'.  Statement lists are modified and traversed using the
11441interface in 'tree-iterator.h'.
11442
11443
11444File: gccint.info,  Node: Empty Statements,  Next: Jumps,  Prev: Statement Sequences,  Up: Statements
11445
1144611.7.4 Empty Statements
11447-----------------------
11448
11449Whenever possible, statements with no effect are discarded.  But if they
11450are nested within another construct which cannot be discarded for some
11451reason, they are instead replaced with an empty statement, generated by
11452'build_empty_stmt'.  Initially, all empty statements were shared, after
11453the pattern of the Java front end, but this caused a lot of trouble in
11454practice.
11455
11456 An empty statement is represented as '(void)0'.
11457
11458
11459File: gccint.info,  Node: Jumps,  Next: Cleanups,  Prev: Empty Statements,  Up: Statements
11460
1146111.7.5 Jumps
11462------------
11463
11464Other jumps are expressed by either 'GOTO_EXPR' or 'RETURN_EXPR'.
11465
11466 The operand of a 'GOTO_EXPR' must be either a label or a variable
11467containing the address to jump to.
11468
11469 The operand of a 'RETURN_EXPR' is either 'NULL_TREE', 'RESULT_DECL', or
11470a 'MODIFY_EXPR' which sets the return value.  It would be nice to move
11471the 'MODIFY_EXPR' into a separate statement, but the special return
11472semantics in 'expand_return' make that difficult.  It may still happen
11473in the future, perhaps by moving most of that logic into
11474'expand_assignment'.
11475
11476
11477File: gccint.info,  Node: Cleanups,  Next: OpenMP,  Prev: Jumps,  Up: Statements
11478
1147911.7.6 Cleanups
11480---------------
11481
11482Destructors for local C++ objects and similar dynamic cleanups are
11483represented in GIMPLE by a 'TRY_FINALLY_EXPR'.  'TRY_FINALLY_EXPR' has
11484two operands, both of which are a sequence of statements to execute.
11485The first sequence is executed.  When it completes the second sequence
11486is executed.
11487
11488 The first sequence may complete in the following ways:
11489
11490  1. Execute the last statement in the sequence and fall off the end.
11491
11492  2. Execute a goto statement ('GOTO_EXPR') to an ordinary label outside
11493     the sequence.
11494
11495  3. Execute a return statement ('RETURN_EXPR').
11496
11497  4. Throw an exception.  This is currently not explicitly represented
11498     in GIMPLE.
11499
11500 The second sequence is not executed if the first sequence completes by
11501calling 'setjmp' or 'exit' or any other function that does not return.
11502The second sequence is also not executed if the first sequence completes
11503via a non-local goto or a computed goto (in general the compiler does
11504not know whether such a goto statement exits the first sequence or not,
11505so we assume that it doesn't).
11506
11507 After the second sequence is executed, if it completes normally by
11508falling off the end, execution continues wherever the first sequence
11509would have continued, by falling off the end, or doing a goto, etc.
11510
11511 If the second sequence is an 'EH_ELSE_EXPR' selector, then the sequence
11512in its first operand is used when the first sequence completes normally,
11513and that in its second operand is used for exceptional cleanups, i.e.,
11514when an exception propagates out of the first sequence.
11515
11516 'TRY_FINALLY_EXPR' complicates the flow graph, since the cleanup needs
11517to appear on every edge out of the controlled block; this reduces the
11518freedom to move code across these edges.  Therefore, the EH lowering
11519pass which runs before most of the optimization passes eliminates these
11520expressions by explicitly adding the cleanup to each edge.  Rethrowing
11521the exception is represented using 'RESX_EXPR'.
11522
11523
11524File: gccint.info,  Node: OpenMP,  Next: OpenACC,  Prev: Cleanups,  Up: Statements
11525
1152611.7.7 OpenMP
11527-------------
11528
11529All the statements starting with 'OMP_' represent directives and clauses
11530used by the OpenMP API <https://www.openmp.org>.
11531
11532'OMP_PARALLEL'
11533
11534     Represents '#pragma omp parallel [clause1 ... clauseN]'.  It has
11535     four operands:
11536
11537     Operand 'OMP_PARALLEL_BODY' is valid while in GENERIC and High
11538     GIMPLE forms.  It contains the body of code to be executed by all
11539     the threads.  During GIMPLE lowering, this operand becomes 'NULL'
11540     and the body is emitted linearly after 'OMP_PARALLEL'.
11541
11542     Operand 'OMP_PARALLEL_CLAUSES' is the list of clauses associated
11543     with the directive.
11544
11545     Operand 'OMP_PARALLEL_FN' is created by 'pass_lower_omp', it
11546     contains the 'FUNCTION_DECL' for the function that will contain the
11547     body of the parallel region.
11548
11549     Operand 'OMP_PARALLEL_DATA_ARG' is also created by
11550     'pass_lower_omp'.  If there are shared variables to be communicated
11551     to the children threads, this operand will contain the 'VAR_DECL'
11552     that contains all the shared values and variables.
11553
11554'OMP_FOR'
11555
11556     Represents '#pragma omp for [clause1 ... clauseN]'.  It has six
11557     operands:
11558
11559     Operand 'OMP_FOR_BODY' contains the loop body.
11560
11561     Operand 'OMP_FOR_CLAUSES' is the list of clauses associated with
11562     the directive.
11563
11564     Operand 'OMP_FOR_INIT' is the loop initialization code of the form
11565     'VAR = N1'.
11566
11567     Operand 'OMP_FOR_COND' is the loop conditional expression of the
11568     form 'VAR {<,>,<=,>=} N2'.
11569
11570     Operand 'OMP_FOR_INCR' is the loop index increment of the form 'VAR
11571     {+=,-=} INCR'.
11572
11573     Operand 'OMP_FOR_PRE_BODY' contains side effect code from operands
11574     'OMP_FOR_INIT', 'OMP_FOR_COND' and 'OMP_FOR_INC'.  These side
11575     effects are part of the 'OMP_FOR' block but must be evaluated
11576     before the start of loop body.
11577
11578     The loop index variable 'VAR' must be a signed integer variable,
11579     which is implicitly private to each thread.  Bounds 'N1' and 'N2'
11580     and the increment expression 'INCR' are required to be loop
11581     invariant integer expressions that are evaluated without any
11582     synchronization.  The evaluation order, frequency of evaluation and
11583     side effects are unspecified by the standard.
11584
11585'OMP_SECTIONS'
11586
11587     Represents '#pragma omp sections [clause1 ... clauseN]'.
11588
11589     Operand 'OMP_SECTIONS_BODY' contains the sections body, which in
11590     turn contains a set of 'OMP_SECTION' nodes for each of the
11591     concurrent sections delimited by '#pragma omp section'.
11592
11593     Operand 'OMP_SECTIONS_CLAUSES' is the list of clauses associated
11594     with the directive.
11595
11596'OMP_SECTION'
11597
11598     Section delimiter for 'OMP_SECTIONS'.
11599
11600'OMP_SINGLE'
11601
11602     Represents '#pragma omp single'.
11603
11604     Operand 'OMP_SINGLE_BODY' contains the body of code to be executed
11605     by a single thread.
11606
11607     Operand 'OMP_SINGLE_CLAUSES' is the list of clauses associated with
11608     the directive.
11609
11610'OMP_MASTER'
11611
11612     Represents '#pragma omp master'.
11613
11614     Operand 'OMP_MASTER_BODY' contains the body of code to be executed
11615     by the master thread.
11616
11617'OMP_ORDERED'
11618
11619     Represents '#pragma omp ordered'.
11620
11621     Operand 'OMP_ORDERED_BODY' contains the body of code to be executed
11622     in the sequential order dictated by the loop index variable.
11623
11624'OMP_CRITICAL'
11625
11626     Represents '#pragma omp critical [name]'.
11627
11628     Operand 'OMP_CRITICAL_BODY' is the critical section.
11629
11630     Operand 'OMP_CRITICAL_NAME' is an optional identifier to label the
11631     critical section.
11632
11633'OMP_RETURN'
11634
11635     This does not represent any OpenMP directive, it is an artificial
11636     marker to indicate the end of the body of an OpenMP.  It is used by
11637     the flow graph ('tree-cfg.c') and OpenMP region building code
11638     ('omp-low.c').
11639
11640'OMP_CONTINUE'
11641
11642     Similarly, this instruction does not represent an OpenMP directive,
11643     it is used by 'OMP_FOR' (and similar codes) as well as
11644     'OMP_SECTIONS' to mark the place where the code needs to loop to
11645     the next iteration, or the next section, respectively.
11646
11647     In some cases, 'OMP_CONTINUE' is placed right before 'OMP_RETURN'.
11648     But if there are cleanups that need to occur right after the
11649     looping body, it will be emitted between 'OMP_CONTINUE' and
11650     'OMP_RETURN'.
11651
11652'OMP_ATOMIC'
11653
11654     Represents '#pragma omp atomic'.
11655
11656     Operand 0 is the address at which the atomic operation is to be
11657     performed.
11658
11659     Operand 1 is the expression to evaluate.  The gimplifier tries
11660     three alternative code generation strategies.  Whenever possible,
11661     an atomic update built-in is used.  If that fails, a
11662     compare-and-swap loop is attempted.  If that also fails, a regular
11663     critical section around the expression is used.
11664
11665'OMP_CLAUSE'
11666
11667     Represents clauses associated with one of the 'OMP_' directives.
11668     Clauses are represented by separate subcodes defined in 'tree.h'.
11669     Clauses codes can be one of: 'OMP_CLAUSE_PRIVATE',
11670     'OMP_CLAUSE_SHARED', 'OMP_CLAUSE_FIRSTPRIVATE',
11671     'OMP_CLAUSE_LASTPRIVATE', 'OMP_CLAUSE_COPYIN',
11672     'OMP_CLAUSE_COPYPRIVATE', 'OMP_CLAUSE_IF',
11673     'OMP_CLAUSE_NUM_THREADS', 'OMP_CLAUSE_SCHEDULE',
11674     'OMP_CLAUSE_NOWAIT', 'OMP_CLAUSE_ORDERED', 'OMP_CLAUSE_DEFAULT',
11675     'OMP_CLAUSE_REDUCTION', 'OMP_CLAUSE_COLLAPSE', 'OMP_CLAUSE_UNTIED',
11676     'OMP_CLAUSE_FINAL', and 'OMP_CLAUSE_MERGEABLE'.  Each code
11677     represents the corresponding OpenMP clause.
11678
11679     Clauses associated with the same directive are chained together via
11680     'OMP_CLAUSE_CHAIN'.  Those clauses that accept a list of variables
11681     are restricted to exactly one, accessed with 'OMP_CLAUSE_VAR'.
11682     Therefore, multiple variables under the same clause 'C' need to be
11683     represented as multiple 'C' clauses chained together.  This
11684     facilitates adding new clauses during compilation.
11685
11686
11687File: gccint.info,  Node: OpenACC,  Prev: OpenMP,  Up: Statements
11688
1168911.7.8 OpenACC
11690--------------
11691
11692All the statements starting with 'OACC_' represent directives and
11693clauses used by the OpenACC API <https://www.openacc.org>.
11694
11695'OACC_CACHE'
11696
11697     Represents '#pragma acc cache (var ...)'.
11698
11699'OACC_DATA'
11700
11701     Represents '#pragma acc data [clause1 ... clauseN]'.
11702
11703'OACC_DECLARE'
11704
11705     Represents '#pragma acc declare [clause1 ... clauseN]'.
11706
11707'OACC_ENTER_DATA'
11708
11709     Represents '#pragma acc enter data [clause1 ... clauseN]'.
11710
11711'OACC_EXIT_DATA'
11712
11713     Represents '#pragma acc exit data [clause1 ... clauseN]'.
11714
11715'OACC_HOST_DATA'
11716
11717     Represents '#pragma acc host_data [clause1 ... clauseN]'.
11718
11719'OACC_KERNELS'
11720
11721     Represents '#pragma acc kernels [clause1 ... clauseN]'.
11722
11723'OACC_LOOP'
11724
11725     Represents '#pragma acc loop [clause1 ... clauseN]'.
11726
11727     See the description of the 'OMP_FOR' code.
11728
11729'OACC_PARALLEL'
11730
11731     Represents '#pragma acc parallel [clause1 ... clauseN]'.
11732
11733'OACC_SERIAL'
11734
11735     Represents '#pragma acc serial [clause1 ... clauseN]'.
11736
11737'OACC_UPDATE'
11738
11739     Represents '#pragma acc update [clause1 ... clauseN]'.
11740
11741
11742File: gccint.info,  Node: Functions,  Next: Language-dependent trees,  Prev: Statements,  Up: GENERIC
11743
1174411.8 Functions
11745==============
11746
11747A function is represented by a 'FUNCTION_DECL' node.  It stores the
11748basic pieces of the function such as body, parameters, and return type
11749as well as information on the surrounding context, visibility, and
11750linkage.
11751
11752* Menu:
11753
11754* Function Basics::     Function names, body, and parameters.
11755* Function Properties:: Context, linkage, etc.
11756
11757
11758File: gccint.info,  Node: Function Basics,  Next: Function Properties,  Up: Functions
11759
1176011.8.1 Function Basics
11761----------------------
11762
11763A function has four core parts: the name, the parameters, the result,
11764and the body.  The following macros and functions access these parts of
11765a 'FUNCTION_DECL' as well as other basic features:
11766'DECL_NAME'
11767     This macro returns the unqualified name of the function, as an
11768     'IDENTIFIER_NODE'.  For an instantiation of a function template,
11769     the 'DECL_NAME' is the unqualified name of the template, not
11770     something like 'f<int>'.  The value of 'DECL_NAME' is undefined
11771     when used on a constructor, destructor, overloaded operator, or
11772     type-conversion operator, or any function that is implicitly
11773     generated by the compiler.  See below for macros that can be used
11774     to distinguish these cases.
11775
11776'DECL_ASSEMBLER_NAME'
11777     This macro returns the mangled name of the function, also an
11778     'IDENTIFIER_NODE'.  This name does not contain leading underscores
11779     on systems that prefix all identifiers with underscores.  The
11780     mangled name is computed in the same way on all platforms; if
11781     special processing is required to deal with the object file format
11782     used on a particular platform, it is the responsibility of the back
11783     end to perform those modifications.  (Of course, the back end
11784     should not modify 'DECL_ASSEMBLER_NAME' itself.)
11785
11786     Using 'DECL_ASSEMBLER_NAME' will cause additional memory to be
11787     allocated (for the mangled name of the entity) so it should be used
11788     only when emitting assembly code.  It should not be used within the
11789     optimizers to determine whether or not two declarations are the
11790     same, even though some of the existing optimizers do use it in that
11791     way.  These uses will be removed over time.
11792
11793'DECL_ARGUMENTS'
11794     This macro returns the 'PARM_DECL' for the first argument to the
11795     function.  Subsequent 'PARM_DECL' nodes can be obtained by
11796     following the 'TREE_CHAIN' links.
11797
11798'DECL_RESULT'
11799     This macro returns the 'RESULT_DECL' for the function.
11800
11801'DECL_SAVED_TREE'
11802     This macro returns the complete body of the function.
11803
11804'TREE_TYPE'
11805     This macro returns the 'FUNCTION_TYPE' or 'METHOD_TYPE' for the
11806     function.
11807
11808'DECL_INITIAL'
11809     A function that has a definition in the current translation unit
11810     will have a non-'NULL' 'DECL_INITIAL'.  However, back ends should
11811     not make use of the particular value given by 'DECL_INITIAL'.
11812
11813     It should contain a tree of 'BLOCK' nodes that mirrors the scopes
11814     that variables are bound in the function.  Each block contains a
11815     list of decls declared in a basic block, a pointer to a chain of
11816     blocks at the next lower scope level, then a pointer to the next
11817     block at the same level and a backpointer to the parent 'BLOCK' or
11818     'FUNCTION_DECL'.  So given a function as follows:
11819
11820          void foo()
11821          {
11822            int a;
11823            {
11824              int b;
11825            }
11826            int c;
11827          }
11828
11829     you would get the following:
11830
11831          tree foo = FUNCTION_DECL;
11832          tree decl_a = VAR_DECL;
11833          tree decl_b = VAR_DECL;
11834          tree decl_c = VAR_DECL;
11835          tree block_a = BLOCK;
11836          tree block_b = BLOCK;
11837          tree block_c = BLOCK;
11838          BLOCK_VARS(block_a) = decl_a;
11839          BLOCK_SUBBLOCKS(block_a) = block_b;
11840          BLOCK_CHAIN(block_a) = block_c;
11841          BLOCK_SUPERCONTEXT(block_a) = foo;
11842          BLOCK_VARS(block_b) = decl_b;
11843          BLOCK_SUPERCONTEXT(block_b) = block_a;
11844          BLOCK_VARS(block_c) = decl_c;
11845          BLOCK_SUPERCONTEXT(block_c) = foo;
11846          DECL_INITIAL(foo) = block_a;
11847
11848
11849File: gccint.info,  Node: Function Properties,  Prev: Function Basics,  Up: Functions
11850
1185111.8.2 Function Properties
11852--------------------------
11853
11854To determine the scope of a function, you can use the 'DECL_CONTEXT'
11855macro.  This macro will return the class (either a 'RECORD_TYPE' or a
11856'UNION_TYPE') or namespace (a 'NAMESPACE_DECL') of which the function is
11857a member.  For a virtual function, this macro returns the class in which
11858the function was actually defined, not the base class in which the
11859virtual declaration occurred.
11860
11861 In C, the 'DECL_CONTEXT' for a function maybe another function.  This
11862representation indicates that the GNU nested function extension is in
11863use.  For details on the semantics of nested functions, see the GCC
11864Manual.  The nested function can refer to local variables in its
11865containing function.  Such references are not explicitly marked in the
11866tree structure; back ends must look at the 'DECL_CONTEXT' for the
11867referenced 'VAR_DECL'.  If the 'DECL_CONTEXT' for the referenced
11868'VAR_DECL' is not the same as the function currently being processed,
11869and neither 'DECL_EXTERNAL' nor 'TREE_STATIC' hold, then the reference
11870is to a local variable in a containing function, and the back end must
11871take appropriate action.
11872
11873'DECL_EXTERNAL'
11874     This predicate holds if the function is undefined.
11875
11876'TREE_PUBLIC'
11877     This predicate holds if the function has external linkage.
11878
11879'TREE_STATIC'
11880     This predicate holds if the function has been defined.
11881
11882'TREE_THIS_VOLATILE'
11883     This predicate holds if the function does not return normally.
11884
11885'TREE_READONLY'
11886     This predicate holds if the function can only read its arguments.
11887
11888'DECL_PURE_P'
11889     This predicate holds if the function can only read its arguments,
11890     but may also read global memory.
11891
11892'DECL_VIRTUAL_P'
11893     This predicate holds if the function is virtual.
11894
11895'DECL_ARTIFICIAL'
11896     This macro holds if the function was implicitly generated by the
11897     compiler, rather than explicitly declared.  In addition to
11898     implicitly generated class member functions, this macro holds for
11899     the special functions created to implement static initialization
11900     and destruction, to compute run-time type information, and so
11901     forth.
11902
11903'DECL_FUNCTION_SPECIFIC_TARGET'
11904     This macro returns a tree node that holds the target options that
11905     are to be used to compile this particular function or 'NULL_TREE'
11906     if the function is to be compiled with the target options specified
11907     on the command line.
11908
11909'DECL_FUNCTION_SPECIFIC_OPTIMIZATION'
11910     This macro returns a tree node that holds the optimization options
11911     that are to be used to compile this particular function or
11912     'NULL_TREE' if the function is to be compiled with the optimization
11913     options specified on the command line.
11914
11915
11916File: gccint.info,  Node: Language-dependent trees,  Next: C and C++ Trees,  Prev: Functions,  Up: GENERIC
11917
1191811.9 Language-dependent trees
11919=============================
11920
11921Front ends may wish to keep some state associated with various GENERIC
11922trees while parsing.  To support this, trees provide a set of flags that
11923may be used by the front end.  They are accessed using
11924'TREE_LANG_FLAG_n' where 'n' is currently 0 through 6.
11925
11926 If necessary, a front end can use some language-dependent tree codes in
11927its GENERIC representation, so long as it provides a hook for converting
11928them to GIMPLE and doesn't expect them to work with any (hypothetical)
11929optimizers that run before the conversion to GIMPLE.  The intermediate
11930representation used while parsing C and C++ looks very little like
11931GENERIC, but the C and C++ gimplifier hooks are perfectly happy to take
11932it as input and spit out GIMPLE.
11933
11934
11935File: gccint.info,  Node: C and C++ Trees,  Prev: Language-dependent trees,  Up: GENERIC
11936
1193711.10 C and C++ Trees
11938=====================
11939
11940This section documents the internal representation used by GCC to
11941represent C and C++ source programs.  When presented with a C or C++
11942source program, GCC parses the program, performs semantic analysis
11943(including the generation of error messages), and then produces the
11944internal representation described here.  This representation contains a
11945complete representation for the entire translation unit provided as
11946input to the front end.  This representation is then typically processed
11947by a code-generator in order to produce machine code, but could also be
11948used in the creation of source browsers, intelligent editors, automatic
11949documentation generators, interpreters, and any other programs needing
11950the ability to process C or C++ code.
11951
11952 This section explains the internal representation.  In particular, it
11953documents the internal representation for C and C++ source constructs,
11954and the macros, functions, and variables that can be used to access
11955these constructs.  The C++ representation is largely a superset of the
11956representation used in the C front end.  There is only one construct
11957used in C that does not appear in the C++ front end and that is the GNU
11958"nested function" extension.  Many of the macros documented here do not
11959apply in C because the corresponding language constructs do not appear
11960in C.
11961
11962 The C and C++ front ends generate a mix of GENERIC trees and ones
11963specific to C and C++.  These language-specific trees are higher-level
11964constructs than the ones in GENERIC to make the parser's job easier.
11965This section describes those trees that aren't part of GENERIC as well
11966as aspects of GENERIC trees that are treated in a language-specific
11967manner.
11968
11969 If you are developing a "back end", be it is a code-generator or some
11970other tool, that uses this representation, you may occasionally find
11971that you need to ask questions not easily answered by the functions and
11972macros available here.  If that situation occurs, it is quite likely
11973that GCC already supports the functionality you desire, but that the
11974interface is simply not documented here.  In that case, you should ask
11975the GCC maintainers (via mail to <gcc@gcc.gnu.org>) about documenting
11976the functionality you require.  Similarly, if you find yourself writing
11977functions that do not deal directly with your back end, but instead
11978might be useful to other people using the GCC front end, you should
11979submit your patches for inclusion in GCC.
11980
11981* Menu:
11982
11983* Types for C++::               Fundamental and aggregate types.
11984* Namespaces::                  Namespaces.
11985* Classes::                     Classes.
11986* Functions for C++::           Overloading and accessors for C++.
11987* Statements for C++::          Statements specific to C and C++.
11988* C++ Expressions::    From 'typeid' to 'throw'.
11989
11990
11991File: gccint.info,  Node: Types for C++,  Next: Namespaces,  Up: C and C++ Trees
11992
1199311.10.1 Types for C++
11994---------------------
11995
11996In C++, an array type is not qualified; rather the type of the array
11997elements is qualified.  This situation is reflected in the intermediate
11998representation.  The macros described here will always examine the
11999qualification of the underlying element type when applied to an array
12000type.  (If the element type is itself an array, then the recursion
12001continues until a non-array type is found, and the qualification of this
12002type is examined.)  So, for example, 'CP_TYPE_CONST_P' will hold of the
12003type 'const int ()[7]', denoting an array of seven 'int's.
12004
12005 The following functions and macros deal with cv-qualification of types:
12006'cp_type_quals'
12007     This function returns the set of type qualifiers applied to this
12008     type.  This value is 'TYPE_UNQUALIFIED' if no qualifiers have been
12009     applied.  The 'TYPE_QUAL_CONST' bit is set if the type is
12010     'const'-qualified.  The 'TYPE_QUAL_VOLATILE' bit is set if the type
12011     is 'volatile'-qualified.  The 'TYPE_QUAL_RESTRICT' bit is set if
12012     the type is 'restrict'-qualified.
12013
12014'CP_TYPE_CONST_P'
12015     This macro holds if the type is 'const'-qualified.
12016
12017'CP_TYPE_VOLATILE_P'
12018     This macro holds if the type is 'volatile'-qualified.
12019
12020'CP_TYPE_RESTRICT_P'
12021     This macro holds if the type is 'restrict'-qualified.
12022
12023'CP_TYPE_CONST_NON_VOLATILE_P'
12024     This predicate holds for a type that is 'const'-qualified, but
12025     _not_ 'volatile'-qualified; other cv-qualifiers are ignored as
12026     well: only the 'const'-ness is tested.
12027
12028 A few other macros and functions are usable with all types:
12029'TYPE_SIZE'
12030     The number of bits required to represent the type, represented as
12031     an 'INTEGER_CST'.  For an incomplete type, 'TYPE_SIZE' will be
12032     'NULL_TREE'.
12033
12034'TYPE_ALIGN'
12035     The alignment of the type, in bits, represented as an 'int'.
12036
12037'TYPE_NAME'
12038     This macro returns a declaration (in the form of a 'TYPE_DECL') for
12039     the type.  (Note this macro does _not_ return an 'IDENTIFIER_NODE',
12040     as you might expect, given its name!)  You can look at the
12041     'DECL_NAME' of the 'TYPE_DECL' to obtain the actual name of the
12042     type.  The 'TYPE_NAME' will be 'NULL_TREE' for a type that is not a
12043     built-in type, the result of a typedef, or a named class type.
12044
12045'CP_INTEGRAL_TYPE'
12046     This predicate holds if the type is an integral type.  Notice that
12047     in C++, enumerations are _not_ integral types.
12048
12049'ARITHMETIC_TYPE_P'
12050     This predicate holds if the type is an integral type (in the C++
12051     sense) or a floating point type.
12052
12053'CLASS_TYPE_P'
12054     This predicate holds for a class-type.
12055
12056'TYPE_BUILT_IN'
12057     This predicate holds for a built-in type.
12058
12059'TYPE_PTRDATAMEM_P'
12060     This predicate holds if the type is a pointer to data member.
12061
12062'TYPE_PTR_P'
12063     This predicate holds if the type is a pointer type, and the pointee
12064     is not a data member.
12065
12066'TYPE_PTRFN_P'
12067     This predicate holds for a pointer to function type.
12068
12069'TYPE_PTROB_P'
12070     This predicate holds for a pointer to object type.  Note however
12071     that it does not hold for the generic pointer to object type 'void
12072     *'.  You may use 'TYPE_PTROBV_P' to test for a pointer to object
12073     type as well as 'void *'.
12074
12075 The table below describes types specific to C and C++ as well as
12076language-dependent info about GENERIC types.
12077
12078'POINTER_TYPE'
12079     Used to represent pointer types, and pointer to data member types.
12080     If 'TREE_TYPE' is a pointer to data member type, then
12081     'TYPE_PTRDATAMEM_P' will hold.  For a pointer to data member type
12082     of the form 'T X::*', 'TYPE_PTRMEM_CLASS_TYPE' will be the type
12083     'X', while 'TYPE_PTRMEM_POINTED_TO_TYPE' will be the type 'T'.
12084
12085'RECORD_TYPE'
12086     Used to represent 'struct' and 'class' types in C and C++.  If
12087     'TYPE_PTRMEMFUNC_P' holds, then this type is a pointer-to-member
12088     type.  In that case, the 'TYPE_PTRMEMFUNC_FN_TYPE' is a
12089     'POINTER_TYPE' pointing to a 'METHOD_TYPE'.  The 'METHOD_TYPE' is
12090     the type of a function pointed to by the pointer-to-member
12091     function.  If 'TYPE_PTRMEMFUNC_P' does not hold, this type is a
12092     class type.  For more information, *note Classes::.
12093
12094'UNKNOWN_TYPE'
12095     This node is used to represent a type the knowledge of which is
12096     insufficient for a sound processing.
12097
12098'TYPENAME_TYPE'
12099     Used to represent a construct of the form 'typename T::A'.  The
12100     'TYPE_CONTEXT' is 'T'; the 'TYPE_NAME' is an 'IDENTIFIER_NODE' for
12101     'A'.  If the type is specified via a template-id, then
12102     'TYPENAME_TYPE_FULLNAME' yields a 'TEMPLATE_ID_EXPR'.  The
12103     'TREE_TYPE' is non-'NULL' if the node is implicitly generated in
12104     support for the implicit typename extension; in which case the
12105     'TREE_TYPE' is a type node for the base-class.
12106
12107'TYPEOF_TYPE'
12108     Used to represent the '__typeof__' extension.  The 'TYPE_FIELDS' is
12109     the expression the type of which is being represented.
12110
12111
12112File: gccint.info,  Node: Namespaces,  Next: Classes,  Prev: Types for C++,  Up: C and C++ Trees
12113
1211411.10.2 Namespaces
12115------------------
12116
12117The root of the entire intermediate representation is the variable
12118'global_namespace'.  This is the namespace specified with '::' in C++
12119source code.  All other namespaces, types, variables, functions, and so
12120forth can be found starting with this namespace.
12121
12122 However, except for the fact that it is distinguished as the root of
12123the representation, the global namespace is no different from any other
12124namespace.  Thus, in what follows, we describe namespaces generally,
12125rather than the global namespace in particular.
12126
12127 A namespace is represented by a 'NAMESPACE_DECL' node.
12128
12129 The following macros and functions can be used on a 'NAMESPACE_DECL':
12130
12131'DECL_NAME'
12132     This macro is used to obtain the 'IDENTIFIER_NODE' corresponding to
12133     the unqualified name of the name of the namespace (*note
12134     Identifiers::).  The name of the global namespace is '::', even
12135     though in C++ the global namespace is unnamed.  However, you should
12136     use comparison with 'global_namespace', rather than 'DECL_NAME' to
12137     determine whether or not a namespace is the global one.  An unnamed
12138     namespace will have a 'DECL_NAME' equal to
12139     'anonymous_namespace_name'.  Within a single translation unit, all
12140     unnamed namespaces will have the same name.
12141
12142'DECL_CONTEXT'
12143     This macro returns the enclosing namespace.  The 'DECL_CONTEXT' for
12144     the 'global_namespace' is 'NULL_TREE'.
12145
12146'DECL_NAMESPACE_ALIAS'
12147     If this declaration is for a namespace alias, then
12148     'DECL_NAMESPACE_ALIAS' is the namespace for which this one is an
12149     alias.
12150
12151     Do not attempt to use 'cp_namespace_decls' for a namespace which is
12152     an alias.  Instead, follow 'DECL_NAMESPACE_ALIAS' links until you
12153     reach an ordinary, non-alias, namespace, and call
12154     'cp_namespace_decls' there.
12155
12156'DECL_NAMESPACE_STD_P'
12157     This predicate holds if the namespace is the special '::std'
12158     namespace.
12159
12160'cp_namespace_decls'
12161     This function will return the declarations contained in the
12162     namespace, including types, overloaded functions, other namespaces,
12163     and so forth.  If there are no declarations, this function will
12164     return 'NULL_TREE'.  The declarations are connected through their
12165     'TREE_CHAIN' fields.
12166
12167     Although most entries on this list will be declarations,
12168     'TREE_LIST' nodes may also appear.  In this case, the 'TREE_VALUE'
12169     will be an 'OVERLOAD'.  The value of the 'TREE_PURPOSE' is
12170     unspecified; back ends should ignore this value.  As with the other
12171     kinds of declarations returned by 'cp_namespace_decls', the
12172     'TREE_CHAIN' will point to the next declaration in this list.
12173
12174     For more information on the kinds of declarations that can occur on
12175     this list, *Note Declarations::.  Some declarations will not appear
12176     on this list.  In particular, no 'FIELD_DECL', 'LABEL_DECL', or
12177     'PARM_DECL' nodes will appear here.
12178
12179     This function cannot be used with namespaces that have
12180     'DECL_NAMESPACE_ALIAS' set.
12181
12182
12183File: gccint.info,  Node: Classes,  Next: Functions for C++,  Prev: Namespaces,  Up: C and C++ Trees
12184
1218511.10.3 Classes
12186---------------
12187
12188Besides namespaces, the other high-level scoping construct in C++ is the
12189class.  (Throughout this manual the term "class" is used to mean the
12190types referred to in the ANSI/ISO C++ Standard as classes; these include
12191types defined with the 'class', 'struct', and 'union' keywords.)
12192
12193 A class type is represented by either a 'RECORD_TYPE' or a
12194'UNION_TYPE'.  A class declared with the 'union' tag is represented by a
12195'UNION_TYPE', while classes declared with either the 'struct' or the
12196'class' tag are represented by 'RECORD_TYPE's.  You can use the
12197'CLASSTYPE_DECLARED_CLASS' macro to discern whether or not a particular
12198type is a 'class' as opposed to a 'struct'.  This macro will be true
12199only for classes declared with the 'class' tag.
12200
12201 Almost all members are available on the 'TYPE_FIELDS' list.  Given one
12202member, the next can be found by following the 'TREE_CHAIN'.  You should
12203not depend in any way on the order in which fields appear on this list.
12204All nodes on this list will be 'DECL' nodes.  A 'FIELD_DECL' is used to
12205represent a non-static data member, a 'VAR_DECL' is used to represent a
12206static data member, and a 'TYPE_DECL' is used to represent a type.  Note
12207that the 'CONST_DECL' for an enumeration constant will appear on this
12208list, if the enumeration type was declared in the class.  (Of course,
12209the 'TYPE_DECL' for the enumeration type will appear here as well.)
12210There are no entries for base classes on this list.  In particular,
12211there is no 'FIELD_DECL' for the "base-class portion" of an object.  If
12212a function member is overloaded, each of the overloaded functions
12213appears; no 'OVERLOAD' nodes appear on the 'TYPE_FIELDS' list.
12214Implicitly declared functions (including default constructors, copy
12215constructors, assignment operators, and destructors) will appear on this
12216list as well.
12217
12218 The 'TYPE_VFIELD' is a compiler-generated field used to point to
12219virtual function tables.  It may or may not appear on the 'TYPE_FIELDS'
12220list.  However, back ends should handle the 'TYPE_VFIELD' just like all
12221the entries on the 'TYPE_FIELDS' list.
12222
12223 Every class has an associated "binfo", which can be obtained with
12224'TYPE_BINFO'.  Binfos are used to represent base-classes.  The binfo
12225given by 'TYPE_BINFO' is the degenerate case, whereby every class is
12226considered to be its own base-class.  The base binfos for a particular
12227binfo are held in a vector, whose length is obtained with
12228'BINFO_N_BASE_BINFOS'.  The base binfos themselves are obtained with
12229'BINFO_BASE_BINFO' and 'BINFO_BASE_ITERATE'.  To add a new binfo, use
12230'BINFO_BASE_APPEND'.  The vector of base binfos can be obtained with
12231'BINFO_BASE_BINFOS', but normally you do not need to use that.  The
12232class type associated with a binfo is given by 'BINFO_TYPE'.  It is not
12233always the case that 'BINFO_TYPE (TYPE_BINFO (x))', because of typedefs
12234and qualified types.  Neither is it the case that 'TYPE_BINFO
12235(BINFO_TYPE (y))' is the same binfo as 'y'.  The reason is that if 'y'
12236is a binfo representing a base-class 'B' of a derived class 'D', then
12237'BINFO_TYPE (y)' will be 'B', and 'TYPE_BINFO (BINFO_TYPE (y))' will be
12238'B' as its own base-class, rather than as a base-class of 'D'.
12239
12240 The access to a base type can be found with 'BINFO_BASE_ACCESS'.  This
12241will produce 'access_public_node', 'access_private_node' or
12242'access_protected_node'.  If bases are always public,
12243'BINFO_BASE_ACCESSES' may be 'NULL'.
12244
12245 'BINFO_VIRTUAL_P' is used to specify whether the binfo is inherited
12246virtually or not.  The other flags, 'BINFO_FLAG_0' to 'BINFO_FLAG_6',
12247can be used for language specific use.
12248
12249 The following macros can be used on a tree node representing a
12250class-type.
12251
12252'LOCAL_CLASS_P'
12253     This predicate holds if the class is local class _i.e._ declared
12254     inside a function body.
12255
12256'TYPE_POLYMORPHIC_P'
12257     This predicate holds if the class has at least one virtual function
12258     (declared or inherited).
12259
12260'TYPE_HAS_DEFAULT_CONSTRUCTOR'
12261     This predicate holds whenever its argument represents a class-type
12262     with default constructor.
12263
12264'CLASSTYPE_HAS_MUTABLE'
12265'TYPE_HAS_MUTABLE_P'
12266     These predicates hold for a class-type having a mutable data
12267     member.
12268
12269'CLASSTYPE_NON_POD_P'
12270     This predicate holds only for class-types that are not PODs.
12271
12272'TYPE_HAS_NEW_OPERATOR'
12273     This predicate holds for a class-type that defines 'operator new'.
12274
12275'TYPE_HAS_ARRAY_NEW_OPERATOR'
12276     This predicate holds for a class-type for which 'operator new[]' is
12277     defined.
12278
12279'TYPE_OVERLOADS_CALL_EXPR'
12280     This predicate holds for class-type for which the function call
12281     'operator()' is overloaded.
12282
12283'TYPE_OVERLOADS_ARRAY_REF'
12284     This predicate holds for a class-type that overloads 'operator[]'
12285
12286'TYPE_OVERLOADS_ARROW'
12287     This predicate holds for a class-type for which 'operator->' is
12288     overloaded.
12289
12290
12291File: gccint.info,  Node: Functions for C++,  Next: Statements for C++,  Prev: Classes,  Up: C and C++ Trees
12292
1229311.10.4 Functions for C++
12294-------------------------
12295
12296A function is represented by a 'FUNCTION_DECL' node.  A set of
12297overloaded functions is sometimes represented by an 'OVERLOAD' node.
12298
12299 An 'OVERLOAD' node is not a declaration, so none of the 'DECL_' macros
12300should be used on an 'OVERLOAD'.  An 'OVERLOAD' node is similar to a
12301'TREE_LIST'.  Use 'OVL_CURRENT' to get the function associated with an
12302'OVERLOAD' node; use 'OVL_NEXT' to get the next 'OVERLOAD' node in the
12303list of overloaded functions.  The macros 'OVL_CURRENT' and 'OVL_NEXT'
12304are actually polymorphic; you can use them to work with 'FUNCTION_DECL'
12305nodes as well as with overloads.  In the case of a 'FUNCTION_DECL',
12306'OVL_CURRENT' will always return the function itself, and 'OVL_NEXT'
12307will always be 'NULL_TREE'.
12308
12309 To determine the scope of a function, you can use the 'DECL_CONTEXT'
12310macro.  This macro will return the class (either a 'RECORD_TYPE' or a
12311'UNION_TYPE') or namespace (a 'NAMESPACE_DECL') of which the function is
12312a member.  For a virtual function, this macro returns the class in which
12313the function was actually defined, not the base class in which the
12314virtual declaration occurred.
12315
12316 If a friend function is defined in a class scope, the
12317'DECL_FRIEND_CONTEXT' macro can be used to determine the class in which
12318it was defined.  For example, in
12319     class C { friend void f() {} };
12320the 'DECL_CONTEXT' for 'f' will be the 'global_namespace', but the
12321'DECL_FRIEND_CONTEXT' will be the 'RECORD_TYPE' for 'C'.
12322
12323 The following macros and functions can be used on a 'FUNCTION_DECL':
12324'DECL_MAIN_P'
12325     This predicate holds for a function that is the program entry point
12326     '::code'.
12327
12328'DECL_LOCAL_FUNCTION_P'
12329     This predicate holds if the function was declared at block scope,
12330     even though it has a global scope.
12331
12332'DECL_ANTICIPATED'
12333     This predicate holds if the function is a built-in function but its
12334     prototype is not yet explicitly declared.
12335
12336'DECL_EXTERN_C_FUNCTION_P'
12337     This predicate holds if the function is declared as an ''extern
12338     "C"'' function.
12339
12340'DECL_LINKONCE_P'
12341     This macro holds if multiple copies of this function may be emitted
12342     in various translation units.  It is the responsibility of the
12343     linker to merge the various copies.  Template instantiations are
12344     the most common example of functions for which 'DECL_LINKONCE_P'
12345     holds; G++ instantiates needed templates in all translation units
12346     which require them, and then relies on the linker to remove
12347     duplicate instantiations.
12348
12349     FIXME: This macro is not yet implemented.
12350
12351'DECL_FUNCTION_MEMBER_P'
12352     This macro holds if the function is a member of a class, rather
12353     than a member of a namespace.
12354
12355'DECL_STATIC_FUNCTION_P'
12356     This predicate holds if the function a static member function.
12357
12358'DECL_NONSTATIC_MEMBER_FUNCTION_P'
12359     This macro holds for a non-static member function.
12360
12361'DECL_CONST_MEMFUNC_P'
12362     This predicate holds for a 'const'-member function.
12363
12364'DECL_VOLATILE_MEMFUNC_P'
12365     This predicate holds for a 'volatile'-member function.
12366
12367'DECL_CONSTRUCTOR_P'
12368     This macro holds if the function is a constructor.
12369
12370'DECL_NONCONVERTING_P'
12371     This predicate holds if the constructor is a non-converting
12372     constructor.
12373
12374'DECL_COMPLETE_CONSTRUCTOR_P'
12375     This predicate holds for a function which is a constructor for an
12376     object of a complete type.
12377
12378'DECL_BASE_CONSTRUCTOR_P'
12379     This predicate holds for a function which is a constructor for a
12380     base class sub-object.
12381
12382'DECL_COPY_CONSTRUCTOR_P'
12383     This predicate holds for a function which is a copy-constructor.
12384
12385'DECL_DESTRUCTOR_P'
12386     This macro holds if the function is a destructor.
12387
12388'DECL_COMPLETE_DESTRUCTOR_P'
12389     This predicate holds if the function is the destructor for an
12390     object a complete type.
12391
12392'DECL_OVERLOADED_OPERATOR_P'
12393     This macro holds if the function is an overloaded operator.
12394
12395'DECL_CONV_FN_P'
12396     This macro holds if the function is a type-conversion operator.
12397
12398'DECL_GLOBAL_CTOR_P'
12399     This predicate holds if the function is a file-scope initialization
12400     function.
12401
12402'DECL_GLOBAL_DTOR_P'
12403     This predicate holds if the function is a file-scope finalization
12404     function.
12405
12406'DECL_THUNK_P'
12407     This predicate holds if the function is a thunk.
12408
12409     These functions represent stub code that adjusts the 'this' pointer
12410     and then jumps to another function.  When the jumped-to function
12411     returns, control is transferred directly to the caller, without
12412     returning to the thunk.  The first parameter to the thunk is always
12413     the 'this' pointer; the thunk should add 'THUNK_DELTA' to this
12414     value.  (The 'THUNK_DELTA' is an 'int', not an 'INTEGER_CST'.)
12415
12416     Then, if 'THUNK_VCALL_OFFSET' (an 'INTEGER_CST') is nonzero the
12417     adjusted 'this' pointer must be adjusted again.  The complete
12418     calculation is given by the following pseudo-code:
12419
12420          this += THUNK_DELTA
12421          if (THUNK_VCALL_OFFSET)
12422            this += (*((ptrdiff_t **) this))[THUNK_VCALL_OFFSET]
12423
12424     Finally, the thunk should jump to the location given by
12425     'DECL_INITIAL'; this will always be an expression for the address
12426     of a function.
12427
12428'DECL_NON_THUNK_FUNCTION_P'
12429     This predicate holds if the function is _not_ a thunk function.
12430
12431'GLOBAL_INIT_PRIORITY'
12432     If either 'DECL_GLOBAL_CTOR_P' or 'DECL_GLOBAL_DTOR_P' holds, then
12433     this gives the initialization priority for the function.  The
12434     linker will arrange that all functions for which
12435     'DECL_GLOBAL_CTOR_P' holds are run in increasing order of priority
12436     before 'main' is called.  When the program exits, all functions for
12437     which 'DECL_GLOBAL_DTOR_P' holds are run in the reverse order.
12438
12439'TYPE_RAISES_EXCEPTIONS'
12440     This macro returns the list of exceptions that a (member-)function
12441     can raise.  The returned list, if non 'NULL', is comprised of nodes
12442     whose 'TREE_VALUE' represents a type.
12443
12444'TYPE_NOTHROW_P'
12445     This predicate holds when the exception-specification of its
12446     arguments is of the form ''()''.
12447
12448'DECL_ARRAY_DELETE_OPERATOR_P'
12449     This predicate holds if the function an overloaded 'operator
12450     delete[]'.
12451
12452
12453File: gccint.info,  Node: Statements for C++,  Next: C++ Expressions,  Prev: Functions for C++,  Up: C and C++ Trees
12454
1245511.10.5 Statements for C++
12456--------------------------
12457
12458A function that has a definition in the current translation unit will
12459have a non-'NULL' 'DECL_INITIAL'.  However, back ends should not make
12460use of the particular value given by 'DECL_INITIAL'.
12461
12462 The 'DECL_SAVED_TREE' macro will give the complete body of the
12463function.
12464
1246511.10.5.1 Statements
12466....................
12467
12468There are tree nodes corresponding to all of the source-level statement
12469constructs, used within the C and C++ frontends.  These are enumerated
12470here, together with a list of the various macros that can be used to
12471obtain information about them.  There are a few macros that can be used
12472with all statements:
12473
12474'STMT_IS_FULL_EXPR_P'
12475     In C++, statements normally constitute "full expressions";
12476     temporaries created during a statement are destroyed when the
12477     statement is complete.  However, G++ sometimes represents
12478     expressions by statements; these statements will not have
12479     'STMT_IS_FULL_EXPR_P' set.  Temporaries created during such
12480     statements should be destroyed when the innermost enclosing
12481     statement with 'STMT_IS_FULL_EXPR_P' set is exited.
12482
12483 Here is the list of the various statement nodes, and the macros used to
12484access them.  This documentation describes the use of these nodes in
12485non-template functions (including instantiations of template functions).
12486In template functions, the same nodes are used, but sometimes in
12487slightly different ways.
12488
12489 Many of the statements have substatements.  For example, a 'while' loop
12490will have a body, which is itself a statement.  If the substatement is
12491'NULL_TREE', it is considered equivalent to a statement consisting of a
12492single ';', i.e., an expression statement in which the expression has
12493been omitted.  A substatement may in fact be a list of statements,
12494connected via their 'TREE_CHAIN's.  So, you should always process the
12495statement tree by looping over substatements, like this:
12496     void process_stmt (stmt)
12497          tree stmt;
12498     {
12499       while (stmt)
12500         {
12501           switch (TREE_CODE (stmt))
12502             {
12503             case IF_STMT:
12504               process_stmt (THEN_CLAUSE (stmt));
12505               /* More processing here.  */
12506               break;
12507
12508             ...
12509             }
12510
12511           stmt = TREE_CHAIN (stmt);
12512         }
12513     }
12514 In other words, while the 'then' clause of an 'if' statement in C++ can
12515be only one statement (although that one statement may be a compound
12516statement), the intermediate representation will sometimes use several
12517statements chained together.
12518
12519'BREAK_STMT'
12520
12521     Used to represent a 'break' statement.  There are no additional
12522     fields.
12523
12524'CLEANUP_STMT'
12525
12526     Used to represent an action that should take place upon exit from
12527     the enclosing scope.  Typically, these actions are calls to
12528     destructors for local objects, but back ends cannot rely on this
12529     fact.  If these nodes are in fact representing such destructors,
12530     'CLEANUP_DECL' will be the 'VAR_DECL' destroyed.  Otherwise,
12531     'CLEANUP_DECL' will be 'NULL_TREE'.  In any case, the
12532     'CLEANUP_EXPR' is the expression to execute.  The cleanups executed
12533     on exit from a scope should be run in the reverse order of the
12534     order in which the associated 'CLEANUP_STMT's were encountered.
12535
12536'CONTINUE_STMT'
12537
12538     Used to represent a 'continue' statement.  There are no additional
12539     fields.
12540
12541'CTOR_STMT'
12542
12543     Used to mark the beginning (if 'CTOR_BEGIN_P' holds) or end (if
12544     'CTOR_END_P' holds of the main body of a constructor.  See also
12545     'SUBOBJECT' for more information on how to use these nodes.
12546
12547'DO_STMT'
12548
12549     Used to represent a 'do' loop.  The body of the loop is given by
12550     'DO_BODY' while the termination condition for the loop is given by
12551     'DO_COND'.  The condition for a 'do'-statement is always an
12552     expression.
12553
12554'EMPTY_CLASS_EXPR'
12555
12556     Used to represent a temporary object of a class with no data whose
12557     address is never taken.  (All such objects are interchangeable.)
12558     The 'TREE_TYPE' represents the type of the object.
12559
12560'EXPR_STMT'
12561
12562     Used to represent an expression statement.  Use 'EXPR_STMT_EXPR' to
12563     obtain the expression.
12564
12565'FOR_STMT'
12566
12567     Used to represent a 'for' statement.  The 'FOR_INIT_STMT' is the
12568     initialization statement for the loop.  The 'FOR_COND' is the
12569     termination condition.  The 'FOR_EXPR' is the expression executed
12570     right before the 'FOR_COND' on each loop iteration; often, this
12571     expression increments a counter.  The body of the loop is given by
12572     'FOR_BODY'.  Note that 'FOR_INIT_STMT' and 'FOR_BODY' return
12573     statements, while 'FOR_COND' and 'FOR_EXPR' return expressions.
12574
12575'HANDLER'
12576
12577     Used to represent a C++ 'catch' block.  The 'HANDLER_TYPE' is the
12578     type of exception that will be caught by this handler; it is equal
12579     (by pointer equality) to 'NULL' if this handler is for all types.
12580     'HANDLER_PARMS' is the 'DECL_STMT' for the catch parameter, and
12581     'HANDLER_BODY' is the code for the block itself.
12582
12583'IF_STMT'
12584
12585     Used to represent an 'if' statement.  The 'IF_COND' is the
12586     expression.
12587
12588     If the condition is a 'TREE_LIST', then the 'TREE_PURPOSE' is a
12589     statement (usually a 'DECL_STMT').  Each time the condition is
12590     evaluated, the statement should be executed.  Then, the
12591     'TREE_VALUE' should be used as the conditional expression itself.
12592     This representation is used to handle C++ code like this:
12593
12594     C++ distinguishes between this and 'COND_EXPR' for handling
12595     templates.
12596
12597          if (int i = 7) ...
12598
12599     where there is a new local variable (or variables) declared within
12600     the condition.
12601
12602     The 'THEN_CLAUSE' represents the statement given by the 'then'
12603     condition, while the 'ELSE_CLAUSE' represents the statement given
12604     by the 'else' condition.
12605
12606'SUBOBJECT'
12607
12608     In a constructor, these nodes are used to mark the point at which a
12609     subobject of 'this' is fully constructed.  If, after this point, an
12610     exception is thrown before a 'CTOR_STMT' with 'CTOR_END_P' set is
12611     encountered, the 'SUBOBJECT_CLEANUP' must be executed.  The
12612     cleanups must be executed in the reverse order in which they
12613     appear.
12614
12615'SWITCH_STMT'
12616
12617     Used to represent a 'switch' statement.  The 'SWITCH_STMT_COND' is
12618     the expression on which the switch is occurring.  See the
12619     documentation for an 'IF_STMT' for more information on the
12620     representation used for the condition.  The 'SWITCH_STMT_BODY' is
12621     the body of the switch statement.  The 'SWITCH_STMT_TYPE' is the
12622     original type of switch expression as given in the source, before
12623     any compiler conversions.
12624
12625'TRY_BLOCK'
12626     Used to represent a 'try' block.  The body of the try block is
12627     given by 'TRY_STMTS'.  Each of the catch blocks is a 'HANDLER'
12628     node.  The first handler is given by 'TRY_HANDLERS'.  Subsequent
12629     handlers are obtained by following the 'TREE_CHAIN' link from one
12630     handler to the next.  The body of the handler is given by
12631     'HANDLER_BODY'.
12632
12633     If 'CLEANUP_P' holds of the 'TRY_BLOCK', then the 'TRY_HANDLERS'
12634     will not be a 'HANDLER' node.  Instead, it will be an expression
12635     that should be executed if an exception is thrown in the try block.
12636     It must rethrow the exception after executing that code.  And, if
12637     an exception is thrown while the expression is executing,
12638     'terminate' must be called.
12639
12640'USING_STMT'
12641     Used to represent a 'using' directive.  The namespace is given by
12642     'USING_STMT_NAMESPACE', which will be a NAMESPACE_DECL.  This node
12643     is needed inside template functions, to implement using directives
12644     during instantiation.
12645
12646'WHILE_STMT'
12647
12648     Used to represent a 'while' loop.  The 'WHILE_COND' is the
12649     termination condition for the loop.  See the documentation for an
12650     'IF_STMT' for more information on the representation used for the
12651     condition.
12652
12653     The 'WHILE_BODY' is the body of the loop.
12654
12655
12656File: gccint.info,  Node: C++ Expressions,  Prev: Statements for C++,  Up: C and C++ Trees
12657
1265811.10.6 C++ Expressions
12659-----------------------
12660
12661This section describes expressions specific to the C and C++ front ends.
12662
12663'TYPEID_EXPR'
12664
12665     Used to represent a 'typeid' expression.
12666
12667'NEW_EXPR'
12668'VEC_NEW_EXPR'
12669
12670     Used to represent a call to 'new' and 'new[]' respectively.
12671
12672'DELETE_EXPR'
12673'VEC_DELETE_EXPR'
12674
12675     Used to represent a call to 'delete' and 'delete[]' respectively.
12676
12677'MEMBER_REF'
12678
12679     Represents a reference to a member of a class.
12680
12681'THROW_EXPR'
12682
12683     Represents an instance of 'throw' in the program.  Operand 0, which
12684     is the expression to throw, may be 'NULL_TREE'.
12685
12686'AGGR_INIT_EXPR'
12687     An 'AGGR_INIT_EXPR' represents the initialization as the return
12688     value of a function call, or as the result of a constructor.  An
12689     'AGGR_INIT_EXPR' will only appear as a full-expression, or as the
12690     second operand of a 'TARGET_EXPR'.  'AGGR_INIT_EXPR's have a
12691     representation similar to that of 'CALL_EXPR's.  You can use the
12692     'AGGR_INIT_EXPR_FN' and 'AGGR_INIT_EXPR_ARG' macros to access the
12693     function to call and the arguments to pass.
12694
12695     If 'AGGR_INIT_VIA_CTOR_P' holds of the 'AGGR_INIT_EXPR', then the
12696     initialization is via a constructor call.  The address of the
12697     'AGGR_INIT_EXPR_SLOT' operand, which is always a 'VAR_DECL', is
12698     taken, and this value replaces the first argument in the argument
12699     list.
12700
12701     In either case, the expression is void.
12702
12703
12704File: gccint.info,  Node: GIMPLE,  Next: Tree SSA,  Prev: GENERIC,  Up: Top
12705
1270612 GIMPLE
12707*********
12708
12709GIMPLE is a three-address representation derived from GENERIC by
12710breaking down GENERIC expressions into tuples of no more than 3 operands
12711(with some exceptions like function calls).  GIMPLE was heavily
12712influenced by the SIMPLE IL used by the McCAT compiler project at McGill
12713University, though we have made some different choices.  For one thing,
12714SIMPLE doesn't support 'goto'.
12715
12716 Temporaries are introduced to hold intermediate values needed to
12717compute complex expressions.  Additionally, all the control structures
12718used in GENERIC are lowered into conditional jumps, lexical scopes are
12719removed and exception regions are converted into an on the side
12720exception region tree.
12721
12722 The compiler pass which converts GENERIC into GIMPLE is referred to as
12723the 'gimplifier'.  The gimplifier works recursively, generating GIMPLE
12724tuples out of the original GENERIC expressions.
12725
12726 One of the early implementation strategies used for the GIMPLE
12727representation was to use the same internal data structures used by
12728front ends to represent parse trees.  This simplified implementation
12729because we could leverage existing functionality and interfaces.
12730However, GIMPLE is a much more restrictive representation than abstract
12731syntax trees (AST), therefore it does not require the full structural
12732complexity provided by the main tree data structure.
12733
12734 The GENERIC representation of a function is stored in the
12735'DECL_SAVED_TREE' field of the associated 'FUNCTION_DECL' tree node.  It
12736is converted to GIMPLE by a call to 'gimplify_function_tree'.
12737
12738 If a front end wants to include language-specific tree codes in the
12739tree representation which it provides to the back end, it must provide a
12740definition of 'LANG_HOOKS_GIMPLIFY_EXPR' which knows how to convert the
12741front end trees to GIMPLE.  Usually such a hook will involve much of the
12742same code for expanding front end trees to RTL.  This function can
12743return fully lowered GIMPLE, or it can return GENERIC trees and let the
12744main gimplifier lower them the rest of the way; this is often simpler.
12745GIMPLE that is not fully lowered is known as "High GIMPLE" and consists
12746of the IL before the pass 'pass_lower_cf'.  High GIMPLE contains some
12747container statements like lexical scopes (represented by 'GIMPLE_BIND')
12748and nested expressions (e.g., 'GIMPLE_TRY'), while "Low GIMPLE" exposes
12749all of the implicit jumps for control and exception expressions directly
12750in the IL and EH region trees.
12751
12752 The C and C++ front ends currently convert directly from front end
12753trees to GIMPLE, and hand that off to the back end rather than first
12754converting to GENERIC.  Their gimplifier hooks know about all the
12755'_STMT' nodes and how to convert them to GENERIC forms.  There was some
12756work done on a genericization pass which would run first, but the
12757existence of 'STMT_EXPR' meant that in order to convert all of the C
12758statements into GENERIC equivalents would involve walking the entire
12759tree anyway, so it was simpler to lower all the way.  This might change
12760in the future if someone writes an optimization pass which would work
12761better with higher-level trees, but currently the optimizers all expect
12762GIMPLE.
12763
12764 You can request to dump a C-like representation of the GIMPLE form with
12765the flag '-fdump-tree-gimple'.
12766
12767* Menu:
12768
12769* Tuple representation::
12770* Class hierarchy of GIMPLE statements::
12771* GIMPLE instruction set::
12772* GIMPLE Exception Handling::
12773* Temporaries::
12774* Operands::
12775* Manipulating GIMPLE statements::
12776* Tuple specific accessors::
12777* GIMPLE sequences::
12778* Sequence iterators::
12779* Adding a new GIMPLE statement code::
12780* Statement and operand traversals::
12781
12782
12783File: gccint.info,  Node: Tuple representation,  Next: Class hierarchy of GIMPLE statements,  Up: GIMPLE
12784
1278512.1 Tuple representation
12786=========================
12787
12788GIMPLE instructions are tuples of variable size divided in two groups: a
12789header describing the instruction and its locations, and a variable
12790length body with all the operands.  Tuples are organized into a
12791hierarchy with 3 main classes of tuples.
12792
1279312.1.1 'gimple' (gsbase)
12794------------------------
12795
12796This is the root of the hierarchy, it holds basic information needed by
12797most GIMPLE statements.  There are some fields that may not be relevant
12798to every GIMPLE statement, but those were moved into the base structure
12799to take advantage of holes left by other fields (thus making the
12800structure more compact).  The structure takes 4 words (32 bytes) on 64
12801bit hosts:
12802
12803Field                   Size (bits)
12804'code'                  8
12805'subcode'               16
12806'no_warning'            1
12807'visited'               1
12808'nontemporal_move'      1
12809'plf'                   2
12810'modified'              1
12811'has_volatile_ops'      1
12812'references_memory_p'   1
12813'uid'                   32
12814'location'              32
12815'num_ops'               32
12816'bb'                    64
12817'block'                 63
12818Total size              32 bytes
12819
12820   * 'code' Main identifier for a GIMPLE instruction.
12821
12822   * 'subcode' Used to distinguish different variants of the same basic
12823     instruction or provide flags applicable to a given code.  The
12824     'subcode' flags field has different uses depending on the code of
12825     the instruction, but mostly it distinguishes instructions of the
12826     same family.  The most prominent use of this field is in
12827     assignments, where subcode indicates the operation done on the RHS
12828     of the assignment.  For example, a = b + c is encoded as
12829     'GIMPLE_ASSIGN <PLUS_EXPR, a, b, c>'.
12830
12831   * 'no_warning' Bitflag to indicate whether a warning has already been
12832     issued on this statement.
12833
12834   * 'visited' General purpose "visited" marker.  Set and cleared by
12835     each pass when needed.
12836
12837   * 'nontemporal_move' Bitflag used in assignments that represent
12838     non-temporal moves.  Although this bitflag is only used in
12839     assignments, it was moved into the base to take advantage of the
12840     bit holes left by the previous fields.
12841
12842   * 'plf' Pass Local Flags.  This 2-bit mask can be used as general
12843     purpose markers by any pass.  Passes are responsible for clearing
12844     and setting these two flags accordingly.
12845
12846   * 'modified' Bitflag to indicate whether the statement has been
12847     modified.  Used mainly by the operand scanner to determine when to
12848     re-scan a statement for operands.
12849
12850   * 'has_volatile_ops' Bitflag to indicate whether this statement
12851     contains operands that have been marked volatile.
12852
12853   * 'references_memory_p' Bitflag to indicate whether this statement
12854     contains memory references (i.e., its operands are either global
12855     variables, or pointer dereferences or anything that must reside in
12856     memory).
12857
12858   * 'uid' This is an unsigned integer used by passes that want to
12859     assign IDs to every statement.  These IDs must be assigned and used
12860     by each pass.
12861
12862   * 'location' This is a 'location_t' identifier to specify source code
12863     location for this statement.  It is inherited from the front end.
12864
12865   * 'num_ops' Number of operands that this statement has.  This
12866     specifies the size of the operand vector embedded in the tuple.
12867     Only used in some tuples, but it is declared in the base tuple to
12868     take advantage of the 32-bit hole left by the previous fields.
12869
12870   * 'bb' Basic block holding the instruction.
12871
12872   * 'block' Lexical block holding this statement.  Also used for debug
12873     information generation.
12874
1287512.1.2 'gimple_statement_with_ops'
12876----------------------------------
12877
12878This tuple is actually split in two: 'gimple_statement_with_ops_base'
12879and 'gimple_statement_with_ops'.  This is needed to accommodate the way
12880the operand vector is allocated.  The operand vector is defined to be an
12881array of 1 element.  So, to allocate a dynamic number of operands, the
12882memory allocator ('gimple_alloc') simply allocates enough memory to hold
12883the structure itself plus 'N - 1' operands which run "off the end" of
12884the structure.  For example, to allocate space for a tuple with 3
12885operands, 'gimple_alloc' reserves 'sizeof (struct
12886gimple_statement_with_ops) + 2 * sizeof (tree)' bytes.
12887
12888 On the other hand, several fields in this tuple need to be shared with
12889the 'gimple_statement_with_memory_ops' tuple.  So, these common fields
12890are placed in 'gimple_statement_with_ops_base' which is then inherited
12891from the other two tuples.
12892
12893'gsbase'    256
12894'def_ops'   64
12895'use_ops'   64
12896'op'        'num_ops' * 64
12897Total       48 + 8 * 'num_ops' bytes
12898size
12899
12900   * 'gsbase' Inherited from 'struct gimple'.
12901
12902   * 'def_ops' Array of pointers into the operand array indicating all
12903     the slots that contain a variable written-to by the statement.
12904     This array is also used for immediate use chaining.  Note that it
12905     would be possible to not rely on this array, but the changes
12906     required to implement this are pretty invasive.
12907
12908   * 'use_ops' Similar to 'def_ops' but for variables read by the
12909     statement.
12910
12911   * 'op' Array of trees with 'num_ops' slots.
12912
1291312.1.3 'gimple_statement_with_memory_ops'
12914-----------------------------------------
12915
12916This tuple is essentially identical to 'gimple_statement_with_ops',
12917except that it contains 4 additional fields to hold vectors related
12918memory stores and loads.  Similar to the previous case, the structure is
12919split in two to accommodate for the operand vector
12920('gimple_statement_with_memory_ops_base' and
12921'gimple_statement_with_memory_ops').
12922
12923Field        Size (bits)
12924'gsbase'     256
12925'def_ops'    64
12926'use_ops'    64
12927'vdef_ops'   64
12928'vuse_ops'   64
12929'stores'     64
12930'loads'      64
12931'op'         'num_ops' * 64
12932Total size   80 + 8 * 'num_ops' bytes
12933
12934   * 'vdef_ops' Similar to 'def_ops' but for 'VDEF' operators.  There is
12935     one entry per memory symbol written by this statement.  This is
12936     used to maintain the memory SSA use-def and def-def chains.
12937
12938   * 'vuse_ops' Similar to 'use_ops' but for 'VUSE' operators.  There is
12939     one entry per memory symbol loaded by this statement.  This is used
12940     to maintain the memory SSA use-def chains.
12941
12942   * 'stores' Bitset with all the UIDs for the symbols written-to by the
12943     statement.  This is different than 'vdef_ops' in that all the
12944     affected symbols are mentioned in this set.  If memory partitioning
12945     is enabled, the 'vdef_ops' vector will refer to memory partitions.
12946     Furthermore, no SSA information is stored in this set.
12947
12948   * 'loads' Similar to 'stores', but for memory loads.  (Note that
12949     there is some amount of redundancy here, it should be possible to
12950     reduce memory utilization further by removing these sets).
12951
12952 All the other tuples are defined in terms of these three basic ones.
12953Each tuple will add some fields.
12954
12955
12956File: gccint.info,  Node: Class hierarchy of GIMPLE statements,  Next: GIMPLE instruction set,  Prev: Tuple representation,  Up: GIMPLE
12957
1295812.2 Class hierarchy of GIMPLE statements
12959=========================================
12960
12961The following diagram shows the C++ inheritance hierarchy of statement
12962kinds, along with their relationships to 'GSS_' values (layouts) and
12963'GIMPLE_' values (codes):
12964
12965        gimple
12966          |    layout: GSS_BASE
12967          |    used for 4 codes: GIMPLE_ERROR_MARK
12968          |                      GIMPLE_NOP
12969          |                      GIMPLE_OMP_SECTIONS_SWITCH
12970          |                      GIMPLE_PREDICT
12971          |
12972          + gimple_statement_with_ops_base
12973          |   |    (no GSS layout)
12974          |   |
12975          |   + gimple_statement_with_ops
12976          |   |   |    layout: GSS_WITH_OPS
12977          |   |   |
12978          |   |   + gcond
12979          |   |   |     code: GIMPLE_COND
12980          |   |   |
12981          |   |   + gdebug
12982          |   |   |     code: GIMPLE_DEBUG
12983          |   |   |
12984          |   |   + ggoto
12985          |   |   |     code: GIMPLE_GOTO
12986          |   |   |
12987          |   |   + glabel
12988          |   |   |     code: GIMPLE_LABEL
12989          |   |   |
12990          |   |   + gswitch
12991          |   |         code: GIMPLE_SWITCH
12992          |   |
12993          |   + gimple_statement_with_memory_ops_base
12994          |       |    layout: GSS_WITH_MEM_OPS_BASE
12995          |       |
12996          |       + gimple_statement_with_memory_ops
12997          |       |   |    layout: GSS_WITH_MEM_OPS
12998          |       |   |
12999          |       |   + gassign
13000          |       |   |    code GIMPLE_ASSIGN
13001          |       |   |
13002          |       |   + greturn
13003          |       |        code GIMPLE_RETURN
13004          |       |
13005          |       + gcall
13006          |       |        layout: GSS_CALL, code: GIMPLE_CALL
13007          |       |
13008          |       + gasm
13009          |       |        layout: GSS_ASM, code: GIMPLE_ASM
13010          |       |
13011          |       + gtransaction
13012          |                layout: GSS_TRANSACTION, code: GIMPLE_TRANSACTION
13013          |
13014          + gimple_statement_omp
13015          |   |    layout: GSS_OMP.  Used for code GIMPLE_OMP_SECTION
13016          |   |
13017          |   + gomp_critical
13018          |   |        layout: GSS_OMP_CRITICAL, code: GIMPLE_OMP_CRITICAL
13019          |   |
13020          |   + gomp_for
13021          |   |        layout: GSS_OMP_FOR, code: GIMPLE_OMP_FOR
13022          |   |
13023          |   + gomp_parallel_layout
13024          |   |   |    layout: GSS_OMP_PARALLEL_LAYOUT
13025          |   |   |
13026          |   |   + gimple_statement_omp_taskreg
13027          |   |   |   |
13028          |   |   |   + gomp_parallel
13029          |   |   |   |        code: GIMPLE_OMP_PARALLEL
13030          |   |   |   |
13031          |   |   |   + gomp_task
13032          |   |   |            code: GIMPLE_OMP_TASK
13033          |   |   |
13034          |   |   + gimple_statement_omp_target
13035          |   |            code: GIMPLE_OMP_TARGET
13036          |   |
13037          |   + gomp_sections
13038          |   |        layout: GSS_OMP_SECTIONS, code: GIMPLE_OMP_SECTIONS
13039          |   |
13040          |   + gimple_statement_omp_single_layout
13041          |       |    layout: GSS_OMP_SINGLE_LAYOUT
13042          |       |
13043          |       + gomp_single
13044          |       |        code: GIMPLE_OMP_SINGLE
13045          |       |
13046          |       + gomp_teams
13047          |                code: GIMPLE_OMP_TEAMS
13048          |
13049          + gbind
13050          |        layout: GSS_BIND, code: GIMPLE_BIND
13051          |
13052          + gcatch
13053          |        layout: GSS_CATCH, code: GIMPLE_CATCH
13054          |
13055          + geh_filter
13056          |        layout: GSS_EH_FILTER, code: GIMPLE_EH_FILTER
13057          |
13058          + geh_else
13059          |        layout: GSS_EH_ELSE, code: GIMPLE_EH_ELSE
13060          |
13061          + geh_mnt
13062          |        layout: GSS_EH_MNT, code: GIMPLE_EH_MUST_NOT_THROW
13063          |
13064          + gphi
13065          |        layout: GSS_PHI, code: GIMPLE_PHI
13066          |
13067          + gimple_statement_eh_ctrl
13068          |   |    layout: GSS_EH_CTRL
13069          |   |
13070          |   + gresx
13071          |   |        code: GIMPLE_RESX
13072          |   |
13073          |   + geh_dispatch
13074          |            code: GIMPLE_EH_DISPATCH
13075          |
13076          + gtry
13077          |        layout: GSS_TRY, code: GIMPLE_TRY
13078          |
13079          + gimple_statement_wce
13080          |        layout: GSS_WCE, code: GIMPLE_WITH_CLEANUP_EXPR
13081          |
13082          + gomp_continue
13083          |        layout: GSS_OMP_CONTINUE, code: GIMPLE_OMP_CONTINUE
13084          |
13085          + gomp_atomic_load
13086          |        layout: GSS_OMP_ATOMIC_LOAD, code: GIMPLE_OMP_ATOMIC_LOAD
13087          |
13088          + gimple_statement_omp_atomic_store_layout
13089              |    layout: GSS_OMP_ATOMIC_STORE_LAYOUT,
13090              |    code: GIMPLE_OMP_ATOMIC_STORE
13091              |
13092              + gomp_atomic_store
13093              |        code: GIMPLE_OMP_ATOMIC_STORE
13094              |
13095              + gomp_return
13096                       code: GIMPLE_OMP_RETURN
13097
13098
13099File: gccint.info,  Node: GIMPLE instruction set,  Next: GIMPLE Exception Handling,  Prev: Class hierarchy of GIMPLE statements,  Up: GIMPLE
13100
1310112.3 GIMPLE instruction set
13102===========================
13103
13104The following table briefly describes the GIMPLE instruction set.
13105
13106Instruction                    High GIMPLE   Low GIMPLE
13107'GIMPLE_ASM'                   x             x
13108'GIMPLE_ASSIGN'                x             x
13109'GIMPLE_BIND'                  x
13110'GIMPLE_CALL'                  x             x
13111'GIMPLE_CATCH'                 x
13112'GIMPLE_COND'                  x             x
13113'GIMPLE_DEBUG'                 x             x
13114'GIMPLE_EH_FILTER'             x
13115'GIMPLE_GOTO'                  x             x
13116'GIMPLE_LABEL'                 x             x
13117'GIMPLE_NOP'                   x             x
13118'GIMPLE_OMP_ATOMIC_LOAD'       x             x
13119'GIMPLE_OMP_ATOMIC_STORE'      x             x
13120'GIMPLE_OMP_CONTINUE'          x             x
13121'GIMPLE_OMP_CRITICAL'          x             x
13122'GIMPLE_OMP_FOR'               x             x
13123'GIMPLE_OMP_MASTER'            x             x
13124'GIMPLE_OMP_ORDERED'           x             x
13125'GIMPLE_OMP_PARALLEL'          x             x
13126'GIMPLE_OMP_RETURN'            x             x
13127'GIMPLE_OMP_SECTION'           x             x
13128'GIMPLE_OMP_SECTIONS'          x             x
13129'GIMPLE_OMP_SECTIONS_SWITCH'   x             x
13130'GIMPLE_OMP_SINGLE'            x             x
13131'GIMPLE_PHI'                                 x
13132'GIMPLE_RESX'                                x
13133'GIMPLE_RETURN'                x             x
13134'GIMPLE_SWITCH'                x             x
13135'GIMPLE_TRY'                   x
13136
13137
13138File: gccint.info,  Node: GIMPLE Exception Handling,  Next: Temporaries,  Prev: GIMPLE instruction set,  Up: GIMPLE
13139
1314012.4 Exception Handling
13141=======================
13142
13143Other exception handling constructs are represented using
13144'GIMPLE_TRY_CATCH'.  'GIMPLE_TRY_CATCH' has two operands.  The first
13145operand is a sequence of statements to execute.  If executing these
13146statements does not throw an exception, then the second operand is
13147ignored.  Otherwise, if an exception is thrown, then the second operand
13148of the 'GIMPLE_TRY_CATCH' is checked.  The second operand may have the
13149following forms:
13150
13151  1. A sequence of statements to execute.  When an exception occurs,
13152     these statements are executed, and then the exception is rethrown.
13153
13154  2. A sequence of 'GIMPLE_CATCH' statements.  Each 'GIMPLE_CATCH' has a
13155     list of applicable exception types and handler code.  If the thrown
13156     exception matches one of the caught types, the associated handler
13157     code is executed.  If the handler code falls off the bottom,
13158     execution continues after the original 'GIMPLE_TRY_CATCH'.
13159
13160  3. A 'GIMPLE_EH_FILTER' statement.  This has a list of permitted
13161     exception types, and code to handle a match failure.  If the thrown
13162     exception does not match one of the allowed types, the associated
13163     match failure code is executed.  If the thrown exception does
13164     match, it continues unwinding the stack looking for the next
13165     handler.
13166
13167 Currently throwing an exception is not directly represented in GIMPLE,
13168since it is implemented by calling a function.  At some point in the
13169future we will want to add some way to express that the call will throw
13170an exception of a known type.
13171
13172 Just before running the optimizers, the compiler lowers the high-level
13173EH constructs above into a set of 'goto's, magic labels, and EH regions.
13174Continuing to unwind at the end of a cleanup is represented with a
13175'GIMPLE_RESX'.
13176
13177
13178File: gccint.info,  Node: Temporaries,  Next: Operands,  Prev: GIMPLE Exception Handling,  Up: GIMPLE
13179
1318012.5 Temporaries
13181================
13182
13183When gimplification encounters a subexpression that is too complex, it
13184creates a new temporary variable to hold the value of the subexpression,
13185and adds a new statement to initialize it before the current statement.
13186These special temporaries are known as 'expression temporaries', and are
13187allocated using 'get_formal_tmp_var'.  The compiler tries to always
13188evaluate identical expressions into the same temporary, to simplify
13189elimination of redundant calculations.
13190
13191 We can only use expression temporaries when we know that it will not be
13192reevaluated before its value is used, and that it will not be otherwise
13193modified(1).  Other temporaries can be allocated using
13194'get_initialized_tmp_var' or 'create_tmp_var'.
13195
13196 Currently, an expression like 'a = b + 5' is not reduced any further.
13197We tried converting it to something like
13198     T1 = b + 5;
13199     a = T1;
13200 but this bloated the representation for minimal benefit.  However, a
13201variable which must live in memory cannot appear in an expression; its
13202value is explicitly loaded into a temporary first.  Similarly, storing
13203the value of an expression to a memory variable goes through a
13204temporary.
13205
13206   ---------- Footnotes ----------
13207
13208   (1) These restrictions are derived from those in Morgan 4.8.
13209
13210
13211File: gccint.info,  Node: Operands,  Next: Manipulating GIMPLE statements,  Prev: Temporaries,  Up: GIMPLE
13212
1321312.6 Operands
13214=============
13215
13216In general, expressions in GIMPLE consist of an operation and the
13217appropriate number of simple operands; these operands must either be a
13218GIMPLE rvalue ('is_gimple_val'), i.e. a constant or a register variable.
13219More complex operands are factored out into temporaries, so that
13220     a = b + c + d
13221 becomes
13222     T1 = b + c;
13223     a = T1 + d;
13224
13225 The same rule holds for arguments to a 'GIMPLE_CALL'.
13226
13227 The target of an assignment is usually a variable, but can also be a
13228'MEM_REF' or a compound lvalue as described below.
13229
13230* Menu:
13231
13232* Compound Expressions::
13233* Compound Lvalues::
13234* Conditional Expressions::
13235* Logical Operators::
13236
13237
13238File: gccint.info,  Node: Compound Expressions,  Next: Compound Lvalues,  Up: Operands
13239
1324012.6.1 Compound Expressions
13241---------------------------
13242
13243The left-hand side of a C comma expression is simply moved into a
13244separate statement.
13245
13246
13247File: gccint.info,  Node: Compound Lvalues,  Next: Conditional Expressions,  Prev: Compound Expressions,  Up: Operands
13248
1324912.6.2 Compound Lvalues
13250-----------------------
13251
13252Currently compound lvalues involving array and structure field
13253references are not broken down; an expression like 'a.b[2] = 42' is not
13254reduced any further (though complex array subscripts are).  This
13255restriction is a workaround for limitations in later optimizers; if we
13256were to convert this to
13257
13258     T1 = &a.b;
13259     T1[2] = 42;
13260
13261 alias analysis would not remember that the reference to 'T1[2]' came by
13262way of 'a.b', so it would think that the assignment could alias another
13263member of 'a'; this broke 'struct-alias-1.c'.  Future optimizer
13264improvements may make this limitation unnecessary.
13265
13266
13267File: gccint.info,  Node: Conditional Expressions,  Next: Logical Operators,  Prev: Compound Lvalues,  Up: Operands
13268
1326912.6.3 Conditional Expressions
13270------------------------------
13271
13272A C '?:' expression is converted into an 'if' statement with each branch
13273assigning to the same temporary.  So,
13274
13275     a = b ? c : d;
13276 becomes
13277     if (b == 1)
13278       T1 = c;
13279     else
13280       T1 = d;
13281     a = T1;
13282
13283 The GIMPLE level if-conversion pass re-introduces '?:' expression, if
13284appropriate.  It is used to vectorize loops with conditions using vector
13285conditional operations.
13286
13287 Note that in GIMPLE, 'if' statements are represented using
13288'GIMPLE_COND', as described below.
13289
13290
13291File: gccint.info,  Node: Logical Operators,  Prev: Conditional Expressions,  Up: Operands
13292
1329312.6.4 Logical Operators
13294------------------------
13295
13296Except when they appear in the condition operand of a 'GIMPLE_COND',
13297logical 'and' and 'or' operators are simplified as follows: 'a = b && c'
13298becomes
13299
13300     T1 = (bool)b;
13301     if (T1 == true)
13302       T1 = (bool)c;
13303     a = T1;
13304
13305 Note that 'T1' in this example cannot be an expression temporary,
13306because it has two different assignments.
13307
1330812.6.5 Manipulating operands
13309----------------------------
13310
13311All gimple operands are of type 'tree'.  But only certain types of trees
13312are allowed to be used as operand tuples.  Basic validation is
13313controlled by the function 'get_gimple_rhs_class', which given a tree
13314code, returns an 'enum' with the following values of type 'enum
13315gimple_rhs_class'
13316
13317   * 'GIMPLE_INVALID_RHS' The tree cannot be used as a GIMPLE operand.
13318
13319   * 'GIMPLE_TERNARY_RHS' The tree is a valid GIMPLE ternary operation.
13320
13321   * 'GIMPLE_BINARY_RHS' The tree is a valid GIMPLE binary operation.
13322
13323   * 'GIMPLE_UNARY_RHS' The tree is a valid GIMPLE unary operation.
13324
13325   * 'GIMPLE_SINGLE_RHS' The tree is a single object, that cannot be
13326     split into simpler operands (for instance, 'SSA_NAME', 'VAR_DECL',
13327     'COMPONENT_REF', etc).
13328
13329     This operand class also acts as an escape hatch for tree nodes that
13330     may be flattened out into the operand vector, but would need more
13331     than two slots on the RHS. For instance, a 'COND_EXPR' expression
13332     of the form '(a op b) ? x : y' could be flattened out on the
13333     operand vector using 4 slots, but it would also require additional
13334     processing to distinguish 'c = a op b' from 'c = a op b ? x : y'.
13335     Something similar occurs with 'ASSERT_EXPR'.  In time, these
13336     special case tree expressions should be flattened into the operand
13337     vector.
13338
13339 For tree nodes in the categories 'GIMPLE_TERNARY_RHS',
13340'GIMPLE_BINARY_RHS' and 'GIMPLE_UNARY_RHS', they cannot be stored inside
13341tuples directly.  They first need to be flattened and separated into
13342individual components.  For instance, given the GENERIC expression
13343
13344     a = b + c
13345
13346 its tree representation is:
13347
13348     MODIFY_EXPR <VAR_DECL  <a>, PLUS_EXPR <VAR_DECL <b>, VAR_DECL <c>>>
13349
13350 In this case, the GIMPLE form for this statement is logically identical
13351to its GENERIC form but in GIMPLE, the 'PLUS_EXPR' on the RHS of the
13352assignment is not represented as a tree, instead the two operands are
13353taken out of the 'PLUS_EXPR' sub-tree and flattened into the GIMPLE
13354tuple as follows:
13355
13356     GIMPLE_ASSIGN <PLUS_EXPR, VAR_DECL <a>, VAR_DECL <b>, VAR_DECL <c>>
13357
1335812.6.6 Operand vector allocation
13359--------------------------------
13360
13361The operand vector is stored at the bottom of the three tuple structures
13362that accept operands.  This means, that depending on the code of a given
13363statement, its operand vector will be at different offsets from the base
13364of the structure.  To access tuple operands use the following accessors
13365
13366 -- GIMPLE function: unsigned gimple_num_ops (gimple g)
13367     Returns the number of operands in statement G.
13368
13369 -- GIMPLE function: tree gimple_op (gimple g, unsigned i)
13370     Returns operand 'I' from statement 'G'.
13371
13372 -- GIMPLE function: tree * gimple_ops (gimple g)
13373     Returns a pointer into the operand vector for statement 'G'.  This
13374     is computed using an internal table called 'gimple_ops_offset_'[].
13375     This table is indexed by the gimple code of 'G'.
13376
13377     When the compiler is built, this table is filled-in using the sizes
13378     of the structures used by each statement code defined in
13379     gimple.def.  Since the operand vector is at the bottom of the
13380     structure, for a gimple code 'C' the offset is computed as sizeof
13381     (struct-of 'C') - sizeof (tree).
13382
13383     This mechanism adds one memory indirection to every access when
13384     using 'gimple_op'(), if this becomes a bottleneck, a pass can
13385     choose to memoize the result from 'gimple_ops'() and use that to
13386     access the operands.
13387
1338812.6.7 Operand validation
13389-------------------------
13390
13391When adding a new operand to a gimple statement, the operand will be
13392validated according to what each tuple accepts in its operand vector.
13393These predicates are called by the 'gimple_NAME_set_...()'.  Each tuple
13394will use one of the following predicates (Note, this list is not
13395exhaustive):
13396
13397 -- GIMPLE function: bool is_gimple_val (tree t)
13398     Returns true if t is a "GIMPLE value", which are all the
13399     non-addressable stack variables (variables for which
13400     'is_gimple_reg' returns true) and constants (expressions for which
13401     'is_gimple_min_invariant' returns true).
13402
13403 -- GIMPLE function: bool is_gimple_addressable (tree t)
13404     Returns true if t is a symbol or memory reference whose address can
13405     be taken.
13406
13407 -- GIMPLE function: bool is_gimple_asm_val (tree t)
13408     Similar to 'is_gimple_val' but it also accepts hard registers.
13409
13410 -- GIMPLE function: bool is_gimple_call_addr (tree t)
13411     Return true if t is a valid expression to use as the function
13412     called by a 'GIMPLE_CALL'.
13413
13414 -- GIMPLE function: bool is_gimple_mem_ref_addr (tree t)
13415     Return true if t is a valid expression to use as first operand of a
13416     'MEM_REF' expression.
13417
13418 -- GIMPLE function: bool is_gimple_constant (tree t)
13419     Return true if t is a valid gimple constant.
13420
13421 -- GIMPLE function: bool is_gimple_min_invariant (tree t)
13422     Return true if t is a valid minimal invariant.  This is different
13423     from constants, in that the specific value of t may not be known at
13424     compile time, but it is known that it doesn't change (e.g., the
13425     address of a function local variable).
13426
13427 -- GIMPLE function: bool is_gimple_ip_invariant (tree t)
13428     Return true if t is an interprocedural invariant.  This means that
13429     t is a valid invariant in all functions (e.g. it can be an address
13430     of a global variable but not of a local one).
13431
13432 -- GIMPLE function: bool is_gimple_ip_invariant_address (tree t)
13433     Return true if t is an 'ADDR_EXPR' that does not change once the
13434     program is running (and which is valid in all functions).
13435
1343612.6.8 Statement validation
13437---------------------------
13438
13439 -- GIMPLE function: bool is_gimple_assign (gimple g)
13440     Return true if the code of g is 'GIMPLE_ASSIGN'.
13441
13442 -- GIMPLE function: bool is_gimple_call (gimple g)
13443     Return true if the code of g is 'GIMPLE_CALL'.
13444
13445 -- GIMPLE function: bool is_gimple_debug (gimple g)
13446     Return true if the code of g is 'GIMPLE_DEBUG'.
13447
13448 -- GIMPLE function: bool gimple_assign_cast_p (const_gimple g)
13449     Return true if g is a 'GIMPLE_ASSIGN' that performs a type cast
13450     operation.
13451
13452 -- GIMPLE function: bool gimple_debug_bind_p (gimple g)
13453     Return true if g is a 'GIMPLE_DEBUG' that binds the value of an
13454     expression to a variable.
13455
13456 -- GIMPLE function: bool is_gimple_omp (gimple g)
13457     Return true if g is any of the OpenMP codes.
13458
13459 -- GIMPLE function: gimple_debug_begin_stmt_p (gimple g)
13460     Return true if g is a 'GIMPLE_DEBUG' that marks the beginning of a
13461     source statement.
13462
13463 -- GIMPLE function: gimple_debug_inline_entry_p (gimple g)
13464     Return true if g is a 'GIMPLE_DEBUG' that marks the entry point of
13465     an inlined function.
13466
13467 -- GIMPLE function: gimple_debug_nonbind_marker_p (gimple g)
13468     Return true if g is a 'GIMPLE_DEBUG' that marks a program location,
13469     without any variable binding.
13470
13471
13472File: gccint.info,  Node: Manipulating GIMPLE statements,  Next: Tuple specific accessors,  Prev: Operands,  Up: GIMPLE
13473
1347412.7 Manipulating GIMPLE statements
13475===================================
13476
13477This section documents all the functions available to handle each of the
13478GIMPLE instructions.
13479
1348012.7.1 Common accessors
13481-----------------------
13482
13483The following are common accessors for gimple statements.
13484
13485 -- GIMPLE function: enum gimple_code gimple_code (gimple g)
13486     Return the code for statement 'G'.
13487
13488 -- GIMPLE function: basic_block gimple_bb (gimple g)
13489     Return the basic block to which statement 'G' belongs to.
13490
13491 -- GIMPLE function: tree gimple_block (gimple g)
13492     Return the lexical scope block holding statement 'G'.
13493
13494 -- GIMPLE function: tree gimple_expr_type (gimple stmt)
13495     Return the type of the main expression computed by 'STMT'.  Return
13496     'void_type_node' if 'STMT' computes nothing.  This will only return
13497     something meaningful for 'GIMPLE_ASSIGN', 'GIMPLE_COND' and
13498     'GIMPLE_CALL'.  For all other tuple codes, it will return
13499     'void_type_node'.
13500
13501 -- GIMPLE function: enum tree_code gimple_expr_code (gimple stmt)
13502     Return the tree code for the expression computed by 'STMT'.  This
13503     is only meaningful for 'GIMPLE_CALL', 'GIMPLE_ASSIGN' and
13504     'GIMPLE_COND'.  If 'STMT' is 'GIMPLE_CALL', it will return
13505     'CALL_EXPR'.  For 'GIMPLE_COND', it returns the code of the
13506     comparison predicate.  For 'GIMPLE_ASSIGN' it returns the code of
13507     the operation performed by the 'RHS' of the assignment.
13508
13509 -- GIMPLE function: void gimple_set_block (gimple g, tree block)
13510     Set the lexical scope block of 'G' to 'BLOCK'.
13511
13512 -- GIMPLE function: location_t gimple_locus (gimple g)
13513     Return locus information for statement 'G'.
13514
13515 -- GIMPLE function: void gimple_set_locus (gimple g, location_t locus)
13516     Set locus information for statement 'G'.
13517
13518 -- GIMPLE function: bool gimple_locus_empty_p (gimple g)
13519     Return true if 'G' does not have locus information.
13520
13521 -- GIMPLE function: bool gimple_no_warning_p (gimple stmt)
13522     Return true if no warnings should be emitted for statement 'STMT'.
13523
13524 -- GIMPLE function: void gimple_set_visited (gimple stmt, bool
13525          visited_p)
13526     Set the visited status on statement 'STMT' to 'VISITED_P'.
13527
13528 -- GIMPLE function: bool gimple_visited_p (gimple stmt)
13529     Return the visited status on statement 'STMT'.
13530
13531 -- GIMPLE function: void gimple_set_plf (gimple stmt, enum plf_mask
13532          plf, bool val_p)
13533     Set pass local flag 'PLF' on statement 'STMT' to 'VAL_P'.
13534
13535 -- GIMPLE function: unsigned int gimple_plf (gimple stmt, enum plf_mask
13536          plf)
13537     Return the value of pass local flag 'PLF' on statement 'STMT'.
13538
13539 -- GIMPLE function: bool gimple_has_ops (gimple g)
13540     Return true if statement 'G' has register or memory operands.
13541
13542 -- GIMPLE function: bool gimple_has_mem_ops (gimple g)
13543     Return true if statement 'G' has memory operands.
13544
13545 -- GIMPLE function: unsigned gimple_num_ops (gimple g)
13546     Return the number of operands for statement 'G'.
13547
13548 -- GIMPLE function: tree * gimple_ops (gimple g)
13549     Return the array of operands for statement 'G'.
13550
13551 -- GIMPLE function: tree gimple_op (gimple g, unsigned i)
13552     Return operand 'I' for statement 'G'.
13553
13554 -- GIMPLE function: tree * gimple_op_ptr (gimple g, unsigned i)
13555     Return a pointer to operand 'I' for statement 'G'.
13556
13557 -- GIMPLE function: void gimple_set_op (gimple g, unsigned i, tree op)
13558     Set operand 'I' of statement 'G' to 'OP'.
13559
13560 -- GIMPLE function: bitmap gimple_addresses_taken (gimple stmt)
13561     Return the set of symbols that have had their address taken by
13562     'STMT'.
13563
13564 -- GIMPLE function: struct def_optype_d * gimple_def_ops (gimple g)
13565     Return the set of 'DEF' operands for statement 'G'.
13566
13567 -- GIMPLE function: void gimple_set_def_ops (gimple g, struct
13568          def_optype_d *def)
13569     Set 'DEF' to be the set of 'DEF' operands for statement 'G'.
13570
13571 -- GIMPLE function: struct use_optype_d * gimple_use_ops (gimple g)
13572     Return the set of 'USE' operands for statement 'G'.
13573
13574 -- GIMPLE function: void gimple_set_use_ops (gimple g, struct
13575          use_optype_d *use)
13576     Set 'USE' to be the set of 'USE' operands for statement 'G'.
13577
13578 -- GIMPLE function: struct voptype_d * gimple_vuse_ops (gimple g)
13579     Return the set of 'VUSE' operands for statement 'G'.
13580
13581 -- GIMPLE function: void gimple_set_vuse_ops (gimple g, struct
13582          voptype_d *ops)
13583     Set 'OPS' to be the set of 'VUSE' operands for statement 'G'.
13584
13585 -- GIMPLE function: struct voptype_d * gimple_vdef_ops (gimple g)
13586     Return the set of 'VDEF' operands for statement 'G'.
13587
13588 -- GIMPLE function: void gimple_set_vdef_ops (gimple g, struct
13589          voptype_d *ops)
13590     Set 'OPS' to be the set of 'VDEF' operands for statement 'G'.
13591
13592 -- GIMPLE function: bitmap gimple_loaded_syms (gimple g)
13593     Return the set of symbols loaded by statement 'G'.  Each element of
13594     the set is the 'DECL_UID' of the corresponding symbol.
13595
13596 -- GIMPLE function: bitmap gimple_stored_syms (gimple g)
13597     Return the set of symbols stored by statement 'G'.  Each element of
13598     the set is the 'DECL_UID' of the corresponding symbol.
13599
13600 -- GIMPLE function: bool gimple_modified_p (gimple g)
13601     Return true if statement 'G' has operands and the modified field
13602     has been set.
13603
13604 -- GIMPLE function: bool gimple_has_volatile_ops (gimple stmt)
13605     Return true if statement 'STMT' contains volatile operands.
13606
13607 -- GIMPLE function: void gimple_set_has_volatile_ops (gimple stmt, bool
13608          volatilep)
13609     Return true if statement 'STMT' contains volatile operands.
13610
13611 -- GIMPLE function: void update_stmt (gimple s)
13612     Mark statement 'S' as modified, and update it.
13613
13614 -- GIMPLE function: void update_stmt_if_modified (gimple s)
13615     Update statement 'S' if it has been marked modified.
13616
13617 -- GIMPLE function: gimple gimple_copy (gimple stmt)
13618     Return a deep copy of statement 'STMT'.
13619
13620
13621File: gccint.info,  Node: Tuple specific accessors,  Next: GIMPLE sequences,  Prev: Manipulating GIMPLE statements,  Up: GIMPLE
13622
1362312.8 Tuple specific accessors
13624=============================
13625
13626* Menu:
13627
13628* 'GIMPLE_ASM'::
13629* 'GIMPLE_ASSIGN'::
13630* 'GIMPLE_BIND'::
13631* 'GIMPLE_CALL'::
13632* 'GIMPLE_CATCH'::
13633* 'GIMPLE_COND'::
13634* 'GIMPLE_DEBUG'::
13635* 'GIMPLE_EH_FILTER'::
13636* 'GIMPLE_LABEL'::
13637* 'GIMPLE_GOTO'::
13638* 'GIMPLE_NOP'::
13639* 'GIMPLE_OMP_ATOMIC_LOAD'::
13640* 'GIMPLE_OMP_ATOMIC_STORE'::
13641* 'GIMPLE_OMP_CONTINUE'::
13642* 'GIMPLE_OMP_CRITICAL'::
13643* 'GIMPLE_OMP_FOR'::
13644* 'GIMPLE_OMP_MASTER'::
13645* 'GIMPLE_OMP_ORDERED'::
13646* 'GIMPLE_OMP_PARALLEL'::
13647* 'GIMPLE_OMP_RETURN'::
13648* 'GIMPLE_OMP_SECTION'::
13649* 'GIMPLE_OMP_SECTIONS'::
13650* 'GIMPLE_OMP_SINGLE'::
13651* 'GIMPLE_PHI'::
13652* 'GIMPLE_RESX'::
13653* 'GIMPLE_RETURN'::
13654* 'GIMPLE_SWITCH'::
13655* 'GIMPLE_TRY'::
13656* 'GIMPLE_WITH_CLEANUP_EXPR'::
13657
13658
13659File: gccint.info,  Node: 'GIMPLE_ASM',  Next: 'GIMPLE_ASSIGN',  Up: Tuple specific accessors
13660
1366112.8.1 'GIMPLE_ASM'
13662-------------------
13663
13664 -- GIMPLE function: gasm *gimple_build_asm_vec ( const char *string,
13665          vec<tree, va_gc> *inputs, vec<tree, va_gc> *outputs, vec<tree,
13666          va_gc> *clobbers, vec<tree, va_gc> *labels)
13667     Build a 'GIMPLE_ASM' statement.  This statement is used for
13668     building in-line assembly constructs.  'STRING' is the assembly
13669     code.  'INPUTS', 'OUTPUTS', 'CLOBBERS' and 'LABELS' are the inputs,
13670     outputs, clobbered registers and labels.
13671
13672 -- GIMPLE function: unsigned gimple_asm_ninputs (const gasm *g)
13673     Return the number of input operands for 'GIMPLE_ASM' 'G'.
13674
13675 -- GIMPLE function: unsigned gimple_asm_noutputs (const gasm *g)
13676     Return the number of output operands for 'GIMPLE_ASM' 'G'.
13677
13678 -- GIMPLE function: unsigned gimple_asm_nclobbers (const gasm *g)
13679     Return the number of clobber operands for 'GIMPLE_ASM' 'G'.
13680
13681 -- GIMPLE function: tree gimple_asm_input_op (const gasm *g, unsigned
13682          index)
13683     Return input operand 'INDEX' of 'GIMPLE_ASM' 'G'.
13684
13685 -- GIMPLE function: void gimple_asm_set_input_op (gasm *g, unsigned
13686          index, tree in_op)
13687     Set 'IN_OP' to be input operand 'INDEX' in 'GIMPLE_ASM' 'G'.
13688
13689 -- GIMPLE function: tree gimple_asm_output_op (const gasm *g, unsigned
13690          index)
13691     Return output operand 'INDEX' of 'GIMPLE_ASM' 'G'.
13692
13693 -- GIMPLE function: void gimple_asm_set_output_op (gasm *g, unsigned
13694          index, tree out_op)
13695     Set 'OUT_OP' to be output operand 'INDEX' in 'GIMPLE_ASM' 'G'.
13696
13697 -- GIMPLE function: tree gimple_asm_clobber_op (const gasm *g, unsigned
13698          index)
13699     Return clobber operand 'INDEX' of 'GIMPLE_ASM' 'G'.
13700
13701 -- GIMPLE function: void gimple_asm_set_clobber_op (gasm *g, unsigned
13702          index, tree clobber_op)
13703     Set 'CLOBBER_OP' to be clobber operand 'INDEX' in 'GIMPLE_ASM' 'G'.
13704
13705 -- GIMPLE function: const char * gimple_asm_string (const gasm *g)
13706     Return the string representing the assembly instruction in
13707     'GIMPLE_ASM' 'G'.
13708
13709 -- GIMPLE function: bool gimple_asm_volatile_p (const gasm *g)
13710     Return true if 'G' is an asm statement marked volatile.
13711
13712 -- GIMPLE function: void gimple_asm_set_volatile (gasm *g, bool
13713          volatile_p)
13714     Mark asm statement 'G' as volatile or non-volatile based on
13715     'VOLATILE_P'.
13716
13717
13718File: gccint.info,  Node: 'GIMPLE_ASSIGN',  Next: 'GIMPLE_BIND',  Prev: 'GIMPLE_ASM',  Up: Tuple specific accessors
13719
1372012.8.2 'GIMPLE_ASSIGN'
13721----------------------
13722
13723 -- GIMPLE function: gassign *gimple_build_assign (tree lhs, tree rhs)
13724     Build a 'GIMPLE_ASSIGN' statement.  The left-hand side is an lvalue
13725     passed in lhs.  The right-hand side can be either a unary or binary
13726     tree expression.  The expression tree rhs will be flattened and its
13727     operands assigned to the corresponding operand slots in the new
13728     statement.  This function is useful when you already have a tree
13729     expression that you want to convert into a tuple.  However, try to
13730     avoid building expression trees for the sole purpose of calling
13731     this function.  If you already have the operands in separate trees,
13732     it is better to use 'gimple_build_assign' with 'enum tree_code'
13733     argument and separate arguments for each operand.
13734
13735 -- GIMPLE function: gassign *gimple_build_assign (tree lhs, enum
13736          tree_code subcode, tree op1, tree op2, tree op3)
13737     This function is similar to two operand 'gimple_build_assign', but
13738     is used to build a 'GIMPLE_ASSIGN' statement when the operands of
13739     the right-hand side of the assignment are already split into
13740     different operands.
13741
13742     The left-hand side is an lvalue passed in lhs.  Subcode is the
13743     'tree_code' for the right-hand side of the assignment.  Op1, op2
13744     and op3 are the operands.
13745
13746 -- GIMPLE function: gassign *gimple_build_assign (tree lhs, enum
13747          tree_code subcode, tree op1, tree op2)
13748     Like the above 5 operand 'gimple_build_assign', but with the last
13749     argument 'NULL' - this overload should not be used for
13750     'GIMPLE_TERNARY_RHS' assignments.
13751
13752 -- GIMPLE function: gassign *gimple_build_assign (tree lhs, enum
13753          tree_code subcode, tree op1)
13754     Like the above 4 operand 'gimple_build_assign', but with the last
13755     argument 'NULL' - this overload should be used only for
13756     'GIMPLE_UNARY_RHS' and 'GIMPLE_SINGLE_RHS' assignments.
13757
13758 -- GIMPLE function: gimple gimplify_assign (tree dst, tree src,
13759          gimple_seq *seq_p)
13760     Build a new 'GIMPLE_ASSIGN' tuple and append it to the end of
13761     '*SEQ_P'.
13762
13763 'DST'/'SRC' are the destination and source respectively.  You can pass
13764ungimplified trees in 'DST' or 'SRC', in which case they will be
13765converted to a gimple operand if necessary.
13766
13767 This function returns the newly created 'GIMPLE_ASSIGN' tuple.
13768
13769 -- GIMPLE function: enum tree_code gimple_assign_rhs_code (gimple g)
13770     Return the code of the expression computed on the 'RHS' of
13771     assignment statement 'G'.
13772
13773 -- GIMPLE function: enum gimple_rhs_class gimple_assign_rhs_class
13774          (gimple g)
13775     Return the gimple rhs class of the code for the expression computed
13776     on the rhs of assignment statement 'G'.  This will never return
13777     'GIMPLE_INVALID_RHS'.
13778
13779 -- GIMPLE function: tree gimple_assign_lhs (gimple g)
13780     Return the 'LHS' of assignment statement 'G'.
13781
13782 -- GIMPLE function: tree * gimple_assign_lhs_ptr (gimple g)
13783     Return a pointer to the 'LHS' of assignment statement 'G'.
13784
13785 -- GIMPLE function: tree gimple_assign_rhs1 (gimple g)
13786     Return the first operand on the 'RHS' of assignment statement 'G'.
13787
13788 -- GIMPLE function: tree * gimple_assign_rhs1_ptr (gimple g)
13789     Return the address of the first operand on the 'RHS' of assignment
13790     statement 'G'.
13791
13792 -- GIMPLE function: tree gimple_assign_rhs2 (gimple g)
13793     Return the second operand on the 'RHS' of assignment statement 'G'.
13794
13795 -- GIMPLE function: tree * gimple_assign_rhs2_ptr (gimple g)
13796     Return the address of the second operand on the 'RHS' of assignment
13797     statement 'G'.
13798
13799 -- GIMPLE function: tree gimple_assign_rhs3 (gimple g)
13800     Return the third operand on the 'RHS' of assignment statement 'G'.
13801
13802 -- GIMPLE function: tree * gimple_assign_rhs3_ptr (gimple g)
13803     Return the address of the third operand on the 'RHS' of assignment
13804     statement 'G'.
13805
13806 -- GIMPLE function: void gimple_assign_set_lhs (gimple g, tree lhs)
13807     Set 'LHS' to be the 'LHS' operand of assignment statement 'G'.
13808
13809 -- GIMPLE function: void gimple_assign_set_rhs1 (gimple g, tree rhs)
13810     Set 'RHS' to be the first operand on the 'RHS' of assignment
13811     statement 'G'.
13812
13813 -- GIMPLE function: void gimple_assign_set_rhs2 (gimple g, tree rhs)
13814     Set 'RHS' to be the second operand on the 'RHS' of assignment
13815     statement 'G'.
13816
13817 -- GIMPLE function: void gimple_assign_set_rhs3 (gimple g, tree rhs)
13818     Set 'RHS' to be the third operand on the 'RHS' of assignment
13819     statement 'G'.
13820
13821 -- GIMPLE function: bool gimple_assign_cast_p (const_gimple s)
13822     Return true if 'S' is a type-cast assignment.
13823
13824
13825File: gccint.info,  Node: 'GIMPLE_BIND',  Next: 'GIMPLE_CALL',  Prev: 'GIMPLE_ASSIGN',  Up: Tuple specific accessors
13826
1382712.8.3 'GIMPLE_BIND'
13828--------------------
13829
13830 -- GIMPLE function: gbind *gimple_build_bind (tree vars, gimple_seq
13831          body)
13832     Build a 'GIMPLE_BIND' statement with a list of variables in 'VARS'
13833     and a body of statements in sequence 'BODY'.
13834
13835 -- GIMPLE function: tree gimple_bind_vars (const gbind *g)
13836     Return the variables declared in the 'GIMPLE_BIND' statement 'G'.
13837
13838 -- GIMPLE function: void gimple_bind_set_vars (gbind *g, tree vars)
13839     Set 'VARS' to be the set of variables declared in the 'GIMPLE_BIND'
13840     statement 'G'.
13841
13842 -- GIMPLE function: void gimple_bind_append_vars (gbind *g, tree vars)
13843     Append 'VARS' to the set of variables declared in the 'GIMPLE_BIND'
13844     statement 'G'.
13845
13846 -- GIMPLE function: gimple_seq gimple_bind_body (gbind *g)
13847     Return the GIMPLE sequence contained in the 'GIMPLE_BIND' statement
13848     'G'.
13849
13850 -- GIMPLE function: void gimple_bind_set_body (gbind *g, gimple_seq
13851          seq)
13852     Set 'SEQ' to be sequence contained in the 'GIMPLE_BIND' statement
13853     'G'.
13854
13855 -- GIMPLE function: void gimple_bind_add_stmt (gbind *gs, gimple stmt)
13856     Append a statement to the end of a 'GIMPLE_BIND''s body.
13857
13858 -- GIMPLE function: void gimple_bind_add_seq (gbind *gs, gimple_seq
13859          seq)
13860     Append a sequence of statements to the end of a 'GIMPLE_BIND''s
13861     body.
13862
13863 -- GIMPLE function: tree gimple_bind_block (const gbind *g)
13864     Return the 'TREE_BLOCK' node associated with 'GIMPLE_BIND'
13865     statement 'G'.  This is analogous to the 'BIND_EXPR_BLOCK' field in
13866     trees.
13867
13868 -- GIMPLE function: void gimple_bind_set_block (gbind *g, tree block)
13869     Set 'BLOCK' to be the 'TREE_BLOCK' node associated with
13870     'GIMPLE_BIND' statement 'G'.
13871
13872
13873File: gccint.info,  Node: 'GIMPLE_CALL',  Next: 'GIMPLE_CATCH',  Prev: 'GIMPLE_BIND',  Up: Tuple specific accessors
13874
1387512.8.4 'GIMPLE_CALL'
13876--------------------
13877
13878 -- GIMPLE function: gcall *gimple_build_call (tree fn, unsigned nargs,
13879          ...)
13880     Build a 'GIMPLE_CALL' statement to function 'FN'.  The argument
13881     'FN' must be either a 'FUNCTION_DECL' or a gimple call address as
13882     determined by 'is_gimple_call_addr'.  'NARGS' are the number of
13883     arguments.  The rest of the arguments follow the argument 'NARGS',
13884     and must be trees that are valid as rvalues in gimple (i.e., each
13885     operand is validated with 'is_gimple_operand').
13886
13887 -- GIMPLE function: gcall *gimple_build_call_from_tree (tree call_expr,
13888          tree fnptrtype)
13889     Build a 'GIMPLE_CALL' from a 'CALL_EXPR' node.  The arguments and
13890     the function are taken from the expression directly.  The type of
13891     the 'GIMPLE_CALL' is set from the second parameter passed by a
13892     caller.  This routine assumes that 'call_expr' is already in GIMPLE
13893     form.  That is, its operands are GIMPLE values and the function
13894     call needs no further simplification.  All the call flags in
13895     'call_expr' are copied over to the new 'GIMPLE_CALL'.
13896
13897 -- GIMPLE function: gcall *gimple_build_call_vec (tree fn, 'vec<tree>'
13898          args)
13899     Identical to 'gimple_build_call' but the arguments are stored in a
13900     'vec<tree>'.
13901
13902 -- GIMPLE function: tree gimple_call_lhs (gimple g)
13903     Return the 'LHS' of call statement 'G'.
13904
13905 -- GIMPLE function: tree * gimple_call_lhs_ptr (gimple g)
13906     Return a pointer to the 'LHS' of call statement 'G'.
13907
13908 -- GIMPLE function: void gimple_call_set_lhs (gimple g, tree lhs)
13909     Set 'LHS' to be the 'LHS' operand of call statement 'G'.
13910
13911 -- GIMPLE function: tree gimple_call_fn (gimple g)
13912     Return the tree node representing the function called by call
13913     statement 'G'.
13914
13915 -- GIMPLE function: void gimple_call_set_fn (gcall *g, tree fn)
13916     Set 'FN' to be the function called by call statement 'G'.  This has
13917     to be a gimple value specifying the address of the called function.
13918
13919 -- GIMPLE function: tree gimple_call_fndecl (gimple g)
13920     If a given 'GIMPLE_CALL''s callee is a 'FUNCTION_DECL', return it.
13921     Otherwise return 'NULL'.  This function is analogous to
13922     'get_callee_fndecl' in 'GENERIC'.
13923
13924 -- GIMPLE function: tree gimple_call_set_fndecl (gimple g, tree fndecl)
13925     Set the called function to 'FNDECL'.
13926
13927 -- GIMPLE function: tree gimple_call_return_type (const gcall *g)
13928     Return the type returned by call statement 'G'.
13929
13930 -- GIMPLE function: tree gimple_call_chain (gimple g)
13931     Return the static chain for call statement 'G'.
13932
13933 -- GIMPLE function: void gimple_call_set_chain (gcall *g, tree chain)
13934     Set 'CHAIN' to be the static chain for call statement 'G'.
13935
13936 -- GIMPLE function: unsigned gimple_call_num_args (gimple g)
13937     Return the number of arguments used by call statement 'G'.
13938
13939 -- GIMPLE function: tree gimple_call_arg (gimple g, unsigned index)
13940     Return the argument at position 'INDEX' for call statement 'G'.
13941     The first argument is 0.
13942
13943 -- GIMPLE function: tree * gimple_call_arg_ptr (gimple g, unsigned
13944          index)
13945     Return a pointer to the argument at position 'INDEX' for call
13946     statement 'G'.
13947
13948 -- GIMPLE function: void gimple_call_set_arg (gimple g, unsigned index,
13949          tree arg)
13950     Set 'ARG' to be the argument at position 'INDEX' for call statement
13951     'G'.
13952
13953 -- GIMPLE function: void gimple_call_set_tail (gcall *s)
13954     Mark call statement 'S' as being a tail call (i.e., a call just
13955     before the exit of a function).  These calls are candidate for tail
13956     call optimization.
13957
13958 -- GIMPLE function: bool gimple_call_tail_p (gcall *s)
13959     Return true if 'GIMPLE_CALL' 'S' is marked as a tail call.
13960
13961 -- GIMPLE function: bool gimple_call_noreturn_p (gimple s)
13962     Return true if 'S' is a noreturn call.
13963
13964 -- GIMPLE function: gimple gimple_call_copy_skip_args (gcall *stmt,
13965          bitmap args_to_skip)
13966     Build a 'GIMPLE_CALL' identical to 'STMT' but skipping the
13967     arguments in the positions marked by the set 'ARGS_TO_SKIP'.
13968
13969
13970File: gccint.info,  Node: 'GIMPLE_CATCH',  Next: 'GIMPLE_COND',  Prev: 'GIMPLE_CALL',  Up: Tuple specific accessors
13971
1397212.8.5 'GIMPLE_CATCH'
13973---------------------
13974
13975 -- GIMPLE function: gcatch *gimple_build_catch (tree types, gimple_seq
13976          handler)
13977     Build a 'GIMPLE_CATCH' statement.  'TYPES' are the tree types this
13978     catch handles.  'HANDLER' is a sequence of statements with the code
13979     for the handler.
13980
13981 -- GIMPLE function: tree gimple_catch_types (const gcatch *g)
13982     Return the types handled by 'GIMPLE_CATCH' statement 'G'.
13983
13984 -- GIMPLE function: tree * gimple_catch_types_ptr (gcatch *g)
13985     Return a pointer to the types handled by 'GIMPLE_CATCH' statement
13986     'G'.
13987
13988 -- GIMPLE function: gimple_seq gimple_catch_handler (gcatch *g)
13989     Return the GIMPLE sequence representing the body of the handler of
13990     'GIMPLE_CATCH' statement 'G'.
13991
13992 -- GIMPLE function: void gimple_catch_set_types (gcatch *g, tree t)
13993     Set 'T' to be the set of types handled by 'GIMPLE_CATCH' 'G'.
13994
13995 -- GIMPLE function: void gimple_catch_set_handler (gcatch *g,
13996          gimple_seq handler)
13997     Set 'HANDLER' to be the body of 'GIMPLE_CATCH' 'G'.
13998
13999
14000File: gccint.info,  Node: 'GIMPLE_COND',  Next: 'GIMPLE_DEBUG',  Prev: 'GIMPLE_CATCH',  Up: Tuple specific accessors
14001
1400212.8.6 'GIMPLE_COND'
14003--------------------
14004
14005 -- GIMPLE function: gcond *gimple_build_cond ( enum tree_code
14006          pred_code, tree lhs, tree rhs, tree t_label, tree f_label)
14007     Build a 'GIMPLE_COND' statement.  'A' 'GIMPLE_COND' statement
14008     compares 'LHS' and 'RHS' and if the condition in 'PRED_CODE' is
14009     true, jump to the label in 't_label', otherwise jump to the label
14010     in 'f_label'.  'PRED_CODE' are relational operator tree codes like
14011     'EQ_EXPR', 'LT_EXPR', 'LE_EXPR', 'NE_EXPR', etc.
14012
14013 -- GIMPLE function: gcond *gimple_build_cond_from_tree (tree cond, tree
14014          t_label, tree f_label)
14015     Build a 'GIMPLE_COND' statement from the conditional expression
14016     tree 'COND'.  'T_LABEL' and 'F_LABEL' are as in
14017     'gimple_build_cond'.
14018
14019 -- GIMPLE function: enum tree_code gimple_cond_code (gimple g)
14020     Return the code of the predicate computed by conditional statement
14021     'G'.
14022
14023 -- GIMPLE function: void gimple_cond_set_code (gcond *g, enum tree_code
14024          code)
14025     Set 'CODE' to be the predicate code for the conditional statement
14026     'G'.
14027
14028 -- GIMPLE function: tree gimple_cond_lhs (gimple g)
14029     Return the 'LHS' of the predicate computed by conditional statement
14030     'G'.
14031
14032 -- GIMPLE function: void gimple_cond_set_lhs (gcond *g, tree lhs)
14033     Set 'LHS' to be the 'LHS' operand of the predicate computed by
14034     conditional statement 'G'.
14035
14036 -- GIMPLE function: tree gimple_cond_rhs (gimple g)
14037     Return the 'RHS' operand of the predicate computed by conditional
14038     'G'.
14039
14040 -- GIMPLE function: void gimple_cond_set_rhs (gcond *g, tree rhs)
14041     Set 'RHS' to be the 'RHS' operand of the predicate computed by
14042     conditional statement 'G'.
14043
14044 -- GIMPLE function: tree gimple_cond_true_label (const gcond *g)
14045     Return the label used by conditional statement 'G' when its
14046     predicate evaluates to true.
14047
14048 -- GIMPLE function: void gimple_cond_set_true_label (gcond *g, tree
14049          label)
14050     Set 'LABEL' to be the label used by conditional statement 'G' when
14051     its predicate evaluates to true.
14052
14053 -- GIMPLE function: void gimple_cond_set_false_label (gcond *g, tree
14054          label)
14055     Set 'LABEL' to be the label used by conditional statement 'G' when
14056     its predicate evaluates to false.
14057
14058 -- GIMPLE function: tree gimple_cond_false_label (const gcond *g)
14059     Return the label used by conditional statement 'G' when its
14060     predicate evaluates to false.
14061
14062 -- GIMPLE function: void gimple_cond_make_false (gcond *g)
14063     Set the conditional 'COND_STMT' to be of the form 'if (1 == 0)'.
14064
14065 -- GIMPLE function: void gimple_cond_make_true (gcond *g)
14066     Set the conditional 'COND_STMT' to be of the form 'if (1 == 1)'.
14067
14068
14069File: gccint.info,  Node: 'GIMPLE_DEBUG',  Next: 'GIMPLE_EH_FILTER',  Prev: 'GIMPLE_COND',  Up: Tuple specific accessors
14070
1407112.8.7 'GIMPLE_DEBUG'
14072---------------------
14073
14074 -- GIMPLE function: gdebug *gimple_build_debug_bind (tree var, tree
14075          value, gimple stmt)
14076     Build a 'GIMPLE_DEBUG' statement with 'GIMPLE_DEBUG_BIND'
14077     'subcode'.  The effect of this statement is to tell debug
14078     information generation machinery that the value of user variable
14079     'var' is given by 'value' at that point, and to remain with that
14080     value until 'var' runs out of scope, a dynamically-subsequent debug
14081     bind statement overrides the binding, or conflicting values reach a
14082     control flow merge point.  Even if components of the 'value'
14083     expression change afterwards, the variable is supposed to retain
14084     the same value, though not necessarily the same location.
14085
14086     It is expected that 'var' be most often a tree for automatic user
14087     variables ('VAR_DECL' or 'PARM_DECL') that satisfy the requirements
14088     for gimple registers, but it may also be a tree for a scalarized
14089     component of a user variable ('ARRAY_REF', 'COMPONENT_REF'), or a
14090     debug temporary ('DEBUG_EXPR_DECL').
14091
14092     As for 'value', it can be an arbitrary tree expression, but it is
14093     recommended that it be in a suitable form for a gimple assignment
14094     'RHS'.  It is not expected that user variables that could appear as
14095     'var' ever appear in 'value', because in the latter we'd have their
14096     'SSA_NAME's instead, but even if they were not in SSA form, user
14097     variables appearing in 'value' are to be regarded as part of the
14098     executable code space, whereas those in 'var' are to be regarded as
14099     part of the source code space.  There is no way to refer to the
14100     value bound to a user variable within a 'value' expression.
14101
14102     If 'value' is 'GIMPLE_DEBUG_BIND_NOVALUE', debug information
14103     generation machinery is informed that the variable 'var' is
14104     unbound, i.e., that its value is indeterminate, which sometimes
14105     means it is really unavailable, and other times that the compiler
14106     could not keep track of it.
14107
14108     Block and location information for the newly-created stmt are taken
14109     from 'stmt', if given.
14110
14111 -- GIMPLE function: tree gimple_debug_bind_get_var (gimple stmt)
14112     Return the user variable VAR that is bound at 'stmt'.
14113
14114 -- GIMPLE function: tree gimple_debug_bind_get_value (gimple stmt)
14115     Return the value expression that is bound to a user variable at
14116     'stmt'.
14117
14118 -- GIMPLE function: tree * gimple_debug_bind_get_value_ptr (gimple
14119          stmt)
14120     Return a pointer to the value expression that is bound to a user
14121     variable at 'stmt'.
14122
14123 -- GIMPLE function: void gimple_debug_bind_set_var (gimple stmt, tree
14124          var)
14125     Modify the user variable bound at 'stmt' to VAR.
14126
14127 -- GIMPLE function: void gimple_debug_bind_set_value (gimple stmt, tree
14128          var)
14129     Modify the value bound to the user variable bound at 'stmt' to
14130     VALUE.
14131
14132 -- GIMPLE function: void gimple_debug_bind_reset_value (gimple stmt)
14133     Modify the value bound to the user variable bound at 'stmt' so that
14134     the variable becomes unbound.
14135
14136 -- GIMPLE function: bool gimple_debug_bind_has_value_p (gimple stmt)
14137     Return 'TRUE' if 'stmt' binds a user variable to a value, and
14138     'FALSE' if it unbinds the variable.
14139
14140 -- GIMPLE function: gimple gimple_build_debug_begin_stmt (tree block,
14141          location_t location)
14142     Build a 'GIMPLE_DEBUG' statement with 'GIMPLE_DEBUG_BEGIN_STMT'
14143     'subcode'.  The effect of this statement is to tell debug
14144     information generation machinery that the user statement at the
14145     given 'location' and 'block' starts at the point at which the
14146     statement is inserted.  The intent is that side effects (e.g.
14147     variable bindings) of all prior user statements are observable, and
14148     that none of the side effects of subsequent user statements are.
14149
14150 -- GIMPLE function: gimple gimple_build_debug_inline_entry (tree block,
14151          location_t location)
14152     Build a 'GIMPLE_DEBUG' statement with 'GIMPLE_DEBUG_INLINE_ENTRY'
14153     'subcode'.  The effect of this statement is to tell debug
14154     information generation machinery that a function call at 'location'
14155     underwent inline substitution, that 'block' is the enclosing
14156     lexical block created for the substitution, and that at the point
14157     of the program in which the stmt is inserted, all parameters for
14158     the inlined function are bound to the respective arguments, and
14159     none of the side effects of its stmts are observable.
14160
14161
14162File: gccint.info,  Node: 'GIMPLE_EH_FILTER',  Next: 'GIMPLE_LABEL',  Prev: 'GIMPLE_DEBUG',  Up: Tuple specific accessors
14163
1416412.8.8 'GIMPLE_EH_FILTER'
14165-------------------------
14166
14167 -- GIMPLE function: geh_filter *gimple_build_eh_filter (tree types,
14168          gimple_seq failure)
14169     Build a 'GIMPLE_EH_FILTER' statement.  'TYPES' are the filter's
14170     types.  'FAILURE' is a sequence with the filter's failure action.
14171
14172 -- GIMPLE function: tree gimple_eh_filter_types (gimple g)
14173     Return the types handled by 'GIMPLE_EH_FILTER' statement 'G'.
14174
14175 -- GIMPLE function: tree * gimple_eh_filter_types_ptr (gimple g)
14176     Return a pointer to the types handled by 'GIMPLE_EH_FILTER'
14177     statement 'G'.
14178
14179 -- GIMPLE function: gimple_seq gimple_eh_filter_failure (gimple g)
14180     Return the sequence of statement to execute when 'GIMPLE_EH_FILTER'
14181     statement fails.
14182
14183 -- GIMPLE function: void gimple_eh_filter_set_types (geh_filter *g,
14184          tree types)
14185     Set 'TYPES' to be the set of types handled by 'GIMPLE_EH_FILTER'
14186     'G'.
14187
14188 -- GIMPLE function: void gimple_eh_filter_set_failure (geh_filter *g,
14189          gimple_seq failure)
14190     Set 'FAILURE' to be the sequence of statements to execute on
14191     failure for 'GIMPLE_EH_FILTER' 'G'.
14192
14193 -- GIMPLE function: tree gimple_eh_must_not_throw_fndecl ( geh_mnt
14194          *eh_mnt_stmt)
14195     Get the function decl to be called by the MUST_NOT_THROW region.
14196
14197 -- GIMPLE function: void gimple_eh_must_not_throw_set_fndecl ( geh_mnt
14198          *eh_mnt_stmt, tree decl)
14199     Set the function decl to be called by GS to DECL.
14200
14201
14202File: gccint.info,  Node: 'GIMPLE_LABEL',  Next: 'GIMPLE_GOTO',  Prev: 'GIMPLE_EH_FILTER',  Up: Tuple specific accessors
14203
1420412.8.9 'GIMPLE_LABEL'
14205---------------------
14206
14207 -- GIMPLE function: glabel *gimple_build_label (tree label)
14208     Build a 'GIMPLE_LABEL' statement with corresponding to the tree
14209     label, 'LABEL'.
14210
14211 -- GIMPLE function: tree gimple_label_label (const glabel *g)
14212     Return the 'LABEL_DECL' node used by 'GIMPLE_LABEL' statement 'G'.
14213
14214 -- GIMPLE function: void gimple_label_set_label (glabel *g, tree label)
14215     Set 'LABEL' to be the 'LABEL_DECL' node used by 'GIMPLE_LABEL'
14216     statement 'G'.
14217
14218
14219File: gccint.info,  Node: 'GIMPLE_GOTO',  Next: 'GIMPLE_NOP',  Prev: 'GIMPLE_LABEL',  Up: Tuple specific accessors
14220
1422112.8.10 'GIMPLE_GOTO'
14222---------------------
14223
14224 -- GIMPLE function: ggoto *gimple_build_goto (tree dest)
14225     Build a 'GIMPLE_GOTO' statement to label 'DEST'.
14226
14227 -- GIMPLE function: tree gimple_goto_dest (gimple g)
14228     Return the destination of the unconditional jump 'G'.
14229
14230 -- GIMPLE function: void gimple_goto_set_dest (ggoto *g, tree dest)
14231     Set 'DEST' to be the destination of the unconditional jump 'G'.
14232
14233
14234File: gccint.info,  Node: 'GIMPLE_NOP',  Next: 'GIMPLE_OMP_ATOMIC_LOAD',  Prev: 'GIMPLE_GOTO',  Up: Tuple specific accessors
14235
1423612.8.11 'GIMPLE_NOP'
14237--------------------
14238
14239 -- GIMPLE function: gimple gimple_build_nop (void)
14240     Build a 'GIMPLE_NOP' statement.
14241
14242 -- GIMPLE function: bool gimple_nop_p (gimple g)
14243     Returns 'TRUE' if statement 'G' is a 'GIMPLE_NOP'.
14244
14245
14246File: gccint.info,  Node: 'GIMPLE_OMP_ATOMIC_LOAD',  Next: 'GIMPLE_OMP_ATOMIC_STORE',  Prev: 'GIMPLE_NOP',  Up: Tuple specific accessors
14247
1424812.8.12 'GIMPLE_OMP_ATOMIC_LOAD'
14249--------------------------------
14250
14251 -- GIMPLE function: gomp_atomic_load *gimple_build_omp_atomic_load (
14252          tree lhs, tree rhs)
14253     Build a 'GIMPLE_OMP_ATOMIC_LOAD' statement.  'LHS' is the left-hand
14254     side of the assignment.  'RHS' is the right-hand side of the
14255     assignment.
14256
14257 -- GIMPLE function: void gimple_omp_atomic_load_set_lhs (
14258          gomp_atomic_load *g, tree lhs)
14259     Set the 'LHS' of an atomic load.
14260
14261 -- GIMPLE function: tree gimple_omp_atomic_load_lhs ( const
14262          gomp_atomic_load *g)
14263     Get the 'LHS' of an atomic load.
14264
14265 -- GIMPLE function: void gimple_omp_atomic_load_set_rhs (
14266          gomp_atomic_load *g, tree rhs)
14267     Set the 'RHS' of an atomic set.
14268
14269 -- GIMPLE function: tree gimple_omp_atomic_load_rhs ( const
14270          gomp_atomic_load *g)
14271     Get the 'RHS' of an atomic set.
14272
14273
14274File: gccint.info,  Node: 'GIMPLE_OMP_ATOMIC_STORE',  Next: 'GIMPLE_OMP_CONTINUE',  Prev: 'GIMPLE_OMP_ATOMIC_LOAD',  Up: Tuple specific accessors
14275
1427612.8.13 'GIMPLE_OMP_ATOMIC_STORE'
14277---------------------------------
14278
14279 -- GIMPLE function: gomp_atomic_store *gimple_build_omp_atomic_store (
14280          tree val)
14281     Build a 'GIMPLE_OMP_ATOMIC_STORE' statement.  'VAL' is the value to
14282     be stored.
14283
14284 -- GIMPLE function: void gimple_omp_atomic_store_set_val (
14285          gomp_atomic_store *g, tree val)
14286     Set the value being stored in an atomic store.
14287
14288 -- GIMPLE function: tree gimple_omp_atomic_store_val ( const
14289          gomp_atomic_store *g)
14290     Return the value being stored in an atomic store.
14291
14292
14293File: gccint.info,  Node: 'GIMPLE_OMP_CONTINUE',  Next: 'GIMPLE_OMP_CRITICAL',  Prev: 'GIMPLE_OMP_ATOMIC_STORE',  Up: Tuple specific accessors
14294
1429512.8.14 'GIMPLE_OMP_CONTINUE'
14296-----------------------------
14297
14298 -- GIMPLE function: gomp_continue *gimple_build_omp_continue ( tree
14299          control_def, tree control_use)
14300     Build a 'GIMPLE_OMP_CONTINUE' statement.  'CONTROL_DEF' is the
14301     definition of the control variable.  'CONTROL_USE' is the use of
14302     the control variable.
14303
14304 -- GIMPLE function: tree gimple_omp_continue_control_def ( const
14305          gomp_continue *s)
14306     Return the definition of the control variable on a
14307     'GIMPLE_OMP_CONTINUE' in 'S'.
14308
14309 -- GIMPLE function: tree gimple_omp_continue_control_def_ptr (
14310          gomp_continue *s)
14311     Same as above, but return the pointer.
14312
14313 -- GIMPLE function: tree gimple_omp_continue_set_control_def (
14314          gomp_continue *s)
14315     Set the control variable definition for a 'GIMPLE_OMP_CONTINUE'
14316     statement in 'S'.
14317
14318 -- GIMPLE function: tree gimple_omp_continue_control_use ( const
14319          gomp_continue *s)
14320     Return the use of the control variable on a 'GIMPLE_OMP_CONTINUE'
14321     in 'S'.
14322
14323 -- GIMPLE function: tree gimple_omp_continue_control_use_ptr (
14324          gomp_continue *s)
14325     Same as above, but return the pointer.
14326
14327 -- GIMPLE function: tree gimple_omp_continue_set_control_use (
14328          gomp_continue *s)
14329     Set the control variable use for a 'GIMPLE_OMP_CONTINUE' statement
14330     in 'S'.
14331
14332
14333File: gccint.info,  Node: 'GIMPLE_OMP_CRITICAL',  Next: 'GIMPLE_OMP_FOR',  Prev: 'GIMPLE_OMP_CONTINUE',  Up: Tuple specific accessors
14334
1433512.8.15 'GIMPLE_OMP_CRITICAL'
14336-----------------------------
14337
14338 -- GIMPLE function: gomp_critical *gimple_build_omp_critical (
14339          gimple_seq body, tree name)
14340     Build a 'GIMPLE_OMP_CRITICAL' statement.  'BODY' is the sequence of
14341     statements for which only one thread can execute.  'NAME' is an
14342     optional identifier for this critical block.
14343
14344 -- GIMPLE function: tree gimple_omp_critical_name ( const gomp_critical
14345          *g)
14346     Return the name associated with 'OMP_CRITICAL' statement 'G'.
14347
14348 -- GIMPLE function: tree * gimple_omp_critical_name_ptr ( gomp_critical
14349          *g)
14350     Return a pointer to the name associated with 'OMP' critical
14351     statement 'G'.
14352
14353 -- GIMPLE function: void gimple_omp_critical_set_name ( gomp_critical
14354          *g, tree name)
14355     Set 'NAME' to be the name associated with 'OMP' critical statement
14356     'G'.
14357
14358
14359File: gccint.info,  Node: 'GIMPLE_OMP_FOR',  Next: 'GIMPLE_OMP_MASTER',  Prev: 'GIMPLE_OMP_CRITICAL',  Up: Tuple specific accessors
14360
1436112.8.16 'GIMPLE_OMP_FOR'
14362------------------------
14363
14364 -- GIMPLE function: gomp_for *gimple_build_omp_for (gimple_seq body,
14365          tree clauses, tree index, tree initial, tree final, tree incr,
14366          gimple_seq pre_body, enum tree_code omp_for_cond)
14367     Build a 'GIMPLE_OMP_FOR' statement.  'BODY' is sequence of
14368     statements inside the for loop.  'CLAUSES', are any of the loop
14369     construct's clauses.  'PRE_BODY' is the sequence of statements that
14370     are loop invariant.  'INDEX' is the index variable.  'INITIAL' is
14371     the initial value of 'INDEX'.  'FINAL' is final value of 'INDEX'.
14372     OMP_FOR_COND is the predicate used to compare 'INDEX' and 'FINAL'.
14373     'INCR' is the increment expression.
14374
14375 -- GIMPLE function: tree gimple_omp_for_clauses (gimple g)
14376     Return the clauses associated with 'OMP_FOR' 'G'.
14377
14378 -- GIMPLE function: tree * gimple_omp_for_clauses_ptr (gimple g)
14379     Return a pointer to the 'OMP_FOR' 'G'.
14380
14381 -- GIMPLE function: void gimple_omp_for_set_clauses (gimple g, tree
14382          clauses)
14383     Set 'CLAUSES' to be the list of clauses associated with 'OMP_FOR'
14384     'G'.
14385
14386 -- GIMPLE function: tree gimple_omp_for_index (gimple g)
14387     Return the index variable for 'OMP_FOR' 'G'.
14388
14389 -- GIMPLE function: tree * gimple_omp_for_index_ptr (gimple g)
14390     Return a pointer to the index variable for 'OMP_FOR' 'G'.
14391
14392 -- GIMPLE function: void gimple_omp_for_set_index (gimple g, tree
14393          index)
14394     Set 'INDEX' to be the index variable for 'OMP_FOR' 'G'.
14395
14396 -- GIMPLE function: tree gimple_omp_for_initial (gimple g)
14397     Return the initial value for 'OMP_FOR' 'G'.
14398
14399 -- GIMPLE function: tree * gimple_omp_for_initial_ptr (gimple g)
14400     Return a pointer to the initial value for 'OMP_FOR' 'G'.
14401
14402 -- GIMPLE function: void gimple_omp_for_set_initial (gimple g, tree
14403          initial)
14404     Set 'INITIAL' to be the initial value for 'OMP_FOR' 'G'.
14405
14406 -- GIMPLE function: tree gimple_omp_for_final (gimple g)
14407     Return the final value for 'OMP_FOR' 'G'.
14408
14409 -- GIMPLE function: tree * gimple_omp_for_final_ptr (gimple g)
14410     turn a pointer to the final value for 'OMP_FOR' 'G'.
14411
14412 -- GIMPLE function: void gimple_omp_for_set_final (gimple g, tree
14413          final)
14414     Set 'FINAL' to be the final value for 'OMP_FOR' 'G'.
14415
14416 -- GIMPLE function: tree gimple_omp_for_incr (gimple g)
14417     Return the increment value for 'OMP_FOR' 'G'.
14418
14419 -- GIMPLE function: tree * gimple_omp_for_incr_ptr (gimple g)
14420     Return a pointer to the increment value for 'OMP_FOR' 'G'.
14421
14422 -- GIMPLE function: void gimple_omp_for_set_incr (gimple g, tree incr)
14423     Set 'INCR' to be the increment value for 'OMP_FOR' 'G'.
14424
14425 -- GIMPLE function: gimple_seq gimple_omp_for_pre_body (gimple g)
14426     Return the sequence of statements to execute before the 'OMP_FOR'
14427     statement 'G' starts.
14428
14429 -- GIMPLE function: void gimple_omp_for_set_pre_body (gimple g,
14430          gimple_seq pre_body)
14431     Set 'PRE_BODY' to be the sequence of statements to execute before
14432     the 'OMP_FOR' statement 'G' starts.
14433
14434 -- GIMPLE function: void gimple_omp_for_set_cond (gimple g, enum
14435          tree_code cond)
14436     Set 'COND' to be the condition code for 'OMP_FOR' 'G'.
14437
14438 -- GIMPLE function: enum tree_code gimple_omp_for_cond (gimple g)
14439     Return the condition code associated with 'OMP_FOR' 'G'.
14440
14441
14442File: gccint.info,  Node: 'GIMPLE_OMP_MASTER',  Next: 'GIMPLE_OMP_ORDERED',  Prev: 'GIMPLE_OMP_FOR',  Up: Tuple specific accessors
14443
1444412.8.17 'GIMPLE_OMP_MASTER'
14445---------------------------
14446
14447 -- GIMPLE function: gimple gimple_build_omp_master (gimple_seq body)
14448     Build a 'GIMPLE_OMP_MASTER' statement.  'BODY' is the sequence of
14449     statements to be executed by just the master.
14450
14451
14452File: gccint.info,  Node: 'GIMPLE_OMP_ORDERED',  Next: 'GIMPLE_OMP_PARALLEL',  Prev: 'GIMPLE_OMP_MASTER',  Up: Tuple specific accessors
14453
1445412.8.18 'GIMPLE_OMP_ORDERED'
14455----------------------------
14456
14457 -- GIMPLE function: gimple gimple_build_omp_ordered (gimple_seq body)
14458     Build a 'GIMPLE_OMP_ORDERED' statement.
14459
14460 'BODY' is the sequence of statements inside a loop that will executed
14461in sequence.
14462
14463
14464File: gccint.info,  Node: 'GIMPLE_OMP_PARALLEL',  Next: 'GIMPLE_OMP_RETURN',  Prev: 'GIMPLE_OMP_ORDERED',  Up: Tuple specific accessors
14465
1446612.8.19 'GIMPLE_OMP_PARALLEL'
14467-----------------------------
14468
14469 -- GIMPLE function: gomp_parallel *gimple_build_omp_parallel
14470          (gimple_seq body, tree clauses, tree child_fn, tree data_arg)
14471     Build a 'GIMPLE_OMP_PARALLEL' statement.
14472
14473 'BODY' is sequence of statements which are executed in parallel.
14474'CLAUSES', are the 'OMP' parallel construct's clauses.  'CHILD_FN' is
14475the function created for the parallel threads to execute.  'DATA_ARG'
14476are the shared data argument(s).
14477
14478 -- GIMPLE function: bool gimple_omp_parallel_combined_p (gimple g)
14479     Return true if 'OMP' parallel statement 'G' has the
14480     'GF_OMP_PARALLEL_COMBINED' flag set.
14481
14482 -- GIMPLE function: void gimple_omp_parallel_set_combined_p (gimple g)
14483     Set the 'GF_OMP_PARALLEL_COMBINED' field in 'OMP' parallel
14484     statement 'G'.
14485
14486 -- GIMPLE function: gimple_seq gimple_omp_body (gimple g)
14487     Return the body for the 'OMP' statement 'G'.
14488
14489 -- GIMPLE function: void gimple_omp_set_body (gimple g, gimple_seq
14490          body)
14491     Set 'BODY' to be the body for the 'OMP' statement 'G'.
14492
14493 -- GIMPLE function: tree gimple_omp_parallel_clauses (gimple g)
14494     Return the clauses associated with 'OMP_PARALLEL' 'G'.
14495
14496 -- GIMPLE function: tree * gimple_omp_parallel_clauses_ptr (
14497          gomp_parallel *g)
14498     Return a pointer to the clauses associated with 'OMP_PARALLEL' 'G'.
14499
14500 -- GIMPLE function: void gimple_omp_parallel_set_clauses (
14501          gomp_parallel *g, tree clauses)
14502     Set 'CLAUSES' to be the list of clauses associated with
14503     'OMP_PARALLEL' 'G'.
14504
14505 -- GIMPLE function: tree gimple_omp_parallel_child_fn ( const
14506          gomp_parallel *g)
14507     Return the child function used to hold the body of 'OMP_PARALLEL'
14508     'G'.
14509
14510 -- GIMPLE function: tree * gimple_omp_parallel_child_fn_ptr (
14511          gomp_parallel *g)
14512     Return a pointer to the child function used to hold the body of
14513     'OMP_PARALLEL' 'G'.
14514
14515 -- GIMPLE function: void gimple_omp_parallel_set_child_fn (
14516          gomp_parallel *g, tree child_fn)
14517     Set 'CHILD_FN' to be the child function for 'OMP_PARALLEL' 'G'.
14518
14519 -- GIMPLE function: tree gimple_omp_parallel_data_arg ( const
14520          gomp_parallel *g)
14521     Return the artificial argument used to send variables and values
14522     from the parent to the children threads in 'OMP_PARALLEL' 'G'.
14523
14524 -- GIMPLE function: tree * gimple_omp_parallel_data_arg_ptr (
14525          gomp_parallel *g)
14526     Return a pointer to the data argument for 'OMP_PARALLEL' 'G'.
14527
14528 -- GIMPLE function: void gimple_omp_parallel_set_data_arg (
14529          gomp_parallel *g, tree data_arg)
14530     Set 'DATA_ARG' to be the data argument for 'OMP_PARALLEL' 'G'.
14531
14532
14533File: gccint.info,  Node: 'GIMPLE_OMP_RETURN',  Next: 'GIMPLE_OMP_SECTION',  Prev: 'GIMPLE_OMP_PARALLEL',  Up: Tuple specific accessors
14534
1453512.8.20 'GIMPLE_OMP_RETURN'
14536---------------------------
14537
14538 -- GIMPLE function: gimple gimple_build_omp_return (bool wait_p)
14539     Build a 'GIMPLE_OMP_RETURN' statement.  'WAIT_P' is true if this is
14540     a non-waiting return.
14541
14542 -- GIMPLE function: void gimple_omp_return_set_nowait (gimple s)
14543     Set the nowait flag on 'GIMPLE_OMP_RETURN' statement 'S'.
14544
14545 -- GIMPLE function: bool gimple_omp_return_nowait_p (gimple g)
14546     Return true if 'OMP' return statement 'G' has the
14547     'GF_OMP_RETURN_NOWAIT' flag set.
14548
14549
14550File: gccint.info,  Node: 'GIMPLE_OMP_SECTION',  Next: 'GIMPLE_OMP_SECTIONS',  Prev: 'GIMPLE_OMP_RETURN',  Up: Tuple specific accessors
14551
1455212.8.21 'GIMPLE_OMP_SECTION'
14553----------------------------
14554
14555 -- GIMPLE function: gimple gimple_build_omp_section (gimple_seq body)
14556     Build a 'GIMPLE_OMP_SECTION' statement for a sections statement.
14557
14558 'BODY' is the sequence of statements in the section.
14559
14560 -- GIMPLE function: bool gimple_omp_section_last_p (gimple g)
14561     Return true if 'OMP' section statement 'G' has the
14562     'GF_OMP_SECTION_LAST' flag set.
14563
14564 -- GIMPLE function: void gimple_omp_section_set_last (gimple g)
14565     Set the 'GF_OMP_SECTION_LAST' flag on 'G'.
14566
14567
14568File: gccint.info,  Node: 'GIMPLE_OMP_SECTIONS',  Next: 'GIMPLE_OMP_SINGLE',  Prev: 'GIMPLE_OMP_SECTION',  Up: Tuple specific accessors
14569
1457012.8.22 'GIMPLE_OMP_SECTIONS'
14571-----------------------------
14572
14573 -- GIMPLE function: gomp_sections *gimple_build_omp_sections (
14574          gimple_seq body, tree clauses)
14575     Build a 'GIMPLE_OMP_SECTIONS' statement.  'BODY' is a sequence of
14576     section statements.  'CLAUSES' are any of the 'OMP' sections
14577     construct's clauses: private, firstprivate, lastprivate, reduction,
14578     and nowait.
14579
14580 -- GIMPLE function: gimple gimple_build_omp_sections_switch (void)
14581     Build a 'GIMPLE_OMP_SECTIONS_SWITCH' statement.
14582
14583 -- GIMPLE function: tree gimple_omp_sections_control (gimple g)
14584     Return the control variable associated with the
14585     'GIMPLE_OMP_SECTIONS' in 'G'.
14586
14587 -- GIMPLE function: tree * gimple_omp_sections_control_ptr (gimple g)
14588     Return a pointer to the clauses associated with the
14589     'GIMPLE_OMP_SECTIONS' in 'G'.
14590
14591 -- GIMPLE function: void gimple_omp_sections_set_control (gimple g,
14592          tree control)
14593     Set 'CONTROL' to be the set of clauses associated with the
14594     'GIMPLE_OMP_SECTIONS' in 'G'.
14595
14596 -- GIMPLE function: tree gimple_omp_sections_clauses (gimple g)
14597     Return the clauses associated with 'OMP_SECTIONS' 'G'.
14598
14599 -- GIMPLE function: tree * gimple_omp_sections_clauses_ptr (gimple g)
14600     Return a pointer to the clauses associated with 'OMP_SECTIONS' 'G'.
14601
14602 -- GIMPLE function: void gimple_omp_sections_set_clauses (gimple g,
14603          tree clauses)
14604     Set 'CLAUSES' to be the set of clauses associated with
14605     'OMP_SECTIONS' 'G'.
14606
14607
14608File: gccint.info,  Node: 'GIMPLE_OMP_SINGLE',  Next: 'GIMPLE_PHI',  Prev: 'GIMPLE_OMP_SECTIONS',  Up: Tuple specific accessors
14609
1461012.8.23 'GIMPLE_OMP_SINGLE'
14611---------------------------
14612
14613 -- GIMPLE function: gomp_single *gimple_build_omp_single ( gimple_seq
14614          body, tree clauses)
14615     Build a 'GIMPLE_OMP_SINGLE' statement.  'BODY' is the sequence of
14616     statements that will be executed once.  'CLAUSES' are any of the
14617     'OMP' single construct's clauses: private, firstprivate,
14618     copyprivate, nowait.
14619
14620 -- GIMPLE function: tree gimple_omp_single_clauses (gimple g)
14621     Return the clauses associated with 'OMP_SINGLE' 'G'.
14622
14623 -- GIMPLE function: tree * gimple_omp_single_clauses_ptr (gimple g)
14624     Return a pointer to the clauses associated with 'OMP_SINGLE' 'G'.
14625
14626 -- GIMPLE function: void gimple_omp_single_set_clauses ( gomp_single
14627          *g, tree clauses)
14628     Set 'CLAUSES' to be the clauses associated with 'OMP_SINGLE' 'G'.
14629
14630
14631File: gccint.info,  Node: 'GIMPLE_PHI',  Next: 'GIMPLE_RESX',  Prev: 'GIMPLE_OMP_SINGLE',  Up: Tuple specific accessors
14632
1463312.8.24 'GIMPLE_PHI'
14634--------------------
14635
14636 -- GIMPLE function: unsigned gimple_phi_capacity (gimple g)
14637     Return the maximum number of arguments supported by 'GIMPLE_PHI'
14638     'G'.
14639
14640 -- GIMPLE function: unsigned gimple_phi_num_args (gimple g)
14641     Return the number of arguments in 'GIMPLE_PHI' 'G'.  This must
14642     always be exactly the number of incoming edges for the basic block
14643     holding 'G'.
14644
14645 -- GIMPLE function: tree gimple_phi_result (gimple g)
14646     Return the 'SSA' name created by 'GIMPLE_PHI' 'G'.
14647
14648 -- GIMPLE function: tree * gimple_phi_result_ptr (gimple g)
14649     Return a pointer to the 'SSA' name created by 'GIMPLE_PHI' 'G'.
14650
14651 -- GIMPLE function: void gimple_phi_set_result (gphi *g, tree result)
14652     Set 'RESULT' to be the 'SSA' name created by 'GIMPLE_PHI' 'G'.
14653
14654 -- GIMPLE function: struct phi_arg_d * gimple_phi_arg (gimple g, index)
14655     Return the 'PHI' argument corresponding to incoming edge 'INDEX'
14656     for 'GIMPLE_PHI' 'G'.
14657
14658 -- GIMPLE function: void gimple_phi_set_arg (gphi *g, index, struct
14659          phi_arg_d * phiarg)
14660     Set 'PHIARG' to be the argument corresponding to incoming edge
14661     'INDEX' for 'GIMPLE_PHI' 'G'.
14662
14663
14664File: gccint.info,  Node: 'GIMPLE_RESX',  Next: 'GIMPLE_RETURN',  Prev: 'GIMPLE_PHI',  Up: Tuple specific accessors
14665
1466612.8.25 'GIMPLE_RESX'
14667---------------------
14668
14669 -- GIMPLE function: gresx *gimple_build_resx (int region)
14670     Build a 'GIMPLE_RESX' statement which is a statement.  This
14671     statement is a placeholder for _Unwind_Resume before we know if a
14672     function call or a branch is needed.  'REGION' is the exception
14673     region from which control is flowing.
14674
14675 -- GIMPLE function: int gimple_resx_region (const gresx *g)
14676     Return the region number for 'GIMPLE_RESX' 'G'.
14677
14678 -- GIMPLE function: void gimple_resx_set_region (gresx *g, int region)
14679     Set 'REGION' to be the region number for 'GIMPLE_RESX' 'G'.
14680
14681
14682File: gccint.info,  Node: 'GIMPLE_RETURN',  Next: 'GIMPLE_SWITCH',  Prev: 'GIMPLE_RESX',  Up: Tuple specific accessors
14683
1468412.8.26 'GIMPLE_RETURN'
14685-----------------------
14686
14687 -- GIMPLE function: greturn *gimple_build_return (tree retval)
14688     Build a 'GIMPLE_RETURN' statement whose return value is retval.
14689
14690 -- GIMPLE function: tree gimple_return_retval (const greturn *g)
14691     Return the return value for 'GIMPLE_RETURN' 'G'.
14692
14693 -- GIMPLE function: void gimple_return_set_retval (greturn *g, tree
14694          retval)
14695     Set 'RETVAL' to be the return value for 'GIMPLE_RETURN' 'G'.
14696
14697
14698File: gccint.info,  Node: 'GIMPLE_SWITCH',  Next: 'GIMPLE_TRY',  Prev: 'GIMPLE_RETURN',  Up: Tuple specific accessors
14699
1470012.8.27 'GIMPLE_SWITCH'
14701-----------------------
14702
14703 -- GIMPLE function: gswitch *gimple_build_switch (tree index, tree
14704          default_label, 'vec'<tree> *args)
14705     Build a 'GIMPLE_SWITCH' statement.  'INDEX' is the index variable
14706     to switch on, and 'DEFAULT_LABEL' represents the default label.
14707     'ARGS' is a vector of 'CASE_LABEL_EXPR' trees that contain the
14708     non-default case labels.  Each label is a tree of code
14709     'CASE_LABEL_EXPR'.
14710
14711 -- GIMPLE function: unsigned gimple_switch_num_labels ( const gswitch
14712          *g)
14713     Return the number of labels associated with the switch statement
14714     'G'.
14715
14716 -- GIMPLE function: void gimple_switch_set_num_labels (gswitch *g,
14717          unsigned nlabels)
14718     Set 'NLABELS' to be the number of labels for the switch statement
14719     'G'.
14720
14721 -- GIMPLE function: tree gimple_switch_index (const gswitch *g)
14722     Return the index variable used by the switch statement 'G'.
14723
14724 -- GIMPLE function: void gimple_switch_set_index (gswitch *g, tree
14725          index)
14726     Set 'INDEX' to be the index variable for switch statement 'G'.
14727
14728 -- GIMPLE function: tree gimple_switch_label (const gswitch *g,
14729          unsigned index)
14730     Return the label numbered 'INDEX'.  The default label is 0,
14731     followed by any labels in a switch statement.
14732
14733 -- GIMPLE function: void gimple_switch_set_label (gswitch *g, unsigned
14734          index, tree label)
14735     Set the label number 'INDEX' to 'LABEL'.  0 is always the default
14736     label.
14737
14738 -- GIMPLE function: tree gimple_switch_default_label ( const gswitch
14739          *g)
14740     Return the default label for a switch statement.
14741
14742 -- GIMPLE function: void gimple_switch_set_default_label (gswitch *g,
14743          tree label)
14744     Set the default label for a switch statement.
14745
14746
14747File: gccint.info,  Node: 'GIMPLE_TRY',  Next: 'GIMPLE_WITH_CLEANUP_EXPR',  Prev: 'GIMPLE_SWITCH',  Up: Tuple specific accessors
14748
1474912.8.28 'GIMPLE_TRY'
14750--------------------
14751
14752 -- GIMPLE function: gtry *gimple_build_try (gimple_seq eval, gimple_seq
14753          cleanup, unsigned int kind)
14754     Build a 'GIMPLE_TRY' statement.  'EVAL' is a sequence with the
14755     expression to evaluate.  'CLEANUP' is a sequence of statements to
14756     run at clean-up time.  'KIND' is the enumeration value
14757     'GIMPLE_TRY_CATCH' if this statement denotes a try/catch construct
14758     or 'GIMPLE_TRY_FINALLY' if this statement denotes a try/finally
14759     construct.
14760
14761 -- GIMPLE function: enum gimple_try_flags gimple_try_kind (gimple g)
14762     Return the kind of try block represented by 'GIMPLE_TRY' 'G'.  This
14763     is either 'GIMPLE_TRY_CATCH' or 'GIMPLE_TRY_FINALLY'.
14764
14765 -- GIMPLE function: bool gimple_try_catch_is_cleanup (gimple g)
14766     Return the 'GIMPLE_TRY_CATCH_IS_CLEANUP' flag.
14767
14768 -- GIMPLE function: gimple_seq gimple_try_eval (gimple g)
14769     Return the sequence of statements used as the body for 'GIMPLE_TRY'
14770     'G'.
14771
14772 -- GIMPLE function: gimple_seq gimple_try_cleanup (gimple g)
14773     Return the sequence of statements used as the cleanup body for
14774     'GIMPLE_TRY' 'G'.
14775
14776 -- GIMPLE function: void gimple_try_set_catch_is_cleanup (gimple g,
14777          bool catch_is_cleanup)
14778     Set the 'GIMPLE_TRY_CATCH_IS_CLEANUP' flag.
14779
14780 -- GIMPLE function: void gimple_try_set_eval (gtry *g, gimple_seq eval)
14781     Set 'EVAL' to be the sequence of statements to use as the body for
14782     'GIMPLE_TRY' 'G'.
14783
14784 -- GIMPLE function: void gimple_try_set_cleanup (gtry *g, gimple_seq
14785          cleanup)
14786     Set 'CLEANUP' to be the sequence of statements to use as the
14787     cleanup body for 'GIMPLE_TRY' 'G'.
14788
14789
14790File: gccint.info,  Node: 'GIMPLE_WITH_CLEANUP_EXPR',  Prev: 'GIMPLE_TRY',  Up: Tuple specific accessors
14791
1479212.8.29 'GIMPLE_WITH_CLEANUP_EXPR'
14793----------------------------------
14794
14795 -- GIMPLE function: gimple gimple_build_wce (gimple_seq cleanup)
14796     Build a 'GIMPLE_WITH_CLEANUP_EXPR' statement.  'CLEANUP' is the
14797     clean-up expression.
14798
14799 -- GIMPLE function: gimple_seq gimple_wce_cleanup (gimple g)
14800     Return the cleanup sequence for cleanup statement 'G'.
14801
14802 -- GIMPLE function: void gimple_wce_set_cleanup (gimple g, gimple_seq
14803          cleanup)
14804     Set 'CLEANUP' to be the cleanup sequence for 'G'.
14805
14806 -- GIMPLE function: bool gimple_wce_cleanup_eh_only (gimple g)
14807     Return the 'CLEANUP_EH_ONLY' flag for a 'WCE' tuple.
14808
14809 -- GIMPLE function: void gimple_wce_set_cleanup_eh_only (gimple g, bool
14810          eh_only_p)
14811     Set the 'CLEANUP_EH_ONLY' flag for a 'WCE' tuple.
14812
14813
14814File: gccint.info,  Node: GIMPLE sequences,  Next: Sequence iterators,  Prev: Tuple specific accessors,  Up: GIMPLE
14815
1481612.9 GIMPLE sequences
14817=====================
14818
14819GIMPLE sequences are the tuple equivalent of 'STATEMENT_LIST''s used in
14820'GENERIC'.  They are used to chain statements together, and when used in
14821conjunction with sequence iterators, provide a framework for iterating
14822through statements.
14823
14824 GIMPLE sequences are of type struct 'gimple_sequence', but are more
14825commonly passed by reference to functions dealing with sequences.  The
14826type for a sequence pointer is 'gimple_seq' which is the same as struct
14827'gimple_sequence' *.  When declaring a local sequence, you can define a
14828local variable of type struct 'gimple_sequence'.  When declaring a
14829sequence allocated on the garbage collected heap, use the function
14830'gimple_seq_alloc' documented below.
14831
14832 There are convenience functions for iterating through sequences in the
14833section entitled Sequence Iterators.
14834
14835 Below is a list of functions to manipulate and query sequences.
14836
14837 -- GIMPLE function: void gimple_seq_add_stmt (gimple_seq *seq, gimple
14838          g)
14839     Link a gimple statement to the end of the sequence *'SEQ' if 'G' is
14840     not 'NULL'.  If *'SEQ' is 'NULL', allocate a sequence before
14841     linking.
14842
14843 -- GIMPLE function: void gimple_seq_add_seq (gimple_seq *dest,
14844          gimple_seq src)
14845     Append sequence 'SRC' to the end of sequence *'DEST' if 'SRC' is
14846     not 'NULL'.  If *'DEST' is 'NULL', allocate a new sequence before
14847     appending.
14848
14849 -- GIMPLE function: gimple_seq gimple_seq_deep_copy (gimple_seq src)
14850     Perform a deep copy of sequence 'SRC' and return the result.
14851
14852 -- GIMPLE function: gimple_seq gimple_seq_reverse (gimple_seq seq)
14853     Reverse the order of the statements in the sequence 'SEQ'.  Return
14854     'SEQ'.
14855
14856 -- GIMPLE function: gimple gimple_seq_first (gimple_seq s)
14857     Return the first statement in sequence 'S'.
14858
14859 -- GIMPLE function: gimple gimple_seq_last (gimple_seq s)
14860     Return the last statement in sequence 'S'.
14861
14862 -- GIMPLE function: void gimple_seq_set_last (gimple_seq s, gimple
14863          last)
14864     Set the last statement in sequence 'S' to the statement in 'LAST'.
14865
14866 -- GIMPLE function: void gimple_seq_set_first (gimple_seq s, gimple
14867          first)
14868     Set the first statement in sequence 'S' to the statement in
14869     'FIRST'.
14870
14871 -- GIMPLE function: void gimple_seq_init (gimple_seq s)
14872     Initialize sequence 'S' to an empty sequence.
14873
14874 -- GIMPLE function: gimple_seq gimple_seq_alloc (void)
14875     Allocate a new sequence in the garbage collected store and return
14876     it.
14877
14878 -- GIMPLE function: void gimple_seq_copy (gimple_seq dest, gimple_seq
14879          src)
14880     Copy the sequence 'SRC' into the sequence 'DEST'.
14881
14882 -- GIMPLE function: bool gimple_seq_empty_p (gimple_seq s)
14883     Return true if the sequence 'S' is empty.
14884
14885 -- GIMPLE function: gimple_seq bb_seq (basic_block bb)
14886     Returns the sequence of statements in 'BB'.
14887
14888 -- GIMPLE function: void set_bb_seq (basic_block bb, gimple_seq seq)
14889     Sets the sequence of statements in 'BB' to 'SEQ'.
14890
14891 -- GIMPLE function: bool gimple_seq_singleton_p (gimple_seq seq)
14892     Determine whether 'SEQ' contains exactly one statement.
14893
14894
14895File: gccint.info,  Node: Sequence iterators,  Next: Adding a new GIMPLE statement code,  Prev: GIMPLE sequences,  Up: GIMPLE
14896
1489712.10 Sequence iterators
14898========================
14899
14900Sequence iterators are convenience constructs for iterating through
14901statements in a sequence.  Given a sequence 'SEQ', here is a typical use
14902of gimple sequence iterators:
14903
14904     gimple_stmt_iterator gsi;
14905
14906     for (gsi = gsi_start (seq); !gsi_end_p (gsi); gsi_next (&gsi))
14907       {
14908         gimple g = gsi_stmt (gsi);
14909         /* Do something with gimple statement G.  */
14910       }
14911
14912 Backward iterations are possible:
14913
14914             for (gsi = gsi_last (seq); !gsi_end_p (gsi); gsi_prev (&gsi))
14915
14916 Forward and backward iterations on basic blocks are possible with
14917'gsi_start_bb' and 'gsi_last_bb'.
14918
14919 In the documentation below we sometimes refer to enum
14920'gsi_iterator_update'.  The valid options for this enumeration are:
14921
14922   * 'GSI_NEW_STMT' Only valid when a single statement is added.  Move
14923     the iterator to it.
14924
14925   * 'GSI_SAME_STMT' Leave the iterator at the same statement.
14926
14927   * 'GSI_CONTINUE_LINKING' Move iterator to whatever position is
14928     suitable for linking other statements in the same direction.
14929
14930 Below is a list of the functions used to manipulate and use statement
14931iterators.
14932
14933 -- GIMPLE function: gimple_stmt_iterator gsi_start (gimple_seq seq)
14934     Return a new iterator pointing to the sequence 'SEQ''s first
14935     statement.  If 'SEQ' is empty, the iterator's basic block is
14936     'NULL'.  Use 'gsi_start_bb' instead when the iterator needs to
14937     always have the correct basic block set.
14938
14939 -- GIMPLE function: gimple_stmt_iterator gsi_start_bb (basic_block bb)
14940     Return a new iterator pointing to the first statement in basic
14941     block 'BB'.
14942
14943 -- GIMPLE function: gimple_stmt_iterator gsi_last (gimple_seq seq)
14944     Return a new iterator initially pointing to the last statement of
14945     sequence 'SEQ'.  If 'SEQ' is empty, the iterator's basic block is
14946     'NULL'.  Use 'gsi_last_bb' instead when the iterator needs to
14947     always have the correct basic block set.
14948
14949 -- GIMPLE function: gimple_stmt_iterator gsi_last_bb (basic_block bb)
14950     Return a new iterator pointing to the last statement in basic block
14951     'BB'.
14952
14953 -- GIMPLE function: bool gsi_end_p (gimple_stmt_iterator i)
14954     Return 'TRUE' if at the end of 'I'.
14955
14956 -- GIMPLE function: bool gsi_one_before_end_p (gimple_stmt_iterator i)
14957     Return 'TRUE' if we're one statement before the end of 'I'.
14958
14959 -- GIMPLE function: void gsi_next (gimple_stmt_iterator *i)
14960     Advance the iterator to the next gimple statement.
14961
14962 -- GIMPLE function: void gsi_prev (gimple_stmt_iterator *i)
14963     Advance the iterator to the previous gimple statement.
14964
14965 -- GIMPLE function: gimple gsi_stmt (gimple_stmt_iterator i)
14966     Return the current stmt.
14967
14968 -- GIMPLE function: gimple_stmt_iterator gsi_after_labels (basic_block
14969          bb)
14970     Return a block statement iterator that points to the first
14971     non-label statement in block 'BB'.
14972
14973 -- GIMPLE function: gimple * gsi_stmt_ptr (gimple_stmt_iterator *i)
14974     Return a pointer to the current stmt.
14975
14976 -- GIMPLE function: basic_block gsi_bb (gimple_stmt_iterator i)
14977     Return the basic block associated with this iterator.
14978
14979 -- GIMPLE function: gimple_seq gsi_seq (gimple_stmt_iterator i)
14980     Return the sequence associated with this iterator.
14981
14982 -- GIMPLE function: void gsi_remove (gimple_stmt_iterator *i, bool
14983          remove_eh_info)
14984     Remove the current stmt from the sequence.  The iterator is updated
14985     to point to the next statement.  When 'REMOVE_EH_INFO' is true we
14986     remove the statement pointed to by iterator 'I' from the 'EH'
14987     tables.  Otherwise we do not modify the 'EH' tables.  Generally,
14988     'REMOVE_EH_INFO' should be true when the statement is going to be
14989     removed from the 'IL' and not reinserted elsewhere.
14990
14991 -- GIMPLE function: void gsi_link_seq_before (gimple_stmt_iterator *i,
14992          gimple_seq seq, enum gsi_iterator_update mode)
14993     Links the sequence of statements 'SEQ' before the statement pointed
14994     by iterator 'I'.  'MODE' indicates what to do with the iterator
14995     after insertion (see 'enum gsi_iterator_update' above).
14996
14997 -- GIMPLE function: void gsi_link_before (gimple_stmt_iterator *i,
14998          gimple g, enum gsi_iterator_update mode)
14999     Links statement 'G' before the statement pointed-to by iterator
15000     'I'.  Updates iterator 'I' according to 'MODE'.
15001
15002 -- GIMPLE function: void gsi_link_seq_after (gimple_stmt_iterator *i,
15003          gimple_seq seq, enum gsi_iterator_update mode)
15004     Links sequence 'SEQ' after the statement pointed-to by iterator
15005     'I'.  'MODE' is as in 'gsi_insert_after'.
15006
15007 -- GIMPLE function: void gsi_link_after (gimple_stmt_iterator *i,
15008          gimple g, enum gsi_iterator_update mode)
15009     Links statement 'G' after the statement pointed-to by iterator 'I'.
15010     'MODE' is as in 'gsi_insert_after'.
15011
15012 -- GIMPLE function: gimple_seq gsi_split_seq_after
15013          (gimple_stmt_iterator i)
15014     Move all statements in the sequence after 'I' to a new sequence.
15015     Return this new sequence.
15016
15017 -- GIMPLE function: gimple_seq gsi_split_seq_before
15018          (gimple_stmt_iterator *i)
15019     Move all statements in the sequence before 'I' to a new sequence.
15020     Return this new sequence.
15021
15022 -- GIMPLE function: void gsi_replace (gimple_stmt_iterator *i, gimple
15023          stmt, bool update_eh_info)
15024     Replace the statement pointed-to by 'I' to 'STMT'.  If
15025     'UPDATE_EH_INFO' is true, the exception handling information of the
15026     original statement is moved to the new statement.
15027
15028 -- GIMPLE function: void gsi_insert_before (gimple_stmt_iterator *i,
15029          gimple stmt, enum gsi_iterator_update mode)
15030     Insert statement 'STMT' before the statement pointed-to by iterator
15031     'I', update 'STMT''s basic block and scan it for new operands.
15032     'MODE' specifies how to update iterator 'I' after insertion (see
15033     enum 'gsi_iterator_update').
15034
15035 -- GIMPLE function: void gsi_insert_seq_before (gimple_stmt_iterator
15036          *i, gimple_seq seq, enum gsi_iterator_update mode)
15037     Like 'gsi_insert_before', but for all the statements in 'SEQ'.
15038
15039 -- GIMPLE function: void gsi_insert_after (gimple_stmt_iterator *i,
15040          gimple stmt, enum gsi_iterator_update mode)
15041     Insert statement 'STMT' after the statement pointed-to by iterator
15042     'I', update 'STMT''s basic block and scan it for new operands.
15043     'MODE' specifies how to update iterator 'I' after insertion (see
15044     enum 'gsi_iterator_update').
15045
15046 -- GIMPLE function: void gsi_insert_seq_after (gimple_stmt_iterator *i,
15047          gimple_seq seq, enum gsi_iterator_update mode)
15048     Like 'gsi_insert_after', but for all the statements in 'SEQ'.
15049
15050 -- GIMPLE function: gimple_stmt_iterator gsi_for_stmt (gimple stmt)
15051     Finds iterator for 'STMT'.
15052
15053 -- GIMPLE function: void gsi_move_after (gimple_stmt_iterator *from,
15054          gimple_stmt_iterator *to)
15055     Move the statement at 'FROM' so it comes right after the statement
15056     at 'TO'.
15057
15058 -- GIMPLE function: void gsi_move_before (gimple_stmt_iterator *from,
15059          gimple_stmt_iterator *to)
15060     Move the statement at 'FROM' so it comes right before the statement
15061     at 'TO'.
15062
15063 -- GIMPLE function: void gsi_move_to_bb_end (gimple_stmt_iterator
15064          *from, basic_block bb)
15065     Move the statement at 'FROM' to the end of basic block 'BB'.
15066
15067 -- GIMPLE function: void gsi_insert_on_edge (edge e, gimple stmt)
15068     Add 'STMT' to the pending list of edge 'E'.  No actual insertion is
15069     made until a call to 'gsi_commit_edge_inserts'() is made.
15070
15071 -- GIMPLE function: void gsi_insert_seq_on_edge (edge e, gimple_seq
15072          seq)
15073     Add the sequence of statements in 'SEQ' to the pending list of edge
15074     'E'.  No actual insertion is made until a call to
15075     'gsi_commit_edge_inserts'() is made.
15076
15077 -- GIMPLE function: basic_block gsi_insert_on_edge_immediate (edge e,
15078          gimple stmt)
15079     Similar to 'gsi_insert_on_edge'+'gsi_commit_edge_inserts'.  If a
15080     new block has to be created, it is returned.
15081
15082 -- GIMPLE function: void gsi_commit_one_edge_insert (edge e,
15083          basic_block *new_bb)
15084     Commit insertions pending at edge 'E'.  If a new block is created,
15085     set 'NEW_BB' to this block, otherwise set it to 'NULL'.
15086
15087 -- GIMPLE function: void gsi_commit_edge_inserts (void)
15088     This routine will commit all pending edge insertions, creating any
15089     new basic blocks which are necessary.
15090
15091
15092File: gccint.info,  Node: Adding a new GIMPLE statement code,  Next: Statement and operand traversals,  Prev: Sequence iterators,  Up: GIMPLE
15093
1509412.11 Adding a new GIMPLE statement code
15095========================================
15096
15097The first step in adding a new GIMPLE statement code, is modifying the
15098file 'gimple.def', which contains all the GIMPLE codes.  Then you must
15099add a corresponding gimple subclass located in 'gimple.h'.  This in
15100turn, will require you to add a corresponding 'GTY' tag in
15101'gsstruct.def', and code to handle this tag in 'gss_for_code' which is
15102located in 'gimple.c'.
15103
15104 In order for the garbage collector to know the size of the structure
15105you created in 'gimple.h', you need to add a case to handle your new
15106GIMPLE statement in 'gimple_size' which is located in 'gimple.c'.
15107
15108 You will probably want to create a function to build the new gimple
15109statement in 'gimple.c'.  The function should be called
15110'gimple_build_NEW-TUPLE-NAME', and should return the new tuple as a
15111pointer to the appropriate gimple subclass.
15112
15113 If your new statement requires accessors for any members or operands it
15114may have, put simple inline accessors in 'gimple.h' and any non-trivial
15115accessors in 'gimple.c' with a corresponding prototype in 'gimple.h'.
15116
15117 You should add the new statement subclass to the class hierarchy
15118diagram in 'gimple.texi'.
15119
15120
15121File: gccint.info,  Node: Statement and operand traversals,  Prev: Adding a new GIMPLE statement code,  Up: GIMPLE
15122
1512312.12 Statement and operand traversals
15124======================================
15125
15126There are two functions available for walking statements and sequences:
15127'walk_gimple_stmt' and 'walk_gimple_seq', accordingly, and a third
15128function for walking the operands in a statement: 'walk_gimple_op'.
15129
15130 -- GIMPLE function: tree walk_gimple_stmt (gimple_stmt_iterator *gsi,
15131          walk_stmt_fn callback_stmt, walk_tree_fn callback_op, struct
15132          walk_stmt_info *wi)
15133     This function is used to walk the current statement in 'GSI',
15134     optionally using traversal state stored in 'WI'.  If 'WI' is
15135     'NULL', no state is kept during the traversal.
15136
15137     The callback 'CALLBACK_STMT' is called.  If 'CALLBACK_STMT' returns
15138     true, it means that the callback function has handled all the
15139     operands of the statement and it is not necessary to walk its
15140     operands.
15141
15142     If 'CALLBACK_STMT' is 'NULL' or it returns false, 'CALLBACK_OP' is
15143     called on each operand of the statement via 'walk_gimple_op'.  If
15144     'walk_gimple_op' returns non-'NULL' for any operand, the remaining
15145     operands are not scanned.
15146
15147     The return value is that returned by the last call to
15148     'walk_gimple_op', or 'NULL_TREE' if no 'CALLBACK_OP' is specified.
15149
15150 -- GIMPLE function: tree walk_gimple_op (gimple stmt, walk_tree_fn
15151          callback_op, struct walk_stmt_info *wi)
15152     Use this function to walk the operands of statement 'STMT'.  Every
15153     operand is walked via 'walk_tree' with optional state information
15154     in 'WI'.
15155
15156     'CALLBACK_OP' is called on each operand of 'STMT' via 'walk_tree'.
15157     Additional parameters to 'walk_tree' must be stored in 'WI'.  For
15158     each operand 'OP', 'walk_tree' is called as:
15159
15160          walk_tree (&OP, CALLBACK_OP, WI, PSET)
15161
15162     If 'CALLBACK_OP' returns non-'NULL' for an operand, the remaining
15163     operands are not scanned.  The return value is that returned by the
15164     last call to 'walk_tree', or 'NULL_TREE' if no 'CALLBACK_OP' is
15165     specified.
15166
15167 -- GIMPLE function: tree walk_gimple_seq (gimple_seq seq, walk_stmt_fn
15168          callback_stmt, walk_tree_fn callback_op, struct walk_stmt_info
15169          *wi)
15170     This function walks all the statements in the sequence 'SEQ'
15171     calling 'walk_gimple_stmt' on each one.  'WI' is as in
15172     'walk_gimple_stmt'.  If 'walk_gimple_stmt' returns non-'NULL', the
15173     walk is stopped and the value returned.  Otherwise, all the
15174     statements are walked and 'NULL_TREE' returned.
15175
15176
15177File: gccint.info,  Node: Tree SSA,  Next: RTL,  Prev: GIMPLE,  Up: Top
15178
1517913 Analysis and Optimization of GIMPLE tuples
15180*********************************************
15181
15182GCC uses three main intermediate languages to represent the program
15183during compilation: GENERIC, GIMPLE and RTL.  GENERIC is a
15184language-independent representation generated by each front end.  It is
15185used to serve as an interface between the parser and optimizer.  GENERIC
15186is a common representation that is able to represent programs written in
15187all the languages supported by GCC.
15188
15189 GIMPLE and RTL are used to optimize the program.  GIMPLE is used for
15190target and language independent optimizations (e.g., inlining, constant
15191propagation, tail call elimination, redundancy elimination, etc).  Much
15192like GENERIC, GIMPLE is a language independent, tree based
15193representation.  However, it differs from GENERIC in that the GIMPLE
15194grammar is more restrictive: expressions contain no more than 3 operands
15195(except function calls), it has no control flow structures and
15196expressions with side effects are only allowed on the right hand side of
15197assignments.  See the chapter describing GENERIC and GIMPLE for more
15198details.
15199
15200 This chapter describes the data structures and functions used in the
15201GIMPLE optimizers (also known as "tree optimizers" or "middle end").  In
15202particular, it focuses on all the macros, data structures, functions and
15203programming constructs needed to implement optimization passes for
15204GIMPLE.
15205
15206* Menu:
15207
15208* Annotations::         Attributes for variables.
15209* SSA Operands::        SSA names referenced by GIMPLE statements.
15210* SSA::                 Static Single Assignment representation.
15211* Alias analysis::      Representing aliased loads and stores.
15212* Memory model::        Memory model used by the middle-end.
15213
15214
15215File: gccint.info,  Node: Annotations,  Next: SSA Operands,  Up: Tree SSA
15216
1521713.1 Annotations
15218================
15219
15220The optimizers need to associate attributes with variables during the
15221optimization process.  For instance, we need to know whether a variable
15222has aliases.  All these attributes are stored in data structures called
15223annotations which are then linked to the field 'ann' in 'struct
15224tree_common'.
15225
15226
15227File: gccint.info,  Node: SSA Operands,  Next: SSA,  Prev: Annotations,  Up: Tree SSA
15228
1522913.2 SSA Operands
15230=================
15231
15232Almost every GIMPLE statement will contain a reference to a variable or
15233memory location.  Since statements come in different shapes and sizes,
15234their operands are going to be located at various spots inside the
15235statement's tree.  To facilitate access to the statement's operands,
15236they are organized into lists associated inside each statement's
15237annotation.  Each element in an operand list is a pointer to a
15238'VAR_DECL', 'PARM_DECL' or 'SSA_NAME' tree node.  This provides a very
15239convenient way of examining and replacing operands.
15240
15241 Data flow analysis and optimization is done on all tree nodes
15242representing variables.  Any node for which 'SSA_VAR_P' returns nonzero
15243is considered when scanning statement operands.  However, not all
15244'SSA_VAR_P' variables are processed in the same way.  For the purposes
15245of optimization, we need to distinguish between references to local
15246scalar variables and references to globals, statics, structures, arrays,
15247aliased variables, etc.  The reason is simple, the compiler can gather
15248complete data flow information for a local scalar.  On the other hand, a
15249global variable may be modified by a function call, it may not be
15250possible to keep track of all the elements of an array or the fields of
15251a structure, etc.
15252
15253 The operand scanner gathers two kinds of operands: "real" and
15254"virtual".  An operand for which 'is_gimple_reg' returns true is
15255considered real, otherwise it is a virtual operand.  We also distinguish
15256between uses and definitions.  An operand is used if its value is loaded
15257by the statement (e.g., the operand at the RHS of an assignment).  If
15258the statement assigns a new value to the operand, the operand is
15259considered a definition (e.g., the operand at the LHS of an assignment).
15260
15261 Virtual and real operands also have very different data flow
15262properties.  Real operands are unambiguous references to the full object
15263that they represent.  For instance, given
15264
15265     {
15266       int a, b;
15267       a = b
15268     }
15269
15270 Since 'a' and 'b' are non-aliased locals, the statement 'a = b' will
15271have one real definition and one real use because variable 'a' is
15272completely modified with the contents of variable 'b'.  Real definition
15273are also known as "killing definitions".  Similarly, the use of 'b'
15274reads all its bits.
15275
15276 In contrast, virtual operands are used with variables that can have a
15277partial or ambiguous reference.  This includes structures, arrays,
15278globals, and aliased variables.  In these cases, we have two types of
15279definitions.  For globals, structures, and arrays, we can determine from
15280a statement whether a variable of these types has a killing definition.
15281If the variable does, then the statement is marked as having a "must
15282definition" of that variable.  However, if a statement is only defining
15283a part of the variable (i.e. a field in a structure), or if we know that
15284a statement might define the variable but we cannot say for sure, then
15285we mark that statement as having a "may definition".  For instance,
15286given
15287
15288     {
15289       int a, b, *p;
15290
15291       if (...)
15292         p = &a;
15293       else
15294         p = &b;
15295       *p = 5;
15296       return *p;
15297     }
15298
15299 The assignment '*p = 5' may be a definition of 'a' or 'b'.  If we
15300cannot determine statically where 'p' is pointing to at the time of the
15301store operation, we create virtual definitions to mark that statement as
15302a potential definition site for 'a' and 'b'.  Memory loads are similarly
15303marked with virtual use operands.  Virtual operands are shown in tree
15304dumps right before the statement that contains them.  To request a tree
15305dump with virtual operands, use the '-vops' option to '-fdump-tree':
15306
15307     {
15308       int a, b, *p;
15309
15310       if (...)
15311         p = &a;
15312       else
15313         p = &b;
15314       # a = VDEF <a>
15315       # b = VDEF <b>
15316       *p = 5;
15317
15318       # VUSE <a>
15319       # VUSE <b>
15320       return *p;
15321     }
15322
15323 Notice that 'VDEF' operands have two copies of the referenced variable.
15324This indicates that this is not a killing definition of that variable.
15325In this case we refer to it as a "may definition" or "aliased store".
15326The presence of the second copy of the variable in the 'VDEF' operand
15327will become important when the function is converted into SSA form.
15328This will be used to link all the non-killing definitions to prevent
15329optimizations from making incorrect assumptions about them.
15330
15331 Operands are updated as soon as the statement is finished via a call to
15332'update_stmt'.  If statement elements are changed via 'SET_USE' or
15333'SET_DEF', then no further action is required (i.e., those macros take
15334care of updating the statement).  If changes are made by manipulating
15335the statement's tree directly, then a call must be made to 'update_stmt'
15336when complete.  Calling one of the 'bsi_insert' routines or
15337'bsi_replace' performs an implicit call to 'update_stmt'.
15338
1533913.2.1 Operand Iterators And Access Routines
15340--------------------------------------------
15341
15342Operands are collected by 'tree-ssa-operands.c'.  They are stored inside
15343each statement's annotation and can be accessed through either the
15344operand iterators or an access routine.
15345
15346 The following access routines are available for examining operands:
15347
15348  1. 'SINGLE_SSA_{USE,DEF,TREE}_OPERAND': These accessors will return
15349     NULL unless there is exactly one operand matching the specified
15350     flags.  If there is exactly one operand, the operand is returned as
15351     either a 'tree', 'def_operand_p', or 'use_operand_p'.
15352
15353          tree t = SINGLE_SSA_TREE_OPERAND (stmt, flags);
15354          use_operand_p u = SINGLE_SSA_USE_OPERAND (stmt, SSA_ALL_VIRTUAL_USES);
15355          def_operand_p d = SINGLE_SSA_DEF_OPERAND (stmt, SSA_OP_ALL_DEFS);
15356
15357  2. 'ZERO_SSA_OPERANDS': This macro returns true if there are no
15358     operands matching the specified flags.
15359
15360          if (ZERO_SSA_OPERANDS (stmt, SSA_OP_ALL_VIRTUALS))
15361            return;
15362
15363  3. 'NUM_SSA_OPERANDS': This macro Returns the number of operands
15364     matching 'flags'.  This actually executes a loop to perform the
15365     count, so only use this if it is really needed.
15366
15367          int count = NUM_SSA_OPERANDS (stmt, flags)
15368
15369 If you wish to iterate over some or all operands, use the
15370'FOR_EACH_SSA_{USE,DEF,TREE}_OPERAND' iterator.  For example, to print
15371all the operands for a statement:
15372
15373     void
15374     print_ops (tree stmt)
15375     {
15376       ssa_op_iter;
15377       tree var;
15378
15379       FOR_EACH_SSA_TREE_OPERAND (var, stmt, iter, SSA_OP_ALL_OPERANDS)
15380         print_generic_expr (stderr, var, TDF_SLIM);
15381     }
15382
15383 How to choose the appropriate iterator:
15384
15385  1. Determine whether you are need to see the operand pointers, or just
15386     the trees, and choose the appropriate macro:
15387
15388          Need            Macro:
15389          ----            -------
15390          use_operand_p   FOR_EACH_SSA_USE_OPERAND
15391          def_operand_p   FOR_EACH_SSA_DEF_OPERAND
15392          tree            FOR_EACH_SSA_TREE_OPERAND
15393
15394  2. You need to declare a variable of the type you are interested in,
15395     and an ssa_op_iter structure which serves as the loop controlling
15396     variable.
15397
15398  3. Determine which operands you wish to use, and specify the flags of
15399     those you are interested in.  They are documented in
15400     'tree-ssa-operands.h':
15401
15402          #define SSA_OP_USE              0x01    /* Real USE operands.  */
15403          #define SSA_OP_DEF              0x02    /* Real DEF operands.  */
15404          #define SSA_OP_VUSE             0x04    /* VUSE operands.  */
15405          #define SSA_OP_VDEF             0x08    /* VDEF operands.  */
15406
15407          /* These are commonly grouped operand flags.  */
15408          #define SSA_OP_VIRTUAL_USES	(SSA_OP_VUSE)
15409          #define SSA_OP_VIRTUAL_DEFS	(SSA_OP_VDEF)
15410          #define SSA_OP_ALL_VIRTUALS     (SSA_OP_VIRTUAL_USES | SSA_OP_VIRTUAL_DEFS)
15411          #define SSA_OP_ALL_USES		(SSA_OP_VIRTUAL_USES | SSA_OP_USE)
15412          #define SSA_OP_ALL_DEFS		(SSA_OP_VIRTUAL_DEFS | SSA_OP_DEF)
15413          #define SSA_OP_ALL_OPERANDS	(SSA_OP_ALL_USES | SSA_OP_ALL_DEFS)
15414
15415 So if you want to look at the use pointers for all the 'USE' and 'VUSE'
15416operands, you would do something like:
15417
15418       use_operand_p use_p;
15419       ssa_op_iter iter;
15420
15421       FOR_EACH_SSA_USE_OPERAND (use_p, stmt, iter, (SSA_OP_USE | SSA_OP_VUSE))
15422         {
15423           process_use_ptr (use_p);
15424         }
15425
15426 The 'TREE' macro is basically the same as the 'USE' and 'DEF' macros,
15427only with the use or def dereferenced via 'USE_FROM_PTR (use_p)' and
15428'DEF_FROM_PTR (def_p)'.  Since we aren't using operand pointers, use and
15429defs flags can be mixed.
15430
15431       tree var;
15432       ssa_op_iter iter;
15433
15434       FOR_EACH_SSA_TREE_OPERAND (var, stmt, iter, SSA_OP_VUSE)
15435         {
15436            print_generic_expr (stderr, var, TDF_SLIM);
15437         }
15438
15439 'VDEF's are broken into two flags, one for the 'DEF' portion
15440('SSA_OP_VDEF') and one for the USE portion ('SSA_OP_VUSE').
15441
15442 There are many examples in the code, in addition to the documentation
15443in 'tree-ssa-operands.h' and 'ssa-iterators.h'.
15444
15445 There are also a couple of variants on the stmt iterators regarding PHI
15446nodes.
15447
15448 'FOR_EACH_PHI_ARG' Works exactly like 'FOR_EACH_SSA_USE_OPERAND',
15449except it works over 'PHI' arguments instead of statement operands.
15450
15451     /* Look at every virtual PHI use.  */
15452     FOR_EACH_PHI_ARG (use_p, phi_stmt, iter, SSA_OP_VIRTUAL_USES)
15453     {
15454        my_code;
15455     }
15456
15457     /* Look at every real PHI use.  */
15458     FOR_EACH_PHI_ARG (use_p, phi_stmt, iter, SSA_OP_USES)
15459       my_code;
15460
15461     /* Look at every PHI use.  */
15462     FOR_EACH_PHI_ARG (use_p, phi_stmt, iter, SSA_OP_ALL_USES)
15463       my_code;
15464
15465 'FOR_EACH_PHI_OR_STMT_{USE,DEF}' works exactly like
15466'FOR_EACH_SSA_{USE,DEF}_OPERAND', except it will function on either a
15467statement or a 'PHI' node.  These should be used when it is appropriate
15468but they are not quite as efficient as the individual 'FOR_EACH_PHI' and
15469'FOR_EACH_SSA' routines.
15470
15471     FOR_EACH_PHI_OR_STMT_USE (use_operand_p, stmt, iter, flags)
15472       {
15473          my_code;
15474       }
15475
15476     FOR_EACH_PHI_OR_STMT_DEF (def_operand_p, phi, iter, flags)
15477       {
15478          my_code;
15479       }
15480
1548113.2.2 Immediate Uses
15482---------------------
15483
15484Immediate use information is now always available.  Using the immediate
15485use iterators, you may examine every use of any 'SSA_NAME'.  For
15486instance, to change each use of 'ssa_var' to 'ssa_var2' and call
15487fold_stmt on each stmt after that is done:
15488
15489       use_operand_p imm_use_p;
15490       imm_use_iterator iterator;
15491       tree ssa_var, stmt;
15492
15493
15494       FOR_EACH_IMM_USE_STMT (stmt, iterator, ssa_var)
15495         {
15496           FOR_EACH_IMM_USE_ON_STMT (imm_use_p, iterator)
15497             SET_USE (imm_use_p, ssa_var_2);
15498           fold_stmt (stmt);
15499         }
15500
15501 There are 2 iterators which can be used.  'FOR_EACH_IMM_USE_FAST' is
15502used when the immediate uses are not changed, i.e., you are looking at
15503the uses, but not setting them.
15504
15505 If they do get changed, then care must be taken that things are not
15506changed under the iterators, so use the 'FOR_EACH_IMM_USE_STMT' and
15507'FOR_EACH_IMM_USE_ON_STMT' iterators.  They attempt to preserve the
15508sanity of the use list by moving all the uses for a statement into a
15509controlled position, and then iterating over those uses.  Then the
15510optimization can manipulate the stmt when all the uses have been
15511processed.  This is a little slower than the FAST version since it adds
15512a placeholder element and must sort through the list a bit for each
15513statement.  This placeholder element must be also be removed if the loop
15514is terminated early.  The macro 'BREAK_FROM_IMM_USE_STMT' is provided to
15515do this :
15516
15517       FOR_EACH_IMM_USE_STMT (stmt, iterator, ssa_var)
15518         {
15519           if (stmt == last_stmt)
15520             BREAK_FROM_IMM_USE_STMT (iterator);
15521
15522           FOR_EACH_IMM_USE_ON_STMT (imm_use_p, iterator)
15523             SET_USE (imm_use_p, ssa_var_2);
15524           fold_stmt (stmt);
15525         }
15526
15527 There are checks in 'verify_ssa' which verify that the immediate use
15528list is up to date, as well as checking that an optimization didn't
15529break from the loop without using this macro.  It is safe to simply
15530'break'; from a 'FOR_EACH_IMM_USE_FAST' traverse.
15531
15532 Some useful functions and macros:
15533  1. 'has_zero_uses (ssa_var)' : Returns true if there are no uses of
15534     'ssa_var'.
15535  2. 'has_single_use (ssa_var)' : Returns true if there is only a single
15536     use of 'ssa_var'.
15537  3. 'single_imm_use (ssa_var, use_operand_p *ptr, tree *stmt)' :
15538     Returns true if there is only a single use of 'ssa_var', and also
15539     returns the use pointer and statement it occurs in, in the second
15540     and third parameters.
15541  4. 'num_imm_uses (ssa_var)' : Returns the number of immediate uses of
15542     'ssa_var'.  It is better not to use this if possible since it
15543     simply utilizes a loop to count the uses.
15544  5. 'PHI_ARG_INDEX_FROM_USE (use_p)' : Given a use within a 'PHI' node,
15545     return the index number for the use.  An assert is triggered if the
15546     use isn't located in a 'PHI' node.
15547  6. 'USE_STMT (use_p)' : Return the statement a use occurs in.
15548
15549 Note that uses are not put into an immediate use list until their
15550statement is actually inserted into the instruction stream via a 'bsi_*'
15551routine.
15552
15553 It is also still possible to utilize lazy updating of statements, but
15554this should be used only when absolutely required.  Both alias analysis
15555and the dominator optimizations currently do this.
15556
15557 When lazy updating is being used, the immediate use information is out
15558of date and cannot be used reliably.  Lazy updating is achieved by
15559simply marking statements modified via calls to 'gimple_set_modified'
15560instead of 'update_stmt'.  When lazy updating is no longer required, all
15561the modified statements must have 'update_stmt' called in order to bring
15562them up to date.  This must be done before the optimization is finished,
15563or 'verify_ssa' will trigger an abort.
15564
15565 This is done with a simple loop over the instruction stream:
15566       block_stmt_iterator bsi;
15567       basic_block bb;
15568       FOR_EACH_BB (bb)
15569         {
15570           for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
15571             update_stmt_if_modified (bsi_stmt (bsi));
15572         }
15573
15574
15575File: gccint.info,  Node: SSA,  Next: Alias analysis,  Prev: SSA Operands,  Up: Tree SSA
15576
1557713.3 Static Single Assignment
15578=============================
15579
15580Most of the tree optimizers rely on the data flow information provided
15581by the Static Single Assignment (SSA) form.  We implement the SSA form
15582as described in 'R. Cytron, J. Ferrante, B. Rosen, M. Wegman, and K.
15583Zadeck. Efficiently Computing Static Single Assignment Form and the
15584Control Dependence Graph. ACM Transactions on Programming Languages and
15585Systems, 13(4):451-490, October 1991'.
15586
15587 The SSA form is based on the premise that program variables are
15588assigned in exactly one location in the program.  Multiple assignments
15589to the same variable create new versions of that variable.  Naturally,
15590actual programs are seldom in SSA form initially because variables tend
15591to be assigned multiple times.  The compiler modifies the program
15592representation so that every time a variable is assigned in the code, a
15593new version of the variable is created.  Different versions of the same
15594variable are distinguished by subscripting the variable name with its
15595version number.  Variables used in the right-hand side of expressions
15596are renamed so that their version number matches that of the most recent
15597assignment.
15598
15599 We represent variable versions using 'SSA_NAME' nodes.  The renaming
15600process in 'tree-ssa.c' wraps every real and virtual operand with an
15601'SSA_NAME' node which contains the version number and the statement that
15602created the 'SSA_NAME'.  Only definitions and virtual definitions may
15603create new 'SSA_NAME' nodes.
15604
15605 Sometimes, flow of control makes it impossible to determine the most
15606recent version of a variable.  In these cases, the compiler inserts an
15607artificial definition for that variable called "PHI function" or "PHI
15608node".  This new definition merges all the incoming versions of the
15609variable to create a new name for it.  For instance,
15610
15611     if (...)
15612       a_1 = 5;
15613     else if (...)
15614       a_2 = 2;
15615     else
15616       a_3 = 13;
15617
15618     # a_4 = PHI <a_1, a_2, a_3>
15619     return a_4;
15620
15621 Since it is not possible to determine which of the three branches will
15622be taken at runtime, we don't know which of 'a_1', 'a_2' or 'a_3' to use
15623at the return statement.  So, the SSA renamer creates a new version
15624'a_4' which is assigned the result of "merging" 'a_1', 'a_2' and 'a_3'.
15625Hence, PHI nodes mean "one of these operands.  I don't know which".
15626
15627 The following functions can be used to examine PHI nodes
15628
15629 -- Function: gimple_phi_result (PHI)
15630     Returns the 'SSA_NAME' created by PHI node PHI (i.e., PHI's LHS).
15631
15632 -- Function: gimple_phi_num_args (PHI)
15633     Returns the number of arguments in PHI.  This number is exactly the
15634     number of incoming edges to the basic block holding PHI.
15635
15636 -- Function: gimple_phi_arg (PHI, I)
15637     Returns Ith argument of PHI.
15638
15639 -- Function: gimple_phi_arg_edge (PHI, I)
15640     Returns the incoming edge for the Ith argument of PHI.
15641
15642 -- Function: gimple_phi_arg_def (PHI, I)
15643     Returns the 'SSA_NAME' for the Ith argument of PHI.
15644
1564513.3.1 Preserving the SSA form
15646------------------------------
15647
15648Some optimization passes make changes to the function that invalidate
15649the SSA property.  This can happen when a pass has added new symbols or
15650changed the program so that variables that were previously aliased
15651aren't anymore.  Whenever something like this happens, the affected
15652symbols must be renamed into SSA form again.  Transformations that emit
15653new code or replicate existing statements will also need to update the
15654SSA form.
15655
15656 Since GCC implements two different SSA forms for register and virtual
15657variables, keeping the SSA form up to date depends on whether you are
15658updating register or virtual names.  In both cases, the general idea
15659behind incremental SSA updates is similar: when new SSA names are
15660created, they typically are meant to replace other existing names in the
15661program.
15662
15663 For instance, given the following code:
15664
15665          1  L0:
15666          2  x_1 = PHI (0, x_5)
15667          3  if (x_1 < 10)
15668          4    if (x_1 > 7)
15669          5      y_2 = 0
15670          6    else
15671          7      y_3 = x_1 + x_7
15672          8    endif
15673          9    x_5 = x_1 + 1
15674          10   goto L0;
15675          11 endif
15676
15677 Suppose that we insert new names 'x_10' and 'x_11' (lines '4' and '8').
15678
15679          1  L0:
15680          2  x_1 = PHI (0, x_5)
15681          3  if (x_1 < 10)
15682          4    x_10 = ...
15683          5    if (x_1 > 7)
15684          6      y_2 = 0
15685          7    else
15686          8      x_11 = ...
15687          9      y_3 = x_1 + x_7
15688          10   endif
15689          11   x_5 = x_1 + 1
15690          12   goto L0;
15691          13 endif
15692
15693 We want to replace all the uses of 'x_1' with the new definitions of
15694'x_10' and 'x_11'.  Note that the only uses that should be replaced are
15695those at lines '5', '9' and '11'.  Also, the use of 'x_7' at line '9'
15696should _not_ be replaced (this is why we cannot just mark symbol 'x' for
15697renaming).
15698
15699 Additionally, we may need to insert a PHI node at line '11' because
15700that is a merge point for 'x_10' and 'x_11'.  So the use of 'x_1' at
15701line '11' will be replaced with the new PHI node.  The insertion of PHI
15702nodes is optional.  They are not strictly necessary to preserve the SSA
15703form, and depending on what the caller inserted, they may not even be
15704useful for the optimizers.
15705
15706 Updating the SSA form is a two step process.  First, the pass has to
15707identify which names need to be updated and/or which symbols need to be
15708renamed into SSA form for the first time.  When new names are introduced
15709to replace existing names in the program, the mapping between the old
15710and the new names are registered by calling 'register_new_name_mapping'
15711(note that if your pass creates new code by duplicating basic blocks,
15712the call to 'tree_duplicate_bb' will set up the necessary mappings
15713automatically).
15714
15715 After the replacement mappings have been registered and new symbols
15716marked for renaming, a call to 'update_ssa' makes the registered
15717changes.  This can be done with an explicit call or by creating 'TODO'
15718flags in the 'tree_opt_pass' structure for your pass.  There are several
15719'TODO' flags that control the behavior of 'update_ssa':
15720
15721   * 'TODO_update_ssa'.  Update the SSA form inserting PHI nodes for
15722     newly exposed symbols and virtual names marked for updating.  When
15723     updating real names, only insert PHI nodes for a real name 'O_j' in
15724     blocks reached by all the new and old definitions for 'O_j'.  If
15725     the iterated dominance frontier for 'O_j' is not pruned, we may end
15726     up inserting PHI nodes in blocks that have one or more edges with
15727     no incoming definition for 'O_j'.  This would lead to uninitialized
15728     warnings for 'O_j''s symbol.
15729
15730   * 'TODO_update_ssa_no_phi'.  Update the SSA form without inserting
15731     any new PHI nodes at all.  This is used by passes that have either
15732     inserted all the PHI nodes themselves or passes that need only to
15733     patch use-def and def-def chains for virtuals (e.g., DCE).
15734
15735   * 'TODO_update_ssa_full_phi'.  Insert PHI nodes everywhere they are
15736     needed.  No pruning of the IDF is done.  This is used by passes
15737     that need the PHI nodes for 'O_j' even if it means that some
15738     arguments will come from the default definition of 'O_j''s symbol
15739     (e.g., 'pass_linear_transform').
15740
15741     WARNING: If you need to use this flag, chances are that your pass
15742     may be doing something wrong.  Inserting PHI nodes for an old name
15743     where not all edges carry a new replacement may lead to silent
15744     codegen errors or spurious uninitialized warnings.
15745
15746   * 'TODO_update_ssa_only_virtuals'.  Passes that update the SSA form
15747     on their own may want to delegate the updating of virtual names to
15748     the generic updater.  Since FUD chains are easier to maintain, this
15749     simplifies the work they need to do.  NOTE: If this flag is used,
15750     any OLD->NEW mappings for real names are explicitly destroyed and
15751     only the symbols marked for renaming are processed.
15752
1575313.3.2 Examining 'SSA_NAME' nodes
15754---------------------------------
15755
15756The following macros can be used to examine 'SSA_NAME' nodes
15757
15758 -- Macro: SSA_NAME_DEF_STMT (VAR)
15759     Returns the statement S that creates the 'SSA_NAME' VAR.  If S is
15760     an empty statement (i.e., 'IS_EMPTY_STMT (S)' returns 'true'), it
15761     means that the first reference to this variable is a USE or a VUSE.
15762
15763 -- Macro: SSA_NAME_VERSION (VAR)
15764     Returns the version number of the 'SSA_NAME' object VAR.
15765
1576613.3.3 Walking the dominator tree
15767---------------------------------
15768
15769 -- Tree SSA function: void walk_dominator_tree (WALK_DATA, BB)
15770
15771     This function walks the dominator tree for the current CFG calling
15772     a set of callback functions defined in STRUCT DOM_WALK_DATA in
15773     'domwalk.h'.  The call back functions you need to define give you
15774     hooks to execute custom code at various points during traversal:
15775
15776       1. Once to initialize any local data needed while processing BB
15777          and its children.  This local data is pushed into an internal
15778          stack which is automatically pushed and popped as the walker
15779          traverses the dominator tree.
15780
15781       2. Once before traversing all the statements in the BB.
15782
15783       3. Once for every statement inside BB.
15784
15785       4. Once after traversing all the statements and before recursing
15786          into BB's dominator children.
15787
15788       5. It then recurses into all the dominator children of BB.
15789
15790       6. After recursing into all the dominator children of BB it can,
15791          optionally, traverse every statement in BB again (i.e.,
15792          repeating steps 2 and 3).
15793
15794       7. Once after walking the statements in BB and BB's dominator
15795          children.  At this stage, the block local data stack is
15796          popped.
15797
15798
15799File: gccint.info,  Node: Alias analysis,  Next: Memory model,  Prev: SSA,  Up: Tree SSA
15800
1580113.4 Alias analysis
15802===================
15803
15804Alias analysis in GIMPLE SSA form consists of two pieces.  First the
15805virtual SSA web ties conflicting memory accesses and provides a SSA
15806use-def chain and SSA immediate-use chains for walking possibly
15807dependent memory accesses.  Second an alias-oracle can be queried to
15808disambiguate explicit and implicit memory references.
15809
15810  1. Memory SSA form.
15811
15812     All statements that may use memory have exactly one accompanied use
15813     of a virtual SSA name that represents the state of memory at the
15814     given point in the IL.
15815
15816     All statements that may define memory have exactly one accompanied
15817     definition of a virtual SSA name using the previous state of memory
15818     and defining the new state of memory after the given point in the
15819     IL.
15820
15821          int i;
15822          int foo (void)
15823          {
15824            # .MEM_3 = VDEF <.MEM_2(D)>
15825            i = 1;
15826            # VUSE <.MEM_3>
15827            return i;
15828          }
15829
15830     The virtual SSA names in this case are '.MEM_2(D)' and '.MEM_3'.
15831     The store to the global variable 'i' defines '.MEM_3' invalidating
15832     '.MEM_2(D)'.  The load from 'i' uses that new state '.MEM_3'.
15833
15834     The virtual SSA web serves as constraints to SSA optimizers
15835     preventing illegitimate code-motion and optimization.  It also
15836     provides a way to walk related memory statements.
15837
15838  2. Points-to and escape analysis.
15839
15840     Points-to analysis builds a set of constraints from the GIMPLE SSA
15841     IL representing all pointer operations and facts we do or do not
15842     know about pointers.  Solving this set of constraints yields a
15843     conservatively correct solution for each pointer variable in the
15844     program (though we are only interested in SSA name pointers) as to
15845     what it may possibly point to.
15846
15847     This points-to solution for a given SSA name pointer is stored in
15848     the 'pt_solution' sub-structure of the 'SSA_NAME_PTR_INFO' record.
15849     The following accessor functions are available:
15850
15851        * 'pt_solution_includes'
15852        * 'pt_solutions_intersect'
15853
15854     Points-to analysis also computes the solution for two special set
15855     of pointers, 'ESCAPED' and 'CALLUSED'.  Those represent all memory
15856     that has escaped the scope of analysis or that is used by pure or
15857     nested const calls.
15858
15859  3. Type-based alias analysis
15860
15861     Type-based alias analysis is frontend dependent though generic
15862     support is provided by the middle-end in 'alias.c'.  TBAA code is
15863     used by both tree optimizers and RTL optimizers.
15864
15865     Every language that wishes to perform language-specific alias
15866     analysis should define a function that computes, given a 'tree'
15867     node, an alias set for the node.  Nodes in different alias sets are
15868     not allowed to alias.  For an example, see the C front-end function
15869     'c_get_alias_set'.
15870
15871  4. Tree alias-oracle
15872
15873     The tree alias-oracle provides means to disambiguate two memory
15874     references and memory references against statements.  The following
15875     queries are available:
15876
15877        * 'refs_may_alias_p'
15878        * 'ref_maybe_used_by_stmt_p'
15879        * 'stmt_may_clobber_ref_p'
15880
15881     In addition to those two kind of statement walkers are available
15882     walking statements related to a reference ref.
15883     'walk_non_aliased_vuses' walks over dominating memory defining
15884     statements and calls back if the statement does not clobber ref
15885     providing the non-aliased VUSE. The walk stops at the first
15886     clobbering statement or if asked to.  'walk_aliased_vdefs' walks
15887     over dominating memory defining statements and calls back on each
15888     statement clobbering ref providing its aliasing VDEF. The walk
15889     stops if asked to.
15890
15891
15892File: gccint.info,  Node: Memory model,  Prev: Alias analysis,  Up: Tree SSA
15893
1589413.5 Memory model
15895=================
15896
15897The memory model used by the middle-end models that of the C/C++
15898languages.  The middle-end has the notion of an effective type of a
15899memory region which is used for type-based alias analysis.
15900
15901 The following is a refinement of ISO C99 6.5/6, clarifying the block
15902copy case to follow common sense and extending the concept of a dynamic
15903effective type to objects with a declared type as required for C++.
15904
15905     The effective type of an object for an access to its stored value is
15906     the declared type of the object or the effective type determined by
15907     a previous store to it.  If a value is stored into an object through
15908     an lvalue having a type that is not a character type, then the
15909     type of the lvalue becomes the effective type of the object for that
15910     access and for subsequent accesses that do not modify the stored value.
15911     If a value is copied into an object using memcpy or memmove,
15912     or is copied as an array of character type, then the effective type
15913     of the modified object for that access and for subsequent accesses that
15914     do not modify the value is undetermined.  For all other accesses to an
15915     object, the effective type of the object is simply the type of the
15916     lvalue used for the access.
15917
15918
15919File: gccint.info,  Node: RTL,  Next: Control Flow,  Prev: Tree SSA,  Up: Top
15920
1592114 RTL Representation
15922*********************
15923
15924The last part of the compiler work is done on a low-level intermediate
15925representation called Register Transfer Language.  In this language, the
15926instructions to be output are described, pretty much one by one, in an
15927algebraic form that describes what the instruction does.
15928
15929 RTL is inspired by Lisp lists.  It has both an internal form, made up
15930of structures that point at other structures, and a textual form that is
15931used in the machine description and in printed debugging dumps.  The
15932textual form uses nested parentheses to indicate the pointers in the
15933internal form.
15934
15935* Menu:
15936
15937* RTL Objects::       Expressions vs vectors vs strings vs integers.
15938* RTL Classes::       Categories of RTL expression objects, and their structure.
15939* Accessors::         Macros to access expression operands or vector elts.
15940* Special Accessors:: Macros to access specific annotations on RTL.
15941* Flags::             Other flags in an RTL expression.
15942* Machine Modes::     Describing the size and format of a datum.
15943* Constants::         Expressions with constant values.
15944* Regs and Memory::   Expressions representing register contents or memory.
15945* Arithmetic::        Expressions representing arithmetic on other expressions.
15946* Comparisons::       Expressions representing comparison of expressions.
15947* Bit-Fields::        Expressions representing bit-fields in memory or reg.
15948* Vector Operations:: Expressions involving vector datatypes.
15949* Conversions::       Extending, truncating, floating or fixing.
15950* RTL Declarations::  Declaring volatility, constancy, etc.
15951* Side Effects::      Expressions for storing in registers, etc.
15952* Incdec::            Embedded side-effects for autoincrement addressing.
15953* Assembler::         Representing 'asm' with operands.
15954* Debug Information:: Expressions representing debugging information.
15955* Insns::             Expression types for entire insns.
15956* Calls::             RTL representation of function call insns.
15957* Sharing::           Some expressions are unique; others *must* be copied.
15958* Reading RTL::       Reading textual RTL from a file.
15959
15960
15961File: gccint.info,  Node: RTL Objects,  Next: RTL Classes,  Up: RTL
15962
1596314.1 RTL Object Types
15964=====================
15965
15966RTL uses five kinds of objects: expressions, integers, wide integers,
15967strings and vectors.  Expressions are the most important ones.  An RTL
15968expression ("RTX", for short) is a C structure, but it is usually
15969referred to with a pointer; a type that is given the typedef name 'rtx'.
15970
15971 An integer is simply an 'int'; their written form uses decimal digits.
15972A wide integer is an integral object whose type is 'HOST_WIDE_INT';
15973their written form uses decimal digits.
15974
15975 A string is a sequence of characters.  In core it is represented as a
15976'char *' in usual C fashion, and it is written in C syntax as well.
15977However, strings in RTL may never be null.  If you write an empty string
15978in a machine description, it is represented in core as a null pointer
15979rather than as a pointer to a null character.  In certain contexts,
15980these null pointers instead of strings are valid.  Within RTL code,
15981strings are most commonly found inside 'symbol_ref' expressions, but
15982they appear in other contexts in the RTL expressions that make up
15983machine descriptions.
15984
15985 In a machine description, strings are normally written with double
15986quotes, as you would in C.  However, strings in machine descriptions may
15987extend over many lines, which is invalid C, and adjacent string
15988constants are not concatenated as they are in C.  Any string constant
15989may be surrounded with a single set of parentheses.  Sometimes this
15990makes the machine description easier to read.
15991
15992 There is also a special syntax for strings, which can be useful when C
15993code is embedded in a machine description.  Wherever a string can
15994appear, it is also valid to write a C-style brace block.  The entire
15995brace block, including the outermost pair of braces, is considered to be
15996the string constant.  Double quote characters inside the braces are not
15997special.  Therefore, if you write string constants in the C code, you
15998need not escape each quote character with a backslash.
15999
16000 A vector contains an arbitrary number of pointers to expressions.  The
16001number of elements in the vector is explicitly present in the vector.
16002The written form of a vector consists of square brackets ('[...]')
16003surrounding the elements, in sequence and with whitespace separating
16004them.  Vectors of length zero are not created; null pointers are used
16005instead.
16006
16007 Expressions are classified by "expression codes" (also called RTX
16008codes).  The expression code is a name defined in 'rtl.def', which is
16009also (in uppercase) a C enumeration constant.  The possible expression
16010codes and their meanings are machine-independent.  The code of an RTX
16011can be extracted with the macro 'GET_CODE (X)' and altered with
16012'PUT_CODE (X, NEWCODE)'.
16013
16014 The expression code determines how many operands the expression
16015contains, and what kinds of objects they are.  In RTL, unlike Lisp, you
16016cannot tell by looking at an operand what kind of object it is.
16017Instead, you must know from its context--from the expression code of the
16018containing expression.  For example, in an expression of code 'subreg',
16019the first operand is to be regarded as an expression and the second
16020operand as a polynomial integer.  In an expression of code 'plus', there
16021are two operands, both of which are to be regarded as expressions.  In a
16022'symbol_ref' expression, there is one operand, which is to be regarded
16023as a string.
16024
16025 Expressions are written as parentheses containing the name of the
16026expression type, its flags and machine mode if any, and then the
16027operands of the expression (separated by spaces).
16028
16029 Expression code names in the 'md' file are written in lowercase, but
16030when they appear in C code they are written in uppercase.  In this
16031manual, they are shown as follows: 'const_int'.
16032
16033 In a few contexts a null pointer is valid where an expression is
16034normally wanted.  The written form of this is '(nil)'.
16035
16036
16037File: gccint.info,  Node: RTL Classes,  Next: Accessors,  Prev: RTL Objects,  Up: RTL
16038
1603914.2 RTL Classes and Formats
16040============================
16041
16042The various expression codes are divided into several "classes", which
16043are represented by single characters.  You can determine the class of an
16044RTX code with the macro 'GET_RTX_CLASS (CODE)'.  Currently, 'rtl.def'
16045defines these classes:
16046
16047'RTX_OBJ'
16048     An RTX code that represents an actual object, such as a register
16049     ('REG') or a memory location ('MEM', 'SYMBOL_REF').  'LO_SUM') is
16050     also included; instead, 'SUBREG' and 'STRICT_LOW_PART' are not in
16051     this class, but in class 'RTX_EXTRA'.
16052
16053'RTX_CONST_OBJ'
16054     An RTX code that represents a constant object.  'HIGH' is also
16055     included in this class.
16056
16057'RTX_COMPARE'
16058     An RTX code for a non-symmetric comparison, such as 'GEU' or 'LT'.
16059
16060'RTX_COMM_COMPARE'
16061     An RTX code for a symmetric (commutative) comparison, such as 'EQ'
16062     or 'ORDERED'.
16063
16064'RTX_UNARY'
16065     An RTX code for a unary arithmetic operation, such as 'NEG', 'NOT',
16066     or 'ABS'.  This category also includes value extension (sign or
16067     zero) and conversions between integer and floating point.
16068
16069'RTX_COMM_ARITH'
16070     An RTX code for a commutative binary operation, such as 'PLUS' or
16071     'AND'.  'NE' and 'EQ' are comparisons, so they have class
16072     'RTX_COMM_COMPARE'.
16073
16074'RTX_BIN_ARITH'
16075     An RTX code for a non-commutative binary operation, such as
16076     'MINUS', 'DIV', or 'ASHIFTRT'.
16077
16078'RTX_BITFIELD_OPS'
16079     An RTX code for a bit-field operation.  Currently only
16080     'ZERO_EXTRACT' and 'SIGN_EXTRACT'.  These have three inputs and are
16081     lvalues (so they can be used for insertion as well).  *Note
16082     Bit-Fields::.
16083
16084'RTX_TERNARY'
16085     An RTX code for other three input operations.  Currently only
16086     'IF_THEN_ELSE', 'VEC_MERGE', 'SIGN_EXTRACT', 'ZERO_EXTRACT', and
16087     'FMA'.
16088
16089'RTX_INSN'
16090     An RTX code for an entire instruction: 'INSN', 'JUMP_INSN', and
16091     'CALL_INSN'.  *Note Insns::.
16092
16093'RTX_MATCH'
16094     An RTX code for something that matches in insns, such as
16095     'MATCH_DUP'.  These only occur in machine descriptions.
16096
16097'RTX_AUTOINC'
16098     An RTX code for an auto-increment addressing mode, such as
16099     'POST_INC'.  'XEXP (X, 0)' gives the auto-modified register.
16100
16101'RTX_EXTRA'
16102     All other RTX codes.  This category includes the remaining codes
16103     used only in machine descriptions ('DEFINE_*', etc.).  It also
16104     includes all the codes describing side effects ('SET', 'USE',
16105     'CLOBBER', etc.)  and the non-insns that may appear on an insn
16106     chain, such as 'NOTE', 'BARRIER', and 'CODE_LABEL'.  'SUBREG' is
16107     also part of this class.
16108
16109 For each expression code, 'rtl.def' specifies the number of contained
16110objects and their kinds using a sequence of characters called the
16111"format" of the expression code.  For example, the format of 'subreg' is
16112'ep'.
16113
16114 These are the most commonly used format characters:
16115
16116'e'
16117     An expression (actually a pointer to an expression).
16118
16119'i'
16120     An integer.
16121
16122'w'
16123     A wide integer.
16124
16125's'
16126     A string.
16127
16128'E'
16129     A vector of expressions.
16130
16131 A few other format characters are used occasionally:
16132
16133'u'
16134     'u' is equivalent to 'e' except that it is printed differently in
16135     debugging dumps.  It is used for pointers to insns.
16136
16137'n'
16138     'n' is equivalent to 'i' except that it is printed differently in
16139     debugging dumps.  It is used for the line number or code number of
16140     a 'note' insn.
16141
16142'S'
16143     'S' indicates a string which is optional.  In the RTL objects in
16144     core, 'S' is equivalent to 's', but when the object is read, from
16145     an 'md' file, the string value of this operand may be omitted.  An
16146     omitted string is taken to be the null string.
16147
16148'V'
16149     'V' indicates a vector which is optional.  In the RTL objects in
16150     core, 'V' is equivalent to 'E', but when the object is read from an
16151     'md' file, the vector value of this operand may be omitted.  An
16152     omitted vector is effectively the same as a vector of no elements.
16153
16154'B'
16155     'B' indicates a pointer to basic block structure.
16156
16157'p'
16158     A polynomial integer.  At present this is used only for
16159     'SUBREG_BYTE'.
16160
16161'0'
16162     '0' means a slot whose contents do not fit any normal category.
16163     '0' slots are not printed at all in dumps, and are often used in
16164     special ways by small parts of the compiler.
16165
16166 There are macros to get the number of operands and the format of an
16167expression code:
16168
16169'GET_RTX_LENGTH (CODE)'
16170     Number of operands of an RTX of code CODE.
16171
16172'GET_RTX_FORMAT (CODE)'
16173     The format of an RTX of code CODE, as a C string.
16174
16175 Some classes of RTX codes always have the same format.  For example, it
16176is safe to assume that all comparison operations have format 'ee'.
16177
16178'RTX_UNARY'
16179     All codes of this class have format 'e'.
16180
16181'RTX_BIN_ARITH'
16182'RTX_COMM_ARITH'
16183'RTX_COMM_COMPARE'
16184'RTX_COMPARE'
16185     All codes of these classes have format 'ee'.
16186
16187'RTX_BITFIELD_OPS'
16188'RTX_TERNARY'
16189     All codes of these classes have format 'eee'.
16190
16191'RTX_INSN'
16192     All codes of this class have formats that begin with 'iuueiee'.
16193     *Note Insns::.  Note that not all RTL objects linked onto an insn
16194     chain are of class 'RTX_INSN'.
16195
16196'RTX_CONST_OBJ'
16197'RTX_OBJ'
16198'RTX_MATCH'
16199'RTX_EXTRA'
16200     You can make no assumptions about the format of these codes.
16201
16202
16203File: gccint.info,  Node: Accessors,  Next: Special Accessors,  Prev: RTL Classes,  Up: RTL
16204
1620514.3 Access to Operands
16206=======================
16207
16208Operands of expressions are accessed using the macros 'XEXP', 'XINT',
16209'XWINT' and 'XSTR'.  Each of these macros takes two arguments: an
16210expression-pointer (RTX) and an operand number (counting from zero).
16211Thus,
16212
16213     XEXP (X, 2)
16214
16215accesses operand 2 of expression X, as an expression.
16216
16217     XINT (X, 2)
16218
16219accesses the same operand as an integer.  'XSTR', used in the same
16220fashion, would access it as a string.
16221
16222 Any operand can be accessed as an integer, as an expression or as a
16223string.  You must choose the correct method of access for the kind of
16224value actually stored in the operand.  You would do this based on the
16225expression code of the containing expression.  That is also how you
16226would know how many operands there are.
16227
16228 For example, if X is an 'int_list' expression, you know that it has two
16229operands which can be correctly accessed as 'XINT (X, 0)' and 'XEXP (X,
162301)'.  Incorrect accesses like 'XEXP (X, 0)' and 'XINT (X, 1)' would
16231compile, but would trigger an internal compiler error when rtl checking
16232is enabled.  Nothing stops you from writing 'XEXP (X, 28)' either, but
16233this will access memory past the end of the expression with
16234unpredictable results.
16235
16236 Access to operands which are vectors is more complicated.  You can use
16237the macro 'XVEC' to get the vector-pointer itself, or the macros
16238'XVECEXP' and 'XVECLEN' to access the elements and length of a vector.
16239
16240'XVEC (EXP, IDX)'
16241     Access the vector-pointer which is operand number IDX in EXP.
16242
16243'XVECLEN (EXP, IDX)'
16244     Access the length (number of elements) in the vector which is in
16245     operand number IDX in EXP.  This value is an 'int'.
16246
16247'XVECEXP (EXP, IDX, ELTNUM)'
16248     Access element number ELTNUM in the vector which is in operand
16249     number IDX in EXP.  This value is an RTX.
16250
16251     It is up to you to make sure that ELTNUM is not negative and is
16252     less than 'XVECLEN (EXP, IDX)'.
16253
16254 All the macros defined in this section expand into lvalues and
16255therefore can be used to assign the operands, lengths and vector
16256elements as well as to access them.
16257
16258
16259File: gccint.info,  Node: Special Accessors,  Next: Flags,  Prev: Accessors,  Up: RTL
16260
1626114.4 Access to Special Operands
16262===============================
16263
16264Some RTL nodes have special annotations associated with them.
16265
16266'MEM'
16267     'MEM_ALIAS_SET (X)'
16268          If 0, X is not in any alias set, and may alias anything.
16269          Otherwise, X can only alias 'MEM's in a conflicting alias set.
16270          This value is set in a language-dependent manner in the
16271          front-end, and should not be altered in the back-end.  In some
16272          front-ends, these numbers may correspond in some way to types,
16273          or other language-level entities, but they need not, and the
16274          back-end makes no such assumptions.  These set numbers are
16275          tested with 'alias_sets_conflict_p'.
16276
16277     'MEM_EXPR (X)'
16278          If this register is known to hold the value of some user-level
16279          declaration, this is that tree node.  It may also be a
16280          'COMPONENT_REF', in which case this is some field reference,
16281          and 'TREE_OPERAND (X, 0)' contains the declaration, or another
16282          'COMPONENT_REF', or null if there is no compile-time object
16283          associated with the reference.
16284
16285     'MEM_OFFSET_KNOWN_P (X)'
16286          True if the offset of the memory reference from 'MEM_EXPR' is
16287          known.  'MEM_OFFSET (X)' provides the offset if so.
16288
16289     'MEM_OFFSET (X)'
16290          The offset from the start of 'MEM_EXPR'.  The value is only
16291          valid if 'MEM_OFFSET_KNOWN_P (X)' is true.
16292
16293     'MEM_SIZE_KNOWN_P (X)'
16294          True if the size of the memory reference is known.  'MEM_SIZE
16295          (X)' provides its size if so.
16296
16297     'MEM_SIZE (X)'
16298          The size in bytes of the memory reference.  This is mostly
16299          relevant for 'BLKmode' references as otherwise the size is
16300          implied by the mode.  The value is only valid if
16301          'MEM_SIZE_KNOWN_P (X)' is true.
16302
16303     'MEM_ALIGN (X)'
16304          The known alignment in bits of the memory reference.
16305
16306     'MEM_ADDR_SPACE (X)'
16307          The address space of the memory reference.  This will commonly
16308          be zero for the generic address space.
16309
16310'REG'
16311     'ORIGINAL_REGNO (X)'
16312          This field holds the number the register "originally" had; for
16313          a pseudo register turned into a hard reg this will hold the
16314          old pseudo register number.
16315
16316     'REG_EXPR (X)'
16317          If this register is known to hold the value of some user-level
16318          declaration, this is that tree node.
16319
16320     'REG_OFFSET (X)'
16321          If this register is known to hold the value of some user-level
16322          declaration, this is the offset into that logical storage.
16323
16324'SYMBOL_REF'
16325     'SYMBOL_REF_DECL (X)'
16326          If the 'symbol_ref' X was created for a 'VAR_DECL' or a
16327          'FUNCTION_DECL', that tree is recorded here.  If this value is
16328          null, then X was created by back end code generation routines,
16329          and there is no associated front end symbol table entry.
16330
16331          'SYMBOL_REF_DECL' may also point to a tree of class ''c'',
16332          that is, some sort of constant.  In this case, the
16333          'symbol_ref' is an entry in the per-file constant pool; again,
16334          there is no associated front end symbol table entry.
16335
16336     'SYMBOL_REF_CONSTANT (X)'
16337          If 'CONSTANT_POOL_ADDRESS_P (X)' is true, this is the constant
16338          pool entry for X.  It is null otherwise.
16339
16340     'SYMBOL_REF_DATA (X)'
16341          A field of opaque type used to store 'SYMBOL_REF_DECL' or
16342          'SYMBOL_REF_CONSTANT'.
16343
16344     'SYMBOL_REF_FLAGS (X)'
16345          In a 'symbol_ref', this is used to communicate various
16346          predicates about the symbol.  Some of these are common enough
16347          to be computed by common code, some are specific to the
16348          target.  The common bits are:
16349
16350          'SYMBOL_FLAG_FUNCTION'
16351               Set if the symbol refers to a function.
16352
16353          'SYMBOL_FLAG_LOCAL'
16354               Set if the symbol is local to this "module".  See
16355               'TARGET_BINDS_LOCAL_P'.
16356
16357          'SYMBOL_FLAG_EXTERNAL'
16358               Set if this symbol is not defined in this translation
16359               unit.  Note that this is not the inverse of
16360               'SYMBOL_FLAG_LOCAL'.
16361
16362          'SYMBOL_FLAG_SMALL'
16363               Set if the symbol is located in the small data section.
16364               See 'TARGET_IN_SMALL_DATA_P'.
16365
16366          'SYMBOL_REF_TLS_MODEL (X)'
16367               This is a multi-bit field accessor that returns the
16368               'tls_model' to be used for a thread-local storage symbol.
16369               It returns zero for non-thread-local symbols.
16370
16371          'SYMBOL_FLAG_HAS_BLOCK_INFO'
16372               Set if the symbol has 'SYMBOL_REF_BLOCK' and
16373               'SYMBOL_REF_BLOCK_OFFSET' fields.
16374
16375          'SYMBOL_FLAG_ANCHOR'
16376               Set if the symbol is used as a section anchor.  "Section
16377               anchors" are symbols that have a known position within an
16378               'object_block' and that can be used to access nearby
16379               members of that block.  They are used to implement
16380               '-fsection-anchors'.
16381
16382               If this flag is set, then 'SYMBOL_FLAG_HAS_BLOCK_INFO'
16383               will be too.
16384
16385          Bits beginning with 'SYMBOL_FLAG_MACH_DEP' are available for
16386          the target's use.
16387
16388'SYMBOL_REF_BLOCK (X)'
16389     If 'SYMBOL_REF_HAS_BLOCK_INFO_P (X)', this is the 'object_block'
16390     structure to which the symbol belongs, or 'NULL' if it has not been
16391     assigned a block.
16392
16393'SYMBOL_REF_BLOCK_OFFSET (X)'
16394     If 'SYMBOL_REF_HAS_BLOCK_INFO_P (X)', this is the offset of X from
16395     the first object in 'SYMBOL_REF_BLOCK (X)'.  The value is negative
16396     if X has not yet been assigned to a block, or it has not been given
16397     an offset within that block.
16398
16399
16400File: gccint.info,  Node: Flags,  Next: Machine Modes,  Prev: Special Accessors,  Up: RTL
16401
1640214.5 Flags in an RTL Expression
16403===============================
16404
16405RTL expressions contain several flags (one-bit bit-fields) that are used
16406in certain types of expression.  Most often they are accessed with the
16407following macros, which expand into lvalues.
16408
16409'CROSSING_JUMP_P (X)'
16410     Nonzero in a 'jump_insn' if it crosses between hot and cold
16411     sections, which could potentially be very far apart in the
16412     executable.  The presence of this flag indicates to other
16413     optimizations that this branching instruction should not be
16414     "collapsed" into a simpler branching construct.  It is used when
16415     the optimization to partition basic blocks into hot and cold
16416     sections is turned on.
16417
16418'CONSTANT_POOL_ADDRESS_P (X)'
16419     Nonzero in a 'symbol_ref' if it refers to part of the current
16420     function's constant pool.  For most targets these addresses are in
16421     a '.rodata' section entirely separate from the function, but for
16422     some targets the addresses are close to the beginning of the
16423     function.  In either case GCC assumes these addresses can be
16424     addressed directly, perhaps with the help of base registers.
16425     Stored in the 'unchanging' field and printed as '/u'.
16426
16427'INSN_ANNULLED_BRANCH_P (X)'
16428     In a 'jump_insn', 'call_insn', or 'insn' indicates that the branch
16429     is an annulling one.  See the discussion under 'sequence' below.
16430     Stored in the 'unchanging' field and printed as '/u'.
16431
16432'INSN_DELETED_P (X)'
16433     In an 'insn', 'call_insn', 'jump_insn', 'code_label',
16434     'jump_table_data', 'barrier', or 'note', nonzero if the insn has
16435     been deleted.  Stored in the 'volatil' field and printed as '/v'.
16436
16437'INSN_FROM_TARGET_P (X)'
16438     In an 'insn' or 'jump_insn' or 'call_insn' in a delay slot of a
16439     branch, indicates that the insn is from the target of the branch.
16440     If the branch insn has 'INSN_ANNULLED_BRANCH_P' set, this insn will
16441     only be executed if the branch is taken.  For annulled branches
16442     with 'INSN_FROM_TARGET_P' clear, the insn will be executed only if
16443     the branch is not taken.  When 'INSN_ANNULLED_BRANCH_P' is not set,
16444     this insn will always be executed.  Stored in the 'in_struct' field
16445     and printed as '/s'.
16446
16447'LABEL_PRESERVE_P (X)'
16448     In a 'code_label' or 'note', indicates that the label is referenced
16449     by code or data not visible to the RTL of a given function.  Labels
16450     referenced by a non-local goto will have this bit set.  Stored in
16451     the 'in_struct' field and printed as '/s'.
16452
16453'LABEL_REF_NONLOCAL_P (X)'
16454     In 'label_ref' and 'reg_label' expressions, nonzero if this is a
16455     reference to a non-local label.  Stored in the 'volatil' field and
16456     printed as '/v'.
16457
16458'MEM_KEEP_ALIAS_SET_P (X)'
16459     In 'mem' expressions, 1 if we should keep the alias set for this
16460     mem unchanged when we access a component.  Set to 1, for example,
16461     when we are already in a non-addressable component of an aggregate.
16462     Stored in the 'jump' field and printed as '/j'.
16463
16464'MEM_VOLATILE_P (X)'
16465     In 'mem', 'asm_operands', and 'asm_input' expressions, nonzero for
16466     volatile memory references.  Stored in the 'volatil' field and
16467     printed as '/v'.
16468
16469'MEM_NOTRAP_P (X)'
16470     In 'mem', nonzero for memory references that will not trap.  Stored
16471     in the 'call' field and printed as '/c'.
16472
16473'MEM_POINTER (X)'
16474     Nonzero in a 'mem' if the memory reference holds a pointer.  Stored
16475     in the 'frame_related' field and printed as '/f'.
16476
16477'MEM_READONLY_P (X)'
16478     Nonzero in a 'mem', if the memory is statically allocated and
16479     read-only.
16480
16481     Read-only in this context means never modified during the lifetime
16482     of the program, not necessarily in ROM or in write-disabled pages.
16483     A common example of the later is a shared library's global offset
16484     table.  This table is initialized by the runtime loader, so the
16485     memory is technically writable, but after control is transferred
16486     from the runtime loader to the application, this memory will never
16487     be subsequently modified.
16488
16489     Stored in the 'unchanging' field and printed as '/u'.
16490
16491'PREFETCH_SCHEDULE_BARRIER_P (X)'
16492     In a 'prefetch', indicates that the prefetch is a scheduling
16493     barrier.  No other INSNs will be moved over it.  Stored in the
16494     'volatil' field and printed as '/v'.
16495
16496'REG_FUNCTION_VALUE_P (X)'
16497     Nonzero in a 'reg' if it is the place in which this function's
16498     value is going to be returned.  (This happens only in a hard
16499     register.)  Stored in the 'return_val' field and printed as '/i'.
16500
16501'REG_POINTER (X)'
16502     Nonzero in a 'reg' if the register holds a pointer.  Stored in the
16503     'frame_related' field and printed as '/f'.
16504
16505'REG_USERVAR_P (X)'
16506     In a 'reg', nonzero if it corresponds to a variable present in the
16507     user's source code.  Zero for temporaries generated internally by
16508     the compiler.  Stored in the 'volatil' field and printed as '/v'.
16509
16510     The same hard register may be used also for collecting the values
16511     of functions called by this one, but 'REG_FUNCTION_VALUE_P' is zero
16512     in this kind of use.
16513
16514'RTL_CONST_CALL_P (X)'
16515     In a 'call_insn' indicates that the insn represents a call to a
16516     const function.  Stored in the 'unchanging' field and printed as
16517     '/u'.
16518
16519'RTL_PURE_CALL_P (X)'
16520     In a 'call_insn' indicates that the insn represents a call to a
16521     pure function.  Stored in the 'return_val' field and printed as
16522     '/i'.
16523
16524'RTL_CONST_OR_PURE_CALL_P (X)'
16525     In a 'call_insn', true if 'RTL_CONST_CALL_P' or 'RTL_PURE_CALL_P'
16526     is true.
16527
16528'RTL_LOOPING_CONST_OR_PURE_CALL_P (X)'
16529     In a 'call_insn' indicates that the insn represents a possibly
16530     infinite looping call to a const or pure function.  Stored in the
16531     'call' field and printed as '/c'.  Only true if one of
16532     'RTL_CONST_CALL_P' or 'RTL_PURE_CALL_P' is true.
16533
16534'RTX_FRAME_RELATED_P (X)'
16535     Nonzero in an 'insn', 'call_insn', 'jump_insn', 'barrier', or 'set'
16536     which is part of a function prologue and sets the stack pointer,
16537     sets the frame pointer, or saves a register.  This flag should also
16538     be set on an instruction that sets up a temporary register to use
16539     in place of the frame pointer.  Stored in the 'frame_related' field
16540     and printed as '/f'.
16541
16542     In particular, on RISC targets where there are limits on the sizes
16543     of immediate constants, it is sometimes impossible to reach the
16544     register save area directly from the stack pointer.  In that case,
16545     a temporary register is used that is near enough to the register
16546     save area, and the Canonical Frame Address, i.e., DWARF2's logical
16547     frame pointer, register must (temporarily) be changed to be this
16548     temporary register.  So, the instruction that sets this temporary
16549     register must be marked as 'RTX_FRAME_RELATED_P'.
16550
16551     If the marked instruction is overly complex (defined in terms of
16552     what 'dwarf2out_frame_debug_expr' can handle), you will also have
16553     to create a 'REG_FRAME_RELATED_EXPR' note and attach it to the
16554     instruction.  This note should contain a simple expression of the
16555     computation performed by this instruction, i.e., one that
16556     'dwarf2out_frame_debug_expr' can handle.
16557
16558     This flag is required for exception handling support on targets
16559     with RTL prologues.
16560
16561'SCHED_GROUP_P (X)'
16562     During instruction scheduling, in an 'insn', 'call_insn',
16563     'jump_insn' or 'jump_table_data', indicates that the previous insn
16564     must be scheduled together with this insn.  This is used to ensure
16565     that certain groups of instructions will not be split up by the
16566     instruction scheduling pass, for example, 'use' insns before a
16567     'call_insn' may not be separated from the 'call_insn'.  Stored in
16568     the 'in_struct' field and printed as '/s'.
16569
16570'SET_IS_RETURN_P (X)'
16571     For a 'set', nonzero if it is for a return.  Stored in the 'jump'
16572     field and printed as '/j'.
16573
16574'SIBLING_CALL_P (X)'
16575     For a 'call_insn', nonzero if the insn is a sibling call.  Stored
16576     in the 'jump' field and printed as '/j'.
16577
16578'STRING_POOL_ADDRESS_P (X)'
16579     For a 'symbol_ref' expression, nonzero if it addresses this
16580     function's string constant pool.  Stored in the 'frame_related'
16581     field and printed as '/f'.
16582
16583'SUBREG_PROMOTED_UNSIGNED_P (X)'
16584     Returns a value greater then zero for a 'subreg' that has
16585     'SUBREG_PROMOTED_VAR_P' nonzero if the object being referenced is
16586     kept zero-extended, zero if it is kept sign-extended, and less then
16587     zero if it is extended some other way via the 'ptr_extend'
16588     instruction.  Stored in the 'unchanging' field and 'volatil' field,
16589     printed as '/u' and '/v'.  This macro may only be used to get the
16590     value it may not be used to change the value.  Use
16591     'SUBREG_PROMOTED_UNSIGNED_SET' to change the value.
16592
16593'SUBREG_PROMOTED_UNSIGNED_SET (X)'
16594     Set the 'unchanging' and 'volatil' fields in a 'subreg' to reflect
16595     zero, sign, or other extension.  If 'volatil' is zero, then
16596     'unchanging' as nonzero means zero extension and as zero means sign
16597     extension.  If 'volatil' is nonzero then some other type of
16598     extension was done via the 'ptr_extend' instruction.
16599
16600'SUBREG_PROMOTED_VAR_P (X)'
16601     Nonzero in a 'subreg' if it was made when accessing an object that
16602     was promoted to a wider mode in accord with the 'PROMOTED_MODE'
16603     machine description macro (*note Storage Layout::).  In this case,
16604     the mode of the 'subreg' is the declared mode of the object and the
16605     mode of 'SUBREG_REG' is the mode of the register that holds the
16606     object.  Promoted variables are always either sign- or
16607     zero-extended to the wider mode on every assignment.  Stored in the
16608     'in_struct' field and printed as '/s'.
16609
16610'SYMBOL_REF_USED (X)'
16611     In a 'symbol_ref', indicates that X has been used.  This is
16612     normally only used to ensure that X is only declared external once.
16613     Stored in the 'used' field.
16614
16615'SYMBOL_REF_WEAK (X)'
16616     In a 'symbol_ref', indicates that X has been declared weak.  Stored
16617     in the 'return_val' field and printed as '/i'.
16618
16619'SYMBOL_REF_FLAG (X)'
16620     In a 'symbol_ref', this is used as a flag for machine-specific
16621     purposes.  Stored in the 'volatil' field and printed as '/v'.
16622
16623     Most uses of 'SYMBOL_REF_FLAG' are historic and may be subsumed by
16624     'SYMBOL_REF_FLAGS'.  Certainly use of 'SYMBOL_REF_FLAGS' is
16625     mandatory if the target requires more than one bit of storage.
16626
16627 These are the fields to which the above macros refer:
16628
16629'call'
16630     In a 'mem', 1 means that the memory reference will not trap.
16631
16632     In a 'call', 1 means that this pure or const call may possibly
16633     infinite loop.
16634
16635     In an RTL dump, this flag is represented as '/c'.
16636
16637'frame_related'
16638     In an 'insn' or 'set' expression, 1 means that it is part of a
16639     function prologue and sets the stack pointer, sets the frame
16640     pointer, saves a register, or sets up a temporary register to use
16641     in place of the frame pointer.
16642
16643     In 'reg' expressions, 1 means that the register holds a pointer.
16644
16645     In 'mem' expressions, 1 means that the memory reference holds a
16646     pointer.
16647
16648     In 'symbol_ref' expressions, 1 means that the reference addresses
16649     this function's string constant pool.
16650
16651     In an RTL dump, this flag is represented as '/f'.
16652
16653'in_struct'
16654     In 'reg' expressions, it is 1 if the register has its entire life
16655     contained within the test expression of some loop.
16656
16657     In 'subreg' expressions, 1 means that the 'subreg' is accessing an
16658     object that has had its mode promoted from a wider mode.
16659
16660     In 'label_ref' expressions, 1 means that the referenced label is
16661     outside the innermost loop containing the insn in which the
16662     'label_ref' was found.
16663
16664     In 'code_label' expressions, it is 1 if the label may never be
16665     deleted.  This is used for labels which are the target of non-local
16666     gotos.  Such a label that would have been deleted is replaced with
16667     a 'note' of type 'NOTE_INSN_DELETED_LABEL'.
16668
16669     In an 'insn' during dead-code elimination, 1 means that the insn is
16670     dead code.
16671
16672     In an 'insn' or 'jump_insn' during reorg for an insn in the delay
16673     slot of a branch, 1 means that this insn is from the target of the
16674     branch.
16675
16676     In an 'insn' during instruction scheduling, 1 means that this insn
16677     must be scheduled as part of a group together with the previous
16678     insn.
16679
16680     In an RTL dump, this flag is represented as '/s'.
16681
16682'return_val'
16683     In 'reg' expressions, 1 means the register contains the value to be
16684     returned by the current function.  On machines that pass parameters
16685     in registers, the same register number may be used for parameters
16686     as well, but this flag is not set on such uses.
16687
16688     In 'symbol_ref' expressions, 1 means the referenced symbol is weak.
16689
16690     In 'call' expressions, 1 means the call is pure.
16691
16692     In an RTL dump, this flag is represented as '/i'.
16693
16694'jump'
16695     In a 'mem' expression, 1 means we should keep the alias set for
16696     this mem unchanged when we access a component.
16697
16698     In a 'set', 1 means it is for a return.
16699
16700     In a 'call_insn', 1 means it is a sibling call.
16701
16702     In a 'jump_insn', 1 means it is a crossing jump.
16703
16704     In an RTL dump, this flag is represented as '/j'.
16705
16706'unchanging'
16707     In 'reg' and 'mem' expressions, 1 means that the value of the
16708     expression never changes.
16709
16710     In 'subreg' expressions, it is 1 if the 'subreg' references an
16711     unsigned object whose mode has been promoted to a wider mode.
16712
16713     In an 'insn' or 'jump_insn' in the delay slot of a branch
16714     instruction, 1 means an annulling branch should be used.
16715
16716     In a 'symbol_ref' expression, 1 means that this symbol addresses
16717     something in the per-function constant pool.
16718
16719     In a 'call_insn' 1 means that this instruction is a call to a const
16720     function.
16721
16722     In an RTL dump, this flag is represented as '/u'.
16723
16724'used'
16725     This flag is used directly (without an access macro) at the end of
16726     RTL generation for a function, to count the number of times an
16727     expression appears in insns.  Expressions that appear more than
16728     once are copied, according to the rules for shared structure (*note
16729     Sharing::).
16730
16731     For a 'reg', it is used directly (without an access macro) by the
16732     leaf register renumbering code to ensure that each register is only
16733     renumbered once.
16734
16735     In a 'symbol_ref', it indicates that an external declaration for
16736     the symbol has already been written.
16737
16738'volatil'
16739     In a 'mem', 'asm_operands', or 'asm_input' expression, it is 1 if
16740     the memory reference is volatile.  Volatile memory references may
16741     not be deleted, reordered or combined.
16742
16743     In a 'symbol_ref' expression, it is used for machine-specific
16744     purposes.
16745
16746     In a 'reg' expression, it is 1 if the value is a user-level
16747     variable.  0 indicates an internal compiler temporary.
16748
16749     In an 'insn', 1 means the insn has been deleted.
16750
16751     In 'label_ref' and 'reg_label' expressions, 1 means a reference to
16752     a non-local label.
16753
16754     In 'prefetch' expressions, 1 means that the containing insn is a
16755     scheduling barrier.
16756
16757     In an RTL dump, this flag is represented as '/v'.
16758
16759
16760File: gccint.info,  Node: Machine Modes,  Next: Constants,  Prev: Flags,  Up: RTL
16761
1676214.6 Machine Modes
16763==================
16764
16765A machine mode describes a size of data object and the representation
16766used for it.  In the C code, machine modes are represented by an
16767enumeration type, 'machine_mode', defined in 'machmode.def'.  Each RTL
16768expression has room for a machine mode and so do certain kinds of tree
16769expressions (declarations and types, to be precise).
16770
16771 In debugging dumps and machine descriptions, the machine mode of an RTL
16772expression is written after the expression code with a colon to separate
16773them.  The letters 'mode' which appear at the end of each machine mode
16774name are omitted.  For example, '(reg:SI 38)' is a 'reg' expression with
16775machine mode 'SImode'.  If the mode is 'VOIDmode', it is not written at
16776all.
16777
16778 Here is a table of machine modes.  The term "byte" below refers to an
16779object of 'BITS_PER_UNIT' bits (*note Storage Layout::).
16780
16781'BImode'
16782     "Bit" mode represents a single bit, for predicate registers.
16783
16784'QImode'
16785     "Quarter-Integer" mode represents a single byte treated as an
16786     integer.
16787
16788'HImode'
16789     "Half-Integer" mode represents a two-byte integer.
16790
16791'PSImode'
16792     "Partial Single Integer" mode represents an integer which occupies
16793     four bytes but which doesn't really use all four.  On some
16794     machines, this is the right mode to use for pointers.
16795
16796'SImode'
16797     "Single Integer" mode represents a four-byte integer.
16798
16799'PDImode'
16800     "Partial Double Integer" mode represents an integer which occupies
16801     eight bytes but which doesn't really use all eight.  On some
16802     machines, this is the right mode to use for certain pointers.
16803
16804'DImode'
16805     "Double Integer" mode represents an eight-byte integer.
16806
16807'TImode'
16808     "Tetra Integer" (?)  mode represents a sixteen-byte integer.
16809
16810'OImode'
16811     "Octa Integer" (?)  mode represents a thirty-two-byte integer.
16812
16813'XImode'
16814     "Hexadeca Integer" (?)  mode represents a sixty-four-byte integer.
16815
16816'QFmode'
16817     "Quarter-Floating" mode represents a quarter-precision (single
16818     byte) floating point number.
16819
16820'HFmode'
16821     "Half-Floating" mode represents a half-precision (two byte)
16822     floating point number.
16823
16824'TQFmode'
16825     "Three-Quarter-Floating" (?)  mode represents a
16826     three-quarter-precision (three byte) floating point number.
16827
16828'SFmode'
16829     "Single Floating" mode represents a four byte floating point
16830     number.  In the common case, of a processor with IEEE arithmetic
16831     and 8-bit bytes, this is a single-precision IEEE floating point
16832     number; it can also be used for double-precision (on processors
16833     with 16-bit bytes) and single-precision VAX and IBM types.
16834
16835'DFmode'
16836     "Double Floating" mode represents an eight byte floating point
16837     number.  In the common case, of a processor with IEEE arithmetic
16838     and 8-bit bytes, this is a double-precision IEEE floating point
16839     number.
16840
16841'XFmode'
16842     "Extended Floating" mode represents an IEEE extended floating point
16843     number.  This mode only has 80 meaningful bits (ten bytes).  Some
16844     processors require such numbers to be padded to twelve bytes,
16845     others to sixteen; this mode is used for either.
16846
16847'SDmode'
16848     "Single Decimal Floating" mode represents a four byte decimal
16849     floating point number (as distinct from conventional binary
16850     floating point).
16851
16852'DDmode'
16853     "Double Decimal Floating" mode represents an eight byte decimal
16854     floating point number.
16855
16856'TDmode'
16857     "Tetra Decimal Floating" mode represents a sixteen byte decimal
16858     floating point number all 128 of whose bits are meaningful.
16859
16860'TFmode'
16861     "Tetra Floating" mode represents a sixteen byte floating point
16862     number all 128 of whose bits are meaningful.  One common use is the
16863     IEEE quad-precision format.
16864
16865'QQmode'
16866     "Quarter-Fractional" mode represents a single byte treated as a
16867     signed fractional number.  The default format is "s.7".
16868
16869'HQmode'
16870     "Half-Fractional" mode represents a two-byte signed fractional
16871     number.  The default format is "s.15".
16872
16873'SQmode'
16874     "Single Fractional" mode represents a four-byte signed fractional
16875     number.  The default format is "s.31".
16876
16877'DQmode'
16878     "Double Fractional" mode represents an eight-byte signed fractional
16879     number.  The default format is "s.63".
16880
16881'TQmode'
16882     "Tetra Fractional" mode represents a sixteen-byte signed fractional
16883     number.  The default format is "s.127".
16884
16885'UQQmode'
16886     "Unsigned Quarter-Fractional" mode represents a single byte treated
16887     as an unsigned fractional number.  The default format is ".8".
16888
16889'UHQmode'
16890     "Unsigned Half-Fractional" mode represents a two-byte unsigned
16891     fractional number.  The default format is ".16".
16892
16893'USQmode'
16894     "Unsigned Single Fractional" mode represents a four-byte unsigned
16895     fractional number.  The default format is ".32".
16896
16897'UDQmode'
16898     "Unsigned Double Fractional" mode represents an eight-byte unsigned
16899     fractional number.  The default format is ".64".
16900
16901'UTQmode'
16902     "Unsigned Tetra Fractional" mode represents a sixteen-byte unsigned
16903     fractional number.  The default format is ".128".
16904
16905'HAmode'
16906     "Half-Accumulator" mode represents a two-byte signed accumulator.
16907     The default format is "s8.7".
16908
16909'SAmode'
16910     "Single Accumulator" mode represents a four-byte signed
16911     accumulator.  The default format is "s16.15".
16912
16913'DAmode'
16914     "Double Accumulator" mode represents an eight-byte signed
16915     accumulator.  The default format is "s32.31".
16916
16917'TAmode'
16918     "Tetra Accumulator" mode represents a sixteen-byte signed
16919     accumulator.  The default format is "s64.63".
16920
16921'UHAmode'
16922     "Unsigned Half-Accumulator" mode represents a two-byte unsigned
16923     accumulator.  The default format is "8.8".
16924
16925'USAmode'
16926     "Unsigned Single Accumulator" mode represents a four-byte unsigned
16927     accumulator.  The default format is "16.16".
16928
16929'UDAmode'
16930     "Unsigned Double Accumulator" mode represents an eight-byte
16931     unsigned accumulator.  The default format is "32.32".
16932
16933'UTAmode'
16934     "Unsigned Tetra Accumulator" mode represents a sixteen-byte
16935     unsigned accumulator.  The default format is "64.64".
16936
16937'CCmode'
16938     "Condition Code" mode represents the value of a condition code,
16939     which is a machine-specific set of bits used to represent the
16940     result of a comparison operation.  Other machine-specific modes may
16941     also be used for the condition code.  These modes are not used on
16942     machines that use 'cc0' (*note Condition Code::).
16943
16944'BLKmode'
16945     "Block" mode represents values that are aggregates to which none of
16946     the other modes apply.  In RTL, only memory references can have
16947     this mode, and only if they appear in string-move or vector
16948     instructions.  On machines which have no such instructions,
16949     'BLKmode' will not appear in RTL.
16950
16951'VOIDmode'
16952     Void mode means the absence of a mode or an unspecified mode.  For
16953     example, RTL expressions of code 'const_int' have mode 'VOIDmode'
16954     because they can be taken to have whatever mode the context
16955     requires.  In debugging dumps of RTL, 'VOIDmode' is expressed by
16956     the absence of any mode.
16957
16958'QCmode, HCmode, SCmode, DCmode, XCmode, TCmode'
16959     These modes stand for a complex number represented as a pair of
16960     floating point values.  The floating point values are in 'QFmode',
16961     'HFmode', 'SFmode', 'DFmode', 'XFmode', and 'TFmode', respectively.
16962
16963'CQImode, CHImode, CSImode, CDImode, CTImode, COImode, CPSImode'
16964     These modes stand for a complex number represented as a pair of
16965     integer values.  The integer values are in 'QImode', 'HImode',
16966     'SImode', 'DImode', 'TImode', 'OImode', and 'PSImode',
16967     respectively.
16968
16969'BND32mode BND64mode'
16970     These modes stand for bounds for pointer of 32 and 64 bit size
16971     respectively.  Mode size is double pointer mode size.
16972
16973 The machine description defines 'Pmode' as a C macro which expands into
16974the machine mode used for addresses.  Normally this is the mode whose
16975size is 'BITS_PER_WORD', 'SImode' on 32-bit machines.
16976
16977 The only modes which a machine description must support are 'QImode',
16978and the modes corresponding to 'BITS_PER_WORD', 'FLOAT_TYPE_SIZE' and
16979'DOUBLE_TYPE_SIZE'.  The compiler will attempt to use 'DImode' for
169808-byte structures and unions, but this can be prevented by overriding
16981the definition of 'MAX_FIXED_MODE_SIZE'.  Alternatively, you can have
16982the compiler use 'TImode' for 16-byte structures and unions.  Likewise,
16983you can arrange for the C type 'short int' to avoid using 'HImode'.
16984
16985 Very few explicit references to machine modes remain in the compiler
16986and these few references will soon be removed.  Instead, the machine
16987modes are divided into mode classes.  These are represented by the
16988enumeration type 'enum mode_class' defined in 'machmode.h'.  The
16989possible mode classes are:
16990
16991'MODE_INT'
16992     Integer modes.  By default these are 'BImode', 'QImode', 'HImode',
16993     'SImode', 'DImode', 'TImode', and 'OImode'.
16994
16995'MODE_PARTIAL_INT'
16996     The "partial integer" modes, 'PQImode', 'PHImode', 'PSImode' and
16997     'PDImode'.
16998
16999'MODE_FLOAT'
17000     Floating point modes.  By default these are 'QFmode', 'HFmode',
17001     'TQFmode', 'SFmode', 'DFmode', 'XFmode' and 'TFmode'.
17002
17003'MODE_DECIMAL_FLOAT'
17004     Decimal floating point modes.  By default these are 'SDmode',
17005     'DDmode' and 'TDmode'.
17006
17007'MODE_FRACT'
17008     Signed fractional modes.  By default these are 'QQmode', 'HQmode',
17009     'SQmode', 'DQmode' and 'TQmode'.
17010
17011'MODE_UFRACT'
17012     Unsigned fractional modes.  By default these are 'UQQmode',
17013     'UHQmode', 'USQmode', 'UDQmode' and 'UTQmode'.
17014
17015'MODE_ACCUM'
17016     Signed accumulator modes.  By default these are 'HAmode', 'SAmode',
17017     'DAmode' and 'TAmode'.
17018
17019'MODE_UACCUM'
17020     Unsigned accumulator modes.  By default these are 'UHAmode',
17021     'USAmode', 'UDAmode' and 'UTAmode'.
17022
17023'MODE_COMPLEX_INT'
17024     Complex integer modes.  (These are not currently implemented).
17025
17026'MODE_COMPLEX_FLOAT'
17027     Complex floating point modes.  By default these are 'QCmode',
17028     'HCmode', 'SCmode', 'DCmode', 'XCmode', and 'TCmode'.
17029
17030'MODE_CC'
17031     Modes representing condition code values.  These are 'CCmode' plus
17032     any 'CC_MODE' modes listed in the 'MACHINE-modes.def'.  *Note Jump
17033     Patterns::, also see *note Condition Code::.
17034
17035'MODE_POINTER_BOUNDS'
17036     Pointer bounds modes.  Used to represent values of pointer bounds
17037     type.  Operations in these modes may be executed as NOPs depending
17038     on hardware features and environment setup.
17039
17040'MODE_RANDOM'
17041     This is a catchall mode class for modes which don't fit into the
17042     above classes.  Currently 'VOIDmode' and 'BLKmode' are in
17043     'MODE_RANDOM'.
17044
17045 'machmode.h' also defines various wrapper classes that combine a
17046'machine_mode' with a static assertion that a particular condition
17047holds.  The classes are:
17048
17049'scalar_int_mode'
17050     A mode that has class 'MODE_INT' or 'MODE_PARTIAL_INT'.
17051
17052'scalar_float_mode'
17053     A mode that has class 'MODE_FLOAT' or 'MODE_DECIMAL_FLOAT'.
17054
17055'scalar_mode'
17056     A mode that holds a single numerical value.  In practice this means
17057     that the mode is a 'scalar_int_mode', is a 'scalar_float_mode', or
17058     has class 'MODE_FRACT', 'MODE_UFRACT', 'MODE_ACCUM', 'MODE_UACCUM'
17059     or 'MODE_POINTER_BOUNDS'.
17060
17061'complex_mode'
17062     A mode that has class 'MODE_COMPLEX_INT' or 'MODE_COMPLEX_FLOAT'.
17063
17064'fixed_size_mode'
17065     A mode whose size is known at compile time.
17066
17067 Named modes use the most constrained of the available wrapper classes,
17068if one exists, otherwise they use 'machine_mode'.  For example, 'QImode'
17069is a 'scalar_int_mode', 'SFmode' is a 'scalar_float_mode' and 'BLKmode'
17070is a plain 'machine_mode'.  It is possible to refer to any mode as a raw
17071'machine_mode' by adding the 'E_' prefix, where 'E' stands for
17072"enumeration".  For example, the raw 'machine_mode' names of the modes
17073just mentioned are 'E_QImode', 'E_SFmode' and 'E_BLKmode' respectively.
17074
17075 The wrapper classes implicitly convert to 'machine_mode' and to any
17076wrapper class that represents a more general condition; for example
17077'scalar_int_mode' and 'scalar_float_mode' both convert to 'scalar_mode'
17078and all three convert to 'fixed_size_mode'.  The classes act like
17079'machine_mode's that accept only certain named modes.
17080
17081 'machmode.h' also defines a template class 'opt_mode<T>' that holds a
17082'T' or nothing, where 'T' can be either 'machine_mode' or one of the
17083wrapper classes above.  The main operations on an 'opt_mode<T>' X are as
17084follows:
17085
17086'X.exists ()'
17087     Return true if X holds a mode rather than nothing.
17088
17089'X.exists (&Y)'
17090     Return true if X holds a mode rather than nothing, storing the mode
17091     in Y if so.  Y must be assignment-compatible with T.
17092
17093'X.require ()'
17094     Assert that X holds a mode rather than nothing and return that
17095     mode.
17096
17097'X = Y'
17098     Set X to Y, where Y is a T or implicitly converts to a T.
17099
17100 The default constructor sets an 'opt_mode<T>' to nothing.  There is
17101also a constructor that takes an initial value of type T.
17102
17103 It is possible to use the 'is-a.h' accessors on a 'machine_mode' or
17104machine mode wrapper X:
17105
17106'is_a <T> (X)'
17107     Return true if X meets the conditions for wrapper class T.
17108
17109'is_a <T> (X, &Y)'
17110     Return true if X meets the conditions for wrapper class T, storing
17111     it in Y if so.  Y must be assignment-compatible with T.
17112
17113'as_a <T> (X)'
17114     Assert that X meets the conditions for wrapper class T and return
17115     it as a T.
17116
17117'dyn_cast <T> (X)'
17118     Return an 'opt_mode<T>' that holds X if X meets the conditions for
17119     wrapper class T and that holds nothing otherwise.
17120
17121 The purpose of these wrapper classes is to give stronger static type
17122checking.  For example, if a function takes a 'scalar_int_mode', a
17123caller that has a general 'machine_mode' must either check or assert
17124that the code is indeed a scalar integer first, using one of the
17125functions above.
17126
17127 The wrapper classes are normal C++ classes, with user-defined
17128constructors.  Sometimes it is useful to have a POD version of the same
17129type, particularly if the type appears in a 'union'.  The template class
17130'pod_mode<T>' provides a POD version of wrapper class T.  It is
17131assignment-compatible with T and implicitly converts to both
17132'machine_mode' and T.
17133
17134 Here are some C macros that relate to machine modes:
17135
17136'GET_MODE (X)'
17137     Returns the machine mode of the RTX X.
17138
17139'PUT_MODE (X, NEWMODE)'
17140     Alters the machine mode of the RTX X to be NEWMODE.
17141
17142'NUM_MACHINE_MODES'
17143     Stands for the number of machine modes available on the target
17144     machine.  This is one greater than the largest numeric value of any
17145     machine mode.
17146
17147'GET_MODE_NAME (M)'
17148     Returns the name of mode M as a string.
17149
17150'GET_MODE_CLASS (M)'
17151     Returns the mode class of mode M.
17152
17153'GET_MODE_WIDER_MODE (M)'
17154     Returns the next wider natural mode.  For example, the expression
17155     'GET_MODE_WIDER_MODE (QImode)' returns 'HImode'.
17156
17157'GET_MODE_SIZE (M)'
17158     Returns the size in bytes of a datum of mode M.
17159
17160'GET_MODE_BITSIZE (M)'
17161     Returns the size in bits of a datum of mode M.
17162
17163'GET_MODE_IBIT (M)'
17164     Returns the number of integral bits of a datum of fixed-point mode
17165     M.
17166
17167'GET_MODE_FBIT (M)'
17168     Returns the number of fractional bits of a datum of fixed-point
17169     mode M.
17170
17171'GET_MODE_MASK (M)'
17172     Returns a bitmask containing 1 for all bits in a word that fit
17173     within mode M.  This macro can only be used for modes whose bitsize
17174     is less than or equal to 'HOST_BITS_PER_INT'.
17175
17176'GET_MODE_ALIGNMENT (M)'
17177     Return the required alignment, in bits, for an object of mode M.
17178
17179'GET_MODE_UNIT_SIZE (M)'
17180     Returns the size in bytes of the subunits of a datum of mode M.
17181     This is the same as 'GET_MODE_SIZE' except in the case of complex
17182     modes.  For them, the unit size is the size of the real or
17183     imaginary part.
17184
17185'GET_MODE_NUNITS (M)'
17186     Returns the number of units contained in a mode, i.e.,
17187     'GET_MODE_SIZE' divided by 'GET_MODE_UNIT_SIZE'.
17188
17189'GET_CLASS_NARROWEST_MODE (C)'
17190     Returns the narrowest mode in mode class C.
17191
17192 The following 3 variables are defined on every target.  They can be
17193used to allocate buffers that are guaranteed to be large enough to hold
17194any value that can be represented on the target.  The first two can be
17195overridden by defining them in the target's mode.def file, however, the
17196value must be a constant that can determined very early in the
17197compilation process.  The third symbol cannot be overridden.
17198
17199'BITS_PER_UNIT'
17200     The number of bits in an addressable storage unit (byte).  If you
17201     do not define this, the default is 8.
17202
17203'MAX_BITSIZE_MODE_ANY_INT'
17204     The maximum bitsize of any mode that is used in integer math.  This
17205     should be overridden by the target if it uses large integers as
17206     containers for larger vectors but otherwise never uses the contents
17207     to compute integer values.
17208
17209'MAX_BITSIZE_MODE_ANY_MODE'
17210     The bitsize of the largest mode on the target.  The default value
17211     is the largest mode size given in the mode definition file, which
17212     is always correct for targets whose modes have a fixed size.
17213     Targets that might increase the size of a mode beyond this default
17214     should define 'MAX_BITSIZE_MODE_ANY_MODE' to the actual upper limit
17215     in 'MACHINE-modes.def'.
17216
17217 The global variables 'byte_mode' and 'word_mode' contain modes whose
17218classes are 'MODE_INT' and whose bitsizes are either 'BITS_PER_UNIT' or
17219'BITS_PER_WORD', respectively.  On 32-bit machines, these are 'QImode'
17220and 'SImode', respectively.
17221
17222
17223File: gccint.info,  Node: Constants,  Next: Regs and Memory,  Prev: Machine Modes,  Up: RTL
17224
1722514.7 Constant Expression Types
17226==============================
17227
17228The simplest RTL expressions are those that represent constant values.
17229
17230'(const_int I)'
17231     This type of expression represents the integer value I.  I is
17232     customarily accessed with the macro 'INTVAL' as in 'INTVAL (EXP)',
17233     which is equivalent to 'XWINT (EXP, 0)'.
17234
17235     Constants generated for modes with fewer bits than in
17236     'HOST_WIDE_INT' must be sign extended to full width (e.g., with
17237     'gen_int_mode').  For constants for modes with more bits than in
17238     'HOST_WIDE_INT' the implied high order bits of that constant are
17239     copies of the top bit.  Note however that values are neither
17240     inherently signed nor inherently unsigned; where necessary,
17241     signedness is determined by the rtl operation instead.
17242
17243     There is only one expression object for the integer value zero; it
17244     is the value of the variable 'const0_rtx'.  Likewise, the only
17245     expression for integer value one is found in 'const1_rtx', the only
17246     expression for integer value two is found in 'const2_rtx', and the
17247     only expression for integer value negative one is found in
17248     'constm1_rtx'.  Any attempt to create an expression of code
17249     'const_int' and value zero, one, two or negative one will return
17250     'const0_rtx', 'const1_rtx', 'const2_rtx' or 'constm1_rtx' as
17251     appropriate.
17252
17253     Similarly, there is only one object for the integer whose value is
17254     'STORE_FLAG_VALUE'.  It is found in 'const_true_rtx'.  If
17255     'STORE_FLAG_VALUE' is one, 'const_true_rtx' and 'const1_rtx' will
17256     point to the same object.  If 'STORE_FLAG_VALUE' is -1,
17257     'const_true_rtx' and 'constm1_rtx' will point to the same object.
17258
17259'(const_double:M I0 I1 ...)'
17260     This represents either a floating-point constant of mode M or (on
17261     older ports that do not define 'TARGET_SUPPORTS_WIDE_INT') an
17262     integer constant too large to fit into 'HOST_BITS_PER_WIDE_INT'
17263     bits but small enough to fit within twice that number of bits.  In
17264     the latter case, M will be 'VOIDmode'.  For integral values
17265     constants for modes with more bits than twice the number in
17266     'HOST_WIDE_INT' the implied high order bits of that constant are
17267     copies of the top bit of 'CONST_DOUBLE_HIGH'.  Note however that
17268     integral values are neither inherently signed nor inherently
17269     unsigned; where necessary, signedness is determined by the rtl
17270     operation instead.
17271
17272     On more modern ports, 'CONST_DOUBLE' only represents floating point
17273     values.  New ports define 'TARGET_SUPPORTS_WIDE_INT' to make this
17274     designation.
17275
17276     If M is 'VOIDmode', the bits of the value are stored in I0 and I1.
17277     I0 is customarily accessed with the macro 'CONST_DOUBLE_LOW' and I1
17278     with 'CONST_DOUBLE_HIGH'.
17279
17280     If the constant is floating point (regardless of its precision),
17281     then the number of integers used to store the value depends on the
17282     size of 'REAL_VALUE_TYPE' (*note Floating Point::).  The integers
17283     represent a floating point number, but not precisely in the target
17284     machine's or host machine's floating point format.  To convert them
17285     to the precise bit pattern used by the target machine, use the
17286     macro 'REAL_VALUE_TO_TARGET_DOUBLE' and friends (*note Data
17287     Output::).
17288
17289'(const_wide_int:M NUNITS ELT0 ...)'
17290     This contains an array of 'HOST_WIDE_INT's that is large enough to
17291     hold any constant that can be represented on the target.  This form
17292     of rtl is only used on targets that define
17293     'TARGET_SUPPORTS_WIDE_INT' to be nonzero and then 'CONST_DOUBLE's
17294     are only used to hold floating-point values.  If the target leaves
17295     'TARGET_SUPPORTS_WIDE_INT' defined as 0, 'CONST_WIDE_INT's are not
17296     used and 'CONST_DOUBLE's are as they were before.
17297
17298     The values are stored in a compressed format.  The higher-order 0s
17299     or -1s are not represented if they are just the logical sign
17300     extension of the number that is represented.
17301
17302'CONST_WIDE_INT_VEC (CODE)'
17303     Returns the entire array of 'HOST_WIDE_INT's that are used to store
17304     the value.  This macro should be rarely used.
17305
17306'CONST_WIDE_INT_NUNITS (CODE)'
17307     The number of 'HOST_WIDE_INT's used to represent the number.  Note
17308     that this generally is smaller than the number of 'HOST_WIDE_INT's
17309     implied by the mode size.
17310
17311'CONST_WIDE_INT_ELT (CODE,I)'
17312     Returns the 'i'th element of the array.  Element 0 is contains the
17313     low order bits of the constant.
17314
17315'(const_fixed:M ...)'
17316     Represents a fixed-point constant of mode M.  The operand is a data
17317     structure of type 'struct fixed_value' and is accessed with the
17318     macro 'CONST_FIXED_VALUE'.  The high part of data is accessed with
17319     'CONST_FIXED_VALUE_HIGH'; the low part is accessed with
17320     'CONST_FIXED_VALUE_LOW'.
17321
17322'(const_poly_int:M [C0 C1 ...])'
17323     Represents a 'poly_int'-style polynomial integer with coefficients
17324     C0, C1, ....  The coefficients are 'wide_int'-based integers rather
17325     than rtxes.  'CONST_POLY_INT_COEFFS' gives the values of individual
17326     coefficients (which is mostly only useful in low-level routines)
17327     and 'const_poly_int_value' gives the full 'poly_int' value.
17328
17329'(const_vector:M [X0 X1 ...])'
17330     Represents a vector constant.  The values in square brackets are
17331     elements of the vector, which are always 'const_int',
17332     'const_wide_int', 'const_double' or 'const_fixed' expressions.
17333
17334     Each vector constant V is treated as a specific instance of an
17335     arbitrary-length sequence that itself contains
17336     'CONST_VECTOR_NPATTERNS (V)' interleaved patterns.  Each pattern
17337     has the form:
17338
17339          { BASE0, BASE1, BASE1 + STEP, BASE1 + STEP * 2, ... }
17340
17341     The first three elements in each pattern are enough to determine
17342     the values of the other elements.  However, if all STEPs are zero,
17343     only the first two elements are needed.  If in addition each BASE1
17344     is equal to the corresponding BASE0, only the first element in each
17345     pattern is needed.  The number of determining elements per pattern
17346     is given by 'CONST_VECTOR_NELTS_PER_PATTERN (V)'.
17347
17348     For example, the constant:
17349
17350          { 0, 1, 2, 6, 3, 8, 4, 10, 5, 12, 6, 14, 7, 16, 8, 18 }
17351
17352     is interpreted as an interleaving of the sequences:
17353
17354          { 0, 2, 3, 4, 5, 6, 7, 8 }
17355          { 1, 6, 8, 10, 12, 14, 16, 18 }
17356
17357     where the sequences are represented by the following patterns:
17358
17359          BASE0 == 0, BASE1 == 2, STEP == 1
17360          BASE0 == 1, BASE1 == 6, STEP == 2
17361
17362     In this case:
17363
17364          CONST_VECTOR_NPATTERNS (V) == 2
17365          CONST_VECTOR_NELTS_PER_PATTERN (V) == 3
17366
17367     Thus the first 6 elements ('{ 0, 1, 2, 6, 3, 8 }') are enough to
17368     determine the whole sequence; we refer to them as the "encoded"
17369     elements.  They are the only elements present in the square
17370     brackets for variable-length 'const_vector's (i.e. for
17371     'const_vector's whose mode M has a variable number of elements).
17372     However, as a convenience to code that needs to handle both
17373     'const_vector's and 'parallel's, all elements are present in the
17374     square brackets for fixed-length 'const_vector's; the encoding
17375     scheme simply reduces the amount of work involved in processing
17376     constants that follow a regular pattern.
17377
17378     Sometimes this scheme can create two possible encodings of the same
17379     vector.  For example { 0, 1 } could be seen as two patterns with
17380     one element each or one pattern with two elements (BASE0 and
17381     BASE1).  The canonical encoding is always the one with the fewest
17382     patterns or (if both encodings have the same number of petterns)
17383     the one with the fewest encoded elements.
17384
17385     'const_vector_encoding_nelts (V)' gives the total number of encoded
17386     elements in V, which is 6 in the example above.
17387     'CONST_VECTOR_ENCODED_ELT (V, I)' accesses the value of encoded
17388     element I.
17389
17390     'CONST_VECTOR_DUPLICATE_P (V)' is true if V simply contains
17391     repeated instances of 'CONST_VECTOR_NPATTERNS (V)' values.  This is
17392     a shorthand for testing 'CONST_VECTOR_NELTS_PER_PATTERN (V) == 1'.
17393
17394     'CONST_VECTOR_STEPPED_P (V)' is true if at least one pattern in V
17395     has a nonzero step.  This is a shorthand for testing
17396     'CONST_VECTOR_NELTS_PER_PATTERN (V) == 3'.
17397
17398     'CONST_VECTOR_NUNITS (V)' gives the total number of elements in V;
17399     it is a shorthand for getting the number of units in 'GET_MODE
17400     (V)'.
17401
17402     The utility function 'const_vector_elt' gives the value of an
17403     arbitrary element as an 'rtx'.  'const_vector_int_elt' gives the
17404     same value as a 'wide_int'.
17405
17406'(const_string STR)'
17407     Represents a constant string with value STR.  Currently this is
17408     used only for insn attributes (*note Insn Attributes::) since
17409     constant strings in C are placed in memory.
17410
17411'(symbol_ref:MODE SYMBOL)'
17412     Represents the value of an assembler label for data.  SYMBOL is a
17413     string that describes the name of the assembler label.  If it
17414     starts with a '*', the label is the rest of SYMBOL not including
17415     the '*'.  Otherwise, the label is SYMBOL, usually prefixed with
17416     '_'.
17417
17418     The 'symbol_ref' contains a mode, which is usually 'Pmode'.
17419     Usually that is the only mode for which a symbol is directly valid.
17420
17421'(label_ref:MODE LABEL)'
17422     Represents the value of an assembler label for code.  It contains
17423     one operand, an expression, which must be a 'code_label' or a
17424     'note' of type 'NOTE_INSN_DELETED_LABEL' that appears in the
17425     instruction sequence to identify the place where the label should
17426     go.
17427
17428     The reason for using a distinct expression type for code label
17429     references is so that jump optimization can distinguish them.
17430
17431     The 'label_ref' contains a mode, which is usually 'Pmode'.  Usually
17432     that is the only mode for which a label is directly valid.
17433
17434'(const:M EXP)'
17435     Represents a constant that is the result of an assembly-time
17436     arithmetic computation.  The operand, EXP, contains only
17437     'const_int', 'symbol_ref', 'label_ref' or 'unspec' expressions,
17438     combined with 'plus' and 'minus'.  Any such 'unspec's are
17439     target-specific and typically represent some form of relocation
17440     operator.  M should be a valid address mode.
17441
17442'(high:M EXP)'
17443     Represents the high-order bits of EXP.  The number of bits is
17444     machine-dependent and is normally the number of bits specified in
17445     an instruction that initializes the high order bits of a register.
17446     It is used with 'lo_sum' to represent the typical two-instruction
17447     sequence used in RISC machines to reference large immediate values
17448     and/or link-time constants such as global memory addresses.  In the
17449     latter case, M is 'Pmode' and EXP is usually a constant expression
17450     involving 'symbol_ref'.
17451
17452 The macro 'CONST0_RTX (MODE)' refers to an expression with value 0 in
17453mode MODE.  If mode MODE is of mode class 'MODE_INT', it returns
17454'const0_rtx'.  If mode MODE is of mode class 'MODE_FLOAT', it returns a
17455'CONST_DOUBLE' expression in mode MODE.  Otherwise, it returns a
17456'CONST_VECTOR' expression in mode MODE.  Similarly, the macro
17457'CONST1_RTX (MODE)' refers to an expression with value 1 in mode MODE
17458and similarly for 'CONST2_RTX'.  The 'CONST1_RTX' and 'CONST2_RTX'
17459macros are undefined for vector modes.
17460
17461
17462File: gccint.info,  Node: Regs and Memory,  Next: Arithmetic,  Prev: Constants,  Up: RTL
17463
1746414.8 Registers and Memory
17465=========================
17466
17467Here are the RTL expression types for describing access to machine
17468registers and to main memory.
17469
17470'(reg:M N)'
17471     For small values of the integer N (those that are less than
17472     'FIRST_PSEUDO_REGISTER'), this stands for a reference to machine
17473     register number N: a "hard register".  For larger values of N, it
17474     stands for a temporary value or "pseudo register".  The compiler's
17475     strategy is to generate code assuming an unlimited number of such
17476     pseudo registers, and later convert them into hard registers or
17477     into memory references.
17478
17479     M is the machine mode of the reference.  It is necessary because
17480     machines can generally refer to each register in more than one
17481     mode.  For example, a register may contain a full word but there
17482     may be instructions to refer to it as a half word or as a single
17483     byte, as well as instructions to refer to it as a floating point
17484     number of various precisions.
17485
17486     Even for a register that the machine can access in only one mode,
17487     the mode must always be specified.
17488
17489     The symbol 'FIRST_PSEUDO_REGISTER' is defined by the machine
17490     description, since the number of hard registers on the machine is
17491     an invariant characteristic of the machine.  Note, however, that
17492     not all of the machine registers must be general registers.  All
17493     the machine registers that can be used for storage of data are
17494     given hard register numbers, even those that can be used only in
17495     certain instructions or can hold only certain types of data.
17496
17497     A hard register may be accessed in various modes throughout one
17498     function, but each pseudo register is given a natural mode and is
17499     accessed only in that mode.  When it is necessary to describe an
17500     access to a pseudo register using a nonnatural mode, a 'subreg'
17501     expression is used.
17502
17503     A 'reg' expression with a machine mode that specifies more than one
17504     word of data may actually stand for several consecutive registers.
17505     If in addition the register number specifies a hardware register,
17506     then it actually represents several consecutive hardware registers
17507     starting with the specified one.
17508
17509     Each pseudo register number used in a function's RTL code is
17510     represented by a unique 'reg' expression.
17511
17512     Some pseudo register numbers, those within the range of
17513     'FIRST_VIRTUAL_REGISTER' to 'LAST_VIRTUAL_REGISTER' only appear
17514     during the RTL generation phase and are eliminated before the
17515     optimization phases.  These represent locations in the stack frame
17516     that cannot be determined until RTL generation for the function has
17517     been completed.  The following virtual register numbers are
17518     defined:
17519
17520     'VIRTUAL_INCOMING_ARGS_REGNUM'
17521          This points to the first word of the incoming arguments passed
17522          on the stack.  Normally these arguments are placed there by
17523          the caller, but the callee may have pushed some arguments that
17524          were previously passed in registers.
17525
17526          When RTL generation is complete, this virtual register is
17527          replaced by the sum of the register given by
17528          'ARG_POINTER_REGNUM' and the value of 'FIRST_PARM_OFFSET'.
17529
17530     'VIRTUAL_STACK_VARS_REGNUM'
17531          If 'FRAME_GROWS_DOWNWARD' is defined to a nonzero value, this
17532          points to immediately above the first variable on the stack.
17533          Otherwise, it points to the first variable on the stack.
17534
17535          'VIRTUAL_STACK_VARS_REGNUM' is replaced with the sum of the
17536          register given by 'FRAME_POINTER_REGNUM' and the value
17537          'TARGET_STARTING_FRAME_OFFSET'.
17538
17539     'VIRTUAL_STACK_DYNAMIC_REGNUM'
17540          This points to the location of dynamically allocated memory on
17541          the stack immediately after the stack pointer has been
17542          adjusted by the amount of memory desired.
17543
17544          This virtual register is replaced by the sum of the register
17545          given by 'STACK_POINTER_REGNUM' and the value
17546          'STACK_DYNAMIC_OFFSET'.
17547
17548     'VIRTUAL_OUTGOING_ARGS_REGNUM'
17549          This points to the location in the stack at which outgoing
17550          arguments should be written when the stack is pre-pushed
17551          (arguments pushed using push insns should always use
17552          'STACK_POINTER_REGNUM').
17553
17554          This virtual register is replaced by the sum of the register
17555          given by 'STACK_POINTER_REGNUM' and the value
17556          'STACK_POINTER_OFFSET'.
17557
17558'(subreg:M1 REG:M2 BYTENUM)'
17559
17560     'subreg' expressions are used to refer to a register in a machine
17561     mode other than its natural one, or to refer to one register of a
17562     multi-part 'reg' that actually refers to several registers.
17563
17564     Each pseudo register has a natural mode.  If it is necessary to
17565     operate on it in a different mode, the register must be enclosed in
17566     a 'subreg'.
17567
17568     There are currently three supported types for the first operand of
17569     a 'subreg':
17570        * pseudo registers This is the most common case.  Most 'subreg's
17571          have pseudo 'reg's as their first operand.
17572
17573        * mem 'subreg's of 'mem' were common in earlier versions of GCC
17574          and are still supported.  During the reload pass these are
17575          replaced by plain 'mem's.  On machines that do not do
17576          instruction scheduling, use of 'subreg's of 'mem' are still
17577          used, but this is no longer recommended.  Such 'subreg's are
17578          considered to be 'register_operand's rather than
17579          'memory_operand's before and during reload.  Because of this,
17580          the scheduling passes cannot properly schedule instructions
17581          with 'subreg's of 'mem', so for machines that do scheduling,
17582          'subreg's of 'mem' should never be used.  To support this, the
17583          combine and recog passes have explicit code to inhibit the
17584          creation of 'subreg's of 'mem' when 'INSN_SCHEDULING' is
17585          defined.
17586
17587          The use of 'subreg's of 'mem' after the reload pass is an area
17588          that is not well understood and should be avoided.  There is
17589          still some code in the compiler to support this, but this code
17590          has possibly rotted.  This use of 'subreg's is discouraged and
17591          will most likely not be supported in the future.
17592
17593        * hard registers It is seldom necessary to wrap hard registers
17594          in 'subreg's; such registers would normally reduce to a single
17595          'reg' rtx.  This use of 'subreg's is discouraged and may not
17596          be supported in the future.
17597
17598     'subreg's of 'subreg's are not supported.  Using
17599     'simplify_gen_subreg' is the recommended way to avoid this problem.
17600
17601     'subreg's come in two distinct flavors, each having its own usage
17602     and rules:
17603
17604     Paradoxical subregs
17605          When M1 is strictly wider than M2, the 'subreg' expression is
17606          called "paradoxical".  The canonical test for this class of
17607          'subreg' is:
17608
17609               paradoxical_subreg_p (M1, M2)
17610
17611          Paradoxical 'subreg's can be used as both lvalues and rvalues.
17612          When used as an lvalue, the low-order bits of the source value
17613          are stored in REG and the high-order bits are discarded.  When
17614          used as an rvalue, the low-order bits of the 'subreg' are
17615          taken from REG while the high-order bits may or may not be
17616          defined.
17617
17618          The high-order bits of rvalues are defined in the following
17619          circumstances:
17620
17621             * 'subreg's of 'mem' When M2 is smaller than a word, the
17622               macro 'LOAD_EXTEND_OP', can control how the high-order
17623               bits are defined.
17624
17625             * 'subreg' of 'reg's The upper bits are defined when
17626               'SUBREG_PROMOTED_VAR_P' is true.
17627               'SUBREG_PROMOTED_UNSIGNED_P' describes what the upper
17628               bits hold.  Such subregs usually represent local
17629               variables, register variables and parameter pseudo
17630               variables that have been promoted to a wider mode.
17631
17632          BYTENUM is always zero for a paradoxical 'subreg', even on
17633          big-endian targets.
17634
17635          For example, the paradoxical 'subreg':
17636
17637               (set (subreg:SI (reg:HI X) 0) Y)
17638
17639          stores the lower 2 bytes of Y in X and discards the upper 2
17640          bytes.  A subsequent:
17641
17642               (set Z (subreg:SI (reg:HI X) 0))
17643
17644          would set the lower two bytes of Z to Y and set the upper two
17645          bytes to an unknown value assuming 'SUBREG_PROMOTED_VAR_P' is
17646          false.
17647
17648     Normal subregs
17649          When M1 is at least as narrow as M2 the 'subreg' expression is
17650          called "normal".
17651
17652          Normal 'subreg's restrict consideration to certain bits of
17653          REG.  For this purpose, REG is divided into
17654          individually-addressable blocks in which each block has:
17655
17656               REGMODE_NATURAL_SIZE (M2)
17657
17658          bytes.  Usually the value is 'UNITS_PER_WORD'; that is, most
17659          targets usually treat each word of a register as being
17660          independently addressable.
17661
17662          There are two types of normal 'subreg'.  If M1 is known to be
17663          no bigger than a block, the 'subreg' refers to the
17664          least-significant part (or "lowpart") of one block of REG.  If
17665          M1 is known to be larger than a block, the 'subreg' refers to
17666          two or more complete blocks.
17667
17668          When used as an lvalue, 'subreg' is a block-based accessor.
17669          Storing to a 'subreg' modifies all the blocks of REG that
17670          overlap the 'subreg', but it leaves the other blocks of REG
17671          alone.
17672
17673          When storing to a normal 'subreg' that is smaller than a
17674          block, the other bits of the referenced block are usually left
17675          in an undefined state.  This laxity makes it easier to
17676          generate efficient code for such instructions.  To represent
17677          an instruction that preserves all the bits outside of those in
17678          the 'subreg', use 'strict_low_part' or 'zero_extract' around
17679          the 'subreg'.
17680
17681          BYTENUM must identify the offset of the first byte of the
17682          'subreg' from the start of REG, assuming that REG is laid out
17683          in memory order.  The memory order of bytes is defined by two
17684          target macros, 'WORDS_BIG_ENDIAN' and 'BYTES_BIG_ENDIAN':
17685
17686             * 'WORDS_BIG_ENDIAN', if set to 1, says that byte number
17687               zero is part of the most significant word; otherwise, it
17688               is part of the least significant word.
17689
17690             * 'BYTES_BIG_ENDIAN', if set to 1, says that byte number
17691               zero is the most significant byte within a word;
17692               otherwise, it is the least significant byte within a
17693               word.
17694
17695          On a few targets, 'FLOAT_WORDS_BIG_ENDIAN' disagrees with
17696          'WORDS_BIG_ENDIAN'.  However, most parts of the compiler treat
17697          floating point values as if they had the same endianness as
17698          integer values.  This works because they handle them solely as
17699          a collection of integer values, with no particular numerical
17700          value.  Only real.c and the runtime libraries care about
17701          'FLOAT_WORDS_BIG_ENDIAN'.
17702
17703          Thus,
17704
17705               (subreg:HI (reg:SI X) 2)
17706
17707          on a 'BYTES_BIG_ENDIAN', 'UNITS_PER_WORD == 4' target is the
17708          same as
17709
17710               (subreg:HI (reg:SI X) 0)
17711
17712          on a little-endian, 'UNITS_PER_WORD == 4' target.  Both
17713          'subreg's access the lower two bytes of register X.
17714
17715          Note that the byte offset is a polynomial integer; it may not
17716          be a compile-time constant on targets with variable-sized
17717          modes.  However, the restrictions above mean that there are
17718          only a certain set of acceptable offsets for a given
17719          combination of M1 and M2.  The compiler can always tell which
17720          blocks a valid subreg occupies, and whether the subreg is a
17721          lowpart of a block.
17722
17723     A 'MODE_PARTIAL_INT' mode behaves as if it were as wide as the
17724     corresponding 'MODE_INT' mode, except that it has an unknown number
17725     of undefined bits.  For example:
17726
17727          (subreg:PSI (reg:SI 0) 0)
17728
17729     accesses the whole of '(reg:SI 0)', but the exact relationship
17730     between the 'PSImode' value and the 'SImode' value is not defined.
17731     If we assume 'REGMODE_NATURAL_SIZE (DImode) <= 4', then the
17732     following two 'subreg's:
17733
17734          (subreg:PSI (reg:DI 0) 0)
17735          (subreg:PSI (reg:DI 0) 4)
17736
17737     represent independent 4-byte accesses to the two halves of '(reg:DI
17738     0)'.  Both 'subreg's have an unknown number of undefined bits.
17739
17740     If 'REGMODE_NATURAL_SIZE (PSImode) <= 2' then these two 'subreg's:
17741
17742          (subreg:HI (reg:PSI 0) 0)
17743          (subreg:HI (reg:PSI 0) 2)
17744
17745     represent independent 2-byte accesses that together span the whole
17746     of '(reg:PSI 0)'.  Storing to the first 'subreg' does not affect
17747     the value of the second, and vice versa.  '(reg:PSI 0)' has an
17748     unknown number of undefined bits, so the assignment:
17749
17750          (set (subreg:HI (reg:PSI 0) 0) (reg:HI 4))
17751
17752     does not guarantee that '(subreg:HI (reg:PSI 0) 0)' has the value
17753     '(reg:HI 4)'.
17754
17755     The rules above apply to both pseudo REGs and hard REGs.  If the
17756     semantics are not correct for particular combinations of M1, M2 and
17757     hard REG, the target-specific code must ensure that those
17758     combinations are never used.  For example:
17759
17760          TARGET_CAN_CHANGE_MODE_CLASS (M2, M1, CLASS)
17761
17762     must be false for every class CLASS that includes REG.
17763
17764     GCC must be able to determine at compile time whether a subreg is
17765     paradoxical, whether it occupies a whole number of blocks, or
17766     whether it is a lowpart of a block.  This means that certain
17767     combinations of variable-sized mode are not permitted.  For
17768     example, if M2 holds N 'SI' values, where N is greater than zero,
17769     it is not possible to form a 'DI' 'subreg' of it; such a 'subreg'
17770     would be paradoxical when N is 1 but not when N is greater than 1.
17771
17772     The first operand of a 'subreg' expression is customarily accessed
17773     with the 'SUBREG_REG' macro and the second operand is customarily
17774     accessed with the 'SUBREG_BYTE' macro.
17775
17776     It has been several years since a platform in which
17777     'BYTES_BIG_ENDIAN' not equal to 'WORDS_BIG_ENDIAN' has been tested.
17778     Anyone wishing to support such a platform in the future may be
17779     confronted with code rot.
17780
17781'(scratch:M)'
17782     This represents a scratch register that will be required for the
17783     execution of a single instruction and not used subsequently.  It is
17784     converted into a 'reg' by either the local register allocator or
17785     the reload pass.
17786
17787     'scratch' is usually present inside a 'clobber' operation (*note
17788     Side Effects::).
17789
17790'(cc0)'
17791     This refers to the machine's condition code register.  It has no
17792     operands and may not have a machine mode.  There are two ways to
17793     use it:
17794
17795        * To stand for a complete set of condition code flags.  This is
17796          best on most machines, where each comparison sets the entire
17797          series of flags.
17798
17799          With this technique, '(cc0)' may be validly used in only two
17800          contexts: as the destination of an assignment (in test and
17801          compare instructions) and in comparison operators comparing
17802          against zero ('const_int' with value zero; that is to say,
17803          'const0_rtx').
17804
17805        * To stand for a single flag that is the result of a single
17806          condition.  This is useful on machines that have only a single
17807          flag bit, and in which comparison instructions must specify
17808          the condition to test.
17809
17810          With this technique, '(cc0)' may be validly used in only two
17811          contexts: as the destination of an assignment (in test and
17812          compare instructions) where the source is a comparison
17813          operator, and as the first operand of 'if_then_else' (in a
17814          conditional branch).
17815
17816     There is only one expression object of code 'cc0'; it is the value
17817     of the variable 'cc0_rtx'.  Any attempt to create an expression of
17818     code 'cc0' will return 'cc0_rtx'.
17819
17820     Instructions can set the condition code implicitly.  On many
17821     machines, nearly all instructions set the condition code based on
17822     the value that they compute or store.  It is not necessary to
17823     record these actions explicitly in the RTL because the machine
17824     description includes a prescription for recognizing the
17825     instructions that do so (by means of the macro 'NOTICE_UPDATE_CC').
17826     *Note Condition Code::.  Only instructions whose sole purpose is to
17827     set the condition code, and instructions that use the condition
17828     code, need mention '(cc0)'.
17829
17830     On some machines, the condition code register is given a register
17831     number and a 'reg' is used instead of '(cc0)'.  This is usually the
17832     preferable approach if only a small subset of instructions modify
17833     the condition code.  Other machines store condition codes in
17834     general registers; in such cases a pseudo register should be used.
17835
17836     Some machines, such as the SPARC and RS/6000, have two sets of
17837     arithmetic instructions, one that sets and one that does not set
17838     the condition code.  This is best handled by normally generating
17839     the instruction that does not set the condition code, and making a
17840     pattern that both performs the arithmetic and sets the condition
17841     code register (which would not be '(cc0)' in this case).  For
17842     examples, search for 'addcc' and 'andcc' in 'sparc.md'.
17843
17844'(pc)'
17845     This represents the machine's program counter.  It has no operands
17846     and may not have a machine mode.  '(pc)' may be validly used only
17847     in certain specific contexts in jump instructions.
17848
17849     There is only one expression object of code 'pc'; it is the value
17850     of the variable 'pc_rtx'.  Any attempt to create an expression of
17851     code 'pc' will return 'pc_rtx'.
17852
17853     All instructions that do not jump alter the program counter
17854     implicitly by incrementing it, but there is no need to mention this
17855     in the RTL.
17856
17857'(mem:M ADDR ALIAS)'
17858     This RTX represents a reference to main memory at an address
17859     represented by the expression ADDR.  M specifies how large a unit
17860     of memory is accessed.  ALIAS specifies an alias set for the
17861     reference.  In general two items are in different alias sets if
17862     they cannot reference the same memory address.
17863
17864     The construct '(mem:BLK (scratch))' is considered to alias all
17865     other memories.  Thus it may be used as a memory barrier in
17866     epilogue stack deallocation patterns.
17867
17868'(concatM RTX RTX)'
17869     This RTX represents the concatenation of two other RTXs.  This is
17870     used for complex values.  It should only appear in the RTL attached
17871     to declarations and during RTL generation.  It should not appear in
17872     the ordinary insn chain.
17873
17874'(concatnM [RTX ...])'
17875     This RTX represents the concatenation of all the RTX to make a
17876     single value.  Like 'concat', this should only appear in
17877     declarations, and not in the insn chain.
17878
17879
17880File: gccint.info,  Node: Arithmetic,  Next: Comparisons,  Prev: Regs and Memory,  Up: RTL
17881
1788214.9 RTL Expressions for Arithmetic
17883===================================
17884
17885Unless otherwise specified, all the operands of arithmetic expressions
17886must be valid for mode M.  An operand is valid for mode M if it has mode
17887M, or if it is a 'const_int' or 'const_double' and M is a mode of class
17888'MODE_INT'.
17889
17890 For commutative binary operations, constants should be placed in the
17891second operand.
17892
17893'(plus:M X Y)'
17894'(ss_plus:M X Y)'
17895'(us_plus:M X Y)'
17896
17897     These three expressions all represent the sum of the values
17898     represented by X and Y carried out in machine mode M.  They differ
17899     in their behavior on overflow of integer modes.  'plus' wraps round
17900     modulo the width of M; 'ss_plus' saturates at the maximum signed
17901     value representable in M; 'us_plus' saturates at the maximum
17902     unsigned value.
17903
17904'(lo_sum:M X Y)'
17905
17906     This expression represents the sum of X and the low-order bits of
17907     Y.  It is used with 'high' (*note Constants::) to represent the
17908     typical two-instruction sequence used in RISC machines to reference
17909     large immediate values and/or link-time constants such as global
17910     memory addresses.  In the latter case, M is 'Pmode' and Y is
17911     usually a constant expression involving 'symbol_ref'.
17912
17913     The number of low order bits is machine-dependent but is normally
17914     the number of bits in mode M minus the number of bits set by
17915     'high'.
17916
17917'(minus:M X Y)'
17918'(ss_minus:M X Y)'
17919'(us_minus:M X Y)'
17920
17921     These three expressions represent the result of subtracting Y from
17922     X, carried out in mode M.  Behavior on overflow is the same as for
17923     the three variants of 'plus' (see above).
17924
17925'(compare:M X Y)'
17926     Represents the result of subtracting Y from X for purposes of
17927     comparison.  The result is computed without overflow, as if with
17928     infinite precision.
17929
17930     Of course, machines cannot really subtract with infinite precision.
17931     However, they can pretend to do so when only the sign of the result
17932     will be used, which is the case when the result is stored in the
17933     condition code.  And that is the _only_ way this kind of expression
17934     may validly be used: as a value to be stored in the condition
17935     codes, either '(cc0)' or a register.  *Note Comparisons::.
17936
17937     The mode M is not related to the modes of X and Y, but instead is
17938     the mode of the condition code value.  If '(cc0)' is used, it is
17939     'VOIDmode'.  Otherwise it is some mode in class 'MODE_CC', often
17940     'CCmode'.  *Note Condition Code::.  If M is 'VOIDmode' or 'CCmode',
17941     the operation returns sufficient information (in an unspecified
17942     format) so that any comparison operator can be applied to the
17943     result of the 'COMPARE' operation.  For other modes in class
17944     'MODE_CC', the operation only returns a subset of this information.
17945
17946     Normally, X and Y must have the same mode.  Otherwise, 'compare' is
17947     valid only if the mode of X is in class 'MODE_INT' and Y is a
17948     'const_int' or 'const_double' with mode 'VOIDmode'.  The mode of X
17949     determines what mode the comparison is to be done in; thus it must
17950     not be 'VOIDmode'.
17951
17952     If one of the operands is a constant, it should be placed in the
17953     second operand and the comparison code adjusted as appropriate.
17954
17955     A 'compare' specifying two 'VOIDmode' constants is not valid since
17956     there is no way to know in what mode the comparison is to be
17957     performed; the comparison must either be folded during the
17958     compilation or the first operand must be loaded into a register
17959     while its mode is still known.
17960
17961'(neg:M X)'
17962'(ss_neg:M X)'
17963'(us_neg:M X)'
17964     These two expressions represent the negation (subtraction from
17965     zero) of the value represented by X, carried out in mode M.  They
17966     differ in the behavior on overflow of integer modes.  In the case
17967     of 'neg', the negation of the operand may be a number not
17968     representable in mode M, in which case it is truncated to M.
17969     'ss_neg' and 'us_neg' ensure that an out-of-bounds result saturates
17970     to the maximum or minimum signed or unsigned value.
17971
17972'(mult:M X Y)'
17973'(ss_mult:M X Y)'
17974'(us_mult:M X Y)'
17975     Represents the signed product of the values represented by X and Y
17976     carried out in machine mode M.  'ss_mult' and 'us_mult' ensure that
17977     an out-of-bounds result saturates to the maximum or minimum signed
17978     or unsigned value.
17979
17980     Some machines support a multiplication that generates a product
17981     wider than the operands.  Write the pattern for this as
17982
17983          (mult:M (sign_extend:M X) (sign_extend:M Y))
17984
17985     where M is wider than the modes of X and Y, which need not be the
17986     same.
17987
17988     For unsigned widening multiplication, use the same idiom, but with
17989     'zero_extend' instead of 'sign_extend'.
17990
17991'(fma:M X Y Z)'
17992     Represents the 'fma', 'fmaf', and 'fmal' builtin functions, which
17993     compute 'X * Y + Z' without doing an intermediate rounding step.
17994
17995'(div:M X Y)'
17996'(ss_div:M X Y)'
17997     Represents the quotient in signed division of X by Y, carried out
17998     in machine mode M.  If M is a floating point mode, it represents
17999     the exact quotient; otherwise, the integerized quotient.  'ss_div'
18000     ensures that an out-of-bounds result saturates to the maximum or
18001     minimum signed value.
18002
18003     Some machines have division instructions in which the operands and
18004     quotient widths are not all the same; you should represent such
18005     instructions using 'truncate' and 'sign_extend' as in,
18006
18007          (truncate:M1 (div:M2 X (sign_extend:M2 Y)))
18008
18009'(udiv:M X Y)'
18010'(us_div:M X Y)'
18011     Like 'div' but represents unsigned division.  'us_div' ensures that
18012     an out-of-bounds result saturates to the maximum or minimum
18013     unsigned value.
18014
18015'(mod:M X Y)'
18016'(umod:M X Y)'
18017     Like 'div' and 'udiv' but represent the remainder instead of the
18018     quotient.
18019
18020'(smin:M X Y)'
18021'(smax:M X Y)'
18022     Represents the smaller (for 'smin') or larger (for 'smax') of X and
18023     Y, interpreted as signed values in mode M.  When used with floating
18024     point, if both operands are zeros, or if either operand is 'NaN',
18025     then it is unspecified which of the two operands is returned as the
18026     result.
18027
18028'(umin:M X Y)'
18029'(umax:M X Y)'
18030     Like 'smin' and 'smax', but the values are interpreted as unsigned
18031     integers.
18032
18033'(not:M X)'
18034     Represents the bitwise complement of the value represented by X,
18035     carried out in mode M, which must be a fixed-point machine mode.
18036
18037'(and:M X Y)'
18038     Represents the bitwise logical-and of the values represented by X
18039     and Y, carried out in machine mode M, which must be a fixed-point
18040     machine mode.
18041
18042'(ior:M X Y)'
18043     Represents the bitwise inclusive-or of the values represented by X
18044     and Y, carried out in machine mode M, which must be a fixed-point
18045     mode.
18046
18047'(xor:M X Y)'
18048     Represents the bitwise exclusive-or of the values represented by X
18049     and Y, carried out in machine mode M, which must be a fixed-point
18050     mode.
18051
18052'(ashift:M X C)'
18053'(ss_ashift:M X C)'
18054'(us_ashift:M X C)'
18055     These three expressions represent the result of arithmetically
18056     shifting X left by C places.  They differ in their behavior on
18057     overflow of integer modes.  An 'ashift' operation is a plain shift
18058     with no special behavior in case of a change in the sign bit;
18059     'ss_ashift' and 'us_ashift' saturates to the minimum or maximum
18060     representable value if any of the bits shifted out differs from the
18061     final sign bit.
18062
18063     X have mode M, a fixed-point machine mode.  C be a fixed-point mode
18064     or be a constant with mode 'VOIDmode'; which mode is determined by
18065     the mode called for in the machine description entry for the
18066     left-shift instruction.  For example, on the VAX, the mode of C is
18067     'QImode' regardless of M.
18068
18069'(lshiftrt:M X C)'
18070'(ashiftrt:M X C)'
18071     Like 'ashift' but for right shift.  Unlike the case for left shift,
18072     these two operations are distinct.
18073
18074'(rotate:M X C)'
18075'(rotatert:M X C)'
18076     Similar but represent left and right rotate.  If C is a constant,
18077     use 'rotate'.
18078
18079'(abs:M X)'
18080'(ss_abs:M X)'
18081     Represents the absolute value of X, computed in mode M.  'ss_abs'
18082     ensures that an out-of-bounds result saturates to the maximum
18083     signed value.
18084
18085'(sqrt:M X)'
18086     Represents the square root of X, computed in mode M.  Most often M
18087     will be a floating point mode.
18088
18089'(ffs:M X)'
18090     Represents one plus the index of the least significant 1-bit in X,
18091     represented as an integer of mode M.  (The value is zero if X is
18092     zero.)  The mode of X must be M or 'VOIDmode'.
18093
18094'(clrsb:M X)'
18095     Represents the number of redundant leading sign bits in X,
18096     represented as an integer of mode M, starting at the most
18097     significant bit position.  This is one less than the number of
18098     leading sign bits (either 0 or 1), with no special cases.  The mode
18099     of X must be M or 'VOIDmode'.
18100
18101'(clz:M X)'
18102     Represents the number of leading 0-bits in X, represented as an
18103     integer of mode M, starting at the most significant bit position.
18104     If X is zero, the value is determined by
18105     'CLZ_DEFINED_VALUE_AT_ZERO' (*note Misc::).  Note that this is one
18106     of the few expressions that is not invariant under widening.  The
18107     mode of X must be M or 'VOIDmode'.
18108
18109'(ctz:M X)'
18110     Represents the number of trailing 0-bits in X, represented as an
18111     integer of mode M, starting at the least significant bit position.
18112     If X is zero, the value is determined by
18113     'CTZ_DEFINED_VALUE_AT_ZERO' (*note Misc::).  Except for this case,
18114     'ctz(x)' is equivalent to 'ffs(X) - 1'.  The mode of X must be M or
18115     'VOIDmode'.
18116
18117'(popcount:M X)'
18118     Represents the number of 1-bits in X, represented as an integer of
18119     mode M.  The mode of X must be M or 'VOIDmode'.
18120
18121'(parity:M X)'
18122     Represents the number of 1-bits modulo 2 in X, represented as an
18123     integer of mode M.  The mode of X must be M or 'VOIDmode'.
18124
18125'(bswap:M X)'
18126     Represents the value X with the order of bytes reversed, carried
18127     out in mode M, which must be a fixed-point machine mode.  The mode
18128     of X must be M or 'VOIDmode'.
18129
18130
18131File: gccint.info,  Node: Comparisons,  Next: Bit-Fields,  Prev: Arithmetic,  Up: RTL
18132
1813314.10 Comparison Operations
18134===========================
18135
18136Comparison operators test a relation on two operands and are considered
18137to represent a machine-dependent nonzero value described by, but not
18138necessarily equal to, 'STORE_FLAG_VALUE' (*note Misc::) if the relation
18139holds, or zero if it does not, for comparison operators whose results
18140have a 'MODE_INT' mode, 'FLOAT_STORE_FLAG_VALUE' (*note Misc::) if the
18141relation holds, or zero if it does not, for comparison operators that
18142return floating-point values, and a vector of either
18143'VECTOR_STORE_FLAG_VALUE' (*note Misc::) if the relation holds, or of
18144zeros if it does not, for comparison operators that return vector
18145results.  The mode of the comparison operation is independent of the
18146mode of the data being compared.  If the comparison operation is being
18147tested (e.g., the first operand of an 'if_then_else'), the mode must be
18148'VOIDmode'.
18149
18150 There are two ways that comparison operations may be used.  The
18151comparison operators may be used to compare the condition codes '(cc0)'
18152against zero, as in '(eq (cc0) (const_int 0))'.  Such a construct
18153actually refers to the result of the preceding instruction in which the
18154condition codes were set.  The instruction setting the condition code
18155must be adjacent to the instruction using the condition code; only
18156'note' insns may separate them.
18157
18158 Alternatively, a comparison operation may directly compare two data
18159objects.  The mode of the comparison is determined by the operands; they
18160must both be valid for a common machine mode.  A comparison with both
18161operands constant would be invalid as the machine mode could not be
18162deduced from it, but such a comparison should never exist in RTL due to
18163constant folding.
18164
18165 In the example above, if '(cc0)' were last set to '(compare X Y)', the
18166comparison operation is identical to '(eq X Y)'.  Usually only one style
18167of comparisons is supported on a particular machine, but the combine
18168pass will try to merge the operations to produce the 'eq' shown in case
18169it exists in the context of the particular insn involved.
18170
18171 Inequality comparisons come in two flavors, signed and unsigned.  Thus,
18172there are distinct expression codes 'gt' and 'gtu' for signed and
18173unsigned greater-than.  These can produce different results for the same
18174pair of integer values: for example, 1 is signed greater-than -1 but not
18175unsigned greater-than, because -1 when regarded as unsigned is actually
18176'0xffffffff' which is greater than 1.
18177
18178 The signed comparisons are also used for floating point values.
18179Floating point comparisons are distinguished by the machine modes of the
18180operands.
18181
18182'(eq:M X Y)'
18183     'STORE_FLAG_VALUE' if the values represented by X and Y are equal,
18184     otherwise 0.
18185
18186'(ne:M X Y)'
18187     'STORE_FLAG_VALUE' if the values represented by X and Y are not
18188     equal, otherwise 0.
18189
18190'(gt:M X Y)'
18191     'STORE_FLAG_VALUE' if the X is greater than Y.  If they are
18192     fixed-point, the comparison is done in a signed sense.
18193
18194'(gtu:M X Y)'
18195     Like 'gt' but does unsigned comparison, on fixed-point numbers
18196     only.
18197
18198'(lt:M X Y)'
18199'(ltu:M X Y)'
18200     Like 'gt' and 'gtu' but test for "less than".
18201
18202'(ge:M X Y)'
18203'(geu:M X Y)'
18204     Like 'gt' and 'gtu' but test for "greater than or equal".
18205
18206'(le:M X Y)'
18207'(leu:M X Y)'
18208     Like 'gt' and 'gtu' but test for "less than or equal".
18209
18210'(if_then_else COND THEN ELSE)'
18211     This is not a comparison operation but is listed here because it is
18212     always used in conjunction with a comparison operation.  To be
18213     precise, COND is a comparison expression.  This expression
18214     represents a choice, according to COND, between the value
18215     represented by THEN and the one represented by ELSE.
18216
18217     On most machines, 'if_then_else' expressions are valid only to
18218     express conditional jumps.
18219
18220'(cond [TEST1 VALUE1 TEST2 VALUE2 ...] DEFAULT)'
18221     Similar to 'if_then_else', but more general.  Each of TEST1, TEST2,
18222     ... is performed in turn.  The result of this expression is the
18223     VALUE corresponding to the first nonzero test, or DEFAULT if none
18224     of the tests are nonzero expressions.
18225
18226     This is currently not valid for instruction patterns and is
18227     supported only for insn attributes.  *Note Insn Attributes::.
18228
18229
18230File: gccint.info,  Node: Bit-Fields,  Next: Vector Operations,  Prev: Comparisons,  Up: RTL
18231
1823214.11 Bit-Fields
18233================
18234
18235Special expression codes exist to represent bit-field instructions.
18236
18237'(sign_extract:M LOC SIZE POS)'
18238     This represents a reference to a sign-extended bit-field contained
18239     or starting in LOC (a memory or register reference).  The bit-field
18240     is SIZE bits wide and starts at bit POS.  The compilation option
18241     'BITS_BIG_ENDIAN' says which end of the memory unit POS counts
18242     from.
18243
18244     If LOC is in memory, its mode must be a single-byte integer mode.
18245     If LOC is in a register, the mode to use is specified by the
18246     operand of the 'insv' or 'extv' pattern (*note Standard Names::)
18247     and is usually a full-word integer mode, which is the default if
18248     none is specified.
18249
18250     The mode of POS is machine-specific and is also specified in the
18251     'insv' or 'extv' pattern.
18252
18253     The mode M is the same as the mode that would be used for LOC if it
18254     were a register.
18255
18256     A 'sign_extract' cannot appear as an lvalue, or part thereof, in
18257     RTL.
18258
18259'(zero_extract:M LOC SIZE POS)'
18260     Like 'sign_extract' but refers to an unsigned or zero-extended
18261     bit-field.  The same sequence of bits are extracted, but they are
18262     filled to an entire word with zeros instead of by sign-extension.
18263
18264     Unlike 'sign_extract', this type of expressions can be lvalues in
18265     RTL; they may appear on the left side of an assignment, indicating
18266     insertion of a value into the specified bit-field.
18267
18268
18269File: gccint.info,  Node: Vector Operations,  Next: Conversions,  Prev: Bit-Fields,  Up: RTL
18270
1827114.12 Vector Operations
18272=======================
18273
18274All normal RTL expressions can be used with vector modes; they are
18275interpreted as operating on each part of the vector independently.
18276Additionally, there are a few new expressions to describe specific
18277vector operations.
18278
18279'(vec_merge:M VEC1 VEC2 ITEMS)'
18280     This describes a merge operation between two vectors.  The result
18281     is a vector of mode M; its elements are selected from either VEC1
18282     or VEC2.  Which elements are selected is described by ITEMS, which
18283     is a bit mask represented by a 'const_int'; a zero bit indicates
18284     the corresponding element in the result vector is taken from VEC2
18285     while a set bit indicates it is taken from VEC1.
18286
18287'(vec_select:M VEC1 SELECTION)'
18288     This describes an operation that selects parts of a vector.  VEC1
18289     is the source vector, and SELECTION is a 'parallel' that contains a
18290     'const_int' (or another expression, if the selection can be made at
18291     runtime) for each of the subparts of the result vector, giving the
18292     number of the source subpart that should be stored into it.  The
18293     result mode M is either the submode for a single element of VEC1
18294     (if only one subpart is selected), or another vector mode with that
18295     element submode (if multiple subparts are selected).
18296
18297'(vec_concat:M X1 X2)'
18298     Describes a vector concat operation.  The result is a concatenation
18299     of the vectors or scalars X1 and X2; its length is the sum of the
18300     lengths of the two inputs.
18301
18302'(vec_duplicate:M X)'
18303     This operation converts a scalar into a vector or a small vector
18304     into a larger one by duplicating the input values.  The output
18305     vector mode must have the same submodes as the input vector mode or
18306     the scalar modes, and the number of output parts must be an integer
18307     multiple of the number of input parts.
18308
18309'(vec_series:M BASE STEP)'
18310     This operation creates a vector in which element I is equal to
18311     'BASE + I*STEP'.  M must be a vector integer mode.
18312
18313
18314File: gccint.info,  Node: Conversions,  Next: RTL Declarations,  Prev: Vector Operations,  Up: RTL
18315
1831614.13 Conversions
18317=================
18318
18319All conversions between machine modes must be represented by explicit
18320conversion operations.  For example, an expression which is the sum of a
18321byte and a full word cannot be written as '(plus:SI (reg:QI 34) (reg:SI
1832280))' because the 'plus' operation requires two operands of the same
18323machine mode.  Therefore, the byte-sized operand is enclosed in a
18324conversion operation, as in
18325
18326     (plus:SI (sign_extend:SI (reg:QI 34)) (reg:SI 80))
18327
18328 The conversion operation is not a mere placeholder, because there may
18329be more than one way of converting from a given starting mode to the
18330desired final mode.  The conversion operation code says how to do it.
18331
18332 For all conversion operations, X must not be 'VOIDmode' because the
18333mode in which to do the conversion would not be known.  The conversion
18334must either be done at compile-time or X must be placed into a register.
18335
18336'(sign_extend:M X)'
18337     Represents the result of sign-extending the value X to machine mode
18338     M.  M must be a fixed-point mode and X a fixed-point value of a
18339     mode narrower than M.
18340
18341'(zero_extend:M X)'
18342     Represents the result of zero-extending the value X to machine mode
18343     M.  M must be a fixed-point mode and X a fixed-point value of a
18344     mode narrower than M.
18345
18346'(float_extend:M X)'
18347     Represents the result of extending the value X to machine mode M.
18348     M must be a floating point mode and X a floating point value of a
18349     mode narrower than M.
18350
18351'(truncate:M X)'
18352     Represents the result of truncating the value X to machine mode M.
18353     M must be a fixed-point mode and X a fixed-point value of a mode
18354     wider than M.
18355
18356'(ss_truncate:M X)'
18357     Represents the result of truncating the value X to machine mode M,
18358     using signed saturation in the case of overflow.  Both M and the
18359     mode of X must be fixed-point modes.
18360
18361'(us_truncate:M X)'
18362     Represents the result of truncating the value X to machine mode M,
18363     using unsigned saturation in the case of overflow.  Both M and the
18364     mode of X must be fixed-point modes.
18365
18366'(float_truncate:M X)'
18367     Represents the result of truncating the value X to machine mode M.
18368     M must be a floating point mode and X a floating point value of a
18369     mode wider than M.
18370
18371'(float:M X)'
18372     Represents the result of converting fixed point value X, regarded
18373     as signed, to floating point mode M.
18374
18375'(unsigned_float:M X)'
18376     Represents the result of converting fixed point value X, regarded
18377     as unsigned, to floating point mode M.
18378
18379'(fix:M X)'
18380     When M is a floating-point mode, represents the result of
18381     converting floating point value X (valid for mode M) to an integer,
18382     still represented in floating point mode M, by rounding towards
18383     zero.
18384
18385     When M is a fixed-point mode, represents the result of converting
18386     floating point value X to mode M, regarded as signed.  How rounding
18387     is done is not specified, so this operation may be used validly in
18388     compiling C code only for integer-valued operands.
18389
18390'(unsigned_fix:M X)'
18391     Represents the result of converting floating point value X to fixed
18392     point mode M, regarded as unsigned.  How rounding is done is not
18393     specified.
18394
18395'(fract_convert:M X)'
18396     Represents the result of converting fixed-point value X to
18397     fixed-point mode M, signed integer value X to fixed-point mode M,
18398     floating-point value X to fixed-point mode M, fixed-point value X
18399     to integer mode M regarded as signed, or fixed-point value X to
18400     floating-point mode M.  When overflows or underflows happen, the
18401     results are undefined.
18402
18403'(sat_fract:M X)'
18404     Represents the result of converting fixed-point value X to
18405     fixed-point mode M, signed integer value X to fixed-point mode M,
18406     or floating-point value X to fixed-point mode M.  When overflows or
18407     underflows happen, the results are saturated to the maximum or the
18408     minimum.
18409
18410'(unsigned_fract_convert:M X)'
18411     Represents the result of converting fixed-point value X to integer
18412     mode M regarded as unsigned, or unsigned integer value X to
18413     fixed-point mode M.  When overflows or underflows happen, the
18414     results are undefined.
18415
18416'(unsigned_sat_fract:M X)'
18417     Represents the result of converting unsigned integer value X to
18418     fixed-point mode M.  When overflows or underflows happen, the
18419     results are saturated to the maximum or the minimum.
18420
18421
18422File: gccint.info,  Node: RTL Declarations,  Next: Side Effects,  Prev: Conversions,  Up: RTL
18423
1842414.14 Declarations
18425==================
18426
18427Declaration expression codes do not represent arithmetic operations but
18428rather state assertions about their operands.
18429
18430'(strict_low_part (subreg:M (reg:N R) 0))'
18431     This expression code is used in only one context: as the
18432     destination operand of a 'set' expression.  In addition, the
18433     operand of this expression must be a non-paradoxical 'subreg'
18434     expression.
18435
18436     The presence of 'strict_low_part' says that the part of the
18437     register which is meaningful in mode N, but is not part of mode M,
18438     is not to be altered.  Normally, an assignment to such a subreg is
18439     allowed to have undefined effects on the rest of the register when
18440     M is smaller than 'REGMODE_NATURAL_SIZE (N)'.
18441
18442
18443File: gccint.info,  Node: Side Effects,  Next: Incdec,  Prev: RTL Declarations,  Up: RTL
18444
1844514.15 Side Effect Expressions
18446=============================
18447
18448The expression codes described so far represent values, not actions.
18449But machine instructions never produce values; they are meaningful only
18450for their side effects on the state of the machine.  Special expression
18451codes are used to represent side effects.
18452
18453 The body of an instruction is always one of these side effect codes;
18454the codes described above, which represent values, appear only as the
18455operands of these.
18456
18457'(set LVAL X)'
18458     Represents the action of storing the value of X into the place
18459     represented by LVAL.  LVAL must be an expression representing a
18460     place that can be stored in: 'reg' (or 'subreg', 'strict_low_part'
18461     or 'zero_extract'), 'mem', 'pc', 'parallel', or 'cc0'.
18462
18463     If LVAL is a 'reg', 'subreg' or 'mem', it has a machine mode; then
18464     X must be valid for that mode.
18465
18466     If LVAL is a 'reg' whose machine mode is less than the full width
18467     of the register, then it means that the part of the register
18468     specified by the machine mode is given the specified value and the
18469     rest of the register receives an undefined value.  Likewise, if
18470     LVAL is a 'subreg' whose machine mode is narrower than the mode of
18471     the register, the rest of the register can be changed in an
18472     undefined way.
18473
18474     If LVAL is a 'strict_low_part' of a subreg, then the part of the
18475     register specified by the machine mode of the 'subreg' is given the
18476     value X and the rest of the register is not changed.
18477
18478     If LVAL is a 'zero_extract', then the referenced part of the
18479     bit-field (a memory or register reference) specified by the
18480     'zero_extract' is given the value X and the rest of the bit-field
18481     is not changed.  Note that 'sign_extract' cannot appear in LVAL.
18482
18483     If LVAL is '(cc0)', it has no machine mode, and X may be either a
18484     'compare' expression or a value that may have any mode.  The latter
18485     case represents a "test" instruction.  The expression '(set (cc0)
18486     (reg:M N))' is equivalent to '(set (cc0) (compare (reg:M N)
18487     (const_int 0)))'.  Use the former expression to save space during
18488     the compilation.
18489
18490     If LVAL is a 'parallel', it is used to represent the case of a
18491     function returning a structure in multiple registers.  Each element
18492     of the 'parallel' is an 'expr_list' whose first operand is a 'reg'
18493     and whose second operand is a 'const_int' representing the offset
18494     (in bytes) into the structure at which the data in that register
18495     corresponds.  The first element may be null to indicate that the
18496     structure is also passed partly in memory.
18497
18498     If LVAL is '(pc)', we have a jump instruction, and the
18499     possibilities for X are very limited.  It may be a 'label_ref'
18500     expression (unconditional jump).  It may be an 'if_then_else'
18501     (conditional jump), in which case either the second or the third
18502     operand must be '(pc)' (for the case which does not jump) and the
18503     other of the two must be a 'label_ref' (for the case which does
18504     jump).  X may also be a 'mem' or '(plus:SI (pc) Y)', where Y may be
18505     a 'reg' or a 'mem'; these unusual patterns are used to represent
18506     jumps through branch tables.
18507
18508     If LVAL is neither '(cc0)' nor '(pc)', the mode of LVAL must not be
18509     'VOIDmode' and the mode of X must be valid for the mode of LVAL.
18510
18511     LVAL is customarily accessed with the 'SET_DEST' macro and X with
18512     the 'SET_SRC' macro.
18513
18514'(return)'
18515     As the sole expression in a pattern, represents a return from the
18516     current function, on machines where this can be done with one
18517     instruction, such as VAXen.  On machines where a multi-instruction
18518     "epilogue" must be executed in order to return from the function,
18519     returning is done by jumping to a label which precedes the
18520     epilogue, and the 'return' expression code is never used.
18521
18522     Inside an 'if_then_else' expression, represents the value to be
18523     placed in 'pc' to return to the caller.
18524
18525     Note that an insn pattern of '(return)' is logically equivalent to
18526     '(set (pc) (return))', but the latter form is never used.
18527
18528'(simple_return)'
18529     Like '(return)', but truly represents only a function return, while
18530     '(return)' may represent an insn that also performs other functions
18531     of the function epilogue.  Like '(return)', this may also occur in
18532     conditional jumps.
18533
18534'(call FUNCTION NARGS)'
18535     Represents a function call.  FUNCTION is a 'mem' expression whose
18536     address is the address of the function to be called.  NARGS is an
18537     expression which can be used for two purposes: on some machines it
18538     represents the number of bytes of stack argument; on others, it
18539     represents the number of argument registers.
18540
18541     Each machine has a standard machine mode which FUNCTION must have.
18542     The machine description defines macro 'FUNCTION_MODE' to expand
18543     into the requisite mode name.  The purpose of this mode is to
18544     specify what kind of addressing is allowed, on machines where the
18545     allowed kinds of addressing depend on the machine mode being
18546     addressed.
18547
18548'(clobber X)'
18549     Represents the storing or possible storing of an unpredictable,
18550     undescribed value into X, which must be a 'reg', 'scratch',
18551     'parallel' or 'mem' expression.
18552
18553     One place this is used is in string instructions that store
18554     standard values into particular hard registers.  It may not be
18555     worth the trouble to describe the values that are stored, but it is
18556     essential to inform the compiler that the registers will be
18557     altered, lest it attempt to keep data in them across the string
18558     instruction.
18559
18560     If X is '(mem:BLK (const_int 0))' or '(mem:BLK (scratch))', it
18561     means that all memory locations must be presumed clobbered.  If X
18562     is a 'parallel', it has the same meaning as a 'parallel' in a 'set'
18563     expression.
18564
18565     Note that the machine description classifies certain hard registers
18566     as "call-clobbered".  All function call instructions are assumed by
18567     default to clobber these registers, so there is no need to use
18568     'clobber' expressions to indicate this fact.  Also, each function
18569     call is assumed to have the potential to alter any memory location,
18570     unless the function is declared 'const'.
18571
18572     If the last group of expressions in a 'parallel' are each a
18573     'clobber' expression whose arguments are 'reg' or 'match_scratch'
18574     (*note RTL Template::) expressions, the combiner phase can add the
18575     appropriate 'clobber' expressions to an insn it has constructed
18576     when doing so will cause a pattern to be matched.
18577
18578     This feature can be used, for example, on a machine that whose
18579     multiply and add instructions don't use an MQ register but which
18580     has an add-accumulate instruction that does clobber the MQ
18581     register.  Similarly, a combined instruction might require a
18582     temporary register while the constituent instructions might not.
18583
18584     When a 'clobber' expression for a register appears inside a
18585     'parallel' with other side effects, the register allocator
18586     guarantees that the register is unoccupied both before and after
18587     that insn if it is a hard register clobber.  For pseudo-register
18588     clobber, the register allocator and the reload pass do not assign
18589     the same hard register to the clobber and the input operands if
18590     there is an insn alternative containing the '&' constraint (*note
18591     Modifiers::) for the clobber and the hard register is in register
18592     classes of the clobber in the alternative.  You can clobber either
18593     a specific hard register, a pseudo register, or a 'scratch'
18594     expression; in the latter two cases, GCC will allocate a hard
18595     register that is available there for use as a temporary.
18596
18597     For instructions that require a temporary register, you should use
18598     'scratch' instead of a pseudo-register because this will allow the
18599     combiner phase to add the 'clobber' when required.  You do this by
18600     coding ('clobber' ('match_scratch' ...)).  If you do clobber a
18601     pseudo register, use one which appears nowhere else--generate a new
18602     one each time.  Otherwise, you may confuse CSE.
18603
18604     There is one other known use for clobbering a pseudo register in a
18605     'parallel': when one of the input operands of the insn is also
18606     clobbered by the insn.  In this case, using the same pseudo
18607     register in the clobber and elsewhere in the insn produces the
18608     expected results.
18609
18610'(use X)'
18611     Represents the use of the value of X.  It indicates that the value
18612     in X at this point in the program is needed, even though it may not
18613     be apparent why this is so.  Therefore, the compiler will not
18614     attempt to delete previous instructions whose only effect is to
18615     store a value in X.  X must be a 'reg' expression.
18616
18617     In some situations, it may be tempting to add a 'use' of a register
18618     in a 'parallel' to describe a situation where the value of a
18619     special register will modify the behavior of the instruction.  A
18620     hypothetical example might be a pattern for an addition that can
18621     either wrap around or use saturating addition depending on the
18622     value of a special control register:
18623
18624          (parallel [(set (reg:SI 2) (unspec:SI [(reg:SI 3)
18625                                                 (reg:SI 4)] 0))
18626                     (use (reg:SI 1))])
18627
18628     This will not work, several of the optimizers only look at
18629     expressions locally; it is very likely that if you have multiple
18630     insns with identical inputs to the 'unspec', they will be optimized
18631     away even if register 1 changes in between.
18632
18633     This means that 'use' can _only_ be used to describe that the
18634     register is live.  You should think twice before adding 'use'
18635     statements, more often you will want to use 'unspec' instead.  The
18636     'use' RTX is most commonly useful to describe that a fixed register
18637     is implicitly used in an insn.  It is also safe to use in patterns
18638     where the compiler knows for other reasons that the result of the
18639     whole pattern is variable, such as 'cpymemM' or 'call' patterns.
18640
18641     During the reload phase, an insn that has a 'use' as pattern can
18642     carry a reg_equal note.  These 'use' insns will be deleted before
18643     the reload phase exits.
18644
18645     During the delayed branch scheduling phase, X may be an insn.  This
18646     indicates that X previously was located at this place in the code
18647     and its data dependencies need to be taken into account.  These
18648     'use' insns will be deleted before the delayed branch scheduling
18649     phase exits.
18650
18651'(parallel [X0 X1 ...])'
18652     Represents several side effects performed in parallel.  The square
18653     brackets stand for a vector; the operand of 'parallel' is a vector
18654     of expressions.  X0, X1 and so on are individual side effect
18655     expressions--expressions of code 'set', 'call', 'return',
18656     'simple_return', 'clobber' or 'use'.
18657
18658     "In parallel" means that first all the values used in the
18659     individual side-effects are computed, and second all the actual
18660     side-effects are performed.  For example,
18661
18662          (parallel [(set (reg:SI 1) (mem:SI (reg:SI 1)))
18663                     (set (mem:SI (reg:SI 1)) (reg:SI 1))])
18664
18665     says unambiguously that the values of hard register 1 and the
18666     memory location addressed by it are interchanged.  In both places
18667     where '(reg:SI 1)' appears as a memory address it refers to the
18668     value in register 1 _before_ the execution of the insn.
18669
18670     It follows that it is _incorrect_ to use 'parallel' and expect the
18671     result of one 'set' to be available for the next one.  For example,
18672     people sometimes attempt to represent a jump-if-zero instruction
18673     this way:
18674
18675          (parallel [(set (cc0) (reg:SI 34))
18676                     (set (pc) (if_then_else
18677                                  (eq (cc0) (const_int 0))
18678                                  (label_ref ...)
18679                                  (pc)))])
18680
18681     But this is incorrect, because it says that the jump condition
18682     depends on the condition code value _before_ this instruction, not
18683     on the new value that is set by this instruction.
18684
18685     Peephole optimization, which takes place together with final
18686     assembly code output, can produce insns whose patterns consist of a
18687     'parallel' whose elements are the operands needed to output the
18688     resulting assembler code--often 'reg', 'mem' or constant
18689     expressions.  This would not be well-formed RTL at any other stage
18690     in compilation, but it is OK then because no further optimization
18691     remains to be done.  However, the definition of the macro
18692     'NOTICE_UPDATE_CC', if any, must deal with such insns if you define
18693     any peephole optimizations.
18694
18695'(cond_exec [COND EXPR])'
18696     Represents a conditionally executed expression.  The EXPR is
18697     executed only if the COND is nonzero.  The COND expression must not
18698     have side-effects, but the EXPR may very well have side-effects.
18699
18700'(sequence [INSNS ...])'
18701     Represents a sequence of insns.  If a 'sequence' appears in the
18702     chain of insns, then each of the INSNS that appears in the sequence
18703     must be suitable for appearing in the chain of insns, i.e. must
18704     satisfy the 'INSN_P' predicate.
18705
18706     After delay-slot scheduling is completed, an insn and all the insns
18707     that reside in its delay slots are grouped together into a
18708     'sequence'.  The insn requiring the delay slot is the first insn in
18709     the vector; subsequent insns are to be placed in the delay slot.
18710
18711     'INSN_ANNULLED_BRANCH_P' is set on an insn in a delay slot to
18712     indicate that a branch insn should be used that will conditionally
18713     annul the effect of the insns in the delay slots.  In such a case,
18714     'INSN_FROM_TARGET_P' indicates that the insn is from the target of
18715     the branch and should be executed only if the branch is taken;
18716     otherwise the insn should be executed only if the branch is not
18717     taken.  *Note Delay Slots::.
18718
18719     Some back ends also use 'sequence' objects for purposes other than
18720     delay-slot groups.  This is not supported in the common parts of
18721     the compiler, which treat such sequences as delay-slot groups.
18722
18723     DWARF2 Call Frame Address (CFA) adjustments are sometimes also
18724     expressed using 'sequence' objects as the value of a
18725     'RTX_FRAME_RELATED_P' note.  This only happens if the CFA
18726     adjustments cannot be easily derived from the pattern of the
18727     instruction to which the note is attached.  In such cases, the
18728     value of the note is used instead of best-guesing the semantics of
18729     the instruction.  The back end can attach notes containing a
18730     'sequence' of 'set' patterns that express the effect of the parent
18731     instruction.
18732
18733 These expression codes appear in place of a side effect, as the body of
18734an insn, though strictly speaking they do not always describe side
18735effects as such:
18736
18737'(asm_input S)'
18738     Represents literal assembler code as described by the string S.
18739
18740'(unspec [OPERANDS ...] INDEX)'
18741'(unspec_volatile [OPERANDS ...] INDEX)'
18742     Represents a machine-specific operation on OPERANDS.  INDEX selects
18743     between multiple machine-specific operations.  'unspec_volatile' is
18744     used for volatile operations and operations that may trap; 'unspec'
18745     is used for other operations.
18746
18747     These codes may appear inside a 'pattern' of an insn, inside a
18748     'parallel', or inside an expression.
18749
18750'(addr_vec:M [LR0 LR1 ...])'
18751     Represents a table of jump addresses.  The vector elements LR0,
18752     etc., are 'label_ref' expressions.  The mode M specifies how much
18753     space is given to each address; normally M would be 'Pmode'.
18754
18755'(addr_diff_vec:M BASE [LR0 LR1 ...] MIN MAX FLAGS)'
18756     Represents a table of jump addresses expressed as offsets from
18757     BASE.  The vector elements LR0, etc., are 'label_ref' expressions
18758     and so is BASE.  The mode M specifies how much space is given to
18759     each address-difference.  MIN and MAX are set up by branch
18760     shortening and hold a label with a minimum and a maximum address,
18761     respectively.  FLAGS indicates the relative position of BASE, MIN
18762     and MAX to the containing insn and of MIN and MAX to BASE.  See
18763     rtl.def for details.
18764
18765'(prefetch:M ADDR RW LOCALITY)'
18766     Represents prefetch of memory at address ADDR.  Operand RW is 1 if
18767     the prefetch is for data to be written, 0 otherwise; targets that
18768     do not support write prefetches should treat this as a normal
18769     prefetch.  Operand LOCALITY specifies the amount of temporal
18770     locality; 0 if there is none or 1, 2, or 3 for increasing levels of
18771     temporal locality; targets that do not support locality hints
18772     should ignore this.
18773
18774     This insn is used to minimize cache-miss latency by moving data
18775     into a cache before it is accessed.  It should use only
18776     non-faulting data prefetch instructions.
18777
18778
18779File: gccint.info,  Node: Incdec,  Next: Assembler,  Prev: Side Effects,  Up: RTL
18780
1878114.16 Embedded Side-Effects on Addresses
18782========================================
18783
18784Six special side-effect expression codes appear as memory addresses.
18785
18786'(pre_dec:M X)'
18787     Represents the side effect of decrementing X by a standard amount
18788     and represents also the value that X has after being decremented.
18789     X must be a 'reg' or 'mem', but most machines allow only a 'reg'.
18790     M must be the machine mode for pointers on the machine in use.  The
18791     amount X is decremented by is the length in bytes of the machine
18792     mode of the containing memory reference of which this expression
18793     serves as the address.  Here is an example of its use:
18794
18795          (mem:DF (pre_dec:SI (reg:SI 39)))
18796
18797     This says to decrement pseudo register 39 by the length of a
18798     'DFmode' value and use the result to address a 'DFmode' value.
18799
18800'(pre_inc:M X)'
18801     Similar, but specifies incrementing X instead of decrementing it.
18802
18803'(post_dec:M X)'
18804     Represents the same side effect as 'pre_dec' but a different value.
18805     The value represented here is the value X has before being
18806     decremented.
18807
18808'(post_inc:M X)'
18809     Similar, but specifies incrementing X instead of decrementing it.
18810
18811'(post_modify:M X Y)'
18812
18813     Represents the side effect of setting X to Y and represents X
18814     before X is modified.  X must be a 'reg' or 'mem', but most
18815     machines allow only a 'reg'.  M must be the machine mode for
18816     pointers on the machine in use.
18817
18818     The expression Y must be one of three forms: '(plus:M X Z)',
18819     '(minus:M X Z)', or '(plus:M X I)', where Z is an index register
18820     and I is a constant.
18821
18822     Here is an example of its use:
18823
18824          (mem:SF (post_modify:SI (reg:SI 42) (plus (reg:SI 42)
18825                                                    (reg:SI 48))))
18826
18827     This says to modify pseudo register 42 by adding the contents of
18828     pseudo register 48 to it, after the use of what ever 42 points to.
18829
18830'(pre_modify:M X EXPR)'
18831     Similar except side effects happen before the use.
18832
18833 These embedded side effect expressions must be used with care.
18834Instruction patterns may not use them.  Until the 'flow' pass of the
18835compiler, they may occur only to represent pushes onto the stack.  The
18836'flow' pass finds cases where registers are incremented or decremented
18837in one instruction and used as an address shortly before or after; these
18838cases are then transformed to use pre- or post-increment or -decrement.
18839
18840 If a register used as the operand of these expressions is used in
18841another address in an insn, the original value of the register is used.
18842Uses of the register outside of an address are not permitted within the
18843same insn as a use in an embedded side effect expression because such
18844insns behave differently on different machines and hence must be treated
18845as ambiguous and disallowed.
18846
18847 An instruction that can be represented with an embedded side effect
18848could also be represented using 'parallel' containing an additional
18849'set' to describe how the address register is altered.  This is not done
18850because machines that allow these operations at all typically allow them
18851wherever a memory address is called for.  Describing them as additional
18852parallel stores would require doubling the number of entries in the
18853machine description.
18854
18855
18856File: gccint.info,  Node: Assembler,  Next: Debug Information,  Prev: Incdec,  Up: RTL
18857
1885814.17 Assembler Instructions as Expressions
18859===========================================
18860
18861The RTX code 'asm_operands' represents a value produced by a
18862user-specified assembler instruction.  It is used to represent an 'asm'
18863statement with arguments.  An 'asm' statement with a single output
18864operand, like this:
18865
18866     asm ("foo %1,%2,%0" : "=a" (outputvar) : "g" (x + y), "di" (*z));
18867
18868is represented using a single 'asm_operands' RTX which represents the
18869value that is stored in 'outputvar':
18870
18871     (set RTX-FOR-OUTPUTVAR
18872          (asm_operands "foo %1,%2,%0" "a" 0
18873                        [RTX-FOR-ADDITION-RESULT RTX-FOR-*Z]
18874                        [(asm_input:M1 "g")
18875                         (asm_input:M2 "di")]))
18876
18877Here the operands of the 'asm_operands' RTX are the assembler template
18878string, the output-operand's constraint, the index-number of the output
18879operand among the output operands specified, a vector of input operand
18880RTX's, and a vector of input-operand modes and constraints.  The mode M1
18881is the mode of the sum 'x+y'; M2 is that of '*z'.
18882
18883 When an 'asm' statement has multiple output values, its insn has
18884several such 'set' RTX's inside of a 'parallel'.  Each 'set' contains an
18885'asm_operands'; all of these share the same assembler template and
18886vectors, but each contains the constraint for the respective output
18887operand.  They are also distinguished by the output-operand index
18888number, which is 0, 1, ... for successive output operands.
18889
18890
18891File: gccint.info,  Node: Debug Information,  Next: Insns,  Prev: Assembler,  Up: RTL
18892
1889314.18 Variable Location Debug Information in RTL
18894================================================
18895
18896Variable tracking relies on 'MEM_EXPR' and 'REG_EXPR' annotations to
18897determine what user variables memory and register references refer to.
18898
18899 Variable tracking at assignments uses these notes only when they refer
18900to variables that live at fixed locations (e.g., addressable variables,
18901global non-automatic variables).  For variables whose location may vary,
18902it relies on the following types of notes.
18903
18904'(var_location:MODE VAR EXP STAT)'
18905     Binds variable 'var', a tree, to value EXP, an RTL expression.  It
18906     appears only in 'NOTE_INSN_VAR_LOCATION' and 'DEBUG_INSN's, with
18907     slightly different meanings.  MODE, if present, represents the mode
18908     of EXP, which is useful if it is a modeless expression.  STAT is
18909     only meaningful in notes, indicating whether the variable is known
18910     to be initialized or uninitialized.
18911
18912'(debug_expr:MODE DECL)'
18913     Stands for the value bound to the 'DEBUG_EXPR_DECL' DECL, that
18914     points back to it, within value expressions in 'VAR_LOCATION'
18915     nodes.
18916
18917'(debug_implicit_ptr:MODE DECL)'
18918     Stands for the location of a DECL that is no longer addressable.
18919
18920'(entry_value:MODE DECL)'
18921     Stands for the value a DECL had at the entry point of the
18922     containing function.
18923
18924'(debug_parameter_ref:MODE DECL)'
18925     Refers to a parameter that was completely optimized out.
18926
18927'(debug_marker:MODE)'
18928     Marks a program location.  With 'VOIDmode', it stands for the
18929     beginning of a statement, a recommended inspection point logically
18930     after all prior side effects, and before any subsequent side
18931     effects.  With 'BLKmode', it indicates an inline entry point: the
18932     lexical block encoded in the 'INSN_LOCATION' is the enclosing block
18933     that encloses the inlined function.
18934
18935
18936File: gccint.info,  Node: Insns,  Next: Calls,  Prev: Debug Information,  Up: RTL
18937
1893814.19 Insns
18939===========
18940
18941The RTL representation of the code for a function is a doubly-linked
18942chain of objects called "insns".  Insns are expressions with special
18943codes that are used for no other purpose.  Some insns are actual
18944instructions; others represent dispatch tables for 'switch' statements;
18945others represent labels to jump to or various sorts of declarative
18946information.
18947
18948 In addition to its own specific data, each insn must have a unique
18949id-number that distinguishes it from all other insns in the current
18950function (after delayed branch scheduling, copies of an insn with the
18951same id-number may be present in multiple places in a function, but
18952these copies will always be identical and will only appear inside a
18953'sequence'), and chain pointers to the preceding and following insns.
18954These three fields occupy the same position in every insn, independent
18955of the expression code of the insn.  They could be accessed with 'XEXP'
18956and 'XINT', but instead three special macros are always used:
18957
18958'INSN_UID (I)'
18959     Accesses the unique id of insn I.
18960
18961'PREV_INSN (I)'
18962     Accesses the chain pointer to the insn preceding I.  If I is the
18963     first insn, this is a null pointer.
18964
18965'NEXT_INSN (I)'
18966     Accesses the chain pointer to the insn following I.  If I is the
18967     last insn, this is a null pointer.
18968
18969 The first insn in the chain is obtained by calling 'get_insns'; the
18970last insn is the result of calling 'get_last_insn'.  Within the chain
18971delimited by these insns, the 'NEXT_INSN' and 'PREV_INSN' pointers must
18972always correspond: if INSN is not the first insn,
18973
18974     NEXT_INSN (PREV_INSN (INSN)) == INSN
18975
18976is always true and if INSN is not the last insn,
18977
18978     PREV_INSN (NEXT_INSN (INSN)) == INSN
18979
18980is always true.
18981
18982 After delay slot scheduling, some of the insns in the chain might be
18983'sequence' expressions, which contain a vector of insns.  The value of
18984'NEXT_INSN' in all but the last of these insns is the next insn in the
18985vector; the value of 'NEXT_INSN' of the last insn in the vector is the
18986same as the value of 'NEXT_INSN' for the 'sequence' in which it is
18987contained.  Similar rules apply for 'PREV_INSN'.
18988
18989 This means that the above invariants are not necessarily true for insns
18990inside 'sequence' expressions.  Specifically, if INSN is the first insn
18991in a 'sequence', 'NEXT_INSN (PREV_INSN (INSN))' is the insn containing
18992the 'sequence' expression, as is the value of 'PREV_INSN (NEXT_INSN
18993(INSN))' if INSN is the last insn in the 'sequence' expression.  You can
18994use these expressions to find the containing 'sequence' expression.
18995
18996 Every insn has one of the following expression codes:
18997
18998'insn'
18999     The expression code 'insn' is used for instructions that do not
19000     jump and do not do function calls.  'sequence' expressions are
19001     always contained in insns with code 'insn' even if one of those
19002     insns should jump or do function calls.
19003
19004     Insns with code 'insn' have four additional fields beyond the three
19005     mandatory ones listed above.  These four are described in a table
19006     below.
19007
19008'jump_insn'
19009     The expression code 'jump_insn' is used for instructions that may
19010     jump (or, more generally, may contain 'label_ref' expressions to
19011     which 'pc' can be set in that instruction).  If there is an
19012     instruction to return from the current function, it is recorded as
19013     a 'jump_insn'.
19014
19015     'jump_insn' insns have the same extra fields as 'insn' insns,
19016     accessed in the same way and in addition contain a field
19017     'JUMP_LABEL' which is defined once jump optimization has completed.
19018
19019     For simple conditional and unconditional jumps, this field contains
19020     the 'code_label' to which this insn will (possibly conditionally)
19021     branch.  In a more complex jump, 'JUMP_LABEL' records one of the
19022     labels that the insn refers to; other jump target labels are
19023     recorded as 'REG_LABEL_TARGET' notes.  The exception is 'addr_vec'
19024     and 'addr_diff_vec', where 'JUMP_LABEL' is 'NULL_RTX' and the only
19025     way to find the labels is to scan the entire body of the insn.
19026
19027     Return insns count as jumps, but their 'JUMP_LABEL' is 'RETURN' or
19028     'SIMPLE_RETURN'.
19029
19030'call_insn'
19031     The expression code 'call_insn' is used for instructions that may
19032     do function calls.  It is important to distinguish these
19033     instructions because they imply that certain registers and memory
19034     locations may be altered unpredictably.
19035
19036     'call_insn' insns have the same extra fields as 'insn' insns,
19037     accessed in the same way and in addition contain a field
19038     'CALL_INSN_FUNCTION_USAGE', which contains a list (chain of
19039     'expr_list' expressions) containing 'use', 'clobber' and sometimes
19040     'set' expressions that denote hard registers and 'mem's used or
19041     clobbered by the called function.
19042
19043     A 'mem' generally points to a stack slot in which arguments passed
19044     to the libcall by reference (*note TARGET_PASS_BY_REFERENCE:
19045     Register Arguments.) are stored.  If the argument is caller-copied
19046     (*note TARGET_CALLEE_COPIES: Register Arguments.), the stack slot
19047     will be mentioned in 'clobber' and 'use' entries; if it's
19048     callee-copied, only a 'use' will appear, and the 'mem' may point to
19049     addresses that are not stack slots.
19050
19051     Registers occurring inside a 'clobber' in this list augment
19052     registers specified in 'CALL_USED_REGISTERS' (*note Register
19053     Basics::).
19054
19055     If the list contains a 'set' involving two registers, it indicates
19056     that the function returns one of its arguments.  Such a 'set' may
19057     look like a no-op if the same register holds the argument and the
19058     return value.
19059
19060'code_label'
19061     A 'code_label' insn represents a label that a jump insn can jump
19062     to.  It contains two special fields of data in addition to the
19063     three standard ones.  'CODE_LABEL_NUMBER' is used to hold the
19064     "label number", a number that identifies this label uniquely among
19065     all the labels in the compilation (not just in the current
19066     function).  Ultimately, the label is represented in the assembler
19067     output as an assembler label, usually of the form 'LN' where N is
19068     the label number.
19069
19070     When a 'code_label' appears in an RTL expression, it normally
19071     appears within a 'label_ref' which represents the address of the
19072     label, as a number.
19073
19074     Besides as a 'code_label', a label can also be represented as a
19075     'note' of type 'NOTE_INSN_DELETED_LABEL'.
19076
19077     The field 'LABEL_NUSES' is only defined once the jump optimization
19078     phase is completed.  It contains the number of times this label is
19079     referenced in the current function.
19080
19081     The field 'LABEL_KIND' differentiates four different types of
19082     labels: 'LABEL_NORMAL', 'LABEL_STATIC_ENTRY', 'LABEL_GLOBAL_ENTRY',
19083     and 'LABEL_WEAK_ENTRY'.  The only labels that do not have type
19084     'LABEL_NORMAL' are "alternate entry points" to the current
19085     function.  These may be static (visible only in the containing
19086     translation unit), global (exposed to all translation units), or
19087     weak (global, but can be overridden by another symbol with the same
19088     name).
19089
19090     Much of the compiler treats all four kinds of label identically.
19091     Some of it needs to know whether or not a label is an alternate
19092     entry point; for this purpose, the macro 'LABEL_ALT_ENTRY_P' is
19093     provided.  It is equivalent to testing whether 'LABEL_KIND (label)
19094     == LABEL_NORMAL'.  The only place that cares about the distinction
19095     between static, global, and weak alternate entry points, besides
19096     the front-end code that creates them, is the function
19097     'output_alternate_entry_point', in 'final.c'.
19098
19099     To set the kind of a label, use the 'SET_LABEL_KIND' macro.
19100
19101'jump_table_data'
19102     A 'jump_table_data' insn is a placeholder for the jump-table data
19103     of a 'casesi' or 'tablejump' insn.  They are placed after a
19104     'tablejump_p' insn.  A 'jump_table_data' insn is not part o a basic
19105     blockm but it is associated with the basic block that ends with the
19106     'tablejump_p' insn.  The 'PATTERN' of a 'jump_table_data' is always
19107     either an 'addr_vec' or an 'addr_diff_vec', and a 'jump_table_data'
19108     insn is always preceded by a 'code_label'.  The 'tablejump_p' insn
19109     refers to that 'code_label' via its 'JUMP_LABEL'.
19110
19111'barrier'
19112     Barriers are placed in the instruction stream when control cannot
19113     flow past them.  They are placed after unconditional jump
19114     instructions to indicate that the jumps are unconditional and after
19115     calls to 'volatile' functions, which do not return (e.g., 'exit').
19116     They contain no information beyond the three standard fields.
19117
19118'note'
19119     'note' insns are used to represent additional debugging and
19120     declarative information.  They contain two nonstandard fields, an
19121     integer which is accessed with the macro 'NOTE_LINE_NUMBER' and a
19122     string accessed with 'NOTE_SOURCE_FILE'.
19123
19124     If 'NOTE_LINE_NUMBER' is positive, the note represents the position
19125     of a source line and 'NOTE_SOURCE_FILE' is the source file name
19126     that the line came from.  These notes control generation of line
19127     number data in the assembler output.
19128
19129     Otherwise, 'NOTE_LINE_NUMBER' is not really a line number but a
19130     code with one of the following values (and 'NOTE_SOURCE_FILE' must
19131     contain a null pointer):
19132
19133     'NOTE_INSN_DELETED'
19134          Such a note is completely ignorable.  Some passes of the
19135          compiler delete insns by altering them into notes of this
19136          kind.
19137
19138     'NOTE_INSN_DELETED_LABEL'
19139          This marks what used to be a 'code_label', but was not used
19140          for other purposes than taking its address and was transformed
19141          to mark that no code jumps to it.
19142
19143     'NOTE_INSN_BLOCK_BEG'
19144     'NOTE_INSN_BLOCK_END'
19145          These types of notes indicate the position of the beginning
19146          and end of a level of scoping of variable names.  They control
19147          the output of debugging information.
19148
19149     'NOTE_INSN_EH_REGION_BEG'
19150     'NOTE_INSN_EH_REGION_END'
19151          These types of notes indicate the position of the beginning
19152          and end of a level of scoping for exception handling.
19153          'NOTE_EH_HANDLER' identifies which region is associated with
19154          these notes.
19155
19156     'NOTE_INSN_FUNCTION_BEG'
19157          Appears at the start of the function body, after the function
19158          prologue.
19159
19160     'NOTE_INSN_VAR_LOCATION'
19161          This note is used to generate variable location debugging
19162          information.  It indicates that the user variable in its
19163          'VAR_LOCATION' operand is at the location given in the RTL
19164          expression, or holds a value that can be computed by
19165          evaluating the RTL expression from that static point in the
19166          program up to the next such note for the same user variable.
19167
19168     'NOTE_INSN_BEGIN_STMT'
19169          This note is used to generate 'is_stmt' markers in line number
19170          debuggign information.  It indicates the beginning of a user
19171          statement.
19172
19173     'NOTE_INSN_INLINE_ENTRY'
19174          This note is used to generate 'entry_pc' for inlined
19175          subroutines in debugging information.  It indicates an
19176          inspection point at which all arguments for the inlined
19177          function have been bound, and before its first statement.
19178
19179     These codes are printed symbolically when they appear in debugging
19180     dumps.
19181
19182'debug_insn'
19183     The expression code 'debug_insn' is used for pseudo-instructions
19184     that hold debugging information for variable tracking at
19185     assignments (see '-fvar-tracking-assignments' option).  They are
19186     the RTL representation of 'GIMPLE_DEBUG' statements (*note
19187     'GIMPLE_DEBUG'::), with a 'VAR_LOCATION' operand that binds a user
19188     variable tree to an RTL representation of the 'value' in the
19189     corresponding statement.  A 'DEBUG_EXPR' in it stands for the value
19190     bound to the corresponding 'DEBUG_EXPR_DECL'.
19191
19192     'GIMPLE_DEBUG_BEGIN_STMT' and 'GIMPLE_DEBUG_INLINE_ENTRY' are
19193     expanded to RTL as a 'DEBUG_INSN' with a 'DEBUG_MARKER' 'PATTERN';
19194     the difference is the RTL mode: the former's 'DEBUG_MARKER' is
19195     'VOIDmode', whereas the latter is 'BLKmode'; information about the
19196     inlined function can be taken from the lexical block encoded in the
19197     'INSN_LOCATION'.  These 'DEBUG_INSN's, that do not carry
19198     'VAR_LOCATION' information, just 'DEBUG_MARKER's, can be detected
19199     by testing 'DEBUG_MARKER_INSN_P', whereas those that do can be
19200     recognized as 'DEBUG_BIND_INSN_P'.
19201
19202     Throughout optimization passes, 'DEBUG_INSN's are not reordered
19203     with respect to each other, particularly during scheduling.
19204     Binding information is kept in pseudo-instruction form, so that,
19205     unlike notes, it gets the same treatment and adjustments that
19206     regular instructions would.  It is the variable tracking pass that
19207     turns these pseudo-instructions into 'NOTE_INSN_VAR_LOCATION',
19208     'NOTE_INSN_BEGIN_STMT' and 'NOTE_INSN_INLINE_ENTRY' notes,
19209     analyzing control flow, value equivalences and changes to registers
19210     and memory referenced in value expressions, propagating the values
19211     of debug temporaries and determining expressions that can be used
19212     to compute the value of each user variable at as many points
19213     (ranges, actually) in the program as possible.
19214
19215     Unlike 'NOTE_INSN_VAR_LOCATION', the value expression in an
19216     'INSN_VAR_LOCATION' denotes a value at that specific point in the
19217     program, rather than an expression that can be evaluated at any
19218     later point before an overriding 'VAR_LOCATION' is encountered.
19219     E.g., if a user variable is bound to a 'REG' and then a subsequent
19220     insn modifies the 'REG', the note location would keep mapping the
19221     user variable to the register across the insn, whereas the insn
19222     location would keep the variable bound to the value, so that the
19223     variable tracking pass would emit another location note for the
19224     variable at the point in which the register is modified.
19225
19226 The machine mode of an insn is normally 'VOIDmode', but some phases use
19227the mode for various purposes.
19228
19229 The common subexpression elimination pass sets the mode of an insn to
19230'QImode' when it is the first insn in a block that has already been
19231processed.
19232
19233 The second Haifa scheduling pass, for targets that can multiple issue,
19234sets the mode of an insn to 'TImode' when it is believed that the
19235instruction begins an issue group.  That is, when the instruction cannot
19236issue simultaneously with the previous.  This may be relied on by later
19237passes, in particular machine-dependent reorg.
19238
19239 Here is a table of the extra fields of 'insn', 'jump_insn' and
19240'call_insn' insns:
19241
19242'PATTERN (I)'
19243     An expression for the side effect performed by this insn.  This
19244     must be one of the following codes: 'set', 'call', 'use',
19245     'clobber', 'return', 'simple_return', 'asm_input', 'asm_output',
19246     'addr_vec', 'addr_diff_vec', 'trap_if', 'unspec',
19247     'unspec_volatile', 'parallel', 'cond_exec', or 'sequence'.  If it
19248     is a 'parallel', each element of the 'parallel' must be one these
19249     codes, except that 'parallel' expressions cannot be nested and
19250     'addr_vec' and 'addr_diff_vec' are not permitted inside a
19251     'parallel' expression.
19252
19253'INSN_CODE (I)'
19254     An integer that says which pattern in the machine description
19255     matches this insn, or -1 if the matching has not yet been
19256     attempted.
19257
19258     Such matching is never attempted and this field remains -1 on an
19259     insn whose pattern consists of a single 'use', 'clobber',
19260     'asm_input', 'addr_vec' or 'addr_diff_vec' expression.
19261
19262     Matching is also never attempted on insns that result from an 'asm'
19263     statement.  These contain at least one 'asm_operands' expression.
19264     The function 'asm_noperands' returns a non-negative value for such
19265     insns.
19266
19267     In the debugging output, this field is printed as a number followed
19268     by a symbolic representation that locates the pattern in the 'md'
19269     file as some small positive or negative offset from a named
19270     pattern.
19271
19272'LOG_LINKS (I)'
19273     A list (chain of 'insn_list' expressions) giving information about
19274     dependencies between instructions within a basic block.  Neither a
19275     jump nor a label may come between the related insns.  These are
19276     only used by the schedulers and by combine.  This is a deprecated
19277     data structure.  Def-use and use-def chains are now preferred.
19278
19279'REG_NOTES (I)'
19280     A list (chain of 'expr_list', 'insn_list' and 'int_list'
19281     expressions) giving miscellaneous information about the insn.  It
19282     is often information pertaining to the registers used in this insn.
19283
19284 The 'LOG_LINKS' field of an insn is a chain of 'insn_list' expressions.
19285Each of these has two operands: the first is an insn, and the second is
19286another 'insn_list' expression (the next one in the chain).  The last
19287'insn_list' in the chain has a null pointer as second operand.  The
19288significant thing about the chain is which insns appear in it (as first
19289operands of 'insn_list' expressions).  Their order is not significant.
19290
19291 This list is originally set up by the flow analysis pass; it is a null
19292pointer until then.  Flow only adds links for those data dependencies
19293which can be used for instruction combination.  For each insn, the flow
19294analysis pass adds a link to insns which store into registers values
19295that are used for the first time in this insn.
19296
19297 The 'REG_NOTES' field of an insn is a chain similar to the 'LOG_LINKS'
19298field but it includes 'expr_list' and 'int_list' expressions in addition
19299to 'insn_list' expressions.  There are several kinds of register notes,
19300which are distinguished by the machine mode, which in a register note is
19301really understood as being an 'enum reg_note'.  The first operand OP of
19302the note is data whose meaning depends on the kind of note.
19303
19304 The macro 'REG_NOTE_KIND (X)' returns the kind of register note.  Its
19305counterpart, the macro 'PUT_REG_NOTE_KIND (X, NEWKIND)' sets the
19306register note type of X to be NEWKIND.
19307
19308 Register notes are of three classes: They may say something about an
19309input to an insn, they may say something about an output of an insn, or
19310they may create a linkage between two insns.  There are also a set of
19311values that are only used in 'LOG_LINKS'.
19312
19313 These register notes annotate inputs to an insn:
19314
19315'REG_DEAD'
19316     The value in OP dies in this insn; that is to say, altering the
19317     value immediately after this insn would not affect the future
19318     behavior of the program.
19319
19320     It does not follow that the register OP has no useful value after
19321     this insn since OP is not necessarily modified by this insn.
19322     Rather, no subsequent instruction uses the contents of OP.
19323
19324'REG_UNUSED'
19325     The register OP being set by this insn will not be used in a
19326     subsequent insn.  This differs from a 'REG_DEAD' note, which
19327     indicates that the value in an input will not be used subsequently.
19328     These two notes are independent; both may be present for the same
19329     register.
19330
19331'REG_INC'
19332     The register OP is incremented (or decremented; at this level there
19333     is no distinction) by an embedded side effect inside this insn.
19334     This means it appears in a 'post_inc', 'pre_inc', 'post_dec' or
19335     'pre_dec' expression.
19336
19337'REG_NONNEG'
19338     The register OP is known to have a nonnegative value when this insn
19339     is reached.  This is used by special looping instructions that
19340     terminate when the register goes negative.
19341
19342     The 'REG_NONNEG' note is added only to 'doloop_end' insns, if its
19343     pattern uses a 'ge' condition.
19344
19345'REG_LABEL_OPERAND'
19346     This insn uses OP, a 'code_label' or a 'note' of type
19347     'NOTE_INSN_DELETED_LABEL', but is not a 'jump_insn', or it is a
19348     'jump_insn' that refers to the operand as an ordinary operand.  The
19349     label may still eventually be a jump target, but if so in an
19350     indirect jump in a subsequent insn.  The presence of this note
19351     allows jump optimization to be aware that OP is, in fact, being
19352     used, and flow optimization to build an accurate flow graph.
19353
19354'REG_LABEL_TARGET'
19355     This insn is a 'jump_insn' but not an 'addr_vec' or
19356     'addr_diff_vec'.  It uses OP, a 'code_label' as a direct or
19357     indirect jump target.  Its purpose is similar to that of
19358     'REG_LABEL_OPERAND'.  This note is only present if the insn has
19359     multiple targets; the last label in the insn (in the highest
19360     numbered insn-field) goes into the 'JUMP_LABEL' field and does not
19361     have a 'REG_LABEL_TARGET' note.  *Note JUMP_LABEL: Insns.
19362
19363'REG_SETJMP'
19364     Appears attached to each 'CALL_INSN' to 'setjmp' or a related
19365     function.
19366
19367 The following notes describe attributes of outputs of an insn:
19368
19369'REG_EQUIV'
19370'REG_EQUAL'
19371     This note is only valid on an insn that sets only one register and
19372     indicates that that register will be equal to OP at run time; the
19373     scope of this equivalence differs between the two types of notes.
19374     The value which the insn explicitly copies into the register may
19375     look different from OP, but they will be equal at run time.  If the
19376     output of the single 'set' is a 'strict_low_part' or 'zero_extract'
19377     expression, the note refers to the register that is contained in
19378     its first operand.
19379
19380     For 'REG_EQUIV', the register is equivalent to OP throughout the
19381     entire function, and could validly be replaced in all its
19382     occurrences by OP.  ("Validly" here refers to the data flow of the
19383     program; simple replacement may make some insns invalid.)  For
19384     example, when a constant is loaded into a register that is never
19385     assigned any other value, this kind of note is used.
19386
19387     When a parameter is copied into a pseudo-register at entry to a
19388     function, a note of this kind records that the register is
19389     equivalent to the stack slot where the parameter was passed.
19390     Although in this case the register may be set by other insns, it is
19391     still valid to replace the register by the stack slot throughout
19392     the function.
19393
19394     A 'REG_EQUIV' note is also used on an instruction which copies a
19395     register parameter into a pseudo-register at entry to a function,
19396     if there is a stack slot where that parameter could be stored.
19397     Although other insns may set the pseudo-register, it is valid for
19398     the compiler to replace the pseudo-register by stack slot
19399     throughout the function, provided the compiler ensures that the
19400     stack slot is properly initialized by making the replacement in the
19401     initial copy instruction as well.  This is used on machines for
19402     which the calling convention allocates stack space for register
19403     parameters.  See 'REG_PARM_STACK_SPACE' in *note Stack Arguments::.
19404
19405     In the case of 'REG_EQUAL', the register that is set by this insn
19406     will be equal to OP at run time at the end of this insn but not
19407     necessarily elsewhere in the function.  In this case, OP is
19408     typically an arithmetic expression.  For example, when a sequence
19409     of insns such as a library call is used to perform an arithmetic
19410     operation, this kind of note is attached to the insn that produces
19411     or copies the final value.
19412
19413     These two notes are used in different ways by the compiler passes.
19414     'REG_EQUAL' is used by passes prior to register allocation (such as
19415     common subexpression elimination and loop optimization) to tell
19416     them how to think of that value.  'REG_EQUIV' notes are used by
19417     register allocation to indicate that there is an available
19418     substitute expression (either a constant or a 'mem' expression for
19419     the location of a parameter on the stack) that may be used in place
19420     of a register if insufficient registers are available.
19421
19422     Except for stack homes for parameters, which are indicated by a
19423     'REG_EQUIV' note and are not useful to the early optimization
19424     passes and pseudo registers that are equivalent to a memory
19425     location throughout their entire life, which is not detected until
19426     later in the compilation, all equivalences are initially indicated
19427     by an attached 'REG_EQUAL' note.  In the early stages of register
19428     allocation, a 'REG_EQUAL' note is changed into a 'REG_EQUIV' note
19429     if OP is a constant and the insn represents the only set of its
19430     destination register.
19431
19432     Thus, compiler passes prior to register allocation need only check
19433     for 'REG_EQUAL' notes and passes subsequent to register allocation
19434     need only check for 'REG_EQUIV' notes.
19435
19436 These notes describe linkages between insns.  They occur in pairs: one
19437insn has one of a pair of notes that points to a second insn, which has
19438the inverse note pointing back to the first insn.
19439
19440'REG_CC_SETTER'
19441'REG_CC_USER'
19442     On machines that use 'cc0', the insns which set and use 'cc0' set
19443     and use 'cc0' are adjacent.  However, when branch delay slot
19444     filling is done, this may no longer be true.  In this case a
19445     'REG_CC_USER' note will be placed on the insn setting 'cc0' to
19446     point to the insn using 'cc0' and a 'REG_CC_SETTER' note will be
19447     placed on the insn using 'cc0' to point to the insn setting 'cc0'.
19448
19449 These values are only used in the 'LOG_LINKS' field, and indicate the
19450type of dependency that each link represents.  Links which indicate a
19451data dependence (a read after write dependence) do not use any code,
19452they simply have mode 'VOIDmode', and are printed without any
19453descriptive text.
19454
19455'REG_DEP_TRUE'
19456     This indicates a true dependence (a read after write dependence).
19457
19458'REG_DEP_OUTPUT'
19459     This indicates an output dependence (a write after write
19460     dependence).
19461
19462'REG_DEP_ANTI'
19463     This indicates an anti dependence (a write after read dependence).
19464
19465 These notes describe information gathered from gcov profile data.  They
19466are stored in the 'REG_NOTES' field of an insn.
19467
19468'REG_BR_PROB'
19469     This is used to specify the ratio of branches to non-branches of a
19470     branch insn according to the profile data.  The note is represented
19471     as an 'int_list' expression whose integer value is an encoding of
19472     'profile_probability' type.  'profile_probability' provide member
19473     function 'from_reg_br_prob_note' and 'to_reg_br_prob_note' to
19474     extract and store the probability into the RTL encoding.
19475
19476'REG_BR_PRED'
19477     These notes are found in JUMP insns after delayed branch scheduling
19478     has taken place.  They indicate both the direction and the
19479     likelihood of the JUMP.  The format is a bitmask of ATTR_FLAG_*
19480     values.
19481
19482'REG_FRAME_RELATED_EXPR'
19483     This is used on an RTX_FRAME_RELATED_P insn wherein the attached
19484     expression is used in place of the actual insn pattern.  This is
19485     done in cases where the pattern is either complex or misleading.
19486
19487 The note 'REG_CALL_NOCF_CHECK' is used in conjunction with the
19488'-fcf-protection=branch' option.  The note is set if a 'nocf_check'
19489attribute is specified for a function type or a pointer to function
19490type.  The note is stored in the 'REG_NOTES' field of an insn.
19491
19492'REG_CALL_NOCF_CHECK'
19493     Users have control through the 'nocf_check' attribute to identify
19494     which calls to a function should be skipped from control-flow
19495     instrumentation when the option '-fcf-protection=branch' is
19496     specified.  The compiler puts a 'REG_CALL_NOCF_CHECK' note on each
19497     'CALL_INSN' instruction that has a function type marked with a
19498     'nocf_check' attribute.
19499
19500 For convenience, the machine mode in an 'insn_list' or 'expr_list' is
19501printed using these symbolic codes in debugging dumps.
19502
19503 The only difference between the expression codes 'insn_list' and
19504'expr_list' is that the first operand of an 'insn_list' is assumed to be
19505an insn and is printed in debugging dumps as the insn's unique id; the
19506first operand of an 'expr_list' is printed in the ordinary way as an
19507expression.
19508
19509
19510File: gccint.info,  Node: Calls,  Next: Sharing,  Prev: Insns,  Up: RTL
19511
1951214.20 RTL Representation of Function-Call Insns
19513===============================================
19514
19515Insns that call subroutines have the RTL expression code 'call_insn'.
19516These insns must satisfy special rules, and their bodies must use a
19517special RTL expression code, 'call'.
19518
19519 A 'call' expression has two operands, as follows:
19520
19521     (call (mem:FM ADDR) NBYTES)
19522
19523Here NBYTES is an operand that represents the number of bytes of
19524argument data being passed to the subroutine, FM is a machine mode
19525(which must equal as the definition of the 'FUNCTION_MODE' macro in the
19526machine description) and ADDR represents the address of the subroutine.
19527
19528 For a subroutine that returns no value, the 'call' expression as shown
19529above is the entire body of the insn, except that the insn might also
19530contain 'use' or 'clobber' expressions.
19531
19532 For a subroutine that returns a value whose mode is not 'BLKmode', the
19533value is returned in a hard register.  If this register's number is R,
19534then the body of the call insn looks like this:
19535
19536     (set (reg:M R)
19537          (call (mem:FM ADDR) NBYTES))
19538
19539This RTL expression makes it clear (to the optimizer passes) that the
19540appropriate register receives a useful value in this insn.
19541
19542 When a subroutine returns a 'BLKmode' value, it is handled by passing
19543to the subroutine the address of a place to store the value.  So the
19544call insn itself does not "return" any value, and it has the same RTL
19545form as a call that returns nothing.
19546
19547 On some machines, the call instruction itself clobbers some register,
19548for example to contain the return address.  'call_insn' insns on these
19549machines should have a body which is a 'parallel' that contains both the
19550'call' expression and 'clobber' expressions that indicate which
19551registers are destroyed.  Similarly, if the call instruction requires
19552some register other than the stack pointer that is not explicitly
19553mentioned in its RTL, a 'use' subexpression should mention that
19554register.
19555
19556 Functions that are called are assumed to modify all registers listed in
19557the configuration macro 'CALL_USED_REGISTERS' (*note Register Basics::)
19558and, with the exception of 'const' functions and library calls, to
19559modify all of memory.
19560
19561 Insns containing just 'use' expressions directly precede the
19562'call_insn' insn to indicate which registers contain inputs to the
19563function.  Similarly, if registers other than those in
19564'CALL_USED_REGISTERS' are clobbered by the called function, insns
19565containing a single 'clobber' follow immediately after the call to
19566indicate which registers.
19567
19568
19569File: gccint.info,  Node: Sharing,  Next: Reading RTL,  Prev: Calls,  Up: RTL
19570
1957114.21 Structure Sharing Assumptions
19572===================================
19573
19574The compiler assumes that certain kinds of RTL expressions are unique;
19575there do not exist two distinct objects representing the same value.  In
19576other cases, it makes an opposite assumption: that no RTL expression
19577object of a certain kind appears in more than one place in the
19578containing structure.
19579
19580 These assumptions refer to a single function; except for the RTL
19581objects that describe global variables and external functions, and a few
19582standard objects such as small integer constants, no RTL objects are
19583common to two functions.
19584
19585   * Each pseudo-register has only a single 'reg' object to represent
19586     it, and therefore only a single machine mode.
19587
19588   * For any symbolic label, there is only one 'symbol_ref' object
19589     referring to it.
19590
19591   * All 'const_int' expressions with equal values are shared.
19592
19593   * All 'const_poly_int' expressions with equal modes and values are
19594     shared.
19595
19596   * There is only one 'pc' expression.
19597
19598   * There is only one 'cc0' expression.
19599
19600   * There is only one 'const_double' expression with value 0 for each
19601     floating point mode.  Likewise for values 1 and 2.
19602
19603   * There is only one 'const_vector' expression with value 0 for each
19604     vector mode, be it an integer or a double constant vector.
19605
19606   * No 'label_ref' or 'scratch' appears in more than one place in the
19607     RTL structure; in other words, it is safe to do a tree-walk of all
19608     the insns in the function and assume that each time a 'label_ref'
19609     or 'scratch' is seen it is distinct from all others that are seen.
19610
19611   * Only one 'mem' object is normally created for each static variable
19612     or stack slot, so these objects are frequently shared in all the
19613     places they appear.  However, separate but equal objects for these
19614     variables are occasionally made.
19615
19616   * When a single 'asm' statement has multiple output operands, a
19617     distinct 'asm_operands' expression is made for each output operand.
19618     However, these all share the vector which contains the sequence of
19619     input operands.  This sharing is used later on to test whether two
19620     'asm_operands' expressions come from the same statement, so all
19621     optimizations must carefully preserve the sharing if they copy the
19622     vector at all.
19623
19624   * No RTL object appears in more than one place in the RTL structure
19625     except as described above.  Many passes of the compiler rely on
19626     this by assuming that they can modify RTL objects in place without
19627     unwanted side-effects on other insns.
19628
19629   * During initial RTL generation, shared structure is freely
19630     introduced.  After all the RTL for a function has been generated,
19631     all shared structure is copied by 'unshare_all_rtl' in
19632     'emit-rtl.c', after which the above rules are guaranteed to be
19633     followed.
19634
19635   * During the combiner pass, shared structure within an insn can exist
19636     temporarily.  However, the shared structure is copied before the
19637     combiner is finished with the insn.  This is done by calling
19638     'copy_rtx_if_shared', which is a subroutine of 'unshare_all_rtl'.
19639
19640
19641File: gccint.info,  Node: Reading RTL,  Prev: Sharing,  Up: RTL
19642
1964314.22 Reading RTL
19644=================
19645
19646To read an RTL object from a file, call 'read_rtx'.  It takes one
19647argument, a stdio stream, and returns a single RTL object.  This routine
19648is defined in 'read-rtl.c'.  It is not available in the compiler itself,
19649only the various programs that generate the compiler back end from the
19650machine description.
19651
19652 People frequently have the idea of using RTL stored as text in a file
19653as an interface between a language front end and the bulk of GCC.  This
19654idea is not feasible.
19655
19656 GCC was designed to use RTL internally only.  Correct RTL for a given
19657program is very dependent on the particular target machine.  And the RTL
19658does not contain all the information about the program.
19659
19660 The proper way to interface GCC to a new language front end is with the
19661"tree" data structure, described in the files 'tree.h' and 'tree.def'.
19662The documentation for this structure (*note GENERIC::) is incomplete.
19663
19664
19665File: gccint.info,  Node: Control Flow,  Next: Loop Analysis and Representation,  Prev: RTL,  Up: Top
19666
1966715 Control Flow Graph
19668*********************
19669
19670A control flow graph (CFG) is a data structure built on top of the
19671intermediate code representation (the RTL or 'GIMPLE' instruction
19672stream) abstracting the control flow behavior of a function that is
19673being compiled.  The CFG is a directed graph where the vertices
19674represent basic blocks and edges represent possible transfer of control
19675flow from one basic block to another.  The data structures used to
19676represent the control flow graph are defined in 'basic-block.h'.
19677
19678 In GCC, the representation of control flow is maintained throughout the
19679compilation process, from constructing the CFG early in 'pass_build_cfg'
19680to 'pass_free_cfg' (see 'passes.def').  The CFG takes various different
19681modes and may undergo extensive manipulations, but the graph is always
19682valid between its construction and its release.  This way, transfer of
19683information such as data flow, a measured profile, or the loop tree, can
19684be propagated through the passes pipeline, and even from 'GIMPLE' to
19685'RTL'.
19686
19687 Often the CFG may be better viewed as integral part of instruction
19688chain, than structure built on the top of it.  Updating the compiler's
19689intermediate representation for instructions cannot be easily done
19690without proper maintenance of the CFG simultaneously.
19691
19692* Menu:
19693
19694* Basic Blocks::           The definition and representation of basic blocks.
19695* Edges::                  Types of edges and their representation.
19696* Profile information::    Representation of frequencies and probabilities.
19697* Maintaining the CFG::    Keeping the control flow graph and up to date.
19698* Liveness information::   Using and maintaining liveness information.
19699
19700
19701File: gccint.info,  Node: Basic Blocks,  Next: Edges,  Up: Control Flow
19702
1970315.1 Basic Blocks
19704=================
19705
19706A basic block is a straight-line sequence of code with only one entry
19707point and only one exit.  In GCC, basic blocks are represented using the
19708'basic_block' data type.
19709
19710 Special basic blocks represent possible entry and exit points of a
19711function.  These blocks are called 'ENTRY_BLOCK_PTR' and
19712'EXIT_BLOCK_PTR'.  These blocks do not contain any code.
19713
19714 The 'BASIC_BLOCK' array contains all basic blocks in an unspecified
19715order.  Each 'basic_block' structure has a field that holds a unique
19716integer identifier 'index' that is the index of the block in the
19717'BASIC_BLOCK' array.  The total number of basic blocks in the function
19718is 'n_basic_blocks'.  Both the basic block indices and the total number
19719of basic blocks may vary during the compilation process, as passes
19720reorder, create, duplicate, and destroy basic blocks.  The index for any
19721block should never be greater than 'last_basic_block'.  The indices 0
19722and 1 are special codes reserved for 'ENTRY_BLOCK' and 'EXIT_BLOCK', the
19723indices of 'ENTRY_BLOCK_PTR' and 'EXIT_BLOCK_PTR'.
19724
19725 Two pointer members of the 'basic_block' structure are the pointers
19726'next_bb' and 'prev_bb'.  These are used to keep doubly linked chain of
19727basic blocks in the same order as the underlying instruction stream.
19728The chain of basic blocks is updated transparently by the provided API
19729for manipulating the CFG.  The macro 'FOR_EACH_BB' can be used to visit
19730all the basic blocks in lexicographical order, except 'ENTRY_BLOCK' and
19731'EXIT_BLOCK'.  The macro 'FOR_ALL_BB' also visits all basic blocks in
19732lexicographical order, including 'ENTRY_BLOCK' and 'EXIT_BLOCK'.
19733
19734 The functions 'post_order_compute' and 'inverted_post_order_compute'
19735can be used to compute topological orders of the CFG. The orders are
19736stored as vectors of basic block indices.  The 'BASIC_BLOCK' array can
19737be used to iterate each basic block by index.  Dominator traversals are
19738also possible using 'walk_dominator_tree'.  Given two basic blocks A and
19739B, block A dominates block B if A is _always_ executed before B.
19740
19741 Each 'basic_block' also contains pointers to the first instruction (the
19742"head") and the last instruction (the "tail") or "end" of the
19743instruction stream contained in a basic block.  In fact, since the
19744'basic_block' data type is used to represent blocks in both major
19745intermediate representations of GCC ('GIMPLE' and RTL), there are
19746pointers to the head and end of a basic block for both representations,
19747stored in intermediate representation specific data in the 'il' field of
19748'struct basic_block_def'.
19749
19750 For RTL, these pointers are 'BB_HEAD' and 'BB_END'.
19751
19752 In the RTL representation of a function, the instruction stream
19753contains not only the "real" instructions, but also "notes" or "insn
19754notes" (to distinguish them from "reg notes").  Any function that moves
19755or duplicates the basic blocks needs to take care of updating of these
19756notes.  Many of these notes expect that the instruction stream consists
19757of linear regions, so updating can sometimes be tedious.  All types of
19758insn notes are defined in 'insn-notes.def'.
19759
19760 In the RTL function representation, the instructions contained in a
19761basic block always follow a 'NOTE_INSN_BASIC_BLOCK', but zero or more
19762'CODE_LABEL' nodes can precede the block note.  A basic block ends with
19763a control flow instruction or with the last instruction before the next
19764'CODE_LABEL' or 'NOTE_INSN_BASIC_BLOCK'.  By definition, a 'CODE_LABEL'
19765cannot appear in the middle of the instruction stream of a basic block.
19766
19767 In addition to notes, the jump table vectors are also represented as
19768"pseudo-instructions" inside the insn stream.  These vectors never
19769appear in the basic block and should always be placed just after the
19770table jump instructions referencing them.  After removing the table-jump
19771it is often difficult to eliminate the code computing the address and
19772referencing the vector, so cleaning up these vectors is postponed until
19773after liveness analysis.  Thus the jump table vectors may appear in the
19774insn stream unreferenced and without any purpose.  Before any edge is
19775made "fall-thru", the existence of such construct in the way needs to be
19776checked by calling 'can_fallthru' function.
19777
19778 For the 'GIMPLE' representation, the PHI nodes and statements contained
19779in a basic block are in a 'gimple_seq' pointed to by the basic block
19780intermediate language specific pointers.  Abstract containers and
19781iterators are used to access the PHI nodes and statements in a basic
19782blocks.  These iterators are called "GIMPLE statement iterators" (GSIs).
19783Grep for '^gsi' in the various 'gimple-*' and 'tree-*' files.  There is
19784a 'gimple_stmt_iterator' type for iterating over all kinds of statement,
19785and a 'gphi_iterator' subclass for iterating over PHI nodes.  The
19786following snippet will pretty-print all PHI nodes the statements of the
19787current function in the GIMPLE representation.
19788
19789     basic_block bb;
19790
19791     FOR_EACH_BB (bb)
19792       {
19793        gphi_iterator pi;
19794        gimple_stmt_iterator si;
19795
19796        for (pi = gsi_start_phis (bb); !gsi_end_p (pi); gsi_next (&pi))
19797          {
19798            gphi *phi = pi.phi ();
19799            print_gimple_stmt (dump_file, phi, 0, TDF_SLIM);
19800          }
19801        for (si = gsi_start_bb (bb); !gsi_end_p (si); gsi_next (&si))
19802          {
19803            gimple stmt = gsi_stmt (si);
19804            print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM);
19805          }
19806       }
19807
19808
19809File: gccint.info,  Node: Edges,  Next: Profile information,  Prev: Basic Blocks,  Up: Control Flow
19810
1981115.2 Edges
19812==========
19813
19814Edges represent possible control flow transfers from the end of some
19815basic block A to the head of another basic block B.  We say that A is a
19816predecessor of B, and B is a successor of A.  Edges are represented in
19817GCC with the 'edge' data type.  Each 'edge' acts as a link between two
19818basic blocks: The 'src' member of an edge points to the predecessor
19819basic block of the 'dest' basic block.  The members 'preds' and 'succs'
19820of the 'basic_block' data type point to type-safe vectors of edges to
19821the predecessors and successors of the block.
19822
19823 When walking the edges in an edge vector, "edge iterators" should be
19824used.  Edge iterators are constructed using the 'edge_iterator' data
19825structure and several methods are available to operate on them:
19826
19827'ei_start'
19828     This function initializes an 'edge_iterator' that points to the
19829     first edge in a vector of edges.
19830
19831'ei_last'
19832     This function initializes an 'edge_iterator' that points to the
19833     last edge in a vector of edges.
19834
19835'ei_end_p'
19836     This predicate is 'true' if an 'edge_iterator' represents the last
19837     edge in an edge vector.
19838
19839'ei_one_before_end_p'
19840     This predicate is 'true' if an 'edge_iterator' represents the
19841     second last edge in an edge vector.
19842
19843'ei_next'
19844     This function takes a pointer to an 'edge_iterator' and makes it
19845     point to the next edge in the sequence.
19846
19847'ei_prev'
19848     This function takes a pointer to an 'edge_iterator' and makes it
19849     point to the previous edge in the sequence.
19850
19851'ei_edge'
19852     This function returns the 'edge' currently pointed to by an
19853     'edge_iterator'.
19854
19855'ei_safe_safe'
19856     This function returns the 'edge' currently pointed to by an
19857     'edge_iterator', but returns 'NULL' if the iterator is pointing at
19858     the end of the sequence.  This function has been provided for
19859     existing code makes the assumption that a 'NULL' edge indicates the
19860     end of the sequence.
19861
19862 The convenience macro 'FOR_EACH_EDGE' can be used to visit all of the
19863edges in a sequence of predecessor or successor edges.  It must not be
19864used when an element might be removed during the traversal, otherwise
19865elements will be missed.  Here is an example of how to use the macro:
19866
19867     edge e;
19868     edge_iterator ei;
19869
19870     FOR_EACH_EDGE (e, ei, bb->succs)
19871       {
19872          if (e->flags & EDGE_FALLTHRU)
19873            break;
19874       }
19875
19876 There are various reasons why control flow may transfer from one block
19877to another.  One possibility is that some instruction, for example a
19878'CODE_LABEL', in a linearized instruction stream just always starts a
19879new basic block.  In this case a "fall-thru" edge links the basic block
19880to the first following basic block.  But there are several other reasons
19881why edges may be created.  The 'flags' field of the 'edge' data type is
19882used to store information about the type of edge we are dealing with.
19883Each edge is of one of the following types:
19884
19885_jump_
19886     No type flags are set for edges corresponding to jump instructions.
19887     These edges are used for unconditional or conditional jumps and in
19888     RTL also for table jumps.  They are the easiest to manipulate as
19889     they may be freely redirected when the flow graph is not in SSA
19890     form.
19891
19892_fall-thru_
19893     Fall-thru edges are present in case where the basic block may
19894     continue execution to the following one without branching.  These
19895     edges have the 'EDGE_FALLTHRU' flag set.  Unlike other types of
19896     edges, these edges must come into the basic block immediately
19897     following in the instruction stream.  The function
19898     'force_nonfallthru' is available to insert an unconditional jump in
19899     the case that redirection is needed.  Note that this may require
19900     creation of a new basic block.
19901
19902_exception handling_
19903     Exception handling edges represent possible control transfers from
19904     a trapping instruction to an exception handler.  The definition of
19905     "trapping" varies.  In C++, only function calls can throw, but for
19906     Ada exceptions like division by zero or segmentation fault are
19907     defined and thus each instruction possibly throwing this kind of
19908     exception needs to be handled as control flow instruction.
19909     Exception edges have the 'EDGE_ABNORMAL' and 'EDGE_EH' flags set.
19910
19911     When updating the instruction stream it is easy to change possibly
19912     trapping instruction to non-trapping, by simply removing the
19913     exception edge.  The opposite conversion is difficult, but should
19914     not happen anyway.  The edges can be eliminated via
19915     'purge_dead_edges' call.
19916
19917     In the RTL representation, the destination of an exception edge is
19918     specified by 'REG_EH_REGION' note attached to the insn.  In case of
19919     a trapping call the 'EDGE_ABNORMAL_CALL' flag is set too.  In the
19920     'GIMPLE' representation, this extra flag is not set.
19921
19922     In the RTL representation, the predicate 'may_trap_p' may be used
19923     to check whether instruction still may trap or not.  For the tree
19924     representation, the 'tree_could_trap_p' predicate is available, but
19925     this predicate only checks for possible memory traps, as in
19926     dereferencing an invalid pointer location.
19927
19928_sibling calls_
19929     Sibling calls or tail calls terminate the function in a
19930     non-standard way and thus an edge to the exit must be present.
19931     'EDGE_SIBCALL' and 'EDGE_ABNORMAL' are set in such case.  These
19932     edges only exist in the RTL representation.
19933
19934_computed jumps_
19935     Computed jumps contain edges to all labels in the function
19936     referenced from the code.  All those edges have 'EDGE_ABNORMAL'
19937     flag set.  The edges used to represent computed jumps often cause
19938     compile time performance problems, since functions consisting of
19939     many taken labels and many computed jumps may have _very_ dense
19940     flow graphs, so these edges need to be handled with special care.
19941     During the earlier stages of the compilation process, GCC tries to
19942     avoid such dense flow graphs by factoring computed jumps.  For
19943     example, given the following series of jumps,
19944
19945            goto *x;
19946            [ ... ]
19947
19948            goto *x;
19949            [ ... ]
19950
19951            goto *x;
19952            [ ... ]
19953
19954     factoring the computed jumps results in the following code sequence
19955     which has a much simpler flow graph:
19956
19957            goto y;
19958            [ ... ]
19959
19960            goto y;
19961            [ ... ]
19962
19963            goto y;
19964            [ ... ]
19965
19966          y:
19967            goto *x;
19968
19969     However, the classic problem with this transformation is that it
19970     has a runtime cost in there resulting code: An extra jump.
19971     Therefore, the computed jumps are un-factored in the later passes
19972     of the compiler (in the pass called
19973     'pass_duplicate_computed_gotos').  Be aware of that when you work
19974     on passes in that area.  There have been numerous examples already
19975     where the compile time for code with unfactored computed jumps
19976     caused some serious headaches.
19977
19978_nonlocal goto handlers_
19979     GCC allows nested functions to return into caller using a 'goto' to
19980     a label passed to as an argument to the callee.  The labels passed
19981     to nested functions contain special code to cleanup after function
19982     call.  Such sections of code are referred to as "nonlocal goto
19983     receivers".  If a function contains such nonlocal goto receivers,
19984     an edge from the call to the label is created with the
19985     'EDGE_ABNORMAL' and 'EDGE_ABNORMAL_CALL' flags set.
19986
19987_function entry points_
19988     By definition, execution of function starts at basic block 0, so
19989     there is always an edge from the 'ENTRY_BLOCK_PTR' to basic block
19990     0.  There is no 'GIMPLE' representation for alternate entry points
19991     at this moment.  In RTL, alternate entry points are specified by
19992     'CODE_LABEL' with 'LABEL_ALTERNATE_NAME' defined.  This feature is
19993     currently used for multiple entry point prologues and is limited to
19994     post-reload passes only.  This can be used by back-ends to emit
19995     alternate prologues for functions called from different contexts.
19996     In future full support for multiple entry functions defined by
19997     Fortran 90 needs to be implemented.
19998
19999_function exits_
20000     In the pre-reload representation a function terminates after the
20001     last instruction in the insn chain and no explicit return
20002     instructions are used.  This corresponds to the fall-thru edge into
20003     exit block.  After reload, optimal RTL epilogues are used that use
20004     explicit (conditional) return instructions that are represented by
20005     edges with no flags set.
20006
20007
20008File: gccint.info,  Node: Profile information,  Next: Maintaining the CFG,  Prev: Edges,  Up: Control Flow
20009
2001015.3 Profile information
20011========================
20012
20013In many cases a compiler must make a choice whether to trade speed in
20014one part of code for speed in another, or to trade code size for code
20015speed.  In such cases it is useful to know information about how often
20016some given block will be executed.  That is the purpose for maintaining
20017profile within the flow graph.  GCC can handle profile information
20018obtained through "profile feedback", but it can also estimate branch
20019probabilities based on statics and heuristics.
20020
20021 The feedback based profile is produced by compiling the program with
20022instrumentation, executing it on a train run and reading the numbers of
20023executions of basic blocks and edges back to the compiler while
20024re-compiling the program to produce the final executable.  This method
20025provides very accurate information about where a program spends most of
20026its time on the train run.  Whether it matches the average run of course
20027depends on the choice of train data set, but several studies have shown
20028that the behavior of a program usually changes just marginally over
20029different data sets.
20030
20031 When profile feedback is not available, the compiler may be asked to
20032attempt to predict the behavior of each branch in the program using a
20033set of heuristics (see 'predict.def' for details) and compute estimated
20034frequencies of each basic block by propagating the probabilities over
20035the graph.
20036
20037 Each 'basic_block' contains two integer fields to represent profile
20038information: 'frequency' and 'count'.  The 'frequency' is an estimation
20039how often is basic block executed within a function.  It is represented
20040as an integer scaled in the range from 0 to 'BB_FREQ_BASE'.  The most
20041frequently executed basic block in function is initially set to
20042'BB_FREQ_BASE' and the rest of frequencies are scaled accordingly.
20043During optimization, the frequency of the most frequent basic block can
20044both decrease (for instance by loop unrolling) or grow (for instance by
20045cross-jumping optimization), so scaling sometimes has to be performed
20046multiple times.
20047
20048 The 'count' contains hard-counted numbers of execution measured during
20049training runs and is nonzero only when profile feedback is available.
20050This value is represented as the host's widest integer (typically a 64
20051bit integer) of the special type 'gcov_type'.
20052
20053 Most optimization passes can use only the frequency information of a
20054basic block, but a few passes may want to know hard execution counts.
20055The frequencies should always match the counts after scaling, however
20056during updating of the profile information numerical error may
20057accumulate into quite large errors.
20058
20059 Each edge also contains a branch probability field: an integer in the
20060range from 0 to 'REG_BR_PROB_BASE'.  It represents probability of
20061passing control from the end of the 'src' basic block to the 'dest'
20062basic block, i.e. the probability that control will flow along this
20063edge.  The 'EDGE_FREQUENCY' macro is available to compute how frequently
20064a given edge is taken.  There is a 'count' field for each edge as well,
20065representing same information as for a basic block.
20066
20067 The basic block frequencies are not represented in the instruction
20068stream, but in the RTL representation the edge frequencies are
20069represented for conditional jumps (via the 'REG_BR_PROB' macro) since
20070they are used when instructions are output to the assembly file and the
20071flow graph is no longer maintained.
20072
20073 The probability that control flow arrives via a given edge to its
20074destination basic block is called "reverse probability" and is not
20075directly represented, but it may be easily computed from frequencies of
20076basic blocks.
20077
20078 Updating profile information is a delicate task that can unfortunately
20079not be easily integrated with the CFG manipulation API.  Many of the
20080functions and hooks to modify the CFG, such as
20081'redirect_edge_and_branch', do not have enough information to easily
20082update the profile, so updating it is in the majority of cases left up
20083to the caller.  It is difficult to uncover bugs in the profile updating
20084code, because they manifest themselves only by producing worse code, and
20085checking profile consistency is not possible because of numeric error
20086accumulation.  Hence special attention needs to be given to this issue
20087in each pass that modifies the CFG.
20088
20089 It is important to point out that 'REG_BR_PROB_BASE' and 'BB_FREQ_BASE'
20090are both set low enough to be possible to compute second power of any
20091frequency or probability in the flow graph, it is not possible to even
20092square the 'count' field, as modern CPUs are fast enough to execute
20093$2^32$ operations quickly.
20094
20095
20096File: gccint.info,  Node: Maintaining the CFG,  Next: Liveness information,  Prev: Profile information,  Up: Control Flow
20097
2009815.4 Maintaining the CFG
20099========================
20100
20101An important task of each compiler pass is to keep both the control flow
20102graph and all profile information up-to-date.  Reconstruction of the
20103control flow graph after each pass is not an option, since it may be
20104very expensive and lost profile information cannot be reconstructed at
20105all.
20106
20107 GCC has two major intermediate representations, and both use the
20108'basic_block' and 'edge' data types to represent control flow.  Both
20109representations share as much of the CFG maintenance code as possible.
20110For each representation, a set of "hooks" is defined so that each
20111representation can provide its own implementation of CFG manipulation
20112routines when necessary.  These hooks are defined in 'cfghooks.h'.
20113There are hooks for almost all common CFG manipulations, including block
20114splitting and merging, edge redirection and creating and deleting basic
20115blocks.  These hooks should provide everything you need to maintain and
20116manipulate the CFG in both the RTL and 'GIMPLE' representation.
20117
20118 At the moment, the basic block boundaries are maintained transparently
20119when modifying instructions, so there rarely is a need to move them
20120manually (such as in case someone wants to output instruction outside
20121basic block explicitly).
20122
20123 In the RTL representation, each instruction has a 'BLOCK_FOR_INSN'
20124value that represents pointer to the basic block that contains the
20125instruction.  In the 'GIMPLE' representation, the function 'gimple_bb'
20126returns a pointer to the basic block containing the queried statement.
20127
20128 When changes need to be applied to a function in its 'GIMPLE'
20129representation, "GIMPLE statement iterators" should be used.  These
20130iterators provide an integrated abstraction of the flow graph and the
20131instruction stream.  Block statement iterators are constructed using the
20132'gimple_stmt_iterator' data structure and several modifiers are
20133available, including the following:
20134
20135'gsi_start'
20136     This function initializes a 'gimple_stmt_iterator' that points to
20137     the first non-empty statement in a basic block.
20138
20139'gsi_last'
20140     This function initializes a 'gimple_stmt_iterator' that points to
20141     the last statement in a basic block.
20142
20143'gsi_end_p'
20144     This predicate is 'true' if a 'gimple_stmt_iterator' represents the
20145     end of a basic block.
20146
20147'gsi_next'
20148     This function takes a 'gimple_stmt_iterator' and makes it point to
20149     its successor.
20150
20151'gsi_prev'
20152     This function takes a 'gimple_stmt_iterator' and makes it point to
20153     its predecessor.
20154
20155'gsi_insert_after'
20156     This function inserts a statement after the 'gimple_stmt_iterator'
20157     passed in.  The final parameter determines whether the statement
20158     iterator is updated to point to the newly inserted statement, or
20159     left pointing to the original statement.
20160
20161'gsi_insert_before'
20162     This function inserts a statement before the 'gimple_stmt_iterator'
20163     passed in.  The final parameter determines whether the statement
20164     iterator is updated to point to the newly inserted statement, or
20165     left pointing to the original statement.
20166
20167'gsi_remove'
20168     This function removes the 'gimple_stmt_iterator' passed in and
20169     rechains the remaining statements in a basic block, if any.
20170
20171 In the RTL representation, the macros 'BB_HEAD' and 'BB_END' may be
20172used to get the head and end 'rtx' of a basic block.  No abstract
20173iterators are defined for traversing the insn chain, but you can just
20174use 'NEXT_INSN' and 'PREV_INSN' instead.  *Note Insns::.
20175
20176 Usually a code manipulating pass simplifies the instruction stream and
20177the flow of control, possibly eliminating some edges.  This may for
20178example happen when a conditional jump is replaced with an unconditional
20179jump.  Updating of edges is not transparent and each optimization pass
20180is required to do so manually.  However only few cases occur in
20181practice.  The pass may call 'purge_dead_edges' on a given basic block
20182to remove superfluous edges, if any.
20183
20184 Another common scenario is redirection of branch instructions, but this
20185is best modeled as redirection of edges in the control flow graph and
20186thus use of 'redirect_edge_and_branch' is preferred over more low level
20187functions, such as 'redirect_jump' that operate on RTL chain only.  The
20188CFG hooks defined in 'cfghooks.h' should provide the complete API
20189required for manipulating and maintaining the CFG.
20190
20191 It is also possible that a pass has to insert control flow instruction
20192into the middle of a basic block, thus creating an entry point in the
20193middle of the basic block, which is impossible by definition: The block
20194must be split to make sure it only has one entry point, i.e. the head of
20195the basic block.  The CFG hook 'split_block' may be used when an
20196instruction in the middle of a basic block has to become the target of a
20197jump or branch instruction.
20198
20199 For a global optimizer, a common operation is to split edges in the
20200flow graph and insert instructions on them.  In the RTL representation,
20201this can be easily done using the 'insert_insn_on_edge' function that
20202emits an instruction "on the edge", caching it for a later
20203'commit_edge_insertions' call that will take care of moving the inserted
20204instructions off the edge into the instruction stream contained in a
20205basic block.  This includes the creation of new basic blocks where
20206needed.  In the 'GIMPLE' representation, the equivalent functions are
20207'gsi_insert_on_edge' which inserts a block statement iterator on an
20208edge, and 'gsi_commit_edge_inserts' which flushes the instruction to
20209actual instruction stream.
20210
20211 While debugging the optimization pass, the 'verify_flow_info' function
20212may be useful to find bugs in the control flow graph updating code.
20213
20214
20215File: gccint.info,  Node: Liveness information,  Prev: Maintaining the CFG,  Up: Control Flow
20216
2021715.5 Liveness information
20218=========================
20219
20220Liveness information is useful to determine whether some register is
20221"live" at given point of program, i.e. that it contains a value that may
20222be used at a later point in the program.  This information is used, for
20223instance, during register allocation, as the pseudo registers only need
20224to be assigned to a unique hard register or to a stack slot if they are
20225live.  The hard registers and stack slots may be freely reused for other
20226values when a register is dead.
20227
20228 Liveness information is available in the back end starting with
20229'pass_df_initialize' and ending with 'pass_df_finish'.  Three flavors of
20230live analysis are available: With 'LR', it is possible to determine at
20231any point 'P' in the function if the register may be used on some path
20232from 'P' to the end of the function.  With 'UR', it is possible to
20233determine if there is a path from the beginning of the function to 'P'
20234that defines the variable.  'LIVE' is the intersection of the 'LR' and
20235'UR' and a variable is live at 'P' if there is both an assignment that
20236reaches it from the beginning of the function and a use that can be
20237reached on some path from 'P' to the end of the function.
20238
20239 In general 'LIVE' is the most useful of the three.  The macros
20240'DF_[LR,UR,LIVE]_[IN,OUT]' can be used to access this information.  The
20241macros take a basic block number and return a bitmap that is indexed by
20242the register number.  This information is only guaranteed to be up to
20243date after calls are made to 'df_analyze'.  See the file 'df-core.c' for
20244details on using the dataflow.
20245
20246 The liveness information is stored partly in the RTL instruction stream
20247and partly in the flow graph.  Local information is stored in the
20248instruction stream: Each instruction may contain 'REG_DEAD' notes
20249representing that the value of a given register is no longer needed, or
20250'REG_UNUSED' notes representing that the value computed by the
20251instruction is never used.  The second is useful for instructions
20252computing multiple values at once.
20253
20254
20255File: gccint.info,  Node: Loop Analysis and Representation,  Next: Machine Desc,  Prev: Control Flow,  Up: Top
20256
2025716 Analysis and Representation of Loops
20258***************************************
20259
20260GCC provides extensive infrastructure for work with natural loops, i.e.,
20261strongly connected components of CFG with only one entry block.  This
20262chapter describes representation of loops in GCC, both on GIMPLE and in
20263RTL, as well as the interfaces to loop-related analyses (induction
20264variable analysis and number of iterations analysis).
20265
20266* Menu:
20267
20268* Loop representation::         Representation and analysis of loops.
20269* Loop querying::               Getting information about loops.
20270* Loop manipulation::           Loop manipulation functions.
20271* LCSSA::                       Loop-closed SSA form.
20272* Scalar evolutions::           Induction variables on GIMPLE.
20273* loop-iv::                     Induction variables on RTL.
20274* Number of iterations::        Number of iterations analysis.
20275* Dependency analysis::         Data dependency analysis.
20276
20277
20278File: gccint.info,  Node: Loop representation,  Next: Loop querying,  Up: Loop Analysis and Representation
20279
2028016.1 Loop representation
20281========================
20282
20283This chapter describes the representation of loops in GCC, and functions
20284that can be used to build, modify and analyze this representation.  Most
20285of the interfaces and data structures are declared in 'cfgloop.h'.  Loop
20286structures are analyzed and this information disposed or updated at the
20287discretion of individual passes.  Still most of the generic CFG
20288manipulation routines are aware of loop structures and try to keep them
20289up-to-date.  By this means an increasing part of the compilation
20290pipeline is setup to maintain loop structure across passes to allow
20291attaching meta information to individual loops for consumption by later
20292passes.
20293
20294 In general, a natural loop has one entry block (header) and possibly
20295several back edges (latches) leading to the header from the inside of
20296the loop.  Loops with several latches may appear if several loops share
20297a single header, or if there is a branching in the middle of the loop.
20298The representation of loops in GCC however allows only loops with a
20299single latch.  During loop analysis, headers of such loops are split and
20300forwarder blocks are created in order to disambiguate their structures.
20301Heuristic based on profile information and structure of the induction
20302variables in the loops is used to determine whether the latches
20303correspond to sub-loops or to control flow in a single loop.  This means
20304that the analysis sometimes changes the CFG, and if you run it in the
20305middle of an optimization pass, you must be able to deal with the new
20306blocks.  You may avoid CFG changes by passing
20307'LOOPS_MAY_HAVE_MULTIPLE_LATCHES' flag to the loop discovery, note
20308however that most other loop manipulation functions will not work
20309correctly for loops with multiple latch edges (the functions that only
20310query membership of blocks to loops and subloop relationships, or
20311enumerate and test loop exits, can be expected to work).
20312
20313 Body of the loop is the set of blocks that are dominated by its header,
20314and reachable from its latch against the direction of edges in CFG.  The
20315loops are organized in a containment hierarchy (tree) such that all the
20316loops immediately contained inside loop L are the children of L in the
20317tree.  This tree is represented by the 'struct loops' structure.  The
20318root of this tree is a fake loop that contains all blocks in the
20319function.  Each of the loops is represented in a 'struct loop'
20320structure.  Each loop is assigned an index ('num' field of the 'struct
20321loop' structure), and the pointer to the loop is stored in the
20322corresponding field of the 'larray' vector in the loops structure.  The
20323indices do not have to be continuous, there may be empty ('NULL')
20324entries in the 'larray' created by deleting loops.  Also, there is no
20325guarantee on the relative order of a loop and its subloops in the
20326numbering.  The index of a loop never changes.
20327
20328 The entries of the 'larray' field should not be accessed directly.  The
20329function 'get_loop' returns the loop description for a loop with the
20330given index.  'number_of_loops' function returns number of loops in the
20331function.  To traverse all loops, use 'FOR_EACH_LOOP' macro.  The
20332'flags' argument of the macro is used to determine the direction of
20333traversal and the set of loops visited.  Each loop is guaranteed to be
20334visited exactly once, regardless of the changes to the loop tree, and
20335the loops may be removed during the traversal.  The newly created loops
20336are never traversed, if they need to be visited, this must be done
20337separately after their creation.
20338
20339 Each basic block contains the reference to the innermost loop it
20340belongs to ('loop_father').  For this reason, it is only possible to
20341have one 'struct loops' structure initialized at the same time for each
20342CFG.  The global variable 'current_loops' contains the 'struct loops'
20343structure.  Many of the loop manipulation functions assume that
20344dominance information is up-to-date.
20345
20346 The loops are analyzed through 'loop_optimizer_init' function.  The
20347argument of this function is a set of flags represented in an integer
20348bitmask.  These flags specify what other properties of the loop
20349structures should be calculated/enforced and preserved later:
20350
20351   * 'LOOPS_MAY_HAVE_MULTIPLE_LATCHES': If this flag is set, no changes
20352     to CFG will be performed in the loop analysis, in particular, loops
20353     with multiple latch edges will not be disambiguated.  If a loop has
20354     multiple latches, its latch block is set to NULL.  Most of the loop
20355     manipulation functions will not work for loops in this shape.  No
20356     other flags that require CFG changes can be passed to
20357     loop_optimizer_init.
20358   * 'LOOPS_HAVE_PREHEADERS': Forwarder blocks are created in such a way
20359     that each loop has only one entry edge, and additionally, the
20360     source block of this entry edge has only one successor.  This
20361     creates a natural place where the code can be moved out of the
20362     loop, and ensures that the entry edge of the loop leads from its
20363     immediate super-loop.
20364   * 'LOOPS_HAVE_SIMPLE_LATCHES': Forwarder blocks are created to force
20365     the latch block of each loop to have only one successor.  This
20366     ensures that the latch of the loop does not belong to any of its
20367     sub-loops, and makes manipulation with the loops significantly
20368     easier.  Most of the loop manipulation functions assume that the
20369     loops are in this shape.  Note that with this flag, the "normal"
20370     loop without any control flow inside and with one exit consists of
20371     two basic blocks.
20372   * 'LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS': Basic blocks and edges in
20373     the strongly connected components that are not natural loops (have
20374     more than one entry block) are marked with 'BB_IRREDUCIBLE_LOOP'
20375     and 'EDGE_IRREDUCIBLE_LOOP' flags.  The flag is not set for blocks
20376     and edges that belong to natural loops that are in such an
20377     irreducible region (but it is set for the entry and exit edges of
20378     such a loop, if they lead to/from this region).
20379   * 'LOOPS_HAVE_RECORDED_EXITS': The lists of exits are recorded and
20380     updated for each loop.  This makes some functions (e.g.,
20381     'get_loop_exit_edges') more efficient.  Some functions (e.g.,
20382     'single_exit') can be used only if the lists of exits are recorded.
20383
20384 These properties may also be computed/enforced later, using functions
20385'create_preheaders', 'force_single_succ_latches',
20386'mark_irreducible_loops' and 'record_loop_exits'.  The properties can be
20387queried using 'loops_state_satisfies_p'.
20388
20389 The memory occupied by the loops structures should be freed with
20390'loop_optimizer_finalize' function.  When loop structures are setup to
20391be preserved across passes this function reduces the information to be
20392kept up-to-date to a minimum (only 'LOOPS_MAY_HAVE_MULTIPLE_LATCHES'
20393set).
20394
20395 The CFG manipulation functions in general do not update loop
20396structures.  Specialized versions that additionally do so are provided
20397for the most common tasks.  On GIMPLE, 'cleanup_tree_cfg_loop' function
20398can be used to cleanup CFG while updating the loops structures if
20399'current_loops' is set.
20400
20401 At the moment loop structure is preserved from the start of GIMPLE loop
20402optimizations until the end of RTL loop optimizations.  During this time
20403a loop can be tracked by its 'struct loop' and number.
20404
20405
20406File: gccint.info,  Node: Loop querying,  Next: Loop manipulation,  Prev: Loop representation,  Up: Loop Analysis and Representation
20407
2040816.2 Loop querying
20409==================
20410
20411The functions to query the information about loops are declared in
20412'cfgloop.h'.  Some of the information can be taken directly from the
20413structures.  'loop_father' field of each basic block contains the
20414innermost loop to that the block belongs.  The most useful fields of
20415loop structure (that are kept up-to-date at all times) are:
20416
20417   * 'header', 'latch': Header and latch basic blocks of the loop.
20418   * 'num_nodes': Number of basic blocks in the loop (including the
20419     basic blocks of the sub-loops).
20420   * 'outer', 'inner', 'next': The super-loop, the first sub-loop, and
20421     the sibling of the loop in the loops tree.
20422
20423 There are other fields in the loop structures, many of them used only
20424by some of the passes, or not updated during CFG changes; in general,
20425they should not be accessed directly.
20426
20427 The most important functions to query loop structures are:
20428
20429   * 'loop_depth': The depth of the loop in the loops tree, i.e., the
20430     number of super-loops of the loop.
20431   * 'flow_loops_dump': Dumps the information about loops to a file.
20432   * 'verify_loop_structure': Checks consistency of the loop structures.
20433   * 'loop_latch_edge': Returns the latch edge of a loop.
20434   * 'loop_preheader_edge': If loops have preheaders, returns the
20435     preheader edge of a loop.
20436   * 'flow_loop_nested_p': Tests whether loop is a sub-loop of another
20437     loop.
20438   * 'flow_bb_inside_loop_p': Tests whether a basic block belongs to a
20439     loop (including its sub-loops).
20440   * 'find_common_loop': Finds the common super-loop of two loops.
20441   * 'superloop_at_depth': Returns the super-loop of a loop with the
20442     given depth.
20443   * 'tree_num_loop_insns', 'num_loop_insns': Estimates the number of
20444     insns in the loop, on GIMPLE and on RTL.
20445   * 'loop_exit_edge_p': Tests whether edge is an exit from a loop.
20446   * 'mark_loop_exit_edges': Marks all exit edges of all loops with
20447     'EDGE_LOOP_EXIT' flag.
20448   * 'get_loop_body', 'get_loop_body_in_dom_order',
20449     'get_loop_body_in_bfs_order': Enumerates the basic blocks in the
20450     loop in depth-first search order in reversed CFG, ordered by
20451     dominance relation, and breath-first search order, respectively.
20452   * 'single_exit': Returns the single exit edge of the loop, or 'NULL'
20453     if the loop has more than one exit.  You can only use this function
20454     if LOOPS_HAVE_MARKED_SINGLE_EXITS property is used.
20455   * 'get_loop_exit_edges': Enumerates the exit edges of a loop.
20456   * 'just_once_each_iteration_p': Returns true if the basic block is
20457     executed exactly once during each iteration of a loop (that is, it
20458     does not belong to a sub-loop, and it dominates the latch of the
20459     loop).
20460
20461
20462File: gccint.info,  Node: Loop manipulation,  Next: LCSSA,  Prev: Loop querying,  Up: Loop Analysis and Representation
20463
2046416.3 Loop manipulation
20465======================
20466
20467The loops tree can be manipulated using the following functions:
20468
20469   * 'flow_loop_tree_node_add': Adds a node to the tree.
20470   * 'flow_loop_tree_node_remove': Removes a node from the tree.
20471   * 'add_bb_to_loop': Adds a basic block to a loop.
20472   * 'remove_bb_from_loops': Removes a basic block from loops.
20473
20474 Most low-level CFG functions update loops automatically.  The following
20475functions handle some more complicated cases of CFG manipulations:
20476
20477   * 'remove_path': Removes an edge and all blocks it dominates.
20478   * 'split_loop_exit_edge': Splits exit edge of the loop, ensuring that
20479     PHI node arguments remain in the loop (this ensures that
20480     loop-closed SSA form is preserved).  Only useful on GIMPLE.
20481
20482 Finally, there are some higher-level loop transformations implemented.
20483While some of them are written so that they should work on non-innermost
20484loops, they are mostly untested in that case, and at the moment, they
20485are only reliable for the innermost loops:
20486
20487   * 'create_iv': Creates a new induction variable.  Only works on
20488     GIMPLE.  'standard_iv_increment_position' can be used to find a
20489     suitable place for the iv increment.
20490   * 'duplicate_loop_to_header_edge',
20491     'tree_duplicate_loop_to_header_edge': These functions (on RTL and
20492     on GIMPLE) duplicate the body of the loop prescribed number of
20493     times on one of the edges entering loop header, thus performing
20494     either loop unrolling or loop peeling.  'can_duplicate_loop_p'
20495     ('can_unroll_loop_p' on GIMPLE) must be true for the duplicated
20496     loop.
20497   * 'loop_version': This function creates a copy of a loop, and a
20498     branch before them that selects one of them depending on the
20499     prescribed condition.  This is useful for optimizations that need
20500     to verify some assumptions in runtime (one of the copies of the
20501     loop is usually left unchanged, while the other one is transformed
20502     in some way).
20503   * 'tree_unroll_loop': Unrolls the loop, including peeling the extra
20504     iterations to make the number of iterations divisible by unroll
20505     factor, updating the exit condition, and removing the exits that
20506     now cannot be taken.  Works only on GIMPLE.
20507
20508
20509File: gccint.info,  Node: LCSSA,  Next: Scalar evolutions,  Prev: Loop manipulation,  Up: Loop Analysis and Representation
20510
2051116.4 Loop-closed SSA form
20512=========================
20513
20514Throughout the loop optimizations on tree level, one extra condition is
20515enforced on the SSA form: No SSA name is used outside of the loop in
20516that it is defined.  The SSA form satisfying this condition is called
20517"loop-closed SSA form" - LCSSA.  To enforce LCSSA, PHI nodes must be
20518created at the exits of the loops for the SSA names that are used
20519outside of them.  Only the real operands (not virtual SSA names) are
20520held in LCSSA, in order to save memory.
20521
20522 There are various benefits of LCSSA:
20523
20524   * Many optimizations (value range analysis, final value replacement)
20525     are interested in the values that are defined in the loop and used
20526     outside of it, i.e., exactly those for that we create new PHI
20527     nodes.
20528   * In induction variable analysis, it is not necessary to specify the
20529     loop in that the analysis should be performed - the scalar
20530     evolution analysis always returns the results with respect to the
20531     loop in that the SSA name is defined.
20532   * It makes updating of SSA form during loop transformations simpler.
20533     Without LCSSA, operations like loop unrolling may force creation of
20534     PHI nodes arbitrarily far from the loop, while in LCSSA, the SSA
20535     form can be updated locally.  However, since we only keep real
20536     operands in LCSSA, we cannot use this advantage (we could have
20537     local updating of real operands, but it is not much more efficient
20538     than to use generic SSA form updating for it as well; the amount of
20539     changes to SSA is the same).
20540
20541 However, it also means LCSSA must be updated.  This is usually
20542straightforward, unless you create a new value in loop and use it
20543outside, or unless you manipulate loop exit edges (functions are
20544provided to make these manipulations simple).
20545'rewrite_into_loop_closed_ssa' is used to rewrite SSA form to LCSSA, and
20546'verify_loop_closed_ssa' to check that the invariant of LCSSA is
20547preserved.
20548
20549
20550File: gccint.info,  Node: Scalar evolutions,  Next: loop-iv,  Prev: LCSSA,  Up: Loop Analysis and Representation
20551
2055216.5 Scalar evolutions
20553======================
20554
20555Scalar evolutions (SCEV) are used to represent results of induction
20556variable analysis on GIMPLE.  They enable us to represent variables with
20557complicated behavior in a simple and consistent way (we only use it to
20558express values of polynomial induction variables, but it is possible to
20559extend it).  The interfaces to SCEV analysis are declared in
20560'tree-scalar-evolution.h'.  To use scalar evolutions analysis,
20561'scev_initialize' must be used.  To stop using SCEV, 'scev_finalize'
20562should be used.  SCEV analysis caches results in order to save time and
20563memory.  This cache however is made invalid by most of the loop
20564transformations, including removal of code.  If such a transformation is
20565performed, 'scev_reset' must be called to clean the caches.
20566
20567 Given an SSA name, its behavior in loops can be analyzed using the
20568'analyze_scalar_evolution' function.  The returned SCEV however does not
20569have to be fully analyzed and it may contain references to other SSA
20570names defined in the loop.  To resolve these (potentially recursive)
20571references, 'instantiate_parameters' or 'resolve_mixers' functions must
20572be used.  'instantiate_parameters' is useful when you use the results of
20573SCEV only for some analysis, and when you work with whole nest of loops
20574at once.  It will try replacing all SSA names by their SCEV in all
20575loops, including the super-loops of the current loop, thus providing a
20576complete information about the behavior of the variable in the loop
20577nest.  'resolve_mixers' is useful if you work with only one loop at a
20578time, and if you possibly need to create code based on the value of the
20579induction variable.  It will only resolve the SSA names defined in the
20580current loop, leaving the SSA names defined outside unchanged, even if
20581their evolution in the outer loops is known.
20582
20583 The SCEV is a normal tree expression, except for the fact that it may
20584contain several special tree nodes.  One of them is 'SCEV_NOT_KNOWN',
20585used for SSA names whose value cannot be expressed.  The other one is
20586'POLYNOMIAL_CHREC'.  Polynomial chrec has three arguments - base, step
20587and loop (both base and step may contain further polynomial chrecs).
20588Type of the expression and of base and step must be the same.  A
20589variable has evolution 'POLYNOMIAL_CHREC(base, step, loop)' if it is (in
20590the specified loop) equivalent to 'x_1' in the following example
20591
20592     while (...)
20593       {
20594         x_1 = phi (base, x_2);
20595         x_2 = x_1 + step;
20596       }
20597
20598 Note that this includes the language restrictions on the operations.
20599For example, if we compile C code and 'x' has signed type, then the
20600overflow in addition would cause undefined behavior, and we may assume
20601that this does not happen.  Hence, the value with this SCEV cannot
20602overflow (which restricts the number of iterations of such a loop).
20603
20604 In many cases, one wants to restrict the attention just to affine
20605induction variables.  In this case, the extra expressive power of SCEV
20606is not useful, and may complicate the optimizations.  In this case,
20607'simple_iv' function may be used to analyze a value - the result is a
20608loop-invariant base and step.
20609
20610
20611File: gccint.info,  Node: loop-iv,  Next: Number of iterations,  Prev: Scalar evolutions,  Up: Loop Analysis and Representation
20612
2061316.6 IV analysis on RTL
20614=======================
20615
20616The induction variable on RTL is simple and only allows analysis of
20617affine induction variables, and only in one loop at once.  The interface
20618is declared in 'cfgloop.h'.  Before analyzing induction variables in a
20619loop L, 'iv_analysis_loop_init' function must be called on L. After the
20620analysis (possibly calling 'iv_analysis_loop_init' for several loops) is
20621finished, 'iv_analysis_done' should be called.  The following functions
20622can be used to access the results of the analysis:
20623
20624   * 'iv_analyze': Analyzes a single register used in the given insn.
20625     If no use of the register in this insn is found, the following
20626     insns are scanned, so that this function can be called on the insn
20627     returned by get_condition.
20628   * 'iv_analyze_result': Analyzes result of the assignment in the given
20629     insn.
20630   * 'iv_analyze_expr': Analyzes a more complicated expression.  All its
20631     operands are analyzed by 'iv_analyze', and hence they must be used
20632     in the specified insn or one of the following insns.
20633
20634 The description of the induction variable is provided in 'struct
20635rtx_iv'.  In order to handle subregs, the representation is a bit
20636complicated; if the value of the 'extend' field is not 'UNKNOWN', the
20637value of the induction variable in the i-th iteration is
20638
20639     delta + mult * extend_{extend_mode} (subreg_{mode} (base + i * step)),
20640
20641 with the following exception: if 'first_special' is true, then the
20642value in the first iteration (when 'i' is zero) is 'delta + mult *
20643base'.  However, if 'extend' is equal to 'UNKNOWN', then 'first_special'
20644must be false, 'delta' 0, 'mult' 1 and the value in the i-th iteration
20645is
20646
20647     subreg_{mode} (base + i * step)
20648
20649 The function 'get_iv_value' can be used to perform these calculations.
20650
20651
20652File: gccint.info,  Node: Number of iterations,  Next: Dependency analysis,  Prev: loop-iv,  Up: Loop Analysis and Representation
20653
2065416.7 Number of iterations analysis
20655==================================
20656
20657Both on GIMPLE and on RTL, there are functions available to determine
20658the number of iterations of a loop, with a similar interface.  The
20659number of iterations of a loop in GCC is defined as the number of
20660executions of the loop latch.  In many cases, it is not possible to
20661determine the number of iterations unconditionally - the determined
20662number is correct only if some assumptions are satisfied.  The analysis
20663tries to verify these conditions using the information contained in the
20664program; if it fails, the conditions are returned together with the
20665result.  The following information and conditions are provided by the
20666analysis:
20667
20668   * 'assumptions': If this condition is false, the rest of the
20669     information is invalid.
20670   * 'noloop_assumptions' on RTL, 'may_be_zero' on GIMPLE: If this
20671     condition is true, the loop exits in the first iteration.
20672   * 'infinite': If this condition is true, the loop is infinite.  This
20673     condition is only available on RTL.  On GIMPLE, conditions for
20674     finiteness of the loop are included in 'assumptions'.
20675   * 'niter_expr' on RTL, 'niter' on GIMPLE: The expression that gives
20676     number of iterations.  The number of iterations is defined as the
20677     number of executions of the loop latch.
20678
20679 Both on GIMPLE and on RTL, it necessary for the induction variable
20680analysis framework to be initialized (SCEV on GIMPLE, loop-iv on RTL).
20681On GIMPLE, the results are stored to 'struct tree_niter_desc' structure.
20682Number of iterations before the loop is exited through a given exit can
20683be determined using 'number_of_iterations_exit' function.  On RTL, the
20684results are returned in 'struct niter_desc' structure.  The
20685corresponding function is named 'check_simple_exit'.  There are also
20686functions that pass through all the exits of a loop and try to find one
20687with easy to determine number of iterations - 'find_loop_niter' on
20688GIMPLE and 'find_simple_exit' on RTL.  Finally, there are functions that
20689provide the same information, but additionally cache it, so that
20690repeated calls to number of iterations are not so costly -
20691'number_of_latch_executions' on GIMPLE and 'get_simple_loop_desc' on
20692RTL.
20693
20694 Note that some of these functions may behave slightly differently than
20695others - some of them return only the expression for the number of
20696iterations, and fail if there are some assumptions.  The function
20697'number_of_latch_executions' works only for single-exit loops.  The
20698function 'number_of_cond_exit_executions' can be used to determine
20699number of executions of the exit condition of a single-exit loop (i.e.,
20700the 'number_of_latch_executions' increased by one).
20701
20702 On GIMPLE, below constraint flags affect semantics of some APIs of
20703number of iterations analyzer:
20704
20705   * 'LOOP_C_INFINITE': If this constraint flag is set, the loop is
20706     known to be infinite.  APIs like 'number_of_iterations_exit' can
20707     return false directly without doing any analysis.
20708   * 'LOOP_C_FINITE': If this constraint flag is set, the loop is known
20709     to be finite, in other words, loop's number of iterations can be
20710     computed with 'assumptions' be true.
20711
20712 Generally, the constraint flags are set/cleared by consumers which are
20713loop optimizers.  It's also the consumers' responsibility to set/clear
20714constraints correctly.  Failing to do that might result in hard to track
20715down bugs in scev/niter consumers.  One typical use case is vectorizer:
20716it drives number of iterations analyzer by setting 'LOOP_C_FINITE' and
20717vectorizes possibly infinite loop by versioning loop with analysis
20718result.  In return, constraints set by consumers can also help number of
20719iterations analyzer in following optimizers.  For example, 'niter' of a
20720loop versioned under 'assumptions' is valid unconditionally.
20721
20722 Other constraints may be added in the future, for example, a constraint
20723indicating that loops' latch must roll thus 'may_be_zero' would be false
20724unconditionally.
20725
20726
20727File: gccint.info,  Node: Dependency analysis,  Prev: Number of iterations,  Up: Loop Analysis and Representation
20728
2072916.8 Data Dependency Analysis
20730=============================
20731
20732The code for the data dependence analysis can be found in
20733'tree-data-ref.c' and its interface and data structures are described in
20734'tree-data-ref.h'.  The function that computes the data dependences for
20735all the array and pointer references for a given loop is
20736'compute_data_dependences_for_loop'.  This function is currently used by
20737the linear loop transform and the vectorization passes.  Before calling
20738this function, one has to allocate two vectors: a first vector will
20739contain the set of data references that are contained in the analyzed
20740loop body, and the second vector will contain the dependence relations
20741between the data references.  Thus if the vector of data references is
20742of size 'n', the vector containing the dependence relations will contain
20743'n*n' elements.  However if the analyzed loop contains side effects,
20744such as calls that potentially can interfere with the data references in
20745the current analyzed loop, the analysis stops while scanning the loop
20746body for data references, and inserts a single 'chrec_dont_know' in the
20747dependence relation array.
20748
20749 The data references are discovered in a particular order during the
20750scanning of the loop body: the loop body is analyzed in execution order,
20751and the data references of each statement are pushed at the end of the
20752data reference array.  Two data references syntactically occur in the
20753program in the same order as in the array of data references.  This
20754syntactic order is important in some classical data dependence tests,
20755and mapping this order to the elements of this array avoids costly
20756queries to the loop body representation.
20757
20758 Three types of data references are currently handled: ARRAY_REF,
20759INDIRECT_REF and COMPONENT_REF.  The data structure for the data
20760reference is 'data_reference', where 'data_reference_p' is a name of a
20761pointer to the data reference structure.  The structure contains the
20762following elements:
20763
20764   * 'base_object_info': Provides information about the base object of
20765     the data reference and its access functions.  These access
20766     functions represent the evolution of the data reference in the loop
20767     relative to its base, in keeping with the classical meaning of the
20768     data reference access function for the support of arrays.  For
20769     example, for a reference 'a.b[i][j]', the base object is 'a.b' and
20770     the access functions, one for each array subscript, are: '{i_init,
20771     + i_step}_1, {j_init, +, j_step}_2'.
20772
20773   * 'first_location_in_loop': Provides information about the first
20774     location accessed by the data reference in the loop and about the
20775     access function used to represent evolution relative to this
20776     location.  This data is used to support pointers, and is not used
20777     for arrays (for which we have base objects).  Pointer accesses are
20778     represented as a one-dimensional access that starts from the first
20779     location accessed in the loop.  For example:
20780
20781                for1 i
20782                   for2 j
20783                    *((int *)p + i + j) = a[i][j];
20784
20785     The access function of the pointer access is '{0, + 4B}_for2'
20786     relative to 'p + i'.  The access functions of the array are
20787     '{i_init, + i_step}_for1' and '{j_init, +, j_step}_for2' relative
20788     to 'a'.
20789
20790     Usually, the object the pointer refers to is either unknown, or we
20791     cannot prove that the access is confined to the boundaries of a
20792     certain object.
20793
20794     Two data references can be compared only if at least one of these
20795     two representations has all its fields filled for both data
20796     references.
20797
20798     The current strategy for data dependence tests is as follows: If
20799     both 'a' and 'b' are represented as arrays, compare 'a.base_object'
20800     and 'b.base_object'; if they are equal, apply dependence tests (use
20801     access functions based on base_objects).  Else if both 'a' and 'b'
20802     are represented as pointers, compare 'a.first_location' and
20803     'b.first_location'; if they are equal, apply dependence tests (use
20804     access functions based on first location).  However, if 'a' and 'b'
20805     are represented differently, only try to prove that the bases are
20806     definitely different.
20807
20808   * Aliasing information.
20809   * Alignment information.
20810
20811 The structure describing the relation between two data references is
20812'data_dependence_relation' and the shorter name for a pointer to such a
20813structure is 'ddr_p'.  This structure contains:
20814
20815   * a pointer to each data reference,
20816   * a tree node 'are_dependent' that is set to 'chrec_known' if the
20817     analysis has proved that there is no dependence between these two
20818     data references, 'chrec_dont_know' if the analysis was not able to
20819     determine any useful result and potentially there could exist a
20820     dependence between these data references, and 'are_dependent' is
20821     set to 'NULL_TREE' if there exist a dependence relation between the
20822     data references, and the description of this dependence relation is
20823     given in the 'subscripts', 'dir_vects', and 'dist_vects' arrays,
20824   * a boolean that determines whether the dependence relation can be
20825     represented by a classical distance vector,
20826   * an array 'subscripts' that contains a description of each subscript
20827     of the data references.  Given two array accesses a subscript is
20828     the tuple composed of the access functions for a given dimension.
20829     For example, given 'A[f1][f2][f3]' and 'B[g1][g2][g3]', there are
20830     three subscripts: '(f1, g1), (f2, g2), (f3, g3)'.
20831   * two arrays 'dir_vects' and 'dist_vects' that contain classical
20832     representations of the data dependences under the form of direction
20833     and distance dependence vectors,
20834   * an array of loops 'loop_nest' that contains the loops to which the
20835     distance and direction vectors refer to.
20836
20837 Several functions for pretty printing the information extracted by the
20838data dependence analysis are available: 'dump_ddrs' prints with a
20839maximum verbosity the details of a data dependence relations array,
20840'dump_dist_dir_vectors' prints only the classical distance and direction
20841vectors for a data dependence relations array, and
20842'dump_data_references' prints the details of the data references
20843contained in a data reference array.
20844
20845
20846File: gccint.info,  Node: Machine Desc,  Next: Target Macros,  Prev: Loop Analysis and Representation,  Up: Top
20847
2084817 Machine Descriptions
20849***********************
20850
20851A machine description has two parts: a file of instruction patterns
20852('.md' file) and a C header file of macro definitions.
20853
20854 The '.md' file for a target machine contains a pattern for each
20855instruction that the target machine supports (or at least each
20856instruction that is worth telling the compiler about).  It may also
20857contain comments.  A semicolon causes the rest of the line to be a
20858comment, unless the semicolon is inside a quoted string.
20859
20860 See the next chapter for information on the C header file.
20861
20862* Menu:
20863
20864* Overview::            How the machine description is used.
20865* Patterns::            How to write instruction patterns.
20866* Example::             An explained example of a 'define_insn' pattern.
20867* RTL Template::        The RTL template defines what insns match a pattern.
20868* Output Template::     The output template says how to make assembler code
20869                        from such an insn.
20870* Output Statement::    For more generality, write C code to output
20871                        the assembler code.
20872* Predicates::          Controlling what kinds of operands can be used
20873                        for an insn.
20874* Constraints::         Fine-tuning operand selection.
20875* Standard Names::      Names mark patterns to use for code generation.
20876* Pattern Ordering::    When the order of patterns makes a difference.
20877* Dependent Patterns::  Having one pattern may make you need another.
20878* Jump Patterns::       Special considerations for patterns for jump insns.
20879* Looping Patterns::    How to define patterns for special looping insns.
20880* Insn Canonicalizations::Canonicalization of Instructions
20881* Expander Definitions::Generating a sequence of several RTL insns
20882                        for a standard operation.
20883* Insn Splitting::      Splitting Instructions into Multiple Instructions.
20884* Including Patterns::  Including Patterns in Machine Descriptions.
20885* Peephole Definitions::Defining machine-specific peephole optimizations.
20886* Insn Attributes::     Specifying the value of attributes for generated insns.
20887* Conditional Execution::Generating 'define_insn' patterns for
20888                         predication.
20889* Define Subst::	Generating 'define_insn' and 'define_expand'
20890			patterns from other patterns.
20891* Constant Definitions::Defining symbolic constants that can be used in the
20892                        md file.
20893* Iterators::           Using iterators to generate patterns from a template.
20894
20895
20896File: gccint.info,  Node: Overview,  Next: Patterns,  Up: Machine Desc
20897
2089817.1 Overview of How the Machine Description is Used
20899====================================================
20900
20901There are three main conversions that happen in the compiler:
20902
20903  1. The front end reads the source code and builds a parse tree.
20904
20905  2. The parse tree is used to generate an RTL insn list based on named
20906     instruction patterns.
20907
20908  3. The insn list is matched against the RTL templates to produce
20909     assembler code.
20910
20911 For the generate pass, only the names of the insns matter, from either
20912a named 'define_insn' or a 'define_expand'.  The compiler will choose
20913the pattern with the right name and apply the operands according to the
20914documentation later in this chapter, without regard for the RTL template
20915or operand constraints.  Note that the names the compiler looks for are
20916hard-coded in the compiler--it will ignore unnamed patterns and patterns
20917with names it doesn't know about, but if you don't provide a named
20918pattern it needs, it will abort.
20919
20920 If a 'define_insn' is used, the template given is inserted into the
20921insn list.  If a 'define_expand' is used, one of three things happens,
20922based on the condition logic.  The condition logic may manually create
20923new insns for the insn list, say via 'emit_insn()', and invoke 'DONE'.
20924For certain named patterns, it may invoke 'FAIL' to tell the compiler to
20925use an alternate way of performing that task.  If it invokes neither
20926'DONE' nor 'FAIL', the template given in the pattern is inserted, as if
20927the 'define_expand' were a 'define_insn'.
20928
20929 Once the insn list is generated, various optimization passes convert,
20930replace, and rearrange the insns in the insn list.  This is where the
20931'define_split' and 'define_peephole' patterns get used, for example.
20932
20933 Finally, the insn list's RTL is matched up with the RTL templates in
20934the 'define_insn' patterns, and those patterns are used to emit the
20935final assembly code.  For this purpose, each named 'define_insn' acts
20936like it's unnamed, since the names are ignored.
20937
20938
20939File: gccint.info,  Node: Patterns,  Next: Example,  Prev: Overview,  Up: Machine Desc
20940
2094117.2 Everything about Instruction Patterns
20942==========================================
20943
20944A 'define_insn' expression is used to define instruction patterns to
20945which insns may be matched.  A 'define_insn' expression contains an
20946incomplete RTL expression, with pieces to be filled in later, operand
20947constraints that restrict how the pieces can be filled in, and an output
20948template or C code to generate the assembler output.
20949
20950 A 'define_insn' is an RTL expression containing four or five operands:
20951
20952  1. An optional name N.  When a name is present, the compiler
20953     automically generates a C++ function 'gen_N' that takes the
20954     operands of the instruction as arguments and returns the
20955     instruction's rtx pattern.  The compiler also assigns the
20956     instruction a unique code 'CODE_FOR_N', with all such codes
20957     belonging to an enum called 'insn_code'.
20958
20959     These names serve one of two purposes.  The first is to indicate
20960     that the instruction performs a certain standard job for the
20961     RTL-generation pass of the compiler, such as a move, an addition,
20962     or a conditional jump.  The second is to help the target generate
20963     certain target-specific operations, such as when implementing
20964     target-specific intrinsic functions.
20965
20966     It is better to prefix target-specific names with the name of the
20967     target, to avoid any clash with current or future standard names.
20968
20969     The absence of a name is indicated by writing an empty string where
20970     the name should go.  Nameless instruction patterns are never used
20971     for generating RTL code, but they may permit several simpler insns
20972     to be combined later on.
20973
20974     For the purpose of debugging the compiler, you may also specify a
20975     name beginning with the '*' character.  Such a name is used only
20976     for identifying the instruction in RTL dumps; it is equivalent to
20977     having a nameless pattern for all other purposes.  Names beginning
20978     with the '*' character are not required to be unique.
20979
20980     The name may also have the form '@N'.  This has the same effect as
20981     a name 'N', but in addition tells the compiler to generate further
20982     helper functions; see *note Parameterized Names:: for details.
20983
20984  2. The "RTL template": This is a vector of incomplete RTL expressions
20985     which describe the semantics of the instruction (*note RTL
20986     Template::).  It is incomplete because it may contain
20987     'match_operand', 'match_operator', and 'match_dup' expressions that
20988     stand for operands of the instruction.
20989
20990     If the vector has multiple elements, the RTL template is treated as
20991     a 'parallel' expression.
20992
20993  3. The condition: This is a string which contains a C expression.
20994     When the compiler attempts to match RTL against a pattern, the
20995     condition is evaluated.  If the condition evaluates to 'true', the
20996     match is permitted.  The condition may be an empty string, which is
20997     treated as always 'true'.
20998
20999     For a named pattern, the condition may not depend on the data in
21000     the insn being matched, but only the target-machine-type flags.
21001     The compiler needs to test these conditions during initialization
21002     in order to learn exactly which named instructions are available in
21003     a particular run.
21004
21005     For nameless patterns, the condition is applied only when matching
21006     an individual insn, and only after the insn has matched the
21007     pattern's recognition template.  The insn's operands may be found
21008     in the vector 'operands'.
21009
21010     An instruction condition cannot become more restrictive as
21011     compilation progresses.  If the condition accepts a particular RTL
21012     instruction at one stage of compilation, it must continue to accept
21013     that instruction until the final pass.  For example,
21014     '!reload_completed' and 'can_create_pseudo_p ()' are both invalid
21015     instruction conditions, because they are true during the earlier
21016     RTL passes and false during the later ones.  For the same reason,
21017     if a condition accepts an instruction before register allocation,
21018     it cannot later try to control register allocation by excluding
21019     certain register or value combinations.
21020
21021     Although a condition cannot become more restrictive as compilation
21022     progresses, the condition for a nameless pattern _can_ become more
21023     permissive.  For example, a nameless instruction can require
21024     'reload_completed' to be true, in which case it only matches after
21025     register allocation.
21026
21027  4. The "output template" or "output statement": This is either a
21028     string, or a fragment of C code which returns a string.
21029
21030     When simple substitution isn't general enough, you can specify a
21031     piece of C code to compute the output.  *Note Output Statement::.
21032
21033  5. The "insn attributes": This is an optional vector containing the
21034     values of attributes for insns matching this pattern (*note Insn
21035     Attributes::).
21036
21037
21038File: gccint.info,  Node: Example,  Next: RTL Template,  Prev: Patterns,  Up: Machine Desc
21039
2104017.3 Example of 'define_insn'
21041=============================
21042
21043Here is an example of an instruction pattern, taken from the machine
21044description for the 68000/68020.
21045
21046     (define_insn "tstsi"
21047       [(set (cc0)
21048             (match_operand:SI 0 "general_operand" "rm"))]
21049       ""
21050       "*
21051     {
21052       if (TARGET_68020 || ! ADDRESS_REG_P (operands[0]))
21053         return \"tstl %0\";
21054       return \"cmpl #0,%0\";
21055     }")
21056
21057This can also be written using braced strings:
21058
21059     (define_insn "tstsi"
21060       [(set (cc0)
21061             (match_operand:SI 0 "general_operand" "rm"))]
21062       ""
21063     {
21064       if (TARGET_68020 || ! ADDRESS_REG_P (operands[0]))
21065         return "tstl %0";
21066       return "cmpl #0,%0";
21067     })
21068
21069 This describes an instruction which sets the condition codes based on
21070the value of a general operand.  It has no condition, so any insn with
21071an RTL description of the form shown may be matched to this pattern.
21072The name 'tstsi' means "test a 'SImode' value" and tells the RTL
21073generation pass that, when it is necessary to test such a value, an insn
21074to do so can be constructed using this pattern.
21075
21076 The output control string is a piece of C code which chooses which
21077output template to return based on the kind of operand and the specific
21078type of CPU for which code is being generated.
21079
21080 '"rm"' is an operand constraint.  Its meaning is explained below.
21081
21082
21083File: gccint.info,  Node: RTL Template,  Next: Output Template,  Prev: Example,  Up: Machine Desc
21084
2108517.4 RTL Template
21086=================
21087
21088The RTL template is used to define which insns match the particular
21089pattern and how to find their operands.  For named patterns, the RTL
21090template also says how to construct an insn from specified operands.
21091
21092 Construction involves substituting specified operands into a copy of
21093the template.  Matching involves determining the values that serve as
21094the operands in the insn being matched.  Both of these activities are
21095controlled by special expression types that direct matching and
21096substitution of the operands.
21097
21098'(match_operand:M N PREDICATE CONSTRAINT)'
21099     This expression is a placeholder for operand number N of the insn.
21100     When constructing an insn, operand number N will be substituted at
21101     this point.  When matching an insn, whatever appears at this
21102     position in the insn will be taken as operand number N; but it must
21103     satisfy PREDICATE or this instruction pattern will not match at
21104     all.
21105
21106     Operand numbers must be chosen consecutively counting from zero in
21107     each instruction pattern.  There may be only one 'match_operand'
21108     expression in the pattern for each operand number.  Usually
21109     operands are numbered in the order of appearance in 'match_operand'
21110     expressions.  In the case of a 'define_expand', any operand numbers
21111     used only in 'match_dup' expressions have higher values than all
21112     other operand numbers.
21113
21114     PREDICATE is a string that is the name of a function that accepts
21115     two arguments, an expression and a machine mode.  *Note
21116     Predicates::.  During matching, the function will be called with
21117     the putative operand as the expression and M as the mode argument
21118     (if M is not specified, 'VOIDmode' will be used, which normally
21119     causes PREDICATE to accept any mode).  If it returns zero, this
21120     instruction pattern fails to match.  PREDICATE may be an empty
21121     string; then it means no test is to be done on the operand, so
21122     anything which occurs in this position is valid.
21123
21124     Most of the time, PREDICATE will reject modes other than M--but not
21125     always.  For example, the predicate 'address_operand' uses M as the
21126     mode of memory ref that the address should be valid for.  Many
21127     predicates accept 'const_int' nodes even though their mode is
21128     'VOIDmode'.
21129
21130     CONSTRAINT controls reloading and the choice of the best register
21131     class to use for a value, as explained later (*note Constraints::).
21132     If the constraint would be an empty string, it can be omitted.
21133
21134     People are often unclear on the difference between the constraint
21135     and the predicate.  The predicate helps decide whether a given insn
21136     matches the pattern.  The constraint plays no role in this
21137     decision; instead, it controls various decisions in the case of an
21138     insn which does match.
21139
21140'(match_scratch:M N CONSTRAINT)'
21141     This expression is also a placeholder for operand number N and
21142     indicates that operand must be a 'scratch' or 'reg' expression.
21143
21144     When matching patterns, this is equivalent to
21145
21146          (match_operand:M N "scratch_operand" CONSTRAINT)
21147
21148     but, when generating RTL, it produces a ('scratch':M) expression.
21149
21150     If the last few expressions in a 'parallel' are 'clobber'
21151     expressions whose operands are either a hard register or
21152     'match_scratch', the combiner can add or delete them when
21153     necessary.  *Note Side Effects::.
21154
21155'(match_dup N)'
21156     This expression is also a placeholder for operand number N.  It is
21157     used when the operand needs to appear more than once in the insn.
21158
21159     In construction, 'match_dup' acts just like 'match_operand': the
21160     operand is substituted into the insn being constructed.  But in
21161     matching, 'match_dup' behaves differently.  It assumes that operand
21162     number N has already been determined by a 'match_operand' appearing
21163     earlier in the recognition template, and it matches only an
21164     identical-looking expression.
21165
21166     Note that 'match_dup' should not be used to tell the compiler that
21167     a particular register is being used for two operands (example:
21168     'add' that adds one register to another; the second register is
21169     both an input operand and the output operand).  Use a matching
21170     constraint (*note Simple Constraints::) for those.  'match_dup' is
21171     for the cases where one operand is used in two places in the
21172     template, such as an instruction that computes both a quotient and
21173     a remainder, where the opcode takes two input operands but the RTL
21174     template has to refer to each of those twice; once for the quotient
21175     pattern and once for the remainder pattern.
21176
21177'(match_operator:M N PREDICATE [OPERANDS...])'
21178     This pattern is a kind of placeholder for a variable RTL expression
21179     code.
21180
21181     When constructing an insn, it stands for an RTL expression whose
21182     expression code is taken from that of operand N, and whose operands
21183     are constructed from the patterns OPERANDS.
21184
21185     When matching an expression, it matches an expression if the
21186     function PREDICATE returns nonzero on that expression _and_ the
21187     patterns OPERANDS match the operands of the expression.
21188
21189     Suppose that the function 'commutative_operator' is defined as
21190     follows, to match any expression whose operator is one of the
21191     commutative arithmetic operators of RTL and whose mode is MODE:
21192
21193          int
21194          commutative_integer_operator (x, mode)
21195               rtx x;
21196               machine_mode mode;
21197          {
21198            enum rtx_code code = GET_CODE (x);
21199            if (GET_MODE (x) != mode)
21200              return 0;
21201            return (GET_RTX_CLASS (code) == RTX_COMM_ARITH
21202                    || code == EQ || code == NE);
21203          }
21204
21205     Then the following pattern will match any RTL expression consisting
21206     of a commutative operator applied to two general operands:
21207
21208          (match_operator:SI 3 "commutative_operator"
21209            [(match_operand:SI 1 "general_operand" "g")
21210             (match_operand:SI 2 "general_operand" "g")])
21211
21212     Here the vector '[OPERANDS...]' contains two patterns because the
21213     expressions to be matched all contain two operands.
21214
21215     When this pattern does match, the two operands of the commutative
21216     operator are recorded as operands 1 and 2 of the insn.  (This is
21217     done by the two instances of 'match_operand'.)  Operand 3 of the
21218     insn will be the entire commutative expression: use 'GET_CODE
21219     (operands[3])' to see which commutative operator was used.
21220
21221     The machine mode M of 'match_operator' works like that of
21222     'match_operand': it is passed as the second argument to the
21223     predicate function, and that function is solely responsible for
21224     deciding whether the expression to be matched "has" that mode.
21225
21226     When constructing an insn, argument 3 of the gen-function will
21227     specify the operation (i.e. the expression code) for the expression
21228     to be made.  It should be an RTL expression, whose expression code
21229     is copied into a new expression whose operands are arguments 1 and
21230     2 of the gen-function.  The subexpressions of argument 3 are not
21231     used; only its expression code matters.
21232
21233     When 'match_operator' is used in a pattern for matching an insn, it
21234     usually best if the operand number of the 'match_operator' is
21235     higher than that of the actual operands of the insn.  This improves
21236     register allocation because the register allocator often looks at
21237     operands 1 and 2 of insns to see if it can do register tying.
21238
21239     There is no way to specify constraints in 'match_operator'.  The
21240     operand of the insn which corresponds to the 'match_operator' never
21241     has any constraints because it is never reloaded as a whole.
21242     However, if parts of its OPERANDS are matched by 'match_operand'
21243     patterns, those parts may have constraints of their own.
21244
21245'(match_op_dup:M N[OPERANDS...])'
21246     Like 'match_dup', except that it applies to operators instead of
21247     operands.  When constructing an insn, operand number N will be
21248     substituted at this point.  But in matching, 'match_op_dup' behaves
21249     differently.  It assumes that operand number N has already been
21250     determined by a 'match_operator' appearing earlier in the
21251     recognition template, and it matches only an identical-looking
21252     expression.
21253
21254'(match_parallel N PREDICATE [SUBPAT...])'
21255     This pattern is a placeholder for an insn that consists of a
21256     'parallel' expression with a variable number of elements.  This
21257     expression should only appear at the top level of an insn pattern.
21258
21259     When constructing an insn, operand number N will be substituted at
21260     this point.  When matching an insn, it matches if the body of the
21261     insn is a 'parallel' expression with at least as many elements as
21262     the vector of SUBPAT expressions in the 'match_parallel', if each
21263     SUBPAT matches the corresponding element of the 'parallel', _and_
21264     the function PREDICATE returns nonzero on the 'parallel' that is
21265     the body of the insn.  It is the responsibility of the predicate to
21266     validate elements of the 'parallel' beyond those listed in the
21267     'match_parallel'.
21268
21269     A typical use of 'match_parallel' is to match load and store
21270     multiple expressions, which can contain a variable number of
21271     elements in a 'parallel'.  For example,
21272
21273          (define_insn ""
21274            [(match_parallel 0 "load_multiple_operation"
21275               [(set (match_operand:SI 1 "gpc_reg_operand" "=r")
21276                     (match_operand:SI 2 "memory_operand" "m"))
21277                (use (reg:SI 179))
21278                (clobber (reg:SI 179))])]
21279            ""
21280            "loadm 0,0,%1,%2")
21281
21282     This example comes from 'a29k.md'.  The function
21283     'load_multiple_operation' is defined in 'a29k.c' and checks that
21284     subsequent elements in the 'parallel' are the same as the 'set' in
21285     the pattern, except that they are referencing subsequent registers
21286     and memory locations.
21287
21288     An insn that matches this pattern might look like:
21289
21290          (parallel
21291           [(set (reg:SI 20) (mem:SI (reg:SI 100)))
21292            (use (reg:SI 179))
21293            (clobber (reg:SI 179))
21294            (set (reg:SI 21)
21295                 (mem:SI (plus:SI (reg:SI 100)
21296                                  (const_int 4))))
21297            (set (reg:SI 22)
21298                 (mem:SI (plus:SI (reg:SI 100)
21299                                  (const_int 8))))])
21300
21301'(match_par_dup N [SUBPAT...])'
21302     Like 'match_op_dup', but for 'match_parallel' instead of
21303     'match_operator'.
21304
21305
21306File: gccint.info,  Node: Output Template,  Next: Output Statement,  Prev: RTL Template,  Up: Machine Desc
21307
2130817.5 Output Templates and Operand Substitution
21309==============================================
21310
21311The "output template" is a string which specifies how to output the
21312assembler code for an instruction pattern.  Most of the template is a
21313fixed string which is output literally.  The character '%' is used to
21314specify where to substitute an operand; it can also be used to identify
21315places where different variants of the assembler require different
21316syntax.
21317
21318 In the simplest case, a '%' followed by a digit N says to output
21319operand N at that point in the string.
21320
21321 '%' followed by a letter and a digit says to output an operand in an
21322alternate fashion.  Four letters have standard, built-in meanings
21323described below.  The machine description macro 'PRINT_OPERAND' can
21324define additional letters with nonstandard meanings.
21325
21326 '%cDIGIT' can be used to substitute an operand that is a constant value
21327without the syntax that normally indicates an immediate operand.
21328
21329 '%nDIGIT' is like '%cDIGIT' except that the value of the constant is
21330negated before printing.
21331
21332 '%aDIGIT' can be used to substitute an operand as if it were a memory
21333reference, with the actual operand treated as the address.  This may be
21334useful when outputting a "load address" instruction, because often the
21335assembler syntax for such an instruction requires you to write the
21336operand as if it were a memory reference.
21337
21338 '%lDIGIT' is used to substitute a 'label_ref' into a jump instruction.
21339
21340 '%=' outputs a number which is unique to each instruction in the entire
21341compilation.  This is useful for making local labels to be referred to
21342more than once in a single template that generates multiple assembler
21343instructions.
21344
21345 '%' followed by a punctuation character specifies a substitution that
21346does not use an operand.  Only one case is standard: '%%' outputs a '%'
21347into the assembler code.  Other nonstandard cases can be defined in the
21348'PRINT_OPERAND' macro.  You must also define which punctuation
21349characters are valid with the 'PRINT_OPERAND_PUNCT_VALID_P' macro.
21350
21351 The template may generate multiple assembler instructions.  Write the
21352text for the instructions, with '\;' between them.
21353
21354 When the RTL contains two operands which are required by constraint to
21355match each other, the output template must refer only to the
21356lower-numbered operand.  Matching operands are not always identical, and
21357the rest of the compiler arranges to put the proper RTL expression for
21358printing into the lower-numbered operand.
21359
21360 One use of nonstandard letters or punctuation following '%' is to
21361distinguish between different assembler languages for the same machine;
21362for example, Motorola syntax versus MIT syntax for the 68000.  Motorola
21363syntax requires periods in most opcode names, while MIT syntax does not.
21364For example, the opcode 'movel' in MIT syntax is 'move.l' in Motorola
21365syntax.  The same file of patterns is used for both kinds of output
21366syntax, but the character sequence '%.' is used in each place where
21367Motorola syntax wants a period.  The 'PRINT_OPERAND' macro for Motorola
21368syntax defines the sequence to output a period; the macro for MIT syntax
21369defines it to do nothing.
21370
21371 As a special case, a template consisting of the single character '#'
21372instructs the compiler to first split the insn, and then output the
21373resulting instructions separately.  This helps eliminate redundancy in
21374the output templates.  If you have a 'define_insn' that needs to emit
21375multiple assembler instructions, and there is a matching 'define_split'
21376already defined, then you can simply use '#' as the output template
21377instead of writing an output template that emits the multiple assembler
21378instructions.
21379
21380 Note that '#' only has an effect while generating assembly code; it
21381does not affect whether a split occurs earlier.  An associated
21382'define_split' must exist and it must be suitable for use after register
21383allocation.
21384
21385 If the macro 'ASSEMBLER_DIALECT' is defined, you can use construct of
21386the form '{option0|option1|option2}' in the templates.  These describe
21387multiple variants of assembler language syntax.  *Note Instruction
21388Output::.
21389
21390
21391File: gccint.info,  Node: Output Statement,  Next: Predicates,  Prev: Output Template,  Up: Machine Desc
21392
2139317.6 C Statements for Assembler Output
21394======================================
21395
21396Often a single fixed template string cannot produce correct and
21397efficient assembler code for all the cases that are recognized by a
21398single instruction pattern.  For example, the opcodes may depend on the
21399kinds of operands; or some unfortunate combinations of operands may
21400require extra machine instructions.
21401
21402 If the output control string starts with a '@', then it is actually a
21403series of templates, each on a separate line.  (Blank lines and leading
21404spaces and tabs are ignored.)  The templates correspond to the pattern's
21405constraint alternatives (*note Multi-Alternative::).  For example, if a
21406target machine has a two-address add instruction 'addr' to add into a
21407register and another 'addm' to add a register to memory, you might write
21408this pattern:
21409
21410     (define_insn "addsi3"
21411       [(set (match_operand:SI 0 "general_operand" "=r,m")
21412             (plus:SI (match_operand:SI 1 "general_operand" "0,0")
21413                      (match_operand:SI 2 "general_operand" "g,r")))]
21414       ""
21415       "@
21416        addr %2,%0
21417        addm %2,%0")
21418
21419 If the output control string starts with a '*', then it is not an
21420output template but rather a piece of C program that should compute a
21421template.  It should execute a 'return' statement to return the
21422template-string you want.  Most such templates use C string literals,
21423which require doublequote characters to delimit them.  To include these
21424doublequote characters in the string, prefix each one with '\'.
21425
21426 If the output control string is written as a brace block instead of a
21427double-quoted string, it is automatically assumed to be C code.  In that
21428case, it is not necessary to put in a leading asterisk, or to escape the
21429doublequotes surrounding C string literals.
21430
21431 The operands may be found in the array 'operands', whose C data type is
21432'rtx []'.
21433
21434 It is very common to select different ways of generating assembler code
21435based on whether an immediate operand is within a certain range.  Be
21436careful when doing this, because the result of 'INTVAL' is an integer on
21437the host machine.  If the host machine has more bits in an 'int' than
21438the target machine has in the mode in which the constant will be used,
21439then some of the bits you get from 'INTVAL' will be superfluous.  For
21440proper results, you must carefully disregard the values of those bits.
21441
21442 It is possible to output an assembler instruction and then go on to
21443output or compute more of them, using the subroutine 'output_asm_insn'.
21444This receives two arguments: a template-string and a vector of operands.
21445The vector may be 'operands', or it may be another array of 'rtx' that
21446you declare locally and initialize yourself.
21447
21448 When an insn pattern has multiple alternatives in its constraints,
21449often the appearance of the assembler code is determined mostly by which
21450alternative was matched.  When this is so, the C code can test the
21451variable 'which_alternative', which is the ordinal number of the
21452alternative that was actually satisfied (0 for the first, 1 for the
21453second alternative, etc.).
21454
21455 For example, suppose there are two opcodes for storing zero, 'clrreg'
21456for registers and 'clrmem' for memory locations.  Here is how a pattern
21457could use 'which_alternative' to choose between them:
21458
21459     (define_insn ""
21460       [(set (match_operand:SI 0 "general_operand" "=r,m")
21461             (const_int 0))]
21462       ""
21463       {
21464       return (which_alternative == 0
21465               ? "clrreg %0" : "clrmem %0");
21466       })
21467
21468 The example above, where the assembler code to generate was _solely_
21469determined by the alternative, could also have been specified as
21470follows, having the output control string start with a '@':
21471
21472     (define_insn ""
21473       [(set (match_operand:SI 0 "general_operand" "=r,m")
21474             (const_int 0))]
21475       ""
21476       "@
21477        clrreg %0
21478        clrmem %0")
21479
21480 If you just need a little bit of C code in one (or a few) alternatives,
21481you can use '*' inside of a '@' multi-alternative template:
21482
21483     (define_insn ""
21484       [(set (match_operand:SI 0 "general_operand" "=r,<,m")
21485             (const_int 0))]
21486       ""
21487       "@
21488        clrreg %0
21489        * return stack_mem_p (operands[0]) ? \"push 0\" : \"clrmem %0\";
21490        clrmem %0")
21491
21492
21493File: gccint.info,  Node: Predicates,  Next: Constraints,  Prev: Output Statement,  Up: Machine Desc
21494
2149517.7 Predicates
21496===============
21497
21498A predicate determines whether a 'match_operand' or 'match_operator'
21499expression matches, and therefore whether the surrounding instruction
21500pattern will be used for that combination of operands.  GCC has a number
21501of machine-independent predicates, and you can define machine-specific
21502predicates as needed.  By convention, predicates used with
21503'match_operand' have names that end in '_operand', and those used with
21504'match_operator' have names that end in '_operator'.
21505
21506 All predicates are boolean functions (in the mathematical sense) of two
21507arguments: the RTL expression that is being considered at that position
21508in the instruction pattern, and the machine mode that the
21509'match_operand' or 'match_operator' specifies.  In this section, the
21510first argument is called OP and the second argument MODE.  Predicates
21511can be called from C as ordinary two-argument functions; this can be
21512useful in output templates or other machine-specific code.
21513
21514 Operand predicates can allow operands that are not actually acceptable
21515to the hardware, as long as the constraints give reload the ability to
21516fix them up (*note Constraints::).  However, GCC will usually generate
21517better code if the predicates specify the requirements of the machine
21518instructions as closely as possible.  Reload cannot fix up operands that
21519must be constants ("immediate operands"); you must use a predicate that
21520allows only constants, or else enforce the requirement in the extra
21521condition.
21522
21523 Most predicates handle their MODE argument in a uniform manner.  If
21524MODE is 'VOIDmode' (unspecified), then OP can have any mode.  If MODE is
21525anything else, then OP must have the same mode, unless OP is a
21526'CONST_INT' or integer 'CONST_DOUBLE'.  These RTL expressions always
21527have 'VOIDmode', so it would be counterproductive to check that their
21528mode matches.  Instead, predicates that accept 'CONST_INT' and/or
21529integer 'CONST_DOUBLE' check that the value stored in the constant will
21530fit in the requested mode.
21531
21532 Predicates with this behavior are called "normal".  'genrecog' can
21533optimize the instruction recognizer based on knowledge of how normal
21534predicates treat modes.  It can also diagnose certain kinds of common
21535errors in the use of normal predicates; for instance, it is almost
21536always an error to use a normal predicate without specifying a mode.
21537
21538 Predicates that do something different with their MODE argument are
21539called "special".  The generic predicates 'address_operand' and
21540'pmode_register_operand' are special predicates.  'genrecog' does not do
21541any optimizations or diagnosis when special predicates are used.
21542
21543* Menu:
21544
21545* Machine-Independent Predicates::  Predicates available to all back ends.
21546* Defining Predicates::             How to write machine-specific predicate
21547                                    functions.
21548
21549
21550File: gccint.info,  Node: Machine-Independent Predicates,  Next: Defining Predicates,  Up: Predicates
21551
2155217.7.1 Machine-Independent Predicates
21553-------------------------------------
21554
21555These are the generic predicates available to all back ends.  They are
21556defined in 'recog.c'.  The first category of predicates allow only
21557constant, or "immediate", operands.
21558
21559 -- Function: immediate_operand
21560     This predicate allows any sort of constant that fits in MODE.  It
21561     is an appropriate choice for instructions that take operands that
21562     must be constant.
21563
21564 -- Function: const_int_operand
21565     This predicate allows any 'CONST_INT' expression that fits in MODE.
21566     It is an appropriate choice for an immediate operand that does not
21567     allow a symbol or label.
21568
21569 -- Function: const_double_operand
21570     This predicate accepts any 'CONST_DOUBLE' expression that has
21571     exactly MODE.  If MODE is 'VOIDmode', it will also accept
21572     'CONST_INT'.  It is intended for immediate floating point
21573     constants.
21574
21575The second category of predicates allow only some kind of machine
21576register.
21577
21578 -- Function: register_operand
21579     This predicate allows any 'REG' or 'SUBREG' expression that is
21580     valid for MODE.  It is often suitable for arithmetic instruction
21581     operands on a RISC machine.
21582
21583 -- Function: pmode_register_operand
21584     This is a slight variant on 'register_operand' which works around a
21585     limitation in the machine-description reader.
21586
21587          (match_operand N "pmode_register_operand" CONSTRAINT)
21588
21589     means exactly what
21590
21591          (match_operand:P N "register_operand" CONSTRAINT)
21592
21593     would mean, if the machine-description reader accepted ':P' mode
21594     suffixes.  Unfortunately, it cannot, because 'Pmode' is an alias
21595     for some other mode, and might vary with machine-specific options.
21596     *Note Misc::.
21597
21598 -- Function: scratch_operand
21599     This predicate allows hard registers and 'SCRATCH' expressions, but
21600     not pseudo-registers.  It is used internally by 'match_scratch'; it
21601     should not be used directly.
21602
21603The third category of predicates allow only some kind of memory
21604reference.
21605
21606 -- Function: memory_operand
21607     This predicate allows any valid reference to a quantity of mode
21608     MODE in memory, as determined by the weak form of
21609     'GO_IF_LEGITIMATE_ADDRESS' (*note Addressing Modes::).
21610
21611 -- Function: address_operand
21612     This predicate is a little unusual; it allows any operand that is a
21613     valid expression for the _address_ of a quantity of mode MODE,
21614     again determined by the weak form of 'GO_IF_LEGITIMATE_ADDRESS'.
21615     To first order, if '(mem:MODE (EXP))' is acceptable to
21616     'memory_operand', then EXP is acceptable to 'address_operand'.
21617     Note that EXP does not necessarily have the mode MODE.
21618
21619 -- Function: indirect_operand
21620     This is a stricter form of 'memory_operand' which allows only
21621     memory references with a 'general_operand' as the address
21622     expression.  New uses of this predicate are discouraged, because
21623     'general_operand' is very permissive, so it's hard to tell what an
21624     'indirect_operand' does or does not allow.  If a target has
21625     different requirements for memory operands for different
21626     instructions, it is better to define target-specific predicates
21627     which enforce the hardware's requirements explicitly.
21628
21629 -- Function: push_operand
21630     This predicate allows a memory reference suitable for pushing a
21631     value onto the stack.  This will be a 'MEM' which refers to
21632     'stack_pointer_rtx', with a side effect in its address expression
21633     (*note Incdec::); which one is determined by the 'STACK_PUSH_CODE'
21634     macro (*note Frame Layout::).
21635
21636 -- Function: pop_operand
21637     This predicate allows a memory reference suitable for popping a
21638     value off the stack.  Again, this will be a 'MEM' referring to
21639     'stack_pointer_rtx', with a side effect in its address expression.
21640     However, this time 'STACK_POP_CODE' is expected.
21641
21642The fourth category of predicates allow some combination of the above
21643operands.
21644
21645 -- Function: nonmemory_operand
21646     This predicate allows any immediate or register operand valid for
21647     MODE.
21648
21649 -- Function: nonimmediate_operand
21650     This predicate allows any register or memory operand valid for
21651     MODE.
21652
21653 -- Function: general_operand
21654     This predicate allows any immediate, register, or memory operand
21655     valid for MODE.
21656
21657Finally, there are two generic operator predicates.
21658
21659 -- Function: comparison_operator
21660     This predicate matches any expression which performs an arithmetic
21661     comparison in MODE; that is, 'COMPARISON_P' is true for the
21662     expression code.
21663
21664 -- Function: ordered_comparison_operator
21665     This predicate matches any expression which performs an arithmetic
21666     comparison in MODE and whose expression code is valid for integer
21667     modes; that is, the expression code will be one of 'eq', 'ne',
21668     'lt', 'ltu', 'le', 'leu', 'gt', 'gtu', 'ge', 'geu'.
21669
21670
21671File: gccint.info,  Node: Defining Predicates,  Prev: Machine-Independent Predicates,  Up: Predicates
21672
2167317.7.2 Defining Machine-Specific Predicates
21674-------------------------------------------
21675
21676Many machines have requirements for their operands that cannot be
21677expressed precisely using the generic predicates.  You can define
21678additional predicates using 'define_predicate' and
21679'define_special_predicate' expressions.  These expressions have three
21680operands:
21681
21682   * The name of the predicate, as it will be referred to in
21683     'match_operand' or 'match_operator' expressions.
21684
21685   * An RTL expression which evaluates to true if the predicate allows
21686     the operand OP, false if it does not.  This expression can only use
21687     the following RTL codes:
21688
21689     'MATCH_OPERAND'
21690          When written inside a predicate expression, a 'MATCH_OPERAND'
21691          expression evaluates to true if the predicate it names would
21692          allow OP.  The operand number and constraint are ignored.  Due
21693          to limitations in 'genrecog', you can only refer to generic
21694          predicates and predicates that have already been defined.
21695
21696     'MATCH_CODE'
21697          This expression evaluates to true if OP or a specified
21698          subexpression of OP has one of a given list of RTX codes.
21699
21700          The first operand of this expression is a string constant
21701          containing a comma-separated list of RTX code names (in lower
21702          case).  These are the codes for which the 'MATCH_CODE' will be
21703          true.
21704
21705          The second operand is a string constant which indicates what
21706          subexpression of OP to examine.  If it is absent or the empty
21707          string, OP itself is examined.  Otherwise, the string constant
21708          must be a sequence of digits and/or lowercase letters.  Each
21709          character indicates a subexpression to extract from the
21710          current expression; for the first character this is OP, for
21711          the second and subsequent characters it is the result of the
21712          previous character.  A digit N extracts 'XEXP (E, N)'; a
21713          letter L extracts 'XVECEXP (E, 0, N)' where N is the
21714          alphabetic ordinal of L (0 for 'a', 1 for 'b', and so on).
21715          The 'MATCH_CODE' then examines the RTX code of the
21716          subexpression extracted by the complete string.  It is not
21717          possible to extract components of an 'rtvec' that is not at
21718          position 0 within its RTX object.
21719
21720     'MATCH_TEST'
21721          This expression has one operand, a string constant containing
21722          a C expression.  The predicate's arguments, OP and MODE, are
21723          available with those names in the C expression.  The
21724          'MATCH_TEST' evaluates to true if the C expression evaluates
21725          to a nonzero value.  'MATCH_TEST' expressions must not have
21726          side effects.
21727
21728     'AND'
21729     'IOR'
21730     'NOT'
21731     'IF_THEN_ELSE'
21732          The basic 'MATCH_' expressions can be combined using these
21733          logical operators, which have the semantics of the C operators
21734          '&&', '||', '!', and '? :' respectively.  As in Common Lisp,
21735          you may give an 'AND' or 'IOR' expression an arbitrary number
21736          of arguments; this has exactly the same effect as writing a
21737          chain of two-argument 'AND' or 'IOR' expressions.
21738
21739   * An optional block of C code, which should execute 'return true' if
21740     the predicate is found to match and 'return false' if it does not.
21741     It must not have any side effects.  The predicate arguments, OP and
21742     MODE, are available with those names.
21743
21744     If a code block is present in a predicate definition, then the RTL
21745     expression must evaluate to true _and_ the code block must execute
21746     'return true' for the predicate to allow the operand.  The RTL
21747     expression is evaluated first; do not re-check anything in the code
21748     block that was checked in the RTL expression.
21749
21750 The program 'genrecog' scans 'define_predicate' and
21751'define_special_predicate' expressions to determine which RTX codes are
21752possibly allowed.  You should always make this explicit in the RTL
21753predicate expression, using 'MATCH_OPERAND' and 'MATCH_CODE'.
21754
21755 Here is an example of a simple predicate definition, from the IA64
21756machine description:
21757
21758     ;; True if OP is a 'SYMBOL_REF' which refers to the sdata section.
21759     (define_predicate "small_addr_symbolic_operand"
21760       (and (match_code "symbol_ref")
21761            (match_test "SYMBOL_REF_SMALL_ADDR_P (op)")))
21762
21763And here is another, showing the use of the C block.
21764
21765     ;; True if OP is a register operand that is (or could be) a GR reg.
21766     (define_predicate "gr_register_operand"
21767       (match_operand 0 "register_operand")
21768     {
21769       unsigned int regno;
21770       if (GET_CODE (op) == SUBREG)
21771         op = SUBREG_REG (op);
21772
21773       regno = REGNO (op);
21774       return (regno >= FIRST_PSEUDO_REGISTER || GENERAL_REGNO_P (regno));
21775     })
21776
21777 Predicates written with 'define_predicate' automatically include a test
21778that MODE is 'VOIDmode', or OP has the same mode as MODE, or OP is a
21779'CONST_INT' or 'CONST_DOUBLE'.  They do _not_ check specifically for
21780integer 'CONST_DOUBLE', nor do they test that the value of either kind
21781of constant fits in the requested mode.  This is because target-specific
21782predicates that take constants usually have to do more stringent value
21783checks anyway.  If you need the exact same treatment of 'CONST_INT' or
21784'CONST_DOUBLE' that the generic predicates provide, use a
21785'MATCH_OPERAND' subexpression to call 'const_int_operand',
21786'const_double_operand', or 'immediate_operand'.
21787
21788 Predicates written with 'define_special_predicate' do not get any
21789automatic mode checks, and are treated as having special mode handling
21790by 'genrecog'.
21791
21792 The program 'genpreds' is responsible for generating code to test
21793predicates.  It also writes a header file containing function
21794declarations for all machine-specific predicates.  It is not necessary
21795to declare these predicates in 'CPU-protos.h'.
21796
21797
21798File: gccint.info,  Node: Constraints,  Next: Standard Names,  Prev: Predicates,  Up: Machine Desc
21799
2180017.8 Operand Constraints
21801========================
21802
21803Each 'match_operand' in an instruction pattern can specify constraints
21804for the operands allowed.  The constraints allow you to fine-tune
21805matching within the set of operands allowed by the predicate.
21806
21807 Constraints can say whether an operand may be in a register, and which
21808kinds of register; whether the operand can be a memory reference, and
21809which kinds of address; whether the operand may be an immediate
21810constant, and which possible values it may have.  Constraints can also
21811require two operands to match.  Side-effects aren't allowed in operands
21812of inline 'asm', unless '<' or '>' constraints are used, because there
21813is no guarantee that the side effects will happen exactly once in an
21814instruction that can update the addressing register.
21815
21816* Menu:
21817
21818* Simple Constraints::  Basic use of constraints.
21819* Multi-Alternative::   When an insn has two alternative constraint-patterns.
21820* Class Preferences::   Constraints guide which hard register to put things in.
21821* Modifiers::           More precise control over effects of constraints.
21822* Machine Constraints:: Existing constraints for some particular machines.
21823* Disable Insn Alternatives:: Disable insn alternatives using attributes.
21824* Define Constraints::  How to define machine-specific constraints.
21825* C Constraint Interface:: How to test constraints from C code.
21826
21827
21828File: gccint.info,  Node: Simple Constraints,  Next: Multi-Alternative,  Up: Constraints
21829
2183017.8.1 Simple Constraints
21831-------------------------
21832
21833The simplest kind of constraint is a string full of letters, each of
21834which describes one kind of operand that is permitted.  Here are the
21835letters that are allowed:
21836
21837whitespace
21838     Whitespace characters are ignored and can be inserted at any
21839     position except the first.  This enables each alternative for
21840     different operands to be visually aligned in the machine
21841     description even if they have different number of constraints and
21842     modifiers.
21843
21844'm'
21845     A memory operand is allowed, with any kind of address that the
21846     machine supports in general.  Note that the letter used for the
21847     general memory constraint can be re-defined by a back end using the
21848     'TARGET_MEM_CONSTRAINT' macro.
21849
21850'o'
21851     A memory operand is allowed, but only if the address is
21852     "offsettable".  This means that adding a small integer (actually,
21853     the width in bytes of the operand, as determined by its machine
21854     mode) may be added to the address and the result is also a valid
21855     memory address.
21856
21857     For example, an address which is constant is offsettable; so is an
21858     address that is the sum of a register and a constant (as long as a
21859     slightly larger constant is also within the range of
21860     address-offsets supported by the machine); but an autoincrement or
21861     autodecrement address is not offsettable.  More complicated
21862     indirect/indexed addresses may or may not be offsettable depending
21863     on the other addressing modes that the machine supports.
21864
21865     Note that in an output operand which can be matched by another
21866     operand, the constraint letter 'o' is valid only when accompanied
21867     by both '<' (if the target machine has predecrement addressing) and
21868     '>' (if the target machine has preincrement addressing).
21869
21870'V'
21871     A memory operand that is not offsettable.  In other words, anything
21872     that would fit the 'm' constraint but not the 'o' constraint.
21873
21874'<'
21875     A memory operand with autodecrement addressing (either predecrement
21876     or postdecrement) is allowed.  In inline 'asm' this constraint is
21877     only allowed if the operand is used exactly once in an instruction
21878     that can handle the side effects.  Not using an operand with '<' in
21879     constraint string in the inline 'asm' pattern at all or using it in
21880     multiple instructions isn't valid, because the side effects
21881     wouldn't be performed or would be performed more than once.
21882     Furthermore, on some targets the operand with '<' in constraint
21883     string must be accompanied by special instruction suffixes like
21884     '%U0' instruction suffix on PowerPC or '%P0' on IA-64.
21885
21886'>'
21887     A memory operand with autoincrement addressing (either preincrement
21888     or postincrement) is allowed.  In inline 'asm' the same
21889     restrictions as for '<' apply.
21890
21891'r'
21892     A register operand is allowed provided that it is in a general
21893     register.
21894
21895'i'
21896     An immediate integer operand (one with constant value) is allowed.
21897     This includes symbolic constants whose values will be known only at
21898     assembly time or later.
21899
21900'n'
21901     An immediate integer operand with a known numeric value is allowed.
21902     Many systems cannot support assembly-time constants for operands
21903     less than a word wide.  Constraints for these operands should use
21904     'n' rather than 'i'.
21905
21906'I', 'J', 'K', ... 'P'
21907     Other letters in the range 'I' through 'P' may be defined in a
21908     machine-dependent fashion to permit immediate integer operands with
21909     explicit integer values in specified ranges.  For example, on the
21910     68000, 'I' is defined to stand for the range of values 1 to 8.
21911     This is the range permitted as a shift count in the shift
21912     instructions.
21913
21914'E'
21915     An immediate floating operand (expression code 'const_double') is
21916     allowed, but only if the target floating point format is the same
21917     as that of the host machine (on which the compiler is running).
21918
21919'F'
21920     An immediate floating operand (expression code 'const_double' or
21921     'const_vector') is allowed.
21922
21923'G', 'H'
21924     'G' and 'H' may be defined in a machine-dependent fashion to permit
21925     immediate floating operands in particular ranges of values.
21926
21927's'
21928     An immediate integer operand whose value is not an explicit integer
21929     is allowed.
21930
21931     This might appear strange; if an insn allows a constant operand
21932     with a value not known at compile time, it certainly must allow any
21933     known value.  So why use 's' instead of 'i'?  Sometimes it allows
21934     better code to be generated.
21935
21936     For example, on the 68000 in a fullword instruction it is possible
21937     to use an immediate operand; but if the immediate value is between
21938     -128 and 127, better code results from loading the value into a
21939     register and using the register.  This is because the load into the
21940     register can be done with a 'moveq' instruction.  We arrange for
21941     this to happen by defining the letter 'K' to mean "any integer
21942     outside the range -128 to 127", and then specifying 'Ks' in the
21943     operand constraints.
21944
21945'g'
21946     Any register, memory or immediate integer operand is allowed,
21947     except for registers that are not general registers.
21948
21949'X'
21950     Any operand whatsoever is allowed, even if it does not satisfy
21951     'general_operand'.  This is normally used in the constraint of a
21952     'match_scratch' when certain alternatives will not actually require
21953     a scratch register.
21954
21955'0', '1', '2', ... '9'
21956     An operand that matches the specified operand number is allowed.
21957     If a digit is used together with letters within the same
21958     alternative, the digit should come last.
21959
21960     This number is allowed to be more than a single digit.  If multiple
21961     digits are encountered consecutively, they are interpreted as a
21962     single decimal integer.  There is scant chance for ambiguity, since
21963     to-date it has never been desirable that '10' be interpreted as
21964     matching either operand 1 _or_ operand 0.  Should this be desired,
21965     one can use multiple alternatives instead.
21966
21967     This is called a "matching constraint" and what it really means is
21968     that the assembler has only a single operand that fills two roles
21969     considered separate in the RTL insn.  For example, an add insn has
21970     two input operands and one output operand in the RTL, but on most
21971     CISC machines an add instruction really has only two operands, one
21972     of them an input-output operand:
21973
21974          addl #35,r12
21975
21976     Matching constraints are used in these circumstances.  More
21977     precisely, the two operands that match must include one input-only
21978     operand and one output-only operand.  Moreover, the digit must be a
21979     smaller number than the number of the operand that uses it in the
21980     constraint.
21981
21982     For operands to match in a particular case usually means that they
21983     are identical-looking RTL expressions.  But in a few special cases
21984     specific kinds of dissimilarity are allowed.  For example, '*x' as
21985     an input operand will match '*x++' as an output operand.  For
21986     proper results in such cases, the output template should always use
21987     the output-operand's number when printing the operand.
21988
21989'p'
21990     An operand that is a valid memory address is allowed.  This is for
21991     "load address" and "push address" instructions.
21992
21993     'p' in the constraint must be accompanied by 'address_operand' as
21994     the predicate in the 'match_operand'.  This predicate interprets
21995     the mode specified in the 'match_operand' as the mode of the memory
21996     reference for which the address would be valid.
21997
21998OTHER-LETTERS
21999     Other letters can be defined in machine-dependent fashion to stand
22000     for particular classes of registers or other arbitrary operand
22001     types.  'd', 'a' and 'f' are defined on the 68000/68020 to stand
22002     for data, address and floating point registers.
22003
22004 In order to have valid assembler code, each operand must satisfy its
22005constraint.  But a failure to do so does not prevent the pattern from
22006applying to an insn.  Instead, it directs the compiler to modify the
22007code so that the constraint will be satisfied.  Usually this is done by
22008copying an operand into a register.
22009
22010 Contrast, therefore, the two instruction patterns that follow:
22011
22012     (define_insn ""
22013       [(set (match_operand:SI 0 "general_operand" "=r")
22014             (plus:SI (match_dup 0)
22015                      (match_operand:SI 1 "general_operand" "r")))]
22016       ""
22017       "...")
22018
22019which has two operands, one of which must appear in two places, and
22020
22021     (define_insn ""
22022       [(set (match_operand:SI 0 "general_operand" "=r")
22023             (plus:SI (match_operand:SI 1 "general_operand" "0")
22024                      (match_operand:SI 2 "general_operand" "r")))]
22025       ""
22026       "...")
22027
22028which has three operands, two of which are required by a constraint to
22029be identical.  If we are considering an insn of the form
22030
22031     (insn N PREV NEXT
22032       (set (reg:SI 3)
22033            (plus:SI (reg:SI 6) (reg:SI 109)))
22034       ...)
22035
22036the first pattern would not apply at all, because this insn does not
22037contain two identical subexpressions in the right place.  The pattern
22038would say, "That does not look like an add instruction; try other
22039patterns".  The second pattern would say, "Yes, that's an add
22040instruction, but there is something wrong with it".  It would direct the
22041reload pass of the compiler to generate additional insns to make the
22042constraint true.  The results might look like this:
22043
22044     (insn N2 PREV N
22045       (set (reg:SI 3) (reg:SI 6))
22046       ...)
22047
22048     (insn N N2 NEXT
22049       (set (reg:SI 3)
22050            (plus:SI (reg:SI 3) (reg:SI 109)))
22051       ...)
22052
22053 It is up to you to make sure that each operand, in each pattern, has
22054constraints that can handle any RTL expression that could be present for
22055that operand.  (When multiple alternatives are in use, each pattern
22056must, for each possible combination of operand expressions, have at
22057least one alternative which can handle that combination of operands.)
22058The constraints don't need to _allow_ any possible operand--when this is
22059the case, they do not constrain--but they must at least point the way to
22060reloading any possible operand so that it will fit.
22061
22062   * If the constraint accepts whatever operands the predicate permits,
22063     there is no problem: reloading is never necessary for this operand.
22064
22065     For example, an operand whose constraints permit everything except
22066     registers is safe provided its predicate rejects registers.
22067
22068     An operand whose predicate accepts only constant values is safe
22069     provided its constraints include the letter 'i'.  If any possible
22070     constant value is accepted, then nothing less than 'i' will do; if
22071     the predicate is more selective, then the constraints may also be
22072     more selective.
22073
22074   * Any operand expression can be reloaded by copying it into a
22075     register.  So if an operand's constraints allow some kind of
22076     register, it is certain to be safe.  It need not permit all classes
22077     of registers; the compiler knows how to copy a register into
22078     another register of the proper class in order to make an
22079     instruction valid.
22080
22081   * A nonoffsettable memory reference can be reloaded by copying the
22082     address into a register.  So if the constraint uses the letter 'o',
22083     all memory references are taken care of.
22084
22085   * A constant operand can be reloaded by allocating space in memory to
22086     hold it as preinitialized data.  Then the memory reference can be
22087     used in place of the constant.  So if the constraint uses the
22088     letters 'o' or 'm', constant operands are not a problem.
22089
22090   * If the constraint permits a constant and a pseudo register used in
22091     an insn was not allocated to a hard register and is equivalent to a
22092     constant, the register will be replaced with the constant.  If the
22093     predicate does not permit a constant and the insn is re-recognized
22094     for some reason, the compiler will crash.  Thus the predicate must
22095     always recognize any objects allowed by the constraint.
22096
22097 If the operand's predicate can recognize registers, but the constraint
22098does not permit them, it can make the compiler crash.  When this operand
22099happens to be a register, the reload pass will be stymied, because it
22100does not know how to copy a register temporarily into memory.
22101
22102 If the predicate accepts a unary operator, the constraint applies to
22103the operand.  For example, the MIPS processor at ISA level 3 supports an
22104instruction which adds two registers in 'SImode' to produce a 'DImode'
22105result, but only if the registers are correctly sign extended.  This
22106predicate for the input operands accepts a 'sign_extend' of an 'SImode'
22107register.  Write the constraint to indicate the type of register that is
22108required for the operand of the 'sign_extend'.
22109
22110
22111File: gccint.info,  Node: Multi-Alternative,  Next: Class Preferences,  Prev: Simple Constraints,  Up: Constraints
22112
2211317.8.2 Multiple Alternative Constraints
22114---------------------------------------
22115
22116Sometimes a single instruction has multiple alternative sets of possible
22117operands.  For example, on the 68000, a logical-or instruction can
22118combine register or an immediate value into memory, or it can combine
22119any kind of operand into a register; but it cannot combine one memory
22120location into another.
22121
22122 These constraints are represented as multiple alternatives.  An
22123alternative can be described by a series of letters for each operand.
22124The overall constraint for an operand is made from the letters for this
22125operand from the first alternative, a comma, the letters for this
22126operand from the second alternative, a comma, and so on until the last
22127alternative.  All operands for a single instruction must have the same
22128number of alternatives.  Here is how it is done for fullword logical-or
22129on the 68000:
22130
22131     (define_insn "iorsi3"
22132       [(set (match_operand:SI 0 "general_operand" "=m,d")
22133             (ior:SI (match_operand:SI 1 "general_operand" "%0,0")
22134                     (match_operand:SI 2 "general_operand" "dKs,dmKs")))]
22135       ...)
22136
22137 The first alternative has 'm' (memory) for operand 0, '0' for operand 1
22138(meaning it must match operand 0), and 'dKs' for operand 2.  The second
22139alternative has 'd' (data register) for operand 0, '0' for operand 1,
22140and 'dmKs' for operand 2.  The '=' and '%' in the constraints apply to
22141all the alternatives; their meaning is explained in the next section
22142(*note Class Preferences::).
22143
22144 If all the operands fit any one alternative, the instruction is valid.
22145Otherwise, for each alternative, the compiler counts how many
22146instructions must be added to copy the operands so that that alternative
22147applies.  The alternative requiring the least copying is chosen.  If two
22148alternatives need the same amount of copying, the one that comes first
22149is chosen.  These choices can be altered with the '?' and '!'
22150characters:
22151
22152'?'
22153     Disparage slightly the alternative that the '?' appears in, as a
22154     choice when no alternative applies exactly.  The compiler regards
22155     this alternative as one unit more costly for each '?' that appears
22156     in it.
22157
22158'!'
22159     Disparage severely the alternative that the '!' appears in.  This
22160     alternative can still be used if it fits without reloading, but if
22161     reloading is needed, some other alternative will be used.
22162
22163'^'
22164     This constraint is analogous to '?' but it disparages slightly the
22165     alternative only if the operand with the '^' needs a reload.
22166
22167'$'
22168     This constraint is analogous to '!' but it disparages severely the
22169     alternative only if the operand with the '$' needs a reload.
22170
22171 When an insn pattern has multiple alternatives in its constraints,
22172often the appearance of the assembler code is determined mostly by which
22173alternative was matched.  When this is so, the C code for writing the
22174assembler code can use the variable 'which_alternative', which is the
22175ordinal number of the alternative that was actually satisfied (0 for the
22176first, 1 for the second alternative, etc.).  *Note Output Statement::.
22177
22178
22179File: gccint.info,  Node: Class Preferences,  Next: Modifiers,  Prev: Multi-Alternative,  Up: Constraints
22180
2218117.8.3 Register Class Preferences
22182---------------------------------
22183
22184The operand constraints have another function: they enable the compiler
22185to decide which kind of hardware register a pseudo register is best
22186allocated to.  The compiler examines the constraints that apply to the
22187insns that use the pseudo register, looking for the machine-dependent
22188letters such as 'd' and 'a' that specify classes of registers.  The
22189pseudo register is put in whichever class gets the most "votes".  The
22190constraint letters 'g' and 'r' also vote: they vote in favor of a
22191general register.  The machine description says which registers are
22192considered general.
22193
22194 Of course, on some machines all registers are equivalent, and no
22195register classes are defined.  Then none of this complexity is relevant.
22196
22197
22198File: gccint.info,  Node: Modifiers,  Next: Machine Constraints,  Prev: Class Preferences,  Up: Constraints
22199
2220017.8.4 Constraint Modifier Characters
22201-------------------------------------
22202
22203Here are constraint modifier characters.
22204
22205'='
22206     Means that this operand is written to by this instruction: the
22207     previous value is discarded and replaced by new data.
22208
22209'+'
22210     Means that this operand is both read and written by the
22211     instruction.
22212
22213     When the compiler fixes up the operands to satisfy the constraints,
22214     it needs to know which operands are read by the instruction and
22215     which are written by it.  '=' identifies an operand which is only
22216     written; '+' identifies an operand that is both read and written;
22217     all other operands are assumed to only be read.
22218
22219     If you specify '=' or '+' in a constraint, you put it in the first
22220     character of the constraint string.
22221
22222'&'
22223     Means (in a particular alternative) that this operand is an
22224     "earlyclobber" operand, which is written before the instruction is
22225     finished using the input operands.  Therefore, this operand may not
22226     lie in a register that is read by the instruction or as part of any
22227     memory address.
22228
22229     '&' applies only to the alternative in which it is written.  In
22230     constraints with multiple alternatives, sometimes one alternative
22231     requires '&' while others do not.  See, for example, the 'movdf'
22232     insn of the 68000.
22233
22234     A operand which is read by the instruction can be tied to an
22235     earlyclobber operand if its only use as an input occurs before the
22236     early result is written.  Adding alternatives of this form often
22237     allows GCC to produce better code when only some of the read
22238     operands can be affected by the earlyclobber.  See, for example,
22239     the 'mulsi3' insn of the ARM.
22240
22241     Furthermore, if the "earlyclobber" operand is also a read/write
22242     operand, then that operand is written only after it's used.
22243
22244     '&' does not obviate the need to write '=' or '+'.  As
22245     "earlyclobber" operands are always written, a read-only
22246     "earlyclobber" operand is ill-formed and will be rejected by the
22247     compiler.
22248
22249'%'
22250     Declares the instruction to be commutative for this operand and the
22251     following operand.  This means that the compiler may interchange
22252     the two operands if that is the cheapest way to make all operands
22253     fit the constraints.  '%' applies to all alternatives and must
22254     appear as the first character in the constraint.  Only read-only
22255     operands can use '%'.
22256
22257     This is often used in patterns for addition instructions that
22258     really have only two operands: the result must go in one of the
22259     arguments.  Here for example, is how the 68000 halfword-add
22260     instruction is defined:
22261
22262          (define_insn "addhi3"
22263            [(set (match_operand:HI 0 "general_operand" "=m,r")
22264               (plus:HI (match_operand:HI 1 "general_operand" "%0,0")
22265                        (match_operand:HI 2 "general_operand" "di,g")))]
22266            ...)
22267     GCC can only handle one commutative pair in an asm; if you use
22268     more, the compiler may fail.  Note that you need not use the
22269     modifier if the two alternatives are strictly identical; this would
22270     only waste time in the reload pass.  The modifier is not
22271     operational after register allocation, so the result of
22272     'define_peephole2' and 'define_split's performed after reload
22273     cannot rely on '%' to make the intended insn match.
22274
22275'#'
22276     Says that all following characters, up to the next comma, are to be
22277     ignored as a constraint.  They are significant only for choosing
22278     register preferences.
22279
22280'*'
22281     Says that the following character should be ignored when choosing
22282     register preferences.  '*' has no effect on the meaning of the
22283     constraint as a constraint, and no effect on reloading.  For LRA
22284     '*' additionally disparages slightly the alternative if the
22285     following character matches the operand.
22286
22287     Here is an example: the 68000 has an instruction to sign-extend a
22288     halfword in a data register, and can also sign-extend a value by
22289     copying it into an address register.  While either kind of register
22290     is acceptable, the constraints on an address-register destination
22291     are less strict, so it is best if register allocation makes an
22292     address register its goal.  Therefore, '*' is used so that the 'd'
22293     constraint letter (for data register) is ignored when computing
22294     register preferences.
22295
22296          (define_insn "extendhisi2"
22297            [(set (match_operand:SI 0 "general_operand" "=*d,a")
22298                  (sign_extend:SI
22299                   (match_operand:HI 1 "general_operand" "0,g")))]
22300            ...)
22301
22302
22303File: gccint.info,  Node: Machine Constraints,  Next: Disable Insn Alternatives,  Prev: Modifiers,  Up: Constraints
22304
2230517.8.5 Constraints for Particular Machines
22306------------------------------------------
22307
22308Whenever possible, you should use the general-purpose constraint letters
22309in 'asm' arguments, since they will convey meaning more readily to
22310people reading your code.  Failing that, use the constraint letters that
22311usually have very similar meanings across architectures.  The most
22312commonly used constraints are 'm' and 'r' (for memory and
22313general-purpose registers respectively; *note Simple Constraints::), and
22314'I', usually the letter indicating the most common immediate-constant
22315format.
22316
22317 Each architecture defines additional constraints.  These constraints
22318are used by the compiler itself for instruction generation, as well as
22319for 'asm' statements; therefore, some of the constraints are not
22320particularly useful for 'asm'.  Here is a summary of some of the
22321machine-dependent constraints available on some particular machines; it
22322includes both constraints that are useful for 'asm' and constraints that
22323aren't.  The compiler source file mentioned in the table heading for
22324each architecture is the definitive reference for the meanings of that
22325architecture's constraints.
22326
22327_AArch64 family--'config/aarch64/constraints.md'_
22328     'k'
22329          The stack pointer register ('SP')
22330
22331     'w'
22332          Floating point register, Advanced SIMD vector register or SVE
22333          vector register
22334
22335     'x'
22336          Like 'w', but restricted to registers 0 to 15 inclusive.
22337
22338     'y'
22339          Like 'w', but restricted to registers 0 to 7 inclusive.
22340
22341     'Upl'
22342          One of the low eight SVE predicate registers ('P0' to 'P7')
22343
22344     'Upa'
22345          Any of the SVE predicate registers ('P0' to 'P15')
22346
22347     'I'
22348          Integer constant that is valid as an immediate operand in an
22349          'ADD' instruction
22350
22351     'J'
22352          Integer constant that is valid as an immediate operand in a
22353          'SUB' instruction (once negated)
22354
22355     'K'
22356          Integer constant that can be used with a 32-bit logical
22357          instruction
22358
22359     'L'
22360          Integer constant that can be used with a 64-bit logical
22361          instruction
22362
22363     'M'
22364          Integer constant that is valid as an immediate operand in a
22365          32-bit 'MOV' pseudo instruction.  The 'MOV' may be assembled
22366          to one of several different machine instructions depending on
22367          the value
22368
22369     'N'
22370          Integer constant that is valid as an immediate operand in a
22371          64-bit 'MOV' pseudo instruction
22372
22373     'S'
22374          An absolute symbolic address or a label reference
22375
22376     'Y'
22377          Floating point constant zero
22378
22379     'Z'
22380          Integer constant zero
22381
22382     'Ush'
22383          The high part (bits 12 and upwards) of the pc-relative address
22384          of a symbol within 4GB of the instruction
22385
22386     'Q'
22387          A memory address which uses a single base register with no
22388          offset
22389
22390     'Ump'
22391          A memory address suitable for a load/store pair instruction in
22392          SI, DI, SF and DF modes
22393
22394_AMD GCN --'config/gcn/constraints.md'_
22395     'I'
22396          Immediate integer in the range -16 to 64
22397
22398     'J'
22399          Immediate 16-bit signed integer
22400
22401     'Kf'
22402          Immediate constant -1
22403
22404     'L'
22405          Immediate 15-bit unsigned integer
22406
22407     'A'
22408          Immediate constant that can be inlined in an instruction
22409          encoding: integer -16..64, or float 0.0, +/-0.5, +/-1.0,
22410          +/-2.0, +/-4.0, 1.0/(2.0*PI)
22411
22412     'B'
22413          Immediate 32-bit signed integer that can be attached to an
22414          instruction encoding
22415
22416     'C'
22417          Immediate 32-bit integer in range -16..4294967295 (i.e.
22418          32-bit unsigned integer or 'A' constraint)
22419
22420     'DA'
22421          Immediate 64-bit constant that can be split into two 'A'
22422          constants
22423
22424     'DB'
22425          Immediate 64-bit constant that can be split into two 'B'
22426          constants
22427
22428     'U'
22429          Any 'unspec'
22430
22431     'Y'
22432          Any 'symbol_ref' or 'label_ref'
22433
22434     'v'
22435          VGPR register
22436
22437     'Sg'
22438          SGPR register
22439
22440     'SD'
22441          SGPR registers valid for instruction destinations, including
22442          VCC, M0 and EXEC
22443
22444     'SS'
22445          SGPR registers valid for instruction sources, including VCC,
22446          M0, EXEC and SCC
22447
22448     'Sm'
22449          SGPR registers valid as a source for scalar memory
22450          instructions (excludes M0 and EXEC)
22451
22452     'Sv'
22453          SGPR registers valid as a source or destination for vector
22454          instructions (excludes EXEC)
22455
22456     'ca'
22457          All condition registers: SCC, VCCZ, EXECZ
22458
22459     'cs'
22460          Scalar condition register: SCC
22461
22462     'cV'
22463          Vector condition register: VCC, VCC_LO, VCC_HI
22464
22465     'e'
22466          EXEC register (EXEC_LO and EXEC_HI)
22467
22468     'RB'
22469          Memory operand with address space suitable for 'buffer_*'
22470          instructions
22471
22472     'RF'
22473          Memory operand with address space suitable for 'flat_*'
22474          instructions
22475
22476     'RS'
22477          Memory operand with address space suitable for 's_*'
22478          instructions
22479
22480     'RL'
22481          Memory operand with address space suitable for 'ds_*' LDS
22482          instructions
22483
22484     'RG'
22485          Memory operand with address space suitable for 'ds_*' GDS
22486          instructions
22487
22488     'RD'
22489          Memory operand with address space suitable for any 'ds_*'
22490          instructions
22491
22492     'RM'
22493          Memory operand with address space suitable for 'global_*'
22494          instructions
22495
22496_ARC --'config/arc/constraints.md'_
22497     'q'
22498          Registers usable in ARCompact 16-bit instructions: 'r0'-'r3',
22499          'r12'-'r15'.  This constraint can only match when the '-mq'
22500          option is in effect.
22501
22502     'e'
22503          Registers usable as base-regs of memory addresses in ARCompact
22504          16-bit memory instructions: 'r0'-'r3', 'r12'-'r15', 'sp'.
22505          This constraint can only match when the '-mq' option is in
22506          effect.
22507     'D'
22508          ARC FPX (dpfp) 64-bit registers.  'D0', 'D1'.
22509
22510     'I'
22511          A signed 12-bit integer constant.
22512
22513     'Cal'
22514          constant for arithmetic/logical operations.  This might be any
22515          constant that can be put into a long immediate by the assmbler
22516          or linker without involving a PIC relocation.
22517
22518     'K'
22519          A 3-bit unsigned integer constant.
22520
22521     'L'
22522          A 6-bit unsigned integer constant.
22523
22524     'CnL'
22525          One's complement of a 6-bit unsigned integer constant.
22526
22527     'CmL'
22528          Two's complement of a 6-bit unsigned integer constant.
22529
22530     'M'
22531          A 5-bit unsigned integer constant.
22532
22533     'O'
22534          A 7-bit unsigned integer constant.
22535
22536     'P'
22537          A 8-bit unsigned integer constant.
22538
22539     'H'
22540          Any const_double value.
22541
22542_ARM family--'config/arm/constraints.md'_
22543
22544     'h'
22545          In Thumb state, the core registers 'r8'-'r15'.
22546
22547     'k'
22548          The stack pointer register.
22549
22550     'l'
22551          In Thumb State the core registers 'r0'-'r7'.  In ARM state
22552          this is an alias for the 'r' constraint.
22553
22554     't'
22555          VFP floating-point registers 's0'-'s31'.  Used for 32 bit
22556          values.
22557
22558     'w'
22559          VFP floating-point registers 'd0'-'d31' and the appropriate
22560          subset 'd0'-'d15' based on command line options.  Used for 64
22561          bit values only.  Not valid for Thumb1.
22562
22563     'y'
22564          The iWMMX co-processor registers.
22565
22566     'z'
22567          The iWMMX GR registers.
22568
22569     'G'
22570          The floating-point constant 0.0
22571
22572     'I'
22573          Integer that is valid as an immediate operand in a data
22574          processing instruction.  That is, an integer in the range 0 to
22575          255 rotated by a multiple of 2
22576
22577     'J'
22578          Integer in the range -4095 to 4095
22579
22580     'K'
22581          Integer that satisfies constraint 'I' when inverted (ones
22582          complement)
22583
22584     'L'
22585          Integer that satisfies constraint 'I' when negated (twos
22586          complement)
22587
22588     'M'
22589          Integer in the range 0 to 32
22590
22591     'Q'
22592          A memory reference where the exact address is in a single
22593          register (''m'' is preferable for 'asm' statements)
22594
22595     'R'
22596          An item in the constant pool
22597
22598     'S'
22599          A symbol in the text segment of the current file
22600
22601     'Uv'
22602          A memory reference suitable for VFP load/store insns
22603          (reg+constant offset)
22604
22605     'Uy'
22606          A memory reference suitable for iWMMXt load/store
22607          instructions.
22608
22609     'Uq'
22610          A memory reference suitable for the ARMv4 ldrsb instruction.
22611
22612_AVR family--'config/avr/constraints.md'_
22613     'l'
22614          Registers from r0 to r15
22615
22616     'a'
22617          Registers from r16 to r23
22618
22619     'd'
22620          Registers from r16 to r31
22621
22622     'w'
22623          Registers from r24 to r31.  These registers can be used in
22624          'adiw' command
22625
22626     'e'
22627          Pointer register (r26-r31)
22628
22629     'b'
22630          Base pointer register (r28-r31)
22631
22632     'q'
22633          Stack pointer register (SPH:SPL)
22634
22635     't'
22636          Temporary register r0
22637
22638     'x'
22639          Register pair X (r27:r26)
22640
22641     'y'
22642          Register pair Y (r29:r28)
22643
22644     'z'
22645          Register pair Z (r31:r30)
22646
22647     'I'
22648          Constant greater than -1, less than 64
22649
22650     'J'
22651          Constant greater than -64, less than 1
22652
22653     'K'
22654          Constant integer 2
22655
22656     'L'
22657          Constant integer 0
22658
22659     'M'
22660          Constant that fits in 8 bits
22661
22662     'N'
22663          Constant integer -1
22664
22665     'O'
22666          Constant integer 8, 16, or 24
22667
22668     'P'
22669          Constant integer 1
22670
22671     'G'
22672          A floating point constant 0.0
22673
22674     'Q'
22675          A memory address based on Y or Z pointer with displacement.
22676
22677_Blackfin family--'config/bfin/constraints.md'_
22678     'a'
22679          P register
22680
22681     'd'
22682          D register
22683
22684     'z'
22685          A call clobbered P register.
22686
22687     'qN'
22688          A single register.  If N is in the range 0 to 7, the
22689          corresponding D register.  If it is 'A', then the register P0.
22690
22691     'D'
22692          Even-numbered D register
22693
22694     'W'
22695          Odd-numbered D register
22696
22697     'e'
22698          Accumulator register.
22699
22700     'A'
22701          Even-numbered accumulator register.
22702
22703     'B'
22704          Odd-numbered accumulator register.
22705
22706     'b'
22707          I register
22708
22709     'v'
22710          B register
22711
22712     'f'
22713          M register
22714
22715     'c'
22716          Registers used for circular buffering, i.e. I, B, or L
22717          registers.
22718
22719     'C'
22720          The CC register.
22721
22722     't'
22723          LT0 or LT1.
22724
22725     'k'
22726          LC0 or LC1.
22727
22728     'u'
22729          LB0 or LB1.
22730
22731     'x'
22732          Any D, P, B, M, I or L register.
22733
22734     'y'
22735          Additional registers typically used only in prologues and
22736          epilogues: RETS, RETN, RETI, RETX, RETE, ASTAT, SEQSTAT and
22737          USP.
22738
22739     'w'
22740          Any register except accumulators or CC.
22741
22742     'Ksh'
22743          Signed 16 bit integer (in the range -32768 to 32767)
22744
22745     'Kuh'
22746          Unsigned 16 bit integer (in the range 0 to 65535)
22747
22748     'Ks7'
22749          Signed 7 bit integer (in the range -64 to 63)
22750
22751     'Ku7'
22752          Unsigned 7 bit integer (in the range 0 to 127)
22753
22754     'Ku5'
22755          Unsigned 5 bit integer (in the range 0 to 31)
22756
22757     'Ks4'
22758          Signed 4 bit integer (in the range -8 to 7)
22759
22760     'Ks3'
22761          Signed 3 bit integer (in the range -3 to 4)
22762
22763     'Ku3'
22764          Unsigned 3 bit integer (in the range 0 to 7)
22765
22766     'PN'
22767          Constant N, where N is a single-digit constant in the range 0
22768          to 4.
22769
22770     'PA'
22771          An integer equal to one of the MACFLAG_XXX constants that is
22772          suitable for use with either accumulator.
22773
22774     'PB'
22775          An integer equal to one of the MACFLAG_XXX constants that is
22776          suitable for use only with accumulator A1.
22777
22778     'M1'
22779          Constant 255.
22780
22781     'M2'
22782          Constant 65535.
22783
22784     'J'
22785          An integer constant with exactly a single bit set.
22786
22787     'L'
22788          An integer constant with all bits set except exactly one.
22789
22790     'H'
22791
22792     'Q'
22793          Any SYMBOL_REF.
22794
22795_CR16 Architecture--'config/cr16/cr16.h'_
22796
22797     'b'
22798          Registers from r0 to r14 (registers without stack pointer)
22799
22800     't'
22801          Register from r0 to r11 (all 16-bit registers)
22802
22803     'p'
22804          Register from r12 to r15 (all 32-bit registers)
22805
22806     'I'
22807          Signed constant that fits in 4 bits
22808
22809     'J'
22810          Signed constant that fits in 5 bits
22811
22812     'K'
22813          Signed constant that fits in 6 bits
22814
22815     'L'
22816          Unsigned constant that fits in 4 bits
22817
22818     'M'
22819          Signed constant that fits in 32 bits
22820
22821     'N'
22822          Check for 64 bits wide constants for add/sub instructions
22823
22824     'G'
22825          Floating point constant that is legal for store immediate
22826
22827_C-SKY--'config/csky/constraints.md'_
22828
22829     'a'
22830          The mini registers r0 - r7.
22831
22832     'b'
22833          The low registers r0 - r15.
22834
22835     'c'
22836          C register.
22837
22838     'y'
22839          HI and LO registers.
22840
22841     'l'
22842          LO register.
22843
22844     'h'
22845          HI register.
22846
22847     'v'
22848          Vector registers.
22849
22850     'z'
22851          Stack pointer register (SP).
22852
22853     The C-SKY back end supports a large set of additional constraints
22854     that are only useful for instruction selection or splitting rather
22855     than inline asm, such as constraints representing constant integer
22856     ranges accepted by particular instruction encodings.  Refer to the
22857     source code for details.
22858
22859_Epiphany--'config/epiphany/constraints.md'_
22860     'U16'
22861          An unsigned 16-bit constant.
22862
22863     'K'
22864          An unsigned 5-bit constant.
22865
22866     'L'
22867          A signed 11-bit constant.
22868
22869     'Cm1'
22870          A signed 11-bit constant added to -1.  Can only match when the
22871          '-m1reg-REG' option is active.
22872
22873     'Cl1'
22874          Left-shift of -1, i.e., a bit mask with a block of leading
22875          ones, the rest being a block of trailing zeroes.  Can only
22876          match when the '-m1reg-REG' option is active.
22877
22878     'Cr1'
22879          Right-shift of -1, i.e., a bit mask with a trailing block of
22880          ones, the rest being zeroes.  Or to put it another way, one
22881          less than a power of two.  Can only match when the
22882          '-m1reg-REG' option is active.
22883
22884     'Cal'
22885          Constant for arithmetic/logical operations.  This is like 'i',
22886          except that for position independent code, no symbols /
22887          expressions needing relocations are allowed.
22888
22889     'Csy'
22890          Symbolic constant for call/jump instruction.
22891
22892     'Rcs'
22893          The register class usable in short insns.  This is a register
22894          class constraint, and can thus drive register allocation.
22895          This constraint won't match unless '-mprefer-short-insn-regs'
22896          is in effect.
22897
22898     'Rsc'
22899          The the register class of registers that can be used to hold a
22900          sibcall call address.  I.e., a caller-saved register.
22901
22902     'Rct'
22903          Core control register class.
22904
22905     'Rgs'
22906          The register group usable in short insns.  This constraint
22907          does not use a register class, so that it only passively
22908          matches suitable registers, and doesn't drive register
22909          allocation.
22910
22911     'Car'
22912          Constant suitable for the addsi3_r pattern.  This is a valid
22913          offset For byte, halfword, or word addressing.
22914
22915     'Rra'
22916          Matches the return address if it can be replaced with the link
22917          register.
22918
22919     'Rcc'
22920          Matches the integer condition code register.
22921
22922     'Sra'
22923          Matches the return address if it is in a stack slot.
22924
22925     'Cfm'
22926          Matches control register values to switch fp mode, which are
22927          encapsulated in 'UNSPEC_FP_MODE'.
22928
22929_FRV--'config/frv/frv.h'_
22930     'a'
22931          Register in the class 'ACC_REGS' ('acc0' to 'acc7').
22932
22933     'b'
22934          Register in the class 'EVEN_ACC_REGS' ('acc0' to 'acc7').
22935
22936     'c'
22937          Register in the class 'CC_REGS' ('fcc0' to 'fcc3' and 'icc0'
22938          to 'icc3').
22939
22940     'd'
22941          Register in the class 'GPR_REGS' ('gr0' to 'gr63').
22942
22943     'e'
22944          Register in the class 'EVEN_REGS' ('gr0' to 'gr63').  Odd
22945          registers are excluded not in the class but through the use of
22946          a machine mode larger than 4 bytes.
22947
22948     'f'
22949          Register in the class 'FPR_REGS' ('fr0' to 'fr63').
22950
22951     'h'
22952          Register in the class 'FEVEN_REGS' ('fr0' to 'fr63').  Odd
22953          registers are excluded not in the class but through the use of
22954          a machine mode larger than 4 bytes.
22955
22956     'l'
22957          Register in the class 'LR_REG' (the 'lr' register).
22958
22959     'q'
22960          Register in the class 'QUAD_REGS' ('gr2' to 'gr63').  Register
22961          numbers not divisible by 4 are excluded not in the class but
22962          through the use of a machine mode larger than 8 bytes.
22963
22964     't'
22965          Register in the class 'ICC_REGS' ('icc0' to 'icc3').
22966
22967     'u'
22968          Register in the class 'FCC_REGS' ('fcc0' to 'fcc3').
22969
22970     'v'
22971          Register in the class 'ICR_REGS' ('cc4' to 'cc7').
22972
22973     'w'
22974          Register in the class 'FCR_REGS' ('cc0' to 'cc3').
22975
22976     'x'
22977          Register in the class 'QUAD_FPR_REGS' ('fr0' to 'fr63').
22978          Register numbers not divisible by 4 are excluded not in the
22979          class but through the use of a machine mode larger than 8
22980          bytes.
22981
22982     'z'
22983          Register in the class 'SPR_REGS' ('lcr' and 'lr').
22984
22985     'A'
22986          Register in the class 'QUAD_ACC_REGS' ('acc0' to 'acc7').
22987
22988     'B'
22989          Register in the class 'ACCG_REGS' ('accg0' to 'accg7').
22990
22991     'C'
22992          Register in the class 'CR_REGS' ('cc0' to 'cc7').
22993
22994     'G'
22995          Floating point constant zero
22996
22997     'I'
22998          6-bit signed integer constant
22999
23000     'J'
23001          10-bit signed integer constant
23002
23003     'L'
23004          16-bit signed integer constant
23005
23006     'M'
23007          16-bit unsigned integer constant
23008
23009     'N'
23010          12-bit signed integer constant that is negative--i.e. in the
23011          range of -2048 to -1
23012
23013     'O'
23014          Constant zero
23015
23016     'P'
23017          12-bit signed integer constant that is greater than zero--i.e.
23018          in the range of 1 to 2047.
23019
23020_FT32--'config/ft32/constraints.md'_
23021     'A'
23022          An absolute address
23023
23024     'B'
23025          An offset address
23026
23027     'W'
23028          A register indirect memory operand
23029
23030     'e'
23031          An offset address.
23032
23033     'f'
23034          An offset address.
23035
23036     'O'
23037          The constant zero or one
23038
23039     'I'
23040          A 16-bit signed constant (-32768 ... 32767)
23041
23042     'w'
23043          A bitfield mask suitable for bext or bins
23044
23045     'x'
23046          An inverted bitfield mask suitable for bext or bins
23047
23048     'L'
23049          A 16-bit unsigned constant, multiple of 4 (0 ... 65532)
23050
23051     'S'
23052          A 20-bit signed constant (-524288 ... 524287)
23053
23054     'b'
23055          A constant for a bitfield width (1 ... 16)
23056
23057     'KA'
23058          A 10-bit signed constant (-512 ... 511)
23059
23060_Hewlett-Packard PA-RISC--'config/pa/pa.h'_
23061     'a'
23062          General register 1
23063
23064     'f'
23065          Floating point register
23066
23067     'q'
23068          Shift amount register
23069
23070     'x'
23071          Floating point register (deprecated)
23072
23073     'y'
23074          Upper floating point register (32-bit), floating point
23075          register (64-bit)
23076
23077     'Z'
23078          Any register
23079
23080     'I'
23081          Signed 11-bit integer constant
23082
23083     'J'
23084          Signed 14-bit integer constant
23085
23086     'K'
23087          Integer constant that can be deposited with a 'zdepi'
23088          instruction
23089
23090     'L'
23091          Signed 5-bit integer constant
23092
23093     'M'
23094          Integer constant 0
23095
23096     'N'
23097          Integer constant that can be loaded with a 'ldil' instruction
23098
23099     'O'
23100          Integer constant whose value plus one is a power of 2
23101
23102     'P'
23103          Integer constant that can be used for 'and' operations in
23104          'depi' and 'extru' instructions
23105
23106     'S'
23107          Integer constant 31
23108
23109     'U'
23110          Integer constant 63
23111
23112     'G'
23113          Floating-point constant 0.0
23114
23115     'A'
23116          A 'lo_sum' data-linkage-table memory operand
23117
23118     'Q'
23119          A memory operand that can be used as the destination operand
23120          of an integer store instruction
23121
23122     'R'
23123          A scaled or unscaled indexed memory operand
23124
23125     'T'
23126          A memory operand for floating-point loads and stores
23127
23128     'W'
23129          A register indirect memory operand
23130
23131_Intel IA-64--'config/ia64/ia64.h'_
23132     'a'
23133          General register 'r0' to 'r3' for 'addl' instruction
23134
23135     'b'
23136          Branch register
23137
23138     'c'
23139          Predicate register ('c' as in "conditional")
23140
23141     'd'
23142          Application register residing in M-unit
23143
23144     'e'
23145          Application register residing in I-unit
23146
23147     'f'
23148          Floating-point register
23149
23150     'm'
23151          Memory operand.  If used together with '<' or '>', the operand
23152          can have postincrement and postdecrement which require
23153          printing with '%Pn' on IA-64.
23154
23155     'G'
23156          Floating-point constant 0.0 or 1.0
23157
23158     'I'
23159          14-bit signed integer constant
23160
23161     'J'
23162          22-bit signed integer constant
23163
23164     'K'
23165          8-bit signed integer constant for logical instructions
23166
23167     'L'
23168          8-bit adjusted signed integer constant for compare pseudo-ops
23169
23170     'M'
23171          6-bit unsigned integer constant for shift counts
23172
23173     'N'
23174          9-bit signed integer constant for load and store
23175          postincrements
23176
23177     'O'
23178          The constant zero
23179
23180     'P'
23181          0 or -1 for 'dep' instruction
23182
23183     'Q'
23184          Non-volatile memory for floating-point loads and stores
23185
23186     'R'
23187          Integer constant in the range 1 to 4 for 'shladd' instruction
23188
23189     'S'
23190          Memory operand except postincrement and postdecrement.  This
23191          is now roughly the same as 'm' when not used together with '<'
23192          or '>'.
23193
23194_M32C--'config/m32c/m32c.c'_
23195     'Rsp'
23196     'Rfb'
23197     'Rsb'
23198          '$sp', '$fb', '$sb'.
23199
23200     'Rcr'
23201          Any control register, when they're 16 bits wide (nothing if
23202          control registers are 24 bits wide)
23203
23204     'Rcl'
23205          Any control register, when they're 24 bits wide.
23206
23207     'R0w'
23208     'R1w'
23209     'R2w'
23210     'R3w'
23211          $r0, $r1, $r2, $r3.
23212
23213     'R02'
23214          $r0 or $r2, or $r2r0 for 32 bit values.
23215
23216     'R13'
23217          $r1 or $r3, or $r3r1 for 32 bit values.
23218
23219     'Rdi'
23220          A register that can hold a 64 bit value.
23221
23222     'Rhl'
23223          $r0 or $r1 (registers with addressable high/low bytes)
23224
23225     'R23'
23226          $r2 or $r3
23227
23228     'Raa'
23229          Address registers
23230
23231     'Raw'
23232          Address registers when they're 16 bits wide.
23233
23234     'Ral'
23235          Address registers when they're 24 bits wide.
23236
23237     'Rqi'
23238          Registers that can hold QI values.
23239
23240     'Rad'
23241          Registers that can be used with displacements ($a0, $a1, $sb).
23242
23243     'Rsi'
23244          Registers that can hold 32 bit values.
23245
23246     'Rhi'
23247          Registers that can hold 16 bit values.
23248
23249     'Rhc'
23250          Registers chat can hold 16 bit values, including all control
23251          registers.
23252
23253     'Rra'
23254          $r0 through R1, plus $a0 and $a1.
23255
23256     'Rfl'
23257          The flags register.
23258
23259     'Rmm'
23260          The memory-based pseudo-registers $mem0 through $mem15.
23261
23262     'Rpi'
23263          Registers that can hold pointers (16 bit registers for r8c,
23264          m16c; 24 bit registers for m32cm, m32c).
23265
23266     'Rpa'
23267          Matches multiple registers in a PARALLEL to form a larger
23268          register.  Used to match function return values.
23269
23270     'Is3'
23271          -8 ... 7
23272
23273     'IS1'
23274          -128 ... 127
23275
23276     'IS2'
23277          -32768 ... 32767
23278
23279     'IU2'
23280          0 ... 65535
23281
23282     'In4'
23283          -8 ... -1 or 1 ... 8
23284
23285     'In5'
23286          -16 ... -1 or 1 ... 16
23287
23288     'In6'
23289          -32 ... -1 or 1 ... 32
23290
23291     'IM2'
23292          -65536 ... -1
23293
23294     'Ilb'
23295          An 8 bit value with exactly one bit set.
23296
23297     'Ilw'
23298          A 16 bit value with exactly one bit set.
23299
23300     'Sd'
23301          The common src/dest memory addressing modes.
23302
23303     'Sa'
23304          Memory addressed using $a0 or $a1.
23305
23306     'Si'
23307          Memory addressed with immediate addresses.
23308
23309     'Ss'
23310          Memory addressed using the stack pointer ($sp).
23311
23312     'Sf'
23313          Memory addressed using the frame base register ($fb).
23314
23315     'Ss'
23316          Memory addressed using the small base register ($sb).
23317
23318     'S1'
23319          $r1h
23320
23321_MicroBlaze--'config/microblaze/constraints.md'_
23322     'd'
23323          A general register ('r0' to 'r31').
23324
23325     'z'
23326          A status register ('rmsr', '$fcc1' to '$fcc7').
23327
23328_MIPS--'config/mips/constraints.md'_
23329     'd'
23330          A general-purpose register.  This is equivalent to 'r' unless
23331          generating MIPS16 code, in which case the MIPS16 register set
23332          is used.
23333
23334     'f'
23335          A floating-point register (if available).
23336
23337     'h'
23338          Formerly the 'hi' register.  This constraint is no longer
23339          supported.
23340
23341     'l'
23342          The 'lo' register.  Use this register to store values that are
23343          no bigger than a word.
23344
23345     'x'
23346          The concatenated 'hi' and 'lo' registers.  Use this register
23347          to store doubleword values.
23348
23349     'c'
23350          A register suitable for use in an indirect jump.  This will
23351          always be '$25' for '-mabicalls'.
23352
23353     'v'
23354          Register '$3'.  Do not use this constraint in new code; it is
23355          retained only for compatibility with glibc.
23356
23357     'y'
23358          Equivalent to 'r'; retained for backwards compatibility.
23359
23360     'z'
23361          A floating-point condition code register.
23362
23363     'I'
23364          A signed 16-bit constant (for arithmetic instructions).
23365
23366     'J'
23367          Integer zero.
23368
23369     'K'
23370          An unsigned 16-bit constant (for logic instructions).
23371
23372     'L'
23373          A signed 32-bit constant in which the lower 16 bits are zero.
23374          Such constants can be loaded using 'lui'.
23375
23376     'M'
23377          A constant that cannot be loaded using 'lui', 'addiu' or
23378          'ori'.
23379
23380     'N'
23381          A constant in the range -65535 to -1 (inclusive).
23382
23383     'O'
23384          A signed 15-bit constant.
23385
23386     'P'
23387          A constant in the range 1 to 65535 (inclusive).
23388
23389     'G'
23390          Floating-point zero.
23391
23392     'R'
23393          An address that can be used in a non-macro load or store.
23394
23395     'ZC'
23396          A memory operand whose address is formed by a base register
23397          and offset that is suitable for use in instructions with the
23398          same addressing mode as 'll' and 'sc'.
23399
23400     'ZD'
23401          An address suitable for a 'prefetch' instruction, or for any
23402          other instruction with the same addressing mode as 'prefetch'.
23403
23404_Motorola 680x0--'config/m68k/constraints.md'_
23405     'a'
23406          Address register
23407
23408     'd'
23409          Data register
23410
23411     'f'
23412          68881 floating-point register, if available
23413
23414     'I'
23415          Integer in the range 1 to 8
23416
23417     'J'
23418          16-bit signed number
23419
23420     'K'
23421          Signed number whose magnitude is greater than 0x80
23422
23423     'L'
23424          Integer in the range -8 to -1
23425
23426     'M'
23427          Signed number whose magnitude is greater than 0x100
23428
23429     'N'
23430          Range 24 to 31, rotatert:SI 8 to 1 expressed as rotate
23431
23432     'O'
23433          16 (for rotate using swap)
23434
23435     'P'
23436          Range 8 to 15, rotatert:HI 8 to 1 expressed as rotate
23437
23438     'R'
23439          Numbers that mov3q can handle
23440
23441     'G'
23442          Floating point constant that is not a 68881 constant
23443
23444     'S'
23445          Operands that satisfy 'm' when -mpcrel is in effect
23446
23447     'T'
23448          Operands that satisfy 's' when -mpcrel is not in effect
23449
23450     'Q'
23451          Address register indirect addressing mode
23452
23453     'U'
23454          Register offset addressing
23455
23456     'W'
23457          const_call_operand
23458
23459     'Cs'
23460          symbol_ref or const
23461
23462     'Ci'
23463          const_int
23464
23465     'C0'
23466          const_int 0
23467
23468     'Cj'
23469          Range of signed numbers that don't fit in 16 bits
23470
23471     'Cmvq'
23472          Integers valid for mvq
23473
23474     'Capsw'
23475          Integers valid for a moveq followed by a swap
23476
23477     'Cmvz'
23478          Integers valid for mvz
23479
23480     'Cmvs'
23481          Integers valid for mvs
23482
23483     'Ap'
23484          push_operand
23485
23486     'Ac'
23487          Non-register operands allowed in clr
23488
23489_Moxie--'config/moxie/constraints.md'_
23490     'A'
23491          An absolute address
23492
23493     'B'
23494          An offset address
23495
23496     'W'
23497          A register indirect memory operand
23498
23499     'I'
23500          A constant in the range of 0 to 255.
23501
23502     'N'
23503          A constant in the range of 0 to -255.
23504
23505_MSP430-'config/msp430/constraints.md'_
23506
23507     'R12'
23508          Register R12.
23509
23510     'R13'
23511          Register R13.
23512
23513     'K'
23514          Integer constant 1.
23515
23516     'L'
23517          Integer constant -1^20..1^19.
23518
23519     'M'
23520          Integer constant 1-4.
23521
23522     'Ya'
23523          Memory references which do not require an extended MOVX
23524          instruction.
23525
23526     'Yl'
23527          Memory reference, labels only.
23528
23529     'Ys'
23530          Memory reference, stack only.
23531
23532_NDS32--'config/nds32/constraints.md'_
23533     'w'
23534          LOW register class $r0 to $r7 constraint for V3/V3M ISA.
23535     'l'
23536          LOW register class $r0 to $r7.
23537     'd'
23538          MIDDLE register class $r0 to $r11, $r16 to $r19.
23539     'h'
23540          HIGH register class $r12 to $r14, $r20 to $r31.
23541     't'
23542          Temporary assist register $ta (i.e. $r15).
23543     'k'
23544          Stack register $sp.
23545     'Iu03'
23546          Unsigned immediate 3-bit value.
23547     'In03'
23548          Negative immediate 3-bit value in the range of -7-0.
23549     'Iu04'
23550          Unsigned immediate 4-bit value.
23551     'Is05'
23552          Signed immediate 5-bit value.
23553     'Iu05'
23554          Unsigned immediate 5-bit value.
23555     'In05'
23556          Negative immediate 5-bit value in the range of -31-0.
23557     'Ip05'
23558          Unsigned immediate 5-bit value for movpi45 instruction with
23559          range 16-47.
23560     'Iu06'
23561          Unsigned immediate 6-bit value constraint for addri36.sp
23562          instruction.
23563     'Iu08'
23564          Unsigned immediate 8-bit value.
23565     'Iu09'
23566          Unsigned immediate 9-bit value.
23567     'Is10'
23568          Signed immediate 10-bit value.
23569     'Is11'
23570          Signed immediate 11-bit value.
23571     'Is15'
23572          Signed immediate 15-bit value.
23573     'Iu15'
23574          Unsigned immediate 15-bit value.
23575     'Ic15'
23576          A constant which is not in the range of imm15u but ok for bclr
23577          instruction.
23578     'Ie15'
23579          A constant which is not in the range of imm15u but ok for bset
23580          instruction.
23581     'It15'
23582          A constant which is not in the range of imm15u but ok for btgl
23583          instruction.
23584     'Ii15'
23585          A constant whose compliment value is in the range of imm15u
23586          and ok for bitci instruction.
23587     'Is16'
23588          Signed immediate 16-bit value.
23589     'Is17'
23590          Signed immediate 17-bit value.
23591     'Is19'
23592          Signed immediate 19-bit value.
23593     'Is20'
23594          Signed immediate 20-bit value.
23595     'Ihig'
23596          The immediate value that can be simply set high 20-bit.
23597     'Izeb'
23598          The immediate value 0xff.
23599     'Izeh'
23600          The immediate value 0xffff.
23601     'Ixls'
23602          The immediate value 0x01.
23603     'Ix11'
23604          The immediate value 0x7ff.
23605     'Ibms'
23606          The immediate value with power of 2.
23607     'Ifex'
23608          The immediate value with power of 2 minus 1.
23609     'U33'
23610          Memory constraint for 333 format.
23611     'U45'
23612          Memory constraint for 45 format.
23613     'U37'
23614          Memory constraint for 37 format.
23615
23616_Nios II family--'config/nios2/constraints.md'_
23617
23618     'I'
23619          Integer that is valid as an immediate operand in an
23620          instruction taking a signed 16-bit number.  Range -32768 to
23621          32767.
23622
23623     'J'
23624          Integer that is valid as an immediate operand in an
23625          instruction taking an unsigned 16-bit number.  Range 0 to
23626          65535.
23627
23628     'K'
23629          Integer that is valid as an immediate operand in an
23630          instruction taking only the upper 16-bits of a 32-bit number.
23631          Range 32-bit numbers with the lower 16-bits being 0.
23632
23633     'L'
23634          Integer that is valid as an immediate operand for a shift
23635          instruction.  Range 0 to 31.
23636
23637     'M'
23638          Integer that is valid as an immediate operand for only the
23639          value 0.  Can be used in conjunction with the format modifier
23640          'z' to use 'r0' instead of '0' in the assembly output.
23641
23642     'N'
23643          Integer that is valid as an immediate operand for a custom
23644          instruction opcode.  Range 0 to 255.
23645
23646     'P'
23647          An immediate operand for R2 andchi/andci instructions.
23648
23649     'S'
23650          Matches immediates which are addresses in the small data
23651          section and therefore can be added to 'gp' as a 16-bit
23652          immediate to re-create their 32-bit value.
23653
23654     'U'
23655          Matches constants suitable as an operand for the rdprs and
23656          cache instructions.
23657
23658     'v'
23659          A memory operand suitable for Nios II R2 load/store exclusive
23660          instructions.
23661
23662     'w'
23663          A memory operand suitable for load/store IO and cache
23664          instructions.
23665
23666     'T'
23667          A 'const' wrapped 'UNSPEC' expression, representing a
23668          supported PIC or TLS relocation.
23669
23670_OpenRISC--'config/or1k/constraints.md'_
23671     'I'
23672          Integer that is valid as an immediate operand in an
23673          instruction taking a signed 16-bit number.  Range -32768 to
23674          32767.
23675
23676     'K'
23677          Integer that is valid as an immediate operand in an
23678          instruction taking an unsigned 16-bit number.  Range 0 to
23679          65535.
23680
23681     'M'
23682          Signed 16-bit constant shifted left 16 bits.  (Used with
23683          'l.movhi')
23684
23685     'O'
23686          Zero
23687
23688     'c'
23689          Register usable for sibcalls.
23690
23691_PDP-11--'config/pdp11/constraints.md'_
23692     'a'
23693          Floating point registers AC0 through AC3.  These can be loaded
23694          from/to memory with a single instruction.
23695
23696     'd'
23697          Odd numbered general registers (R1, R3, R5).  These are used
23698          for 16-bit multiply operations.
23699
23700     'D'
23701          A memory reference that is encoded within the opcode, but not
23702          auto-increment or auto-decrement.
23703
23704     'f'
23705          Any of the floating point registers (AC0 through AC5).
23706
23707     'G'
23708          Floating point constant 0.
23709
23710     'h'
23711          Floating point registers AC4 and AC5.  These cannot be loaded
23712          from/to memory with a single instruction.
23713
23714     'I'
23715          An integer constant that fits in 16 bits.
23716
23717     'J'
23718          An integer constant whose low order 16 bits are zero.
23719
23720     'K'
23721          An integer constant that does not meet the constraints for
23722          codes 'I' or 'J'.
23723
23724     'L'
23725          The integer constant 1.
23726
23727     'M'
23728          The integer constant -1.
23729
23730     'N'
23731          The integer constant 0.
23732
23733     'O'
23734          Integer constants 0 through 3; shifts by these amounts are
23735          handled as multiple single-bit shifts rather than a single
23736          variable-length shift.
23737
23738     'Q'
23739          A memory reference which requires an additional word (address
23740          or offset) after the opcode.
23741
23742     'R'
23743          A memory reference that is encoded within the opcode.
23744
23745_PowerPC and IBM RS6000--'config/rs6000/constraints.md'_
23746     'r'
23747          A general purpose register (GPR), 'r0'...'r31'.
23748
23749     'b'
23750          A base register.  Like 'r', but 'r0' is not allowed, so
23751          'r1'...'r31'.
23752
23753     'f'
23754          A floating point register (FPR), 'f0'...'f31'.
23755
23756     'd'
23757          A floating point register.  This is the same as 'f' nowadays;
23758          historically 'f' was for single-precision and 'd' was for
23759          double-precision floating point.
23760
23761     'v'
23762          An Altivec vector register (VR), 'v0'...'v31'.
23763
23764     'wa'
23765          A VSX register (VSR), 'vs0'...'vs63'.  This is either an FPR
23766          ('vs0'...'vs31' are 'f0'...'f31') or a VR ('vs32'...'vs63' are
23767          'v0'...'v31').
23768
23769          When using 'wa', you should use the '%x' output modifier, so
23770          that the correct register number is printed.  For example:
23771
23772               asm ("xvadddp %x0,%x1,%x2"
23773                    : "=wa" (v1)
23774                    : "wa" (v2), "wa" (v3));
23775
23776          You should not use '%x' for 'v' operands:
23777
23778               asm ("xsaddqp %0,%1,%2"
23779                    : "=v" (v1)
23780                    : "v" (v2), "v" (v3));
23781
23782     'h'
23783          A special register ('vrsave', 'ctr', or 'lr').
23784
23785     'c'
23786          The count register, 'ctr'.
23787
23788     'l'
23789          The link register, 'lr'.
23790
23791     'x'
23792          Condition register field 0, 'cr0'.
23793
23794     'y'
23795          Any condition register field, 'cr0'...'cr7'.
23796
23797     'z'
23798          The carry bit, 'XER[CA]'.
23799
23800     'we'
23801          Like 'wa', if '-mpower9-vector' and '-m64' are used;
23802          otherwise, 'NO_REGS'.
23803
23804     'wn'
23805          No register ('NO_REGS').
23806
23807     'wr'
23808          Like 'r', if '-mpowerpc64' is used; otherwise, 'NO_REGS'.
23809
23810     'wx'
23811          Like 'd', if '-mpowerpc-gfxopt' is used; otherwise, 'NO_REGS'.
23812
23813     'wA'
23814          Like 'b', if '-mpowerpc64' is used; otherwise, 'NO_REGS'.
23815
23816     'wB'
23817          Signed 5-bit constant integer that can be loaded into an
23818          Altivec register.
23819
23820     'wD'
23821          Int constant that is the element number of the 64-bit scalar
23822          in a vector.
23823
23824     'wE'
23825          Vector constant that can be loaded with the XXSPLTIB
23826          instruction.
23827
23828     'wF'
23829          Memory operand suitable for power8 GPR load fusion.
23830
23831     'wL'
23832          Int constant that is the element number mfvsrld accesses in a
23833          vector.
23834
23835     'wM'
23836          Match vector constant with all 1's if the XXLORC instruction
23837          is available.
23838
23839     'wO'
23840          Memory operand suitable for the ISA 3.0 vector d-form
23841          instructions.
23842
23843     'wQ'
23844          Memory operand suitable for the load/store quad instructions.
23845
23846     'wS'
23847          Vector constant that can be loaded with XXSPLTIB & sign
23848          extension.
23849
23850     'wY'
23851          A memory operand for a DS-form instruction.
23852
23853     'wZ'
23854          An indexed or indirect memory operand, ignoring the bottom 4
23855          bits.
23856
23857     'I'
23858          A signed 16-bit constant.
23859
23860     'J'
23861          An unsigned 16-bit constant shifted left 16 bits (use 'L'
23862          instead for 'SImode' constants).
23863
23864     'K'
23865          An unsigned 16-bit constant.
23866
23867     'L'
23868          A signed 16-bit constant shifted left 16 bits.
23869
23870     'M'
23871          An integer constant greater than 31.
23872
23873     'N'
23874          An exact power of 2.
23875
23876     'O'
23877          The integer constant zero.
23878
23879     'P'
23880          A constant whose negation is a signed 16-bit constant.
23881
23882     'eI'
23883          A signed 34-bit integer constant if prefixed instructions are
23884          supported.
23885
23886     'G'
23887          A floating point constant that can be loaded into a register
23888          with one instruction per word.
23889
23890     'H'
23891          A floating point constant that can be loaded into a register
23892          using three instructions.
23893
23894     'm'
23895          A memory operand.  Normally, 'm' does not allow addresses that
23896          update the base register.  If the '<' or '>' constraint is
23897          also used, they are allowed and therefore on PowerPC targets
23898          in that case it is only safe to use 'm<>' in an 'asm'
23899          statement if that 'asm' statement accesses the operand exactly
23900          once.  The 'asm' statement must also use '%U<OPNO>' as a
23901          placeholder for the "update" flag in the corresponding load or
23902          store instruction.  For example:
23903
23904               asm ("st%U0 %1,%0" : "=m<>" (mem) : "r" (val));
23905
23906          is correct but:
23907
23908               asm ("st %1,%0" : "=m<>" (mem) : "r" (val));
23909
23910          is not.
23911
23912     'es'
23913          A "stable" memory operand; that is, one which does not include
23914          any automodification of the base register.  This used to be
23915          useful when 'm' allowed automodification of the base register,
23916          but as those are now only allowed when '<' or '>' is used,
23917          'es' is basically the same as 'm' without '<' and '>'.
23918
23919     'Q'
23920          A memory operand addressed by just a base register.
23921
23922     'Y'
23923          A memory operand for a DQ-form instruction.
23924
23925     'Z'
23926          A memory operand accessed with indexed or indirect addressing.
23927
23928     'R'
23929          An AIX TOC entry.
23930
23931     'a'
23932          An indexed or indirect address.
23933
23934     'U'
23935          A V.4 small data reference.
23936
23937     'W'
23938          A vector constant that does not require memory.
23939
23940     'j'
23941          The zero vector constant.
23942
23943_PRU--'config/pru/constraints.md'_
23944     'I'
23945          An unsigned 8-bit integer constant.
23946
23947     'J'
23948          An unsigned 16-bit integer constant.
23949
23950     'L'
23951          An unsigned 5-bit integer constant (for shift counts).
23952
23953     'T'
23954          A text segment (program memory) constant label.
23955
23956     'Z'
23957          Integer constant zero.
23958
23959_RL78--'config/rl78/constraints.md'_
23960
23961     'Int3'
23962          An integer constant in the range 1 ... 7.
23963     'Int8'
23964          An integer constant in the range 0 ... 255.
23965     'J'
23966          An integer constant in the range -255 ... 0
23967     'K'
23968          The integer constant 1.
23969     'L'
23970          The integer constant -1.
23971     'M'
23972          The integer constant 0.
23973     'N'
23974          The integer constant 2.
23975     'O'
23976          The integer constant -2.
23977     'P'
23978          An integer constant in the range 1 ... 15.
23979     'Qbi'
23980          The built-in compare types-eq, ne, gtu, ltu, geu, and leu.
23981     'Qsc'
23982          The synthetic compare types-gt, lt, ge, and le.
23983     'Wab'
23984          A memory reference with an absolute address.
23985     'Wbc'
23986          A memory reference using 'BC' as a base register, with an
23987          optional offset.
23988     'Wca'
23989          A memory reference using 'AX', 'BC', 'DE', or 'HL' for the
23990          address, for calls.
23991     'Wcv'
23992          A memory reference using any 16-bit register pair for the
23993          address, for calls.
23994     'Wd2'
23995          A memory reference using 'DE' as a base register, with an
23996          optional offset.
23997     'Wde'
23998          A memory reference using 'DE' as a base register, without any
23999          offset.
24000     'Wfr'
24001          Any memory reference to an address in the far address space.
24002     'Wh1'
24003          A memory reference using 'HL' as a base register, with an
24004          optional one-byte offset.
24005     'Whb'
24006          A memory reference using 'HL' as a base register, with 'B' or
24007          'C' as the index register.
24008     'Whl'
24009          A memory reference using 'HL' as a base register, without any
24010          offset.
24011     'Ws1'
24012          A memory reference using 'SP' as a base register, with an
24013          optional one-byte offset.
24014     'Y'
24015          Any memory reference to an address in the near address space.
24016     'A'
24017          The 'AX' register.
24018     'B'
24019          The 'BC' register.
24020     'D'
24021          The 'DE' register.
24022     'R'
24023          'A' through 'L' registers.
24024     'S'
24025          The 'SP' register.
24026     'T'
24027          The 'HL' register.
24028     'Z08W'
24029          The 16-bit 'R8' register.
24030     'Z10W'
24031          The 16-bit 'R10' register.
24032     'Zint'
24033          The registers reserved for interrupts ('R24' to 'R31').
24034     'a'
24035          The 'A' register.
24036     'b'
24037          The 'B' register.
24038     'c'
24039          The 'C' register.
24040     'd'
24041          The 'D' register.
24042     'e'
24043          The 'E' register.
24044     'h'
24045          The 'H' register.
24046     'l'
24047          The 'L' register.
24048     'v'
24049          The virtual registers.
24050     'w'
24051          The 'PSW' register.
24052     'x'
24053          The 'X' register.
24054
24055_RISC-V--'config/riscv/constraints.md'_
24056
24057     'f'
24058          A floating-point register (if available).
24059
24060     'I'
24061          An I-type 12-bit signed immediate.
24062
24063     'J'
24064          Integer zero.
24065
24066     'K'
24067          A 5-bit unsigned immediate for CSR access instructions.
24068
24069     'A'
24070          An address that is held in a general-purpose register.
24071
24072_RX--'config/rx/constraints.md'_
24073     'Q'
24074          An address which does not involve register indirect addressing
24075          or pre/post increment/decrement addressing.
24076
24077     'Symbol'
24078          A symbol reference.
24079
24080     'Int08'
24081          A constant in the range -256 to 255, inclusive.
24082
24083     'Sint08'
24084          A constant in the range -128 to 127, inclusive.
24085
24086     'Sint16'
24087          A constant in the range -32768 to 32767, inclusive.
24088
24089     'Sint24'
24090          A constant in the range -8388608 to 8388607, inclusive.
24091
24092     'Uint04'
24093          A constant in the range 0 to 15, inclusive.
24094
24095_S/390 and zSeries--'config/s390/s390.h'_
24096     'a'
24097          Address register (general purpose register except r0)
24098
24099     'c'
24100          Condition code register
24101
24102     'd'
24103          Data register (arbitrary general purpose register)
24104
24105     'f'
24106          Floating-point register
24107
24108     'I'
24109          Unsigned 8-bit constant (0-255)
24110
24111     'J'
24112          Unsigned 12-bit constant (0-4095)
24113
24114     'K'
24115          Signed 16-bit constant (-32768-32767)
24116
24117     'L'
24118          Value appropriate as displacement.
24119          '(0..4095)'
24120               for short displacement
24121          '(-524288..524287)'
24122               for long displacement
24123
24124     'M'
24125          Constant integer with a value of 0x7fffffff.
24126
24127     'N'
24128          Multiple letter constraint followed by 4 parameter letters.
24129          '0..9:'
24130               number of the part counting from most to least
24131               significant
24132          'H,Q:'
24133               mode of the part
24134          'D,S,H:'
24135               mode of the containing operand
24136          '0,F:'
24137               value of the other parts (F--all bits set)
24138          The constraint matches if the specified part of a constant has
24139          a value different from its other parts.
24140
24141     'Q'
24142          Memory reference without index register and with short
24143          displacement.
24144
24145     'R'
24146          Memory reference with index register and short displacement.
24147
24148     'S'
24149          Memory reference without index register but with long
24150          displacement.
24151
24152     'T'
24153          Memory reference with index register and long displacement.
24154
24155     'U'
24156          Pointer with short displacement.
24157
24158     'W'
24159          Pointer with long displacement.
24160
24161     'Y'
24162          Shift count operand.
24163
24164_SPARC--'config/sparc/sparc.h'_
24165     'f'
24166          Floating-point register on the SPARC-V8 architecture and lower
24167          floating-point register on the SPARC-V9 architecture.
24168
24169     'e'
24170          Floating-point register.  It is equivalent to 'f' on the
24171          SPARC-V8 architecture and contains both lower and upper
24172          floating-point registers on the SPARC-V9 architecture.
24173
24174     'c'
24175          Floating-point condition code register.
24176
24177     'd'
24178          Lower floating-point register.  It is only valid on the
24179          SPARC-V9 architecture when the Visual Instruction Set is
24180          available.
24181
24182     'b'
24183          Floating-point register.  It is only valid on the SPARC-V9
24184          architecture when the Visual Instruction Set is available.
24185
24186     'h'
24187          64-bit global or out register for the SPARC-V8+ architecture.
24188
24189     'C'
24190          The constant all-ones, for floating-point.
24191
24192     'A'
24193          Signed 5-bit constant
24194
24195     'D'
24196          A vector constant
24197
24198     'I'
24199          Signed 13-bit constant
24200
24201     'J'
24202          Zero
24203
24204     'K'
24205          32-bit constant with the low 12 bits clear (a constant that
24206          can be loaded with the 'sethi' instruction)
24207
24208     'L'
24209          A constant in the range supported by 'movcc' instructions
24210          (11-bit signed immediate)
24211
24212     'M'
24213          A constant in the range supported by 'movrcc' instructions
24214          (10-bit signed immediate)
24215
24216     'N'
24217          Same as 'K', except that it verifies that bits that are not in
24218          the lower 32-bit range are all zero.  Must be used instead of
24219          'K' for modes wider than 'SImode'
24220
24221     'O'
24222          The constant 4096
24223
24224     'G'
24225          Floating-point zero
24226
24227     'H'
24228          Signed 13-bit constant, sign-extended to 32 or 64 bits
24229
24230     'P'
24231          The constant -1
24232
24233     'Q'
24234          Floating-point constant whose integral representation can be
24235          moved into an integer register using a single sethi
24236          instruction
24237
24238     'R'
24239          Floating-point constant whose integral representation can be
24240          moved into an integer register using a single mov instruction
24241
24242     'S'
24243          Floating-point constant whose integral representation can be
24244          moved into an integer register using a high/lo_sum instruction
24245          sequence
24246
24247     'T'
24248          Memory address aligned to an 8-byte boundary
24249
24250     'U'
24251          Even register
24252
24253     'W'
24254          Memory address for 'e' constraint registers
24255
24256     'w'
24257          Memory address with only a base register
24258
24259     'Y'
24260          Vector zero
24261
24262_TI C6X family--'config/c6x/constraints.md'_
24263     'a'
24264          Register file A (A0-A31).
24265
24266     'b'
24267          Register file B (B0-B31).
24268
24269     'A'
24270          Predicate registers in register file A (A0-A2 on C64X and
24271          higher, A1 and A2 otherwise).
24272
24273     'B'
24274          Predicate registers in register file B (B0-B2).
24275
24276     'C'
24277          A call-used register in register file B (B0-B9, B16-B31).
24278
24279     'Da'
24280          Register file A, excluding predicate registers (A3-A31, plus
24281          A0 if not C64X or higher).
24282
24283     'Db'
24284          Register file B, excluding predicate registers (B3-B31).
24285
24286     'Iu4'
24287          Integer constant in the range 0 ... 15.
24288
24289     'Iu5'
24290          Integer constant in the range 0 ... 31.
24291
24292     'In5'
24293          Integer constant in the range -31 ... 0.
24294
24295     'Is5'
24296          Integer constant in the range -16 ... 15.
24297
24298     'I5x'
24299          Integer constant that can be the operand of an ADDA or a SUBA
24300          insn.
24301
24302     'IuB'
24303          Integer constant in the range 0 ... 65535.
24304
24305     'IsB'
24306          Integer constant in the range -32768 ... 32767.
24307
24308     'IsC'
24309          Integer constant in the range -2^{20} ... 2^{20} - 1.
24310
24311     'Jc'
24312          Integer constant that is a valid mask for the clr instruction.
24313
24314     'Js'
24315          Integer constant that is a valid mask for the set instruction.
24316
24317     'Q'
24318          Memory location with A base register.
24319
24320     'R'
24321          Memory location with B base register.
24322
24323     'S0'
24324          On C64x+ targets, a GP-relative small data reference.
24325
24326     'S1'
24327          Any kind of 'SYMBOL_REF', for use in a call address.
24328
24329     'Si'
24330          Any kind of immediate operand, unless it matches the S0
24331          constraint.
24332
24333     'T'
24334          Memory location with B base register, but not using a long
24335          offset.
24336
24337     'W'
24338          A memory operand with an address that cannot be used in an
24339          unaligned access.
24340
24341     'Z'
24342          Register B14 (aka DP).
24343
24344_TILE-Gx--'config/tilegx/constraints.md'_
24345     'R00'
24346     'R01'
24347     'R02'
24348     'R03'
24349     'R04'
24350     'R05'
24351     'R06'
24352     'R07'
24353     'R08'
24354     'R09'
24355     'R10'
24356          Each of these represents a register constraint for an
24357          individual register, from r0 to r10.
24358
24359     'I'
24360          Signed 8-bit integer constant.
24361
24362     'J'
24363          Signed 16-bit integer constant.
24364
24365     'K'
24366          Unsigned 16-bit integer constant.
24367
24368     'L'
24369          Integer constant that fits in one signed byte when incremented
24370          by one (-129 ... 126).
24371
24372     'm'
24373          Memory operand.  If used together with '<' or '>', the operand
24374          can have postincrement which requires printing with '%In' and
24375          '%in' on TILE-Gx.  For example:
24376
24377               asm ("st_add %I0,%1,%i0" : "=m<>" (*mem) : "r" (val));
24378
24379     'M'
24380          A bit mask suitable for the BFINS instruction.
24381
24382     'N'
24383          Integer constant that is a byte tiled out eight times.
24384
24385     'O'
24386          The integer zero constant.
24387
24388     'P'
24389          Integer constant that is a sign-extended byte tiled out as
24390          four shorts.
24391
24392     'Q'
24393          Integer constant that fits in one signed byte when incremented
24394          (-129 ... 126), but excluding -1.
24395
24396     'S'
24397          Integer constant that has all 1 bits consecutive and starting
24398          at bit 0.
24399
24400     'T'
24401          A 16-bit fragment of a got, tls, or pc-relative reference.
24402
24403     'U'
24404          Memory operand except postincrement.  This is roughly the same
24405          as 'm' when not used together with '<' or '>'.
24406
24407     'W'
24408          An 8-element vector constant with identical elements.
24409
24410     'Y'
24411          A 4-element vector constant with identical elements.
24412
24413     'Z0'
24414          The integer constant 0xffffffff.
24415
24416     'Z1'
24417          The integer constant 0xffffffff00000000.
24418
24419_TILEPro--'config/tilepro/constraints.md'_
24420     'R00'
24421     'R01'
24422     'R02'
24423     'R03'
24424     'R04'
24425     'R05'
24426     'R06'
24427     'R07'
24428     'R08'
24429     'R09'
24430     'R10'
24431          Each of these represents a register constraint for an
24432          individual register, from r0 to r10.
24433
24434     'I'
24435          Signed 8-bit integer constant.
24436
24437     'J'
24438          Signed 16-bit integer constant.
24439
24440     'K'
24441          Nonzero integer constant with low 16 bits zero.
24442
24443     'L'
24444          Integer constant that fits in one signed byte when incremented
24445          by one (-129 ... 126).
24446
24447     'm'
24448          Memory operand.  If used together with '<' or '>', the operand
24449          can have postincrement which requires printing with '%In' and
24450          '%in' on TILEPro.  For example:
24451
24452               asm ("swadd %I0,%1,%i0" : "=m<>" (mem) : "r" (val));
24453
24454     'M'
24455          A bit mask suitable for the MM instruction.
24456
24457     'N'
24458          Integer constant that is a byte tiled out four times.
24459
24460     'O'
24461          The integer zero constant.
24462
24463     'P'
24464          Integer constant that is a sign-extended byte tiled out as two
24465          shorts.
24466
24467     'Q'
24468          Integer constant that fits in one signed byte when incremented
24469          (-129 ... 126), but excluding -1.
24470
24471     'T'
24472          A symbolic operand, or a 16-bit fragment of a got, tls, or
24473          pc-relative reference.
24474
24475     'U'
24476          Memory operand except postincrement.  This is roughly the same
24477          as 'm' when not used together with '<' or '>'.
24478
24479     'W'
24480          A 4-element vector constant with identical elements.
24481
24482     'Y'
24483          A 2-element vector constant with identical elements.
24484
24485_Visium--'config/visium/constraints.md'_
24486     'b'
24487          EAM register 'mdb'
24488
24489     'c'
24490          EAM register 'mdc'
24491
24492     'f'
24493          Floating point register
24494
24495     'k'
24496          Register for sibcall optimization
24497
24498     'l'
24499          General register, but not 'r29', 'r30' and 'r31'
24500
24501     't'
24502          Register 'r1'
24503
24504     'u'
24505          Register 'r2'
24506
24507     'v'
24508          Register 'r3'
24509
24510     'G'
24511          Floating-point constant 0.0
24512
24513     'J'
24514          Integer constant in the range 0 ..  65535 (16-bit immediate)
24515
24516     'K'
24517          Integer constant in the range 1 ..  31 (5-bit immediate)
24518
24519     'L'
24520          Integer constant in the range -65535 ..  -1 (16-bit negative
24521          immediate)
24522
24523     'M'
24524          Integer constant -1
24525
24526     'O'
24527          Integer constant 0
24528
24529     'P'
24530          Integer constant 32
24531
24532_x86 family--'config/i386/constraints.md'_
24533     'R'
24534          Legacy register--the eight integer registers available on all
24535          i386 processors ('a', 'b', 'c', 'd', 'si', 'di', 'bp', 'sp').
24536
24537     'q'
24538          Any register accessible as 'Rl'.  In 32-bit mode, 'a', 'b',
24539          'c', and 'd'; in 64-bit mode, any integer register.
24540
24541     'Q'
24542          Any register accessible as 'Rh': 'a', 'b', 'c', and 'd'.
24543
24544     'l'
24545          Any register that can be used as the index in a base+index
24546          memory access: that is, any general register except the stack
24547          pointer.
24548
24549     'a'
24550          The 'a' register.
24551
24552     'b'
24553          The 'b' register.
24554
24555     'c'
24556          The 'c' register.
24557
24558     'd'
24559          The 'd' register.
24560
24561     'S'
24562          The 'si' register.
24563
24564     'D'
24565          The 'di' register.
24566
24567     'A'
24568          The 'a' and 'd' registers.  This class is used for
24569          instructions that return double word results in the 'ax:dx'
24570          register pair.  Single word values will be allocated either in
24571          'ax' or 'dx'.  For example on i386 the following implements
24572          'rdtsc':
24573
24574               unsigned long long rdtsc (void)
24575               {
24576                 unsigned long long tick;
24577                 __asm__ __volatile__("rdtsc":"=A"(tick));
24578                 return tick;
24579               }
24580
24581          This is not correct on x86-64 as it would allocate tick in
24582          either 'ax' or 'dx'.  You have to use the following variant
24583          instead:
24584
24585               unsigned long long rdtsc (void)
24586               {
24587                 unsigned int tickl, tickh;
24588                 __asm__ __volatile__("rdtsc":"=a"(tickl),"=d"(tickh));
24589                 return ((unsigned long long)tickh << 32)|tickl;
24590               }
24591
24592     'U'
24593          The call-clobbered integer registers.
24594
24595     'f'
24596          Any 80387 floating-point (stack) register.
24597
24598     't'
24599          Top of 80387 floating-point stack ('%st(0)').
24600
24601     'u'
24602          Second from top of 80387 floating-point stack ('%st(1)').
24603
24604     'Yk'
24605          Any mask register that can be used as a predicate, i.e.
24606          'k1-k7'.
24607
24608     'k'
24609          Any mask register.
24610
24611     'y'
24612          Any MMX register.
24613
24614     'x'
24615          Any SSE register.
24616
24617     'v'
24618          Any EVEX encodable SSE register ('%xmm0-%xmm31').
24619
24620     'w'
24621          Any bound register.
24622
24623     'Yz'
24624          First SSE register ('%xmm0').
24625
24626     'Yi'
24627          Any SSE register, when SSE2 and inter-unit moves are enabled.
24628
24629     'Yj'
24630          Any SSE register, when SSE2 and inter-unit moves from vector
24631          registers are enabled.
24632
24633     'Ym'
24634          Any MMX register, when inter-unit moves are enabled.
24635
24636     'Yn'
24637          Any MMX register, when inter-unit moves from vector registers
24638          are enabled.
24639
24640     'Yp'
24641          Any integer register when 'TARGET_PARTIAL_REG_STALL' is
24642          disabled.
24643
24644     'Ya'
24645          Any integer register when zero extensions with 'AND' are
24646          disabled.
24647
24648     'Yb'
24649          Any register that can be used as the GOT base when calling
24650          '___tls_get_addr': that is, any general register except 'a'
24651          and 'sp' registers, for '-fno-plt' if linker supports it.
24652          Otherwise, 'b' register.
24653
24654     'Yf'
24655          Any x87 register when 80387 floating-point arithmetic is
24656          enabled.
24657
24658     'Yr'
24659          Lower SSE register when avoiding REX prefix and all SSE
24660          registers otherwise.
24661
24662     'Yv'
24663          For AVX512VL, any EVEX-encodable SSE register
24664          ('%xmm0-%xmm31'), otherwise any SSE register.
24665
24666     'Yh'
24667          Any EVEX-encodable SSE register, that has number factor of
24668          four.
24669
24670     'Bf'
24671          Flags register operand.
24672
24673     'Bg'
24674          GOT memory operand.
24675
24676     'Bm'
24677          Vector memory operand.
24678
24679     'Bc'
24680          Constant memory operand.
24681
24682     'Bn'
24683          Memory operand without REX prefix.
24684
24685     'Bs'
24686          Sibcall memory operand.
24687
24688     'Bw'
24689          Call memory operand.
24690
24691     'Bz'
24692          Constant call address operand.
24693
24694     'BC'
24695          SSE constant -1 operand.
24696
24697     'I'
24698          Integer constant in the range 0 ... 31, for 32-bit shifts.
24699
24700     'J'
24701          Integer constant in the range 0 ... 63, for 64-bit shifts.
24702
24703     'K'
24704          Signed 8-bit integer constant.
24705
24706     'L'
24707          '0xFF' or '0xFFFF', for andsi as a zero-extending move.
24708
24709     'M'
24710          0, 1, 2, or 3 (shifts for the 'lea' instruction).
24711
24712     'N'
24713          Unsigned 8-bit integer constant (for 'in' and 'out'
24714          instructions).
24715
24716     'O'
24717          Integer constant in the range 0 ... 127, for 128-bit shifts.
24718
24719     'G'
24720          Standard 80387 floating point constant.
24721
24722     'C'
24723          SSE constant zero operand.
24724
24725     'e'
24726          32-bit signed integer constant, or a symbolic reference known
24727          to fit that range (for immediate operands in sign-extending
24728          x86-64 instructions).
24729
24730     'We'
24731          32-bit signed integer constant, or a symbolic reference known
24732          to fit that range (for sign-extending conversion operations
24733          that require non-'VOIDmode' immediate operands).
24734
24735     'Wz'
24736          32-bit unsigned integer constant, or a symbolic reference
24737          known to fit that range (for zero-extending conversion
24738          operations that require non-'VOIDmode' immediate operands).
24739
24740     'Wd'
24741          128-bit integer constant where both the high and low 64-bit
24742          word satisfy the 'e' constraint.
24743
24744     'Z'
24745          32-bit unsigned integer constant, or a symbolic reference
24746          known to fit that range (for immediate operands in
24747          zero-extending x86-64 instructions).
24748
24749     'Tv'
24750          VSIB address operand.
24751
24752     'Ts'
24753          Address operand without segment register.
24754
24755_Xstormy16--'config/stormy16/stormy16.h'_
24756     'a'
24757          Register r0.
24758
24759     'b'
24760          Register r1.
24761
24762     'c'
24763          Register r2.
24764
24765     'd'
24766          Register r8.
24767
24768     'e'
24769          Registers r0 through r7.
24770
24771     't'
24772          Registers r0 and r1.
24773
24774     'y'
24775          The carry register.
24776
24777     'z'
24778          Registers r8 and r9.
24779
24780     'I'
24781          A constant between 0 and 3 inclusive.
24782
24783     'J'
24784          A constant that has exactly one bit set.
24785
24786     'K'
24787          A constant that has exactly one bit clear.
24788
24789     'L'
24790          A constant between 0 and 255 inclusive.
24791
24792     'M'
24793          A constant between -255 and 0 inclusive.
24794
24795     'N'
24796          A constant between -3 and 0 inclusive.
24797
24798     'O'
24799          A constant between 1 and 4 inclusive.
24800
24801     'P'
24802          A constant between -4 and -1 inclusive.
24803
24804     'Q'
24805          A memory reference that is a stack push.
24806
24807     'R'
24808          A memory reference that is a stack pop.
24809
24810     'S'
24811          A memory reference that refers to a constant address of known
24812          value.
24813
24814     'T'
24815          The register indicated by Rx (not implemented yet).
24816
24817     'U'
24818          A constant that is not between 2 and 15 inclusive.
24819
24820     'Z'
24821          The constant 0.
24822
24823_Xtensa--'config/xtensa/constraints.md'_
24824     'a'
24825          General-purpose 32-bit register
24826
24827     'b'
24828          One-bit boolean register
24829
24830     'A'
24831          MAC16 40-bit accumulator register
24832
24833     'I'
24834          Signed 12-bit integer constant, for use in MOVI instructions
24835
24836     'J'
24837          Signed 8-bit integer constant, for use in ADDI instructions
24838
24839     'K'
24840          Integer constant valid for BccI instructions
24841
24842     'L'
24843          Unsigned constant valid for BccUI instructions
24844
24845
24846File: gccint.info,  Node: Disable Insn Alternatives,  Next: Define Constraints,  Prev: Machine Constraints,  Up: Constraints
24847
2484817.8.6 Disable insn alternatives using the 'enabled' attribute
24849--------------------------------------------------------------
24850
24851There are three insn attributes that may be used to selectively disable
24852instruction alternatives:
24853
24854'enabled'
24855     Says whether an alternative is available on the current subtarget.
24856
24857'preferred_for_size'
24858     Says whether an enabled alternative should be used in code that is
24859     optimized for size.
24860
24861'preferred_for_speed'
24862     Says whether an enabled alternative should be used in code that is
24863     optimized for speed.
24864
24865 All these attributes should use '(const_int 1)' to allow an alternative
24866or '(const_int 0)' to disallow it.  The attributes must be a static
24867property of the subtarget; they cannot for example depend on the current
24868operands, on the current optimization level, on the location of the insn
24869within the body of a loop, on whether register allocation has finished,
24870or on the current compiler pass.
24871
24872 The 'enabled' attribute is a correctness property.  It tells GCC to act
24873as though the disabled alternatives were never defined in the first
24874place.  This is useful when adding new instructions to an existing
24875pattern in cases where the new instructions are only available for
24876certain cpu architecture levels (typically mapped to the '-march='
24877command-line option).
24878
24879 In contrast, the 'preferred_for_size' and 'preferred_for_speed'
24880attributes are strong optimization hints rather than correctness
24881properties.  'preferred_for_size' tells GCC which alternatives to
24882consider when adding or modifying an instruction that GCC wants to
24883optimize for size.  'preferred_for_speed' does the same thing for speed.
24884Note that things like code motion can lead to cases where code optimized
24885for size uses alternatives that are not preferred for size, and
24886similarly for speed.
24887
24888 Although 'define_insn's can in principle specify the 'enabled'
24889attribute directly, it is often clearer to have subsiduary attributes
24890for each architectural feature of interest.  The 'define_insn's can then
24891use these subsiduary attributes to say which alternatives require which
24892features.  The example below does this for 'cpu_facility'.
24893
24894 E.g.  the following two patterns could easily be merged using the
24895'enabled' attribute:
24896
24897
24898     (define_insn "*movdi_old"
24899       [(set (match_operand:DI 0 "register_operand" "=d")
24900             (match_operand:DI 1 "register_operand" " d"))]
24901       "!TARGET_NEW"
24902       "lgr %0,%1")
24903
24904     (define_insn "*movdi_new"
24905       [(set (match_operand:DI 0 "register_operand" "=d,f,d")
24906             (match_operand:DI 1 "register_operand" " d,d,f"))]
24907       "TARGET_NEW"
24908       "@
24909        lgr  %0,%1
24910        ldgr %0,%1
24911        lgdr %0,%1")
24912
24913 to:
24914
24915
24916     (define_insn "*movdi_combined"
24917       [(set (match_operand:DI 0 "register_operand" "=d,f,d")
24918             (match_operand:DI 1 "register_operand" " d,d,f"))]
24919       ""
24920       "@
24921        lgr  %0,%1
24922        ldgr %0,%1
24923        lgdr %0,%1"
24924       [(set_attr "cpu_facility" "*,new,new")])
24925
24926 with the 'enabled' attribute defined like this:
24927
24928
24929     (define_attr "cpu_facility" "standard,new" (const_string "standard"))
24930
24931     (define_attr "enabled" ""
24932       (cond [(eq_attr "cpu_facility" "standard") (const_int 1)
24933              (and (eq_attr "cpu_facility" "new")
24934                   (ne (symbol_ref "TARGET_NEW") (const_int 0)))
24935              (const_int 1)]
24936             (const_int 0)))
24937
24938
24939File: gccint.info,  Node: Define Constraints,  Next: C Constraint Interface,  Prev: Disable Insn Alternatives,  Up: Constraints
24940
2494117.8.7 Defining Machine-Specific Constraints
24942--------------------------------------------
24943
24944Machine-specific constraints fall into two categories: register and
24945non-register constraints.  Within the latter category, constraints which
24946allow subsets of all possible memory or address operands should be
24947specially marked, to give 'reload' more information.
24948
24949 Machine-specific constraints can be given names of arbitrary length,
24950but they must be entirely composed of letters, digits, underscores
24951('_'), and angle brackets ('< >').  Like C identifiers, they must begin
24952with a letter or underscore.
24953
24954 In order to avoid ambiguity in operand constraint strings, no
24955constraint can have a name that begins with any other constraint's name.
24956For example, if 'x' is defined as a constraint name, 'xy' may not be,
24957and vice versa.  As a consequence of this rule, no constraint may begin
24958with one of the generic constraint letters: 'E F V X g i m n o p r s'.
24959
24960 Register constraints correspond directly to register classes.  *Note
24961Register Classes::.  There is thus not much flexibility in their
24962definitions.
24963
24964 -- MD Expression: define_register_constraint name regclass docstring
24965     All three arguments are string constants.  NAME is the name of the
24966     constraint, as it will appear in 'match_operand' expressions.  If
24967     NAME is a multi-letter constraint its length shall be the same for
24968     all constraints starting with the same letter.  REGCLASS can be
24969     either the name of the corresponding register class (*note Register
24970     Classes::), or a C expression which evaluates to the appropriate
24971     register class.  If it is an expression, it must have no side
24972     effects, and it cannot look at the operand.  The usual use of
24973     expressions is to map some register constraints to 'NO_REGS' when
24974     the register class is not available on a given subarchitecture.
24975
24976     DOCSTRING is a sentence documenting the meaning of the constraint.
24977     Docstrings are explained further below.
24978
24979 Non-register constraints are more like predicates: the constraint
24980definition gives a boolean expression which indicates whether the
24981constraint matches.
24982
24983 -- MD Expression: define_constraint name docstring exp
24984     The NAME and DOCSTRING arguments are the same as for
24985     'define_register_constraint', but note that the docstring comes
24986     immediately after the name for these expressions.  EXP is an RTL
24987     expression, obeying the same rules as the RTL expressions in
24988     predicate definitions.  *Note Defining Predicates::, for details.
24989     If it evaluates true, the constraint matches; if it evaluates
24990     false, it doesn't.  Constraint expressions should indicate which
24991     RTL codes they might match, just like predicate expressions.
24992
24993     'match_test' C expressions have access to the following variables:
24994
24995     OP
24996          The RTL object defining the operand.
24997     MODE
24998          The machine mode of OP.
24999     IVAL
25000          'INTVAL (OP)', if OP is a 'const_int'.
25001     HVAL
25002          'CONST_DOUBLE_HIGH (OP)', if OP is an integer 'const_double'.
25003     LVAL
25004          'CONST_DOUBLE_LOW (OP)', if OP is an integer 'const_double'.
25005     RVAL
25006          'CONST_DOUBLE_REAL_VALUE (OP)', if OP is a floating-point
25007          'const_double'.
25008
25009     The *VAL variables should only be used once another piece of the
25010     expression has verified that OP is the appropriate kind of RTL
25011     object.
25012
25013 Most non-register constraints should be defined with
25014'define_constraint'.  The remaining two definition expressions are only
25015appropriate for constraints that should be handled specially by 'reload'
25016if they fail to match.
25017
25018 -- MD Expression: define_memory_constraint name docstring exp
25019     Use this expression for constraints that match a subset of all
25020     memory operands: that is, 'reload' can make them match by
25021     converting the operand to the form '(mem (reg X))', where X is a
25022     base register (from the register class specified by
25023     'BASE_REG_CLASS', *note Register Classes::).
25024
25025     For example, on the S/390, some instructions do not accept
25026     arbitrary memory references, but only those that do not make use of
25027     an index register.  The constraint letter 'Q' is defined to
25028     represent a memory address of this type.  If 'Q' is defined with
25029     'define_memory_constraint', a 'Q' constraint can handle any memory
25030     operand, because 'reload' knows it can simply copy the memory
25031     address into a base register if required.  This is analogous to the
25032     way an 'o' constraint can handle any memory operand.
25033
25034     The syntax and semantics are otherwise identical to
25035     'define_constraint'.
25036
25037 -- MD Expression: define_special_memory_constraint name docstring exp
25038     Use this expression for constraints that match a subset of all
25039     memory operands: that is, 'reload' cannot make them match by
25040     reloading the address as it is described for
25041     'define_memory_constraint' or such address reload is undesirable
25042     with the performance point of view.
25043
25044     For example, 'define_special_memory_constraint' can be useful if
25045     specifically aligned memory is necessary or desirable for some insn
25046     operand.
25047
25048     The syntax and semantics are otherwise identical to
25049     'define_constraint'.
25050
25051 -- MD Expression: define_address_constraint name docstring exp
25052     Use this expression for constraints that match a subset of all
25053     address operands: that is, 'reload' can make the constraint match
25054     by converting the operand to the form '(reg X)', again with X a
25055     base register.
25056
25057     Constraints defined with 'define_address_constraint' can only be
25058     used with the 'address_operand' predicate, or machine-specific
25059     predicates that work the same way.  They are treated analogously to
25060     the generic 'p' constraint.
25061
25062     The syntax and semantics are otherwise identical to
25063     'define_constraint'.
25064
25065 For historical reasons, names beginning with the letters 'G H' are
25066reserved for constraints that match only 'const_double's, and names
25067beginning with the letters 'I J K L M N O P' are reserved for
25068constraints that match only 'const_int's.  This may change in the
25069future.  For the time being, constraints with these names must be
25070written in a stylized form, so that 'genpreds' can tell you did it
25071correctly:
25072
25073     (define_constraint "[GHIJKLMNOP]..."
25074       "DOC..."
25075       (and (match_code "const_int")  ; 'const_double' for G/H
25076            CONDITION...))            ; usually a 'match_test'
25077
25078 It is fine to use names beginning with other letters for constraints
25079that match 'const_double's or 'const_int's.
25080
25081 Each docstring in a constraint definition should be one or more
25082complete sentences, marked up in Texinfo format.  _They are currently
25083unused._  In the future they will be copied into the GCC manual, in
25084*note Machine Constraints::, replacing the hand-maintained tables
25085currently found in that section.  Also, in the future the compiler may
25086use this to give more helpful diagnostics when poor choice of 'asm'
25087constraints causes a reload failure.
25088
25089 If you put the pseudo-Texinfo directive '@internal' at the beginning of
25090a docstring, then (in the future) it will appear only in the internals
25091manual's version of the machine-specific constraint tables.  Use this
25092for constraints that should not appear in 'asm' statements.
25093
25094
25095File: gccint.info,  Node: C Constraint Interface,  Prev: Define Constraints,  Up: Constraints
25096
2509717.8.8 Testing constraints from C
25098---------------------------------
25099
25100It is occasionally useful to test a constraint from C code rather than
25101implicitly via the constraint string in a 'match_operand'.  The
25102generated file 'tm_p.h' declares a few interfaces for working with
25103constraints.  At present these are defined for all constraints except
25104'g' (which is equivalent to 'general_operand').
25105
25106 Some valid constraint names are not valid C identifiers, so there is a
25107mangling scheme for referring to them from C.  Constraint names that do
25108not contain angle brackets or underscores are left unchanged.
25109Underscores are doubled, each '<' is replaced with '_l', and each '>'
25110with '_g'.  Here are some examples:
25111
25112     *Original* *Mangled*
25113     x          x
25114     P42x       P42x
25115     P4_x       P4__x
25116     P4>x       P4_gx
25117     P4>>       P4_g_g
25118     P4_g>      P4__g_g
25119
25120 Throughout this section, the variable C is either a constraint in the
25121abstract sense, or a constant from 'enum constraint_num'; the variable M
25122is a mangled constraint name (usually as part of a larger identifier).
25123
25124 -- Enum: constraint_num
25125     For each constraint except 'g', there is a corresponding
25126     enumeration constant: 'CONSTRAINT_' plus the mangled name of the
25127     constraint.  Functions that take an 'enum constraint_num' as an
25128     argument expect one of these constants.
25129
25130 -- Function: inline bool satisfies_constraint_ M (rtx EXP)
25131     For each non-register constraint M except 'g', there is one of
25132     these functions; it returns 'true' if EXP satisfies the constraint.
25133     These functions are only visible if 'rtl.h' was included before
25134     'tm_p.h'.
25135
25136 -- Function: bool constraint_satisfied_p (rtx EXP, enum constraint_num
25137          C)
25138     Like the 'satisfies_constraint_M' functions, but the constraint to
25139     test is given as an argument, C.  If C specifies a register
25140     constraint, this function will always return 'false'.
25141
25142 -- Function: enum reg_class reg_class_for_constraint (enum
25143          constraint_num C)
25144     Returns the register class associated with C.  If C is not a
25145     register constraint, or those registers are not available for the
25146     currently selected subtarget, returns 'NO_REGS'.
25147
25148 Here is an example use of 'satisfies_constraint_M'.  In peephole
25149optimizations (*note Peephole Definitions::), operand constraint strings
25150are ignored, so if there are relevant constraints, they must be tested
25151in the C condition.  In the example, the optimization is applied if
25152operand 2 does _not_ satisfy the 'K' constraint.  (This is a simplified
25153version of a peephole definition from the i386 machine description.)
25154
25155     (define_peephole2
25156       [(match_scratch:SI 3 "r")
25157        (set (match_operand:SI 0 "register_operand" "")
25158             (mult:SI (match_operand:SI 1 "memory_operand" "")
25159                      (match_operand:SI 2 "immediate_operand" "")))]
25160
25161       "!satisfies_constraint_K (operands[2])"
25162
25163       [(set (match_dup 3) (match_dup 1))
25164        (set (match_dup 0) (mult:SI (match_dup 3) (match_dup 2)))]
25165
25166       "")
25167
25168
25169File: gccint.info,  Node: Standard Names,  Next: Pattern Ordering,  Prev: Constraints,  Up: Machine Desc
25170
2517117.9 Standard Pattern Names For Generation
25172==========================================
25173
25174Here is a table of the instruction names that are meaningful in the RTL
25175generation pass of the compiler.  Giving one of these names to an
25176instruction pattern tells the RTL generation pass that it can use the
25177pattern to accomplish a certain task.
25178
25179'movM'
25180     Here M stands for a two-letter machine mode name, in lowercase.
25181     This instruction pattern moves data with that machine mode from
25182     operand 1 to operand 0.  For example, 'movsi' moves full-word data.
25183
25184     If operand 0 is a 'subreg' with mode M of a register whose own mode
25185     is wider than M, the effect of this instruction is to store the
25186     specified value in the part of the register that corresponds to
25187     mode M.  Bits outside of M, but which are within the same target
25188     word as the 'subreg' are undefined.  Bits which are outside the
25189     target word are left unchanged.
25190
25191     This class of patterns is special in several ways.  First of all,
25192     each of these names up to and including full word size _must_ be
25193     defined, because there is no other way to copy a datum from one
25194     place to another.  If there are patterns accepting operands in
25195     larger modes, 'movM' must be defined for integer modes of those
25196     sizes.
25197
25198     Second, these patterns are not used solely in the RTL generation
25199     pass.  Even the reload pass can generate move insns to copy values
25200     from stack slots into temporary registers.  When it does so, one of
25201     the operands is a hard register and the other is an operand that
25202     can need to be reloaded into a register.
25203
25204     Therefore, when given such a pair of operands, the pattern must
25205     generate RTL which needs no reloading and needs no temporary
25206     registers--no registers other than the operands.  For example, if
25207     you support the pattern with a 'define_expand', then in such a case
25208     the 'define_expand' mustn't call 'force_reg' or any other such
25209     function which might generate new pseudo registers.
25210
25211     This requirement exists even for subword modes on a RISC machine
25212     where fetching those modes from memory normally requires several
25213     insns and some temporary registers.
25214
25215     During reload a memory reference with an invalid address may be
25216     passed as an operand.  Such an address will be replaced with a
25217     valid address later in the reload pass.  In this case, nothing may
25218     be done with the address except to use it as it stands.  If it is
25219     copied, it will not be replaced with a valid address.  No attempt
25220     should be made to make such an address into a valid address and no
25221     routine (such as 'change_address') that will do so may be called.
25222     Note that 'general_operand' will fail when applied to such an
25223     address.
25224
25225     The global variable 'reload_in_progress' (which must be explicitly
25226     declared if required) can be used to determine whether such special
25227     handling is required.
25228
25229     The variety of operands that have reloads depends on the rest of
25230     the machine description, but typically on a RISC machine these can
25231     only be pseudo registers that did not get hard registers, while on
25232     other machines explicit memory references will get optional
25233     reloads.
25234
25235     If a scratch register is required to move an object to or from
25236     memory, it can be allocated using 'gen_reg_rtx' prior to life
25237     analysis.
25238
25239     If there are cases which need scratch registers during or after
25240     reload, you must provide an appropriate secondary_reload target
25241     hook.
25242
25243     The macro 'can_create_pseudo_p' can be used to determine if it is
25244     unsafe to create new pseudo registers.  If this variable is
25245     nonzero, then it is unsafe to call 'gen_reg_rtx' to allocate a new
25246     pseudo.
25247
25248     The constraints on a 'movM' must permit moving any hard register to
25249     any other hard register provided that 'TARGET_HARD_REGNO_MODE_OK'
25250     permits mode M in both registers and 'TARGET_REGISTER_MOVE_COST'
25251     applied to their classes returns a value of 2.
25252
25253     It is obligatory to support floating point 'movM' instructions into
25254     and out of any registers that can hold fixed point values, because
25255     unions and structures (which have modes 'SImode' or 'DImode') can
25256     be in those registers and they may have floating point members.
25257
25258     There may also be a need to support fixed point 'movM' instructions
25259     in and out of floating point registers.  Unfortunately, I have
25260     forgotten why this was so, and I don't know whether it is still
25261     true.  If 'TARGET_HARD_REGNO_MODE_OK' rejects fixed point values in
25262     floating point registers, then the constraints of the fixed point
25263     'movM' instructions must be designed to avoid ever trying to reload
25264     into a floating point register.
25265
25266'reload_inM'
25267'reload_outM'
25268     These named patterns have been obsoleted by the target hook
25269     'secondary_reload'.
25270
25271     Like 'movM', but used when a scratch register is required to move
25272     between operand 0 and operand 1.  Operand 2 describes the scratch
25273     register.  See the discussion of the 'SECONDARY_RELOAD_CLASS' macro
25274     in *note Register Classes::.
25275
25276     There are special restrictions on the form of the 'match_operand's
25277     used in these patterns.  First, only the predicate for the reload
25278     operand is examined, i.e., 'reload_in' examines operand 1, but not
25279     the predicates for operand 0 or 2.  Second, there may be only one
25280     alternative in the constraints.  Third, only a single register
25281     class letter may be used for the constraint; subsequent constraint
25282     letters are ignored.  As a special exception, an empty constraint
25283     string matches the 'ALL_REGS' register class.  This may relieve
25284     ports of the burden of defining an 'ALL_REGS' constraint letter
25285     just for these patterns.
25286
25287'movstrictM'
25288     Like 'movM' except that if operand 0 is a 'subreg' with mode M of a
25289     register whose natural mode is wider, the 'movstrictM' instruction
25290     is guaranteed not to alter any of the register except the part
25291     which belongs to mode M.
25292
25293'movmisalignM'
25294     This variant of a move pattern is designed to load or store a value
25295     from a memory address that is not naturally aligned for its mode.
25296     For a store, the memory will be in operand 0; for a load, the
25297     memory will be in operand 1.  The other operand is guaranteed not
25298     to be a memory, so that it's easy to tell whether this is a load or
25299     store.
25300
25301     This pattern is used by the autovectorizer, and when expanding a
25302     'MISALIGNED_INDIRECT_REF' expression.
25303
25304'load_multiple'
25305     Load several consecutive memory locations into consecutive
25306     registers.  Operand 0 is the first of the consecutive registers,
25307     operand 1 is the first memory location, and operand 2 is a
25308     constant: the number of consecutive registers.
25309
25310     Define this only if the target machine really has such an
25311     instruction; do not define this if the most efficient way of
25312     loading consecutive registers from memory is to do them one at a
25313     time.
25314
25315     On some machines, there are restrictions as to which consecutive
25316     registers can be stored into memory, such as particular starting or
25317     ending register numbers or only a range of valid counts.  For those
25318     machines, use a 'define_expand' (*note Expander Definitions::) and
25319     make the pattern fail if the restrictions are not met.
25320
25321     Write the generated insn as a 'parallel' with elements being a
25322     'set' of one register from the appropriate memory location (you may
25323     also need 'use' or 'clobber' elements).  Use a 'match_parallel'
25324     (*note RTL Template::) to recognize the insn.  See 'rs6000.md' for
25325     examples of the use of this insn pattern.
25326
25327'store_multiple'
25328     Similar to 'load_multiple', but store several consecutive registers
25329     into consecutive memory locations.  Operand 0 is the first of the
25330     consecutive memory locations, operand 1 is the first register, and
25331     operand 2 is a constant: the number of consecutive registers.
25332
25333'vec_load_lanesMN'
25334     Perform an interleaved load of several vectors from memory operand
25335     1 into register operand 0.  Both operands have mode M.  The
25336     register operand is viewed as holding consecutive vectors of mode
25337     N, while the memory operand is a flat array that contains the same
25338     number of elements.  The operation is equivalent to:
25339
25340          int c = GET_MODE_SIZE (M) / GET_MODE_SIZE (N);
25341          for (j = 0; j < GET_MODE_NUNITS (N); j++)
25342            for (i = 0; i < c; i++)
25343              operand0[i][j] = operand1[j * c + i];
25344
25345     For example, 'vec_load_lanestiv4hi' loads 8 16-bit values from
25346     memory into a register of mode 'TI'.  The register contains two
25347     consecutive vectors of mode 'V4HI'.
25348
25349     This pattern can only be used if:
25350          TARGET_ARRAY_MODE_SUPPORTED_P (N, C)
25351     is true.  GCC assumes that, if a target supports this kind of
25352     instruction for some mode N, it also supports unaligned loads for
25353     vectors of mode N.
25354
25355     This pattern is not allowed to 'FAIL'.
25356
25357'vec_mask_load_lanesMN'
25358     Like 'vec_load_lanesMN', but takes an additional mask operand
25359     (operand 2) that specifies which elements of the destination
25360     vectors should be loaded.  Other elements of the destination
25361     vectors are set to zero.  The operation is equivalent to:
25362
25363          int c = GET_MODE_SIZE (M) / GET_MODE_SIZE (N);
25364          for (j = 0; j < GET_MODE_NUNITS (N); j++)
25365            if (operand2[j])
25366              for (i = 0; i < c; i++)
25367                operand0[i][j] = operand1[j * c + i];
25368            else
25369              for (i = 0; i < c; i++)
25370                operand0[i][j] = 0;
25371
25372     This pattern is not allowed to 'FAIL'.
25373
25374'vec_store_lanesMN'
25375     Equivalent to 'vec_load_lanesMN', with the memory and register
25376     operands reversed.  That is, the instruction is equivalent to:
25377
25378          int c = GET_MODE_SIZE (M) / GET_MODE_SIZE (N);
25379          for (j = 0; j < GET_MODE_NUNITS (N); j++)
25380            for (i = 0; i < c; i++)
25381              operand0[j * c + i] = operand1[i][j];
25382
25383     for a memory operand 0 and register operand 1.
25384
25385     This pattern is not allowed to 'FAIL'.
25386
25387'vec_mask_store_lanesMN'
25388     Like 'vec_store_lanesMN', but takes an additional mask operand
25389     (operand 2) that specifies which elements of the source vectors
25390     should be stored.  The operation is equivalent to:
25391
25392          int c = GET_MODE_SIZE (M) / GET_MODE_SIZE (N);
25393          for (j = 0; j < GET_MODE_NUNITS (N); j++)
25394            if (operand2[j])
25395              for (i = 0; i < c; i++)
25396                operand0[j * c + i] = operand1[i][j];
25397
25398     This pattern is not allowed to 'FAIL'.
25399
25400'gather_loadMN'
25401     Load several separate memory locations into a vector of mode M.
25402     Operand 1 is a scalar base address and operand 2 is a vector of
25403     mode N containing offsets from that base.  Operand 0 is a
25404     destination vector with the same number of elements as N.  For each
25405     element index I:
25406
25407        * extend the offset element I to address width, using zero
25408          extension if operand 3 is 1 and sign extension if operand 3 is
25409          zero;
25410        * multiply the extended offset by operand 4;
25411        * add the result to the base; and
25412        * load the value at that address into element I of operand 0.
25413
25414     The value of operand 3 does not matter if the offsets are already
25415     address width.
25416
25417'mask_gather_loadMN'
25418     Like 'gather_loadMN', but takes an extra mask operand as operand 5.
25419     Bit I of the mask is set if element I of the result should be
25420     loaded from memory and clear if element I of the result should be
25421     set to zero.
25422
25423'scatter_storeMN'
25424     Store a vector of mode M into several distinct memory locations.
25425     Operand 0 is a scalar base address and operand 1 is a vector of
25426     mode N containing offsets from that base.  Operand 4 is the vector
25427     of values that should be stored, which has the same number of
25428     elements as N.  For each element index I:
25429
25430        * extend the offset element I to address width, using zero
25431          extension if operand 2 is 1 and sign extension if operand 2 is
25432          zero;
25433        * multiply the extended offset by operand 3;
25434        * add the result to the base; and
25435        * store element I of operand 4 to that address.
25436
25437     The value of operand 2 does not matter if the offsets are already
25438     address width.
25439
25440'mask_scatter_storeMN'
25441     Like 'scatter_storeMN', but takes an extra mask operand as operand
25442     5.  Bit I of the mask is set if element I of the result should be
25443     stored to memory.
25444
25445'vec_setM'
25446     Set given field in the vector value.  Operand 0 is the vector to
25447     modify, operand 1 is new value of field and operand 2 specify the
25448     field index.
25449
25450'vec_extractMN'
25451     Extract given field from the vector value.  Operand 1 is the
25452     vector, operand 2 specify field index and operand 0 place to store
25453     value into.  The N mode is the mode of the field or vector of
25454     fields that should be extracted, should be either element mode of
25455     the vector mode M, or a vector mode with the same element mode and
25456     smaller number of elements.  If N is a vector mode, the index is
25457     counted in units of that mode.
25458
25459'vec_initMN'
25460     Initialize the vector to given values.  Operand 0 is the vector to
25461     initialize and operand 1 is parallel containing values for
25462     individual fields.  The N mode is the mode of the elements, should
25463     be either element mode of the vector mode M, or a vector mode with
25464     the same element mode and smaller number of elements.
25465
25466'vec_duplicateM'
25467     Initialize vector output operand 0 so that each element has the
25468     value given by scalar input operand 1.  The vector has mode M and
25469     the scalar has the mode appropriate for one element of M.
25470
25471     This pattern only handles duplicates of non-constant inputs.
25472     Constant vectors go through the 'movM' pattern instead.
25473
25474     This pattern is not allowed to 'FAIL'.
25475
25476'vec_seriesM'
25477     Initialize vector output operand 0 so that element I is equal to
25478     operand 1 plus I times operand 2.  In other words, create a linear
25479     series whose base value is operand 1 and whose step is operand 2.
25480
25481     The vector output has mode M and the scalar inputs have the mode
25482     appropriate for one element of M.  This pattern is not used for
25483     floating-point vectors, in order to avoid having to specify the
25484     rounding behavior for I > 1.
25485
25486     This pattern is not allowed to 'FAIL'.
25487
25488'while_ultMN'
25489     Set operand 0 to a mask that is true while incrementing operand 1
25490     gives a value that is less than operand 2.  Operand 0 has mode N
25491     and operands 1 and 2 are scalar integers of mode M.  The operation
25492     is equivalent to:
25493
25494          operand0[0] = operand1 < operand2;
25495          for (i = 1; i < GET_MODE_NUNITS (N); i++)
25496            operand0[i] = operand0[i - 1] && (operand1 + i < operand2);
25497
25498'check_raw_ptrsM'
25499     Check whether, given two pointers A and B and a length LEN, a write
25500     of LEN bytes at A followed by a read of LEN bytes at B can be split
25501     into interleaved byte accesses 'A[0], B[0], A[1], B[1], ...'
25502     without affecting the dependencies between the bytes.  Set operand
25503     0 to true if the split is possible and false otherwise.
25504
25505     Operands 1, 2 and 3 provide the values of A, B and LEN
25506     respectively.  Operand 4 is a constant integer that provides the
25507     known common alignment of A and B.  All inputs have mode M.
25508
25509     This split is possible if:
25510
25511          A == B || A + LEN <= B || B + LEN <= A
25512
25513     You should only define this pattern if the target has a way of
25514     accelerating the test without having to do the individual
25515     comparisons.
25516
25517'check_war_ptrsM'
25518     Like 'check_raw_ptrsM', but with the read and write swapped round.
25519     The split is possible in this case if:
25520
25521          B <= A || A + LEN <= B
25522
25523'vec_cmpMN'
25524     Output a vector comparison.  Operand 0 of mode N is the destination
25525     for predicate in operand 1 which is a signed vector comparison with
25526     operands of mode M in operands 2 and 3.  Predicate is computed by
25527     element-wise evaluation of the vector comparison with a truth value
25528     of all-ones and a false value of all-zeros.
25529
25530'vec_cmpuMN'
25531     Similar to 'vec_cmpMN' but perform unsigned vector comparison.
25532
25533'vec_cmpeqMN'
25534     Similar to 'vec_cmpMN' but perform equality or non-equality vector
25535     comparison only.  If 'vec_cmpMN' or 'vec_cmpuMN' instruction
25536     pattern is supported, it will be preferred over 'vec_cmpeqMN', so
25537     there is no need to define this instruction pattern if the others
25538     are supported.
25539
25540'vcondMN'
25541     Output a conditional vector move.  Operand 0 is the destination to
25542     receive a combination of operand 1 and operand 2, which are of mode
25543     M, dependent on the outcome of the predicate in operand 3 which is
25544     a signed vector comparison with operands of mode N in operands 4
25545     and 5.  The modes M and N should have the same size.  Operand 0
25546     will be set to the value OP1 & MSK | OP2 & ~MSK where MSK is
25547     computed by element-wise evaluation of the vector comparison with a
25548     truth value of all-ones and a false value of all-zeros.
25549
25550'vconduMN'
25551     Similar to 'vcondMN' but performs unsigned vector comparison.
25552
25553'vcondeqMN'
25554     Similar to 'vcondMN' but performs equality or non-equality vector
25555     comparison only.  If 'vcondMN' or 'vconduMN' instruction pattern is
25556     supported, it will be preferred over 'vcondeqMN', so there is no
25557     need to define this instruction pattern if the others are
25558     supported.
25559
25560'vcond_mask_MN'
25561     Similar to 'vcondMN' but operand 3 holds a pre-computed result of
25562     vector comparison.
25563
25564'maskloadMN'
25565     Perform a masked load of vector from memory operand 1 of mode M
25566     into register operand 0.  Mask is provided in register operand 2 of
25567     mode N.
25568
25569     This pattern is not allowed to 'FAIL'.
25570
25571'maskstoreMN'
25572     Perform a masked store of vector from register operand 1 of mode M
25573     into memory operand 0.  Mask is provided in register operand 2 of
25574     mode N.
25575
25576     This pattern is not allowed to 'FAIL'.
25577
25578'vec_permM'
25579     Output a (variable) vector permutation.  Operand 0 is the
25580     destination to receive elements from operand 1 and operand 2, which
25581     are of mode M.  Operand 3 is the "selector".  It is an integral
25582     mode vector of the same width and number of elements as mode M.
25583
25584     The input elements are numbered from 0 in operand 1 through 2*N-1
25585     in operand 2.  The elements of the selector must be computed modulo
25586     2*N.  Note that if 'rtx_equal_p(operand1, operand2)', this can be
25587     implemented with just operand 1 and selector elements modulo N.
25588
25589     In order to make things easy for a number of targets, if there is
25590     no 'vec_perm' pattern for mode M, but there is for mode Q where Q
25591     is a vector of 'QImode' of the same width as M, the middle-end will
25592     lower the mode M 'VEC_PERM_EXPR' to mode Q.
25593
25594     See also 'TARGET_VECTORIZER_VEC_PERM_CONST', which performs the
25595     analogous operation for constant selectors.
25596
25597'pushM1'
25598     Output a push instruction.  Operand 0 is value to push.  Used only
25599     when 'PUSH_ROUNDING' is defined.  For historical reason, this
25600     pattern may be missing and in such case an 'mov' expander is used
25601     instead, with a 'MEM' expression forming the push operation.  The
25602     'mov' expander method is deprecated.
25603
25604'addM3'
25605     Add operand 2 and operand 1, storing the result in operand 0.  All
25606     operands must have mode M.  This can be used even on two-address
25607     machines, by means of constraints requiring operands 1 and 0 to be
25608     the same location.
25609
25610'ssaddM3', 'usaddM3'
25611'subM3', 'sssubM3', 'ussubM3'
25612'mulM3', 'ssmulM3', 'usmulM3'
25613'divM3', 'ssdivM3'
25614'udivM3', 'usdivM3'
25615'modM3', 'umodM3'
25616'uminM3', 'umaxM3'
25617'andM3', 'iorM3', 'xorM3'
25618     Similar, for other arithmetic operations.
25619
25620'addvM4'
25621     Like 'addM3' but takes a 'code_label' as operand 3 and emits code
25622     to jump to it if signed overflow occurs during the addition.  This
25623     pattern is used to implement the built-in functions performing
25624     signed integer addition with overflow checking.
25625
25626'subvM4', 'mulvM4'
25627     Similar, for other signed arithmetic operations.
25628
25629'uaddvM4'
25630     Like 'addvM4' but for unsigned addition.  That is to say, the
25631     operation is the same as signed addition but the jump is taken only
25632     on unsigned overflow.
25633
25634'usubvM4', 'umulvM4'
25635     Similar, for other unsigned arithmetic operations.
25636
25637'addptrM3'
25638     Like 'addM3' but is guaranteed to only be used for address
25639     calculations.  The expanded code is not allowed to clobber the
25640     condition code.  It only needs to be defined if 'addM3' sets the
25641     condition code.  If adds used for address calculations and normal
25642     adds are not compatible it is required to expand a distinct pattern
25643     (e.g. using an unspec).  The pattern is used by LRA to emit address
25644     calculations.  'addM3' is used if 'addptrM3' is not defined.
25645
25646'fmaM4'
25647     Multiply operand 2 and operand 1, then add operand 3, storing the
25648     result in operand 0 without doing an intermediate rounding step.
25649     All operands must have mode M.  This pattern is used to implement
25650     the 'fma', 'fmaf', and 'fmal' builtin functions from the ISO C99
25651     standard.
25652
25653'fmsM4'
25654     Like 'fmaM4', except operand 3 subtracted from the product instead
25655     of added to the product.  This is represented in the rtl as
25656
25657          (fma:M OP1 OP2 (neg:M OP3))
25658
25659'fnmaM4'
25660     Like 'fmaM4' except that the intermediate product is negated before
25661     being added to operand 3.  This is represented in the rtl as
25662
25663          (fma:M (neg:M OP1) OP2 OP3)
25664
25665'fnmsM4'
25666     Like 'fmsM4' except that the intermediate product is negated before
25667     subtracting operand 3.  This is represented in the rtl as
25668
25669          (fma:M (neg:M OP1) OP2 (neg:M OP3))
25670
25671'sminM3', 'smaxM3'
25672     Signed minimum and maximum operations.  When used with floating
25673     point, if both operands are zeros, or if either operand is 'NaN',
25674     then it is unspecified which of the two operands is returned as the
25675     result.
25676
25677'fminM3', 'fmaxM3'
25678     IEEE-conformant minimum and maximum operations.  If one operand is
25679     a quiet 'NaN', then the other operand is returned.  If both
25680     operands are quiet 'NaN', then a quiet 'NaN' is returned.  In the
25681     case when gcc supports signaling 'NaN' (-fsignaling-nans) an
25682     invalid floating point exception is raised and a quiet 'NaN' is
25683     returned.
25684
25685     All operands have mode M, which is a scalar or vector
25686     floating-point mode.  These patterns are not allowed to 'FAIL'.
25687
25688'reduc_smin_scal_M', 'reduc_smax_scal_M'
25689     Find the signed minimum/maximum of the elements of a vector.  The
25690     vector is operand 1, and operand 0 is the scalar result, with mode
25691     equal to the mode of the elements of the input vector.
25692
25693'reduc_umin_scal_M', 'reduc_umax_scal_M'
25694     Find the unsigned minimum/maximum of the elements of a vector.  The
25695     vector is operand 1, and operand 0 is the scalar result, with mode
25696     equal to the mode of the elements of the input vector.
25697
25698'reduc_plus_scal_M'
25699     Compute the sum of the elements of a vector.  The vector is operand
25700     1, and operand 0 is the scalar result, with mode equal to the mode
25701     of the elements of the input vector.
25702
25703'reduc_and_scal_M'
25704'reduc_ior_scal_M'
25705'reduc_xor_scal_M'
25706     Compute the bitwise 'AND'/'IOR'/'XOR' reduction of the elements of
25707     a vector of mode M.  Operand 1 is the vector input and operand 0 is
25708     the scalar result.  The mode of the scalar result is the same as
25709     one element of M.
25710
25711'extract_last_M'
25712     Find the last set bit in mask operand 1 and extract the associated
25713     element of vector operand 2.  Store the result in scalar operand 0.
25714     Operand 2 has vector mode M while operand 0 has the mode
25715     appropriate for one element of M.  Operand 1 has the usual mask
25716     mode for vectors of mode M; see 'TARGET_VECTORIZE_GET_MASK_MODE'.
25717
25718'fold_extract_last_M'
25719     If any bits of mask operand 2 are set, find the last set bit,
25720     extract the associated element from vector operand 3, and store the
25721     result in operand 0.  Store operand 1 in operand 0 otherwise.
25722     Operand 3 has mode M and operands 0 and 1 have the mode appropriate
25723     for one element of M.  Operand 2 has the usual mask mode for
25724     vectors of mode M; see 'TARGET_VECTORIZE_GET_MASK_MODE'.
25725
25726'fold_left_plus_M'
25727     Take scalar operand 1 and successively add each element from vector
25728     operand 2.  Store the result in scalar operand 0.  The vector has
25729     mode M and the scalars have the mode appropriate for one element of
25730     M.  The operation is strictly in-order: there is no reassociation.
25731
25732'mask_fold_left_plus_M'
25733     Like 'fold_left_plus_M', but takes an additional mask operand
25734     (operand 3) that specifies which elements of the source vector
25735     should be added.
25736
25737'sdot_prodM'
25738'udot_prodM'
25739     Compute the sum of the products of two signed/unsigned elements.
25740     Operand 1 and operand 2 are of the same mode.  Their product, which
25741     is of a wider mode, is computed and added to operand 3.  Operand 3
25742     is of a mode equal or wider than the mode of the product.  The
25743     result is placed in operand 0, which is of the same mode as operand
25744     3.
25745
25746'ssadM'
25747'usadM'
25748     Compute the sum of absolute differences of two signed/unsigned
25749     elements.  Operand 1 and operand 2 are of the same mode.  Their
25750     absolute difference, which is of a wider mode, is computed and
25751     added to operand 3.  Operand 3 is of a mode equal or wider than the
25752     mode of the absolute difference.  The result is placed in operand
25753     0, which is of the same mode as operand 3.
25754
25755'widen_ssumM3'
25756'widen_usumM3'
25757     Operands 0 and 2 are of the same mode, which is wider than the mode
25758     of operand 1.  Add operand 1 to operand 2 and place the widened
25759     result in operand 0.  (This is used express accumulation of
25760     elements into an accumulator of a wider mode.)
25761
25762'smulhsM3'
25763'umulhsM3'
25764     Signed/unsigned multiply high with scale.  This is equivalent to
25765     the C code:
25766          narrow op0, op1, op2;
25767          ...
25768          op0 = (narrow) (((wide) op1 * (wide) op2) >> (N / 2 - 1));
25769     where the sign of 'narrow' determines whether this is a signed or
25770     unsigned operation, and N is the size of 'wide' in bits.
25771
25772'smulhrsM3'
25773'umulhrsM3'
25774     Signed/unsigned multiply high with round and scale.  This is
25775     equivalent to the C code:
25776          narrow op0, op1, op2;
25777          ...
25778          op0 = (narrow) (((((wide) op1 * (wide) op2) >> (N / 2 - 2)) + 1) >> 1);
25779     where the sign of 'narrow' determines whether this is a signed or
25780     unsigned operation, and N is the size of 'wide' in bits.
25781
25782'sdiv_pow2M3'
25783'sdiv_pow2M3'
25784     Signed division by power-of-2 immediate.  Equivalent to:
25785          signed op0, op1;
25786          ...
25787          op0 = op1 / (1 << imm);
25788
25789'vec_shl_insert_M'
25790     Shift the elements in vector input operand 1 left one element (i.e.
25791     away from element 0) and fill the vacated element 0 with the scalar
25792     in operand 2.  Store the result in vector output operand 0.
25793     Operands 0 and 1 have mode M and operand 2 has the mode appropriate
25794     for one element of M.
25795
25796'vec_shl_M'
25797     Whole vector left shift in bits, i.e. away from element 0.  Operand
25798     1 is a vector to be shifted.  Operand 2 is an integer shift amount
25799     in bits.  Operand 0 is where the resulting shifted vector is
25800     stored.  The output and input vectors should have the same modes.
25801
25802'vec_shr_M'
25803     Whole vector right shift in bits, i.e. towards element 0.  Operand
25804     1 is a vector to be shifted.  Operand 2 is an integer shift amount
25805     in bits.  Operand 0 is where the resulting shifted vector is
25806     stored.  The output and input vectors should have the same modes.
25807
25808'vec_pack_trunc_M'
25809     Narrow (demote) and merge the elements of two vectors.  Operands 1
25810     and 2 are vectors of the same mode having N integral or floating
25811     point elements of size S.  Operand 0 is the resulting vector in
25812     which 2*N elements of size S/2 are concatenated after narrowing
25813     them down using truncation.
25814
25815'vec_pack_sbool_trunc_M'
25816     Narrow and merge the elements of two vectors.  Operands 1 and 2 are
25817     vectors of the same type having N boolean elements.  Operand 0 is
25818     the resulting vector in which 2*N elements are concatenated.  The
25819     last operand (operand 3) is the number of elements in the output
25820     vector 2*N as a 'CONST_INT'.  This instruction pattern is used when
25821     all the vector input and output operands have the same scalar mode
25822     M and thus using 'vec_pack_trunc_M' would be ambiguous.
25823
25824'vec_pack_ssat_M', 'vec_pack_usat_M'
25825     Narrow (demote) and merge the elements of two vectors.  Operands 1
25826     and 2 are vectors of the same mode having N integral elements of
25827     size S. Operand 0 is the resulting vector in which the elements of
25828     the two input vectors are concatenated after narrowing them down
25829     using signed/unsigned saturating arithmetic.
25830
25831'vec_pack_sfix_trunc_M', 'vec_pack_ufix_trunc_M'
25832     Narrow, convert to signed/unsigned integral type and merge the
25833     elements of two vectors.  Operands 1 and 2 are vectors of the same
25834     mode having N floating point elements of size S.  Operand 0 is the
25835     resulting vector in which 2*N elements of size S/2 are
25836     concatenated.
25837
25838'vec_packs_float_M', 'vec_packu_float_M'
25839     Narrow, convert to floating point type and merge the elements of
25840     two vectors.  Operands 1 and 2 are vectors of the same mode having
25841     N signed/unsigned integral elements of size S.  Operand 0 is the
25842     resulting vector in which 2*N elements of size S/2 are
25843     concatenated.
25844
25845'vec_unpacks_hi_M', 'vec_unpacks_lo_M'
25846     Extract and widen (promote) the high/low part of a vector of signed
25847     integral or floating point elements.  The input vector (operand 1)
25848     has N elements of size S.  Widen (promote) the high/low elements of
25849     the vector using signed or floating point extension and place the
25850     resulting N/2 values of size 2*S in the output vector (operand 0).
25851
25852'vec_unpacku_hi_M', 'vec_unpacku_lo_M'
25853     Extract and widen (promote) the high/low part of a vector of
25854     unsigned integral elements.  The input vector (operand 1) has N
25855     elements of size S. Widen (promote) the high/low elements of the
25856     vector using zero extension and place the resulting N/2 values of
25857     size 2*S in the output vector (operand 0).
25858
25859'vec_unpacks_sbool_hi_M', 'vec_unpacks_sbool_lo_M'
25860     Extract the high/low part of a vector of boolean elements that have
25861     scalar mode M.  The input vector (operand 1) has N elements, the
25862     output vector (operand 0) has N/2 elements.  The last operand
25863     (operand 2) is the number of elements of the input vector N as a
25864     'CONST_INT'.  These patterns are used if both the input and output
25865     vectors have the same scalar mode M and thus using
25866     'vec_unpacks_hi_M' or 'vec_unpacks_lo_M' would be ambiguous.
25867
25868'vec_unpacks_float_hi_M', 'vec_unpacks_float_lo_M'
25869'vec_unpacku_float_hi_M', 'vec_unpacku_float_lo_M'
25870     Extract, convert to floating point type and widen the high/low part
25871     of a vector of signed/unsigned integral elements.  The input vector
25872     (operand 1) has N elements of size S.  Convert the high/low
25873     elements of the vector using floating point conversion and place
25874     the resulting N/2 values of size 2*S in the output vector (operand
25875     0).
25876
25877'vec_unpack_sfix_trunc_hi_M',
25878'vec_unpack_sfix_trunc_lo_M'
25879'vec_unpack_ufix_trunc_hi_M'
25880'vec_unpack_ufix_trunc_lo_M'
25881     Extract, convert to signed/unsigned integer type and widen the
25882     high/low part of a vector of floating point elements.  The input
25883     vector (operand 1) has N elements of size S.  Convert the high/low
25884     elements of the vector to integers and place the resulting N/2
25885     values of size 2*S in the output vector (operand 0).
25886
25887'vec_widen_umult_hi_M', 'vec_widen_umult_lo_M'
25888'vec_widen_smult_hi_M', 'vec_widen_smult_lo_M'
25889'vec_widen_umult_even_M', 'vec_widen_umult_odd_M'
25890'vec_widen_smult_even_M', 'vec_widen_smult_odd_M'
25891     Signed/Unsigned widening multiplication.  The two inputs (operands
25892     1 and 2) are vectors with N signed/unsigned elements of size S.
25893     Multiply the high/low or even/odd elements of the two vectors, and
25894     put the N/2 products of size 2*S in the output vector (operand 0).
25895     A target shouldn't implement even/odd pattern pair if it is less
25896     efficient than lo/hi one.
25897
25898'vec_widen_ushiftl_hi_M', 'vec_widen_ushiftl_lo_M'
25899'vec_widen_sshiftl_hi_M', 'vec_widen_sshiftl_lo_M'
25900     Signed/Unsigned widening shift left.  The first input (operand 1)
25901     is a vector with N signed/unsigned elements of size S.  Operand 2
25902     is a constant.  Shift the high/low elements of operand 1, and put
25903     the N/2 results of size 2*S in the output vector (operand 0).
25904
25905'mulhisi3'
25906     Multiply operands 1 and 2, which have mode 'HImode', and store a
25907     'SImode' product in operand 0.
25908
25909'mulqihi3', 'mulsidi3'
25910     Similar widening-multiplication instructions of other widths.
25911
25912'umulqihi3', 'umulhisi3', 'umulsidi3'
25913     Similar widening-multiplication instructions that do unsigned
25914     multiplication.
25915
25916'usmulqihi3', 'usmulhisi3', 'usmulsidi3'
25917     Similar widening-multiplication instructions that interpret the
25918     first operand as unsigned and the second operand as signed, then do
25919     a signed multiplication.
25920
25921'smulM3_highpart'
25922     Perform a signed multiplication of operands 1 and 2, which have
25923     mode M, and store the most significant half of the product in
25924     operand 0.  The least significant half of the product is discarded.
25925
25926'umulM3_highpart'
25927     Similar, but the multiplication is unsigned.
25928
25929'maddMN4'
25930     Multiply operands 1 and 2, sign-extend them to mode N, add operand
25931     3, and store the result in operand 0.  Operands 1 and 2 have mode M
25932     and operands 0 and 3 have mode N.  Both modes must be integer or
25933     fixed-point modes and N must be twice the size of M.
25934
25935     In other words, 'maddMN4' is like 'mulMN3' except that it also adds
25936     operand 3.
25937
25938     These instructions are not allowed to 'FAIL'.
25939
25940'umaddMN4'
25941     Like 'maddMN4', but zero-extend the multiplication operands instead
25942     of sign-extending them.
25943
25944'ssmaddMN4'
25945     Like 'maddMN4', but all involved operations must be
25946     signed-saturating.
25947
25948'usmaddMN4'
25949     Like 'umaddMN4', but all involved operations must be
25950     unsigned-saturating.
25951
25952'msubMN4'
25953     Multiply operands 1 and 2, sign-extend them to mode N, subtract the
25954     result from operand 3, and store the result in operand 0.  Operands
25955     1 and 2 have mode M and operands 0 and 3 have mode N.  Both modes
25956     must be integer or fixed-point modes and N must be twice the size
25957     of M.
25958
25959     In other words, 'msubMN4' is like 'mulMN3' except that it also
25960     subtracts the result from operand 3.
25961
25962     These instructions are not allowed to 'FAIL'.
25963
25964'umsubMN4'
25965     Like 'msubMN4', but zero-extend the multiplication operands instead
25966     of sign-extending them.
25967
25968'ssmsubMN4'
25969     Like 'msubMN4', but all involved operations must be
25970     signed-saturating.
25971
25972'usmsubMN4'
25973     Like 'umsubMN4', but all involved operations must be
25974     unsigned-saturating.
25975
25976'divmodM4'
25977     Signed division that produces both a quotient and a remainder.
25978     Operand 1 is divided by operand 2 to produce a quotient stored in
25979     operand 0 and a remainder stored in operand 3.
25980
25981     For machines with an instruction that produces both a quotient and
25982     a remainder, provide a pattern for 'divmodM4' but do not provide
25983     patterns for 'divM3' and 'modM3'.  This allows optimization in the
25984     relatively common case when both the quotient and remainder are
25985     computed.
25986
25987     If an instruction that just produces a quotient or just a remainder
25988     exists and is more efficient than the instruction that produces
25989     both, write the output routine of 'divmodM4' to call
25990     'find_reg_note' and look for a 'REG_UNUSED' note on the quotient or
25991     remainder and generate the appropriate instruction.
25992
25993'udivmodM4'
25994     Similar, but does unsigned division.
25995
25996'ashlM3', 'ssashlM3', 'usashlM3'
25997     Arithmetic-shift operand 1 left by a number of bits specified by
25998     operand 2, and store the result in operand 0.  Here M is the mode
25999     of operand 0 and operand 1; operand 2's mode is specified by the
26000     instruction pattern, and the compiler will convert the operand to
26001     that mode before generating the instruction.  The shift or rotate
26002     expander or instruction pattern should explicitly specify the mode
26003     of the operand 2, it should never be 'VOIDmode'.  The meaning of
26004     out-of-range shift counts can optionally be specified by
26005     'TARGET_SHIFT_TRUNCATION_MASK'.  *Note
26006     TARGET_SHIFT_TRUNCATION_MASK::.  Operand 2 is always a scalar type.
26007
26008'ashrM3', 'lshrM3', 'rotlM3', 'rotrM3'
26009     Other shift and rotate instructions, analogous to the 'ashlM3'
26010     instructions.  Operand 2 is always a scalar type.
26011
26012'vashlM3', 'vashrM3', 'vlshrM3', 'vrotlM3', 'vrotrM3'
26013     Vector shift and rotate instructions that take vectors as operand 2
26014     instead of a scalar type.
26015
26016'avgM3_floor'
26017'uavgM3_floor'
26018     Signed and unsigned average instructions.  These instructions add
26019     operands 1 and 2 without truncation, divide the result by 2, round
26020     towards -Inf, and store the result in operand 0.  This is
26021     equivalent to the C code:
26022          narrow op0, op1, op2;
26023          ...
26024          op0 = (narrow) (((wide) op1 + (wide) op2) >> 1);
26025     where the sign of 'narrow' determines whether this is a signed or
26026     unsigned operation.
26027
26028'avgM3_ceil'
26029'uavgM3_ceil'
26030     Like 'avgM3_floor' and 'uavgM3_floor', but round towards +Inf.
26031     This is equivalent to the C code:
26032          narrow op0, op1, op2;
26033          ...
26034          op0 = (narrow) (((wide) op1 + (wide) op2 + 1) >> 1);
26035
26036'bswapM2'
26037     Reverse the order of bytes of operand 1 and store the result in
26038     operand 0.
26039
26040'negM2', 'ssnegM2', 'usnegM2'
26041     Negate operand 1 and store the result in operand 0.
26042
26043'negvM3'
26044     Like 'negM2' but takes a 'code_label' as operand 2 and emits code
26045     to jump to it if signed overflow occurs during the negation.
26046
26047'absM2'
26048     Store the absolute value of operand 1 into operand 0.
26049
26050'sqrtM2'
26051     Store the square root of operand 1 into operand 0.  Both operands
26052     have mode M, which is a scalar or vector floating-point mode.
26053
26054     This pattern is not allowed to 'FAIL'.
26055
26056'rsqrtM2'
26057     Store the reciprocal of the square root of operand 1 into operand
26058     0.  Both operands have mode M, which is a scalar or vector
26059     floating-point mode.
26060
26061     On most architectures this pattern is only approximate, so either
26062     its C condition or the 'TARGET_OPTAB_SUPPORTED_P' hook should check
26063     for the appropriate math flags.  (Using the C condition is more
26064     direct, but using 'TARGET_OPTAB_SUPPORTED_P' can be useful if a
26065     target-specific built-in also uses the 'rsqrtM2' pattern.)
26066
26067     This pattern is not allowed to 'FAIL'.
26068
26069'fmodM3'
26070     Store the remainder of dividing operand 1 by operand 2 into operand
26071     0, rounded towards zero to an integer.  All operands have mode M,
26072     which is a scalar or vector floating-point mode.
26073
26074     This pattern is not allowed to 'FAIL'.
26075
26076'remainderM3'
26077     Store the remainder of dividing operand 1 by operand 2 into operand
26078     0, rounded to the nearest integer.  All operands have mode M, which
26079     is a scalar or vector floating-point mode.
26080
26081     This pattern is not allowed to 'FAIL'.
26082
26083'scalbM3'
26084     Raise 'FLT_RADIX' to the power of operand 2, multiply it by operand
26085     1, and store the result in operand 0.  All operands have mode M,
26086     which is a scalar or vector floating-point mode.
26087
26088     This pattern is not allowed to 'FAIL'.
26089
26090'ldexpM3'
26091     Raise 2 to the power of operand 2, multiply it by operand 1, and
26092     store the result in operand 0.  Operands 0 and 1 have mode M, which
26093     is a scalar or vector floating-point mode.  Operand 2's mode has
26094     the same number of elements as M and each element is wide enough to
26095     store an 'int'.  The integers are signed.
26096
26097     This pattern is not allowed to 'FAIL'.
26098
26099'cosM2'
26100     Store the cosine of operand 1 into operand 0.  Both operands have
26101     mode M, which is a scalar or vector floating-point mode.
26102
26103     This pattern is not allowed to 'FAIL'.
26104
26105'sinM2'
26106     Store the sine of operand 1 into operand 0.  Both operands have
26107     mode M, which is a scalar or vector floating-point mode.
26108
26109     This pattern is not allowed to 'FAIL'.
26110
26111'sincosM3'
26112     Store the cosine of operand 2 into operand 0 and the sine of
26113     operand 2 into operand 1.  All operands have mode M, which is a
26114     scalar or vector floating-point mode.
26115
26116     Targets that can calculate the sine and cosine simultaneously can
26117     implement this pattern as opposed to implementing individual
26118     'sinM2' and 'cosM2' patterns.  The 'sin' and 'cos' built-in
26119     functions will then be expanded to the 'sincosM3' pattern, with one
26120     of the output values left unused.
26121
26122'tanM2'
26123     Store the tangent of operand 1 into operand 0.  Both operands have
26124     mode M, which is a scalar or vector floating-point mode.
26125
26126     This pattern is not allowed to 'FAIL'.
26127
26128'asinM2'
26129     Store the arc sine of operand 1 into operand 0.  Both operands have
26130     mode M, which is a scalar or vector floating-point mode.
26131
26132     This pattern is not allowed to 'FAIL'.
26133
26134'acosM2'
26135     Store the arc cosine of operand 1 into operand 0.  Both operands
26136     have mode M, which is a scalar or vector floating-point mode.
26137
26138     This pattern is not allowed to 'FAIL'.
26139
26140'atanM2'
26141     Store the arc tangent of operand 1 into operand 0.  Both operands
26142     have mode M, which is a scalar or vector floating-point mode.
26143
26144     This pattern is not allowed to 'FAIL'.
26145
26146'expM2'
26147     Raise e (the base of natural logarithms) to the power of operand 1
26148     and store the result in operand 0.  Both operands have mode M,
26149     which is a scalar or vector floating-point mode.
26150
26151     This pattern is not allowed to 'FAIL'.
26152
26153'expm1M2'
26154     Raise e (the base of natural logarithms) to the power of operand 1,
26155     subtract 1, and store the result in operand 0.  Both operands have
26156     mode M, which is a scalar or vector floating-point mode.
26157
26158     For inputs close to zero, the pattern is expected to be more
26159     accurate than a separate 'expM2' and 'subM3' would be.
26160
26161     This pattern is not allowed to 'FAIL'.
26162
26163'exp10M2'
26164     Raise 10 to the power of operand 1 and store the result in operand
26165     0.  Both operands have mode M, which is a scalar or vector
26166     floating-point mode.
26167
26168     This pattern is not allowed to 'FAIL'.
26169
26170'exp2M2'
26171     Raise 2 to the power of operand 1 and store the result in operand
26172     0.  Both operands have mode M, which is a scalar or vector
26173     floating-point mode.
26174
26175     This pattern is not allowed to 'FAIL'.
26176
26177'logM2'
26178     Store the natural logarithm of operand 1 into operand 0.  Both
26179     operands have mode M, which is a scalar or vector floating-point
26180     mode.
26181
26182     This pattern is not allowed to 'FAIL'.
26183
26184'log1pM2'
26185     Add 1 to operand 1, compute the natural logarithm, and store the
26186     result in operand 0.  Both operands have mode M, which is a scalar
26187     or vector floating-point mode.
26188
26189     For inputs close to zero, the pattern is expected to be more
26190     accurate than a separate 'addM3' and 'logM2' would be.
26191
26192     This pattern is not allowed to 'FAIL'.
26193
26194'log10M2'
26195     Store the base-10 logarithm of operand 1 into operand 0.  Both
26196     operands have mode M, which is a scalar or vector floating-point
26197     mode.
26198
26199     This pattern is not allowed to 'FAIL'.
26200
26201'log2M2'
26202     Store the base-2 logarithm of operand 1 into operand 0.  Both
26203     operands have mode M, which is a scalar or vector floating-point
26204     mode.
26205
26206     This pattern is not allowed to 'FAIL'.
26207
26208'logbM2'
26209     Store the base-'FLT_RADIX' logarithm of operand 1 into operand 0.
26210     Both operands have mode M, which is a scalar or vector
26211     floating-point mode.
26212
26213     This pattern is not allowed to 'FAIL'.
26214
26215'significandM2'
26216     Store the significand of floating-point operand 1 in operand 0.
26217     Both operands have mode M, which is a scalar or vector
26218     floating-point mode.
26219
26220     This pattern is not allowed to 'FAIL'.
26221
26222'powM3'
26223     Store the value of operand 1 raised to the exponent operand 2 into
26224     operand 0.  All operands have mode M, which is a scalar or vector
26225     floating-point mode.
26226
26227     This pattern is not allowed to 'FAIL'.
26228
26229'atan2M3'
26230     Store the arc tangent (inverse tangent) of operand 1 divided by
26231     operand 2 into operand 0, using the signs of both arguments to
26232     determine the quadrant of the result.  All operands have mode M,
26233     which is a scalar or vector floating-point mode.
26234
26235     This pattern is not allowed to 'FAIL'.
26236
26237'floorM2'
26238     Store the largest integral value not greater than operand 1 in
26239     operand 0.  Both operands have mode M, which is a scalar or vector
26240     floating-point mode.  If '-ffp-int-builtin-inexact' is in effect,
26241     the "inexact" exception may be raised for noninteger operands;
26242     otherwise, it may not.
26243
26244     This pattern is not allowed to 'FAIL'.
26245
26246'btruncM2'
26247     Round operand 1 to an integer, towards zero, and store the result
26248     in operand 0.  Both operands have mode M, which is a scalar or
26249     vector floating-point mode.  If '-ffp-int-builtin-inexact' is in
26250     effect, the "inexact" exception may be raised for noninteger
26251     operands; otherwise, it may not.
26252
26253     This pattern is not allowed to 'FAIL'.
26254
26255'roundM2'
26256     Round operand 1 to the nearest integer, rounding away from zero in
26257     the event of a tie, and store the result in operand 0.  Both
26258     operands have mode M, which is a scalar or vector floating-point
26259     mode.  If '-ffp-int-builtin-inexact' is in effect, the "inexact"
26260     exception may be raised for noninteger operands; otherwise, it may
26261     not.
26262
26263     This pattern is not allowed to 'FAIL'.
26264
26265'ceilM2'
26266     Store the smallest integral value not less than operand 1 in
26267     operand 0.  Both operands have mode M, which is a scalar or vector
26268     floating-point mode.  If '-ffp-int-builtin-inexact' is in effect,
26269     the "inexact" exception may be raised for noninteger operands;
26270     otherwise, it may not.
26271
26272     This pattern is not allowed to 'FAIL'.
26273
26274'nearbyintM2'
26275     Round operand 1 to an integer, using the current rounding mode, and
26276     store the result in operand 0.  Do not raise an inexact condition
26277     when the result is different from the argument.  Both operands have
26278     mode M, which is a scalar or vector floating-point mode.
26279
26280     This pattern is not allowed to 'FAIL'.
26281
26282'rintM2'
26283     Round operand 1 to an integer, using the current rounding mode, and
26284     store the result in operand 0.  Raise an inexact condition when the
26285     result is different from the argument.  Both operands have mode M,
26286     which is a scalar or vector floating-point mode.
26287
26288     This pattern is not allowed to 'FAIL'.
26289
26290'lrintMN2'
26291     Convert operand 1 (valid for floating point mode M) to fixed point
26292     mode N as a signed number according to the current rounding mode
26293     and store in operand 0 (which has mode N).
26294
26295'lroundMN2'
26296     Convert operand 1 (valid for floating point mode M) to fixed point
26297     mode N as a signed number rounding to nearest and away from zero
26298     and store in operand 0 (which has mode N).
26299
26300'lfloorMN2'
26301     Convert operand 1 (valid for floating point mode M) to fixed point
26302     mode N as a signed number rounding down and store in operand 0
26303     (which has mode N).
26304
26305'lceilMN2'
26306     Convert operand 1 (valid for floating point mode M) to fixed point
26307     mode N as a signed number rounding up and store in operand 0 (which
26308     has mode N).
26309
26310'copysignM3'
26311     Store a value with the magnitude of operand 1 and the sign of
26312     operand 2 into operand 0.  All operands have mode M, which is a
26313     scalar or vector floating-point mode.
26314
26315     This pattern is not allowed to 'FAIL'.
26316
26317'xorsignM3'
26318     Equivalent to 'op0 = op1 * copysign (1.0, op2)': store a value with
26319     the magnitude of operand 1 and the sign of operand 2 into operand
26320     0.  All operands have mode M, which is a scalar or vector
26321     floating-point mode.
26322
26323     This pattern is not allowed to 'FAIL'.
26324
26325'ffsM2'
26326     Store into operand 0 one plus the index of the least significant
26327     1-bit of operand 1.  If operand 1 is zero, store zero.
26328
26329     M is either a scalar or vector integer mode.  When it is a scalar,
26330     operand 1 has mode M but operand 0 can have whatever scalar integer
26331     mode is suitable for the target.  The compiler will insert
26332     conversion instructions as necessary (typically to convert the
26333     result to the same width as 'int').  When M is a vector, both
26334     operands must have mode M.
26335
26336     This pattern is not allowed to 'FAIL'.
26337
26338'clrsbM2'
26339     Count leading redundant sign bits.  Store into operand 0 the number
26340     of redundant sign bits in operand 1, starting at the most
26341     significant bit position.  A redundant sign bit is defined as any
26342     sign bit after the first.  As such, this count will be one less
26343     than the count of leading sign bits.
26344
26345     M is either a scalar or vector integer mode.  When it is a scalar,
26346     operand 1 has mode M but operand 0 can have whatever scalar integer
26347     mode is suitable for the target.  The compiler will insert
26348     conversion instructions as necessary (typically to convert the
26349     result to the same width as 'int').  When M is a vector, both
26350     operands must have mode M.
26351
26352     This pattern is not allowed to 'FAIL'.
26353
26354'clzM2'
26355     Store into operand 0 the number of leading 0-bits in operand 1,
26356     starting at the most significant bit position.  If operand 1 is 0,
26357     the 'CLZ_DEFINED_VALUE_AT_ZERO' (*note Misc::) macro defines if the
26358     result is undefined or has a useful value.
26359
26360     M is either a scalar or vector integer mode.  When it is a scalar,
26361     operand 1 has mode M but operand 0 can have whatever scalar integer
26362     mode is suitable for the target.  The compiler will insert
26363     conversion instructions as necessary (typically to convert the
26364     result to the same width as 'int').  When M is a vector, both
26365     operands must have mode M.
26366
26367     This pattern is not allowed to 'FAIL'.
26368
26369'ctzM2'
26370     Store into operand 0 the number of trailing 0-bits in operand 1,
26371     starting at the least significant bit position.  If operand 1 is 0,
26372     the 'CTZ_DEFINED_VALUE_AT_ZERO' (*note Misc::) macro defines if the
26373     result is undefined or has a useful value.
26374
26375     M is either a scalar or vector integer mode.  When it is a scalar,
26376     operand 1 has mode M but operand 0 can have whatever scalar integer
26377     mode is suitable for the target.  The compiler will insert
26378     conversion instructions as necessary (typically to convert the
26379     result to the same width as 'int').  When M is a vector, both
26380     operands must have mode M.
26381
26382     This pattern is not allowed to 'FAIL'.
26383
26384'popcountM2'
26385     Store into operand 0 the number of 1-bits in operand 1.
26386
26387     M is either a scalar or vector integer mode.  When it is a scalar,
26388     operand 1 has mode M but operand 0 can have whatever scalar integer
26389     mode is suitable for the target.  The compiler will insert
26390     conversion instructions as necessary (typically to convert the
26391     result to the same width as 'int').  When M is a vector, both
26392     operands must have mode M.
26393
26394     This pattern is not allowed to 'FAIL'.
26395
26396'parityM2'
26397     Store into operand 0 the parity of operand 1, i.e. the number of
26398     1-bits in operand 1 modulo 2.
26399
26400     M is either a scalar or vector integer mode.  When it is a scalar,
26401     operand 1 has mode M but operand 0 can have whatever scalar integer
26402     mode is suitable for the target.  The compiler will insert
26403     conversion instructions as necessary (typically to convert the
26404     result to the same width as 'int').  When M is a vector, both
26405     operands must have mode M.
26406
26407     This pattern is not allowed to 'FAIL'.
26408
26409'one_cmplM2'
26410     Store the bitwise-complement of operand 1 into operand 0.
26411
26412'cpymemM'
26413     Block copy instruction.  The destination and source blocks of
26414     memory are the first two operands, and both are 'mem:BLK's with an
26415     address in mode 'Pmode'.
26416
26417     The number of bytes to copy is the third operand, in mode M.
26418     Usually, you specify 'Pmode' for M.  However, if you can generate
26419     better code knowing the range of valid lengths is smaller than
26420     those representable in a full Pmode pointer, you should provide a
26421     pattern with a mode corresponding to the range of values you can
26422     handle efficiently (e.g., 'QImode' for values in the range 0-127;
26423     note we avoid numbers that appear negative) and also a pattern with
26424     'Pmode'.
26425
26426     The fourth operand is the known shared alignment of the source and
26427     destination, in the form of a 'const_int' rtx.  Thus, if the
26428     compiler knows that both source and destination are word-aligned,
26429     it may provide the value 4 for this operand.
26430
26431     Optional operands 5 and 6 specify expected alignment and size of
26432     block respectively.  The expected alignment differs from alignment
26433     in operand 4 in a way that the blocks are not required to be
26434     aligned according to it in all cases.  This expected alignment is
26435     also in bytes, just like operand 4.  Expected size, when unknown,
26436     is set to '(const_int -1)'.
26437
26438     Descriptions of multiple 'cpymemM' patterns can only be beneficial
26439     if the patterns for smaller modes have fewer restrictions on their
26440     first, second and fourth operands.  Note that the mode M in
26441     'cpymemM' does not impose any restriction on the mode of
26442     individually copied data units in the block.
26443
26444     The 'cpymemM' patterns need not give special consideration to the
26445     possibility that the source and destination strings might overlap.
26446     These patterns are used to do inline expansion of
26447     '__builtin_memcpy'.
26448
26449'movmemM'
26450     Block move instruction.  The destination and source blocks of
26451     memory are the first two operands, and both are 'mem:BLK's with an
26452     address in mode 'Pmode'.
26453
26454     The number of bytes to copy is the third operand, in mode M.
26455     Usually, you specify 'Pmode' for M.  However, if you can generate
26456     better code knowing the range of valid lengths is smaller than
26457     those representable in a full Pmode pointer, you should provide a
26458     pattern with a mode corresponding to the range of values you can
26459     handle efficiently (e.g., 'QImode' for values in the range 0-127;
26460     note we avoid numbers that appear negative) and also a pattern with
26461     'Pmode'.
26462
26463     The fourth operand is the known shared alignment of the source and
26464     destination, in the form of a 'const_int' rtx.  Thus, if the
26465     compiler knows that both source and destination are word-aligned,
26466     it may provide the value 4 for this operand.
26467
26468     Optional operands 5 and 6 specify expected alignment and size of
26469     block respectively.  The expected alignment differs from alignment
26470     in operand 4 in a way that the blocks are not required to be
26471     aligned according to it in all cases.  This expected alignment is
26472     also in bytes, just like operand 4.  Expected size, when unknown,
26473     is set to '(const_int -1)'.
26474
26475     Descriptions of multiple 'movmemM' patterns can only be beneficial
26476     if the patterns for smaller modes have fewer restrictions on their
26477     first, second and fourth operands.  Note that the mode M in
26478     'movmemM' does not impose any restriction on the mode of
26479     individually copied data units in the block.
26480
26481     The 'movmemM' patterns must correctly handle the case where the
26482     source and destination strings overlap.  These patterns are used to
26483     do inline expansion of '__builtin_memmove'.
26484
26485'movstr'
26486     String copy instruction, with 'stpcpy' semantics.  Operand 0 is an
26487     output operand in mode 'Pmode'.  The addresses of the destination
26488     and source strings are operands 1 and 2, and both are 'mem:BLK's
26489     with addresses in mode 'Pmode'.  The execution of the expansion of
26490     this pattern should store in operand 0 the address in which the
26491     'NUL' terminator was stored in the destination string.
26492
26493     This pattern has also several optional operands that are same as in
26494     'setmem'.
26495
26496'setmemM'
26497     Block set instruction.  The destination string is the first
26498     operand, given as a 'mem:BLK' whose address is in mode 'Pmode'.
26499     The number of bytes to set is the second operand, in mode M.  The
26500     value to initialize the memory with is the third operand.  Targets
26501     that only support the clearing of memory should reject any value
26502     that is not the constant 0.  See 'cpymemM' for a discussion of the
26503     choice of mode.
26504
26505     The fourth operand is the known alignment of the destination, in
26506     the form of a 'const_int' rtx.  Thus, if the compiler knows that
26507     the destination is word-aligned, it may provide the value 4 for
26508     this operand.
26509
26510     Optional operands 5 and 6 specify expected alignment and size of
26511     block respectively.  The expected alignment differs from alignment
26512     in operand 4 in a way that the blocks are not required to be
26513     aligned according to it in all cases.  This expected alignment is
26514     also in bytes, just like operand 4.  Expected size, when unknown,
26515     is set to '(const_int -1)'.  Operand 7 is the minimal size of the
26516     block and operand 8 is the maximal size of the block (NULL if it
26517     cannot be represented as CONST_INT). Operand 9 is the probable
26518     maximal size (i.e. we cannot rely on it for correctness, but it can
26519     be used for choosing proper code sequence for a given size).
26520
26521     The use for multiple 'setmemM' is as for 'cpymemM'.
26522
26523'cmpstrnM'
26524     String compare instruction, with five operands.  Operand 0 is the
26525     output; it has mode M.  The remaining four operands are like the
26526     operands of 'cpymemM'.  The two memory blocks specified are
26527     compared byte by byte in lexicographic order starting at the
26528     beginning of each string.  The instruction is not allowed to
26529     prefetch more than one byte at a time since either string may end
26530     in the first byte and reading past that may access an invalid page
26531     or segment and cause a fault.  The comparison terminates early if
26532     the fetched bytes are different or if they are equal to zero.  The
26533     effect of the instruction is to store a value in operand 0 whose
26534     sign indicates the result of the comparison.
26535
26536'cmpstrM'
26537     String compare instruction, without known maximum length.  Operand
26538     0 is the output; it has mode M.  The second and third operand are
26539     the blocks of memory to be compared; both are 'mem:BLK' with an
26540     address in mode 'Pmode'.
26541
26542     The fourth operand is the known shared alignment of the source and
26543     destination, in the form of a 'const_int' rtx.  Thus, if the
26544     compiler knows that both source and destination are word-aligned,
26545     it may provide the value 4 for this operand.
26546
26547     The two memory blocks specified are compared byte by byte in
26548     lexicographic order starting at the beginning of each string.  The
26549     instruction is not allowed to prefetch more than one byte at a time
26550     since either string may end in the first byte and reading past that
26551     may access an invalid page or segment and cause a fault.  The
26552     comparison will terminate when the fetched bytes are different or
26553     if they are equal to zero.  The effect of the instruction is to
26554     store a value in operand 0 whose sign indicates the result of the
26555     comparison.
26556
26557'cmpmemM'
26558     Block compare instruction, with five operands like the operands of
26559     'cmpstrM'.  The two memory blocks specified are compared byte by
26560     byte in lexicographic order starting at the beginning of each
26561     block.  Unlike 'cmpstrM' the instruction can prefetch any bytes in
26562     the two memory blocks.  Also unlike 'cmpstrM' the comparison will
26563     not stop if both bytes are zero.  The effect of the instruction is
26564     to store a value in operand 0 whose sign indicates the result of
26565     the comparison.
26566
26567'strlenM'
26568     Compute the length of a string, with three operands.  Operand 0 is
26569     the result (of mode M), operand 1 is a 'mem' referring to the first
26570     character of the string, operand 2 is the character to search for
26571     (normally zero), and operand 3 is a constant describing the known
26572     alignment of the beginning of the string.
26573
26574'floatMN2'
26575     Convert signed integer operand 1 (valid for fixed point mode M) to
26576     floating point mode N and store in operand 0 (which has mode N).
26577
26578'floatunsMN2'
26579     Convert unsigned integer operand 1 (valid for fixed point mode M)
26580     to floating point mode N and store in operand 0 (which has mode N).
26581
26582'fixMN2'
26583     Convert operand 1 (valid for floating point mode M) to fixed point
26584     mode N as a signed number and store in operand 0 (which has mode
26585     N).  This instruction's result is defined only when the value of
26586     operand 1 is an integer.
26587
26588     If the machine description defines this pattern, it also needs to
26589     define the 'ftrunc' pattern.
26590
26591'fixunsMN2'
26592     Convert operand 1 (valid for floating point mode M) to fixed point
26593     mode N as an unsigned number and store in operand 0 (which has mode
26594     N).  This instruction's result is defined only when the value of
26595     operand 1 is an integer.
26596
26597'ftruncM2'
26598     Convert operand 1 (valid for floating point mode M) to an integer
26599     value, still represented in floating point mode M, and store it in
26600     operand 0 (valid for floating point mode M).
26601
26602'fix_truncMN2'
26603     Like 'fixMN2' but works for any floating point value of mode M by
26604     converting the value to an integer.
26605
26606'fixuns_truncMN2'
26607     Like 'fixunsMN2' but works for any floating point value of mode M
26608     by converting the value to an integer.
26609
26610'truncMN2'
26611     Truncate operand 1 (valid for mode M) to mode N and store in
26612     operand 0 (which has mode N).  Both modes must be fixed point or
26613     both floating point.
26614
26615'extendMN2'
26616     Sign-extend operand 1 (valid for mode M) to mode N and store in
26617     operand 0 (which has mode N).  Both modes must be fixed point or
26618     both floating point.
26619
26620'zero_extendMN2'
26621     Zero-extend operand 1 (valid for mode M) to mode N and store in
26622     operand 0 (which has mode N).  Both modes must be fixed point.
26623
26624'fractMN2'
26625     Convert operand 1 of mode M to mode N and store in operand 0 (which
26626     has mode N).  Mode M and mode N could be fixed-point to
26627     fixed-point, signed integer to fixed-point, fixed-point to signed
26628     integer, floating-point to fixed-point, or fixed-point to
26629     floating-point.  When overflows or underflows happen, the results
26630     are undefined.
26631
26632'satfractMN2'
26633     Convert operand 1 of mode M to mode N and store in operand 0 (which
26634     has mode N).  Mode M and mode N could be fixed-point to
26635     fixed-point, signed integer to fixed-point, or floating-point to
26636     fixed-point.  When overflows or underflows happen, the instruction
26637     saturates the results to the maximum or the minimum.
26638
26639'fractunsMN2'
26640     Convert operand 1 of mode M to mode N and store in operand 0 (which
26641     has mode N).  Mode M and mode N could be unsigned integer to
26642     fixed-point, or fixed-point to unsigned integer.  When overflows or
26643     underflows happen, the results are undefined.
26644
26645'satfractunsMN2'
26646     Convert unsigned integer operand 1 of mode M to fixed-point mode N
26647     and store in operand 0 (which has mode N).  When overflows or
26648     underflows happen, the instruction saturates the results to the
26649     maximum or the minimum.
26650
26651'extvM'
26652     Extract a bit-field from register operand 1, sign-extend it, and
26653     store it in operand 0.  Operand 2 specifies the width of the field
26654     in bits and operand 3 the starting bit, which counts from the most
26655     significant bit if 'BITS_BIG_ENDIAN' is true and from the least
26656     significant bit otherwise.
26657
26658     Operands 0 and 1 both have mode M.  Operands 2 and 3 have a
26659     target-specific mode.
26660
26661'extvmisalignM'
26662     Extract a bit-field from memory operand 1, sign extend it, and
26663     store it in operand 0.  Operand 2 specifies the width in bits and
26664     operand 3 the starting bit.  The starting bit is always somewhere
26665     in the first byte of operand 1; it counts from the most significant
26666     bit if 'BITS_BIG_ENDIAN' is true and from the least significant bit
26667     otherwise.
26668
26669     Operand 0 has mode M while operand 1 has 'BLK' mode.  Operands 2
26670     and 3 have a target-specific mode.
26671
26672     The instruction must not read beyond the last byte of the
26673     bit-field.
26674
26675'extzvM'
26676     Like 'extvM' except that the bit-field value is zero-extended.
26677
26678'extzvmisalignM'
26679     Like 'extvmisalignM' except that the bit-field value is
26680     zero-extended.
26681
26682'insvM'
26683     Insert operand 3 into a bit-field of register operand 0.  Operand 1
26684     specifies the width of the field in bits and operand 2 the starting
26685     bit, which counts from the most significant bit if
26686     'BITS_BIG_ENDIAN' is true and from the least significant bit
26687     otherwise.
26688
26689     Operands 0 and 3 both have mode M.  Operands 1 and 2 have a
26690     target-specific mode.
26691
26692'insvmisalignM'
26693     Insert operand 3 into a bit-field of memory operand 0.  Operand 1
26694     specifies the width of the field in bits and operand 2 the starting
26695     bit.  The starting bit is always somewhere in the first byte of
26696     operand 0; it counts from the most significant bit if
26697     'BITS_BIG_ENDIAN' is true and from the least significant bit
26698     otherwise.
26699
26700     Operand 3 has mode M while operand 0 has 'BLK' mode.  Operands 1
26701     and 2 have a target-specific mode.
26702
26703     The instruction must not read or write beyond the last byte of the
26704     bit-field.
26705
26706'extv'
26707     Extract a bit-field from operand 1 (a register or memory operand),
26708     where operand 2 specifies the width in bits and operand 3 the
26709     starting bit, and store it in operand 0.  Operand 0 must have mode
26710     'word_mode'.  Operand 1 may have mode 'byte_mode' or 'word_mode';
26711     often 'word_mode' is allowed only for registers.  Operands 2 and 3
26712     must be valid for 'word_mode'.
26713
26714     The RTL generation pass generates this instruction only with
26715     constants for operands 2 and 3 and the constant is never zero for
26716     operand 2.
26717
26718     The bit-field value is sign-extended to a full word integer before
26719     it is stored in operand 0.
26720
26721     This pattern is deprecated; please use 'extvM' and 'extvmisalignM'
26722     instead.
26723
26724'extzv'
26725     Like 'extv' except that the bit-field value is zero-extended.
26726
26727     This pattern is deprecated; please use 'extzvM' and
26728     'extzvmisalignM' instead.
26729
26730'insv'
26731     Store operand 3 (which must be valid for 'word_mode') into a
26732     bit-field in operand 0, where operand 1 specifies the width in bits
26733     and operand 2 the starting bit.  Operand 0 may have mode
26734     'byte_mode' or 'word_mode'; often 'word_mode' is allowed only for
26735     registers.  Operands 1 and 2 must be valid for 'word_mode'.
26736
26737     The RTL generation pass generates this instruction only with
26738     constants for operands 1 and 2 and the constant is never zero for
26739     operand 1.
26740
26741     This pattern is deprecated; please use 'insvM' and 'insvmisalignM'
26742     instead.
26743
26744'movMODEcc'
26745     Conditionally move operand 2 or operand 3 into operand 0 according
26746     to the comparison in operand 1.  If the comparison is true, operand
26747     2 is moved into operand 0, otherwise operand 3 is moved.
26748
26749     The mode of the operands being compared need not be the same as the
26750     operands being moved.  Some machines, sparc64 for example, have
26751     instructions that conditionally move an integer value based on the
26752     floating point condition codes and vice versa.
26753
26754     If the machine does not have conditional move instructions, do not
26755     define these patterns.
26756
26757'addMODEcc'
26758     Similar to 'movMODEcc' but for conditional addition.  Conditionally
26759     move operand 2 or (operands 2 + operand 3) into operand 0 according
26760     to the comparison in operand 1.  If the comparison is false,
26761     operand 2 is moved into operand 0, otherwise (operand 2 + operand
26762     3) is moved.
26763
26764'cond_addMODE'
26765'cond_subMODE'
26766'cond_mulMODE'
26767'cond_divMODE'
26768'cond_udivMODE'
26769'cond_modMODE'
26770'cond_umodMODE'
26771'cond_andMODE'
26772'cond_iorMODE'
26773'cond_xorMODE'
26774'cond_sminMODE'
26775'cond_smaxMODE'
26776'cond_uminMODE'
26777'cond_umaxMODE'
26778     When operand 1 is true, perform an operation on operands 2 and 3
26779     and store the result in operand 0, otherwise store operand 4 in
26780     operand 0.  The operation works elementwise if the operands are
26781     vectors.
26782
26783     The scalar case is equivalent to:
26784
26785          op0 = op1 ? op2 OP op3 : op4;
26786
26787     while the vector case is equivalent to:
26788
26789          for (i = 0; i < GET_MODE_NUNITS (M); i++)
26790            op0[i] = op1[i] ? op2[i] OP op3[i] : op4[i];
26791
26792     where, for example, OP is '+' for 'cond_addMODE'.
26793
26794     When defined for floating-point modes, the contents of 'op3[i]' are
26795     not interpreted if 'op1[i]' is false, just like they would not be
26796     in a normal C '?:' condition.
26797
26798     Operands 0, 2, 3 and 4 all have mode M.  Operand 1 is a scalar
26799     integer if M is scalar, otherwise it has the mode returned by
26800     'TARGET_VECTORIZE_GET_MASK_MODE'.
26801
26802'cond_fmaMODE'
26803'cond_fmsMODE'
26804'cond_fnmaMODE'
26805'cond_fnmsMODE'
26806     Like 'cond_addM', except that the conditional operation takes 3
26807     operands rather than two.  For example, the vector form of
26808     'cond_fmaMODE' is equivalent to:
26809
26810          for (i = 0; i < GET_MODE_NUNITS (M); i++)
26811            op0[i] = op1[i] ? fma (op2[i], op3[i], op4[i]) : op5[i];
26812
26813'negMODEcc'
26814     Similar to 'movMODEcc' but for conditional negation.  Conditionally
26815     move the negation of operand 2 or the unchanged operand 3 into
26816     operand 0 according to the comparison in operand 1.  If the
26817     comparison is true, the negation of operand 2 is moved into operand
26818     0, otherwise operand 3 is moved.
26819
26820'notMODEcc'
26821     Similar to 'negMODEcc' but for conditional complement.
26822     Conditionally move the bitwise complement of operand 2 or the
26823     unchanged operand 3 into operand 0 according to the comparison in
26824     operand 1.  If the comparison is true, the complement of operand 2
26825     is moved into operand 0, otherwise operand 3 is moved.
26826
26827'cstoreMODE4'
26828     Store zero or nonzero in operand 0 according to whether a
26829     comparison is true.  Operand 1 is a comparison operator.  Operand 2
26830     and operand 3 are the first and second operand of the comparison,
26831     respectively.  You specify the mode that operand 0 must have when
26832     you write the 'match_operand' expression.  The compiler
26833     automatically sees which mode you have used and supplies an operand
26834     of that mode.
26835
26836     The value stored for a true condition must have 1 as its low bit,
26837     or else must be negative.  Otherwise the instruction is not
26838     suitable and you should omit it from the machine description.  You
26839     describe to the compiler exactly which value is stored by defining
26840     the macro 'STORE_FLAG_VALUE' (*note Misc::).  If a description
26841     cannot be found that can be used for all the possible comparison
26842     operators, you should pick one and use a 'define_expand' to map all
26843     results onto the one you chose.
26844
26845     These operations may 'FAIL', but should do so only in relatively
26846     uncommon cases; if they would 'FAIL' for common cases involving
26847     integer comparisons, it is best to restrict the predicates to not
26848     allow these operands.  Likewise if a given comparison operator will
26849     always fail, independent of the operands (for floating-point modes,
26850     the 'ordered_comparison_operator' predicate is often useful in this
26851     case).
26852
26853     If this pattern is omitted, the compiler will generate a
26854     conditional branch--for example, it may copy a constant one to the
26855     target and branching around an assignment of zero to the target--or
26856     a libcall.  If the predicate for operand 1 only rejects some
26857     operators, it will also try reordering the operands and/or
26858     inverting the result value (e.g. by an exclusive OR). These
26859     possibilities could be cheaper or equivalent to the instructions
26860     used for the 'cstoreMODE4' pattern followed by those required to
26861     convert a positive result from 'STORE_FLAG_VALUE' to 1; in this
26862     case, you can and should make operand 1's predicate reject some
26863     operators in the 'cstoreMODE4' pattern, or remove the pattern
26864     altogether from the machine description.
26865
26866'cbranchMODE4'
26867     Conditional branch instruction combined with a compare instruction.
26868     Operand 0 is a comparison operator.  Operand 1 and operand 2 are
26869     the first and second operands of the comparison, respectively.
26870     Operand 3 is the 'code_label' to jump to.
26871
26872'jump'
26873     A jump inside a function; an unconditional branch.  Operand 0 is
26874     the 'code_label' to jump to.  This pattern name is mandatory on all
26875     machines.
26876
26877'call'
26878     Subroutine call instruction returning no value.  Operand 0 is the
26879     function to call; operand 1 is the number of bytes of arguments
26880     pushed as a 'const_int'; operand 2 is the number of registers used
26881     as operands.
26882
26883     On most machines, operand 2 is not actually stored into the RTL
26884     pattern.  It is supplied for the sake of some RISC machines which
26885     need to put this information into the assembler code; they can put
26886     it in the RTL instead of operand 1.
26887
26888     Operand 0 should be a 'mem' RTX whose address is the address of the
26889     function.  Note, however, that this address can be a 'symbol_ref'
26890     expression even if it would not be a legitimate memory address on
26891     the target machine.  If it is also not a valid argument for a call
26892     instruction, the pattern for this operation should be a
26893     'define_expand' (*note Expander Definitions::) that places the
26894     address into a register and uses that register in the call
26895     instruction.
26896
26897'call_value'
26898     Subroutine call instruction returning a value.  Operand 0 is the
26899     hard register in which the value is returned.  There are three more
26900     operands, the same as the three operands of the 'call' instruction
26901     (but with numbers increased by one).
26902
26903     Subroutines that return 'BLKmode' objects use the 'call' insn.
26904
26905'call_pop', 'call_value_pop'
26906     Similar to 'call' and 'call_value', except used if defined and if
26907     'RETURN_POPS_ARGS' is nonzero.  They should emit a 'parallel' that
26908     contains both the function call and a 'set' to indicate the
26909     adjustment made to the frame pointer.
26910
26911     For machines where 'RETURN_POPS_ARGS' can be nonzero, the use of
26912     these patterns increases the number of functions for which the
26913     frame pointer can be eliminated, if desired.
26914
26915'untyped_call'
26916     Subroutine call instruction returning a value of any type.  Operand
26917     0 is the function to call; operand 1 is a memory location where the
26918     result of calling the function is to be stored; operand 2 is a
26919     'parallel' expression where each element is a 'set' expression that
26920     indicates the saving of a function return value into the result
26921     block.
26922
26923     This instruction pattern should be defined to support
26924     '__builtin_apply' on machines where special instructions are needed
26925     to call a subroutine with arbitrary arguments or to save the value
26926     returned.  This instruction pattern is required on machines that
26927     have multiple registers that can hold a return value (i.e.
26928     'FUNCTION_VALUE_REGNO_P' is true for more than one register).
26929
26930'return'
26931     Subroutine return instruction.  This instruction pattern name
26932     should be defined only if a single instruction can do all the work
26933     of returning from a function.
26934
26935     Like the 'movM' patterns, this pattern is also used after the RTL
26936     generation phase.  In this case it is to support machines where
26937     multiple instructions are usually needed to return from a function,
26938     but some class of functions only requires one instruction to
26939     implement a return.  Normally, the applicable functions are those
26940     which do not need to save any registers or allocate stack space.
26941
26942     It is valid for this pattern to expand to an instruction using
26943     'simple_return' if no epilogue is required.
26944
26945'simple_return'
26946     Subroutine return instruction.  This instruction pattern name
26947     should be defined only if a single instruction can do all the work
26948     of returning from a function on a path where no epilogue is
26949     required.  This pattern is very similar to the 'return' instruction
26950     pattern, but it is emitted only by the shrink-wrapping optimization
26951     on paths where the function prologue has not been executed, and a
26952     function return should occur without any of the effects of the
26953     epilogue.  Additional uses may be introduced on paths where both
26954     the prologue and the epilogue have executed.
26955
26956     For such machines, the condition specified in this pattern should
26957     only be true when 'reload_completed' is nonzero and the function's
26958     epilogue would only be a single instruction.  For machines with
26959     register windows, the routine 'leaf_function_p' may be used to
26960     determine if a register window push is required.
26961
26962     Machines that have conditional return instructions should define
26963     patterns such as
26964
26965          (define_insn ""
26966            [(set (pc)
26967                  (if_then_else (match_operator
26968                                   0 "comparison_operator"
26969                                   [(cc0) (const_int 0)])
26970                                (return)
26971                                (pc)))]
26972            "CONDITION"
26973            "...")
26974
26975     where CONDITION would normally be the same condition specified on
26976     the named 'return' pattern.
26977
26978'untyped_return'
26979     Untyped subroutine return instruction.  This instruction pattern
26980     should be defined to support '__builtin_return' on machines where
26981     special instructions are needed to return a value of any type.
26982
26983     Operand 0 is a memory location where the result of calling a
26984     function with '__builtin_apply' is stored; operand 1 is a
26985     'parallel' expression where each element is a 'set' expression that
26986     indicates the restoring of a function return value from the result
26987     block.
26988
26989'nop'
26990     No-op instruction.  This instruction pattern name should always be
26991     defined to output a no-op in assembler code.  '(const_int 0)' will
26992     do as an RTL pattern.
26993
26994'indirect_jump'
26995     An instruction to jump to an address which is operand zero.  This
26996     pattern name is mandatory on all machines.
26997
26998'casesi'
26999     Instruction to jump through a dispatch table, including bounds
27000     checking.  This instruction takes five operands:
27001
27002       1. The index to dispatch on, which has mode 'SImode'.
27003
27004       2. The lower bound for indices in the table, an integer constant.
27005
27006       3. The total range of indices in the table--the largest index
27007          minus the smallest one (both inclusive).
27008
27009       4. A label that precedes the table itself.
27010
27011       5. A label to jump to if the index has a value outside the
27012          bounds.
27013
27014     The table is an 'addr_vec' or 'addr_diff_vec' inside of a
27015     'jump_table_data'.  The number of elements in the table is one plus
27016     the difference between the upper bound and the lower bound.
27017
27018'tablejump'
27019     Instruction to jump to a variable address.  This is a low-level
27020     capability which can be used to implement a dispatch table when
27021     there is no 'casesi' pattern.
27022
27023     This pattern requires two operands: the address or offset, and a
27024     label which should immediately precede the jump table.  If the
27025     macro 'CASE_VECTOR_PC_RELATIVE' evaluates to a nonzero value then
27026     the first operand is an offset which counts from the address of the
27027     table; otherwise, it is an absolute address to jump to.  In either
27028     case, the first operand has mode 'Pmode'.
27029
27030     The 'tablejump' insn is always the last insn before the jump table
27031     it uses.  Its assembler code normally has no need to use the second
27032     operand, but you should incorporate it in the RTL pattern so that
27033     the jump optimizer will not delete the table as unreachable code.
27034
27035'doloop_end'
27036     Conditional branch instruction that decrements a register and jumps
27037     if the register is nonzero.  Operand 0 is the register to decrement
27038     and test; operand 1 is the label to jump to if the register is
27039     nonzero.  *Note Looping Patterns::.
27040
27041     This optional instruction pattern should be defined for machines
27042     with low-overhead looping instructions as the loop optimizer will
27043     try to modify suitable loops to utilize it.  The target hook
27044     'TARGET_CAN_USE_DOLOOP_P' controls the conditions under which
27045     low-overhead loops can be used.
27046
27047'doloop_begin'
27048     Companion instruction to 'doloop_end' required for machines that
27049     need to perform some initialization, such as loading a special
27050     counter register.  Operand 1 is the associated 'doloop_end' pattern
27051     and operand 0 is the register that it decrements.
27052
27053     If initialization insns do not always need to be emitted, use a
27054     'define_expand' (*note Expander Definitions::) and make it fail.
27055
27056'canonicalize_funcptr_for_compare'
27057     Canonicalize the function pointer in operand 1 and store the result
27058     into operand 0.
27059
27060     Operand 0 is always a 'reg' and has mode 'Pmode'; operand 1 may be
27061     a 'reg', 'mem', 'symbol_ref', 'const_int', etc and also has mode
27062     'Pmode'.
27063
27064     Canonicalization of a function pointer usually involves computing
27065     the address of the function which would be called if the function
27066     pointer were used in an indirect call.
27067
27068     Only define this pattern if function pointers on the target machine
27069     can have different values but still call the same function when
27070     used in an indirect call.
27071
27072'save_stack_block'
27073'save_stack_function'
27074'save_stack_nonlocal'
27075'restore_stack_block'
27076'restore_stack_function'
27077'restore_stack_nonlocal'
27078     Most machines save and restore the stack pointer by copying it to
27079     or from an object of mode 'Pmode'.  Do not define these patterns on
27080     such machines.
27081
27082     Some machines require special handling for stack pointer saves and
27083     restores.  On those machines, define the patterns corresponding to
27084     the non-standard cases by using a 'define_expand' (*note Expander
27085     Definitions::) that produces the required insns.  The three types
27086     of saves and restores are:
27087
27088       1. 'save_stack_block' saves the stack pointer at the start of a
27089          block that allocates a variable-sized object, and
27090          'restore_stack_block' restores the stack pointer when the
27091          block is exited.
27092
27093       2. 'save_stack_function' and 'restore_stack_function' do a
27094          similar job for the outermost block of a function and are used
27095          when the function allocates variable-sized objects or calls
27096          'alloca'.  Only the epilogue uses the restored stack pointer,
27097          allowing a simpler save or restore sequence on some machines.
27098
27099       3. 'save_stack_nonlocal' is used in functions that contain labels
27100          branched to by nested functions.  It saves the stack pointer
27101          in such a way that the inner function can use
27102          'restore_stack_nonlocal' to restore the stack pointer.  The
27103          compiler generates code to restore the frame and argument
27104          pointer registers, but some machines require saving and
27105          restoring additional data such as register window information
27106          or stack backchains.  Place insns in these patterns to save
27107          and restore any such required data.
27108
27109     When saving the stack pointer, operand 0 is the save area and
27110     operand 1 is the stack pointer.  The mode used to allocate the save
27111     area defaults to 'Pmode' but you can override that choice by
27112     defining the 'STACK_SAVEAREA_MODE' macro (*note Storage Layout::).
27113     You must specify an integral mode, or 'VOIDmode' if no save area is
27114     needed for a particular type of save (either because no save is
27115     needed or because a machine-specific save area can be used).
27116     Operand 0 is the stack pointer and operand 1 is the save area for
27117     restore operations.  If 'save_stack_block' is defined, operand 0
27118     must not be 'VOIDmode' since these saves can be arbitrarily nested.
27119
27120     A save area is a 'mem' that is at a constant offset from
27121     'virtual_stack_vars_rtx' when the stack pointer is saved for use by
27122     nonlocal gotos and a 'reg' in the other two cases.
27123
27124'allocate_stack'
27125     Subtract (or add if 'STACK_GROWS_DOWNWARD' is undefined) operand 1
27126     from the stack pointer to create space for dynamically allocated
27127     data.
27128
27129     Store the resultant pointer to this space into operand 0.  If you
27130     are allocating space from the main stack, do this by emitting a
27131     move insn to copy 'virtual_stack_dynamic_rtx' to operand 0.  If you
27132     are allocating the space elsewhere, generate code to copy the
27133     location of the space to operand 0.  In the latter case, you must
27134     ensure this space gets freed when the corresponding space on the
27135     main stack is free.
27136
27137     Do not define this pattern if all that must be done is the
27138     subtraction.  Some machines require other operations such as stack
27139     probes or maintaining the back chain.  Define this pattern to emit
27140     those operations in addition to updating the stack pointer.
27141
27142'check_stack'
27143     If stack checking (*note Stack Checking::) cannot be done on your
27144     system by probing the stack, define this pattern to perform the
27145     needed check and signal an error if the stack has overflowed.  The
27146     single operand is the address in the stack farthest from the
27147     current stack pointer that you need to validate.  Normally, on
27148     platforms where this pattern is needed, you would obtain the stack
27149     limit from a global or thread-specific variable or register.
27150
27151'probe_stack_address'
27152     If stack checking (*note Stack Checking::) can be done on your
27153     system by probing the stack but without the need to actually access
27154     it, define this pattern and signal an error if the stack has
27155     overflowed.  The single operand is the memory address in the stack
27156     that needs to be probed.
27157
27158'probe_stack'
27159     If stack checking (*note Stack Checking::) can be done on your
27160     system by probing the stack but doing it with a "store zero"
27161     instruction is not valid or optimal, define this pattern to do the
27162     probing differently and signal an error if the stack has
27163     overflowed.  The single operand is the memory reference in the
27164     stack that needs to be probed.
27165
27166'nonlocal_goto'
27167     Emit code to generate a non-local goto, e.g., a jump from one
27168     function to a label in an outer function.  This pattern has four
27169     arguments, each representing a value to be used in the jump.  The
27170     first argument is to be loaded into the frame pointer, the second
27171     is the address to branch to (code to dispatch to the actual label),
27172     the third is the address of a location where the stack is saved,
27173     and the last is the address of the label, to be placed in the
27174     location for the incoming static chain.
27175
27176     On most machines you need not define this pattern, since GCC will
27177     already generate the correct code, which is to load the frame
27178     pointer and static chain, restore the stack (using the
27179     'restore_stack_nonlocal' pattern, if defined), and jump indirectly
27180     to the dispatcher.  You need only define this pattern if this code
27181     will not work on your machine.
27182
27183'nonlocal_goto_receiver'
27184     This pattern, if defined, contains code needed at the target of a
27185     nonlocal goto after the code already generated by GCC.  You will
27186     not normally need to define this pattern.  A typical reason why you
27187     might need this pattern is if some value, such as a pointer to a
27188     global table, must be restored when the frame pointer is restored.
27189     Note that a nonlocal goto only occurs within a unit-of-translation,
27190     so a global table pointer that is shared by all functions of a
27191     given module need not be restored.  There are no arguments.
27192
27193'exception_receiver'
27194     This pattern, if defined, contains code needed at the site of an
27195     exception handler that isn't needed at the site of a nonlocal goto.
27196     You will not normally need to define this pattern.  A typical
27197     reason why you might need this pattern is if some value, such as a
27198     pointer to a global table, must be restored after control flow is
27199     branched to the handler of an exception.  There are no arguments.
27200
27201'builtin_setjmp_setup'
27202     This pattern, if defined, contains additional code needed to
27203     initialize the 'jmp_buf'.  You will not normally need to define
27204     this pattern.  A typical reason why you might need this pattern is
27205     if some value, such as a pointer to a global table, must be
27206     restored.  Though it is preferred that the pointer value be
27207     recalculated if possible (given the address of a label for
27208     instance).  The single argument is a pointer to the 'jmp_buf'.
27209     Note that the buffer is five words long and that the first three
27210     are normally used by the generic mechanism.
27211
27212'builtin_setjmp_receiver'
27213     This pattern, if defined, contains code needed at the site of a
27214     built-in setjmp that isn't needed at the site of a nonlocal goto.
27215     You will not normally need to define this pattern.  A typical
27216     reason why you might need this pattern is if some value, such as a
27217     pointer to a global table, must be restored.  It takes one
27218     argument, which is the label to which builtin_longjmp transferred
27219     control; this pattern may be emitted at a small offset from that
27220     label.
27221
27222'builtin_longjmp'
27223     This pattern, if defined, performs the entire action of the
27224     longjmp.  You will not normally need to define this pattern unless
27225     you also define 'builtin_setjmp_setup'.  The single argument is a
27226     pointer to the 'jmp_buf'.
27227
27228'eh_return'
27229     This pattern, if defined, affects the way '__builtin_eh_return',
27230     and thence the call frame exception handling library routines, are
27231     built.  It is intended to handle non-trivial actions needed along
27232     the abnormal return path.
27233
27234     The address of the exception handler to which the function should
27235     return is passed as operand to this pattern.  It will normally need
27236     to copied by the pattern to some special register or memory
27237     location.  If the pattern needs to determine the location of the
27238     target call frame in order to do so, it may use
27239     'EH_RETURN_STACKADJ_RTX', if defined; it will have already been
27240     assigned.
27241
27242     If this pattern is not defined, the default action will be to
27243     simply copy the return address to 'EH_RETURN_HANDLER_RTX'.  Either
27244     that macro or this pattern needs to be defined if call frame
27245     exception handling is to be used.
27246
27247'prologue'
27248     This pattern, if defined, emits RTL for entry to a function.  The
27249     function entry is responsible for setting up the stack frame,
27250     initializing the frame pointer register, saving callee saved
27251     registers, etc.
27252
27253     Using a prologue pattern is generally preferred over defining
27254     'TARGET_ASM_FUNCTION_PROLOGUE' to emit assembly code for the
27255     prologue.
27256
27257     The 'prologue' pattern is particularly useful for targets which
27258     perform instruction scheduling.
27259
27260'window_save'
27261     This pattern, if defined, emits RTL for a register window save.  It
27262     should be defined if the target machine has register windows but
27263     the window events are decoupled from calls to subroutines.  The
27264     canonical example is the SPARC architecture.
27265
27266'epilogue'
27267     This pattern emits RTL for exit from a function.  The function exit
27268     is responsible for deallocating the stack frame, restoring callee
27269     saved registers and emitting the return instruction.
27270
27271     Using an epilogue pattern is generally preferred over defining
27272     'TARGET_ASM_FUNCTION_EPILOGUE' to emit assembly code for the
27273     epilogue.
27274
27275     The 'epilogue' pattern is particularly useful for targets which
27276     perform instruction scheduling or which have delay slots for their
27277     return instruction.
27278
27279'sibcall_epilogue'
27280     This pattern, if defined, emits RTL for exit from a function
27281     without the final branch back to the calling function.  This
27282     pattern will be emitted before any sibling call (aka tail call)
27283     sites.
27284
27285     The 'sibcall_epilogue' pattern must not clobber any arguments used
27286     for parameter passing or any stack slots for arguments passed to
27287     the current function.
27288
27289'trap'
27290     This pattern, if defined, signals an error, typically by causing
27291     some kind of signal to be raised.
27292
27293'ctrapMM4'
27294     Conditional trap instruction.  Operand 0 is a piece of RTL which
27295     performs a comparison, and operands 1 and 2 are the arms of the
27296     comparison.  Operand 3 is the trap code, an integer.
27297
27298     A typical 'ctrap' pattern looks like
27299
27300          (define_insn "ctrapsi4"
27301            [(trap_if (match_operator 0 "trap_operator"
27302                       [(match_operand 1 "register_operand")
27303                        (match_operand 2 "immediate_operand")])
27304                      (match_operand 3 "const_int_operand" "i"))]
27305            ""
27306            "...")
27307
27308'prefetch'
27309     This pattern, if defined, emits code for a non-faulting data
27310     prefetch instruction.  Operand 0 is the address of the memory to
27311     prefetch.  Operand 1 is a constant 1 if the prefetch is preparing
27312     for a write to the memory address, or a constant 0 otherwise.
27313     Operand 2 is the expected degree of temporal locality of the data
27314     and is a value between 0 and 3, inclusive; 0 means that the data
27315     has no temporal locality, so it need not be left in the cache after
27316     the access; 3 means that the data has a high degree of temporal
27317     locality and should be left in all levels of cache possible; 1 and
27318     2 mean, respectively, a low or moderate degree of temporal
27319     locality.
27320
27321     Targets that do not support write prefetches or locality hints can
27322     ignore the values of operands 1 and 2.
27323
27324'blockage'
27325     This pattern defines a pseudo insn that prevents the instruction
27326     scheduler and other passes from moving instructions and using
27327     register equivalences across the boundary defined by the blockage
27328     insn.  This needs to be an UNSPEC_VOLATILE pattern or a volatile
27329     ASM.
27330
27331'memory_blockage'
27332     This pattern, if defined, represents a compiler memory barrier, and
27333     will be placed at points across which RTL passes may not propagate
27334     memory accesses.  This instruction needs to read and write volatile
27335     BLKmode memory.  It does not need to generate any machine
27336     instruction.  If this pattern is not defined, the compiler falls
27337     back to emitting an instruction corresponding to 'asm volatile (""
27338     ::: "memory")'.
27339
27340'memory_barrier'
27341     If the target memory model is not fully synchronous, then this
27342     pattern should be defined to an instruction that orders both loads
27343     and stores before the instruction with respect to loads and stores
27344     after the instruction.  This pattern has no operands.
27345
27346'speculation_barrier'
27347     If the target can support speculative execution, then this pattern
27348     should be defined to an instruction that will block subsequent
27349     execution until any prior speculation conditions has been resolved.
27350     The pattern must also ensure that the compiler cannot move memory
27351     operations past the barrier, so it needs to be an UNSPEC_VOLATILE
27352     pattern.  The pattern has no operands.
27353
27354     If this pattern is not defined then the default expansion of
27355     '__builtin_speculation_safe_value' will emit a warning.  You can
27356     suppress this warning by defining this pattern with a final
27357     condition of '0' (zero), which tells the compiler that a
27358     speculation barrier is not needed for this target.
27359
27360'sync_compare_and_swapMODE'
27361     This pattern, if defined, emits code for an atomic compare-and-swap
27362     operation.  Operand 1 is the memory on which the atomic operation
27363     is performed.  Operand 2 is the "old" value to be compared against
27364     the current contents of the memory location.  Operand 3 is the
27365     "new" value to store in the memory if the compare succeeds.
27366     Operand 0 is the result of the operation; it should contain the
27367     contents of the memory before the operation.  If the compare
27368     succeeds, this should obviously be a copy of operand 2.
27369
27370     This pattern must show that both operand 0 and operand 1 are
27371     modified.
27372
27373     This pattern must issue any memory barrier instructions such that
27374     all memory operations before the atomic operation occur before the
27375     atomic operation and all memory operations after the atomic
27376     operation occur after the atomic operation.
27377
27378     For targets where the success or failure of the compare-and-swap
27379     operation is available via the status flags, it is possible to
27380     avoid a separate compare operation and issue the subsequent branch
27381     or store-flag operation immediately after the compare-and-swap.  To
27382     this end, GCC will look for a 'MODE_CC' set in the output of
27383     'sync_compare_and_swapMODE'; if the machine description includes
27384     such a set, the target should also define special 'cbranchcc4'
27385     and/or 'cstorecc4' instructions.  GCC will then be able to take the
27386     destination of the 'MODE_CC' set and pass it to the 'cbranchcc4' or
27387     'cstorecc4' pattern as the first operand of the comparison (the
27388     second will be '(const_int 0)').
27389
27390     For targets where the operating system may provide support for this
27391     operation via library calls, the 'sync_compare_and_swap_optab' may
27392     be initialized to a function with the same interface as the
27393     '__sync_val_compare_and_swap_N' built-in.  If the entire set of
27394     __SYNC builtins are supported via library calls, the target can
27395     initialize all of the optabs at once with 'init_sync_libfuncs'.
27396     For the purposes of C++11 'std::atomic::is_lock_free', it is
27397     assumed that these library calls do _not_ use any kind of
27398     interruptable locking.
27399
27400'sync_addMODE', 'sync_subMODE'
27401'sync_iorMODE', 'sync_andMODE'
27402'sync_xorMODE', 'sync_nandMODE'
27403     These patterns emit code for an atomic operation on memory.
27404     Operand 0 is the memory on which the atomic operation is performed.
27405     Operand 1 is the second operand to the binary operator.
27406
27407     This pattern must issue any memory barrier instructions such that
27408     all memory operations before the atomic operation occur before the
27409     atomic operation and all memory operations after the atomic
27410     operation occur after the atomic operation.
27411
27412     If these patterns are not defined, the operation will be
27413     constructed from a compare-and-swap operation, if defined.
27414
27415'sync_old_addMODE', 'sync_old_subMODE'
27416'sync_old_iorMODE', 'sync_old_andMODE'
27417'sync_old_xorMODE', 'sync_old_nandMODE'
27418     These patterns emit code for an atomic operation on memory, and
27419     return the value that the memory contained before the operation.
27420     Operand 0 is the result value, operand 1 is the memory on which the
27421     atomic operation is performed, and operand 2 is the second operand
27422     to the binary operator.
27423
27424     This pattern must issue any memory barrier instructions such that
27425     all memory operations before the atomic operation occur before the
27426     atomic operation and all memory operations after the atomic
27427     operation occur after the atomic operation.
27428
27429     If these patterns are not defined, the operation will be
27430     constructed from a compare-and-swap operation, if defined.
27431
27432'sync_new_addMODE', 'sync_new_subMODE'
27433'sync_new_iorMODE', 'sync_new_andMODE'
27434'sync_new_xorMODE', 'sync_new_nandMODE'
27435     These patterns are like their 'sync_old_OP' counterparts, except
27436     that they return the value that exists in the memory location after
27437     the operation, rather than before the operation.
27438
27439'sync_lock_test_and_setMODE'
27440     This pattern takes two forms, based on the capabilities of the
27441     target.  In either case, operand 0 is the result of the operand,
27442     operand 1 is the memory on which the atomic operation is performed,
27443     and operand 2 is the value to set in the lock.
27444
27445     In the ideal case, this operation is an atomic exchange operation,
27446     in which the previous value in memory operand is copied into the
27447     result operand, and the value operand is stored in the memory
27448     operand.
27449
27450     For less capable targets, any value operand that is not the
27451     constant 1 should be rejected with 'FAIL'.  In this case the target
27452     may use an atomic test-and-set bit operation.  The result operand
27453     should contain 1 if the bit was previously set and 0 if the bit was
27454     previously clear.  The true contents of the memory operand are
27455     implementation defined.
27456
27457     This pattern must issue any memory barrier instructions such that
27458     the pattern as a whole acts as an acquire barrier, that is all
27459     memory operations after the pattern do not occur until the lock is
27460     acquired.
27461
27462     If this pattern is not defined, the operation will be constructed
27463     from a compare-and-swap operation, if defined.
27464
27465'sync_lock_releaseMODE'
27466     This pattern, if defined, releases a lock set by
27467     'sync_lock_test_and_setMODE'.  Operand 0 is the memory that
27468     contains the lock; operand 1 is the value to store in the lock.
27469
27470     If the target doesn't implement full semantics for
27471     'sync_lock_test_and_setMODE', any value operand which is not the
27472     constant 0 should be rejected with 'FAIL', and the true contents of
27473     the memory operand are implementation defined.
27474
27475     This pattern must issue any memory barrier instructions such that
27476     the pattern as a whole acts as a release barrier, that is the lock
27477     is released only after all previous memory operations have
27478     completed.
27479
27480     If this pattern is not defined, then a 'memory_barrier' pattern
27481     will be emitted, followed by a store of the value to the memory
27482     operand.
27483
27484'atomic_compare_and_swapMODE'
27485     This pattern, if defined, emits code for an atomic compare-and-swap
27486     operation with memory model semantics.  Operand 2 is the memory on
27487     which the atomic operation is performed.  Operand 0 is an output
27488     operand which is set to true or false based on whether the
27489     operation succeeded.  Operand 1 is an output operand which is set
27490     to the contents of the memory before the operation was attempted.
27491     Operand 3 is the value that is expected to be in memory.  Operand 4
27492     is the value to put in memory if the expected value is found there.
27493     Operand 5 is set to 1 if this compare and swap is to be treated as
27494     a weak operation.  Operand 6 is the memory model to be used if the
27495     operation is a success.  Operand 7 is the memory model to be used
27496     if the operation fails.
27497
27498     If memory referred to in operand 2 contains the value in operand 3,
27499     then operand 4 is stored in memory pointed to by operand 2 and
27500     fencing based on the memory model in operand 6 is issued.
27501
27502     If memory referred to in operand 2 does not contain the value in
27503     operand 3, then fencing based on the memory model in operand 7 is
27504     issued.
27505
27506     If a target does not support weak compare-and-swap operations, or
27507     the port elects not to implement weak operations, the argument in
27508     operand 5 can be ignored.  Note a strong implementation must be
27509     provided.
27510
27511     If this pattern is not provided, the '__atomic_compare_exchange'
27512     built-in functions will utilize the legacy 'sync_compare_and_swap'
27513     pattern with an '__ATOMIC_SEQ_CST' memory model.
27514
27515'atomic_loadMODE'
27516     This pattern implements an atomic load operation with memory model
27517     semantics.  Operand 1 is the memory address being loaded from.
27518     Operand 0 is the result of the load.  Operand 2 is the memory model
27519     to be used for the load operation.
27520
27521     If not present, the '__atomic_load' built-in function will either
27522     resort to a normal load with memory barriers, or a compare-and-swap
27523     operation if a normal load would not be atomic.
27524
27525'atomic_storeMODE'
27526     This pattern implements an atomic store operation with memory model
27527     semantics.  Operand 0 is the memory address being stored to.
27528     Operand 1 is the value to be written.  Operand 2 is the memory
27529     model to be used for the operation.
27530
27531     If not present, the '__atomic_store' built-in function will attempt
27532     to perform a normal store and surround it with any required memory
27533     fences.  If the store would not be atomic, then an
27534     '__atomic_exchange' is attempted with the result being ignored.
27535
27536'atomic_exchangeMODE'
27537     This pattern implements an atomic exchange operation with memory
27538     model semantics.  Operand 1 is the memory location the operation is
27539     performed on.  Operand 0 is an output operand which is set to the
27540     original value contained in the memory pointed to by operand 1.
27541     Operand 2 is the value to be stored.  Operand 3 is the memory model
27542     to be used.
27543
27544     If this pattern is not present, the built-in function
27545     '__atomic_exchange' will attempt to preform the operation with a
27546     compare and swap loop.
27547
27548'atomic_addMODE', 'atomic_subMODE'
27549'atomic_orMODE', 'atomic_andMODE'
27550'atomic_xorMODE', 'atomic_nandMODE'
27551     These patterns emit code for an atomic operation on memory with
27552     memory model semantics.  Operand 0 is the memory on which the
27553     atomic operation is performed.  Operand 1 is the second operand to
27554     the binary operator.  Operand 2 is the memory model to be used by
27555     the operation.
27556
27557     If these patterns are not defined, attempts will be made to use
27558     legacy 'sync' patterns, or equivalent patterns which return a
27559     result.  If none of these are available a compare-and-swap loop
27560     will be used.
27561
27562'atomic_fetch_addMODE', 'atomic_fetch_subMODE'
27563'atomic_fetch_orMODE', 'atomic_fetch_andMODE'
27564'atomic_fetch_xorMODE', 'atomic_fetch_nandMODE'
27565     These patterns emit code for an atomic operation on memory with
27566     memory model semantics, and return the original value.  Operand 0
27567     is an output operand which contains the value of the memory
27568     location before the operation was performed.  Operand 1 is the
27569     memory on which the atomic operation is performed.  Operand 2 is
27570     the second operand to the binary operator.  Operand 3 is the memory
27571     model to be used by the operation.
27572
27573     If these patterns are not defined, attempts will be made to use
27574     legacy 'sync' patterns.  If none of these are available a
27575     compare-and-swap loop will be used.
27576
27577'atomic_add_fetchMODE', 'atomic_sub_fetchMODE'
27578'atomic_or_fetchMODE', 'atomic_and_fetchMODE'
27579'atomic_xor_fetchMODE', 'atomic_nand_fetchMODE'
27580     These patterns emit code for an atomic operation on memory with
27581     memory model semantics and return the result after the operation is
27582     performed.  Operand 0 is an output operand which contains the value
27583     after the operation.  Operand 1 is the memory on which the atomic
27584     operation is performed.  Operand 2 is the second operand to the
27585     binary operator.  Operand 3 is the memory model to be used by the
27586     operation.
27587
27588     If these patterns are not defined, attempts will be made to use
27589     legacy 'sync' patterns, or equivalent patterns which return the
27590     result before the operation followed by the arithmetic operation
27591     required to produce the result.  If none of these are available a
27592     compare-and-swap loop will be used.
27593
27594'atomic_test_and_set'
27595     This pattern emits code for '__builtin_atomic_test_and_set'.
27596     Operand 0 is an output operand which is set to true if the previous
27597     previous contents of the byte was "set", and false otherwise.
27598     Operand 1 is the 'QImode' memory to be modified.  Operand 2 is the
27599     memory model to be used.
27600
27601     The specific value that defines "set" is implementation defined,
27602     and is normally based on what is performed by the native atomic
27603     test and set instruction.
27604
27605'atomic_bit_test_and_setMODE'
27606'atomic_bit_test_and_complementMODE'
27607'atomic_bit_test_and_resetMODE'
27608     These patterns emit code for an atomic bitwise operation on memory
27609     with memory model semantics, and return the original value of the
27610     specified bit.  Operand 0 is an output operand which contains the
27611     value of the specified bit from the memory location before the
27612     operation was performed.  Operand 1 is the memory on which the
27613     atomic operation is performed.  Operand 2 is the bit within the
27614     operand, starting with least significant bit.  Operand 3 is the
27615     memory model to be used by the operation.  Operand 4 is a flag - it
27616     is 'const1_rtx' if operand 0 should contain the original value of
27617     the specified bit in the least significant bit of the operand, and
27618     'const0_rtx' if the bit should be in its original position in the
27619     operand.  'atomic_bit_test_and_setMODE' atomically sets the
27620     specified bit after remembering its original value,
27621     'atomic_bit_test_and_complementMODE' inverts the specified bit and
27622     'atomic_bit_test_and_resetMODE' clears the specified bit.
27623
27624     If these patterns are not defined, attempts will be made to use
27625     'atomic_fetch_orMODE', 'atomic_fetch_xorMODE' or
27626     'atomic_fetch_andMODE' instruction patterns, or their 'sync'
27627     counterparts.  If none of these are available a compare-and-swap
27628     loop will be used.
27629
27630'mem_thread_fence'
27631     This pattern emits code required to implement a thread fence with
27632     memory model semantics.  Operand 0 is the memory model to be used.
27633
27634     For the '__ATOMIC_RELAXED' model no instructions need to be issued
27635     and this expansion is not invoked.
27636
27637     The compiler always emits a compiler memory barrier regardless of
27638     what expanding this pattern produced.
27639
27640     If this pattern is not defined, the compiler falls back to
27641     expanding the 'memory_barrier' pattern, then to emitting
27642     '__sync_synchronize' library call, and finally to just placing a
27643     compiler memory barrier.
27644
27645'get_thread_pointerMODE'
27646'set_thread_pointerMODE'
27647     These patterns emit code that reads/sets the TLS thread pointer.
27648     Currently, these are only needed if the target needs to support the
27649     '__builtin_thread_pointer' and '__builtin_set_thread_pointer'
27650     builtins.
27651
27652     The get/set patterns have a single output/input operand
27653     respectively, with MODE intended to be 'Pmode'.
27654
27655'stack_protect_combined_set'
27656     This pattern, if defined, moves a 'ptr_mode' value from an address
27657     whose declaration RTX is given in operand 1 to the memory in
27658     operand 0 without leaving the value in a register afterward.  If
27659     several instructions are needed by the target to perform the
27660     operation (eg.  to load the address from a GOT entry then load the
27661     'ptr_mode' value and finally store it), it is the backend's
27662     responsibility to ensure no intermediate result gets spilled.  This
27663     is to avoid leaking the value some place that an attacker might use
27664     to rewrite the stack guard slot after having clobbered it.
27665
27666     If this pattern is not defined, then the address declaration is
27667     expanded first in the standard way and a 'stack_protect_set'
27668     pattern is then generated to move the value from that address to
27669     the address in operand 0.
27670
27671'stack_protect_set'
27672     This pattern, if defined, moves a 'ptr_mode' value from the valid
27673     memory location in operand 1 to the memory in operand 0 without
27674     leaving the value in a register afterward.  This is to avoid
27675     leaking the value some place that an attacker might use to rewrite
27676     the stack guard slot after having clobbered it.
27677
27678     Note: on targets where the addressing modes do not allow to load
27679     directly from stack guard address, the address is expanded in a
27680     standard way first which could cause some spills.
27681
27682     If this pattern is not defined, then a plain move pattern is
27683     generated.
27684
27685'stack_protect_combined_test'
27686     This pattern, if defined, compares a 'ptr_mode' value from an
27687     address whose declaration RTX is given in operand 1 with the memory
27688     in operand 0 without leaving the value in a register afterward and
27689     branches to operand 2 if the values were equal.  If several
27690     instructions are needed by the target to perform the operation (eg.
27691     to load the address from a GOT entry then load the 'ptr_mode' value
27692     and finally store it), it is the backend's responsibility to ensure
27693     no intermediate result gets spilled.  This is to avoid leaking the
27694     value some place that an attacker might use to rewrite the stack
27695     guard slot after having clobbered it.
27696
27697     If this pattern is not defined, then the address declaration is
27698     expanded first in the standard way and a 'stack_protect_test'
27699     pattern is then generated to compare the value from that address to
27700     the value at the memory in operand 0.
27701
27702'stack_protect_test'
27703     This pattern, if defined, compares a 'ptr_mode' value from the
27704     valid memory location in operand 1 with the memory in operand 0
27705     without leaving the value in a register afterward and branches to
27706     operand 2 if the values were equal.
27707
27708     If this pattern is not defined, then a plain compare pattern and
27709     conditional branch pattern is used.
27710
27711'clear_cache'
27712     This pattern, if defined, flushes the instruction cache for a
27713     region of memory.  The region is bounded to by the Pmode pointers
27714     in operand 0 inclusive and operand 1 exclusive.
27715
27716     If this pattern is not defined, a call to the library function
27717     '__clear_cache' is used.
27718
27719
27720File: gccint.info,  Node: Pattern Ordering,  Next: Dependent Patterns,  Prev: Standard Names,  Up: Machine Desc
27721
2772217.10 When the Order of Patterns Matters
27723========================================
27724
27725Sometimes an insn can match more than one instruction pattern.  Then the
27726pattern that appears first in the machine description is the one used.
27727Therefore, more specific patterns (patterns that will match fewer
27728things) and faster instructions (those that will produce better code
27729when they do match) should usually go first in the description.
27730
27731 In some cases the effect of ordering the patterns can be used to hide a
27732pattern when it is not valid.  For example, the 68000 has an instruction
27733for converting a fullword to floating point and another for converting a
27734byte to floating point.  An instruction converting an integer to
27735floating point could match either one.  We put the pattern to convert
27736the fullword first to make sure that one will be used rather than the
27737other.  (Otherwise a large integer might be generated as a single-byte
27738immediate quantity, which would not work.)  Instead of using this
27739pattern ordering it would be possible to make the pattern for
27740convert-a-byte smart enough to deal properly with any constant value.
27741
27742
27743File: gccint.info,  Node: Dependent Patterns,  Next: Jump Patterns,  Prev: Pattern Ordering,  Up: Machine Desc
27744
2774517.11 Interdependence of Patterns
27746=================================
27747
27748In some cases machines support instructions identical except for the
27749machine mode of one or more operands.  For example, there may be
27750"sign-extend halfword" and "sign-extend byte" instructions whose
27751patterns are
27752
27753     (set (match_operand:SI 0 ...)
27754          (extend:SI (match_operand:HI 1 ...)))
27755
27756     (set (match_operand:SI 0 ...)
27757          (extend:SI (match_operand:QI 1 ...)))
27758
27759Constant integers do not specify a machine mode, so an instruction to
27760extend a constant value could match either pattern.  The pattern it
27761actually will match is the one that appears first in the file.  For
27762correct results, this must be the one for the widest possible mode
27763('HImode', here).  If the pattern matches the 'QImode' instruction, the
27764results will be incorrect if the constant value does not actually fit
27765that mode.
27766
27767 Such instructions to extend constants are rarely generated because they
27768are optimized away, but they do occasionally happen in nonoptimized
27769compilations.
27770
27771 If a constraint in a pattern allows a constant, the reload pass may
27772replace a register with a constant permitted by the constraint in some
27773cases.  Similarly for memory references.  Because of this substitution,
27774you should not provide separate patterns for increment and decrement
27775instructions.  Instead, they should be generated from the same pattern
27776that supports register-register add insns by examining the operands and
27777generating the appropriate machine instruction.
27778
27779
27780File: gccint.info,  Node: Jump Patterns,  Next: Looping Patterns,  Prev: Dependent Patterns,  Up: Machine Desc
27781
2778217.12 Defining Jump Instruction Patterns
27783========================================
27784
27785GCC does not assume anything about how the machine realizes jumps.  The
27786machine description should define a single pattern, usually a
27787'define_expand', which expands to all the required insns.
27788
27789 Usually, this would be a comparison insn to set the condition code and
27790a separate branch insn testing the condition code and branching or not
27791according to its value.  For many machines, however, separating compares
27792and branches is limiting, which is why the more flexible approach with
27793one 'define_expand' is used in GCC. The machine description becomes
27794clearer for architectures that have compare-and-branch instructions but
27795no condition code.  It also works better when different sets of
27796comparison operators are supported by different kinds of conditional
27797branches (e.g. integer vs. floating-point), or by conditional branches
27798with respect to conditional stores.
27799
27800 Two separate insns are always used if the machine description
27801represents a condition code register using the legacy RTL expression
27802'(cc0)', and on most machines that use a separate condition code
27803register (*note Condition Code::).  For machines that use '(cc0)', in
27804fact, the set and use of the condition code must be separate and
27805adjacent(1), thus allowing flags in 'cc_status' to be used (*note
27806Condition Code::) and so that the comparison and branch insns could be
27807located from each other by using the functions 'prev_cc0_setter' and
27808'next_cc0_user'.
27809
27810 Even in this case having a single entry point for conditional branches
27811is advantageous, because it handles equally well the case where a single
27812comparison instruction records the results of both signed and unsigned
27813comparison of the given operands (with the branch insns coming in
27814distinct signed and unsigned flavors) as in the x86 or SPARC, and the
27815case where there are distinct signed and unsigned compare instructions
27816and only one set of conditional branch instructions as in the PowerPC.
27817
27818   ---------- Footnotes ----------
27819
27820   (1) 'note' insns can separate them, though.
27821
27822
27823File: gccint.info,  Node: Looping Patterns,  Next: Insn Canonicalizations,  Prev: Jump Patterns,  Up: Machine Desc
27824
2782517.13 Defining Looping Instruction Patterns
27826===========================================
27827
27828Some machines have special jump instructions that can be utilized to
27829make loops more efficient.  A common example is the 68000 'dbra'
27830instruction which performs a decrement of a register and a branch if the
27831result was greater than zero.  Other machines, in particular digital
27832signal processors (DSPs), have special block repeat instructions to
27833provide low-overhead loop support.  For example, the TI TMS320C3x/C4x
27834DSPs have a block repeat instruction that loads special registers to
27835mark the top and end of a loop and to count the number of loop
27836iterations.  This avoids the need for fetching and executing a
27837'dbra'-like instruction and avoids pipeline stalls associated with the
27838jump.
27839
27840 GCC has two special named patterns to support low overhead looping.
27841They are 'doloop_begin' and 'doloop_end'.  These are emitted by the loop
27842optimizer for certain well-behaved loops with a finite number of loop
27843iterations using information collected during strength reduction.
27844
27845 The 'doloop_end' pattern describes the actual looping instruction (or
27846the implicit looping operation) and the 'doloop_begin' pattern is an
27847optional companion pattern that can be used for initialization needed
27848for some low-overhead looping instructions.
27849
27850 Note that some machines require the actual looping instruction to be
27851emitted at the top of the loop (e.g., the TMS320C3x/C4x DSPs).  Emitting
27852the true RTL for a looping instruction at the top of the loop can cause
27853problems with flow analysis.  So instead, a dummy 'doloop' insn is
27854emitted at the end of the loop.  The machine dependent reorg pass checks
27855for the presence of this 'doloop' insn and then searches back to the top
27856of the loop, where it inserts the true looping insn (provided there are
27857no instructions in the loop which would cause problems).  Any additional
27858labels can be emitted at this point.  In addition, if the desired
27859special iteration counter register was not allocated, this machine
27860dependent reorg pass could emit a traditional compare and jump
27861instruction pair.
27862
27863 For the 'doloop_end' pattern, the loop optimizer allocates an
27864additional pseudo register as an iteration counter.  This pseudo
27865register cannot be used within the loop (i.e., general induction
27866variables cannot be derived from it), however, in many cases the loop
27867induction variable may become redundant and removed by the flow pass.
27868
27869 The 'doloop_end' pattern must have a specific structure to be handled
27870correctly by GCC. The example below is taken (slightly simplified) from
27871the PDP-11 target:
27872
27873     (define_expand "doloop_end"
27874       [(parallel [(set (pc)
27875                        (if_then_else
27876                         (ne (match_operand:HI 0 "nonimmediate_operand" "+r,!m")
27877                             (const_int 1))
27878                         (label_ref (match_operand 1 "" ""))
27879                         (pc)))
27880                   (set (match_dup 0)
27881                        (plus:HI (match_dup 0)
27882                              (const_int -1)))])]
27883       ""
27884       "{
27885         if (GET_MODE (operands[0]) != HImode)
27886           FAIL;
27887       }")
27888
27889     (define_insn "doloop_end_insn"
27890       [(set (pc)
27891             (if_then_else
27892              (ne (match_operand:HI 0 "nonimmediate_operand" "+r,!m")
27893                  (const_int 1))
27894              (label_ref (match_operand 1 "" ""))
27895              (pc)))
27896        (set (match_dup 0)
27897             (plus:HI (match_dup 0)
27898                   (const_int -1)))]
27899       ""
27900
27901       {
27902         if (which_alternative == 0)
27903           return "sob %0,%l1";
27904
27905         /* emulate sob */
27906         output_asm_insn ("dec %0", operands);
27907         return "bne %l1";
27908       })
27909
27910 The first part of the pattern describes the branch condition.  GCC
27911supports three cases for the way the target machine handles the loop
27912counter:
27913   * Loop terminates when the loop register decrements to zero.  This is
27914     represented by a 'ne' comparison of the register (its old value)
27915     with constant 1 (as in the example above).
27916   * Loop terminates when the loop register decrements to -1.  This is
27917     represented by a 'ne' comparison of the register with constant
27918     zero.
27919   * Loop terminates when the loop register decrements to a negative
27920     value.  This is represented by a 'ge' comparison of the register
27921     with constant zero.  For this case, GCC will attach a 'REG_NONNEG'
27922     note to the 'doloop_end' insn if it can determine that the register
27923     will be non-negative.
27924
27925 Since the 'doloop_end' insn is a jump insn that also has an output, the
27926reload pass does not handle the output operand.  Therefore, the
27927constraint must allow for that operand to be in memory rather than a
27928register.  In the example shown above, that is handled (in the
27929'doloop_end_insn' pattern) by using a loop instruction sequence that can
27930handle memory operands when the memory alternative appears.
27931
27932 GCC does not check the mode of the loop register operand when
27933generating the 'doloop_end' pattern.  If the pattern is only valid for
27934some modes but not others, the pattern should be a 'define_expand'
27935pattern that checks the operand mode in the preparation code, and issues
27936'FAIL' if an unsupported mode is found.  The example above does this,
27937since the machine instruction to be used only exists for 'HImode'.
27938
27939 If the 'doloop_end' pattern is a 'define_expand', there must also be a
27940'define_insn' or 'define_insn_and_split' matching the generated pattern.
27941Otherwise, the compiler will fail during loop optimization.
27942
27943
27944File: gccint.info,  Node: Insn Canonicalizations,  Next: Expander Definitions,  Prev: Looping Patterns,  Up: Machine Desc
27945
2794617.14 Canonicalization of Instructions
27947======================================
27948
27949There are often cases where multiple RTL expressions could represent an
27950operation performed by a single machine instruction.  This situation is
27951most commonly encountered with logical, branch, and multiply-accumulate
27952instructions.  In such cases, the compiler attempts to convert these
27953multiple RTL expressions into a single canonical form to reduce the
27954number of insn patterns required.
27955
27956 In addition to algebraic simplifications, following canonicalizations
27957are performed:
27958
27959   * For commutative and comparison operators, a constant is always made
27960     the second operand.  If a machine only supports a constant as the
27961     second operand, only patterns that match a constant in the second
27962     operand need be supplied.
27963
27964   * For associative operators, a sequence of operators will always
27965     chain to the left; for instance, only the left operand of an
27966     integer 'plus' can itself be a 'plus'.  'and', 'ior', 'xor',
27967     'plus', 'mult', 'smin', 'smax', 'umin', and 'umax' are associative
27968     when applied to integers, and sometimes to floating-point.
27969
27970   * For these operators, if only one operand is a 'neg', 'not', 'mult',
27971     'plus', or 'minus' expression, it will be the first operand.
27972
27973   * In combinations of 'neg', 'mult', 'plus', and 'minus', the 'neg'
27974     operations (if any) will be moved inside the operations as far as
27975     possible.  For instance, '(neg (mult A B))' is canonicalized as
27976     '(mult (neg A) B)', but '(plus (mult (neg B) C) A)' is
27977     canonicalized as '(minus A (mult B C))'.
27978
27979   * For the 'compare' operator, a constant is always the second operand
27980     if the first argument is a condition code register or '(cc0)'.
27981
27982   * For instructions that inherently set a condition code register, the
27983     'compare' operator is always written as the first RTL expression of
27984     the 'parallel' instruction pattern.  For example,
27985
27986          (define_insn ""
27987            [(set (reg:CCZ FLAGS_REG)
27988          	(compare:CCZ
27989          	  (plus:SI
27990          	    (match_operand:SI 1 "register_operand" "%r")
27991          	    (match_operand:SI 2 "register_operand" "r"))
27992          	  (const_int 0)))
27993             (set (match_operand:SI 0 "register_operand" "=r")
27994          	(plus:SI (match_dup 1) (match_dup 2)))]
27995            ""
27996            "addl %0, %1, %2")
27997
27998   * An operand of 'neg', 'not', 'mult', 'plus', or 'minus' is made the
27999     first operand under the same conditions as above.
28000
28001   * '(ltu (plus A B) B)' is converted to '(ltu (plus A B) A)'.
28002     Likewise with 'geu' instead of 'ltu'.
28003
28004   * '(minus X (const_int N))' is converted to '(plus X (const_int
28005     -N))'.
28006
28007   * Within address computations (i.e., inside 'mem'), a left shift is
28008     converted into the appropriate multiplication by a power of two.
28009
28010   * De Morgan's Law is used to move bitwise negation inside a bitwise
28011     logical-and or logical-or operation.  If this results in only one
28012     operand being a 'not' expression, it will be the first one.
28013
28014     A machine that has an instruction that performs a bitwise
28015     logical-and of one operand with the bitwise negation of the other
28016     should specify the pattern for that instruction as
28017
28018          (define_insn ""
28019            [(set (match_operand:M 0 ...)
28020                  (and:M (not:M (match_operand:M 1 ...))
28021                               (match_operand:M 2 ...)))]
28022            "..."
28023            "...")
28024
28025     Similarly, a pattern for a "NAND" instruction should be written
28026
28027          (define_insn ""
28028            [(set (match_operand:M 0 ...)
28029                  (ior:M (not:M (match_operand:M 1 ...))
28030                               (not:M (match_operand:M 2 ...))))]
28031            "..."
28032            "...")
28033
28034     In both cases, it is not necessary to include patterns for the many
28035     logically equivalent RTL expressions.
28036
28037   * The only possible RTL expressions involving both bitwise
28038     exclusive-or and bitwise negation are '(xor:M X Y)' and '(not:M
28039     (xor:M X Y))'.
28040
28041   * The sum of three items, one of which is a constant, will only
28042     appear in the form
28043
28044          (plus:M (plus:M X Y) CONSTANT)
28045
28046   * Equality comparisons of a group of bits (usually a single bit) with
28047     zero will be written using 'zero_extract' rather than the
28048     equivalent 'and' or 'sign_extract' operations.
28049
28050   * '(sign_extend:M1 (mult:M2 (sign_extend:M2 X) (sign_extend:M2 Y)))'
28051     is converted to '(mult:M1 (sign_extend:M1 X) (sign_extend:M1 Y))',
28052     and likewise for 'zero_extend'.
28053
28054   * '(sign_extend:M1 (mult:M2 (ashiftrt:M2 X S) (sign_extend:M2 Y)))'
28055     is converted to '(mult:M1 (sign_extend:M1 (ashiftrt:M2 X S))
28056     (sign_extend:M1 Y))', and likewise for patterns using 'zero_extend'
28057     and 'lshiftrt'.  If the second operand of 'mult' is also a shift,
28058     then that is extended also.  This transformation is only applied
28059     when it can be proven that the original operation had sufficient
28060     precision to prevent overflow.
28061
28062 Further canonicalization rules are defined in the function
28063'commutative_operand_precedence' in 'gcc/rtlanal.c'.
28064
28065
28066File: gccint.info,  Node: Expander Definitions,  Next: Insn Splitting,  Prev: Insn Canonicalizations,  Up: Machine Desc
28067
2806817.15 Defining RTL Sequences for Code Generation
28069================================================
28070
28071On some target machines, some standard pattern names for RTL generation
28072cannot be handled with single insn, but a sequence of RTL insns can
28073represent them.  For these target machines, you can write a
28074'define_expand' to specify how to generate the sequence of RTL.
28075
28076 A 'define_expand' is an RTL expression that looks almost like a
28077'define_insn'; but, unlike the latter, a 'define_expand' is used only
28078for RTL generation and it can produce more than one RTL insn.
28079
28080 A 'define_expand' RTX has four operands:
28081
28082   * The name.  Each 'define_expand' must have a name, since the only
28083     use for it is to refer to it by name.
28084
28085   * The RTL template.  This is a vector of RTL expressions representing
28086     a sequence of separate instructions.  Unlike 'define_insn', there
28087     is no implicit surrounding 'PARALLEL'.
28088
28089   * The condition, a string containing a C expression.  This expression
28090     is used to express how the availability of this pattern depends on
28091     subclasses of target machine, selected by command-line options when
28092     GCC is run.  This is just like the condition of a 'define_insn'
28093     that has a standard name.  Therefore, the condition (if present)
28094     may not depend on the data in the insn being matched, but only the
28095     target-machine-type flags.  The compiler needs to test these
28096     conditions during initialization in order to learn exactly which
28097     named instructions are available in a particular run.
28098
28099   * The preparation statements, a string containing zero or more C
28100     statements which are to be executed before RTL code is generated
28101     from the RTL template.
28102
28103     Usually these statements prepare temporary registers for use as
28104     internal operands in the RTL template, but they can also generate
28105     RTL insns directly by calling routines such as 'emit_insn', etc.
28106     Any such insns precede the ones that come from the RTL template.
28107
28108   * Optionally, a vector containing the values of attributes.  *Note
28109     Insn Attributes::.
28110
28111 Every RTL insn emitted by a 'define_expand' must match some
28112'define_insn' in the machine description.  Otherwise, the compiler will
28113crash when trying to generate code for the insn or trying to optimize
28114it.
28115
28116 The RTL template, in addition to controlling generation of RTL insns,
28117also describes the operands that need to be specified when this pattern
28118is used.  In particular, it gives a predicate for each operand.
28119
28120 A true operand, which needs to be specified in order to generate RTL
28121from the pattern, should be described with a 'match_operand' in its
28122first occurrence in the RTL template.  This enters information on the
28123operand's predicate into the tables that record such things.  GCC uses
28124the information to preload the operand into a register if that is
28125required for valid RTL code.  If the operand is referred to more than
28126once, subsequent references should use 'match_dup'.
28127
28128 The RTL template may also refer to internal "operands" which are
28129temporary registers or labels used only within the sequence made by the
28130'define_expand'.  Internal operands are substituted into the RTL
28131template with 'match_dup', never with 'match_operand'.  The values of
28132the internal operands are not passed in as arguments by the compiler
28133when it requests use of this pattern.  Instead, they are computed within
28134the pattern, in the preparation statements.  These statements compute
28135the values and store them into the appropriate elements of 'operands' so
28136that 'match_dup' can find them.
28137
28138 There are two special macros defined for use in the preparation
28139statements: 'DONE' and 'FAIL'.  Use them with a following semicolon, as
28140a statement.
28141
28142'DONE'
28143     Use the 'DONE' macro to end RTL generation for the pattern.  The
28144     only RTL insns resulting from the pattern on this occasion will be
28145     those already emitted by explicit calls to 'emit_insn' within the
28146     preparation statements; the RTL template will not be generated.
28147
28148'FAIL'
28149     Make the pattern fail on this occasion.  When a pattern fails, it
28150     means that the pattern was not truly available.  The calling
28151     routines in the compiler will try other strategies for code
28152     generation using other patterns.
28153
28154     Failure is currently supported only for binary (addition,
28155     multiplication, shifting, etc.)  and bit-field ('extv', 'extzv',
28156     and 'insv') operations.
28157
28158 If the preparation falls through (invokes neither 'DONE' nor 'FAIL'),
28159then the 'define_expand' acts like a 'define_insn' in that the RTL
28160template is used to generate the insn.
28161
28162 The RTL template is not used for matching, only for generating the
28163initial insn list.  If the preparation statement always invokes 'DONE'
28164or 'FAIL', the RTL template may be reduced to a simple list of operands,
28165such as this example:
28166
28167     (define_expand "addsi3"
28168       [(match_operand:SI 0 "register_operand" "")
28169        (match_operand:SI 1 "register_operand" "")
28170        (match_operand:SI 2 "register_operand" "")]
28171       ""
28172       "
28173     {
28174       handle_add (operands[0], operands[1], operands[2]);
28175       DONE;
28176     }")
28177
28178 Here is an example, the definition of left-shift for the SPUR chip:
28179
28180     (define_expand "ashlsi3"
28181       [(set (match_operand:SI 0 "register_operand" "")
28182             (ashift:SI
28183               (match_operand:SI 1 "register_operand" "")
28184               (match_operand:SI 2 "nonmemory_operand" "")))]
28185       ""
28186       "
28187
28188     {
28189       if (GET_CODE (operands[2]) != CONST_INT
28190           || (unsigned) INTVAL (operands[2]) > 3)
28191         FAIL;
28192     }")
28193
28194This example uses 'define_expand' so that it can generate an RTL insn
28195for shifting when the shift-count is in the supported range of 0 to 3
28196but fail in other cases where machine insns aren't available.  When it
28197fails, the compiler tries another strategy using different patterns
28198(such as, a library call).
28199
28200 If the compiler were able to handle nontrivial condition-strings in
28201patterns with names, then it would be possible to use a 'define_insn' in
28202that case.  Here is another case (zero-extension on the 68000) which
28203makes more use of the power of 'define_expand':
28204
28205     (define_expand "zero_extendhisi2"
28206       [(set (match_operand:SI 0 "general_operand" "")
28207             (const_int 0))
28208        (set (strict_low_part
28209               (subreg:HI
28210                 (match_dup 0)
28211                 0))
28212             (match_operand:HI 1 "general_operand" ""))]
28213       ""
28214       "operands[1] = make_safe_from (operands[1], operands[0]);")
28215
28216Here two RTL insns are generated, one to clear the entire output operand
28217and the other to copy the input operand into its low half.  This
28218sequence is incorrect if the input operand refers to [the old value of]
28219the output operand, so the preparation statement makes sure this isn't
28220so.  The function 'make_safe_from' copies the 'operands[1]' into a
28221temporary register if it refers to 'operands[0]'.  It does this by
28222emitting another RTL insn.
28223
28224 Finally, a third example shows the use of an internal operand.
28225Zero-extension on the SPUR chip is done by 'and'-ing the result against
28226a halfword mask.  But this mask cannot be represented by a 'const_int'
28227because the constant value is too large to be legitimate on this
28228machine.  So it must be copied into a register with 'force_reg' and then
28229the register used in the 'and'.
28230
28231     (define_expand "zero_extendhisi2"
28232       [(set (match_operand:SI 0 "register_operand" "")
28233             (and:SI (subreg:SI
28234                       (match_operand:HI 1 "register_operand" "")
28235                       0)
28236                     (match_dup 2)))]
28237       ""
28238       "operands[2]
28239          = force_reg (SImode, GEN_INT (65535)); ")
28240
28241 _Note:_ If the 'define_expand' is used to serve a standard binary or
28242unary arithmetic operation or a bit-field operation, then the last insn
28243it generates must not be a 'code_label', 'barrier' or 'note'.  It must
28244be an 'insn', 'jump_insn' or 'call_insn'.  If you don't need a real insn
28245at the end, emit an insn to copy the result of the operation into
28246itself.  Such an insn will generate no code, but it can avoid problems
28247in the compiler.
28248
28249
28250File: gccint.info,  Node: Insn Splitting,  Next: Including Patterns,  Prev: Expander Definitions,  Up: Machine Desc
28251
2825217.16 Defining How to Split Instructions
28253========================================
28254
28255There are two cases where you should specify how to split a pattern into
28256multiple insns.  On machines that have instructions requiring delay
28257slots (*note Delay Slots::) or that have instructions whose output is
28258not available for multiple cycles (*note Processor pipeline
28259description::), the compiler phases that optimize these cases need to be
28260able to move insns into one-instruction delay slots.  However, some
28261insns may generate more than one machine instruction.  These insns
28262cannot be placed into a delay slot.
28263
28264 Often you can rewrite the single insn as a list of individual insns,
28265each corresponding to one machine instruction.  The disadvantage of
28266doing so is that it will cause the compilation to be slower and require
28267more space.  If the resulting insns are too complex, it may also
28268suppress some optimizations.  The compiler splits the insn if there is a
28269reason to believe that it might improve instruction or delay slot
28270scheduling.
28271
28272 The insn combiner phase also splits putative insns.  If three insns are
28273merged into one insn with a complex expression that cannot be matched by
28274some 'define_insn' pattern, the combiner phase attempts to split the
28275complex pattern into two insns that are recognized.  Usually it can
28276break the complex pattern into two patterns by splitting out some
28277subexpression.  However, in some other cases, such as performing an
28278addition of a large constant in two insns on a RISC machine, the way to
28279split the addition into two insns is machine-dependent.
28280
28281 The 'define_split' definition tells the compiler how to split a complex
28282insn into several simpler insns.  It looks like this:
28283
28284     (define_split
28285       [INSN-PATTERN]
28286       "CONDITION"
28287       [NEW-INSN-PATTERN-1
28288        NEW-INSN-PATTERN-2
28289        ...]
28290       "PREPARATION-STATEMENTS")
28291
28292 INSN-PATTERN is a pattern that needs to be split and CONDITION is the
28293final condition to be tested, as in a 'define_insn'.  When an insn
28294matching INSN-PATTERN and satisfying CONDITION is found, it is replaced
28295in the insn list with the insns given by NEW-INSN-PATTERN-1,
28296NEW-INSN-PATTERN-2, etc.
28297
28298 The PREPARATION-STATEMENTS are similar to those statements that are
28299specified for 'define_expand' (*note Expander Definitions::) and are
28300executed before the new RTL is generated to prepare for the generated
28301code or emit some insns whose pattern is not fixed.  Unlike those in
28302'define_expand', however, these statements must not generate any new
28303pseudo-registers.  Once reload has completed, they also must not
28304allocate any space in the stack frame.
28305
28306 There are two special macros defined for use in the preparation
28307statements: 'DONE' and 'FAIL'.  Use them with a following semicolon, as
28308a statement.
28309
28310'DONE'
28311     Use the 'DONE' macro to end RTL generation for the splitter.  The
28312     only RTL insns generated as replacement for the matched input insn
28313     will be those already emitted by explicit calls to 'emit_insn'
28314     within the preparation statements; the replacement pattern is not
28315     used.
28316
28317'FAIL'
28318     Make the 'define_split' fail on this occasion.  When a
28319     'define_split' fails, it means that the splitter was not truly
28320     available for the inputs it was given, and the input insn will not
28321     be split.
28322
28323 If the preparation falls through (invokes neither 'DONE' nor 'FAIL'),
28324then the 'define_split' uses the replacement template.
28325
28326 Patterns are matched against INSN-PATTERN in two different
28327circumstances.  If an insn needs to be split for delay slot scheduling
28328or insn scheduling, the insn is already known to be valid, which means
28329that it must have been matched by some 'define_insn' and, if
28330'reload_completed' is nonzero, is known to satisfy the constraints of
28331that 'define_insn'.  In that case, the new insn patterns must also be
28332insns that are matched by some 'define_insn' and, if 'reload_completed'
28333is nonzero, must also satisfy the constraints of those definitions.
28334
28335 As an example of this usage of 'define_split', consider the following
28336example from 'a29k.md', which splits a 'sign_extend' from 'HImode' to
28337'SImode' into a pair of shift insns:
28338
28339     (define_split
28340       [(set (match_operand:SI 0 "gen_reg_operand" "")
28341             (sign_extend:SI (match_operand:HI 1 "gen_reg_operand" "")))]
28342       ""
28343       [(set (match_dup 0)
28344             (ashift:SI (match_dup 1)
28345                        (const_int 16)))
28346        (set (match_dup 0)
28347             (ashiftrt:SI (match_dup 0)
28348                          (const_int 16)))]
28349       "
28350     { operands[1] = gen_lowpart (SImode, operands[1]); }")
28351
28352 When the combiner phase tries to split an insn pattern, it is always
28353the case that the pattern is _not_ matched by any 'define_insn'.  The
28354combiner pass first tries to split a single 'set' expression and then
28355the same 'set' expression inside a 'parallel', but followed by a
28356'clobber' of a pseudo-reg to use as a scratch register.  In these cases,
28357the combiner expects exactly one or two new insn patterns to be
28358generated.  It will verify that these patterns match some 'define_insn'
28359definitions, so you need not do this test in the 'define_split' (of
28360course, there is no point in writing a 'define_split' that will never
28361produce insns that match).
28362
28363 Here is an example of this use of 'define_split', taken from
28364'rs6000.md':
28365
28366     (define_split
28367       [(set (match_operand:SI 0 "gen_reg_operand" "")
28368             (plus:SI (match_operand:SI 1 "gen_reg_operand" "")
28369                      (match_operand:SI 2 "non_add_cint_operand" "")))]
28370       ""
28371       [(set (match_dup 0) (plus:SI (match_dup 1) (match_dup 3)))
28372        (set (match_dup 0) (plus:SI (match_dup 0) (match_dup 4)))]
28373     "
28374     {
28375       int low = INTVAL (operands[2]) & 0xffff;
28376       int high = (unsigned) INTVAL (operands[2]) >> 16;
28377
28378       if (low & 0x8000)
28379         high++, low |= 0xffff0000;
28380
28381       operands[3] = GEN_INT (high << 16);
28382       operands[4] = GEN_INT (low);
28383     }")
28384
28385 Here the predicate 'non_add_cint_operand' matches any 'const_int' that
28386is _not_ a valid operand of a single add insn.  The add with the smaller
28387displacement is written so that it can be substituted into the address
28388of a subsequent operation.
28389
28390 An example that uses a scratch register, from the same file, generates
28391an equality comparison of a register and a large constant:
28392
28393     (define_split
28394       [(set (match_operand:CC 0 "cc_reg_operand" "")
28395             (compare:CC (match_operand:SI 1 "gen_reg_operand" "")
28396                         (match_operand:SI 2 "non_short_cint_operand" "")))
28397        (clobber (match_operand:SI 3 "gen_reg_operand" ""))]
28398       "find_single_use (operands[0], insn, 0)
28399        && (GET_CODE (*find_single_use (operands[0], insn, 0)) == EQ
28400            || GET_CODE (*find_single_use (operands[0], insn, 0)) == NE)"
28401       [(set (match_dup 3) (xor:SI (match_dup 1) (match_dup 4)))
28402        (set (match_dup 0) (compare:CC (match_dup 3) (match_dup 5)))]
28403       "
28404     {
28405       /* Get the constant we are comparing against, C, and see what it
28406          looks like sign-extended to 16 bits.  Then see what constant
28407          could be XOR'ed with C to get the sign-extended value.  */
28408
28409       int c = INTVAL (operands[2]);
28410       int sextc = (c << 16) >> 16;
28411       int xorv = c ^ sextc;
28412
28413       operands[4] = GEN_INT (xorv);
28414       operands[5] = GEN_INT (sextc);
28415     }")
28416
28417 To avoid confusion, don't write a single 'define_split' that accepts
28418some insns that match some 'define_insn' as well as some insns that
28419don't.  Instead, write two separate 'define_split' definitions, one for
28420the insns that are valid and one for the insns that are not valid.
28421
28422 The splitter is allowed to split jump instructions into sequence of
28423jumps or create new jumps in while splitting non-jump instructions.  As
28424the control flow graph and branch prediction information needs to be
28425updated, several restriction apply.
28426
28427 Splitting of jump instruction into sequence that over by another jump
28428instruction is always valid, as compiler expect identical behavior of
28429new jump.  When new sequence contains multiple jump instructions or new
28430labels, more assistance is needed.  Splitter is required to create only
28431unconditional jumps, or simple conditional jump instructions.
28432Additionally it must attach a 'REG_BR_PROB' note to each conditional
28433jump.  A global variable 'split_branch_probability' holds the
28434probability of the original branch in case it was a simple conditional
28435jump, -1 otherwise.  To simplify recomputing of edge frequencies, the
28436new sequence is required to have only forward jumps to the newly created
28437labels.
28438
28439 For the common case where the pattern of a define_split exactly matches
28440the pattern of a define_insn, use 'define_insn_and_split'.  It looks
28441like this:
28442
28443     (define_insn_and_split
28444       [INSN-PATTERN]
28445       "CONDITION"
28446       "OUTPUT-TEMPLATE"
28447       "SPLIT-CONDITION"
28448       [NEW-INSN-PATTERN-1
28449        NEW-INSN-PATTERN-2
28450        ...]
28451       "PREPARATION-STATEMENTS"
28452       [INSN-ATTRIBUTES])
28453
28454 INSN-PATTERN, CONDITION, OUTPUT-TEMPLATE, and INSN-ATTRIBUTES are used
28455as in 'define_insn'.  The NEW-INSN-PATTERN vector and the
28456PREPARATION-STATEMENTS are used as in a 'define_split'.  The
28457SPLIT-CONDITION is also used as in 'define_split', with the additional
28458behavior that if the condition starts with '&&', the condition used for
28459the split will be the constructed as a logical "and" of the split
28460condition with the insn condition.  For example, from i386.md:
28461
28462     (define_insn_and_split "zero_extendhisi2_and"
28463       [(set (match_operand:SI 0 "register_operand" "=r")
28464          (zero_extend:SI (match_operand:HI 1 "register_operand" "0")))
28465        (clobber (reg:CC 17))]
28466       "TARGET_ZERO_EXTEND_WITH_AND && !optimize_size"
28467       "#"
28468       "&& reload_completed"
28469       [(parallel [(set (match_dup 0)
28470                        (and:SI (match_dup 0) (const_int 65535)))
28471                   (clobber (reg:CC 17))])]
28472       ""
28473       [(set_attr "type" "alu1")])
28474
28475 In this case, the actual split condition will be
28476'TARGET_ZERO_EXTEND_WITH_AND && !optimize_size && reload_completed'.
28477
28478 The 'define_insn_and_split' construction provides exactly the same
28479functionality as two separate 'define_insn' and 'define_split' patterns.
28480It exists for compactness, and as a maintenance tool to prevent having
28481to ensure the two patterns' templates match.
28482
28483 It is sometimes useful to have a 'define_insn_and_split' that replaces
28484specific operands of an instruction but leaves the rest of the
28485instruction pattern unchanged.  You can do this directly with a
28486'define_insn_and_split', but it requires a NEW-INSN-PATTERN-1 that
28487repeats most of the original INSN-PATTERN.  There is also the
28488complication that an implicit 'parallel' in INSN-PATTERN must become an
28489explicit 'parallel' in NEW-INSN-PATTERN-1, which is easy to overlook.  A
28490simpler alternative is to use 'define_insn_and_rewrite', which is a form
28491of 'define_insn_and_split' that automatically generates
28492NEW-INSN-PATTERN-1 by replacing each 'match_operand' in INSN-PATTERN
28493with a corresponding 'match_dup', and each 'match_operator' in the
28494pattern with a corresponding 'match_op_dup'.  The arguments are
28495otherwise identical to 'define_insn_and_split':
28496
28497     (define_insn_and_rewrite
28498       [INSN-PATTERN]
28499       "CONDITION"
28500       "OUTPUT-TEMPLATE"
28501       "SPLIT-CONDITION"
28502       "PREPARATION-STATEMENTS"
28503       [INSN-ATTRIBUTES])
28504
28505 The 'match_dup's and 'match_op_dup's in the new instruction pattern use
28506any new operand values that the PREPARATION-STATEMENTS store in the
28507'operands' array, as for a normal 'define_insn_and_split'.
28508PREPARATION-STATEMENTS can also emit additional instructions before the
28509new instruction.  They can even emit an entirely different sequence of
28510instructions and use 'DONE' to avoid emitting a new form of the original
28511instruction.
28512
28513 The split in a 'define_insn_and_rewrite' is only intended to apply to
28514existing instructions that match INSN-PATTERN.  SPLIT-CONDITION must
28515therefore start with '&&', so that the split condition applies on top of
28516CONDITION.
28517
28518 Here is an example from the AArch64 SVE port, in which operand 1 is
28519known to be equivalent to an all-true constant and isn't used by the
28520output template:
28521
28522     (define_insn_and_rewrite "*while_ult<GPI:mode><PRED_ALL:mode>_cc"
28523       [(set (reg:CC CC_REGNUM)
28524             (compare:CC
28525               (unspec:SI [(match_operand:PRED_ALL 1)
28526                           (unspec:PRED_ALL
28527                             [(match_operand:GPI 2 "aarch64_reg_or_zero" "rZ")
28528                              (match_operand:GPI 3 "aarch64_reg_or_zero" "rZ")]
28529                             UNSPEC_WHILE_LO)]
28530                          UNSPEC_PTEST_PTRUE)
28531               (const_int 0)))
28532        (set (match_operand:PRED_ALL 0 "register_operand" "=Upa")
28533             (unspec:PRED_ALL [(match_dup 2)
28534                               (match_dup 3)]
28535                              UNSPEC_WHILE_LO))]
28536       "TARGET_SVE"
28537       "whilelo\t%0.<PRED_ALL:Vetype>, %<w>2, %<w>3"
28538       ;; Force the compiler to drop the unused predicate operand, so that we
28539       ;; don't have an unnecessary PTRUE.
28540       "&& !CONSTANT_P (operands[1])"
28541       {
28542         operands[1] = CONSTM1_RTX (<MODE>mode);
28543       }
28544     )
28545
28546 The splitter in this case simply replaces operand 1 with the constant
28547value that it is known to have.  The equivalent 'define_insn_and_split'
28548would be:
28549
28550     (define_insn_and_split "*while_ult<GPI:mode><PRED_ALL:mode>_cc"
28551       [(set (reg:CC CC_REGNUM)
28552             (compare:CC
28553               (unspec:SI [(match_operand:PRED_ALL 1)
28554                           (unspec:PRED_ALL
28555                             [(match_operand:GPI 2 "aarch64_reg_or_zero" "rZ")
28556                              (match_operand:GPI 3 "aarch64_reg_or_zero" "rZ")]
28557                             UNSPEC_WHILE_LO)]
28558                          UNSPEC_PTEST_PTRUE)
28559               (const_int 0)))
28560        (set (match_operand:PRED_ALL 0 "register_operand" "=Upa")
28561             (unspec:PRED_ALL [(match_dup 2)
28562                               (match_dup 3)]
28563                              UNSPEC_WHILE_LO))]
28564       "TARGET_SVE"
28565       "whilelo\t%0.<PRED_ALL:Vetype>, %<w>2, %<w>3"
28566       ;; Force the compiler to drop the unused predicate operand, so that we
28567       ;; don't have an unnecessary PTRUE.
28568       "&& !CONSTANT_P (operands[1])"
28569       [(parallel
28570          [(set (reg:CC CC_REGNUM)
28571                (compare:CC
28572                  (unspec:SI [(match_dup 1)
28573                              (unspec:PRED_ALL [(match_dup 2)
28574                                                (match_dup 3)]
28575                                               UNSPEC_WHILE_LO)]
28576                             UNSPEC_PTEST_PTRUE)
28577                  (const_int 0)))
28578           (set (match_dup 0)
28579                (unspec:PRED_ALL [(match_dup 2)
28580                                  (match_dup 3)]
28581                                 UNSPEC_WHILE_LO))])]
28582       {
28583         operands[1] = CONSTM1_RTX (<MODE>mode);
28584       }
28585     )
28586
28587
28588File: gccint.info,  Node: Including Patterns,  Next: Peephole Definitions,  Prev: Insn Splitting,  Up: Machine Desc
28589
2859017.17 Including Patterns in Machine Descriptions.
28591=================================================
28592
28593The 'include' pattern tells the compiler tools where to look for
28594patterns that are in files other than in the file '.md'.  This is used
28595only at build time and there is no preprocessing allowed.
28596
28597 It looks like:
28598
28599
28600     (include
28601       PATHNAME)
28602
28603 For example:
28604
28605
28606     (include "filestuff")
28607
28608 Where PATHNAME is a string that specifies the location of the file,
28609specifies the include file to be in 'gcc/config/target/filestuff'.  The
28610directory 'gcc/config/target' is regarded as the default directory.
28611
28612 Machine descriptions may be split up into smaller more manageable
28613subsections and placed into subdirectories.
28614
28615 By specifying:
28616
28617
28618     (include "BOGUS/filestuff")
28619
28620 the include file is specified to be in
28621'gcc/config/TARGET/BOGUS/filestuff'.
28622
28623 Specifying an absolute path for the include file such as;
28624
28625     (include "/u2/BOGUS/filestuff")
28626
28627 is permitted but is not encouraged.
28628
2862917.17.1 RTL Generation Tool Options for Directory Search
28630--------------------------------------------------------
28631
28632The '-IDIR' option specifies directories to search for machine
28633descriptions.  For example:
28634
28635
28636     genrecog -I/p1/abc/proc1 -I/p2/abcd/pro2 target.md
28637
28638 Add the directory DIR to the head of the list of directories to be
28639searched for header files.  This can be used to override a system
28640machine definition file, substituting your own version, since these
28641directories are searched before the default machine description file
28642directories.  If you use more than one '-I' option, the directories are
28643scanned in left-to-right order; the standard default directory come
28644after.
28645
28646
28647File: gccint.info,  Node: Peephole Definitions,  Next: Insn Attributes,  Prev: Including Patterns,  Up: Machine Desc
28648
2864917.18 Machine-Specific Peephole Optimizers
28650==========================================
28651
28652In addition to instruction patterns the 'md' file may contain
28653definitions of machine-specific peephole optimizations.
28654
28655 The combiner does not notice certain peephole optimizations when the
28656data flow in the program does not suggest that it should try them.  For
28657example, sometimes two consecutive insns related in purpose can be
28658combined even though the second one does not appear to use a register
28659computed in the first one.  A machine-specific peephole optimizer can
28660detect such opportunities.
28661
28662 There are two forms of peephole definitions that may be used.  The
28663original 'define_peephole' is run at assembly output time to match insns
28664and substitute assembly text.  Use of 'define_peephole' is deprecated.
28665
28666 A newer 'define_peephole2' matches insns and substitutes new insns.
28667The 'peephole2' pass is run after register allocation but before
28668scheduling, which may result in much better code for targets that do
28669scheduling.
28670
28671* Menu:
28672
28673* define_peephole::     RTL to Text Peephole Optimizers
28674* define_peephole2::    RTL to RTL Peephole Optimizers
28675
28676
28677File: gccint.info,  Node: define_peephole,  Next: define_peephole2,  Up: Peephole Definitions
28678
2867917.18.1 RTL to Text Peephole Optimizers
28680---------------------------------------
28681
28682A definition looks like this:
28683
28684     (define_peephole
28685       [INSN-PATTERN-1
28686        INSN-PATTERN-2
28687        ...]
28688       "CONDITION"
28689       "TEMPLATE"
28690       "OPTIONAL-INSN-ATTRIBUTES")
28691
28692The last string operand may be omitted if you are not using any
28693machine-specific information in this machine description.  If present,
28694it must obey the same rules as in a 'define_insn'.
28695
28696 In this skeleton, INSN-PATTERN-1 and so on are patterns to match
28697consecutive insns.  The optimization applies to a sequence of insns when
28698INSN-PATTERN-1 matches the first one, INSN-PATTERN-2 matches the next,
28699and so on.
28700
28701 Each of the insns matched by a peephole must also match a
28702'define_insn'.  Peepholes are checked only at the last stage just before
28703code generation, and only optionally.  Therefore, any insn which would
28704match a peephole but no 'define_insn' will cause a crash in code
28705generation in an unoptimized compilation, or at various optimization
28706stages.
28707
28708 The operands of the insns are matched with 'match_operands',
28709'match_operator', and 'match_dup', as usual.  What is not usual is that
28710the operand numbers apply to all the insn patterns in the definition.
28711So, you can check for identical operands in two insns by using
28712'match_operand' in one insn and 'match_dup' in the other.
28713
28714 The operand constraints used in 'match_operand' patterns do not have
28715any direct effect on the applicability of the peephole, but they will be
28716validated afterward, so make sure your constraints are general enough to
28717apply whenever the peephole matches.  If the peephole matches but the
28718constraints are not satisfied, the compiler will crash.
28719
28720 It is safe to omit constraints in all the operands of the peephole; or
28721you can write constraints which serve as a double-check on the criteria
28722previously tested.
28723
28724 Once a sequence of insns matches the patterns, the CONDITION is
28725checked.  This is a C expression which makes the final decision whether
28726to perform the optimization (we do so if the expression is nonzero).  If
28727CONDITION is omitted (in other words, the string is empty) then the
28728optimization is applied to every sequence of insns that matches the
28729patterns.
28730
28731 The defined peephole optimizations are applied after register
28732allocation is complete.  Therefore, the peephole definition can check
28733which operands have ended up in which kinds of registers, just by
28734looking at the operands.
28735
28736 The way to refer to the operands in CONDITION is to write 'operands[I]'
28737for operand number I (as matched by '(match_operand I ...)').  Use the
28738variable 'insn' to refer to the last of the insns being matched; use
28739'prev_active_insn' to find the preceding insns.
28740
28741 When optimizing computations with intermediate results, you can use
28742CONDITION to match only when the intermediate results are not used
28743elsewhere.  Use the C expression 'dead_or_set_p (INSN, OP)', where INSN
28744is the insn in which you expect the value to be used for the last time
28745(from the value of 'insn', together with use of 'prev_nonnote_insn'),
28746and OP is the intermediate value (from 'operands[I]').
28747
28748 Applying the optimization means replacing the sequence of insns with
28749one new insn.  The TEMPLATE controls ultimate output of assembler code
28750for this combined insn.  It works exactly like the template of a
28751'define_insn'.  Operand numbers in this template are the same ones used
28752in matching the original sequence of insns.
28753
28754 The result of a defined peephole optimizer does not need to match any
28755of the insn patterns in the machine description; it does not even have
28756an opportunity to match them.  The peephole optimizer definition itself
28757serves as the insn pattern to control how the insn is output.
28758
28759 Defined peephole optimizers are run as assembler code is being output,
28760so the insns they produce are never combined or rearranged in any way.
28761
28762 Here is an example, taken from the 68000 machine description:
28763
28764     (define_peephole
28765       [(set (reg:SI 15) (plus:SI (reg:SI 15) (const_int 4)))
28766        (set (match_operand:DF 0 "register_operand" "=f")
28767             (match_operand:DF 1 "register_operand" "ad"))]
28768       "FP_REG_P (operands[0]) && ! FP_REG_P (operands[1])"
28769     {
28770       rtx xoperands[2];
28771       xoperands[1] = gen_rtx_REG (SImode, REGNO (operands[1]) + 1);
28772     #ifdef MOTOROLA
28773       output_asm_insn ("move.l %1,(sp)", xoperands);
28774       output_asm_insn ("move.l %1,-(sp)", operands);
28775       return "fmove.d (sp)+,%0";
28776     #else
28777       output_asm_insn ("movel %1,sp@", xoperands);
28778       output_asm_insn ("movel %1,sp@-", operands);
28779       return "fmoved sp@+,%0";
28780     #endif
28781     })
28782
28783 The effect of this optimization is to change
28784
28785     jbsr _foobar
28786     addql #4,sp
28787     movel d1,sp@-
28788     movel d0,sp@-
28789     fmoved sp@+,fp0
28790
28791into
28792
28793     jbsr _foobar
28794     movel d1,sp@
28795     movel d0,sp@-
28796     fmoved sp@+,fp0
28797
28798 INSN-PATTERN-1 and so on look _almost_ like the second operand of
28799'define_insn'.  There is one important difference: the second operand of
28800'define_insn' consists of one or more RTX's enclosed in square brackets.
28801Usually, there is only one: then the same action can be written as an
28802element of a 'define_peephole'.  But when there are multiple actions in
28803a 'define_insn', they are implicitly enclosed in a 'parallel'.  Then you
28804must explicitly write the 'parallel', and the square brackets within it,
28805in the 'define_peephole'.  Thus, if an insn pattern looks like this,
28806
28807     (define_insn "divmodsi4"
28808       [(set (match_operand:SI 0 "general_operand" "=d")
28809             (div:SI (match_operand:SI 1 "general_operand" "0")
28810                     (match_operand:SI 2 "general_operand" "dmsK")))
28811        (set (match_operand:SI 3 "general_operand" "=d")
28812             (mod:SI (match_dup 1) (match_dup 2)))]
28813       "TARGET_68020"
28814       "divsl%.l %2,%3:%0")
28815
28816then the way to mention this insn in a peephole is as follows:
28817
28818     (define_peephole
28819       [...
28820        (parallel
28821         [(set (match_operand:SI 0 "general_operand" "=d")
28822               (div:SI (match_operand:SI 1 "general_operand" "0")
28823                       (match_operand:SI 2 "general_operand" "dmsK")))
28824          (set (match_operand:SI 3 "general_operand" "=d")
28825               (mod:SI (match_dup 1) (match_dup 2)))])
28826        ...]
28827       ...)
28828
28829
28830File: gccint.info,  Node: define_peephole2,  Prev: define_peephole,  Up: Peephole Definitions
28831
2883217.18.2 RTL to RTL Peephole Optimizers
28833--------------------------------------
28834
28835The 'define_peephole2' definition tells the compiler how to substitute
28836one sequence of instructions for another sequence, what additional
28837scratch registers may be needed and what their lifetimes must be.
28838
28839     (define_peephole2
28840       [INSN-PATTERN-1
28841        INSN-PATTERN-2
28842        ...]
28843       "CONDITION"
28844       [NEW-INSN-PATTERN-1
28845        NEW-INSN-PATTERN-2
28846        ...]
28847       "PREPARATION-STATEMENTS")
28848
28849 The definition is almost identical to 'define_split' (*note Insn
28850Splitting::) except that the pattern to match is not a single
28851instruction, but a sequence of instructions.
28852
28853 It is possible to request additional scratch registers for use in the
28854output template.  If appropriate registers are not free, the pattern
28855will simply not match.
28856
28857 Scratch registers are requested with a 'match_scratch' pattern at the
28858top level of the input pattern.  The allocated register (initially) will
28859be dead at the point requested within the original sequence.  If the
28860scratch is used at more than a single point, a 'match_dup' pattern at
28861the top level of the input pattern marks the last position in the input
28862sequence at which the register must be available.
28863
28864 Here is an example from the IA-32 machine description:
28865
28866     (define_peephole2
28867       [(match_scratch:SI 2 "r")
28868        (parallel [(set (match_operand:SI 0 "register_operand" "")
28869                        (match_operator:SI 3 "arith_or_logical_operator"
28870                          [(match_dup 0)
28871                           (match_operand:SI 1 "memory_operand" "")]))
28872                   (clobber (reg:CC 17))])]
28873       "! optimize_size && ! TARGET_READ_MODIFY"
28874       [(set (match_dup 2) (match_dup 1))
28875        (parallel [(set (match_dup 0)
28876                        (match_op_dup 3 [(match_dup 0) (match_dup 2)]))
28877                   (clobber (reg:CC 17))])]
28878       "")
28879
28880This pattern tries to split a load from its use in the hopes that we'll
28881be able to schedule around the memory load latency.  It allocates a
28882single 'SImode' register of class 'GENERAL_REGS' ('"r"') that needs to
28883be live only at the point just before the arithmetic.
28884
28885 A real example requiring extended scratch lifetimes is harder to come
28886by, so here's a silly made-up example:
28887
28888     (define_peephole2
28889       [(match_scratch:SI 4 "r")
28890        (set (match_operand:SI 0 "" "") (match_operand:SI 1 "" ""))
28891        (set (match_operand:SI 2 "" "") (match_dup 1))
28892        (match_dup 4)
28893        (set (match_operand:SI 3 "" "") (match_dup 1))]
28894       "/* determine 1 does not overlap 0 and 2 */"
28895       [(set (match_dup 4) (match_dup 1))
28896        (set (match_dup 0) (match_dup 4))
28897        (set (match_dup 2) (match_dup 4))
28898        (set (match_dup 3) (match_dup 4))]
28899       "")
28900
28901 There are two special macros defined for use in the preparation
28902statements: 'DONE' and 'FAIL'.  Use them with a following semicolon, as
28903a statement.
28904
28905'DONE'
28906     Use the 'DONE' macro to end RTL generation for the peephole.  The
28907     only RTL insns generated as replacement for the matched input insn
28908     will be those already emitted by explicit calls to 'emit_insn'
28909     within the preparation statements; the replacement pattern is not
28910     used.
28911
28912'FAIL'
28913     Make the 'define_peephole2' fail on this occasion.  When a
28914     'define_peephole2' fails, it means that the replacement was not
28915     truly available for the particular inputs it was given.  In that
28916     case, GCC may still apply a later 'define_peephole2' that also
28917     matches the given insn pattern.  (Note that this is different from
28918     'define_split', where 'FAIL' prevents the input insn from being
28919     split at all.)
28920
28921 If the preparation falls through (invokes neither 'DONE' nor 'FAIL'),
28922then the 'define_peephole2' uses the replacement template.
28923
28924If we had not added the '(match_dup 4)' in the middle of the input
28925sequence, it might have been the case that the register we chose at the
28926beginning of the sequence is killed by the first or second 'set'.
28927
28928
28929File: gccint.info,  Node: Insn Attributes,  Next: Conditional Execution,  Prev: Peephole Definitions,  Up: Machine Desc
28930
2893117.19 Instruction Attributes
28932============================
28933
28934In addition to describing the instruction supported by the target
28935machine, the 'md' file also defines a group of "attributes" and a set of
28936values for each.  Every generated insn is assigned a value for each
28937attribute.  One possible attribute would be the effect that the insn has
28938on the machine's condition code.  This attribute can then be used by
28939'NOTICE_UPDATE_CC' to track the condition codes.
28940
28941* Menu:
28942
28943* Defining Attributes:: Specifying attributes and their values.
28944* Expressions::         Valid expressions for attribute values.
28945* Tagging Insns::       Assigning attribute values to insns.
28946* Attr Example::        An example of assigning attributes.
28947* Insn Lengths::        Computing the length of insns.
28948* Constant Attributes:: Defining attributes that are constant.
28949* Mnemonic Attribute::  Obtain the instruction mnemonic as attribute value.
28950* Delay Slots::         Defining delay slots required for a machine.
28951* Processor pipeline description:: Specifying information for insn scheduling.
28952
28953
28954File: gccint.info,  Node: Defining Attributes,  Next: Expressions,  Up: Insn Attributes
28955
2895617.19.1 Defining Attributes and their Values
28957--------------------------------------------
28958
28959The 'define_attr' expression is used to define each attribute required
28960by the target machine.  It looks like:
28961
28962     (define_attr NAME LIST-OF-VALUES DEFAULT)
28963
28964 NAME is a string specifying the name of the attribute being defined.
28965Some attributes are used in a special way by the rest of the compiler.
28966The 'enabled' attribute can be used to conditionally enable or disable
28967insn alternatives (*note Disable Insn Alternatives::).  The 'predicable'
28968attribute, together with a suitable 'define_cond_exec' (*note
28969Conditional Execution::), can be used to automatically generate
28970conditional variants of instruction patterns.  The 'mnemonic' attribute
28971can be used to check for the instruction mnemonic (*note Mnemonic
28972Attribute::).  The compiler internally uses the names 'ce_enabled' and
28973'nonce_enabled', so they should not be used elsewhere as alternative
28974names.
28975
28976 LIST-OF-VALUES is either a string that specifies a comma-separated list
28977of values that can be assigned to the attribute, or a null string to
28978indicate that the attribute takes numeric values.
28979
28980 DEFAULT is an attribute expression that gives the value of this
28981attribute for insns that match patterns whose definition does not
28982include an explicit value for this attribute.  *Note Attr Example::, for
28983more information on the handling of defaults.  *Note Constant
28984Attributes::, for information on attributes that do not depend on any
28985particular insn.
28986
28987 For each defined attribute, a number of definitions are written to the
28988'insn-attr.h' file.  For cases where an explicit set of values is
28989specified for an attribute, the following are defined:
28990
28991   * A '#define' is written for the symbol 'HAVE_ATTR_NAME'.
28992
28993   * An enumerated class is defined for 'attr_NAME' with elements of the
28994     form 'UPPER-NAME_UPPER-VALUE' where the attribute name and value
28995     are first converted to uppercase.
28996
28997   * A function 'get_attr_NAME' is defined that is passed an insn and
28998     returns the attribute value for that insn.
28999
29000 For example, if the following is present in the 'md' file:
29001
29002     (define_attr "type" "branch,fp,load,store,arith" ...)
29003
29004the following lines will be written to the file 'insn-attr.h'.
29005
29006     #define HAVE_ATTR_type 1
29007     enum attr_type {TYPE_BRANCH, TYPE_FP, TYPE_LOAD,
29008                      TYPE_STORE, TYPE_ARITH};
29009     extern enum attr_type get_attr_type ();
29010
29011 If the attribute takes numeric values, no 'enum' type will be defined
29012and the function to obtain the attribute's value will return 'int'.
29013
29014 There are attributes which are tied to a specific meaning.  These
29015attributes are not free to use for other purposes:
29016
29017'length'
29018     The 'length' attribute is used to calculate the length of emitted
29019     code chunks.  This is especially important when verifying branch
29020     distances.  *Note Insn Lengths::.
29021
29022'enabled'
29023     The 'enabled' attribute can be defined to prevent certain
29024     alternatives of an insn definition from being used during code
29025     generation.  *Note Disable Insn Alternatives::.
29026
29027'mnemonic'
29028     The 'mnemonic' attribute can be defined to implement instruction
29029     specific checks in e.g. the pipeline description.  *Note Mnemonic
29030     Attribute::.
29031
29032 For each of these special attributes, the corresponding
29033'HAVE_ATTR_NAME' '#define' is also written when the attribute is not
29034defined; in that case, it is defined as '0'.
29035
29036 Another way of defining an attribute is to use:
29037
29038     (define_enum_attr "ATTR" "ENUM" DEFAULT)
29039
29040 This works in just the same way as 'define_attr', except that the list
29041of values is taken from a separate enumeration called ENUM (*note
29042define_enum::).  This form allows you to use the same list of values for
29043several attributes without having to repeat the list each time.  For
29044example:
29045
29046     (define_enum "processor" [
29047       model_a
29048       model_b
29049       ...
29050     ])
29051     (define_enum_attr "arch" "processor"
29052       (const (symbol_ref "target_arch")))
29053     (define_enum_attr "tune" "processor"
29054       (const (symbol_ref "target_tune")))
29055
29056 defines the same attributes as:
29057
29058     (define_attr "arch" "model_a,model_b,..."
29059       (const (symbol_ref "target_arch")))
29060     (define_attr "tune" "model_a,model_b,..."
29061       (const (symbol_ref "target_tune")))
29062
29063 but without duplicating the processor list.  The second example defines
29064two separate C enums ('attr_arch' and 'attr_tune') whereas the first
29065defines a single C enum ('processor').
29066
29067
29068File: gccint.info,  Node: Expressions,  Next: Tagging Insns,  Prev: Defining Attributes,  Up: Insn Attributes
29069
2907017.19.2 Attribute Expressions
29071-----------------------------
29072
29073RTL expressions used to define attributes use the codes described above
29074plus a few specific to attribute definitions, to be discussed below.
29075Attribute value expressions must have one of the following forms:
29076
29077'(const_int I)'
29078     The integer I specifies the value of a numeric attribute.  I must
29079     be non-negative.
29080
29081     The value of a numeric attribute can be specified either with a
29082     'const_int', or as an integer represented as a string in
29083     'const_string', 'eq_attr' (see below), 'attr', 'symbol_ref', simple
29084     arithmetic expressions, and 'set_attr' overrides on specific
29085     instructions (*note Tagging Insns::).
29086
29087'(const_string VALUE)'
29088     The string VALUE specifies a constant attribute value.  If VALUE is
29089     specified as '"*"', it means that the default value of the
29090     attribute is to be used for the insn containing this expression.
29091     '"*"' obviously cannot be used in the DEFAULT expression of a
29092     'define_attr'.
29093
29094     If the attribute whose value is being specified is numeric, VALUE
29095     must be a string containing a non-negative integer (normally
29096     'const_int' would be used in this case).  Otherwise, it must
29097     contain one of the valid values for the attribute.
29098
29099'(if_then_else TEST TRUE-VALUE FALSE-VALUE)'
29100     TEST specifies an attribute test, whose format is defined below.
29101     The value of this expression is TRUE-VALUE if TEST is true,
29102     otherwise it is FALSE-VALUE.
29103
29104'(cond [TEST1 VALUE1 ...] DEFAULT)'
29105     The first operand of this expression is a vector containing an even
29106     number of expressions and consisting of pairs of TEST and VALUE
29107     expressions.  The value of the 'cond' expression is that of the
29108     VALUE corresponding to the first true TEST expression.  If none of
29109     the TEST expressions are true, the value of the 'cond' expression
29110     is that of the DEFAULT expression.
29111
29112 TEST expressions can have one of the following forms:
29113
29114'(const_int I)'
29115     This test is true if I is nonzero and false otherwise.
29116
29117'(not TEST)'
29118'(ior TEST1 TEST2)'
29119'(and TEST1 TEST2)'
29120     These tests are true if the indicated logical function is true.
29121
29122'(match_operand:M N PRED CONSTRAINTS)'
29123     This test is true if operand N of the insn whose attribute value is
29124     being determined has mode M (this part of the test is ignored if M
29125     is 'VOIDmode') and the function specified by the string PRED
29126     returns a nonzero value when passed operand N and mode M (this part
29127     of the test is ignored if PRED is the null string).
29128
29129     The CONSTRAINTS operand is ignored and should be the null string.
29130
29131'(match_test C-EXPR)'
29132     The test is true if C expression C-EXPR is true.  In non-constant
29133     attributes, C-EXPR has access to the following variables:
29134
29135     INSN
29136          The rtl instruction under test.
29137     WHICH_ALTERNATIVE
29138          The 'define_insn' alternative that INSN matches.  *Note Output
29139          Statement::.
29140     OPERANDS
29141          An array of INSN's rtl operands.
29142
29143     C-EXPR behaves like the condition in a C 'if' statement, so there
29144     is no need to explicitly convert the expression into a boolean 0 or
29145     1 value.  For example, the following two tests are equivalent:
29146
29147          (match_test "x & 2")
29148          (match_test "(x & 2) != 0")
29149
29150'(le ARITH1 ARITH2)'
29151'(leu ARITH1 ARITH2)'
29152'(lt ARITH1 ARITH2)'
29153'(ltu ARITH1 ARITH2)'
29154'(gt ARITH1 ARITH2)'
29155'(gtu ARITH1 ARITH2)'
29156'(ge ARITH1 ARITH2)'
29157'(geu ARITH1 ARITH2)'
29158'(ne ARITH1 ARITH2)'
29159'(eq ARITH1 ARITH2)'
29160     These tests are true if the indicated comparison of the two
29161     arithmetic expressions is true.  Arithmetic expressions are formed
29162     with 'plus', 'minus', 'mult', 'div', 'mod', 'abs', 'neg', 'and',
29163     'ior', 'xor', 'not', 'ashift', 'lshiftrt', and 'ashiftrt'
29164     expressions.
29165
29166     'const_int' and 'symbol_ref' are always valid terms (*note Insn
29167     Lengths::,for additional forms).  'symbol_ref' is a string denoting
29168     a C expression that yields an 'int' when evaluated by the
29169     'get_attr_...' routine.  It should normally be a global variable.
29170
29171'(eq_attr NAME VALUE)'
29172     NAME is a string specifying the name of an attribute.
29173
29174     VALUE is a string that is either a valid value for attribute NAME,
29175     a comma-separated list of values, or '!' followed by a value or
29176     list.  If VALUE does not begin with a '!', this test is true if the
29177     value of the NAME attribute of the current insn is in the list
29178     specified by VALUE.  If VALUE begins with a '!', this test is true
29179     if the attribute's value is _not_ in the specified list.
29180
29181     For example,
29182
29183          (eq_attr "type" "load,store")
29184
29185     is equivalent to
29186
29187          (ior (eq_attr "type" "load") (eq_attr "type" "store"))
29188
29189     If NAME specifies an attribute of 'alternative', it refers to the
29190     value of the compiler variable 'which_alternative' (*note Output
29191     Statement::) and the values must be small integers.  For example,
29192
29193          (eq_attr "alternative" "2,3")
29194
29195     is equivalent to
29196
29197          (ior (eq (symbol_ref "which_alternative") (const_int 2))
29198               (eq (symbol_ref "which_alternative") (const_int 3)))
29199
29200     Note that, for most attributes, an 'eq_attr' test is simplified in
29201     cases where the value of the attribute being tested is known for
29202     all insns matching a particular pattern.  This is by far the most
29203     common case.
29204
29205'(attr_flag NAME)'
29206     The value of an 'attr_flag' expression is true if the flag
29207     specified by NAME is true for the 'insn' currently being scheduled.
29208
29209     NAME is a string specifying one of a fixed set of flags to test.
29210     Test the flags 'forward' and 'backward' to determine the direction
29211     of a conditional branch.
29212
29213     This example describes a conditional branch delay slot which can be
29214     nullified for forward branches that are taken (annul-true) or for
29215     backward branches which are not taken (annul-false).
29216
29217          (define_delay (eq_attr "type" "cbranch")
29218            [(eq_attr "in_branch_delay" "true")
29219             (and (eq_attr "in_branch_delay" "true")
29220                  (attr_flag "forward"))
29221             (and (eq_attr "in_branch_delay" "true")
29222                  (attr_flag "backward"))])
29223
29224     The 'forward' and 'backward' flags are false if the current 'insn'
29225     being scheduled is not a conditional branch.
29226
29227     'attr_flag' is only used during delay slot scheduling and has no
29228     meaning to other passes of the compiler.
29229
29230'(attr NAME)'
29231     The value of another attribute is returned.  This is most useful
29232     for numeric attributes, as 'eq_attr' and 'attr_flag' produce more
29233     efficient code for non-numeric attributes.
29234
29235
29236File: gccint.info,  Node: Tagging Insns,  Next: Attr Example,  Prev: Expressions,  Up: Insn Attributes
29237
2923817.19.3 Assigning Attribute Values to Insns
29239-------------------------------------------
29240
29241The value assigned to an attribute of an insn is primarily determined by
29242which pattern is matched by that insn (or which 'define_peephole'
29243generated it).  Every 'define_insn' and 'define_peephole' can have an
29244optional last argument to specify the values of attributes for matching
29245insns.  The value of any attribute not specified in a particular insn is
29246set to the default value for that attribute, as specified in its
29247'define_attr'.  Extensive use of default values for attributes permits
29248the specification of the values for only one or two attributes in the
29249definition of most insn patterns, as seen in the example in the next
29250section.
29251
29252 The optional last argument of 'define_insn' and 'define_peephole' is a
29253vector of expressions, each of which defines the value for a single
29254attribute.  The most general way of assigning an attribute's value is to
29255use a 'set' expression whose first operand is an 'attr' expression
29256giving the name of the attribute being set.  The second operand of the
29257'set' is an attribute expression (*note Expressions::) giving the value
29258of the attribute.
29259
29260 When the attribute value depends on the 'alternative' attribute (i.e.,
29261which is the applicable alternative in the constraint of the insn), the
29262'set_attr_alternative' expression can be used.  It allows the
29263specification of a vector of attribute expressions, one for each
29264alternative.
29265
29266 When the generality of arbitrary attribute expressions is not required,
29267the simpler 'set_attr' expression can be used, which allows specifying a
29268string giving either a single attribute value or a list of attribute
29269values, one for each alternative.
29270
29271 The form of each of the above specifications is shown below.  In each
29272case, NAME is a string specifying the attribute to be set.
29273
29274'(set_attr NAME VALUE-STRING)'
29275     VALUE-STRING is either a string giving the desired attribute value,
29276     or a string containing a comma-separated list giving the values for
29277     succeeding alternatives.  The number of elements must match the
29278     number of alternatives in the constraint of the insn pattern.
29279
29280     Note that it may be useful to specify '*' for some alternative, in
29281     which case the attribute will assume its default value for insns
29282     matching that alternative.
29283
29284'(set_attr_alternative NAME [VALUE1 VALUE2 ...])'
29285     Depending on the alternative of the insn, the value will be one of
29286     the specified values.  This is a shorthand for using a 'cond' with
29287     tests on the 'alternative' attribute.
29288
29289'(set (attr NAME) VALUE)'
29290     The first operand of this 'set' must be the special RTL expression
29291     'attr', whose sole operand is a string giving the name of the
29292     attribute being set.  VALUE is the value of the attribute.
29293
29294 The following shows three different ways of representing the same
29295attribute value specification:
29296
29297     (set_attr "type" "load,store,arith")
29298
29299     (set_attr_alternative "type"
29300                           [(const_string "load") (const_string "store")
29301                            (const_string "arith")])
29302
29303     (set (attr "type")
29304          (cond [(eq_attr "alternative" "1") (const_string "load")
29305                 (eq_attr "alternative" "2") (const_string "store")]
29306                (const_string "arith")))
29307
29308 The 'define_asm_attributes' expression provides a mechanism to specify
29309the attributes assigned to insns produced from an 'asm' statement.  It
29310has the form:
29311
29312     (define_asm_attributes [ATTR-SETS])
29313
29314where ATTR-SETS is specified the same as for both the 'define_insn' and
29315the 'define_peephole' expressions.
29316
29317 These values will typically be the "worst case" attribute values.  For
29318example, they might indicate that the condition code will be clobbered.
29319
29320 A specification for a 'length' attribute is handled specially.  The way
29321to compute the length of an 'asm' insn is to multiply the length
29322specified in the expression 'define_asm_attributes' by the number of
29323machine instructions specified in the 'asm' statement, determined by
29324counting the number of semicolons and newlines in the string.
29325Therefore, the value of the 'length' attribute specified in a
29326'define_asm_attributes' should be the maximum possible length of a
29327single machine instruction.
29328
29329
29330File: gccint.info,  Node: Attr Example,  Next: Insn Lengths,  Prev: Tagging Insns,  Up: Insn Attributes
29331
2933217.19.4 Example of Attribute Specifications
29333-------------------------------------------
29334
29335The judicious use of defaulting is important in the efficient use of
29336insn attributes.  Typically, insns are divided into "types" and an
29337attribute, customarily called 'type', is used to represent this value.
29338This attribute is normally used only to define the default value for
29339other attributes.  An example will clarify this usage.
29340
29341 Assume we have a RISC machine with a condition code and in which only
29342full-word operations are performed in registers.  Let us assume that we
29343can divide all insns into loads, stores, (integer) arithmetic
29344operations, floating point operations, and branches.
29345
29346 Here we will concern ourselves with determining the effect of an insn
29347on the condition code and will limit ourselves to the following possible
29348effects: The condition code can be set unpredictably (clobbered), not be
29349changed, be set to agree with the results of the operation, or only
29350changed if the item previously set into the condition code has been
29351modified.
29352
29353 Here is part of a sample 'md' file for such a machine:
29354
29355     (define_attr "type" "load,store,arith,fp,branch" (const_string "arith"))
29356
29357     (define_attr "cc" "clobber,unchanged,set,change0"
29358                  (cond [(eq_attr "type" "load")
29359                             (const_string "change0")
29360                         (eq_attr "type" "store,branch")
29361                             (const_string "unchanged")
29362                         (eq_attr "type" "arith")
29363                             (if_then_else (match_operand:SI 0 "" "")
29364                                           (const_string "set")
29365                                           (const_string "clobber"))]
29366                        (const_string "clobber")))
29367
29368     (define_insn ""
29369       [(set (match_operand:SI 0 "general_operand" "=r,r,m")
29370             (match_operand:SI 1 "general_operand" "r,m,r"))]
29371       ""
29372       "@
29373        move %0,%1
29374        load %0,%1
29375        store %0,%1"
29376       [(set_attr "type" "arith,load,store")])
29377
29378 Note that we assume in the above example that arithmetic operations
29379performed on quantities smaller than a machine word clobber the
29380condition code since they will set the condition code to a value
29381corresponding to the full-word result.
29382
29383
29384File: gccint.info,  Node: Insn Lengths,  Next: Constant Attributes,  Prev: Attr Example,  Up: Insn Attributes
29385
2938617.19.5 Computing the Length of an Insn
29387---------------------------------------
29388
29389For many machines, multiple types of branch instructions are provided,
29390each for different length branch displacements.  In most cases, the
29391assembler will choose the correct instruction to use.  However, when the
29392assembler cannot do so, GCC can when a special attribute, the 'length'
29393attribute, is defined.  This attribute must be defined to have numeric
29394values by specifying a null string in its 'define_attr'.
29395
29396 In the case of the 'length' attribute, two additional forms of
29397arithmetic terms are allowed in test expressions:
29398
29399'(match_dup N)'
29400     This refers to the address of operand N of the current insn, which
29401     must be a 'label_ref'.
29402
29403'(pc)'
29404     For non-branch instructions and backward branch instructions, this
29405     refers to the address of the current insn.  But for forward branch
29406     instructions, this refers to the address of the next insn, because
29407     the length of the current insn is to be computed.
29408
29409 For normal insns, the length will be determined by value of the
29410'length' attribute.  In the case of 'addr_vec' and 'addr_diff_vec' insn
29411patterns, the length is computed as the number of vectors multiplied by
29412the size of each vector.
29413
29414 Lengths are measured in addressable storage units (bytes).
29415
29416 Note that it is possible to call functions via the 'symbol_ref'
29417mechanism to compute the length of an insn.  However, if you use this
29418mechanism you must provide dummy clauses to express the maximum length
29419without using the function call.  You can an example of this in the 'pa'
29420machine description for the 'call_symref' pattern.
29421
29422 The following macros can be used to refine the length computation:
29423
29424'ADJUST_INSN_LENGTH (INSN, LENGTH)'
29425     If defined, modifies the length assigned to instruction INSN as a
29426     function of the context in which it is used.  LENGTH is an lvalue
29427     that contains the initially computed length of the insn and should
29428     be updated with the correct length of the insn.
29429
29430     This macro will normally not be required.  A case in which it is
29431     required is the ROMP.  On this machine, the size of an 'addr_vec'
29432     insn must be increased by two to compensate for the fact that
29433     alignment may be required.
29434
29435 The routine that returns 'get_attr_length' (the value of the 'length'
29436attribute) can be used by the output routine to determine the form of
29437the branch instruction to be written, as the example below illustrates.
29438
29439 As an example of the specification of variable-length branches,
29440consider the IBM 360.  If we adopt the convention that a register will
29441be set to the starting address of a function, we can jump to labels
29442within 4k of the start using a four-byte instruction.  Otherwise, we
29443need a six-byte sequence to load the address from memory and then branch
29444to it.
29445
29446 On such a machine, a pattern for a branch instruction might be
29447specified as follows:
29448
29449     (define_insn "jump"
29450       [(set (pc)
29451             (label_ref (match_operand 0 "" "")))]
29452       ""
29453     {
29454        return (get_attr_length (insn) == 4
29455                ? "b %l0" : "l r15,=a(%l0); br r15");
29456     }
29457       [(set (attr "length")
29458             (if_then_else (lt (match_dup 0) (const_int 4096))
29459                           (const_int 4)
29460                           (const_int 6)))])
29461
29462
29463File: gccint.info,  Node: Constant Attributes,  Next: Mnemonic Attribute,  Prev: Insn Lengths,  Up: Insn Attributes
29464
2946517.19.6 Constant Attributes
29466---------------------------
29467
29468A special form of 'define_attr', where the expression for the default
29469value is a 'const' expression, indicates an attribute that is constant
29470for a given run of the compiler.  Constant attributes may be used to
29471specify which variety of processor is used.  For example,
29472
29473     (define_attr "cpu" "m88100,m88110,m88000"
29474      (const
29475       (cond [(symbol_ref "TARGET_88100") (const_string "m88100")
29476              (symbol_ref "TARGET_88110") (const_string "m88110")]
29477             (const_string "m88000"))))
29478
29479     (define_attr "memory" "fast,slow"
29480      (const
29481       (if_then_else (symbol_ref "TARGET_FAST_MEM")
29482                     (const_string "fast")
29483                     (const_string "slow"))))
29484
29485 The routine generated for constant attributes has no parameters as it
29486does not depend on any particular insn.  RTL expressions used to define
29487the value of a constant attribute may use the 'symbol_ref' form, but may
29488not use either the 'match_operand' form or 'eq_attr' forms involving
29489insn attributes.
29490
29491
29492File: gccint.info,  Node: Mnemonic Attribute,  Next: Delay Slots,  Prev: Constant Attributes,  Up: Insn Attributes
29493
2949417.19.7 Mnemonic Attribute
29495--------------------------
29496
29497The 'mnemonic' attribute is a string type attribute holding the
29498instruction mnemonic for an insn alternative.  The attribute values will
29499automatically be generated by the machine description parser if there is
29500an attribute definition in the md file:
29501
29502     (define_attr "mnemonic" "unknown" (const_string "unknown"))
29503
29504 The default value can be freely chosen as long as it does not collide
29505with any of the instruction mnemonics.  This value will be used whenever
29506the machine description parser is not able to determine the mnemonic
29507string.  This might be the case for output templates containing more
29508than a single instruction as in '"mvcle\t%0,%1,0\;jo\t.-4"'.
29509
29510 The 'mnemonic' attribute set is not generated automatically if the
29511instruction string is generated via C code.
29512
29513 An existing 'mnemonic' attribute set in an insn definition will not be
29514overriden by the md file parser.  That way it is possible to manually
29515set the instruction mnemonics for the cases where the md file parser
29516fails to determine it automatically.
29517
29518 The 'mnemonic' attribute is useful for dealing with instruction
29519specific properties in the pipeline description without defining
29520additional insn attributes.
29521
29522     (define_attr "ooo_expanded" ""
29523       (cond [(eq_attr "mnemonic" "dlr,dsgr,d,dsgf,stam,dsgfr,dlgr")
29524              (const_int 1)]
29525             (const_int 0)))
29526
29527
29528File: gccint.info,  Node: Delay Slots,  Next: Processor pipeline description,  Prev: Mnemonic Attribute,  Up: Insn Attributes
29529
2953017.19.8 Delay Slot Scheduling
29531-----------------------------
29532
29533The insn attribute mechanism can be used to specify the requirements for
29534delay slots, if any, on a target machine.  An instruction is said to
29535require a "delay slot" if some instructions that are physically after
29536the instruction are executed as if they were located before it.  Classic
29537examples are branch and call instructions, which often execute the
29538following instruction before the branch or call is performed.
29539
29540 On some machines, conditional branch instructions can optionally
29541"annul" instructions in the delay slot.  This means that the instruction
29542will not be executed for certain branch outcomes.  Both instructions
29543that annul if the branch is true and instructions that annul if the
29544branch is false are supported.
29545
29546 Delay slot scheduling differs from instruction scheduling in that
29547determining whether an instruction needs a delay slot is dependent only
29548on the type of instruction being generated, not on data flow between the
29549instructions.  See the next section for a discussion of data-dependent
29550instruction scheduling.
29551
29552 The requirement of an insn needing one or more delay slots is indicated
29553via the 'define_delay' expression.  It has the following form:
29554
29555     (define_delay TEST
29556                   [DELAY-1 ANNUL-TRUE-1 ANNUL-FALSE-1
29557                    DELAY-2 ANNUL-TRUE-2 ANNUL-FALSE-2
29558                    ...])
29559
29560 TEST is an attribute test that indicates whether this 'define_delay'
29561applies to a particular insn.  If so, the number of required delay slots
29562is determined by the length of the vector specified as the second
29563argument.  An insn placed in delay slot N must satisfy attribute test
29564DELAY-N.  ANNUL-TRUE-N is an attribute test that specifies which insns
29565may be annulled if the branch is true.  Similarly, ANNUL-FALSE-N
29566specifies which insns in the delay slot may be annulled if the branch is
29567false.  If annulling is not supported for that delay slot, '(nil)'
29568should be coded.
29569
29570 For example, in the common case where branch and call insns require a
29571single delay slot, which may contain any insn other than a branch or
29572call, the following would be placed in the 'md' file:
29573
29574     (define_delay (eq_attr "type" "branch,call")
29575                   [(eq_attr "type" "!branch,call") (nil) (nil)])
29576
29577 Multiple 'define_delay' expressions may be specified.  In this case,
29578each such expression specifies different delay slot requirements and
29579there must be no insn for which tests in two 'define_delay' expressions
29580are both true.
29581
29582 For example, if we have a machine that requires one delay slot for
29583branches but two for calls, no delay slot can contain a branch or call
29584insn, and any valid insn in the delay slot for the branch can be
29585annulled if the branch is true, we might represent this as follows:
29586
29587     (define_delay (eq_attr "type" "branch")
29588        [(eq_attr "type" "!branch,call")
29589         (eq_attr "type" "!branch,call")
29590         (nil)])
29591
29592     (define_delay (eq_attr "type" "call")
29593                   [(eq_attr "type" "!branch,call") (nil) (nil)
29594                    (eq_attr "type" "!branch,call") (nil) (nil)])
29595
29596
29597File: gccint.info,  Node: Processor pipeline description,  Prev: Delay Slots,  Up: Insn Attributes
29598
2959917.19.9 Specifying processor pipeline description
29600-------------------------------------------------
29601
29602To achieve better performance, most modern processors (super-pipelined,
29603superscalar RISC, and VLIW processors) have many "functional units" on
29604which several instructions can be executed simultaneously.  An
29605instruction starts execution if its issue conditions are satisfied.  If
29606not, the instruction is stalled until its conditions are satisfied.
29607Such "interlock (pipeline) delay" causes interruption of the fetching of
29608successor instructions (or demands nop instructions, e.g. for some MIPS
29609processors).
29610
29611 There are two major kinds of interlock delays in modern processors.
29612The first one is a data dependence delay determining "instruction
29613latency time".  The instruction execution is not started until all
29614source data have been evaluated by prior instructions (there are more
29615complex cases when the instruction execution starts even when the data
29616are not available but will be ready in given time after the instruction
29617execution start).  Taking the data dependence delays into account is
29618simple.  The data dependence (true, output, and anti-dependence) delay
29619between two instructions is given by a constant.  In most cases this
29620approach is adequate.  The second kind of interlock delays is a
29621reservation delay.  The reservation delay means that two instructions
29622under execution will be in need of shared processors resources, i.e.
29623buses, internal registers, and/or functional units, which are reserved
29624for some time.  Taking this kind of delay into account is complex
29625especially for modern RISC processors.
29626
29627 The task of exploiting more processor parallelism is solved by an
29628instruction scheduler.  For a better solution to this problem, the
29629instruction scheduler has to have an adequate description of the
29630processor parallelism (or "pipeline description").  GCC machine
29631descriptions describe processor parallelism and functional unit
29632reservations for groups of instructions with the aid of "regular
29633expressions".
29634
29635 The GCC instruction scheduler uses a "pipeline hazard recognizer" to
29636figure out the possibility of the instruction issue by the processor on
29637a given simulated processor cycle.  The pipeline hazard recognizer is
29638automatically generated from the processor pipeline description.  The
29639pipeline hazard recognizer generated from the machine description is
29640based on a deterministic finite state automaton (DFA): the instruction
29641issue is possible if there is a transition from one automaton state to
29642another one.  This algorithm is very fast, and furthermore, its speed is
29643not dependent on processor complexity(1).
29644
29645 The rest of this section describes the directives that constitute an
29646automaton-based processor pipeline description.  The order of these
29647constructions within the machine description file is not important.
29648
29649 The following optional construction describes names of automata
29650generated and used for the pipeline hazards recognition.  Sometimes the
29651generated finite state automaton used by the pipeline hazard recognizer
29652is large.  If we use more than one automaton and bind functional units
29653to the automata, the total size of the automata is usually less than the
29654size of the single automaton.  If there is no one such construction,
29655only one finite state automaton is generated.
29656
29657     (define_automaton AUTOMATA-NAMES)
29658
29659 AUTOMATA-NAMES is a string giving names of the automata.  The names are
29660separated by commas.  All the automata should have unique names.  The
29661automaton name is used in the constructions 'define_cpu_unit' and
29662'define_query_cpu_unit'.
29663
29664 Each processor functional unit used in the description of instruction
29665reservations should be described by the following construction.
29666
29667     (define_cpu_unit UNIT-NAMES [AUTOMATON-NAME])
29668
29669 UNIT-NAMES is a string giving the names of the functional units
29670separated by commas.  Don't use name 'nothing', it is reserved for other
29671goals.
29672
29673 AUTOMATON-NAME is a string giving the name of the automaton with which
29674the unit is bound.  The automaton should be described in construction
29675'define_automaton'.  You should give "automaton-name", if there is a
29676defined automaton.
29677
29678 The assignment of units to automata are constrained by the uses of the
29679units in insn reservations.  The most important constraint is: if a unit
29680reservation is present on a particular cycle of an alternative for an
29681insn reservation, then some unit from the same automaton must be present
29682on the same cycle for the other alternatives of the insn reservation.
29683The rest of the constraints are mentioned in the description of the
29684subsequent constructions.
29685
29686 The following construction describes CPU functional units analogously
29687to 'define_cpu_unit'.  The reservation of such units can be queried for
29688an automaton state.  The instruction scheduler never queries reservation
29689of functional units for given automaton state.  So as a rule, you don't
29690need this construction.  This construction could be used for future code
29691generation goals (e.g. to generate VLIW insn templates).
29692
29693     (define_query_cpu_unit UNIT-NAMES [AUTOMATON-NAME])
29694
29695 UNIT-NAMES is a string giving names of the functional units separated
29696by commas.
29697
29698 AUTOMATON-NAME is a string giving the name of the automaton with which
29699the unit is bound.
29700
29701 The following construction is the major one to describe pipeline
29702characteristics of an instruction.
29703
29704     (define_insn_reservation INSN-NAME DEFAULT_LATENCY
29705                              CONDITION REGEXP)
29706
29707 DEFAULT_LATENCY is a number giving latency time of the instruction.
29708There is an important difference between the old description and the
29709automaton based pipeline description.  The latency time is used for all
29710dependencies when we use the old description.  In the automaton based
29711pipeline description, the given latency time is only used for true
29712dependencies.  The cost of anti-dependencies is always zero and the cost
29713of output dependencies is the difference between latency times of the
29714producing and consuming insns (if the difference is negative, the cost
29715is considered to be zero).  You can always change the default costs for
29716any description by using the target hook 'TARGET_SCHED_ADJUST_COST'
29717(*note Scheduling::).
29718
29719 INSN-NAME is a string giving the internal name of the insn.  The
29720internal names are used in constructions 'define_bypass' and in the
29721automaton description file generated for debugging.  The internal name
29722has nothing in common with the names in 'define_insn'.  It is a good
29723practice to use insn classes described in the processor manual.
29724
29725 CONDITION defines what RTL insns are described by this construction.
29726You should remember that you will be in trouble if CONDITION for two or
29727more different 'define_insn_reservation' constructions is TRUE for an
29728insn.  In this case what reservation will be used for the insn is not
29729defined.  Such cases are not checked during generation of the pipeline
29730hazards recognizer because in general recognizing that two conditions
29731may have the same value is quite difficult (especially if the conditions
29732contain 'symbol_ref').  It is also not checked during the pipeline
29733hazard recognizer work because it would slow down the recognizer
29734considerably.
29735
29736 REGEXP is a string describing the reservation of the cpu's functional
29737units by the instruction.  The reservations are described by a regular
29738expression according to the following syntax:
29739
29740            regexp = regexp "," oneof
29741                   | oneof
29742
29743            oneof = oneof "|" allof
29744                  | allof
29745
29746            allof = allof "+" repeat
29747                  | repeat
29748
29749            repeat = element "*" number
29750                   | element
29751
29752            element = cpu_function_unit_name
29753                    | reservation_name
29754                    | result_name
29755                    | "nothing"
29756                    | "(" regexp ")"
29757
29758   * ',' is used for describing the start of the next cycle in the
29759     reservation.
29760
29761   * '|' is used for describing a reservation described by the first
29762     regular expression *or* a reservation described by the second
29763     regular expression *or* etc.
29764
29765   * '+' is used for describing a reservation described by the first
29766     regular expression *and* a reservation described by the second
29767     regular expression *and* etc.
29768
29769   * '*' is used for convenience and simply means a sequence in which
29770     the regular expression are repeated NUMBER times with cycle
29771     advancing (see ',').
29772
29773   * 'cpu_function_unit_name' denotes reservation of the named
29774     functional unit.
29775
29776   * 'reservation_name' -- see description of construction
29777     'define_reservation'.
29778
29779   * 'nothing' denotes no unit reservations.
29780
29781 Sometimes unit reservations for different insns contain common parts.
29782In such case, you can simplify the pipeline description by describing
29783the common part by the following construction
29784
29785     (define_reservation RESERVATION-NAME REGEXP)
29786
29787 RESERVATION-NAME is a string giving name of REGEXP.  Functional unit
29788names and reservation names are in the same name space.  So the
29789reservation names should be different from the functional unit names and
29790cannot be the reserved name 'nothing'.
29791
29792 The following construction is used to describe exceptions in the
29793latency time for given instruction pair.  This is so called bypasses.
29794
29795     (define_bypass NUMBER OUT_INSN_NAMES IN_INSN_NAMES
29796                    [GUARD])
29797
29798 NUMBER defines when the result generated by the instructions given in
29799string OUT_INSN_NAMES will be ready for the instructions given in string
29800IN_INSN_NAMES.  Each of these strings is a comma-separated list of
29801filename-style globs and they refer to the names of
29802'define_insn_reservation's.  For example:
29803     (define_bypass 1 "cpu1_load_*, cpu1_store_*" "cpu1_load_*")
29804 defines a bypass between instructions that start with 'cpu1_load_' or
29805'cpu1_store_' and those that start with 'cpu1_load_'.
29806
29807 GUARD is an optional string giving the name of a C function which
29808defines an additional guard for the bypass.  The function will get the
29809two insns as parameters.  If the function returns zero the bypass will
29810be ignored for this case.  The additional guard is necessary to
29811recognize complicated bypasses, e.g. when the consumer is only an
29812address of insn 'store' (not a stored value).
29813
29814 If there are more one bypass with the same output and input insns, the
29815chosen bypass is the first bypass with a guard in description whose
29816guard function returns nonzero.  If there is no such bypass, then bypass
29817without the guard function is chosen.
29818
29819 The following five constructions are usually used to describe VLIW
29820processors, or more precisely, to describe a placement of small
29821instructions into VLIW instruction slots.  They can be used for RISC
29822processors, too.
29823
29824     (exclusion_set UNIT-NAMES UNIT-NAMES)
29825     (presence_set UNIT-NAMES PATTERNS)
29826     (final_presence_set UNIT-NAMES PATTERNS)
29827     (absence_set UNIT-NAMES PATTERNS)
29828     (final_absence_set UNIT-NAMES PATTERNS)
29829
29830 UNIT-NAMES is a string giving names of functional units separated by
29831commas.
29832
29833 PATTERNS is a string giving patterns of functional units separated by
29834comma.  Currently pattern is one unit or units separated by
29835white-spaces.
29836
29837 The first construction ('exclusion_set') means that each functional
29838unit in the first string cannot be reserved simultaneously with a unit
29839whose name is in the second string and vice versa.  For example, the
29840construction is useful for describing processors (e.g. some SPARC
29841processors) with a fully pipelined floating point functional unit which
29842can execute simultaneously only single floating point insns or only
29843double floating point insns.
29844
29845 The second construction ('presence_set') means that each functional
29846unit in the first string cannot be reserved unless at least one of
29847pattern of units whose names are in the second string is reserved.  This
29848is an asymmetric relation.  For example, it is useful for description
29849that VLIW 'slot1' is reserved after 'slot0' reservation.  We could
29850describe it by the following construction
29851
29852     (presence_set "slot1" "slot0")
29853
29854 Or 'slot1' is reserved only after 'slot0' and unit 'b0' reservation.
29855In this case we could write
29856
29857     (presence_set "slot1" "slot0 b0")
29858
29859 The third construction ('final_presence_set') is analogous to
29860'presence_set'.  The difference between them is when checking is done.
29861When an instruction is issued in given automaton state reflecting all
29862current and planned unit reservations, the automaton state is changed.
29863The first state is a source state, the second one is a result state.
29864Checking for 'presence_set' is done on the source state reservation,
29865checking for 'final_presence_set' is done on the result reservation.
29866This construction is useful to describe a reservation which is actually
29867two subsequent reservations.  For example, if we use
29868
29869     (presence_set "slot1" "slot0")
29870
29871 the following insn will be never issued (because 'slot1' requires
29872'slot0' which is absent in the source state).
29873
29874     (define_reservation "insn_and_nop" "slot0 + slot1")
29875
29876 but it can be issued if we use analogous 'final_presence_set'.
29877
29878 The forth construction ('absence_set') means that each functional unit
29879in the first string can be reserved only if each pattern of units whose
29880names are in the second string is not reserved.  This is an asymmetric
29881relation (actually 'exclusion_set' is analogous to this one but it is
29882symmetric).  For example it might be useful in a VLIW description to say
29883that 'slot0' cannot be reserved after either 'slot1' or 'slot2' have
29884been reserved.  This can be described as:
29885
29886     (absence_set "slot0" "slot1, slot2")
29887
29888 Or 'slot2' cannot be reserved if 'slot0' and unit 'b0' are reserved or
29889'slot1' and unit 'b1' are reserved.  In this case we could write
29890
29891     (absence_set "slot2" "slot0 b0, slot1 b1")
29892
29893 All functional units mentioned in a set should belong to the same
29894automaton.
29895
29896 The last construction ('final_absence_set') is analogous to
29897'absence_set' but checking is done on the result (state) reservation.
29898See comments for 'final_presence_set'.
29899
29900 You can control the generator of the pipeline hazard recognizer with
29901the following construction.
29902
29903     (automata_option OPTIONS)
29904
29905 OPTIONS is a string giving options which affect the generated code.
29906Currently there are the following options:
29907
29908   * "no-minimization" makes no minimization of the automaton.  This is
29909     only worth to do when we are debugging the description and need to
29910     look more accurately at reservations of states.
29911
29912   * "time" means printing time statistics about the generation of
29913     automata.
29914
29915   * "stats" means printing statistics about the generated automata such
29916     as the number of DFA states, NDFA states and arcs.
29917
29918   * "v" means a generation of the file describing the result automata.
29919     The file has suffix '.dfa' and can be used for the description
29920     verification and debugging.
29921
29922   * "w" means a generation of warning instead of error for non-critical
29923     errors.
29924
29925   * "no-comb-vect" prevents the automaton generator from generating two
29926     data structures and comparing them for space efficiency.  Using a
29927     comb vector to represent transitions may be better, but it can be
29928     very expensive to construct.  This option is useful if the build
29929     process spends an unacceptably long time in genautomata.
29930
29931   * "ndfa" makes nondeterministic finite state automata.  This affects
29932     the treatment of operator '|' in the regular expressions.  The
29933     usual treatment of the operator is to try the first alternative
29934     and, if the reservation is not possible, the second alternative.
29935     The nondeterministic treatment means trying all alternatives, some
29936     of them may be rejected by reservations in the subsequent insns.
29937
29938   * "collapse-ndfa" modifies the behavior of the generator when
29939     producing an automaton.  An additional state transition to collapse
29940     a nondeterministic NDFA state to a deterministic DFA state is
29941     generated.  It can be triggered by passing 'const0_rtx' to
29942     state_transition.  In such an automaton, cycle advance transitions
29943     are available only for these collapsed states.  This option is
29944     useful for ports that want to use the 'ndfa' option, but also want
29945     to use 'define_query_cpu_unit' to assign units to insns issued in a
29946     cycle.
29947
29948   * "progress" means output of a progress bar showing how many states
29949     were generated so far for automaton being processed.  This is
29950     useful during debugging a DFA description.  If you see too many
29951     generated states, you could interrupt the generator of the pipeline
29952     hazard recognizer and try to figure out a reason for generation of
29953     the huge automaton.
29954
29955 As an example, consider a superscalar RISC machine which can issue
29956three insns (two integer insns and one floating point insn) on the cycle
29957but can finish only two insns.  To describe this, we define the
29958following functional units.
29959
29960     (define_cpu_unit "i0_pipeline, i1_pipeline, f_pipeline")
29961     (define_cpu_unit "port0, port1")
29962
29963 All simple integer insns can be executed in any integer pipeline and
29964their result is ready in two cycles.  The simple integer insns are
29965issued into the first pipeline unless it is reserved, otherwise they are
29966issued into the second pipeline.  Integer division and multiplication
29967insns can be executed only in the second integer pipeline and their
29968results are ready correspondingly in 9 and 4 cycles.  The integer
29969division is not pipelined, i.e. the subsequent integer division insn
29970cannot be issued until the current division insn finished.  Floating
29971point insns are fully pipelined and their results are ready in 3 cycles.
29972Where the result of a floating point insn is used by an integer insn, an
29973additional delay of one cycle is incurred.  To describe all of this we
29974could specify
29975
29976     (define_cpu_unit "div")
29977
29978     (define_insn_reservation "simple" 2 (eq_attr "type" "int")
29979                              "(i0_pipeline | i1_pipeline), (port0 | port1)")
29980
29981     (define_insn_reservation "mult" 4 (eq_attr "type" "mult")
29982                              "i1_pipeline, nothing*2, (port0 | port1)")
29983
29984     (define_insn_reservation "div" 9 (eq_attr "type" "div")
29985                              "i1_pipeline, div*7, div + (port0 | port1)")
29986
29987     (define_insn_reservation "float" 3 (eq_attr "type" "float")
29988                              "f_pipeline, nothing, (port0 | port1))
29989
29990     (define_bypass 4 "float" "simple,mult,div")
29991
29992 To simplify the description we could describe the following reservation
29993
29994     (define_reservation "finish" "port0|port1")
29995
29996 and use it in all 'define_insn_reservation' as in the following
29997construction
29998
29999     (define_insn_reservation "simple" 2 (eq_attr "type" "int")
30000                              "(i0_pipeline | i1_pipeline), finish")
30001
30002   ---------- Footnotes ----------
30003
30004   (1) However, the size of the automaton depends on processor
30005complexity.  To limit this effect, machine descriptions can split
30006orthogonal parts of the machine description among several automata: but
30007then, since each of these must be stepped independently, this does cause
30008a small decrease in the algorithm's performance.
30009
30010
30011File: gccint.info,  Node: Conditional Execution,  Next: Define Subst,  Prev: Insn Attributes,  Up: Machine Desc
30012
3001317.20 Conditional Execution
30014===========================
30015
30016A number of architectures provide for some form of conditional
30017execution, or predication.  The hallmark of this feature is the ability
30018to nullify most of the instructions in the instruction set.  When the
30019instruction set is large and not entirely symmetric, it can be quite
30020tedious to describe these forms directly in the '.md' file.  An
30021alternative is the 'define_cond_exec' template.
30022
30023     (define_cond_exec
30024       [PREDICATE-PATTERN]
30025       "CONDITION"
30026       "OUTPUT-TEMPLATE"
30027       "OPTIONAL-INSN-ATTRIBUES")
30028
30029 PREDICATE-PATTERN is the condition that must be true for the insn to be
30030executed at runtime and should match a relational operator.  One can use
30031'match_operator' to match several relational operators at once.  Any
30032'match_operand' operands must have no more than one alternative.
30033
30034 CONDITION is a C expression that must be true for the generated pattern
30035to match.
30036
30037 OUTPUT-TEMPLATE is a string similar to the 'define_insn' output
30038template (*note Output Template::), except that the '*' and '@' special
30039cases do not apply.  This is only useful if the assembly text for the
30040predicate is a simple prefix to the main insn.  In order to handle the
30041general case, there is a global variable 'current_insn_predicate' that
30042will contain the entire predicate if the current insn is predicated, and
30043will otherwise be 'NULL'.
30044
30045 OPTIONAL-INSN-ATTRIBUTES is an optional vector of attributes that gets
30046appended to the insn attributes of the produced cond_exec rtx.  It can
30047be used to add some distinguishing attribute to cond_exec rtxs produced
30048that way.  An example usage would be to use this attribute in
30049conjunction with attributes on the main pattern to disable particular
30050alternatives under certain conditions.
30051
30052 When 'define_cond_exec' is used, an implicit reference to the
30053'predicable' instruction attribute is made.  *Note Insn Attributes::.
30054This attribute must be a boolean (i.e. have exactly two elements in its
30055LIST-OF-VALUES), with the possible values being 'no' and 'yes'.  The
30056default and all uses in the insns must be a simple constant, not a
30057complex expressions.  It may, however, depend on the alternative, by
30058using a comma-separated list of values.  If that is the case, the port
30059should also define an 'enabled' attribute (*note Disable Insn
30060Alternatives::), which should also allow only 'no' and 'yes' as its
30061values.
30062
30063 For each 'define_insn' for which the 'predicable' attribute is true, a
30064new 'define_insn' pattern will be generated that matches a predicated
30065version of the instruction.  For example,
30066
30067     (define_insn "addsi"
30068       [(set (match_operand:SI 0 "register_operand" "r")
30069             (plus:SI (match_operand:SI 1 "register_operand" "r")
30070                      (match_operand:SI 2 "register_operand" "r")))]
30071       "TEST1"
30072       "add %2,%1,%0")
30073
30074     (define_cond_exec
30075       [(ne (match_operand:CC 0 "register_operand" "c")
30076            (const_int 0))]
30077       "TEST2"
30078       "(%0)")
30079
30080generates a new pattern
30081
30082     (define_insn ""
30083       [(cond_exec
30084          (ne (match_operand:CC 3 "register_operand" "c") (const_int 0))
30085          (set (match_operand:SI 0 "register_operand" "r")
30086               (plus:SI (match_operand:SI 1 "register_operand" "r")
30087                        (match_operand:SI 2 "register_operand" "r"))))]
30088       "(TEST2) && (TEST1)"
30089       "(%3) add %2,%1,%0")
30090
30091
30092File: gccint.info,  Node: Define Subst,  Next: Constant Definitions,  Prev: Conditional Execution,  Up: Machine Desc
30093
3009417.21 RTL Templates Transformations
30095===================================
30096
30097For some hardware architectures there are common cases when the RTL
30098templates for the instructions can be derived from the other RTL
30099templates using simple transformations.  E.g., 'i386.md' contains an RTL
30100template for the ordinary 'sub' instruction-- '*subsi_1', and for the
30101'sub' instruction with subsequent zero-extension--'*subsi_1_zext'.  Such
30102cases can be easily implemented by a single meta-template capable of
30103generating a modified case based on the initial one:
30104
30105     (define_subst "NAME"
30106       [INPUT-TEMPLATE]
30107       "CONDITION"
30108       [OUTPUT-TEMPLATE])
30109 INPUT-TEMPLATE is a pattern describing the source RTL template, which
30110will be transformed.
30111
30112 CONDITION is a C expression that is conjunct with the condition from
30113the input-template to generate a condition to be used in the
30114output-template.
30115
30116 OUTPUT-TEMPLATE is a pattern that will be used in the resulting
30117template.
30118
30119 'define_subst' mechanism is tightly coupled with the notion of the
30120subst attribute (*note Subst Iterators::).  The use of 'define_subst' is
30121triggered by a reference to a subst attribute in the transforming RTL
30122template.  This reference initiates duplication of the source RTL
30123template and substitution of the attributes with their values.  The
30124source RTL template is left unchanged, while the copy is transformed by
30125'define_subst'.  This transformation can fail in the case when the
30126source RTL template is not matched against the input-template of the
30127'define_subst'.  In such case the copy is deleted.
30128
30129 'define_subst' can be used only in 'define_insn' and 'define_expand',
30130it cannot be used in other expressions (e.g. in
30131'define_insn_and_split').
30132
30133* Menu:
30134
30135* Define Subst Example::	    Example of 'define_subst' work.
30136* Define Subst Pattern Matching::   Process of template comparison.
30137* Define Subst Output Template::    Generation of output template.
30138
30139
30140File: gccint.info,  Node: Define Subst Example,  Next: Define Subst Pattern Matching,  Up: Define Subst
30141
3014217.21.1 'define_subst' Example
30143------------------------------
30144
30145To illustrate how 'define_subst' works, let us examine a simple template
30146transformation.
30147
30148 Suppose there are two kinds of instructions: one that touches flags and
30149the other that does not.  The instructions of the second type could be
30150generated with the following 'define_subst':
30151
30152     (define_subst "add_clobber_subst"
30153       [(set (match_operand:SI 0 "" "")
30154             (match_operand:SI 1 "" ""))]
30155       ""
30156       [(set (match_dup 0)
30157             (match_dup 1))
30158        (clobber (reg:CC FLAGS_REG))])
30159
30160 This 'define_subst' can be applied to any RTL pattern containing 'set'
30161of mode SI and generates a copy with clobber when it is applied.
30162
30163 Assume there is an RTL template for a 'max' instruction to be used in
30164'define_subst' mentioned above:
30165
30166     (define_insn "maxsi"
30167       [(set (match_operand:SI 0 "register_operand" "=r")
30168             (max:SI
30169               (match_operand:SI 1 "register_operand" "r")
30170               (match_operand:SI 2 "register_operand" "r")))]
30171       ""
30172       "max\t{%2, %1, %0|%0, %1, %2}"
30173      [...])
30174
30175 To mark the RTL template for 'define_subst' application,
30176subst-attributes are used.  They should be declared in advance:
30177
30178     (define_subst_attr "add_clobber_name" "add_clobber_subst" "_noclobber" "_clobber")
30179
30180 Here 'add_clobber_name' is the attribute name, 'add_clobber_subst' is
30181the name of the corresponding 'define_subst', the third argument
30182('_noclobber') is the attribute value that would be substituted into the
30183unchanged version of the source RTL template, and the last argument
30184('_clobber') is the value that would be substituted into the second,
30185transformed, version of the RTL template.
30186
30187 Once the subst-attribute has been defined, it should be used in RTL
30188templates which need to be processed by the 'define_subst'.  So, the
30189original RTL template should be changed:
30190
30191     (define_insn "maxsi<add_clobber_name>"
30192       [(set (match_operand:SI 0 "register_operand" "=r")
30193             (max:SI
30194               (match_operand:SI 1 "register_operand" "r")
30195               (match_operand:SI 2 "register_operand" "r")))]
30196       ""
30197       "max\t{%2, %1, %0|%0, %1, %2}"
30198      [...])
30199
30200 The result of the 'define_subst' usage would look like the following:
30201
30202     (define_insn "maxsi_noclobber"
30203       [(set (match_operand:SI 0 "register_operand" "=r")
30204             (max:SI
30205               (match_operand:SI 1 "register_operand" "r")
30206               (match_operand:SI 2 "register_operand" "r")))]
30207       ""
30208       "max\t{%2, %1, %0|%0, %1, %2}"
30209      [...])
30210     (define_insn "maxsi_clobber"
30211       [(set (match_operand:SI 0 "register_operand" "=r")
30212             (max:SI
30213               (match_operand:SI 1 "register_operand" "r")
30214               (match_operand:SI 2 "register_operand" "r")))
30215        (clobber (reg:CC FLAGS_REG))]
30216       ""
30217       "max\t{%2, %1, %0|%0, %1, %2}"
30218      [...])
30219
30220
30221File: gccint.info,  Node: Define Subst Pattern Matching,  Next: Define Subst Output Template,  Prev: Define Subst Example,  Up: Define Subst
30222
3022317.21.2 Pattern Matching in 'define_subst'
30224------------------------------------------
30225
30226All expressions, allowed in 'define_insn' or 'define_expand', are
30227allowed in the input-template of 'define_subst', except 'match_par_dup',
30228'match_scratch', 'match_parallel'.  The meanings of expressions in the
30229input-template were changed:
30230
30231 'match_operand' matches any expression (possibly, a subtree in
30232RTL-template), if modes of the 'match_operand' and this expression are
30233the same, or mode of the 'match_operand' is 'VOIDmode', or this
30234expression is 'match_dup', 'match_op_dup'.  If the expression is
30235'match_operand' too, and predicate of 'match_operand' from the input
30236pattern is not empty, then the predicates are compared.  That can be
30237used for more accurate filtering of accepted RTL-templates.
30238
30239 'match_operator' matches common operators (like 'plus', 'minus'),
30240'unspec', 'unspec_volatile' operators and 'match_operator's from the
30241original pattern if the modes match and 'match_operator' from the input
30242pattern has the same number of operands as the operator from the
30243original pattern.
30244
30245
30246File: gccint.info,  Node: Define Subst Output Template,  Prev: Define Subst Pattern Matching,  Up: Define Subst
30247
3024817.21.3 Generation of output template in 'define_subst'
30249-------------------------------------------------------
30250
30251If all necessary checks for 'define_subst' application pass, a new
30252RTL-pattern, based on the output-template, is created to replace the old
30253template.  Like in input-patterns, meanings of some RTL expressions are
30254changed when they are used in output-patterns of a 'define_subst'.
30255Thus, 'match_dup' is used for copying the whole expression from the
30256original pattern, which matched corresponding 'match_operand' from the
30257input pattern.
30258
30259 'match_dup N' is used in the output template to be replaced with the
30260expression from the original pattern, which matched 'match_operand N'
30261from the input pattern.  As a consequence, 'match_dup' cannot be used to
30262point to 'match_operand's from the output pattern, it should always
30263refer to a 'match_operand' from the input pattern.  If a 'match_dup N'
30264occurs more than once in the output template, its first occurrence is
30265replaced with the expression from the original pattern, and the
30266subsequent expressions are replaced with 'match_dup N', i.e., a
30267reference to the first expression.
30268
30269 In the output template one can refer to the expressions from the
30270original pattern and create new ones.  For instance, some operands could
30271be added by means of standard 'match_operand'.
30272
30273 After replacing 'match_dup' with some RTL-subtree from the original
30274pattern, it could happen that several 'match_operand's in the output
30275pattern have the same indexes.  It is unknown, how many and what indexes
30276would be used in the expression which would replace 'match_dup', so such
30277conflicts in indexes are inevitable.  To overcome this issue,
30278'match_operands' and 'match_operators', which were introduced into the
30279output pattern, are renumerated when all 'match_dup's are replaced.
30280
30281 Number of alternatives in 'match_operand's introduced into the output
30282template 'M' could differ from the number of alternatives in the
30283original pattern 'N', so in the resultant pattern there would be 'N*M'
30284alternatives.  Thus, constraints from the original pattern would be
30285duplicated 'N' times, constraints from the output pattern would be
30286duplicated 'M' times, producing all possible combinations.
30287
30288
30289File: gccint.info,  Node: Constant Definitions,  Next: Iterators,  Prev: Define Subst,  Up: Machine Desc
30290
3029117.22 Constant Definitions
30292==========================
30293
30294Using literal constants inside instruction patterns reduces legibility
30295and can be a maintenance problem.
30296
30297 To overcome this problem, you may use the 'define_constants'
30298expression.  It contains a vector of name-value pairs.  From that point
30299on, wherever any of the names appears in the MD file, it is as if the
30300corresponding value had been written instead.  You may use
30301'define_constants' multiple times; each appearance adds more constants
30302to the table.  It is an error to redefine a constant with a different
30303value.
30304
30305 To come back to the a29k load multiple example, instead of
30306
30307     (define_insn ""
30308       [(match_parallel 0 "load_multiple_operation"
30309          [(set (match_operand:SI 1 "gpc_reg_operand" "=r")
30310                (match_operand:SI 2 "memory_operand" "m"))
30311           (use (reg:SI 179))
30312           (clobber (reg:SI 179))])]
30313       ""
30314       "loadm 0,0,%1,%2")
30315
30316 You could write:
30317
30318     (define_constants [
30319         (R_BP 177)
30320         (R_FC 178)
30321         (R_CR 179)
30322         (R_Q  180)
30323     ])
30324
30325     (define_insn ""
30326       [(match_parallel 0 "load_multiple_operation"
30327          [(set (match_operand:SI 1 "gpc_reg_operand" "=r")
30328                (match_operand:SI 2 "memory_operand" "m"))
30329           (use (reg:SI R_CR))
30330           (clobber (reg:SI R_CR))])]
30331       ""
30332       "loadm 0,0,%1,%2")
30333
30334 The constants that are defined with a define_constant are also output
30335in the insn-codes.h header file as #defines.
30336
30337 You can also use the machine description file to define enumerations.
30338Like the constants defined by 'define_constant', these enumerations are
30339visible to both the machine description file and the main C code.
30340
30341 The syntax is as follows:
30342
30343     (define_c_enum "NAME" [
30344       VALUE0
30345       VALUE1
30346       ...
30347       VALUEN
30348     ])
30349
30350 This definition causes the equivalent of the following C code to appear
30351in 'insn-constants.h':
30352
30353     enum NAME {
30354       VALUE0 = 0,
30355       VALUE1 = 1,
30356       ...
30357       VALUEN = N
30358     };
30359     #define NUM_CNAME_VALUES (N + 1)
30360
30361 where CNAME is the capitalized form of NAME.  It also makes each VALUEI
30362available in the machine description file, just as if it had been
30363declared with:
30364
30365     (define_constants [(VALUEI I)])
30366
30367 Each VALUEI is usually an upper-case identifier and usually begins with
30368CNAME.
30369
30370 You can split the enumeration definition into as many statements as you
30371like.  The above example is directly equivalent to:
30372
30373     (define_c_enum "NAME" [VALUE0])
30374     (define_c_enum "NAME" [VALUE1])
30375     ...
30376     (define_c_enum "NAME" [VALUEN])
30377
30378 Splitting the enumeration helps to improve the modularity of each
30379individual '.md' file.  For example, if a port defines its
30380synchronization instructions in a separate 'sync.md' file, it is
30381convenient to define all synchronization-specific enumeration values in
30382'sync.md' rather than in the main '.md' file.
30383
30384 Some enumeration names have special significance to GCC:
30385
30386'unspecv'
30387     If an enumeration called 'unspecv' is defined, GCC will use it when
30388     printing out 'unspec_volatile' expressions.  For example:
30389
30390          (define_c_enum "unspecv" [
30391            UNSPECV_BLOCKAGE
30392          ])
30393
30394     causes GCC to print '(unspec_volatile ... 0)' as:
30395
30396          (unspec_volatile ... UNSPECV_BLOCKAGE)
30397
30398'unspec'
30399     If an enumeration called 'unspec' is defined, GCC will use it when
30400     printing out 'unspec' expressions.  GCC will also use it when
30401     printing out 'unspec_volatile' expressions unless an 'unspecv'
30402     enumeration is also defined.  You can therefore decide whether to
30403     keep separate enumerations for volatile and non-volatile
30404     expressions or whether to use the same enumeration for both.
30405
30406 Another way of defining an enumeration is to use 'define_enum':
30407
30408     (define_enum "NAME" [
30409       VALUE0
30410       VALUE1
30411       ...
30412       VALUEN
30413     ])
30414
30415 This directive implies:
30416
30417     (define_c_enum "NAME" [
30418       CNAME_CVALUE0
30419       CNAME_CVALUE1
30420       ...
30421       CNAME_CVALUEN
30422     ])
30423
30424 where CVALUEI is the capitalized form of VALUEI.  However, unlike
30425'define_c_enum', the enumerations defined by 'define_enum' can be used
30426in attribute specifications (*note define_enum_attr::).
30427
30428
30429File: gccint.info,  Node: Iterators,  Prev: Constant Definitions,  Up: Machine Desc
30430
3043117.23 Iterators
30432===============
30433
30434Ports often need to define similar patterns for more than one machine
30435mode or for more than one rtx code.  GCC provides some simple iterator
30436facilities to make this process easier.
30437
30438* Menu:
30439
30440* Mode Iterators::         Generating variations of patterns for different modes.
30441* Code Iterators::         Doing the same for codes.
30442* Int Iterators::          Doing the same for integers.
30443* Subst Iterators::	   Generating variations of patterns for define_subst.
30444* Parameterized Names::	   Specifying iterator values in C++ code.
30445
30446
30447File: gccint.info,  Node: Mode Iterators,  Next: Code Iterators,  Up: Iterators
30448
3044917.23.1 Mode Iterators
30450----------------------
30451
30452Ports often need to define similar patterns for two or more different
30453modes.  For example:
30454
30455   * If a processor has hardware support for both single and double
30456     floating-point arithmetic, the 'SFmode' patterns tend to be very
30457     similar to the 'DFmode' ones.
30458
30459   * If a port uses 'SImode' pointers in one configuration and 'DImode'
30460     pointers in another, it will usually have very similar 'SImode' and
30461     'DImode' patterns for manipulating pointers.
30462
30463 Mode iterators allow several patterns to be instantiated from one '.md'
30464file template.  They can be used with any type of rtx-based construct,
30465such as a 'define_insn', 'define_split', or 'define_peephole2'.
30466
30467* Menu:
30468
30469* Defining Mode Iterators:: Defining a new mode iterator.
30470* Substitutions::           Combining mode iterators with substitutions
30471* Examples::                Examples
30472
30473
30474File: gccint.info,  Node: Defining Mode Iterators,  Next: Substitutions,  Up: Mode Iterators
30475
3047617.23.1.1 Defining Mode Iterators
30477.................................
30478
30479The syntax for defining a mode iterator is:
30480
30481     (define_mode_iterator NAME [(MODE1 "COND1") ... (MODEN "CONDN")])
30482
30483 This allows subsequent '.md' file constructs to use the mode suffix
30484':NAME'.  Every construct that does so will be expanded N times, once
30485with every use of ':NAME' replaced by ':MODE1', once with every use
30486replaced by ':MODE2', and so on.  In the expansion for a particular
30487MODEI, every C condition will also require that CONDI be true.
30488
30489 For example:
30490
30491     (define_mode_iterator P [(SI "Pmode == SImode") (DI "Pmode == DImode")])
30492
30493 defines a new mode suffix ':P'.  Every construct that uses ':P' will be
30494expanded twice, once with every ':P' replaced by ':SI' and once with
30495every ':P' replaced by ':DI'.  The ':SI' version will only apply if
30496'Pmode == SImode' and the ':DI' version will only apply if 'Pmode ==
30497DImode'.
30498
30499 As with other '.md' conditions, an empty string is treated as "always
30500true".  '(MODE "")' can also be abbreviated to 'MODE'.  For example:
30501
30502     (define_mode_iterator GPR [SI (DI "TARGET_64BIT")])
30503
30504 means that the ':DI' expansion only applies if 'TARGET_64BIT' but that
30505the ':SI' expansion has no such constraint.
30506
30507 Iterators are applied in the order they are defined.  This can be
30508significant if two iterators are used in a construct that requires
30509substitutions.  *Note Substitutions::.
30510
30511
30512File: gccint.info,  Node: Substitutions,  Next: Examples,  Prev: Defining Mode Iterators,  Up: Mode Iterators
30513
3051417.23.1.2 Substitution in Mode Iterators
30515........................................
30516
30517If an '.md' file construct uses mode iterators, each version of the
30518construct will often need slightly different strings or modes.  For
30519example:
30520
30521   * When a 'define_expand' defines several 'addM3' patterns (*note
30522     Standard Names::), each expander will need to use the appropriate
30523     mode name for M.
30524
30525   * When a 'define_insn' defines several instruction patterns, each
30526     instruction will often use a different assembler mnemonic.
30527
30528   * When a 'define_insn' requires operands with different modes, using
30529     an iterator for one of the operand modes usually requires a
30530     specific mode for the other operand(s).
30531
30532 GCC supports such variations through a system of "mode attributes".
30533There are two standard attributes: 'mode', which is the name of the mode
30534in lower case, and 'MODE', which is the same thing in upper case.  You
30535can define other attributes using:
30536
30537     (define_mode_attr NAME [(MODE1 "VALUE1") ... (MODEN "VALUEN")])
30538
30539 where NAME is the name of the attribute and VALUEI is the value
30540associated with MODEI.
30541
30542 When GCC replaces some :ITERATOR with :MODE, it will scan each string
30543and mode in the pattern for sequences of the form '<ITERATOR:ATTR>',
30544where ATTR is the name of a mode attribute.  If the attribute is defined
30545for MODE, the whole '<...>' sequence will be replaced by the appropriate
30546attribute value.
30547
30548 For example, suppose an '.md' file has:
30549
30550     (define_mode_iterator P [(SI "Pmode == SImode") (DI "Pmode == DImode")])
30551     (define_mode_attr load [(SI "lw") (DI "ld")])
30552
30553 If one of the patterns that uses ':P' contains the string
30554'"<P:load>\t%0,%1"', the 'SI' version of that pattern will use
30555'"lw\t%0,%1"' and the 'DI' version will use '"ld\t%0,%1"'.
30556
30557 Here is an example of using an attribute for a mode:
30558
30559     (define_mode_iterator LONG [SI DI])
30560     (define_mode_attr SHORT [(SI "HI") (DI "SI")])
30561     (define_insn ...
30562       (sign_extend:LONG (match_operand:<LONG:SHORT> ...)) ...)
30563
30564 The 'ITERATOR:' prefix may be omitted, in which case the substitution
30565will be attempted for every iterator expansion.
30566
30567
30568File: gccint.info,  Node: Examples,  Prev: Substitutions,  Up: Mode Iterators
30569
3057017.23.1.3 Mode Iterator Examples
30571................................
30572
30573Here is an example from the MIPS port.  It defines the following modes
30574and attributes (among others):
30575
30576     (define_mode_iterator GPR [SI (DI "TARGET_64BIT")])
30577     (define_mode_attr d [(SI "") (DI "d")])
30578
30579 and uses the following template to define both 'subsi3' and 'subdi3':
30580
30581     (define_insn "sub<mode>3"
30582       [(set (match_operand:GPR 0 "register_operand" "=d")
30583             (minus:GPR (match_operand:GPR 1 "register_operand" "d")
30584                        (match_operand:GPR 2 "register_operand" "d")))]
30585       ""
30586       "<d>subu\t%0,%1,%2"
30587       [(set_attr "type" "arith")
30588        (set_attr "mode" "<MODE>")])
30589
30590 This is exactly equivalent to:
30591
30592     (define_insn "subsi3"
30593       [(set (match_operand:SI 0 "register_operand" "=d")
30594             (minus:SI (match_operand:SI 1 "register_operand" "d")
30595                       (match_operand:SI 2 "register_operand" "d")))]
30596       ""
30597       "subu\t%0,%1,%2"
30598       [(set_attr "type" "arith")
30599        (set_attr "mode" "SI")])
30600
30601     (define_insn "subdi3"
30602       [(set (match_operand:DI 0 "register_operand" "=d")
30603             (minus:DI (match_operand:DI 1 "register_operand" "d")
30604                       (match_operand:DI 2 "register_operand" "d")))]
30605       ""
30606       "dsubu\t%0,%1,%2"
30607       [(set_attr "type" "arith")
30608        (set_attr "mode" "DI")])
30609
30610
30611File: gccint.info,  Node: Code Iterators,  Next: Int Iterators,  Prev: Mode Iterators,  Up: Iterators
30612
3061317.23.2 Code Iterators
30614----------------------
30615
30616Code iterators operate in a similar way to mode iterators.  *Note Mode
30617Iterators::.
30618
30619 The construct:
30620
30621     (define_code_iterator NAME [(CODE1 "COND1") ... (CODEN "CONDN")])
30622
30623 defines a pseudo rtx code NAME that can be instantiated as CODEI if
30624condition CONDI is true.  Each CODEI must have the same rtx format.
30625*Note RTL Classes::.
30626
30627 As with mode iterators, each pattern that uses NAME will be expanded N
30628times, once with all uses of NAME replaced by CODE1, once with all uses
30629replaced by CODE2, and so on.  *Note Defining Mode Iterators::.
30630
30631 It is possible to define attributes for codes as well as for modes.
30632There are two standard code attributes: 'code', the name of the code in
30633lower case, and 'CODE', the name of the code in upper case.  Other
30634attributes are defined using:
30635
30636     (define_code_attr NAME [(CODE1 "VALUE1") ... (CODEN "VALUEN")])
30637
30638 Instruction patterns can use code attributes as rtx codes, which can be
30639useful if two sets of codes act in tandem.  For example, the following
30640'define_insn' defines two patterns, one calculating a signed absolute
30641difference and another calculating an unsigned absolute difference:
30642
30643     (define_code_iterator any_max [smax umax])
30644     (define_code_attr paired_min [(smax "smin") (umax "umin")])
30645     (define_insn ...
30646       [(set (match_operand:SI 0 ...)
30647             (minus:SI (any_max:SI (match_operand:SI 1 ...)
30648                                   (match_operand:SI 2 ...))
30649                       (<paired_min>:SI (match_dup 1) (match_dup 2))))]
30650       ...)
30651
30652 The signed version of the instruction uses 'smax' and 'smin' while the
30653unsigned version uses 'umax' and 'umin'.  There are no versions that
30654pair 'smax' with 'umin' or 'umax' with 'smin'.
30655
30656 Here's an example of code iterators in action, taken from the MIPS
30657port:
30658
30659     (define_code_iterator any_cond [unordered ordered unlt unge uneq ltgt unle ungt
30660                                     eq ne gt ge lt le gtu geu ltu leu])
30661
30662     (define_expand "b<code>"
30663       [(set (pc)
30664             (if_then_else (any_cond:CC (cc0)
30665                                        (const_int 0))
30666                           (label_ref (match_operand 0 ""))
30667                           (pc)))]
30668       ""
30669     {
30670       gen_conditional_branch (operands, <CODE>);
30671       DONE;
30672     })
30673
30674 This is equivalent to:
30675
30676     (define_expand "bunordered"
30677       [(set (pc)
30678             (if_then_else (unordered:CC (cc0)
30679                                         (const_int 0))
30680                           (label_ref (match_operand 0 ""))
30681                           (pc)))]
30682       ""
30683     {
30684       gen_conditional_branch (operands, UNORDERED);
30685       DONE;
30686     })
30687
30688     (define_expand "bordered"
30689       [(set (pc)
30690             (if_then_else (ordered:CC (cc0)
30691                                       (const_int 0))
30692                           (label_ref (match_operand 0 ""))
30693                           (pc)))]
30694       ""
30695     {
30696       gen_conditional_branch (operands, ORDERED);
30697       DONE;
30698     })
30699
30700     ...
30701
30702
30703File: gccint.info,  Node: Int Iterators,  Next: Subst Iterators,  Prev: Code Iterators,  Up: Iterators
30704
3070517.23.3 Int Iterators
30706---------------------
30707
30708Int iterators operate in a similar way to code iterators.  *Note Code
30709Iterators::.
30710
30711 The construct:
30712
30713     (define_int_iterator NAME [(INT1 "COND1") ... (INTN "CONDN")])
30714
30715 defines a pseudo integer constant NAME that can be instantiated as INTI
30716if condition CONDI is true.  Each INT must have the same rtx format.
30717*Note RTL Classes::.  Int iterators can appear in only those rtx fields
30718that have 'i' as the specifier.  This means that each INT has to be a
30719constant defined using define_constant or define_c_enum.
30720
30721 As with mode and code iterators, each pattern that uses NAME will be
30722expanded N times, once with all uses of NAME replaced by INT1, once with
30723all uses replaced by INT2, and so on.  *Note Defining Mode Iterators::.
30724
30725 It is possible to define attributes for ints as well as for codes and
30726modes.  Attributes are defined using:
30727
30728     (define_int_attr NAME [(INT1 "VALUE1") ... (INTN "VALUEN")])
30729
30730 Here's an example of int iterators in action, taken from the ARM port:
30731
30732     (define_int_iterator QABSNEG [UNSPEC_VQABS UNSPEC_VQNEG])
30733
30734     (define_int_attr absneg [(UNSPEC_VQABS "abs") (UNSPEC_VQNEG "neg")])
30735
30736     (define_insn "neon_vq<absneg><mode>"
30737       [(set (match_operand:VDQIW 0 "s_register_operand" "=w")
30738     	(unspec:VDQIW [(match_operand:VDQIW 1 "s_register_operand" "w")
30739     		       (match_operand:SI 2 "immediate_operand" "i")]
30740     		      QABSNEG))]
30741       "TARGET_NEON"
30742       "vq<absneg>.<V_s_elem>\t%<V_reg>0, %<V_reg>1"
30743       [(set_attr "type" "neon_vqneg_vqabs")]
30744     )
30745
30746 This is equivalent to:
30747
30748     (define_insn "neon_vqabs<mode>"
30749       [(set (match_operand:VDQIW 0 "s_register_operand" "=w")
30750     	(unspec:VDQIW [(match_operand:VDQIW 1 "s_register_operand" "w")
30751     		       (match_operand:SI 2 "immediate_operand" "i")]
30752     		      UNSPEC_VQABS))]
30753       "TARGET_NEON"
30754       "vqabs.<V_s_elem>\t%<V_reg>0, %<V_reg>1"
30755       [(set_attr "type" "neon_vqneg_vqabs")]
30756     )
30757
30758     (define_insn "neon_vqneg<mode>"
30759       [(set (match_operand:VDQIW 0 "s_register_operand" "=w")
30760     	(unspec:VDQIW [(match_operand:VDQIW 1 "s_register_operand" "w")
30761     		       (match_operand:SI 2 "immediate_operand" "i")]
30762     		      UNSPEC_VQNEG))]
30763       "TARGET_NEON"
30764       "vqneg.<V_s_elem>\t%<V_reg>0, %<V_reg>1"
30765       [(set_attr "type" "neon_vqneg_vqabs")]
30766     )
30767
30768
30769File: gccint.info,  Node: Subst Iterators,  Next: Parameterized Names,  Prev: Int Iterators,  Up: Iterators
30770
3077117.23.4 Subst Iterators
30772-----------------------
30773
30774Subst iterators are special type of iterators with the following
30775restrictions: they could not be declared explicitly, they always have
30776only two values, and they do not have explicit dedicated name.
30777Subst-iterators are triggered only when corresponding subst-attribute is
30778used in RTL-pattern.
30779
30780 Subst iterators transform templates in the following way: the templates
30781are duplicated, the subst-attributes in these templates are replaced
30782with the corresponding values, and a new attribute is implicitly added
30783to the given 'define_insn'/'define_expand'.  The name of the added
30784attribute matches the name of 'define_subst'.  Such attributes are
30785declared implicitly, and it is not allowed to have a 'define_attr' named
30786as a 'define_subst'.
30787
30788 Each subst iterator is linked to a 'define_subst'.  It is declared
30789implicitly by the first appearance of the corresponding
30790'define_subst_attr', and it is not allowed to define it explicitly.
30791
30792 Declarations of subst-attributes have the following syntax:
30793
30794     (define_subst_attr "NAME"
30795       "SUBST-NAME"
30796       "NO-SUBST-VALUE"
30797       "SUBST-APPLIED-VALUE")
30798
30799 NAME is a string with which the given subst-attribute could be referred
30800to.
30801
30802 SUBST-NAME shows which 'define_subst' should be applied to an
30803RTL-template if the given subst-attribute is present in the
30804RTL-template.
30805
30806 NO-SUBST-VALUE is a value with which subst-attribute would be replaced
30807in the first copy of the original RTL-template.
30808
30809 SUBST-APPLIED-VALUE is a value with which subst-attribute would be
30810replaced in the second copy of the original RTL-template.
30811
30812
30813File: gccint.info,  Node: Parameterized Names,  Prev: Subst Iterators,  Up: Iterators
30814
3081517.23.5 Parameterized Names
30816---------------------------
30817
30818Ports sometimes need to apply iterators using C++ code, in order to get
30819the code or RTL pattern for a specific instruction.  For example,
30820suppose we have the 'neon_vq<absneg><mode>' pattern given above:
30821
30822     (define_int_iterator QABSNEG [UNSPEC_VQABS UNSPEC_VQNEG])
30823
30824     (define_int_attr absneg [(UNSPEC_VQABS "abs") (UNSPEC_VQNEG "neg")])
30825
30826     (define_insn "neon_vq<absneg><mode>"
30827       [(set (match_operand:VDQIW 0 "s_register_operand" "=w")
30828     	(unspec:VDQIW [(match_operand:VDQIW 1 "s_register_operand" "w")
30829     		       (match_operand:SI 2 "immediate_operand" "i")]
30830     		      QABSNEG))]
30831       ...
30832     )
30833
30834 A port might need to generate this pattern for a variable 'QABSNEG'
30835value and a variable 'VDQIW' mode.  There are two ways of doing this.
30836The first is to build the rtx for the pattern directly from C++ code;
30837this is a valid technique and avoids any risk of combinatorial
30838explosion.  The second is to prefix the instruction name with the
30839special character '@', which tells GCC to generate the four additional
30840functions below.  In each case, NAME is the name of the instruction
30841without the leading '@' character, without the '<...>' placeholders, and
30842with any underscore before a '<...>' placeholder removed if keeping it
30843would lead to a double or trailing underscore.
30844
30845'insn_code maybe_code_for_NAME (I1, I2, ...)'
30846     See whether replacing the first '<...>' placeholder with iterator
30847     value I1, the second with iterator value I2, and so on, gives a
30848     valid instruction.  Return its code if so, otherwise return
30849     'CODE_FOR_nothing'.
30850
30851'insn_code code_for_NAME (I1, I2, ...)'
30852     Same, but abort the compiler if the requested instruction does not
30853     exist.
30854
30855'rtx maybe_gen_NAME (I1, I2, ..., OP0, OP1, ...)'
30856     Check for a valid instruction in the same way as
30857     'maybe_code_for_NAME'.  If the instruction exists, generate an
30858     instance of it using the operand values given by OP0, OP1, and so
30859     on, otherwise return null.
30860
30861'rtx gen_NAME (I1, I2, ..., OP0, OP1, ...)'
30862     Same, but abort the compiler if the requested instruction does not
30863     exist, or if the instruction generator invoked the 'FAIL' macro.
30864
30865 For example, changing the pattern above to:
30866
30867     (define_insn "@neon_vq<absneg><mode>"
30868       [(set (match_operand:VDQIW 0 "s_register_operand" "=w")
30869     	(unspec:VDQIW [(match_operand:VDQIW 1 "s_register_operand" "w")
30870     		       (match_operand:SI 2 "immediate_operand" "i")]
30871     		      QABSNEG))]
30872       ...
30873     )
30874
30875 would define the same patterns as before, but in addition would
30876generate the four functions below:
30877
30878     insn_code maybe_code_for_neon_vq (int, machine_mode);
30879     insn_code code_for_neon_vq (int, machine_mode);
30880     rtx maybe_gen_neon_vq (int, machine_mode, rtx, rtx, rtx);
30881     rtx gen_neon_vq (int, machine_mode, rtx, rtx, rtx);
30882
30883 Calling 'code_for_neon_vq (UNSPEC_VQABS, V8QImode)' would then give
30884'CODE_FOR_neon_vqabsv8qi'.
30885
30886 It is possible to have multiple '@' patterns with the same name and
30887same types of iterator.  For example:
30888
30889     (define_insn "@some_arithmetic_op<mode>"
30890       [(set (match_operand:INTEGER_MODES 0 "register_operand") ...)]
30891       ...
30892     )
30893
30894     (define_insn "@some_arithmetic_op<mode>"
30895       [(set (match_operand:FLOAT_MODES 0 "register_operand") ...)]
30896       ...
30897     )
30898
30899 would produce a single set of functions that handles both
30900'INTEGER_MODES' and 'FLOAT_MODES'.
30901
30902 It is also possible for these '@' patterns to have different numbers of
30903operands from each other.  For example, patterns with a binary rtl code
30904might take three operands (one output and two inputs) while patterns
30905with a ternary rtl code might take four operands (one output and three
30906inputs).  This combination would produce separate 'maybe_gen_NAME' and
30907'gen_NAME' functions for each operand count, but it would still produce
30908a single 'maybe_code_for_NAME' and a single 'code_for_NAME'.
30909
30910
30911File: gccint.info,  Node: Target Macros,  Next: Host Config,  Prev: Machine Desc,  Up: Top
30912
3091318 Target Description Macros and Functions
30914******************************************
30915
30916In addition to the file 'MACHINE.md', a machine description includes a C
30917header file conventionally given the name 'MACHINE.h' and a C source
30918file named 'MACHINE.c'.  The header file defines numerous macros that
30919convey the information about the target machine that does not fit into
30920the scheme of the '.md' file.  The file 'tm.h' should be a link to
30921'MACHINE.h'.  The header file 'config.h' includes 'tm.h' and most
30922compiler source files include 'config.h'.  The source file defines a
30923variable 'targetm', which is a structure containing pointers to
30924functions and data relating to the target machine.  'MACHINE.c' should
30925also contain their definitions, if they are not defined elsewhere in
30926GCC, and other functions called through the macros defined in the '.h'
30927file.
30928
30929* Menu:
30930
30931* Target Structure::    The 'targetm' variable.
30932* Driver::              Controlling how the driver runs the compilation passes.
30933* Run-time Target::     Defining '-m' options like '-m68000' and '-m68020'.
30934* Per-Function Data::   Defining data structures for per-function information.
30935* Storage Layout::      Defining sizes and alignments of data.
30936* Type Layout::         Defining sizes and properties of basic user data types.
30937* Registers::           Naming and describing the hardware registers.
30938* Register Classes::    Defining the classes of hardware registers.
30939* Stack and Calling::   Defining which way the stack grows and by how much.
30940* Varargs::             Defining the varargs macros.
30941* Trampolines::         Code set up at run time to enter a nested function.
30942* Library Calls::       Controlling how library routines are implicitly called.
30943* Addressing Modes::    Defining addressing modes valid for memory operands.
30944* Anchored Addresses::  Defining how '-fsection-anchors' should work.
30945* Condition Code::      Defining how insns update the condition code.
30946* Costs::               Defining relative costs of different operations.
30947* Scheduling::          Adjusting the behavior of the instruction scheduler.
30948* Sections::            Dividing storage into text, data, and other sections.
30949* PIC::                 Macros for position independent code.
30950* Assembler Format::    Defining how to write insns and pseudo-ops to output.
30951* Debugging Info::      Defining the format of debugging output.
30952* Floating Point::      Handling floating point for cross-compilers.
30953* Mode Switching::      Insertion of mode-switching instructions.
30954* Target Attributes::   Defining target-specific uses of '__attribute__'.
30955* Emulated TLS::        Emulated TLS support.
30956* MIPS Coprocessors::   MIPS coprocessor support and how to customize it.
30957* PCH Target::          Validity checking for precompiled headers.
30958* C++ ABI::             Controlling C++ ABI changes.
30959* D Language and ABI::  Controlling D ABI changes.
30960* Named Address Spaces:: Adding support for named address spaces
30961* Misc::                Everything else.
30962
30963
30964File: gccint.info,  Node: Target Structure,  Next: Driver,  Up: Target Macros
30965
3096618.1 The Global 'targetm' Variable
30967==================================
30968
30969 -- Variable: struct gcc_target targetm
30970     The target '.c' file must define the global 'targetm' variable
30971     which contains pointers to functions and data relating to the
30972     target machine.  The variable is declared in 'target.h';
30973     'target-def.h' defines the macro 'TARGET_INITIALIZER' which is used
30974     to initialize the variable, and macros for the default initializers
30975     for elements of the structure.  The '.c' file should override those
30976     macros for which the default definition is inappropriate.  For
30977     example:
30978          #include "target.h"
30979          #include "target-def.h"
30980
30981          /* Initialize the GCC target structure.  */
30982
30983          #undef TARGET_COMP_TYPE_ATTRIBUTES
30984          #define TARGET_COMP_TYPE_ATTRIBUTES MACHINE_comp_type_attributes
30985
30986          struct gcc_target targetm = TARGET_INITIALIZER;
30987
30988 Where a macro should be defined in the '.c' file in this manner to form
30989part of the 'targetm' structure, it is documented below as a "Target
30990Hook" with a prototype.  Many macros will change in future from being
30991defined in the '.h' file to being part of the 'targetm' structure.
30992
30993 Similarly, there is a 'targetcm' variable for hooks that are specific
30994to front ends for C-family languages, documented as "C Target Hook".
30995This is declared in 'c-family/c-target.h', the initializer
30996'TARGETCM_INITIALIZER' in 'c-family/c-target-def.h'.  If targets
30997initialize 'targetcm' themselves, they should set
30998'target_has_targetcm=yes' in 'config.gcc'; otherwise a default
30999definition is used.
31000
31001 Similarly, there is a 'targetm_common' variable for hooks that are
31002shared between the compiler driver and the compilers proper, documented
31003as "Common Target Hook".  This is declared in 'common/common-target.h',
31004the initializer 'TARGETM_COMMON_INITIALIZER' in
31005'common/common-target-def.h'.  If targets initialize 'targetm_common'
31006themselves, they should set 'target_has_targetm_common=yes' in
31007'config.gcc'; otherwise a default definition is used.
31008
31009 Similarly, there is a 'targetdm' variable for hooks that are specific
31010to the D language front end, documented as "D Target Hook".  This is
31011declared in 'd/d-target.h', the initializer 'TARGETDM_INITIALIZER' in
31012'd/d-target-def.h'.  If targets initialize 'targetdm' themselves, they
31013should set 'target_has_targetdm=yes' in 'config.gcc'; otherwise a
31014default definition is used.
31015
31016
31017File: gccint.info,  Node: Driver,  Next: Run-time Target,  Prev: Target Structure,  Up: Target Macros
31018
3101918.2 Controlling the Compilation Driver, 'gcc'
31020==============================================
31021
31022You can control the compilation driver.
31023
31024 -- Macro: DRIVER_SELF_SPECS
31025     A list of specs for the driver itself.  It should be a suitable
31026     initializer for an array of strings, with no surrounding braces.
31027
31028     The driver applies these specs to its own command line between
31029     loading default 'specs' files (but not command-line specified ones)
31030     and choosing the multilib directory or running any subcommands.  It
31031     applies them in the order given, so each spec can depend on the
31032     options added by earlier ones.  It is also possible to remove
31033     options using '%<OPTION' in the usual way.
31034
31035     This macro can be useful when a port has several interdependent
31036     target options.  It provides a way of standardizing the command
31037     line so that the other specs are easier to write.
31038
31039     Do not define this macro if it does not need to do anything.
31040
31041 -- Macro: OPTION_DEFAULT_SPECS
31042     A list of specs used to support configure-time default options
31043     (i.e. '--with' options) in the driver.  It should be a suitable
31044     initializer for an array of structures, each containing two
31045     strings, without the outermost pair of surrounding braces.
31046
31047     The first item in the pair is the name of the default.  This must
31048     match the code in 'config.gcc' for the target.  The second item is
31049     a spec to apply if a default with this name was specified.  The
31050     string '%(VALUE)' in the spec will be replaced by the value of the
31051     default everywhere it occurs.
31052
31053     The driver will apply these specs to its own command line between
31054     loading default 'specs' files and processing 'DRIVER_SELF_SPECS',
31055     using the same mechanism as 'DRIVER_SELF_SPECS'.
31056
31057     Do not define this macro if it does not need to do anything.
31058
31059 -- Macro: CPP_SPEC
31060     A C string constant that tells the GCC driver program options to
31061     pass to CPP.  It can also specify how to translate options you give
31062     to GCC into options for GCC to pass to the CPP.
31063
31064     Do not define this macro if it does not need to do anything.
31065
31066 -- Macro: CPLUSPLUS_CPP_SPEC
31067     This macro is just like 'CPP_SPEC', but is used for C++, rather
31068     than C.  If you do not define this macro, then the value of
31069     'CPP_SPEC' (if any) will be used instead.
31070
31071 -- Macro: CC1_SPEC
31072     A C string constant that tells the GCC driver program options to
31073     pass to 'cc1', 'cc1plus', 'f771', and the other language front
31074     ends.  It can also specify how to translate options you give to GCC
31075     into options for GCC to pass to front ends.
31076
31077     Do not define this macro if it does not need to do anything.
31078
31079 -- Macro: CC1PLUS_SPEC
31080     A C string constant that tells the GCC driver program options to
31081     pass to 'cc1plus'.  It can also specify how to translate options
31082     you give to GCC into options for GCC to pass to the 'cc1plus'.
31083
31084     Do not define this macro if it does not need to do anything.  Note
31085     that everything defined in CC1_SPEC is already passed to 'cc1plus'
31086     so there is no need to duplicate the contents of CC1_SPEC in
31087     CC1PLUS_SPEC.
31088
31089 -- Macro: ASM_SPEC
31090     A C string constant that tells the GCC driver program options to
31091     pass to the assembler.  It can also specify how to translate
31092     options you give to GCC into options for GCC to pass to the
31093     assembler.  See the file 'sun3.h' for an example of this.
31094
31095     Do not define this macro if it does not need to do anything.
31096
31097 -- Macro: ASM_FINAL_SPEC
31098     A C string constant that tells the GCC driver program how to run
31099     any programs which cleanup after the normal assembler.  Normally,
31100     this is not needed.  See the file 'mips.h' for an example of this.
31101
31102     Do not define this macro if it does not need to do anything.
31103
31104 -- Macro: AS_NEEDS_DASH_FOR_PIPED_INPUT
31105     Define this macro, with no value, if the driver should give the
31106     assembler an argument consisting of a single dash, '-', to instruct
31107     it to read from its standard input (which will be a pipe connected
31108     to the output of the compiler proper).  This argument is given
31109     after any '-o' option specifying the name of the output file.
31110
31111     If you do not define this macro, the assembler is assumed to read
31112     its standard input if given no non-option arguments.  If your
31113     assembler cannot read standard input at all, use a '%{pipe:%e}'
31114     construct; see 'mips.h' for instance.
31115
31116 -- Macro: LINK_SPEC
31117     A C string constant that tells the GCC driver program options to
31118     pass to the linker.  It can also specify how to translate options
31119     you give to GCC into options for GCC to pass to the linker.
31120
31121     Do not define this macro if it does not need to do anything.
31122
31123 -- Macro: LIB_SPEC
31124     Another C string constant used much like 'LINK_SPEC'.  The
31125     difference between the two is that 'LIB_SPEC' is used at the end of
31126     the command given to the linker.
31127
31128     If this macro is not defined, a default is provided that loads the
31129     standard C library from the usual place.  See 'gcc.c'.
31130
31131 -- Macro: LIBGCC_SPEC
31132     Another C string constant that tells the GCC driver program how and
31133     when to place a reference to 'libgcc.a' into the linker command
31134     line.  This constant is placed both before and after the value of
31135     'LIB_SPEC'.
31136
31137     If this macro is not defined, the GCC driver provides a default
31138     that passes the string '-lgcc' to the linker.
31139
31140 -- Macro: REAL_LIBGCC_SPEC
31141     By default, if 'ENABLE_SHARED_LIBGCC' is defined, the 'LIBGCC_SPEC'
31142     is not directly used by the driver program but is instead modified
31143     to refer to different versions of 'libgcc.a' depending on the
31144     values of the command line flags '-static', '-shared',
31145     '-static-libgcc', and '-shared-libgcc'.  On targets where these
31146     modifications are inappropriate, define 'REAL_LIBGCC_SPEC' instead.
31147     'REAL_LIBGCC_SPEC' tells the driver how to place a reference to
31148     'libgcc' on the link command line, but, unlike 'LIBGCC_SPEC', it is
31149     used unmodified.
31150
31151 -- Macro: USE_LD_AS_NEEDED
31152     A macro that controls the modifications to 'LIBGCC_SPEC' mentioned
31153     in 'REAL_LIBGCC_SPEC'.  If nonzero, a spec will be generated that
31154     uses '--as-needed' or equivalent options and the shared 'libgcc' in
31155     place of the static exception handler library, when linking without
31156     any of '-static', '-static-libgcc', or '-shared-libgcc'.
31157
31158 -- Macro: LINK_EH_SPEC
31159     If defined, this C string constant is added to 'LINK_SPEC'.  When
31160     'USE_LD_AS_NEEDED' is zero or undefined, it also affects the
31161     modifications to 'LIBGCC_SPEC' mentioned in 'REAL_LIBGCC_SPEC'.
31162
31163 -- Macro: STARTFILE_SPEC
31164     Another C string constant used much like 'LINK_SPEC'.  The
31165     difference between the two is that 'STARTFILE_SPEC' is used at the
31166     very beginning of the command given to the linker.
31167
31168     If this macro is not defined, a default is provided that loads the
31169     standard C startup file from the usual place.  See 'gcc.c'.
31170
31171 -- Macro: ENDFILE_SPEC
31172     Another C string constant used much like 'LINK_SPEC'.  The
31173     difference between the two is that 'ENDFILE_SPEC' is used at the
31174     very end of the command given to the linker.
31175
31176     Do not define this macro if it does not need to do anything.
31177
31178 -- Macro: THREAD_MODEL_SPEC
31179     GCC '-v' will print the thread model GCC was configured to use.
31180     However, this doesn't work on platforms that are multilibbed on
31181     thread models, such as AIX 4.3.  On such platforms, define
31182     'THREAD_MODEL_SPEC' such that it evaluates to a string without
31183     blanks that names one of the recognized thread models.  '%*', the
31184     default value of this macro, will expand to the value of
31185     'thread_file' set in 'config.gcc'.
31186
31187 -- Macro: SYSROOT_SUFFIX_SPEC
31188     Define this macro to add a suffix to the target sysroot when GCC is
31189     configured with a sysroot.  This will cause GCC to search for
31190     usr/lib, et al, within sysroot+suffix.
31191
31192 -- Macro: SYSROOT_HEADERS_SUFFIX_SPEC
31193     Define this macro to add a headers_suffix to the target sysroot
31194     when GCC is configured with a sysroot.  This will cause GCC to pass
31195     the updated sysroot+headers_suffix to CPP, causing it to search for
31196     usr/include, et al, within sysroot+headers_suffix.
31197
31198 -- Macro: EXTRA_SPECS
31199     Define this macro to provide additional specifications to put in
31200     the 'specs' file that can be used in various specifications like
31201     'CC1_SPEC'.
31202
31203     The definition should be an initializer for an array of structures,
31204     containing a string constant, that defines the specification name,
31205     and a string constant that provides the specification.
31206
31207     Do not define this macro if it does not need to do anything.
31208
31209     'EXTRA_SPECS' is useful when an architecture contains several
31210     related targets, which have various '..._SPECS' which are similar
31211     to each other, and the maintainer would like one central place to
31212     keep these definitions.
31213
31214     For example, the PowerPC System V.4 targets use 'EXTRA_SPECS' to
31215     define either '_CALL_SYSV' when the System V calling sequence is
31216     used or '_CALL_AIX' when the older AIX-based calling sequence is
31217     used.
31218
31219     The 'config/rs6000/rs6000.h' target file defines:
31220
31221          #define EXTRA_SPECS \
31222            { "cpp_sysv_default", CPP_SYSV_DEFAULT },
31223
31224          #define CPP_SYS_DEFAULT ""
31225
31226     The 'config/rs6000/sysv.h' target file defines:
31227          #undef CPP_SPEC
31228          #define CPP_SPEC \
31229          "%{posix: -D_POSIX_SOURCE } \
31230          %{mcall-sysv: -D_CALL_SYSV } \
31231          %{!mcall-sysv: %(cpp_sysv_default) } \
31232          %{msoft-float: -D_SOFT_FLOAT} %{mcpu=403: -D_SOFT_FLOAT}"
31233
31234          #undef CPP_SYSV_DEFAULT
31235          #define CPP_SYSV_DEFAULT "-D_CALL_SYSV"
31236
31237     while the 'config/rs6000/eabiaix.h' target file defines
31238     'CPP_SYSV_DEFAULT' as:
31239
31240          #undef CPP_SYSV_DEFAULT
31241          #define CPP_SYSV_DEFAULT "-D_CALL_AIX"
31242
31243 -- Macro: LINK_LIBGCC_SPECIAL_1
31244     Define this macro if the driver program should find the library
31245     'libgcc.a'.  If you do not define this macro, the driver program
31246     will pass the argument '-lgcc' to tell the linker to do the search.
31247
31248 -- Macro: LINK_GCC_C_SEQUENCE_SPEC
31249     The sequence in which libgcc and libc are specified to the linker.
31250     By default this is '%G %L %G'.
31251
31252 -- Macro: POST_LINK_SPEC
31253     Define this macro to add additional steps to be executed after
31254     linker.  The default value of this macro is empty string.
31255
31256 -- Macro: LINK_COMMAND_SPEC
31257     A C string constant giving the complete command line need to
31258     execute the linker.  When you do this, you will need to update your
31259     port each time a change is made to the link command line within
31260     'gcc.c'.  Therefore, define this macro only if you need to
31261     completely redefine the command line for invoking the linker and
31262     there is no other way to accomplish the effect you need.
31263     Overriding this macro may be avoidable by overriding
31264     'LINK_GCC_C_SEQUENCE_SPEC' instead.
31265
31266 -- Common Target Hook: bool TARGET_ALWAYS_STRIP_DOTDOT
31267     True if '..' components should always be removed from directory
31268     names computed relative to GCC's internal directories, false
31269     (default) if such components should be preserved and directory
31270     names containing them passed to other tools such as the linker.
31271
31272 -- Macro: MULTILIB_DEFAULTS
31273     Define this macro as a C expression for the initializer of an array
31274     of string to tell the driver program which options are defaults for
31275     this target and thus do not need to be handled specially when using
31276     'MULTILIB_OPTIONS'.
31277
31278     Do not define this macro if 'MULTILIB_OPTIONS' is not defined in
31279     the target makefile fragment or if none of the options listed in
31280     'MULTILIB_OPTIONS' are set by default.  *Note Target Fragment::.
31281
31282 -- Macro: RELATIVE_PREFIX_NOT_LINKDIR
31283     Define this macro to tell 'gcc' that it should only translate a
31284     '-B' prefix into a '-L' linker option if the prefix indicates an
31285     absolute file name.
31286
31287 -- Macro: MD_EXEC_PREFIX
31288     If defined, this macro is an additional prefix to try after
31289     'STANDARD_EXEC_PREFIX'.  'MD_EXEC_PREFIX' is not searched when the
31290     compiler is built as a cross compiler.  If you define
31291     'MD_EXEC_PREFIX', then be sure to add it to the list of directories
31292     used to find the assembler in 'configure.ac'.
31293
31294 -- Macro: STANDARD_STARTFILE_PREFIX
31295     Define this macro as a C string constant if you wish to override
31296     the standard choice of 'libdir' as the default prefix to try when
31297     searching for startup files such as 'crt0.o'.
31298     'STANDARD_STARTFILE_PREFIX' is not searched when the compiler is
31299     built as a cross compiler.
31300
31301 -- Macro: STANDARD_STARTFILE_PREFIX_1
31302     Define this macro as a C string constant if you wish to override
31303     the standard choice of '/lib' as a prefix to try after the default
31304     prefix when searching for startup files such as 'crt0.o'.
31305     'STANDARD_STARTFILE_PREFIX_1' is not searched when the compiler is
31306     built as a cross compiler.
31307
31308 -- Macro: STANDARD_STARTFILE_PREFIX_2
31309     Define this macro as a C string constant if you wish to override
31310     the standard choice of '/lib' as yet another prefix to try after
31311     the default prefix when searching for startup files such as
31312     'crt0.o'.  'STANDARD_STARTFILE_PREFIX_2' is not searched when the
31313     compiler is built as a cross compiler.
31314
31315 -- Macro: MD_STARTFILE_PREFIX
31316     If defined, this macro supplies an additional prefix to try after
31317     the standard prefixes.  'MD_EXEC_PREFIX' is not searched when the
31318     compiler is built as a cross compiler.
31319
31320 -- Macro: MD_STARTFILE_PREFIX_1
31321     If defined, this macro supplies yet another prefix to try after the
31322     standard prefixes.  It is not searched when the compiler is built
31323     as a cross compiler.
31324
31325 -- Macro: INIT_ENVIRONMENT
31326     Define this macro as a C string constant if you wish to set
31327     environment variables for programs called by the driver, such as
31328     the assembler and loader.  The driver passes the value of this
31329     macro to 'putenv' to initialize the necessary environment
31330     variables.
31331
31332 -- Macro: LOCAL_INCLUDE_DIR
31333     Define this macro as a C string constant if you wish to override
31334     the standard choice of '/usr/local/include' as the default prefix
31335     to try when searching for local header files.  'LOCAL_INCLUDE_DIR'
31336     comes before 'NATIVE_SYSTEM_HEADER_DIR' (set in 'config.gcc',
31337     normally '/usr/include') in the search order.
31338
31339     Cross compilers do not search either '/usr/local/include' or its
31340     replacement.
31341
31342 -- Macro: NATIVE_SYSTEM_HEADER_COMPONENT
31343     The "component" corresponding to 'NATIVE_SYSTEM_HEADER_DIR'.  See
31344     'INCLUDE_DEFAULTS', below, for the description of components.  If
31345     you do not define this macro, no component is used.
31346
31347 -- Macro: INCLUDE_DEFAULTS
31348     Define this macro if you wish to override the entire default search
31349     path for include files.  For a native compiler, the default search
31350     path usually consists of 'GCC_INCLUDE_DIR', 'LOCAL_INCLUDE_DIR',
31351     'GPLUSPLUS_INCLUDE_DIR', and 'NATIVE_SYSTEM_HEADER_DIR'.  In
31352     addition, 'GPLUSPLUS_INCLUDE_DIR' and 'GCC_INCLUDE_DIR' are defined
31353     automatically by 'Makefile', and specify private search areas for
31354     GCC.  The directory 'GPLUSPLUS_INCLUDE_DIR' is used only for C++
31355     programs.
31356
31357     The definition should be an initializer for an array of structures.
31358     Each array element should have four elements: the directory name (a
31359     string constant), the component name (also a string constant), a
31360     flag for C++-only directories, and a flag showing that the includes
31361     in the directory don't need to be wrapped in 'extern 'C'' when
31362     compiling C++.  Mark the end of the array with a null element.
31363
31364     The component name denotes what GNU package the include file is
31365     part of, if any, in all uppercase letters.  For example, it might
31366     be 'GCC' or 'BINUTILS'.  If the package is part of a
31367     vendor-supplied operating system, code the component name as '0'.
31368
31369     For example, here is the definition used for VAX/VMS:
31370
31371          #define INCLUDE_DEFAULTS \
31372          {                                       \
31373            { "GNU_GXX_INCLUDE:", "G++", 1, 1},   \
31374            { "GNU_CC_INCLUDE:", "GCC", 0, 0},    \
31375            { "SYS$SYSROOT:[SYSLIB.]", 0, 0, 0},  \
31376            { ".", 0, 0, 0},                      \
31377            { 0, 0, 0, 0}                         \
31378          }
31379
31380 Here is the order of prefixes tried for exec files:
31381
31382  1. Any prefixes specified by the user with '-B'.
31383
31384  2. The environment variable 'GCC_EXEC_PREFIX' or, if 'GCC_EXEC_PREFIX'
31385     is not set and the compiler has not been installed in the
31386     configure-time PREFIX, the location in which the compiler has
31387     actually been installed.
31388
31389  3. The directories specified by the environment variable
31390     'COMPILER_PATH'.
31391
31392  4. The macro 'STANDARD_EXEC_PREFIX', if the compiler has been
31393     installed in the configured-time PREFIX.
31394
31395  5. The location '/usr/libexec/gcc/', but only if this is a native
31396     compiler.
31397
31398  6. The location '/usr/lib/gcc/', but only if this is a native
31399     compiler.
31400
31401  7. The macro 'MD_EXEC_PREFIX', if defined, but only if this is a
31402     native compiler.
31403
31404 Here is the order of prefixes tried for startfiles:
31405
31406  1. Any prefixes specified by the user with '-B'.
31407
31408  2. The environment variable 'GCC_EXEC_PREFIX' or its automatically
31409     determined value based on the installed toolchain location.
31410
31411  3. The directories specified by the environment variable
31412     'LIBRARY_PATH' (or port-specific name; native only, cross compilers
31413     do not use this).
31414
31415  4. The macro 'STANDARD_EXEC_PREFIX', but only if the toolchain is
31416     installed in the configured PREFIX or this is a native compiler.
31417
31418  5. The location '/usr/lib/gcc/', but only if this is a native
31419     compiler.
31420
31421  6. The macro 'MD_EXEC_PREFIX', if defined, but only if this is a
31422     native compiler.
31423
31424  7. The macro 'MD_STARTFILE_PREFIX', if defined, but only if this is a
31425     native compiler, or we have a target system root.
31426
31427  8. The macro 'MD_STARTFILE_PREFIX_1', if defined, but only if this is
31428     a native compiler, or we have a target system root.
31429
31430  9. The macro 'STANDARD_STARTFILE_PREFIX', with any sysroot
31431     modifications.  If this path is relative it will be prefixed by
31432     'GCC_EXEC_PREFIX' and the machine suffix or 'STANDARD_EXEC_PREFIX'
31433     and the machine suffix.
31434
31435  10. The macro 'STANDARD_STARTFILE_PREFIX_1', but only if this is a
31436     native compiler, or we have a target system root.  The default for
31437     this macro is '/lib/'.
31438
31439  11. The macro 'STANDARD_STARTFILE_PREFIX_2', but only if this is a
31440     native compiler, or we have a target system root.  The default for
31441     this macro is '/usr/lib/'.
31442
31443
31444File: gccint.info,  Node: Run-time Target,  Next: Per-Function Data,  Prev: Driver,  Up: Target Macros
31445
3144618.3 Run-time Target Specification
31447==================================
31448
31449Here are run-time target specifications.
31450
31451 -- Macro: TARGET_CPU_CPP_BUILTINS ()
31452     This function-like macro expands to a block of code that defines
31453     built-in preprocessor macros and assertions for the target CPU,
31454     using the functions 'builtin_define', 'builtin_define_std' and
31455     'builtin_assert'.  When the front end calls this macro it provides
31456     a trailing semicolon, and since it has finished command line option
31457     processing your code can use those results freely.
31458
31459     'builtin_assert' takes a string in the form you pass to the
31460     command-line option '-A', such as 'cpu=mips', and creates the
31461     assertion.  'builtin_define' takes a string in the form accepted by
31462     option '-D' and unconditionally defines the macro.
31463
31464     'builtin_define_std' takes a string representing the name of an
31465     object-like macro.  If it doesn't lie in the user's namespace,
31466     'builtin_define_std' defines it unconditionally.  Otherwise, it
31467     defines a version with two leading underscores, and another version
31468     with two leading and trailing underscores, and defines the original
31469     only if an ISO standard was not requested on the command line.  For
31470     example, passing 'unix' defines '__unix', '__unix__' and possibly
31471     'unix'; passing '_mips' defines '__mips', '__mips__' and possibly
31472     '_mips', and passing '_ABI64' defines only '_ABI64'.
31473
31474     You can also test for the C dialect being compiled.  The variable
31475     'c_language' is set to one of 'clk_c', 'clk_cplusplus' or
31476     'clk_objective_c'.  Note that if we are preprocessing assembler,
31477     this variable will be 'clk_c' but the function-like macro
31478     'preprocessing_asm_p()' will return true, so you might want to
31479     check for that first.  If you need to check for strict ANSI, the
31480     variable 'flag_iso' can be used.  The function-like macro
31481     'preprocessing_trad_p()' can be used to check for traditional
31482     preprocessing.
31483
31484 -- Macro: TARGET_OS_CPP_BUILTINS ()
31485     Similarly to 'TARGET_CPU_CPP_BUILTINS' but this macro is optional
31486     and is used for the target operating system instead.
31487
31488 -- Macro: TARGET_OBJFMT_CPP_BUILTINS ()
31489     Similarly to 'TARGET_CPU_CPP_BUILTINS' but this macro is optional
31490     and is used for the target object format.  'elfos.h' uses this
31491     macro to define '__ELF__', so you probably do not need to define it
31492     yourself.
31493
31494 -- Variable: extern int target_flags
31495     This variable is declared in 'options.h', which is included before
31496     any target-specific headers.
31497
31498 -- Common Target Hook: int TARGET_DEFAULT_TARGET_FLAGS
31499     This variable specifies the initial value of 'target_flags'.  Its
31500     default setting is 0.
31501
31502 -- Common Target Hook: bool TARGET_HANDLE_OPTION (struct gcc_options
31503          *OPTS, struct gcc_options *OPTS_SET, const struct
31504          cl_decoded_option *DECODED, location_t LOC)
31505     This hook is called whenever the user specifies one of the
31506     target-specific options described by the '.opt' definition files
31507     (*note Options::).  It has the opportunity to do some
31508     option-specific processing and should return true if the option is
31509     valid.  The default definition does nothing but return true.
31510
31511     DECODED specifies the option and its arguments.  OPTS and OPTS_SET
31512     are the 'gcc_options' structures to be used for storing option
31513     state, and LOC is the location at which the option was passed
31514     ('UNKNOWN_LOCATION' except for options passed via attributes).
31515
31516 -- C Target Hook: bool TARGET_HANDLE_C_OPTION (size_t CODE, const char
31517          *ARG, int VALUE)
31518     This target hook is called whenever the user specifies one of the
31519     target-specific C language family options described by the '.opt'
31520     definition files(*note Options::).  It has the opportunity to do
31521     some option-specific processing and should return true if the
31522     option is valid.  The arguments are like for
31523     'TARGET_HANDLE_OPTION'.  The default definition does nothing but
31524     return false.
31525
31526     In general, you should use 'TARGET_HANDLE_OPTION' to handle
31527     options.  However, if processing an option requires routines that
31528     are only available in the C (and related language) front ends, then
31529     you should use 'TARGET_HANDLE_C_OPTION' instead.
31530
31531 -- C Target Hook: tree TARGET_OBJC_CONSTRUCT_STRING_OBJECT (tree
31532          STRING)
31533     Targets may provide a string object type that can be used within
31534     and between C, C++ and their respective Objective-C dialects.  A
31535     string object might, for example, embed encoding and length
31536     information.  These objects are considered opaque to the compiler
31537     and handled as references.  An ideal implementation makes the
31538     composition of the string object match that of the Objective-C
31539     'NSString' ('NXString' for GNUStep), allowing efficient
31540     interworking between C-only and Objective-C code.  If a target
31541     implements string objects then this hook should return a reference
31542     to such an object constructed from the normal 'C' string
31543     representation provided in STRING.  At present, the hook is used by
31544     Objective-C only, to obtain a common-format string object when the
31545     target provides one.
31546
31547 -- C Target Hook: void TARGET_OBJC_DECLARE_UNRESOLVED_CLASS_REFERENCE
31548          (const char *CLASSNAME)
31549     Declare that Objective C class CLASSNAME is referenced by the
31550     current TU.
31551
31552 -- C Target Hook: void TARGET_OBJC_DECLARE_CLASS_DEFINITION (const char
31553          *CLASSNAME)
31554     Declare that Objective C class CLASSNAME is defined by the current
31555     TU.
31556
31557 -- C Target Hook: bool TARGET_STRING_OBJECT_REF_TYPE_P (const_tree
31558          STRINGREF)
31559     If a target implements string objects then this hook should return
31560     'true' if STRINGREF is a valid reference to such an object.
31561
31562 -- C Target Hook: void TARGET_CHECK_STRING_OBJECT_FORMAT_ARG (tree
31563          FORMAT_ARG, tree ARGS_LIST)
31564     If a target implements string objects then this hook should should
31565     provide a facility to check the function arguments in ARGS_LIST
31566     against the format specifiers in FORMAT_ARG where the type of
31567     FORMAT_ARG is one recognized as a valid string reference type.
31568
31569 -- Target Hook: void TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE (void)
31570     This target function is similar to the hook
31571     'TARGET_OPTION_OVERRIDE' but is called when the optimize level is
31572     changed via an attribute or pragma or when it is reset at the end
31573     of the code affected by the attribute or pragma.  It is not called
31574     at the beginning of compilation when 'TARGET_OPTION_OVERRIDE' is
31575     called so if you want to perform these actions then, you should
31576     have 'TARGET_OPTION_OVERRIDE' call
31577     'TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE'.
31578
31579 -- Macro: C_COMMON_OVERRIDE_OPTIONS
31580     This is similar to the 'TARGET_OPTION_OVERRIDE' hook but is only
31581     used in the C language frontends (C, Objective-C, C++,
31582     Objective-C++) and so can be used to alter option flag variables
31583     which only exist in those frontends.
31584
31585 -- Common Target Hook: const struct default_options *
31586          TARGET_OPTION_OPTIMIZATION_TABLE
31587     Some machines may desire to change what optimizations are performed
31588     for various optimization levels.  This variable, if defined,
31589     describes options to enable at particular sets of optimization
31590     levels.  These options are processed once just after the
31591     optimization level is determined and before the remainder of the
31592     command options have been parsed, so may be overridden by other
31593     options passed explicitly.
31594
31595     This processing is run once at program startup and when the
31596     optimization options are changed via '#pragma GCC optimize' or by
31597     using the 'optimize' attribute.
31598
31599 -- Common Target Hook: void TARGET_OPTION_INIT_STRUCT (struct
31600          gcc_options *OPTS)
31601     Set target-dependent initial values of fields in OPTS.
31602
31603 -- Macro: SWITCHABLE_TARGET
31604     Some targets need to switch between substantially different
31605     subtargets during compilation.  For example, the MIPS target has
31606     one subtarget for the traditional MIPS architecture and another for
31607     MIPS16.  Source code can switch between these two subarchitectures
31608     using the 'mips16' and 'nomips16' attributes.
31609
31610     Such subtargets can differ in things like the set of available
31611     registers, the set of available instructions, the costs of various
31612     operations, and so on.  GCC caches a lot of this type of
31613     information in global variables, and recomputing them for each
31614     subtarget takes a significant amount of time.  The compiler
31615     therefore provides a facility for maintaining several versions of
31616     the global variables and quickly switching between them; see
31617     'target-globals.h' for details.
31618
31619     Define this macro to 1 if your target needs this facility.  The
31620     default is 0.
31621
31622 -- Target Hook: bool TARGET_FLOAT_EXCEPTIONS_ROUNDING_SUPPORTED_P
31623          (void)
31624     Returns true if the target supports IEEE 754 floating-point
31625     exceptions and rounding modes, false otherwise.  This is intended
31626     to relate to the 'float' and 'double' types, but not necessarily
31627     'long double'.  By default, returns true if the 'adddf3'
31628     instruction pattern is available and false otherwise, on the
31629     assumption that hardware floating point supports exceptions and
31630     rounding modes but software floating point does not.
31631
31632
31633File: gccint.info,  Node: Per-Function Data,  Next: Storage Layout,  Prev: Run-time Target,  Up: Target Macros
31634
3163518.4 Defining data structures for per-function information.
31636===========================================================
31637
31638If the target needs to store information on a per-function basis, GCC
31639provides a macro and a couple of variables to allow this.  Note, just
31640using statics to store the information is a bad idea, since GCC supports
31641nested functions, so you can be halfway through encoding one function
31642when another one comes along.
31643
31644 GCC defines a data structure called 'struct function' which contains
31645all of the data specific to an individual function.  This structure
31646contains a field called 'machine' whose type is 'struct machine_function
31647*', which can be used by targets to point to their own specific data.
31648
31649 If a target needs per-function specific data it should define the type
31650'struct machine_function' and also the macro 'INIT_EXPANDERS'.  This
31651macro should be used to initialize the function pointer
31652'init_machine_status'.  This pointer is explained below.
31653
31654 One typical use of per-function, target specific data is to create an
31655RTX to hold the register containing the function's return address.  This
31656RTX can then be used to implement the '__builtin_return_address'
31657function, for level 0.
31658
31659 Note--earlier implementations of GCC used a single data area to hold
31660all of the per-function information.  Thus when processing of a nested
31661function began the old per-function data had to be pushed onto a stack,
31662and when the processing was finished, it had to be popped off the stack.
31663GCC used to provide function pointers called 'save_machine_status' and
31664'restore_machine_status' to handle the saving and restoring of the
31665target specific information.  Since the single data area approach is no
31666longer used, these pointers are no longer supported.
31667
31668 -- Macro: INIT_EXPANDERS
31669     Macro called to initialize any target specific information.  This
31670     macro is called once per function, before generation of any RTL has
31671     begun.  The intention of this macro is to allow the initialization
31672     of the function pointer 'init_machine_status'.
31673
31674 -- Variable: void (*)(struct function *) init_machine_status
31675     If this function pointer is non-'NULL' it will be called once per
31676     function, before function compilation starts, in order to allow the
31677     target to perform any target specific initialization of the 'struct
31678     function' structure.  It is intended that this would be used to
31679     initialize the 'machine' of that structure.
31680
31681     'struct machine_function' structures are expected to be freed by
31682     GC.  Generally, any memory that they reference must be allocated by
31683     using GC allocation, including the structure itself.
31684
31685
31686File: gccint.info,  Node: Storage Layout,  Next: Type Layout,  Prev: Per-Function Data,  Up: Target Macros
31687
3168818.5 Storage Layout
31689===================
31690
31691Note that the definitions of the macros in this table which are sizes or
31692alignments measured in bits do not need to be constant.  They can be C
31693expressions that refer to static variables, such as the 'target_flags'.
31694*Note Run-time Target::.
31695
31696 -- Macro: BITS_BIG_ENDIAN
31697     Define this macro to have the value 1 if the most significant bit
31698     in a byte has the lowest number; otherwise define it to have the
31699     value zero.  This means that bit-field instructions count from the
31700     most significant bit.  If the machine has no bit-field
31701     instructions, then this must still be defined, but it doesn't
31702     matter which value it is defined to.  This macro need not be a
31703     constant.
31704
31705     This macro does not affect the way structure fields are packed into
31706     bytes or words; that is controlled by 'BYTES_BIG_ENDIAN'.
31707
31708 -- Macro: BYTES_BIG_ENDIAN
31709     Define this macro to have the value 1 if the most significant byte
31710     in a word has the lowest number.  This macro need not be a
31711     constant.
31712
31713 -- Macro: WORDS_BIG_ENDIAN
31714     Define this macro to have the value 1 if, in a multiword object,
31715     the most significant word has the lowest number.  This applies to
31716     both memory locations and registers; see 'REG_WORDS_BIG_ENDIAN' if
31717     the order of words in memory is not the same as the order in
31718     registers.  This macro need not be a constant.
31719
31720 -- Macro: REG_WORDS_BIG_ENDIAN
31721     On some machines, the order of words in a multiword object differs
31722     between registers in memory.  In such a situation, define this
31723     macro to describe the order of words in a register.  The macro
31724     'WORDS_BIG_ENDIAN' controls the order of words in memory.
31725
31726 -- Macro: FLOAT_WORDS_BIG_ENDIAN
31727     Define this macro to have the value 1 if 'DFmode', 'XFmode' or
31728     'TFmode' floating point numbers are stored in memory with the word
31729     containing the sign bit at the lowest address; otherwise define it
31730     to have the value 0.  This macro need not be a constant.
31731
31732     You need not define this macro if the ordering is the same as for
31733     multi-word integers.
31734
31735 -- Macro: BITS_PER_WORD
31736     Number of bits in a word.  If you do not define this macro, the
31737     default is 'BITS_PER_UNIT * UNITS_PER_WORD'.
31738
31739 -- Macro: MAX_BITS_PER_WORD
31740     Maximum number of bits in a word.  If this is undefined, the
31741     default is 'BITS_PER_WORD'.  Otherwise, it is the constant value
31742     that is the largest value that 'BITS_PER_WORD' can have at
31743     run-time.
31744
31745 -- Macro: UNITS_PER_WORD
31746     Number of storage units in a word; normally the size of a
31747     general-purpose register, a power of two from 1 or 8.
31748
31749 -- Macro: MIN_UNITS_PER_WORD
31750     Minimum number of units in a word.  If this is undefined, the
31751     default is 'UNITS_PER_WORD'.  Otherwise, it is the constant value
31752     that is the smallest value that 'UNITS_PER_WORD' can have at
31753     run-time.
31754
31755 -- Macro: POINTER_SIZE
31756     Width of a pointer, in bits.  You must specify a value no wider
31757     than the width of 'Pmode'.  If it is not equal to the width of
31758     'Pmode', you must define 'POINTERS_EXTEND_UNSIGNED'.  If you do not
31759     specify a value the default is 'BITS_PER_WORD'.
31760
31761 -- Macro: POINTERS_EXTEND_UNSIGNED
31762     A C expression that determines how pointers should be extended from
31763     'ptr_mode' to either 'Pmode' or 'word_mode'.  It is greater than
31764     zero if pointers should be zero-extended, zero if they should be
31765     sign-extended, and negative if some other sort of conversion is
31766     needed.  In the last case, the extension is done by the target's
31767     'ptr_extend' instruction.
31768
31769     You need not define this macro if the 'ptr_mode', 'Pmode' and
31770     'word_mode' are all the same width.
31771
31772 -- Macro: PROMOTE_MODE (M, UNSIGNEDP, TYPE)
31773     A macro to update M and UNSIGNEDP when an object whose type is TYPE
31774     and which has the specified mode and signedness is to be stored in
31775     a register.  This macro is only called when TYPE is a scalar type.
31776
31777     On most RISC machines, which only have operations that operate on a
31778     full register, define this macro to set M to 'word_mode' if M is an
31779     integer mode narrower than 'BITS_PER_WORD'.  In most cases, only
31780     integer modes should be widened because wider-precision
31781     floating-point operations are usually more expensive than their
31782     narrower counterparts.
31783
31784     For most machines, the macro definition does not change UNSIGNEDP.
31785     However, some machines, have instructions that preferentially
31786     handle either signed or unsigned quantities of certain modes.  For
31787     example, on the DEC Alpha, 32-bit loads from memory and 32-bit add
31788     instructions sign-extend the result to 64 bits.  On such machines,
31789     set UNSIGNEDP according to which kind of extension is more
31790     efficient.
31791
31792     Do not define this macro if it would never modify M.
31793
31794 -- Target Hook: enum flt_eval_method TARGET_C_EXCESS_PRECISION (enum
31795          excess_precision_type TYPE)
31796     Return a value, with the same meaning as the C99 macro
31797     'FLT_EVAL_METHOD' that describes which excess precision should be
31798     applied.  TYPE is either 'EXCESS_PRECISION_TYPE_IMPLICIT',
31799     'EXCESS_PRECISION_TYPE_FAST', or 'EXCESS_PRECISION_TYPE_STANDARD'.
31800     For 'EXCESS_PRECISION_TYPE_IMPLICIT', the target should return
31801     which precision and range operations will be implictly evaluated in
31802     regardless of the excess precision explicitly added.  For
31803     'EXCESS_PRECISION_TYPE_STANDARD' and 'EXCESS_PRECISION_TYPE_FAST',
31804     the target should return the explicit excess precision that should
31805     be added depending on the value set for
31806     '-fexcess-precision=[standard|fast]'.  Note that unpredictable
31807     explicit excess precision does not make sense, so a target should
31808     never return 'FLT_EVAL_METHOD_UNPREDICTABLE' when TYPE is
31809     'EXCESS_PRECISION_TYPE_STANDARD' or 'EXCESS_PRECISION_TYPE_FAST'.
31810
31811 -- Target Hook: machine_mode TARGET_PROMOTE_FUNCTION_MODE (const_tree
31812          TYPE, machine_mode MODE, int *PUNSIGNEDP, const_tree FUNTYPE,
31813          int FOR_RETURN)
31814     Like 'PROMOTE_MODE', but it is applied to outgoing function
31815     arguments or function return values.  The target hook should return
31816     the new mode and possibly change '*PUNSIGNEDP' if the promotion
31817     should change signedness.  This function is called only for scalar
31818     _or pointer_ types.
31819
31820     FOR_RETURN allows to distinguish the promotion of arguments and
31821     return values.  If it is '1', a return value is being promoted and
31822     'TARGET_FUNCTION_VALUE' must perform the same promotions done here.
31823     If it is '2', the returned mode should be that of the register in
31824     which an incoming parameter is copied, or the outgoing result is
31825     computed; then the hook should return the same mode as
31826     'promote_mode', though the signedness may be different.
31827
31828     TYPE can be NULL when promoting function arguments of libcalls.
31829
31830     The default is to not promote arguments and return values.  You can
31831     also define the hook to
31832     'default_promote_function_mode_always_promote' if you would like to
31833     apply the same rules given by 'PROMOTE_MODE'.
31834
31835 -- Macro: PARM_BOUNDARY
31836     Normal alignment required for function parameters on the stack, in
31837     bits.  All stack parameters receive at least this much alignment
31838     regardless of data type.  On most machines, this is the same as the
31839     size of an integer.
31840
31841 -- Macro: STACK_BOUNDARY
31842     Define this macro to the minimum alignment enforced by hardware for
31843     the stack pointer on this machine.  The definition is a C
31844     expression for the desired alignment (measured in bits).  This
31845     value is used as a default if 'PREFERRED_STACK_BOUNDARY' is not
31846     defined.  On most machines, this should be the same as
31847     'PARM_BOUNDARY'.
31848
31849 -- Macro: PREFERRED_STACK_BOUNDARY
31850     Define this macro if you wish to preserve a certain alignment for
31851     the stack pointer, greater than what the hardware enforces.  The
31852     definition is a C expression for the desired alignment (measured in
31853     bits).  This macro must evaluate to a value equal to or larger than
31854     'STACK_BOUNDARY'.
31855
31856 -- Macro: INCOMING_STACK_BOUNDARY
31857     Define this macro if the incoming stack boundary may be different
31858     from 'PREFERRED_STACK_BOUNDARY'.  This macro must evaluate to a
31859     value equal to or larger than 'STACK_BOUNDARY'.
31860
31861 -- Macro: FUNCTION_BOUNDARY
31862     Alignment required for a function entry point, in bits.
31863
31864 -- Macro: BIGGEST_ALIGNMENT
31865     Biggest alignment that any data type can require on this machine,
31866     in bits.  Note that this is not the biggest alignment that is
31867     supported, just the biggest alignment that, when violated, may
31868     cause a fault.
31869
31870 -- Target Hook: HOST_WIDE_INT TARGET_ABSOLUTE_BIGGEST_ALIGNMENT
31871     If defined, this target hook specifies the absolute biggest
31872     alignment that a type or variable can have on this machine,
31873     otherwise, 'BIGGEST_ALIGNMENT' is used.
31874
31875 -- Macro: MALLOC_ABI_ALIGNMENT
31876     Alignment, in bits, a C conformant malloc implementation has to
31877     provide.  If not defined, the default value is 'BITS_PER_WORD'.
31878
31879 -- Macro: ATTRIBUTE_ALIGNED_VALUE
31880     Alignment used by the '__attribute__ ((aligned))' construct.  If
31881     not defined, the default value is 'BIGGEST_ALIGNMENT'.
31882
31883 -- Macro: MINIMUM_ATOMIC_ALIGNMENT
31884     If defined, the smallest alignment, in bits, that can be given to
31885     an object that can be referenced in one operation, without
31886     disturbing any nearby object.  Normally, this is 'BITS_PER_UNIT',
31887     but may be larger on machines that don't have byte or half-word
31888     store operations.
31889
31890 -- Macro: BIGGEST_FIELD_ALIGNMENT
31891     Biggest alignment that any structure or union field can require on
31892     this machine, in bits.  If defined, this overrides
31893     'BIGGEST_ALIGNMENT' for structure and union fields only, unless the
31894     field alignment has been set by the '__attribute__ ((aligned (N)))'
31895     construct.
31896
31897 -- Macro: ADJUST_FIELD_ALIGN (FIELD, TYPE, COMPUTED)
31898     An expression for the alignment of a structure field FIELD of type
31899     TYPE if the alignment computed in the usual way (including applying
31900     of 'BIGGEST_ALIGNMENT' and 'BIGGEST_FIELD_ALIGNMENT' to the
31901     alignment) is COMPUTED.  It overrides alignment only if the field
31902     alignment has not been set by the '__attribute__ ((aligned (N)))'
31903     construct.  Note that FIELD may be 'NULL_TREE' in case we just
31904     query for the minimum alignment of a field of type TYPE in
31905     structure context.
31906
31907 -- Macro: MAX_STACK_ALIGNMENT
31908     Biggest stack alignment guaranteed by the backend.  Use this macro
31909     to specify the maximum alignment of a variable on stack.
31910
31911     If not defined, the default value is 'STACK_BOUNDARY'.
31912
31913 -- Macro: MAX_OFILE_ALIGNMENT
31914     Biggest alignment supported by the object file format of this
31915     machine.  Use this macro to limit the alignment which can be
31916     specified using the '__attribute__ ((aligned (N)))' construct for
31917     functions and objects with static storage duration.  The alignment
31918     of automatic objects may exceed the object file format maximum up
31919     to the maximum supported by GCC. If not defined, the default value
31920     is 'BIGGEST_ALIGNMENT'.
31921
31922     On systems that use ELF, the default (in 'config/elfos.h') is the
31923     largest supported 32-bit ELF section alignment representable on a
31924     32-bit host e.g. '(((uint64_t) 1 << 28) * 8)'.  On 32-bit ELF the
31925     largest supported section alignment in bits is '(0x80000000 * 8)',
31926     but this is not representable on 32-bit hosts.
31927
31928 -- Target Hook: HOST_WIDE_INT TARGET_STATIC_RTX_ALIGNMENT (machine_mode
31929          MODE)
31930     This hook returns the preferred alignment in bits for a
31931     statically-allocated rtx, such as a constant pool entry.  MODE is
31932     the mode of the rtx.  The default implementation returns
31933     'GET_MODE_ALIGNMENT (MODE)'.
31934
31935 -- Macro: DATA_ALIGNMENT (TYPE, BASIC-ALIGN)
31936     If defined, a C expression to compute the alignment for a variable
31937     in the static store.  TYPE is the data type, and BASIC-ALIGN is the
31938     alignment that the object would ordinarily have.  The value of this
31939     macro is used instead of that alignment to align the object.
31940
31941     If this macro is not defined, then BASIC-ALIGN is used.
31942
31943     One use of this macro is to increase alignment of medium-size data
31944     to make it all fit in fewer cache lines.  Another is to cause
31945     character arrays to be word-aligned so that 'strcpy' calls that
31946     copy constants to character arrays can be done inline.
31947
31948 -- Macro: DATA_ABI_ALIGNMENT (TYPE, BASIC-ALIGN)
31949     Similar to 'DATA_ALIGNMENT', but for the cases where the ABI
31950     mandates some alignment increase, instead of optimization only
31951     purposes.  E.g. AMD x86-64 psABI says that variables with array
31952     type larger than 15 bytes must be aligned to 16 byte boundaries.
31953
31954     If this macro is not defined, then BASIC-ALIGN is used.
31955
31956 -- Target Hook: HOST_WIDE_INT TARGET_CONSTANT_ALIGNMENT (const_tree
31957          CONSTANT, HOST_WIDE_INT BASIC_ALIGN)
31958     This hook returns the alignment in bits of a constant that is being
31959     placed in memory.  CONSTANT is the constant and BASIC_ALIGN is the
31960     alignment that the object would ordinarily have.
31961
31962     The default definition just returns BASIC_ALIGN.
31963
31964     The typical use of this hook is to increase alignment for string
31965     constants to be word aligned so that 'strcpy' calls that copy
31966     constants can be done inline.  The function
31967     'constant_alignment_word_strings' provides such a definition.
31968
31969 -- Macro: LOCAL_ALIGNMENT (TYPE, BASIC-ALIGN)
31970     If defined, a C expression to compute the alignment for a variable
31971     in the local store.  TYPE is the data type, and BASIC-ALIGN is the
31972     alignment that the object would ordinarily have.  The value of this
31973     macro is used instead of that alignment to align the object.
31974
31975     If this macro is not defined, then BASIC-ALIGN is used.
31976
31977     One use of this macro is to increase alignment of medium-size data
31978     to make it all fit in fewer cache lines.
31979
31980     If the value of this macro has a type, it should be an unsigned
31981     type.
31982
31983 -- Target Hook: HOST_WIDE_INT TARGET_VECTOR_ALIGNMENT (const_tree TYPE)
31984     This hook can be used to define the alignment for a vector of type
31985     TYPE, in order to comply with a platform ABI. The default is to
31986     require natural alignment for vector types.  The alignment returned
31987     by this hook must be a power-of-two multiple of the default
31988     alignment of the vector element type.
31989
31990 -- Macro: STACK_SLOT_ALIGNMENT (TYPE, MODE, BASIC-ALIGN)
31991     If defined, a C expression to compute the alignment for stack slot.
31992     TYPE is the data type, MODE is the widest mode available, and
31993     BASIC-ALIGN is the alignment that the slot would ordinarily have.
31994     The value of this macro is used instead of that alignment to align
31995     the slot.
31996
31997     If this macro is not defined, then BASIC-ALIGN is used when TYPE is
31998     'NULL'.  Otherwise, 'LOCAL_ALIGNMENT' will be used.
31999
32000     This macro is to set alignment of stack slot to the maximum
32001     alignment of all possible modes which the slot may have.
32002
32003     If the value of this macro has a type, it should be an unsigned
32004     type.
32005
32006 -- Macro: LOCAL_DECL_ALIGNMENT (DECL)
32007     If defined, a C expression to compute the alignment for a local
32008     variable DECL.
32009
32010     If this macro is not defined, then 'LOCAL_ALIGNMENT (TREE_TYPE
32011     (DECL), DECL_ALIGN (DECL))' is used.
32012
32013     One use of this macro is to increase alignment of medium-size data
32014     to make it all fit in fewer cache lines.
32015
32016     If the value of this macro has a type, it should be an unsigned
32017     type.
32018
32019 -- Macro: MINIMUM_ALIGNMENT (EXP, MODE, ALIGN)
32020     If defined, a C expression to compute the minimum required
32021     alignment for dynamic stack realignment purposes for EXP (a type or
32022     decl), MODE, assuming normal alignment ALIGN.
32023
32024     If this macro is not defined, then ALIGN will be used.
32025
32026 -- Macro: EMPTY_FIELD_BOUNDARY
32027     Alignment in bits to be given to a structure bit-field that follows
32028     an empty field such as 'int : 0;'.
32029
32030     If 'PCC_BITFIELD_TYPE_MATTERS' is true, it overrides this macro.
32031
32032 -- Macro: STRUCTURE_SIZE_BOUNDARY
32033     Number of bits which any structure or union's size must be a
32034     multiple of.  Each structure or union's size is rounded up to a
32035     multiple of this.
32036
32037     If you do not define this macro, the default is the same as
32038     'BITS_PER_UNIT'.
32039
32040 -- Macro: STRICT_ALIGNMENT
32041     Define this macro to be the value 1 if instructions will fail to
32042     work if given data not on the nominal alignment.  If instructions
32043     will merely go slower in that case, define this macro as 0.
32044
32045 -- Macro: PCC_BITFIELD_TYPE_MATTERS
32046     Define this if you wish to imitate the way many other C compilers
32047     handle alignment of bit-fields and the structures that contain
32048     them.
32049
32050     The behavior is that the type written for a named bit-field ('int',
32051     'short', or other integer type) imposes an alignment for the entire
32052     structure, as if the structure really did contain an ordinary field
32053     of that type.  In addition, the bit-field is placed within the
32054     structure so that it would fit within such a field, not crossing a
32055     boundary for it.
32056
32057     Thus, on most machines, a named bit-field whose type is written as
32058     'int' would not cross a four-byte boundary, and would force
32059     four-byte alignment for the whole structure.  (The alignment used
32060     may not be four bytes; it is controlled by the other alignment
32061     parameters.)
32062
32063     An unnamed bit-field will not affect the alignment of the
32064     containing structure.
32065
32066     If the macro is defined, its definition should be a C expression; a
32067     nonzero value for the expression enables this behavior.
32068
32069     Note that if this macro is not defined, or its value is zero, some
32070     bit-fields may cross more than one alignment boundary.  The
32071     compiler can support such references if there are 'insv', 'extv',
32072     and 'extzv' insns that can directly reference memory.
32073
32074     The other known way of making bit-fields work is to define
32075     'STRUCTURE_SIZE_BOUNDARY' as large as 'BIGGEST_ALIGNMENT'.  Then
32076     every structure can be accessed with fullwords.
32077
32078     Unless the machine has bit-field instructions or you define
32079     'STRUCTURE_SIZE_BOUNDARY' that way, you must define
32080     'PCC_BITFIELD_TYPE_MATTERS' to have a nonzero value.
32081
32082     If your aim is to make GCC use the same conventions for laying out
32083     bit-fields as are used by another compiler, here is how to
32084     investigate what the other compiler does.  Compile and run this
32085     program:
32086
32087          struct foo1
32088          {
32089            char x;
32090            char :0;
32091            char y;
32092          };
32093
32094          struct foo2
32095          {
32096            char x;
32097            int :0;
32098            char y;
32099          };
32100
32101          main ()
32102          {
32103            printf ("Size of foo1 is %d\n",
32104                    sizeof (struct foo1));
32105            printf ("Size of foo2 is %d\n",
32106                    sizeof (struct foo2));
32107            exit (0);
32108          }
32109
32110     If this prints 2 and 5, then the compiler's behavior is what you
32111     would get from 'PCC_BITFIELD_TYPE_MATTERS'.
32112
32113 -- Macro: BITFIELD_NBYTES_LIMITED
32114     Like 'PCC_BITFIELD_TYPE_MATTERS' except that its effect is limited
32115     to aligning a bit-field within the structure.
32116
32117 -- Target Hook: bool TARGET_ALIGN_ANON_BITFIELD (void)
32118     When 'PCC_BITFIELD_TYPE_MATTERS' is true this hook will determine
32119     whether unnamed bitfields affect the alignment of the containing
32120     structure.  The hook should return true if the structure should
32121     inherit the alignment requirements of an unnamed bitfield's type.
32122
32123 -- Target Hook: bool TARGET_NARROW_VOLATILE_BITFIELD (void)
32124     This target hook should return 'true' if accesses to volatile
32125     bitfields should use the narrowest mode possible.  It should return
32126     'false' if these accesses should use the bitfield container type.
32127
32128     The default is 'false'.
32129
32130 -- Target Hook: bool TARGET_MEMBER_TYPE_FORCES_BLK (const_tree FIELD,
32131          machine_mode MODE)
32132     Return true if a structure, union or array containing FIELD should
32133     be accessed using 'BLKMODE'.
32134
32135     If FIELD is the only field in the structure, MODE is its mode,
32136     otherwise MODE is VOIDmode.  MODE is provided in the case where
32137     structures of one field would require the structure's mode to
32138     retain the field's mode.
32139
32140     Normally, this is not needed.
32141
32142 -- Macro: ROUND_TYPE_ALIGN (TYPE, COMPUTED, SPECIFIED)
32143     Define this macro as an expression for the alignment of a type
32144     (given by TYPE as a tree node) if the alignment computed in the
32145     usual way is COMPUTED and the alignment explicitly specified was
32146     SPECIFIED.
32147
32148     The default is to use SPECIFIED if it is larger; otherwise, use the
32149     smaller of COMPUTED and 'BIGGEST_ALIGNMENT'
32150
32151 -- Macro: MAX_FIXED_MODE_SIZE
32152     An integer expression for the size in bits of the largest integer
32153     machine mode that should actually be used.  All integer machine
32154     modes of this size or smaller can be used for structures and unions
32155     with the appropriate sizes.  If this macro is undefined,
32156     'GET_MODE_BITSIZE (DImode)' is assumed.
32157
32158 -- Macro: STACK_SAVEAREA_MODE (SAVE_LEVEL)
32159     If defined, an expression of type 'machine_mode' that specifies the
32160     mode of the save area operand of a 'save_stack_LEVEL' named pattern
32161     (*note Standard Names::).  SAVE_LEVEL is one of 'SAVE_BLOCK',
32162     'SAVE_FUNCTION', or 'SAVE_NONLOCAL' and selects which of the three
32163     named patterns is having its mode specified.
32164
32165     You need not define this macro if it always returns 'Pmode'.  You
32166     would most commonly define this macro if the 'save_stack_LEVEL'
32167     patterns need to support both a 32- and a 64-bit mode.
32168
32169 -- Macro: STACK_SIZE_MODE
32170     If defined, an expression of type 'machine_mode' that specifies the
32171     mode of the size increment operand of an 'allocate_stack' named
32172     pattern (*note Standard Names::).
32173
32174     You need not define this macro if it always returns 'word_mode'.
32175     You would most commonly define this macro if the 'allocate_stack'
32176     pattern needs to support both a 32- and a 64-bit mode.
32177
32178 -- Target Hook: scalar_int_mode TARGET_LIBGCC_CMP_RETURN_MODE (void)
32179     This target hook should return the mode to be used for the return
32180     value of compare instructions expanded to libgcc calls.  If not
32181     defined 'word_mode' is returned which is the right choice for a
32182     majority of targets.
32183
32184 -- Target Hook: scalar_int_mode TARGET_LIBGCC_SHIFT_COUNT_MODE (void)
32185     This target hook should return the mode to be used for the shift
32186     count operand of shift instructions expanded to libgcc calls.  If
32187     not defined 'word_mode' is returned which is the right choice for a
32188     majority of targets.
32189
32190 -- Target Hook: scalar_int_mode TARGET_UNWIND_WORD_MODE (void)
32191     Return machine mode to be used for '_Unwind_Word' type.  The
32192     default is to use 'word_mode'.
32193
32194 -- Target Hook: bool TARGET_MS_BITFIELD_LAYOUT_P (const_tree
32195          RECORD_TYPE)
32196     This target hook returns 'true' if bit-fields in the given
32197     RECORD_TYPE are to be laid out following the rules of Microsoft
32198     Visual C/C++, namely: (i) a bit-field won't share the same storage
32199     unit with the previous bit-field if their underlying types have
32200     different sizes, and the bit-field will be aligned to the highest
32201     alignment of the underlying types of itself and of the previous
32202     bit-field; (ii) a zero-sized bit-field will affect the alignment of
32203     the whole enclosing structure, even if it is unnamed; except that
32204     (iii) a zero-sized bit-field will be disregarded unless it follows
32205     another bit-field of nonzero size.  If this hook returns 'true',
32206     other macros that control bit-field layout are ignored.
32207
32208     When a bit-field is inserted into a packed record, the whole size
32209     of the underlying type is used by one or more same-size adjacent
32210     bit-fields (that is, if its long:3, 32 bits is used in the record,
32211     and any additional adjacent long bit-fields are packed into the
32212     same chunk of 32 bits.  However, if the size changes, a new field
32213     of that size is allocated).  In an unpacked record, this is the
32214     same as using alignment, but not equivalent when packing.
32215
32216     If both MS bit-fields and '__attribute__((packed))' are used, the
32217     latter will take precedence.  If '__attribute__((packed))' is used
32218     on a single field when MS bit-fields are in use, it will take
32219     precedence for that field, but the alignment of the rest of the
32220     structure may affect its placement.
32221
32222 -- Target Hook: bool TARGET_DECIMAL_FLOAT_SUPPORTED_P (void)
32223     Returns true if the target supports decimal floating point.
32224
32225 -- Target Hook: bool TARGET_FIXED_POINT_SUPPORTED_P (void)
32226     Returns true if the target supports fixed-point arithmetic.
32227
32228 -- Target Hook: void TARGET_EXPAND_TO_RTL_HOOK (void)
32229     This hook is called just before expansion into rtl, allowing the
32230     target to perform additional initializations or analysis before the
32231     expansion.  For example, the rs6000 port uses it to allocate a
32232     scratch stack slot for use in copying SDmode values between memory
32233     and floating point registers whenever the function being expanded
32234     has any SDmode usage.
32235
32236 -- Target Hook: void TARGET_INSTANTIATE_DECLS (void)
32237     This hook allows the backend to perform additional instantiations
32238     on rtl that are not actually in any insns yet, but will be later.
32239
32240 -- Target Hook: const char * TARGET_MANGLE_TYPE (const_tree TYPE)
32241     If your target defines any fundamental types, or any types your
32242     target uses should be mangled differently from the default, define
32243     this hook to return the appropriate encoding for these types as
32244     part of a C++ mangled name.  The TYPE argument is the tree
32245     structure representing the type to be mangled.  The hook may be
32246     applied to trees which are not target-specific fundamental types;
32247     it should return 'NULL' for all such types, as well as arguments it
32248     does not recognize.  If the return value is not 'NULL', it must
32249     point to a statically-allocated string constant.
32250
32251     Target-specific fundamental types might be new fundamental types or
32252     qualified versions of ordinary fundamental types.  Encode new
32253     fundamental types as 'u N NAME', where NAME is the name used for
32254     the type in source code, and N is the length of NAME in decimal.
32255     Encode qualified versions of ordinary types as 'U N NAME CODE',
32256     where NAME is the name used for the type qualifier in source code,
32257     N is the length of NAME as above, and CODE is the code used to
32258     represent the unqualified version of this type.  (See
32259     'write_builtin_type' in 'cp/mangle.c' for the list of codes.)  In
32260     both cases the spaces are for clarity; do not include any spaces in
32261     your string.
32262
32263     This hook is applied to types prior to typedef resolution.  If the
32264     mangled name for a particular type depends only on that type's main
32265     variant, you can perform typedef resolution yourself using
32266     'TYPE_MAIN_VARIANT' before mangling.
32267
32268     The default version of this hook always returns 'NULL', which is
32269     appropriate for a target that does not define any new fundamental
32270     types.
32271
32272
32273File: gccint.info,  Node: Type Layout,  Next: Registers,  Prev: Storage Layout,  Up: Target Macros
32274
3227518.6 Layout of Source Language Data Types
32276=========================================
32277
32278These macros define the sizes and other characteristics of the standard
32279basic data types used in programs being compiled.  Unlike the macros in
32280the previous section, these apply to specific features of C and related
32281languages, rather than to fundamental aspects of storage layout.
32282
32283 -- Macro: INT_TYPE_SIZE
32284     A C expression for the size in bits of the type 'int' on the target
32285     machine.  If you don't define this, the default is one word.
32286
32287 -- Macro: SHORT_TYPE_SIZE
32288     A C expression for the size in bits of the type 'short' on the
32289     target machine.  If you don't define this, the default is half a
32290     word.  (If this would be less than one storage unit, it is rounded
32291     up to one unit.)
32292
32293 -- Macro: LONG_TYPE_SIZE
32294     A C expression for the size in bits of the type 'long' on the
32295     target machine.  If you don't define this, the default is one word.
32296
32297 -- Macro: ADA_LONG_TYPE_SIZE
32298     On some machines, the size used for the Ada equivalent of the type
32299     'long' by a native Ada compiler differs from that used by C.  In
32300     that situation, define this macro to be a C expression to be used
32301     for the size of that type.  If you don't define this, the default
32302     is the value of 'LONG_TYPE_SIZE'.
32303
32304 -- Macro: LONG_LONG_TYPE_SIZE
32305     A C expression for the size in bits of the type 'long long' on the
32306     target machine.  If you don't define this, the default is two
32307     words.  If you want to support GNU Ada on your machine, the value
32308     of this macro must be at least 64.
32309
32310 -- Macro: CHAR_TYPE_SIZE
32311     A C expression for the size in bits of the type 'char' on the
32312     target machine.  If you don't define this, the default is
32313     'BITS_PER_UNIT'.
32314
32315 -- Macro: BOOL_TYPE_SIZE
32316     A C expression for the size in bits of the C++ type 'bool' and C99
32317     type '_Bool' on the target machine.  If you don't define this, and
32318     you probably shouldn't, the default is 'CHAR_TYPE_SIZE'.
32319
32320 -- Macro: FLOAT_TYPE_SIZE
32321     A C expression for the size in bits of the type 'float' on the
32322     target machine.  If you don't define this, the default is one word.
32323
32324 -- Macro: DOUBLE_TYPE_SIZE
32325     A C expression for the size in bits of the type 'double' on the
32326     target machine.  If you don't define this, the default is two
32327     words.
32328
32329 -- Macro: LONG_DOUBLE_TYPE_SIZE
32330     A C expression for the size in bits of the type 'long double' on
32331     the target machine.  If you don't define this, the default is two
32332     words.
32333
32334 -- Macro: SHORT_FRACT_TYPE_SIZE
32335     A C expression for the size in bits of the type 'short _Fract' on
32336     the target machine.  If you don't define this, the default is
32337     'BITS_PER_UNIT'.
32338
32339 -- Macro: FRACT_TYPE_SIZE
32340     A C expression for the size in bits of the type '_Fract' on the
32341     target machine.  If you don't define this, the default is
32342     'BITS_PER_UNIT * 2'.
32343
32344 -- Macro: LONG_FRACT_TYPE_SIZE
32345     A C expression for the size in bits of the type 'long _Fract' on
32346     the target machine.  If you don't define this, the default is
32347     'BITS_PER_UNIT * 4'.
32348
32349 -- Macro: LONG_LONG_FRACT_TYPE_SIZE
32350     A C expression for the size in bits of the type 'long long _Fract'
32351     on the target machine.  If you don't define this, the default is
32352     'BITS_PER_UNIT * 8'.
32353
32354 -- Macro: SHORT_ACCUM_TYPE_SIZE
32355     A C expression for the size in bits of the type 'short _Accum' on
32356     the target machine.  If you don't define this, the default is
32357     'BITS_PER_UNIT * 2'.
32358
32359 -- Macro: ACCUM_TYPE_SIZE
32360     A C expression for the size in bits of the type '_Accum' on the
32361     target machine.  If you don't define this, the default is
32362     'BITS_PER_UNIT * 4'.
32363
32364 -- Macro: LONG_ACCUM_TYPE_SIZE
32365     A C expression for the size in bits of the type 'long _Accum' on
32366     the target machine.  If you don't define this, the default is
32367     'BITS_PER_UNIT * 8'.
32368
32369 -- Macro: LONG_LONG_ACCUM_TYPE_SIZE
32370     A C expression for the size in bits of the type 'long long _Accum'
32371     on the target machine.  If you don't define this, the default is
32372     'BITS_PER_UNIT * 16'.
32373
32374 -- Macro: LIBGCC2_GNU_PREFIX
32375     This macro corresponds to the 'TARGET_LIBFUNC_GNU_PREFIX' target
32376     hook and should be defined if that hook is overriden to be true.
32377     It causes function names in libgcc to be changed to use a '__gnu_'
32378     prefix for their name rather than the default '__'.  A port which
32379     uses this macro should also arrange to use 't-gnu-prefix' in the
32380     libgcc 'config.host'.
32381
32382 -- Macro: WIDEST_HARDWARE_FP_SIZE
32383     A C expression for the size in bits of the widest floating-point
32384     format supported by the hardware.  If you define this macro, you
32385     must specify a value less than or equal to the value of
32386     'LONG_DOUBLE_TYPE_SIZE'.  If you do not define this macro, the
32387     value of 'LONG_DOUBLE_TYPE_SIZE' is the default.
32388
32389 -- Macro: DEFAULT_SIGNED_CHAR
32390     An expression whose value is 1 or 0, according to whether the type
32391     'char' should be signed or unsigned by default.  The user can
32392     always override this default with the options '-fsigned-char' and
32393     '-funsigned-char'.
32394
32395 -- Target Hook: bool TARGET_DEFAULT_SHORT_ENUMS (void)
32396     This target hook should return true if the compiler should give an
32397     'enum' type only as many bytes as it takes to represent the range
32398     of possible values of that type.  It should return false if all
32399     'enum' types should be allocated like 'int'.
32400
32401     The default is to return false.
32402
32403 -- Macro: SIZE_TYPE
32404     A C expression for a string describing the name of the data type to
32405     use for size values.  The typedef name 'size_t' is defined using
32406     the contents of the string.
32407
32408     The string can contain more than one keyword.  If so, separate them
32409     with spaces, and write first any length keyword, then 'unsigned' if
32410     appropriate, and finally 'int'.  The string must exactly match one
32411     of the data type names defined in the function
32412     'c_common_nodes_and_builtins' in the file 'c-family/c-common.c'.
32413     You may not omit 'int' or change the order--that would cause the
32414     compiler to crash on startup.
32415
32416     If you don't define this macro, the default is '"long unsigned
32417     int"'.
32418
32419 -- Macro: SIZETYPE
32420     GCC defines internal types ('sizetype', 'ssizetype', 'bitsizetype'
32421     and 'sbitsizetype') for expressions dealing with size.  This macro
32422     is a C expression for a string describing the name of the data type
32423     from which the precision of 'sizetype' is extracted.
32424
32425     The string has the same restrictions as 'SIZE_TYPE' string.
32426
32427     If you don't define this macro, the default is 'SIZE_TYPE'.
32428
32429 -- Macro: PTRDIFF_TYPE
32430     A C expression for a string describing the name of the data type to
32431     use for the result of subtracting two pointers.  The typedef name
32432     'ptrdiff_t' is defined using the contents of the string.  See
32433     'SIZE_TYPE' above for more information.
32434
32435     If you don't define this macro, the default is '"long int"'.
32436
32437 -- Macro: WCHAR_TYPE
32438     A C expression for a string describing the name of the data type to
32439     use for wide characters.  The typedef name 'wchar_t' is defined
32440     using the contents of the string.  See 'SIZE_TYPE' above for more
32441     information.
32442
32443     If you don't define this macro, the default is '"int"'.
32444
32445 -- Macro: WCHAR_TYPE_SIZE
32446     A C expression for the size in bits of the data type for wide
32447     characters.  This is used in 'cpp', which cannot make use of
32448     'WCHAR_TYPE'.
32449
32450 -- Macro: WINT_TYPE
32451     A C expression for a string describing the name of the data type to
32452     use for wide characters passed to 'printf' and returned from
32453     'getwc'.  The typedef name 'wint_t' is defined using the contents
32454     of the string.  See 'SIZE_TYPE' above for more information.
32455
32456     If you don't define this macro, the default is '"unsigned int"'.
32457
32458 -- Macro: INTMAX_TYPE
32459     A C expression for a string describing the name of the data type
32460     that can represent any value of any standard or extended signed
32461     integer type.  The typedef name 'intmax_t' is defined using the
32462     contents of the string.  See 'SIZE_TYPE' above for more
32463     information.
32464
32465     If you don't define this macro, the default is the first of
32466     '"int"', '"long int"', or '"long long int"' that has as much
32467     precision as 'long long int'.
32468
32469 -- Macro: UINTMAX_TYPE
32470     A C expression for a string describing the name of the data type
32471     that can represent any value of any standard or extended unsigned
32472     integer type.  The typedef name 'uintmax_t' is defined using the
32473     contents of the string.  See 'SIZE_TYPE' above for more
32474     information.
32475
32476     If you don't define this macro, the default is the first of
32477     '"unsigned int"', '"long unsigned int"', or '"long long unsigned
32478     int"' that has as much precision as 'long long unsigned int'.
32479
32480 -- Macro: SIG_ATOMIC_TYPE
32481 -- Macro: INT8_TYPE
32482 -- Macro: INT16_TYPE
32483 -- Macro: INT32_TYPE
32484 -- Macro: INT64_TYPE
32485 -- Macro: UINT8_TYPE
32486 -- Macro: UINT16_TYPE
32487 -- Macro: UINT32_TYPE
32488 -- Macro: UINT64_TYPE
32489 -- Macro: INT_LEAST8_TYPE
32490 -- Macro: INT_LEAST16_TYPE
32491 -- Macro: INT_LEAST32_TYPE
32492 -- Macro: INT_LEAST64_TYPE
32493 -- Macro: UINT_LEAST8_TYPE
32494 -- Macro: UINT_LEAST16_TYPE
32495 -- Macro: UINT_LEAST32_TYPE
32496 -- Macro: UINT_LEAST64_TYPE
32497 -- Macro: INT_FAST8_TYPE
32498 -- Macro: INT_FAST16_TYPE
32499 -- Macro: INT_FAST32_TYPE
32500 -- Macro: INT_FAST64_TYPE
32501 -- Macro: UINT_FAST8_TYPE
32502 -- Macro: UINT_FAST16_TYPE
32503 -- Macro: UINT_FAST32_TYPE
32504 -- Macro: UINT_FAST64_TYPE
32505 -- Macro: INTPTR_TYPE
32506 -- Macro: UINTPTR_TYPE
32507     C expressions for the standard types 'sig_atomic_t', 'int8_t',
32508     'int16_t', 'int32_t', 'int64_t', 'uint8_t', 'uint16_t', 'uint32_t',
32509     'uint64_t', 'int_least8_t', 'int_least16_t', 'int_least32_t',
32510     'int_least64_t', 'uint_least8_t', 'uint_least16_t',
32511     'uint_least32_t', 'uint_least64_t', 'int_fast8_t', 'int_fast16_t',
32512     'int_fast32_t', 'int_fast64_t', 'uint_fast8_t', 'uint_fast16_t',
32513     'uint_fast32_t', 'uint_fast64_t', 'intptr_t', and 'uintptr_t'.  See
32514     'SIZE_TYPE' above for more information.
32515
32516     If any of these macros evaluates to a null pointer, the
32517     corresponding type is not supported; if GCC is configured to
32518     provide '<stdint.h>' in such a case, the header provided may not
32519     conform to C99, depending on the type in question.  The defaults
32520     for all of these macros are null pointers.
32521
32522 -- Macro: TARGET_PTRMEMFUNC_VBIT_LOCATION
32523     The C++ compiler represents a pointer-to-member-function with a
32524     struct that looks like:
32525
32526            struct {
32527              union {
32528                void (*fn)();
32529                ptrdiff_t vtable_index;
32530              };
32531              ptrdiff_t delta;
32532            };
32533
32534     The C++ compiler must use one bit to indicate whether the function
32535     that will be called through a pointer-to-member-function is
32536     virtual.  Normally, we assume that the low-order bit of a function
32537     pointer must always be zero.  Then, by ensuring that the
32538     vtable_index is odd, we can distinguish which variant of the union
32539     is in use.  But, on some platforms function pointers can be odd,
32540     and so this doesn't work.  In that case, we use the low-order bit
32541     of the 'delta' field, and shift the remainder of the 'delta' field
32542     to the left.
32543
32544     GCC will automatically make the right selection about where to
32545     store this bit using the 'FUNCTION_BOUNDARY' setting for your
32546     platform.  However, some platforms such as ARM/Thumb have
32547     'FUNCTION_BOUNDARY' set such that functions always start at even
32548     addresses, but the lowest bit of pointers to functions indicate
32549     whether the function at that address is in ARM or Thumb mode.  If
32550     this is the case of your architecture, you should define this macro
32551     to 'ptrmemfunc_vbit_in_delta'.
32552
32553     In general, you should not have to define this macro.  On
32554     architectures in which function addresses are always even,
32555     according to 'FUNCTION_BOUNDARY', GCC will automatically define
32556     this macro to 'ptrmemfunc_vbit_in_pfn'.
32557
32558 -- Macro: TARGET_VTABLE_USES_DESCRIPTORS
32559     Normally, the C++ compiler uses function pointers in vtables.  This
32560     macro allows the target to change to use "function descriptors"
32561     instead.  Function descriptors are found on targets for whom a
32562     function pointer is actually a small data structure.  Normally the
32563     data structure consists of the actual code address plus a data
32564     pointer to which the function's data is relative.
32565
32566     If vtables are used, the value of this macro should be the number
32567     of words that the function descriptor occupies.
32568
32569 -- Macro: TARGET_VTABLE_ENTRY_ALIGN
32570     By default, the vtable entries are void pointers, the so the
32571     alignment is the same as pointer alignment.  The value of this
32572     macro specifies the alignment of the vtable entry in bits.  It
32573     should be defined only when special alignment is necessary.  */
32574
32575 -- Macro: TARGET_VTABLE_DATA_ENTRY_DISTANCE
32576     There are a few non-descriptor entries in the vtable at offsets
32577     below zero.  If these entries must be padded (say, to preserve the
32578     alignment specified by 'TARGET_VTABLE_ENTRY_ALIGN'), set this to
32579     the number of words in each data entry.
32580
32581
32582File: gccint.info,  Node: Registers,  Next: Register Classes,  Prev: Type Layout,  Up: Target Macros
32583
3258418.7 Register Usage
32585===================
32586
32587This section explains how to describe what registers the target machine
32588has, and how (in general) they can be used.
32589
32590 The description of which registers a specific instruction can use is
32591done with register classes; see *note Register Classes::.  For
32592information on using registers to access a stack frame, see *note Frame
32593Registers::.  For passing values in registers, see *note Register
32594Arguments::.  For returning values in registers, see *note Scalar
32595Return::.
32596
32597* Menu:
32598
32599* Register Basics::             Number and kinds of registers.
32600* Allocation Order::            Order in which registers are allocated.
32601* Values in Registers::         What kinds of values each reg can hold.
32602* Leaf Functions::              Renumbering registers for leaf functions.
32603* Stack Registers::             Handling a register stack such as 80387.
32604
32605
32606File: gccint.info,  Node: Register Basics,  Next: Allocation Order,  Up: Registers
32607
3260818.7.1 Basic Characteristics of Registers
32609-----------------------------------------
32610
32611Registers have various characteristics.
32612
32613 -- Macro: FIRST_PSEUDO_REGISTER
32614     Number of hardware registers known to the compiler.  They receive
32615     numbers 0 through 'FIRST_PSEUDO_REGISTER-1'; thus, the first pseudo
32616     register's number really is assigned the number
32617     'FIRST_PSEUDO_REGISTER'.
32618
32619 -- Macro: FIXED_REGISTERS
32620     An initializer that says which registers are used for fixed
32621     purposes all throughout the compiled code and are therefore not
32622     available for general allocation.  These would include the stack
32623     pointer, the frame pointer (except on machines where that can be
32624     used as a general register when no frame pointer is needed), the
32625     program counter on machines where that is considered one of the
32626     addressable registers, and any other numbered register with a
32627     standard use.
32628
32629     This information is expressed as a sequence of numbers, separated
32630     by commas and surrounded by braces.  The Nth number is 1 if
32631     register N is fixed, 0 otherwise.
32632
32633     The table initialized from this macro, and the table initialized by
32634     the following one, may be overridden at run time either
32635     automatically, by the actions of the macro
32636     'CONDITIONAL_REGISTER_USAGE', or by the user with the command
32637     options '-ffixed-REG', '-fcall-used-REG' and '-fcall-saved-REG'.
32638
32639 -- Macro: CALL_USED_REGISTERS
32640     Like 'FIXED_REGISTERS' but has 1 for each register that is
32641     clobbered (in general) by function calls as well as for fixed
32642     registers.  This macro therefore identifies the registers that are
32643     not available for general allocation of values that must live
32644     across function calls.
32645
32646     If a register has 0 in 'CALL_USED_REGISTERS', the compiler
32647     automatically saves it on function entry and restores it on
32648     function exit, if the register is used within the function.
32649
32650     Exactly one of 'CALL_USED_REGISTERS' and
32651     'CALL_REALLY_USED_REGISTERS' must be defined.  Modern ports should
32652     define 'CALL_REALLY_USED_REGISTERS'.
32653
32654 -- Macro: CALL_REALLY_USED_REGISTERS
32655     Like 'CALL_USED_REGISTERS' except this macro doesn't require that
32656     the entire set of 'FIXED_REGISTERS' be included.
32657     ('CALL_USED_REGISTERS' must be a superset of 'FIXED_REGISTERS').
32658
32659     Exactly one of 'CALL_USED_REGISTERS' and
32660     'CALL_REALLY_USED_REGISTERS' must be defined.  Modern ports should
32661     define 'CALL_REALLY_USED_REGISTERS'.
32662
32663 -- Target Hook: const predefined_function_abi & TARGET_FNTYPE_ABI
32664          (const_tree TYPE)
32665     Return the ABI used by a function with type TYPE; see the
32666     definition of 'predefined_function_abi' for details of the ABI
32667     descriptor.  Targets only need to define this hook if they support
32668     interoperability between several ABIs in the same translation unit.
32669
32670 -- Target Hook: const predefined_function_abi & TARGET_INSN_CALLEE_ABI
32671          (const rtx_insn *INSN)
32672     This hook returns a description of the ABI used by the target of
32673     call instruction INSN; see the definition of
32674     'predefined_function_abi' for details of the ABI descriptor.  Only
32675     the global function 'insn_callee_abi' should call this hook
32676     directly.
32677
32678     Targets only need to define this hook if they support
32679     interoperability between several ABIs in the same translation unit.
32680
32681 -- Target Hook: bool TARGET_HARD_REGNO_CALL_PART_CLOBBERED (unsigned
32682          int ABI_ID, unsigned int REGNO, machine_mode MODE)
32683     ABIs usually specify that calls must preserve the full contents of
32684     a particular register, or that calls can alter any part of a
32685     particular register.  This information is captured by the target
32686     macro 'CALL_REALLY_USED_REGISTERS'.  However, some ABIs specify
32687     that calls must preserve certain bits of a particular register but
32688     can alter others.  This hook should return true if this applies to
32689     at least one of the registers in '(reg:MODE REGNO)', and if as a
32690     result the call would alter part of the MODE value.  For example,
32691     if a call preserves the low 32 bits of a 64-bit hard register REGNO
32692     but can clobber the upper 32 bits, this hook should return true for
32693     a 64-bit mode but false for a 32-bit mode.
32694
32695     The value of ABI_ID comes from the 'predefined_function_abi'
32696     structure that describes the ABI of the call; see the definition of
32697     the structure for more details.  If (as is usual) the target uses
32698     the same ABI for all functions in a translation unit, ABI_ID is
32699     always 0.
32700
32701     The default implementation returns false, which is correct for
32702     targets that don't have partly call-clobbered registers.
32703
32704 -- Target Hook: const char * TARGET_GET_MULTILIB_ABI_NAME (void)
32705     This hook returns name of multilib ABI name.
32706
32707 -- Target Hook: void TARGET_CONDITIONAL_REGISTER_USAGE (void)
32708     This hook may conditionally modify five variables 'fixed_regs',
32709     'call_used_regs', 'global_regs', 'reg_names', and
32710     'reg_class_contents', to take into account any dependence of these
32711     register sets on target flags.  The first three of these are of
32712     type 'char []' (interpreted as boolean vectors).  'global_regs' is
32713     a 'const char *[]', and 'reg_class_contents' is a 'HARD_REG_SET'.
32714     Before the macro is called, 'fixed_regs', 'call_used_regs',
32715     'reg_class_contents', and 'reg_names' have been initialized from
32716     'FIXED_REGISTERS', 'CALL_USED_REGISTERS', 'REG_CLASS_CONTENTS', and
32717     'REGISTER_NAMES', respectively.  'global_regs' has been cleared,
32718     and any '-ffixed-REG', '-fcall-used-REG' and '-fcall-saved-REG'
32719     command options have been applied.
32720
32721     If the usage of an entire class of registers depends on the target
32722     flags, you may indicate this to GCC by using this macro to modify
32723     'fixed_regs' and 'call_used_regs' to 1 for each of the registers in
32724     the classes which should not be used by GCC.  Also make
32725     'define_register_constraint's return 'NO_REGS' for constraints that
32726     shouldn't be used.
32727
32728     (However, if this class is not included in 'GENERAL_REGS' and all
32729     of the insn patterns whose constraints permit this class are
32730     controlled by target switches, then GCC will automatically avoid
32731     using these registers when the target switches are opposed to
32732     them.)
32733
32734 -- Macro: INCOMING_REGNO (OUT)
32735     Define this macro if the target machine has register windows.  This
32736     C expression returns the register number as seen by the called
32737     function corresponding to the register number OUT as seen by the
32738     calling function.  Return OUT if register number OUT is not an
32739     outbound register.
32740
32741 -- Macro: OUTGOING_REGNO (IN)
32742     Define this macro if the target machine has register windows.  This
32743     C expression returns the register number as seen by the calling
32744     function corresponding to the register number IN as seen by the
32745     called function.  Return IN if register number IN is not an inbound
32746     register.
32747
32748 -- Macro: LOCAL_REGNO (REGNO)
32749     Define this macro if the target machine has register windows.  This
32750     C expression returns true if the register is call-saved but is in
32751     the register window.  Unlike most call-saved registers, such
32752     registers need not be explicitly restored on function exit or
32753     during non-local gotos.
32754
32755 -- Macro: PC_REGNUM
32756     If the program counter has a register number, define this as that
32757     register number.  Otherwise, do not define it.
32758
32759
32760File: gccint.info,  Node: Allocation Order,  Next: Values in Registers,  Prev: Register Basics,  Up: Registers
32761
3276218.7.2 Order of Allocation of Registers
32763---------------------------------------
32764
32765Registers are allocated in order.
32766
32767 -- Macro: REG_ALLOC_ORDER
32768     If defined, an initializer for a vector of integers, containing the
32769     numbers of hard registers in the order in which GCC should prefer
32770     to use them (from most preferred to least).
32771
32772     If this macro is not defined, registers are used lowest numbered
32773     first (all else being equal).
32774
32775     One use of this macro is on machines where the highest numbered
32776     registers must always be saved and the save-multiple-registers
32777     instruction supports only sequences of consecutive registers.  On
32778     such machines, define 'REG_ALLOC_ORDER' to be an initializer that
32779     lists the highest numbered allocable register first.
32780
32781 -- Macro: ADJUST_REG_ALLOC_ORDER
32782     A C statement (sans semicolon) to choose the order in which to
32783     allocate hard registers for pseudo-registers local to a basic
32784     block.
32785
32786     Store the desired register order in the array 'reg_alloc_order'.
32787     Element 0 should be the register to allocate first; element 1, the
32788     next register; and so on.
32789
32790     The macro body should not assume anything about the contents of
32791     'reg_alloc_order' before execution of the macro.
32792
32793     On most machines, it is not necessary to define this macro.
32794
32795 -- Macro: HONOR_REG_ALLOC_ORDER
32796     Normally, IRA tries to estimate the costs for saving a register in
32797     the prologue and restoring it in the epilogue.  This discourages it
32798     from using call-saved registers.  If a machine wants to ensure that
32799     IRA allocates registers in the order given by REG_ALLOC_ORDER even
32800     if some call-saved registers appear earlier than call-used ones,
32801     then define this macro as a C expression to nonzero.  Default is 0.
32802
32803 -- Macro: IRA_HARD_REGNO_ADD_COST_MULTIPLIER (REGNO)
32804     In some case register allocation order is not enough for the
32805     Integrated Register Allocator (IRA) to generate a good code.  If
32806     this macro is defined, it should return a floating point value
32807     based on REGNO.  The cost of using REGNO for a pseudo will be
32808     increased by approximately the pseudo's usage frequency times the
32809     value returned by this macro.  Not defining this macro is
32810     equivalent to having it always return '0.0'.
32811
32812     On most machines, it is not necessary to define this macro.
32813
32814
32815File: gccint.info,  Node: Values in Registers,  Next: Leaf Functions,  Prev: Allocation Order,  Up: Registers
32816
3281718.7.3 How Values Fit in Registers
32818----------------------------------
32819
32820This section discusses the macros that describe which kinds of values
32821(specifically, which machine modes) each register can hold, and how many
32822consecutive registers are needed for a given mode.
32823
32824 -- Target Hook: unsigned int TARGET_HARD_REGNO_NREGS (unsigned int
32825          REGNO, machine_mode MODE)
32826     This hook returns the number of consecutive hard registers,
32827     starting at register number REGNO, required to hold a value of mode
32828     MODE.  This hook must never return zero, even if a register cannot
32829     hold the requested mode - indicate that with
32830     'TARGET_HARD_REGNO_MODE_OK' and/or 'TARGET_CAN_CHANGE_MODE_CLASS'
32831     instead.
32832
32833     The default definition returns the number of words in MODE.
32834
32835 -- Macro: HARD_REGNO_NREGS_HAS_PADDING (REGNO, MODE)
32836     A C expression that is nonzero if a value of mode MODE, stored in
32837     memory, ends with padding that causes it to take up more space than
32838     in registers starting at register number REGNO (as determined by
32839     multiplying GCC's notion of the size of the register when
32840     containing this mode by the number of registers returned by
32841     'TARGET_HARD_REGNO_NREGS').  By default this is zero.
32842
32843     For example, if a floating-point value is stored in three 32-bit
32844     registers but takes up 128 bits in memory, then this would be
32845     nonzero.
32846
32847     This macros only needs to be defined if there are cases where
32848     'subreg_get_info' would otherwise wrongly determine that a 'subreg'
32849     can be represented by an offset to the register number, when in
32850     fact such a 'subreg' would contain some of the padding not stored
32851     in registers and so not be representable.
32852
32853 -- Macro: HARD_REGNO_NREGS_WITH_PADDING (REGNO, MODE)
32854     For values of REGNO and MODE for which
32855     'HARD_REGNO_NREGS_HAS_PADDING' returns nonzero, a C expression
32856     returning the greater number of registers required to hold the
32857     value including any padding.  In the example above, the value would
32858     be four.
32859
32860 -- Macro: REGMODE_NATURAL_SIZE (MODE)
32861     Define this macro if the natural size of registers that hold values
32862     of mode MODE is not the word size.  It is a C expression that
32863     should give the natural size in bytes for the specified mode.  It
32864     is used by the register allocator to try to optimize its results.
32865     This happens for example on SPARC 64-bit where the natural size of
32866     floating-point registers is still 32-bit.
32867
32868 -- Target Hook: bool TARGET_HARD_REGNO_MODE_OK (unsigned int REGNO,
32869          machine_mode MODE)
32870     This hook returns true if it is permissible to store a value of
32871     mode MODE in hard register number REGNO (or in several registers
32872     starting with that one).  The default definition returns true
32873     unconditionally.
32874
32875     You need not include code to check for the numbers of fixed
32876     registers, because the allocation mechanism considers them to be
32877     always occupied.
32878
32879     On some machines, double-precision values must be kept in even/odd
32880     register pairs.  You can implement that by defining this hook to
32881     reject odd register numbers for such modes.
32882
32883     The minimum requirement for a mode to be OK in a register is that
32884     the 'movMODE' instruction pattern support moves between the
32885     register and other hard register in the same class and that moving
32886     a value into the register and back out not alter it.
32887
32888     Since the same instruction used to move 'word_mode' will work for
32889     all narrower integer modes, it is not necessary on any machine for
32890     this hook to distinguish between these modes, provided you define
32891     patterns 'movhi', etc., to take advantage of this.  This is useful
32892     because of the interaction between 'TARGET_HARD_REGNO_MODE_OK' and
32893     'TARGET_MODES_TIEABLE_P'; it is very desirable for all integer
32894     modes to be tieable.
32895
32896     Many machines have special registers for floating point arithmetic.
32897     Often people assume that floating point machine modes are allowed
32898     only in floating point registers.  This is not true.  Any registers
32899     that can hold integers can safely _hold_ a floating point machine
32900     mode, whether or not floating arithmetic can be done on it in those
32901     registers.  Integer move instructions can be used to move the
32902     values.
32903
32904     On some machines, though, the converse is true: fixed-point machine
32905     modes may not go in floating registers.  This is true if the
32906     floating registers normalize any value stored in them, because
32907     storing a non-floating value there would garble it.  In this case,
32908     'TARGET_HARD_REGNO_MODE_OK' should reject fixed-point machine modes
32909     in floating registers.  But if the floating registers do not
32910     automatically normalize, if you can store any bit pattern in one
32911     and retrieve it unchanged without a trap, then any machine mode may
32912     go in a floating register, so you can define this hook to say so.
32913
32914     The primary significance of special floating registers is rather
32915     that they are the registers acceptable in floating point arithmetic
32916     instructions.  However, this is of no concern to
32917     'TARGET_HARD_REGNO_MODE_OK'.  You handle it by writing the proper
32918     constraints for those instructions.
32919
32920     On some machines, the floating registers are especially slow to
32921     access, so that it is better to store a value in a stack frame than
32922     in such a register if floating point arithmetic is not being done.
32923     As long as the floating registers are not in class 'GENERAL_REGS',
32924     they will not be used unless some pattern's constraint asks for
32925     one.
32926
32927 -- Macro: HARD_REGNO_RENAME_OK (FROM, TO)
32928     A C expression that is nonzero if it is OK to rename a hard
32929     register FROM to another hard register TO.
32930
32931     One common use of this macro is to prevent renaming of a register
32932     to another register that is not saved by a prologue in an interrupt
32933     handler.
32934
32935     The default is always nonzero.
32936
32937 -- Target Hook: bool TARGET_MODES_TIEABLE_P (machine_mode MODE1,
32938          machine_mode MODE2)
32939     This hook returns true if a value of mode MODE1 is accessible in
32940     mode MODE2 without copying.
32941
32942     If 'TARGET_HARD_REGNO_MODE_OK (R, MODE1)' and
32943     'TARGET_HARD_REGNO_MODE_OK (R, MODE2)' are always the same for any
32944     R, then 'TARGET_MODES_TIEABLE_P (MODE1, MODE2)' should be true.  If
32945     they differ for any R, you should define this hook to return false
32946     unless some other mechanism ensures the accessibility of the value
32947     in a narrower mode.
32948
32949     You should define this hook to return true in as many cases as
32950     possible since doing so will allow GCC to perform better register
32951     allocation.  The default definition returns true unconditionally.
32952
32953 -- Target Hook: bool TARGET_HARD_REGNO_SCRATCH_OK (unsigned int REGNO)
32954     This target hook should return 'true' if it is OK to use a hard
32955     register REGNO as scratch reg in peephole2.
32956
32957     One common use of this macro is to prevent using of a register that
32958     is not saved by a prologue in an interrupt handler.
32959
32960     The default version of this hook always returns 'true'.
32961
32962 -- Macro: AVOID_CCMODE_COPIES
32963     Define this macro if the compiler should avoid copies to/from
32964     'CCmode' registers.  You should only define this macro if support
32965     for copying to/from 'CCmode' is incomplete.
32966
32967
32968File: gccint.info,  Node: Leaf Functions,  Next: Stack Registers,  Prev: Values in Registers,  Up: Registers
32969
3297018.7.4 Handling Leaf Functions
32971------------------------------
32972
32973On some machines, a leaf function (i.e., one which makes no calls) can
32974run more efficiently if it does not make its own register window.  Often
32975this means it is required to receive its arguments in the registers
32976where they are passed by the caller, instead of the registers where they
32977would normally arrive.
32978
32979 The special treatment for leaf functions generally applies only when
32980other conditions are met; for example, often they may use only those
32981registers for its own variables and temporaries.  We use the term "leaf
32982function" to mean a function that is suitable for this special handling,
32983so that functions with no calls are not necessarily "leaf functions".
32984
32985 GCC assigns register numbers before it knows whether the function is
32986suitable for leaf function treatment.  So it needs to renumber the
32987registers in order to output a leaf function.  The following macros
32988accomplish this.
32989
32990 -- Macro: LEAF_REGISTERS
32991     Name of a char vector, indexed by hard register number, which
32992     contains 1 for a register that is allowable in a candidate for leaf
32993     function treatment.
32994
32995     If leaf function treatment involves renumbering the registers, then
32996     the registers marked here should be the ones before
32997     renumbering--those that GCC would ordinarily allocate.  The
32998     registers which will actually be used in the assembler code, after
32999     renumbering, should not be marked with 1 in this vector.
33000
33001     Define this macro only if the target machine offers a way to
33002     optimize the treatment of leaf functions.
33003
33004 -- Macro: LEAF_REG_REMAP (REGNO)
33005     A C expression whose value is the register number to which REGNO
33006     should be renumbered, when a function is treated as a leaf
33007     function.
33008
33009     If REGNO is a register number which should not appear in a leaf
33010     function before renumbering, then the expression should yield -1,
33011     which will cause the compiler to abort.
33012
33013     Define this macro only if the target machine offers a way to
33014     optimize the treatment of leaf functions, and registers need to be
33015     renumbered to do this.
33016
33017 'TARGET_ASM_FUNCTION_PROLOGUE' and 'TARGET_ASM_FUNCTION_EPILOGUE' must
33018usually treat leaf functions specially.  They can test the C variable
33019'current_function_is_leaf' which is nonzero for leaf functions.
33020'current_function_is_leaf' is set prior to local register allocation and
33021is valid for the remaining compiler passes.  They can also test the C
33022variable 'current_function_uses_only_leaf_regs' which is nonzero for
33023leaf functions which only use leaf registers.
33024'current_function_uses_only_leaf_regs' is valid after all passes that
33025modify the instructions have been run and is only useful if
33026'LEAF_REGISTERS' is defined.
33027
33028
33029File: gccint.info,  Node: Stack Registers,  Prev: Leaf Functions,  Up: Registers
33030
3303118.7.5 Registers That Form a Stack
33032----------------------------------
33033
33034There are special features to handle computers where some of the
33035"registers" form a stack.  Stack registers are normally written by
33036pushing onto the stack, and are numbered relative to the top of the
33037stack.
33038
33039 Currently, GCC can only handle one group of stack-like registers, and
33040they must be consecutively numbered.  Furthermore, the existing support
33041for stack-like registers is specific to the 80387 floating point
33042coprocessor.  If you have a new architecture that uses stack-like
33043registers, you will need to do substantial work on 'reg-stack.c' and
33044write your machine description to cooperate with it, as well as defining
33045these macros.
33046
33047 -- Macro: STACK_REGS
33048     Define this if the machine has any stack-like registers.
33049
33050 -- Macro: STACK_REG_COVER_CLASS
33051     This is a cover class containing the stack registers.  Define this
33052     if the machine has any stack-like registers.
33053
33054 -- Macro: FIRST_STACK_REG
33055     The number of the first stack-like register.  This one is the top
33056     of the stack.
33057
33058 -- Macro: LAST_STACK_REG
33059     The number of the last stack-like register.  This one is the bottom
33060     of the stack.
33061
33062
33063File: gccint.info,  Node: Register Classes,  Next: Stack and Calling,  Prev: Registers,  Up: Target Macros
33064
3306518.8 Register Classes
33066=====================
33067
33068On many machines, the numbered registers are not all equivalent.  For
33069example, certain registers may not be allowed for indexed addressing;
33070certain registers may not be allowed in some instructions.  These
33071machine restrictions are described to the compiler using "register
33072classes".
33073
33074 You define a number of register classes, giving each one a name and
33075saying which of the registers belong to it.  Then you can specify
33076register classes that are allowed as operands to particular instruction
33077patterns.
33078
33079 In general, each register will belong to several classes.  In fact, one
33080class must be named 'ALL_REGS' and contain all the registers.  Another
33081class must be named 'NO_REGS' and contain no registers.  Often the union
33082of two classes will be another class; however, this is not required.
33083
33084 One of the classes must be named 'GENERAL_REGS'.  There is nothing
33085terribly special about the name, but the operand constraint letters 'r'
33086and 'g' specify this class.  If 'GENERAL_REGS' is the same as
33087'ALL_REGS', just define it as a macro which expands to 'ALL_REGS'.
33088
33089 Order the classes so that if class X is contained in class Y then X has
33090a lower class number than Y.
33091
33092 The way classes other than 'GENERAL_REGS' are specified in operand
33093constraints is through machine-dependent operand constraint letters.
33094You can define such letters to correspond to various classes, then use
33095them in operand constraints.
33096
33097 You must define the narrowest register classes for allocatable
33098registers, so that each class either has no subclasses, or that for some
33099mode, the move cost between registers within the class is cheaper than
33100moving a register in the class to or from memory (*note Costs::).
33101
33102 You should define a class for the union of two classes whenever some
33103instruction allows both classes.  For example, if an instruction allows
33104either a floating point (coprocessor) register or a general register for
33105a certain operand, you should define a class 'FLOAT_OR_GENERAL_REGS'
33106which includes both of them.  Otherwise you will get suboptimal code, or
33107even internal compiler errors when reload cannot find a register in the
33108class computed via 'reg_class_subunion'.
33109
33110 You must also specify certain redundant information about the register
33111classes: for each class, which classes contain it and which ones are
33112contained in it; for each pair of classes, the largest class contained
33113in their union.
33114
33115 When a value occupying several consecutive registers is expected in a
33116certain class, all the registers used must belong to that class.
33117Therefore, register classes cannot be used to enforce a requirement for
33118a register pair to start with an even-numbered register.  The way to
33119specify this requirement is with 'TARGET_HARD_REGNO_MODE_OK'.
33120
33121 Register classes used for input-operands of bitwise-and or shift
33122instructions have a special requirement: each such class must have, for
33123each fixed-point machine mode, a subclass whose registers can transfer
33124that mode to or from memory.  For example, on some machines, the
33125operations for single-byte values ('QImode') are limited to certain
33126registers.  When this is so, each register class that is used in a
33127bitwise-and or shift instruction must have a subclass consisting of
33128registers from which single-byte values can be loaded or stored.  This
33129is so that 'PREFERRED_RELOAD_CLASS' can always have a possible value to
33130return.
33131
33132 -- Data type: enum reg_class
33133     An enumerated type that must be defined with all the register class
33134     names as enumerated values.  'NO_REGS' must be first.  'ALL_REGS'
33135     must be the last register class, followed by one more enumerated
33136     value, 'LIM_REG_CLASSES', which is not a register class but rather
33137     tells how many classes there are.
33138
33139     Each register class has a number, which is the value of casting the
33140     class name to type 'int'.  The number serves as an index in many of
33141     the tables described below.
33142
33143 -- Macro: N_REG_CLASSES
33144     The number of distinct register classes, defined as follows:
33145
33146          #define N_REG_CLASSES (int) LIM_REG_CLASSES
33147
33148 -- Macro: REG_CLASS_NAMES
33149     An initializer containing the names of the register classes as C
33150     string constants.  These names are used in writing some of the
33151     debugging dumps.
33152
33153 -- Macro: REG_CLASS_CONTENTS
33154     An initializer containing the contents of the register classes, as
33155     integers which are bit masks.  The Nth integer specifies the
33156     contents of class N.  The way the integer MASK is interpreted is
33157     that register R is in the class if 'MASK & (1 << R)' is 1.
33158
33159     When the machine has more than 32 registers, an integer does not
33160     suffice.  Then the integers are replaced by sub-initializers,
33161     braced groupings containing several integers.  Each sub-initializer
33162     must be suitable as an initializer for the type 'HARD_REG_SET'
33163     which is defined in 'hard-reg-set.h'.  In this situation, the first
33164     integer in each sub-initializer corresponds to registers 0 through
33165     31, the second integer to registers 32 through 63, and so on.
33166
33167 -- Macro: REGNO_REG_CLASS (REGNO)
33168     A C expression whose value is a register class containing hard
33169     register REGNO.  In general there is more than one such class;
33170     choose a class which is "minimal", meaning that no smaller class
33171     also contains the register.
33172
33173 -- Macro: BASE_REG_CLASS
33174     A macro whose definition is the name of the class to which a valid
33175     base register must belong.  A base register is one used in an
33176     address which is the register value plus a displacement.
33177
33178 -- Macro: MODE_BASE_REG_CLASS (MODE)
33179     This is a variation of the 'BASE_REG_CLASS' macro which allows the
33180     selection of a base register in a mode dependent manner.  If MODE
33181     is VOIDmode then it should return the same value as
33182     'BASE_REG_CLASS'.
33183
33184 -- Macro: MODE_BASE_REG_REG_CLASS (MODE)
33185     A C expression whose value is the register class to which a valid
33186     base register must belong in order to be used in a base plus index
33187     register address.  You should define this macro if base plus index
33188     addresses have different requirements than other base register
33189     uses.
33190
33191 -- Macro: MODE_CODE_BASE_REG_CLASS (MODE, ADDRESS_SPACE, OUTER_CODE,
33192          INDEX_CODE)
33193     A C expression whose value is the register class to which a valid
33194     base register for a memory reference in mode MODE to address space
33195     ADDRESS_SPACE must belong.  OUTER_CODE and INDEX_CODE define the
33196     context in which the base register occurs.  OUTER_CODE is the code
33197     of the immediately enclosing expression ('MEM' for the top level of
33198     an address, 'ADDRESS' for something that occurs in an
33199     'address_operand').  INDEX_CODE is the code of the corresponding
33200     index expression if OUTER_CODE is 'PLUS'; 'SCRATCH' otherwise.
33201
33202 -- Macro: INDEX_REG_CLASS
33203     A macro whose definition is the name of the class to which a valid
33204     index register must belong.  An index register is one used in an
33205     address where its value is either multiplied by a scale factor or
33206     added to another register (as well as added to a displacement).
33207
33208 -- Macro: REGNO_OK_FOR_BASE_P (NUM)
33209     A C expression which is nonzero if register number NUM is suitable
33210     for use as a base register in operand addresses.
33211
33212 -- Macro: REGNO_MODE_OK_FOR_BASE_P (NUM, MODE)
33213     A C expression that is just like 'REGNO_OK_FOR_BASE_P', except that
33214     that expression may examine the mode of the memory reference in
33215     MODE.  You should define this macro if the mode of the memory
33216     reference affects whether a register may be used as a base
33217     register.  If you define this macro, the compiler will use it
33218     instead of 'REGNO_OK_FOR_BASE_P'.  The mode may be 'VOIDmode' for
33219     addresses that appear outside a 'MEM', i.e., as an
33220     'address_operand'.
33221
33222 -- Macro: REGNO_MODE_OK_FOR_REG_BASE_P (NUM, MODE)
33223     A C expression which is nonzero if register number NUM is suitable
33224     for use as a base register in base plus index operand addresses,
33225     accessing memory in mode MODE.  It may be either a suitable hard
33226     register or a pseudo register that has been allocated such a hard
33227     register.  You should define this macro if base plus index
33228     addresses have different requirements than other base register
33229     uses.
33230
33231     Use of this macro is deprecated; please use the more general
33232     'REGNO_MODE_CODE_OK_FOR_BASE_P'.
33233
33234 -- Macro: REGNO_MODE_CODE_OK_FOR_BASE_P (NUM, MODE, ADDRESS_SPACE,
33235          OUTER_CODE, INDEX_CODE)
33236     A C expression which is nonzero if register number NUM is suitable
33237     for use as a base register in operand addresses, accessing memory
33238     in mode MODE in address space ADDRESS_SPACE.  This is similar to
33239     'REGNO_MODE_OK_FOR_BASE_P', except that that expression may examine
33240     the context in which the register appears in the memory reference.
33241     OUTER_CODE is the code of the immediately enclosing expression
33242     ('MEM' if at the top level of the address, 'ADDRESS' for something
33243     that occurs in an 'address_operand').  INDEX_CODE is the code of
33244     the corresponding index expression if OUTER_CODE is 'PLUS';
33245     'SCRATCH' otherwise.  The mode may be 'VOIDmode' for addresses that
33246     appear outside a 'MEM', i.e., as an 'address_operand'.
33247
33248 -- Macro: REGNO_OK_FOR_INDEX_P (NUM)
33249     A C expression which is nonzero if register number NUM is suitable
33250     for use as an index register in operand addresses.  It may be
33251     either a suitable hard register or a pseudo register that has been
33252     allocated such a hard register.
33253
33254     The difference between an index register and a base register is
33255     that the index register may be scaled.  If an address involves the
33256     sum of two registers, neither one of them scaled, then either one
33257     may be labeled the "base" and the other the "index"; but whichever
33258     labeling is used must fit the machine's constraints of which
33259     registers may serve in each capacity.  The compiler will try both
33260     labelings, looking for one that is valid, and will reload one or
33261     both registers only if neither labeling works.
33262
33263 -- Target Hook: reg_class_t TARGET_PREFERRED_RENAME_CLASS (reg_class_t
33264          RCLASS)
33265     A target hook that places additional preference on the register
33266     class to use when it is necessary to rename a register in class
33267     RCLASS to another class, or perhaps NO_REGS, if no preferred
33268     register class is found or hook 'preferred_rename_class' is not
33269     implemented.  Sometimes returning a more restrictive class makes
33270     better code.  For example, on ARM, thumb-2 instructions using
33271     'LO_REGS' may be smaller than instructions using 'GENERIC_REGS'.
33272     By returning 'LO_REGS' from 'preferred_rename_class', code size can
33273     be reduced.
33274
33275 -- Target Hook: reg_class_t TARGET_PREFERRED_RELOAD_CLASS (rtx X,
33276          reg_class_t RCLASS)
33277     A target hook that places additional restrictions on the register
33278     class to use when it is necessary to copy value X into a register
33279     in class RCLASS.  The value is a register class; perhaps RCLASS, or
33280     perhaps another, smaller class.
33281
33282     The default version of this hook always returns value of 'rclass'
33283     argument.
33284
33285     Sometimes returning a more restrictive class makes better code.
33286     For example, on the 68000, when X is an integer constant that is in
33287     range for a 'moveq' instruction, the value of this macro is always
33288     'DATA_REGS' as long as RCLASS includes the data registers.
33289     Requiring a data register guarantees that a 'moveq' will be used.
33290
33291     One case where 'TARGET_PREFERRED_RELOAD_CLASS' must not return
33292     RCLASS is if X is a legitimate constant which cannot be loaded into
33293     some register class.  By returning 'NO_REGS' you can force X into a
33294     memory location.  For example, rs6000 can load immediate values
33295     into general-purpose registers, but does not have an instruction
33296     for loading an immediate value into a floating-point register, so
33297     'TARGET_PREFERRED_RELOAD_CLASS' returns 'NO_REGS' when X is a
33298     floating-point constant.  If the constant can't be loaded into any
33299     kind of register, code generation will be better if
33300     'TARGET_LEGITIMATE_CONSTANT_P' makes the constant illegitimate
33301     instead of using 'TARGET_PREFERRED_RELOAD_CLASS'.
33302
33303     If an insn has pseudos in it after register allocation, reload will
33304     go through the alternatives and call repeatedly
33305     'TARGET_PREFERRED_RELOAD_CLASS' to find the best one.  Returning
33306     'NO_REGS', in this case, makes reload add a '!' in front of the
33307     constraint: the x86 back-end uses this feature to discourage usage
33308     of 387 registers when math is done in the SSE registers (and vice
33309     versa).
33310
33311 -- Macro: PREFERRED_RELOAD_CLASS (X, CLASS)
33312     A C expression that places additional restrictions on the register
33313     class to use when it is necessary to copy value X into a register
33314     in class CLASS.  The value is a register class; perhaps CLASS, or
33315     perhaps another, smaller class.  On many machines, the following
33316     definition is safe:
33317
33318          #define PREFERRED_RELOAD_CLASS(X,CLASS) CLASS
33319
33320     Sometimes returning a more restrictive class makes better code.
33321     For example, on the 68000, when X is an integer constant that is in
33322     range for a 'moveq' instruction, the value of this macro is always
33323     'DATA_REGS' as long as CLASS includes the data registers.
33324     Requiring a data register guarantees that a 'moveq' will be used.
33325
33326     One case where 'PREFERRED_RELOAD_CLASS' must not return CLASS is if
33327     X is a legitimate constant which cannot be loaded into some
33328     register class.  By returning 'NO_REGS' you can force X into a
33329     memory location.  For example, rs6000 can load immediate values
33330     into general-purpose registers, but does not have an instruction
33331     for loading an immediate value into a floating-point register, so
33332     'PREFERRED_RELOAD_CLASS' returns 'NO_REGS' when X is a
33333     floating-point constant.  If the constant cannot be loaded into any
33334     kind of register, code generation will be better if
33335     'TARGET_LEGITIMATE_CONSTANT_P' makes the constant illegitimate
33336     instead of using 'TARGET_PREFERRED_RELOAD_CLASS'.
33337
33338     If an insn has pseudos in it after register allocation, reload will
33339     go through the alternatives and call repeatedly
33340     'PREFERRED_RELOAD_CLASS' to find the best one.  Returning
33341     'NO_REGS', in this case, makes reload add a '!' in front of the
33342     constraint: the x86 back-end uses this feature to discourage usage
33343     of 387 registers when math is done in the SSE registers (and vice
33344     versa).
33345
33346 -- Target Hook: reg_class_t TARGET_PREFERRED_OUTPUT_RELOAD_CLASS (rtx
33347          X, reg_class_t RCLASS)
33348     Like 'TARGET_PREFERRED_RELOAD_CLASS', but for output reloads
33349     instead of input reloads.
33350
33351     The default version of this hook always returns value of 'rclass'
33352     argument.
33353
33354     You can also use 'TARGET_PREFERRED_OUTPUT_RELOAD_CLASS' to
33355     discourage reload from using some alternatives, like
33356     'TARGET_PREFERRED_RELOAD_CLASS'.
33357
33358 -- Macro: LIMIT_RELOAD_CLASS (MODE, CLASS)
33359     A C expression that places additional restrictions on the register
33360     class to use when it is necessary to be able to hold a value of
33361     mode MODE in a reload register for which class CLASS would
33362     ordinarily be used.
33363
33364     Unlike 'PREFERRED_RELOAD_CLASS', this macro should be used when
33365     there are certain modes that simply cannot go in certain reload
33366     classes.
33367
33368     The value is a register class; perhaps CLASS, or perhaps another,
33369     smaller class.
33370
33371     Don't define this macro unless the target machine has limitations
33372     which require the macro to do something nontrivial.
33373
33374 -- Target Hook: reg_class_t TARGET_SECONDARY_RELOAD (bool IN_P, rtx X,
33375          reg_class_t RELOAD_CLASS, machine_mode RELOAD_MODE,
33376          secondary_reload_info *SRI)
33377     Many machines have some registers that cannot be copied directly to
33378     or from memory or even from other types of registers.  An example
33379     is the 'MQ' register, which on most machines, can only be copied to
33380     or from general registers, but not memory.  Below, we shall be
33381     using the term 'intermediate register' when a move operation cannot
33382     be performed directly, but has to be done by copying the source
33383     into the intermediate register first, and then copying the
33384     intermediate register to the destination.  An intermediate register
33385     always has the same mode as source and destination.  Since it holds
33386     the actual value being copied, reload might apply optimizations to
33387     re-use an intermediate register and eliding the copy from the
33388     source when it can determine that the intermediate register still
33389     holds the required value.
33390
33391     Another kind of secondary reload is required on some machines which
33392     allow copying all registers to and from memory, but require a
33393     scratch register for stores to some memory locations (e.g., those
33394     with symbolic address on the RT, and those with certain symbolic
33395     address on the SPARC when compiling PIC).  Scratch registers need
33396     not have the same mode as the value being copied, and usually hold
33397     a different value than that being copied.  Special patterns in the
33398     md file are needed to describe how the copy is performed with the
33399     help of the scratch register; these patterns also describe the
33400     number, register class(es) and mode(s) of the scratch register(s).
33401
33402     In some cases, both an intermediate and a scratch register are
33403     required.
33404
33405     For input reloads, this target hook is called with nonzero IN_P,
33406     and X is an rtx that needs to be copied to a register of class
33407     RELOAD_CLASS in RELOAD_MODE.  For output reloads, this target hook
33408     is called with zero IN_P, and a register of class RELOAD_CLASS
33409     needs to be copied to rtx X in RELOAD_MODE.
33410
33411     If copying a register of RELOAD_CLASS from/to X requires an
33412     intermediate register, the hook 'secondary_reload' should return
33413     the register class required for this intermediate register.  If no
33414     intermediate register is required, it should return NO_REGS. If
33415     more than one intermediate register is required, describe the one
33416     that is closest in the copy chain to the reload register.
33417
33418     If scratch registers are needed, you also have to describe how to
33419     perform the copy from/to the reload register to/from this closest
33420     intermediate register.  Or if no intermediate register is required,
33421     but still a scratch register is needed, describe the copy from/to
33422     the reload register to/from the reload operand X.
33423
33424     You do this by setting 'sri->icode' to the instruction code of a
33425     pattern in the md file which performs the move.  Operands 0 and 1
33426     are the output and input of this copy, respectively.  Operands from
33427     operand 2 onward are for scratch operands.  These scratch operands
33428     must have a mode, and a single-register-class output constraint.
33429
33430     When an intermediate register is used, the 'secondary_reload' hook
33431     will be called again to determine how to copy the intermediate
33432     register to/from the reload operand X, so your hook must also have
33433     code to handle the register class of the intermediate operand.
33434
33435     X might be a pseudo-register or a 'subreg' of a pseudo-register,
33436     which could either be in a hard register or in memory.  Use
33437     'true_regnum' to find out; it will return -1 if the pseudo is in
33438     memory and the hard register number if it is in a register.
33439
33440     Scratch operands in memory (constraint '"=m"' / '"=&m"') are
33441     currently not supported.  For the time being, you will have to
33442     continue to use 'TARGET_SECONDARY_MEMORY_NEEDED' for that purpose.
33443
33444     'copy_cost' also uses this target hook to find out how values are
33445     copied.  If you want it to include some extra cost for the need to
33446     allocate (a) scratch register(s), set 'sri->extra_cost' to the
33447     additional cost.  Or if two dependent moves are supposed to have a
33448     lower cost than the sum of the individual moves due to expected
33449     fortuitous scheduling and/or special forwarding logic, you can set
33450     'sri->extra_cost' to a negative amount.
33451
33452 -- Macro: SECONDARY_RELOAD_CLASS (CLASS, MODE, X)
33453 -- Macro: SECONDARY_INPUT_RELOAD_CLASS (CLASS, MODE, X)
33454 -- Macro: SECONDARY_OUTPUT_RELOAD_CLASS (CLASS, MODE, X)
33455     These macros are obsolete, new ports should use the target hook
33456     'TARGET_SECONDARY_RELOAD' instead.
33457
33458     These are obsolete macros, replaced by the
33459     'TARGET_SECONDARY_RELOAD' target hook.  Older ports still define
33460     these macros to indicate to the reload phase that it may need to
33461     allocate at least one register for a reload in addition to the
33462     register to contain the data.  Specifically, if copying X to a
33463     register CLASS in MODE requires an intermediate register, you were
33464     supposed to define 'SECONDARY_INPUT_RELOAD_CLASS' to return the
33465     largest register class all of whose registers can be used as
33466     intermediate registers or scratch registers.
33467
33468     If copying a register CLASS in MODE to X requires an intermediate
33469     or scratch register, 'SECONDARY_OUTPUT_RELOAD_CLASS' was supposed
33470     to be defined be defined to return the largest register class
33471     required.  If the requirements for input and output reloads were
33472     the same, the macro 'SECONDARY_RELOAD_CLASS' should have been used
33473     instead of defining both macros identically.
33474
33475     The values returned by these macros are often 'GENERAL_REGS'.
33476     Return 'NO_REGS' if no spare register is needed; i.e., if X can be
33477     directly copied to or from a register of CLASS in MODE without
33478     requiring a scratch register.  Do not define this macro if it would
33479     always return 'NO_REGS'.
33480
33481     If a scratch register is required (either with or without an
33482     intermediate register), you were supposed to define patterns for
33483     'reload_inM' or 'reload_outM', as required (*note Standard Names::.
33484     These patterns, which were normally implemented with a
33485     'define_expand', should be similar to the 'movM' patterns, except
33486     that operand 2 is the scratch register.
33487
33488     These patterns need constraints for the reload register and scratch
33489     register that contain a single register class.  If the original
33490     reload register (whose class is CLASS) can meet the constraint
33491     given in the pattern, the value returned by these macros is used
33492     for the class of the scratch register.  Otherwise, two additional
33493     reload registers are required.  Their classes are obtained from the
33494     constraints in the insn pattern.
33495
33496     X might be a pseudo-register or a 'subreg' of a pseudo-register,
33497     which could either be in a hard register or in memory.  Use
33498     'true_regnum' to find out; it will return -1 if the pseudo is in
33499     memory and the hard register number if it is in a register.
33500
33501     These macros should not be used in the case where a particular
33502     class of registers can only be copied to memory and not to another
33503     class of registers.  In that case, secondary reload registers are
33504     not needed and would not be helpful.  Instead, a stack location
33505     must be used to perform the copy and the 'movM' pattern should use
33506     memory as an intermediate storage.  This case often occurs between
33507     floating-point and general registers.
33508
33509 -- Target Hook: bool TARGET_SECONDARY_MEMORY_NEEDED (machine_mode MODE,
33510          reg_class_t CLASS1, reg_class_t CLASS2)
33511     Certain machines have the property that some registers cannot be
33512     copied to some other registers without using memory.  Define this
33513     hook on those machines to return true if objects of mode M in
33514     registers of CLASS1 can only be copied to registers of class CLASS2
33515     by storing a register of CLASS1 into memory and loading that memory
33516     location into a register of CLASS2.  The default definition returns
33517     false for all inputs.
33518
33519 -- Macro: SECONDARY_MEMORY_NEEDED_RTX (MODE)
33520     Normally when 'TARGET_SECONDARY_MEMORY_NEEDED' is defined, the
33521     compiler allocates a stack slot for a memory location needed for
33522     register copies.  If this macro is defined, the compiler instead
33523     uses the memory location defined by this macro.
33524
33525     Do not define this macro if you do not define
33526     'TARGET_SECONDARY_MEMORY_NEEDED'.
33527
33528 -- Target Hook: machine_mode TARGET_SECONDARY_MEMORY_NEEDED_MODE
33529          (machine_mode MODE)
33530     If 'TARGET_SECONDARY_MEMORY_NEEDED' tells the compiler to use
33531     memory when moving between two particular registers of mode MODE,
33532     this hook specifies the mode that the memory should have.
33533
33534     The default depends on 'TARGET_LRA_P'.  Without LRA, the default is
33535     to use a word-sized mode for integral modes that are smaller than a
33536     a word.  This is right thing to do on most machines because it
33537     ensures that all bits of the register are copied and prevents
33538     accesses to the registers in a narrower mode, which some machines
33539     prohibit for floating-point registers.
33540
33541     However, this default behavior is not correct on some machines,
33542     such as the DEC Alpha, that store short integers in floating-point
33543     registers differently than in integer registers.  On those
33544     machines, the default widening will not work correctly and you must
33545     define this hook to suppress that widening in some cases.  See the
33546     file 'alpha.c' for details.
33547
33548     With LRA, the default is to use MODE unmodified.
33549
33550 -- Target Hook: void TARGET_SELECT_EARLY_REMAT_MODES (sbitmap MODES)
33551     On some targets, certain modes cannot be held in registers around a
33552     standard ABI call and are relatively expensive to spill to the
33553     stack.  The early rematerialization pass can help in such cases by
33554     aggressively recomputing values after calls, so that they don't
33555     need to be spilled.
33556
33557     This hook returns the set of such modes by setting the associated
33558     bits in MODES.  The default implementation selects no modes, which
33559     has the effect of disabling the early rematerialization pass.
33560
33561 -- Target Hook: bool TARGET_CLASS_LIKELY_SPILLED_P (reg_class_t RCLASS)
33562     A target hook which returns 'true' if pseudos that have been
33563     assigned to registers of class RCLASS would likely be spilled
33564     because registers of RCLASS are needed for spill registers.
33565
33566     The default version of this target hook returns 'true' if RCLASS
33567     has exactly one register and 'false' otherwise.  On most machines,
33568     this default should be used.  For generally register-starved
33569     machines, such as i386, or machines with right register
33570     constraints, such as SH, this hook can be used to avoid excessive
33571     spilling.
33572
33573     This hook is also used by some of the global intra-procedural code
33574     transformations to throtle code motion, to avoid increasing
33575     register pressure.
33576
33577 -- Target Hook: unsigned char TARGET_CLASS_MAX_NREGS (reg_class_t
33578          RCLASS, machine_mode MODE)
33579     A target hook returns the maximum number of consecutive registers
33580     of class RCLASS needed to hold a value of mode MODE.
33581
33582     This is closely related to the macro 'TARGET_HARD_REGNO_NREGS'.  In
33583     fact, the value returned by 'TARGET_CLASS_MAX_NREGS (RCLASS, MODE)'
33584     target hook should be the maximum value of 'TARGET_HARD_REGNO_NREGS
33585     (REGNO, MODE)' for all REGNO values in the class RCLASS.
33586
33587     This target hook helps control the handling of multiple-word values
33588     in the reload pass.
33589
33590     The default version of this target hook returns the size of MODE in
33591     words.
33592
33593 -- Macro: CLASS_MAX_NREGS (CLASS, MODE)
33594     A C expression for the maximum number of consecutive registers of
33595     class CLASS needed to hold a value of mode MODE.
33596
33597     This is closely related to the macro 'TARGET_HARD_REGNO_NREGS'.  In
33598     fact, the value of the macro 'CLASS_MAX_NREGS (CLASS, MODE)' should
33599     be the maximum value of 'TARGET_HARD_REGNO_NREGS (REGNO, MODE)' for
33600     all REGNO values in the class CLASS.
33601
33602     This macro helps control the handling of multiple-word values in
33603     the reload pass.
33604
33605 -- Target Hook: bool TARGET_CAN_CHANGE_MODE_CLASS (machine_mode FROM,
33606          machine_mode TO, reg_class_t RCLASS)
33607     This hook returns true if it is possible to bitcast values held in
33608     registers of class RCLASS from mode FROM to mode TO and if doing so
33609     preserves the low-order bits that are common to both modes.  The
33610     result is only meaningful if RCLASS has registers that can hold
33611     both 'from' and 'to'.  The default implementation returns true.
33612
33613     As an example of when such bitcasting is invalid, loading 32-bit
33614     integer or floating-point objects into floating-point registers on
33615     Alpha extends them to 64 bits.  Therefore loading a 64-bit object
33616     and then storing it as a 32-bit object does not store the low-order
33617     32 bits, as would be the case for a normal register.  Therefore,
33618     'alpha.h' defines 'TARGET_CAN_CHANGE_MODE_CLASS' to return:
33619
33620          (GET_MODE_SIZE (from) == GET_MODE_SIZE (to)
33621           || !reg_classes_intersect_p (FLOAT_REGS, rclass))
33622
33623     Even if storing from a register in mode TO would be valid, if both
33624     FROM and 'raw_reg_mode' for RCLASS are wider than 'word_mode', then
33625     we must prevent TO narrowing the mode.  This happens when the
33626     middle-end assumes that it can load or store pieces of an N-word
33627     pseudo, and that the pseudo will eventually be allocated to N
33628     'word_mode' hard registers.  Failure to prevent this kind of mode
33629     change will result in the entire 'raw_reg_mode' being modified
33630     instead of the partial value that the middle-end intended.
33631
33632 -- Target Hook: reg_class_t TARGET_IRA_CHANGE_PSEUDO_ALLOCNO_CLASS
33633          (int, REG_CLASS_T, REG_CLASS_T)
33634     A target hook which can change allocno class for given pseudo from
33635     allocno and best class calculated by IRA.
33636
33637     The default version of this target hook always returns given class.
33638
33639 -- Target Hook: bool TARGET_LRA_P (void)
33640     A target hook which returns true if we use LRA instead of reload
33641     pass.  The default version of this target hook returns true.  New
33642     ports should use LRA, and existing ports are encouraged to convert.
33643
33644 -- Target Hook: int TARGET_REGISTER_PRIORITY (int)
33645     A target hook which returns the register priority number to which
33646     the register HARD_REGNO belongs to.  The bigger the number, the
33647     more preferable the hard register usage (when all other conditions
33648     are the same).  This hook can be used to prefer some hard register
33649     over others in LRA. For example, some x86-64 register usage needs
33650     additional prefix which makes instructions longer.  The hook can
33651     return lower priority number for such registers make them less
33652     favorable and as result making the generated code smaller.  The
33653     default version of this target hook returns always zero.
33654
33655 -- Target Hook: bool TARGET_REGISTER_USAGE_LEVELING_P (void)
33656     A target hook which returns true if we need register usage
33657     leveling.  That means if a few hard registers are equally good for
33658     the assignment, we choose the least used hard register.  The
33659     register usage leveling may be profitable for some targets.  Don't
33660     use the usage leveling for targets with conditional execution or
33661     targets with big register files as it hurts if-conversion and
33662     cross-jumping optimizations.  The default version of this target
33663     hook returns always false.
33664
33665 -- Target Hook: bool TARGET_DIFFERENT_ADDR_DISPLACEMENT_P (void)
33666     A target hook which returns true if an address with the same
33667     structure can have different maximal legitimate displacement.  For
33668     example, the displacement can depend on memory mode or on operand
33669     combinations in the insn.  The default version of this target hook
33670     returns always false.
33671
33672 -- Target Hook: bool TARGET_CANNOT_SUBSTITUTE_MEM_EQUIV_P (rtx SUBST)
33673     A target hook which returns 'true' if SUBST can't substitute safely
33674     pseudos with equivalent memory values during register allocation.
33675     The default version of this target hook returns 'false'.  On most
33676     machines, this default should be used.  For generally machines with
33677     non orthogonal register usage for addressing, such as SH, this hook
33678     can be used to avoid excessive spilling.
33679
33680 -- Target Hook: bool TARGET_LEGITIMIZE_ADDRESS_DISPLACEMENT (rtx
33681          *OFFSET1, rtx *OFFSET2, poly_int64 ORIG_OFFSET, machine_mode
33682          MODE)
33683     This hook tries to split address offset ORIG_OFFSET into two parts:
33684     one that should be added to the base address to create a local
33685     anchor point, and an additional offset that can be applied to the
33686     anchor to address a value of mode MODE.  The idea is that the local
33687     anchor could be shared by other accesses to nearby locations.
33688
33689     The hook returns true if it succeeds, storing the offset of the
33690     anchor from the base in OFFSET1 and the offset of the final address
33691     from the anchor in OFFSET2.  The default implementation returns
33692     false.
33693
33694 -- Target Hook: reg_class_t TARGET_SPILL_CLASS (reg_class_t,
33695          MACHINE_MODE)
33696     This hook defines a class of registers which could be used for
33697     spilling pseudos of the given mode and class, or 'NO_REGS' if only
33698     memory should be used.  Not defining this hook is equivalent to
33699     returning 'NO_REGS' for all inputs.
33700
33701 -- Target Hook: bool TARGET_ADDITIONAL_ALLOCNO_CLASS_P (reg_class_t)
33702     This hook should return 'true' if given class of registers should
33703     be an allocno class in any way.  Usually RA uses only one register
33704     class from all classes containing the same register set.  In some
33705     complicated cases, you need to have two or more such classes as
33706     allocno ones for RA correct work.  Not defining this hook is
33707     equivalent to returning 'false' for all inputs.
33708
33709 -- Target Hook: scalar_int_mode TARGET_CSTORE_MODE (enum insn_code
33710          ICODE)
33711     This hook defines the machine mode to use for the boolean result of
33712     conditional store patterns.  The ICODE argument is the instruction
33713     code for the cstore being performed.  Not definiting this hook is
33714     the same as accepting the mode encoded into operand 0 of the cstore
33715     expander patterns.
33716
33717 -- Target Hook: int TARGET_COMPUTE_PRESSURE_CLASSES (enum reg_class
33718          *PRESSURE_CLASSES)
33719     A target hook which lets a backend compute the set of pressure
33720     classes to be used by those optimization passes which take register
33721     pressure into account, as opposed to letting IRA compute them.  It
33722     returns the number of register classes stored in the array
33723     PRESSURE_CLASSES.
33724
33725
33726File: gccint.info,  Node: Stack and Calling,  Next: Varargs,  Prev: Register Classes,  Up: Target Macros
33727
3372818.9 Stack Layout and Calling Conventions
33729=========================================
33730
33731This describes the stack layout and calling conventions.
33732
33733* Menu:
33734
33735* Frame Layout::
33736* Exception Handling::
33737* Stack Checking::
33738* Frame Registers::
33739* Elimination::
33740* Stack Arguments::
33741* Register Arguments::
33742* Scalar Return::
33743* Aggregate Return::
33744* Caller Saves::
33745* Function Entry::
33746* Profiling::
33747* Tail Calls::
33748* Shrink-wrapping separate components::
33749* Stack Smashing Protection::
33750* Miscellaneous Register Hooks::
33751
33752
33753File: gccint.info,  Node: Frame Layout,  Next: Exception Handling,  Up: Stack and Calling
33754
3375518.9.1 Basic Stack Layout
33756-------------------------
33757
33758Here is the basic stack layout.
33759
33760 -- Macro: STACK_GROWS_DOWNWARD
33761     Define this macro to be true if pushing a word onto the stack moves
33762     the stack pointer to a smaller address, and false otherwise.
33763
33764 -- Macro: STACK_PUSH_CODE
33765     This macro defines the operation used when something is pushed on
33766     the stack.  In RTL, a push operation will be '(set (mem
33767     (STACK_PUSH_CODE (reg sp))) ...)'
33768
33769     The choices are 'PRE_DEC', 'POST_DEC', 'PRE_INC', and 'POST_INC'.
33770     Which of these is correct depends on the stack direction and on
33771     whether the stack pointer points to the last item on the stack or
33772     whether it points to the space for the next item on the stack.
33773
33774     The default is 'PRE_DEC' when 'STACK_GROWS_DOWNWARD' is true, which
33775     is almost always right, and 'PRE_INC' otherwise, which is often
33776     wrong.
33777
33778 -- Macro: FRAME_GROWS_DOWNWARD
33779     Define this macro to nonzero value if the addresses of local
33780     variable slots are at negative offsets from the frame pointer.
33781
33782 -- Macro: ARGS_GROW_DOWNWARD
33783     Define this macro if successive arguments to a function occupy
33784     decreasing addresses on the stack.
33785
33786 -- Target Hook: HOST_WIDE_INT TARGET_STARTING_FRAME_OFFSET (void)
33787     This hook returns the offset from the frame pointer to the first
33788     local variable slot to be allocated.  If 'FRAME_GROWS_DOWNWARD', it
33789     is the offset to _end_ of the first slot allocated, otherwise it is
33790     the offset to _beginning_ of the first slot allocated.  The default
33791     implementation returns 0.
33792
33793 -- Macro: STACK_ALIGNMENT_NEEDED
33794     Define to zero to disable final alignment of the stack during
33795     reload.  The nonzero default for this macro is suitable for most
33796     ports.
33797
33798     On ports where 'TARGET_STARTING_FRAME_OFFSET' is nonzero or where
33799     there is a register save block following the local block that
33800     doesn't require alignment to 'STACK_BOUNDARY', it may be beneficial
33801     to disable stack alignment and do it in the backend.
33802
33803 -- Macro: STACK_POINTER_OFFSET
33804     Offset from the stack pointer register to the first location at
33805     which outgoing arguments are placed.  If not specified, the default
33806     value of zero is used.  This is the proper value for most machines.
33807
33808     If 'ARGS_GROW_DOWNWARD', this is the offset to the location above
33809     the first location at which outgoing arguments are placed.
33810
33811 -- Macro: FIRST_PARM_OFFSET (FUNDECL)
33812     Offset from the argument pointer register to the first argument's
33813     address.  On some machines it may depend on the data type of the
33814     function.
33815
33816     If 'ARGS_GROW_DOWNWARD', this is the offset to the location above
33817     the first argument's address.
33818
33819 -- Macro: STACK_DYNAMIC_OFFSET (FUNDECL)
33820     Offset from the stack pointer register to an item dynamically
33821     allocated on the stack, e.g., by 'alloca'.
33822
33823     The default value for this macro is 'STACK_POINTER_OFFSET' plus the
33824     length of the outgoing arguments.  The default is correct for most
33825     machines.  See 'function.c' for details.
33826
33827 -- Macro: INITIAL_FRAME_ADDRESS_RTX
33828     A C expression whose value is RTL representing the address of the
33829     initial stack frame.  This address is passed to 'RETURN_ADDR_RTX'
33830     and 'DYNAMIC_CHAIN_ADDRESS'.  If you don't define this macro, a
33831     reasonable default value will be used.  Define this macro in order
33832     to make frame pointer elimination work in the presence of
33833     '__builtin_frame_address (count)' and '__builtin_return_address
33834     (count)' for 'count' not equal to zero.
33835
33836 -- Macro: DYNAMIC_CHAIN_ADDRESS (FRAMEADDR)
33837     A C expression whose value is RTL representing the address in a
33838     stack frame where the pointer to the caller's frame is stored.
33839     Assume that FRAMEADDR is an RTL expression for the address of the
33840     stack frame itself.
33841
33842     If you don't define this macro, the default is to return the value
33843     of FRAMEADDR--that is, the stack frame address is also the address
33844     of the stack word that points to the previous frame.
33845
33846 -- Macro: SETUP_FRAME_ADDRESSES
33847     A C expression that produces the machine-specific code to setup the
33848     stack so that arbitrary frames can be accessed.  For example, on
33849     the SPARC, we must flush all of the register windows to the stack
33850     before we can access arbitrary stack frames.  You will seldom need
33851     to define this macro.  The default is to do nothing.
33852
33853 -- Target Hook: rtx TARGET_BUILTIN_SETJMP_FRAME_VALUE (void)
33854     This target hook should return an rtx that is used to store the
33855     address of the current frame into the built in 'setjmp' buffer.
33856     The default value, 'virtual_stack_vars_rtx', is correct for most
33857     machines.  One reason you may need to define this target hook is if
33858     'hard_frame_pointer_rtx' is the appropriate value on your machine.
33859
33860 -- Macro: FRAME_ADDR_RTX (FRAMEADDR)
33861     A C expression whose value is RTL representing the value of the
33862     frame address for the current frame.  FRAMEADDR is the frame
33863     pointer of the current frame.  This is used for
33864     __builtin_frame_address.  You need only define this macro if the
33865     frame address is not the same as the frame pointer.  Most machines
33866     do not need to define it.
33867
33868 -- Macro: RETURN_ADDR_RTX (COUNT, FRAMEADDR)
33869     A C expression whose value is RTL representing the value of the
33870     return address for the frame COUNT steps up from the current frame,
33871     after the prologue.  FRAMEADDR is the frame pointer of the COUNT
33872     frame, or the frame pointer of the COUNT - 1 frame if
33873     'RETURN_ADDR_IN_PREVIOUS_FRAME' is nonzero.
33874
33875     The value of the expression must always be the correct address when
33876     COUNT is zero, but may be 'NULL_RTX' if there is no way to
33877     determine the return address of other frames.
33878
33879 -- Macro: RETURN_ADDR_IN_PREVIOUS_FRAME
33880     Define this macro to nonzero value if the return address of a
33881     particular stack frame is accessed from the frame pointer of the
33882     previous stack frame.  The zero default for this macro is suitable
33883     for most ports.
33884
33885 -- Macro: INCOMING_RETURN_ADDR_RTX
33886     A C expression whose value is RTL representing the location of the
33887     incoming return address at the beginning of any function, before
33888     the prologue.  This RTL is either a 'REG', indicating that the
33889     return value is saved in 'REG', or a 'MEM' representing a location
33890     in the stack.
33891
33892     You only need to define this macro if you want to support call
33893     frame debugging information like that provided by DWARF 2.
33894
33895     If this RTL is a 'REG', you should also define
33896     'DWARF_FRAME_RETURN_COLUMN' to 'DWARF_FRAME_REGNUM (REGNO)'.
33897
33898 -- Macro: DWARF_ALT_FRAME_RETURN_COLUMN
33899     A C expression whose value is an integer giving a DWARF 2 column
33900     number that may be used as an alternative return column.  The
33901     column must not correspond to any gcc hard register (that is, it
33902     must not be in the range of 'DWARF_FRAME_REGNUM').
33903
33904     This macro can be useful if 'DWARF_FRAME_RETURN_COLUMN' is set to a
33905     general register, but an alternative column needs to be used for
33906     signal frames.  Some targets have also used different frame return
33907     columns over time.
33908
33909 -- Macro: DWARF_ZERO_REG
33910     A C expression whose value is an integer giving a DWARF 2 register
33911     number that is considered to always have the value zero.  This
33912     should only be defined if the target has an architected zero
33913     register, and someone decided it was a good idea to use that
33914     register number to terminate the stack backtrace.  New ports should
33915     avoid this.
33916
33917 -- Target Hook: void TARGET_DWARF_HANDLE_FRAME_UNSPEC (const char
33918          *LABEL, rtx PATTERN, int INDEX)
33919     This target hook allows the backend to emit frame-related insns
33920     that contain UNSPECs or UNSPEC_VOLATILEs.  The DWARF 2 call frame
33921     debugging info engine will invoke it on insns of the form
33922          (set (reg) (unspec [...] UNSPEC_INDEX))
33923     and
33924          (set (reg) (unspec_volatile [...] UNSPECV_INDEX)).
33925     to let the backend emit the call frame instructions.  LABEL is the
33926     CFI label attached to the insn, PATTERN is the pattern of the insn
33927     and INDEX is 'UNSPEC_INDEX' or 'UNSPECV_INDEX'.
33928
33929 -- Target Hook: unsigned int TARGET_DWARF_POLY_INDETERMINATE_VALUE
33930          (unsigned int I, unsigned int *FACTOR, int *OFFSET)
33931     Express the value of 'poly_int' indeterminate I as a DWARF
33932     expression, with I counting from 1.  Return the number of a DWARF
33933     register R and set '*FACTOR' and '*OFFSET' such that the value of
33934     the indeterminate is:
33935          value_of(R) / FACTOR - OFFSET
33936
33937     A target only needs to define this hook if it sets
33938     'NUM_POLY_INT_COEFFS' to a value greater than 1.
33939
33940 -- Macro: INCOMING_FRAME_SP_OFFSET
33941     A C expression whose value is an integer giving the offset, in
33942     bytes, from the value of the stack pointer register to the top of
33943     the stack frame at the beginning of any function, before the
33944     prologue.  The top of the frame is defined to be the value of the
33945     stack pointer in the previous frame, just before the call
33946     instruction.
33947
33948     You only need to define this macro if you want to support call
33949     frame debugging information like that provided by DWARF 2.
33950
33951 -- Macro: DEFAULT_INCOMING_FRAME_SP_OFFSET
33952     Like 'INCOMING_FRAME_SP_OFFSET', but must be the same for all
33953     functions of the same ABI, and when using GAS '.cfi_*' directives
33954     must also agree with the default CFI GAS emits.  Define this macro
33955     only if 'INCOMING_FRAME_SP_OFFSET' can have different values
33956     between different functions of the same ABI or when
33957     'INCOMING_FRAME_SP_OFFSET' does not agree with GAS default CFI.
33958
33959 -- Macro: ARG_POINTER_CFA_OFFSET (FUNDECL)
33960     A C expression whose value is an integer giving the offset, in
33961     bytes, from the argument pointer to the canonical frame address
33962     (cfa).  The final value should coincide with that calculated by
33963     'INCOMING_FRAME_SP_OFFSET'.  Which is unfortunately not usable
33964     during virtual register instantiation.
33965
33966     The default value for this macro is 'FIRST_PARM_OFFSET (fundecl) +
33967     crtl->args.pretend_args_size', which is correct for most machines;
33968     in general, the arguments are found immediately before the stack
33969     frame.  Note that this is not the case on some targets that save
33970     registers into the caller's frame, such as SPARC and rs6000, and so
33971     such targets need to define this macro.
33972
33973     You only need to define this macro if the default is incorrect, and
33974     you want to support call frame debugging information like that
33975     provided by DWARF 2.
33976
33977 -- Macro: FRAME_POINTER_CFA_OFFSET (FUNDECL)
33978     If defined, a C expression whose value is an integer giving the
33979     offset in bytes from the frame pointer to the canonical frame
33980     address (cfa).  The final value should coincide with that
33981     calculated by 'INCOMING_FRAME_SP_OFFSET'.
33982
33983     Normally the CFA is calculated as an offset from the argument
33984     pointer, via 'ARG_POINTER_CFA_OFFSET', but if the argument pointer
33985     is variable due to the ABI, this may not be possible.  If this
33986     macro is defined, it implies that the virtual register
33987     instantiation should be based on the frame pointer instead of the
33988     argument pointer.  Only one of 'FRAME_POINTER_CFA_OFFSET' and
33989     'ARG_POINTER_CFA_OFFSET' should be defined.
33990
33991 -- Macro: CFA_FRAME_BASE_OFFSET (FUNDECL)
33992     If defined, a C expression whose value is an integer giving the
33993     offset in bytes from the canonical frame address (cfa) to the frame
33994     base used in DWARF 2 debug information.  The default is zero.  A
33995     different value may reduce the size of debug information on some
33996     ports.
33997
33998
33999File: gccint.info,  Node: Exception Handling,  Next: Stack Checking,  Prev: Frame Layout,  Up: Stack and Calling
34000
3400118.9.2 Exception Handling Support
34002---------------------------------
34003
34004 -- Macro: EH_RETURN_DATA_REGNO (N)
34005     A C expression whose value is the Nth register number used for data
34006     by exception handlers, or 'INVALID_REGNUM' if fewer than N
34007     registers are usable.
34008
34009     The exception handling library routines communicate with the
34010     exception handlers via a set of agreed upon registers.  Ideally
34011     these registers should be call-clobbered; it is possible to use
34012     call-saved registers, but may negatively impact code size.  The
34013     target must support at least 2 data registers, but should define 4
34014     if there are enough free registers.
34015
34016     You must define this macro if you want to support call frame
34017     exception handling like that provided by DWARF 2.
34018
34019 -- Macro: EH_RETURN_STACKADJ_RTX
34020     A C expression whose value is RTL representing a location in which
34021     to store a stack adjustment to be applied before function return.
34022     This is used to unwind the stack to an exception handler's call
34023     frame.  It will be assigned zero on code paths that return
34024     normally.
34025
34026     Typically this is a call-clobbered hard register that is otherwise
34027     untouched by the epilogue, but could also be a stack slot.
34028
34029     Do not define this macro if the stack pointer is saved and restored
34030     by the regular prolog and epilog code in the call frame itself; in
34031     this case, the exception handling library routines will update the
34032     stack location to be restored in place.  Otherwise, you must define
34033     this macro if you want to support call frame exception handling
34034     like that provided by DWARF 2.
34035
34036 -- Macro: EH_RETURN_HANDLER_RTX
34037     A C expression whose value is RTL representing a location in which
34038     to store the address of an exception handler to which we should
34039     return.  It will not be assigned on code paths that return
34040     normally.
34041
34042     Typically this is the location in the call frame at which the
34043     normal return address is stored.  For targets that return by
34044     popping an address off the stack, this might be a memory address
34045     just below the _target_ call frame rather than inside the current
34046     call frame.  If defined, 'EH_RETURN_STACKADJ_RTX' will have already
34047     been assigned, so it may be used to calculate the location of the
34048     target call frame.
34049
34050     Some targets have more complex requirements than storing to an
34051     address calculable during initial code generation.  In that case
34052     the 'eh_return' instruction pattern should be used instead.
34053
34054     If you want to support call frame exception handling, you must
34055     define either this macro or the 'eh_return' instruction pattern.
34056
34057 -- Macro: RETURN_ADDR_OFFSET
34058     If defined, an integer-valued C expression for which rtl will be
34059     generated to add it to the exception handler address before it is
34060     searched in the exception handling tables, and to subtract it again
34061     from the address before using it to return to the exception
34062     handler.
34063
34064 -- Macro: ASM_PREFERRED_EH_DATA_FORMAT (CODE, GLOBAL)
34065     This macro chooses the encoding of pointers embedded in the
34066     exception handling sections.  If at all possible, this should be
34067     defined such that the exception handling section will not require
34068     dynamic relocations, and so may be read-only.
34069
34070     CODE is 0 for data, 1 for code labels, 2 for function pointers.
34071     GLOBAL is true if the symbol may be affected by dynamic
34072     relocations.  The macro should return a combination of the
34073     'DW_EH_PE_*' defines as found in 'dwarf2.h'.
34074
34075     If this macro is not defined, pointers will not be encoded but
34076     represented directly.
34077
34078 -- Macro: ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX (FILE, ENCODING, SIZE,
34079          ADDR, DONE)
34080     This macro allows the target to emit whatever special magic is
34081     required to represent the encoding chosen by
34082     'ASM_PREFERRED_EH_DATA_FORMAT'.  Generic code takes care of
34083     pc-relative and indirect encodings; this must be defined if the
34084     target uses text-relative or data-relative encodings.
34085
34086     This is a C statement that branches to DONE if the format was
34087     handled.  ENCODING is the format chosen, SIZE is the number of
34088     bytes that the format occupies, ADDR is the 'SYMBOL_REF' to be
34089     emitted.
34090
34091 -- Macro: MD_FALLBACK_FRAME_STATE_FOR (CONTEXT, FS)
34092     This macro allows the target to add CPU and operating system
34093     specific code to the call-frame unwinder for use when there is no
34094     unwind data available.  The most common reason to implement this
34095     macro is to unwind through signal frames.
34096
34097     This macro is called from 'uw_frame_state_for' in 'unwind-dw2.c',
34098     'unwind-dw2-xtensa.c' and 'unwind-ia64.c'.  CONTEXT is an
34099     '_Unwind_Context'; FS is an '_Unwind_FrameState'.  Examine
34100     'context->ra' for the address of the code being executed and
34101     'context->cfa' for the stack pointer value.  If the frame can be
34102     decoded, the register save addresses should be updated in FS and
34103     the macro should evaluate to '_URC_NO_REASON'.  If the frame cannot
34104     be decoded, the macro should evaluate to '_URC_END_OF_STACK'.
34105
34106     For proper signal handling in Java this macro is accompanied by
34107     'MAKE_THROW_FRAME', defined in 'libjava/include/*-signal.h'
34108     headers.
34109
34110 -- Macro: MD_HANDLE_UNWABI (CONTEXT, FS)
34111     This macro allows the target to add operating system specific code
34112     to the call-frame unwinder to handle the IA-64 '.unwabi' unwinding
34113     directive, usually used for signal or interrupt frames.
34114
34115     This macro is called from 'uw_update_context' in libgcc's
34116     'unwind-ia64.c'.  CONTEXT is an '_Unwind_Context'; FS is an
34117     '_Unwind_FrameState'.  Examine 'fs->unwabi' for the abi and context
34118     in the '.unwabi' directive.  If the '.unwabi' directive can be
34119     handled, the register save addresses should be updated in FS.
34120
34121 -- Macro: TARGET_USES_WEAK_UNWIND_INFO
34122     A C expression that evaluates to true if the target requires unwind
34123     info to be given comdat linkage.  Define it to be '1' if comdat
34124     linkage is necessary.  The default is '0'.
34125
34126
34127File: gccint.info,  Node: Stack Checking,  Next: Frame Registers,  Prev: Exception Handling,  Up: Stack and Calling
34128
3412918.9.3 Specifying How Stack Checking is Done
34130--------------------------------------------
34131
34132GCC will check that stack references are within the boundaries of the
34133stack, if the option '-fstack-check' is specified, in one of three ways:
34134
34135  1. If the value of the 'STACK_CHECK_BUILTIN' macro is nonzero, GCC
34136     will assume that you have arranged for full stack checking to be
34137     done at appropriate places in the configuration files.  GCC will
34138     not do other special processing.
34139
34140  2. If 'STACK_CHECK_BUILTIN' is zero and the value of the
34141     'STACK_CHECK_STATIC_BUILTIN' macro is nonzero, GCC will assume that
34142     you have arranged for static stack checking (checking of the static
34143     stack frame of functions) to be done at appropriate places in the
34144     configuration files.  GCC will only emit code to do dynamic stack
34145     checking (checking on dynamic stack allocations) using the third
34146     approach below.
34147
34148  3. If neither of the above are true, GCC will generate code to
34149     periodically "probe" the stack pointer using the values of the
34150     macros defined below.
34151
34152 If neither STACK_CHECK_BUILTIN nor STACK_CHECK_STATIC_BUILTIN is
34153defined, GCC will change its allocation strategy for large objects if
34154the option '-fstack-check' is specified: they will always be allocated
34155dynamically if their size exceeds 'STACK_CHECK_MAX_VAR_SIZE' bytes.
34156
34157 -- Macro: STACK_CHECK_BUILTIN
34158     A nonzero value if stack checking is done by the configuration
34159     files in a machine-dependent manner.  You should define this macro
34160     if stack checking is required by the ABI of your machine or if you
34161     would like to do stack checking in some more efficient way than the
34162     generic approach.  The default value of this macro is zero.
34163
34164 -- Macro: STACK_CHECK_STATIC_BUILTIN
34165     A nonzero value if static stack checking is done by the
34166     configuration files in a machine-dependent manner.  You should
34167     define this macro if you would like to do static stack checking in
34168     some more efficient way than the generic approach.  The default
34169     value of this macro is zero.
34170
34171 -- Macro: STACK_CHECK_PROBE_INTERVAL_EXP
34172     An integer specifying the interval at which GCC must generate stack
34173     probe instructions, defined as 2 raised to this integer.  You will
34174     normally define this macro so that the interval be no larger than
34175     the size of the "guard pages" at the end of a stack area.  The
34176     default value of 12 (4096-byte interval) is suitable for most
34177     systems.
34178
34179 -- Macro: STACK_CHECK_MOVING_SP
34180     An integer which is nonzero if GCC should move the stack pointer
34181     page by page when doing probes.  This can be necessary on systems
34182     where the stack pointer contains the bottom address of the memory
34183     area accessible to the executing thread at any point in time.  In
34184     this situation an alternate signal stack is required in order to be
34185     able to recover from a stack overflow.  The default value of this
34186     macro is zero.
34187
34188 -- Macro: STACK_CHECK_PROTECT
34189     The number of bytes of stack needed to recover from a stack
34190     overflow, for languages where such a recovery is supported.  The
34191     default value of 4KB/8KB with the 'setjmp'/'longjmp'-based
34192     exception handling mechanism and 8KB/12KB with other exception
34193     handling mechanisms should be adequate for most architectures and
34194     operating systems.
34195
34196 The following macros are relevant only if neither STACK_CHECK_BUILTIN
34197nor STACK_CHECK_STATIC_BUILTIN is defined; you can omit them altogether
34198in the opposite case.
34199
34200 -- Macro: STACK_CHECK_MAX_FRAME_SIZE
34201     The maximum size of a stack frame, in bytes.  GCC will generate
34202     probe instructions in non-leaf functions to ensure at least this
34203     many bytes of stack are available.  If a stack frame is larger than
34204     this size, stack checking will not be reliable and GCC will issue a
34205     warning.  The default is chosen so that GCC only generates one
34206     instruction on most systems.  You should normally not change the
34207     default value of this macro.
34208
34209 -- Macro: STACK_CHECK_FIXED_FRAME_SIZE
34210     GCC uses this value to generate the above warning message.  It
34211     represents the amount of fixed frame used by a function, not
34212     including space for any callee-saved registers, temporaries and
34213     user variables.  You need only specify an upper bound for this
34214     amount and will normally use the default of four words.
34215
34216 -- Macro: STACK_CHECK_MAX_VAR_SIZE
34217     The maximum size, in bytes, of an object that GCC will place in the
34218     fixed area of the stack frame when the user specifies
34219     '-fstack-check'.  GCC computed the default from the values of the
34220     above macros and you will normally not need to override that
34221     default.
34222
34223 -- Target Hook: HOST_WIDE_INT
34224          TARGET_STACK_CLASH_PROTECTION_ALLOCA_PROBE_RANGE (void)
34225     Some targets have an ABI defined interval for which no probing
34226     needs to be done.  When a probe does need to be done this same
34227     interval is used as the probe distance up when doing stack clash
34228     protection for alloca.  On such targets this value can be set to
34229     override the default probing up interval.  Define this variable to
34230     return nonzero if such a probe range is required or zero otherwise.
34231     Defining this hook also requires your functions which make use of
34232     alloca to have at least 8 byesof outgoing arguments.  If this is
34233     not the case the stack will be corrupted.  You need not define this
34234     macro if it would always have the value zero.
34235
34236
34237File: gccint.info,  Node: Frame Registers,  Next: Elimination,  Prev: Stack Checking,  Up: Stack and Calling
34238
3423918.9.4 Registers That Address the Stack Frame
34240---------------------------------------------
34241
34242This discusses registers that address the stack frame.
34243
34244 -- Macro: STACK_POINTER_REGNUM
34245     The register number of the stack pointer register, which must also
34246     be a fixed register according to 'FIXED_REGISTERS'.  On most
34247     machines, the hardware determines which register this is.
34248
34249 -- Macro: FRAME_POINTER_REGNUM
34250     The register number of the frame pointer register, which is used to
34251     access automatic variables in the stack frame.  On some machines,
34252     the hardware determines which register this is.  On other machines,
34253     you can choose any register you wish for this purpose.
34254
34255 -- Macro: HARD_FRAME_POINTER_REGNUM
34256     On some machines the offset between the frame pointer and starting
34257     offset of the automatic variables is not known until after register
34258     allocation has been done (for example, because the saved registers
34259     are between these two locations).  On those machines, define
34260     'FRAME_POINTER_REGNUM' the number of a special, fixed register to
34261     be used internally until the offset is known, and define
34262     'HARD_FRAME_POINTER_REGNUM' to be the actual hard register number
34263     used for the frame pointer.
34264
34265     You should define this macro only in the very rare circumstances
34266     when it is not possible to calculate the offset between the frame
34267     pointer and the automatic variables until after register allocation
34268     has been completed.  When this macro is defined, you must also
34269     indicate in your definition of 'ELIMINABLE_REGS' how to eliminate
34270     'FRAME_POINTER_REGNUM' into either 'HARD_FRAME_POINTER_REGNUM' or
34271     'STACK_POINTER_REGNUM'.
34272
34273     Do not define this macro if it would be the same as
34274     'FRAME_POINTER_REGNUM'.
34275
34276 -- Macro: ARG_POINTER_REGNUM
34277     The register number of the arg pointer register, which is used to
34278     access the function's argument list.  On some machines, this is the
34279     same as the frame pointer register.  On some machines, the hardware
34280     determines which register this is.  On other machines, you can
34281     choose any register you wish for this purpose.  If this is not the
34282     same register as the frame pointer register, then you must mark it
34283     as a fixed register according to 'FIXED_REGISTERS', or arrange to
34284     be able to eliminate it (*note Elimination::).
34285
34286 -- Macro: HARD_FRAME_POINTER_IS_FRAME_POINTER
34287     Define this to a preprocessor constant that is nonzero if
34288     'hard_frame_pointer_rtx' and 'frame_pointer_rtx' should be the
34289     same.  The default definition is '(HARD_FRAME_POINTER_REGNUM ==
34290     FRAME_POINTER_REGNUM)'; you only need to define this macro if that
34291     definition is not suitable for use in preprocessor conditionals.
34292
34293 -- Macro: HARD_FRAME_POINTER_IS_ARG_POINTER
34294     Define this to a preprocessor constant that is nonzero if
34295     'hard_frame_pointer_rtx' and 'arg_pointer_rtx' should be the same.
34296     The default definition is '(HARD_FRAME_POINTER_REGNUM ==
34297     ARG_POINTER_REGNUM)'; you only need to define this macro if that
34298     definition is not suitable for use in preprocessor conditionals.
34299
34300 -- Macro: RETURN_ADDRESS_POINTER_REGNUM
34301     The register number of the return address pointer register, which
34302     is used to access the current function's return address from the
34303     stack.  On some machines, the return address is not at a fixed
34304     offset from the frame pointer or stack pointer or argument pointer.
34305     This register can be defined to point to the return address on the
34306     stack, and then be converted by 'ELIMINABLE_REGS' into either the
34307     frame pointer or stack pointer.
34308
34309     Do not define this macro unless there is no other way to get the
34310     return address from the stack.
34311
34312 -- Macro: STATIC_CHAIN_REGNUM
34313 -- Macro: STATIC_CHAIN_INCOMING_REGNUM
34314     Register numbers used for passing a function's static chain
34315     pointer.  If register windows are used, the register number as seen
34316     by the called function is 'STATIC_CHAIN_INCOMING_REGNUM', while the
34317     register number as seen by the calling function is
34318     'STATIC_CHAIN_REGNUM'.  If these registers are the same,
34319     'STATIC_CHAIN_INCOMING_REGNUM' need not be defined.
34320
34321     The static chain register need not be a fixed register.
34322
34323     If the static chain is passed in memory, these macros should not be
34324     defined; instead, the 'TARGET_STATIC_CHAIN' hook should be used.
34325
34326 -- Target Hook: rtx TARGET_STATIC_CHAIN (const_tree FNDECL_OR_TYPE,
34327          bool INCOMING_P)
34328     This hook replaces the use of 'STATIC_CHAIN_REGNUM' et al for
34329     targets that may use different static chain locations for different
34330     nested functions.  This may be required if the target has function
34331     attributes that affect the calling conventions of the function and
34332     those calling conventions use different static chain locations.
34333
34334     The default version of this hook uses 'STATIC_CHAIN_REGNUM' et al.
34335
34336     If the static chain is passed in memory, this hook should be used
34337     to provide rtx giving 'mem' expressions that denote where they are
34338     stored.  Often the 'mem' expression as seen by the caller will be
34339     at an offset from the stack pointer and the 'mem' expression as
34340     seen by the callee will be at an offset from the frame pointer.
34341     The variables 'stack_pointer_rtx', 'frame_pointer_rtx', and
34342     'arg_pointer_rtx' will have been initialized and should be used to
34343     refer to those items.
34344
34345 -- Macro: DWARF_FRAME_REGISTERS
34346     This macro specifies the maximum number of hard registers that can
34347     be saved in a call frame.  This is used to size data structures
34348     used in DWARF2 exception handling.
34349
34350     Prior to GCC 3.0, this macro was needed in order to establish a
34351     stable exception handling ABI in the face of adding new hard
34352     registers for ISA extensions.  In GCC 3.0 and later, the EH ABI is
34353     insulated from changes in the number of hard registers.
34354     Nevertheless, this macro can still be used to reduce the runtime
34355     memory requirements of the exception handling routines, which can
34356     be substantial if the ISA contains a lot of registers that are not
34357     call-saved.
34358
34359     If this macro is not defined, it defaults to
34360     'FIRST_PSEUDO_REGISTER'.
34361
34362 -- Macro: PRE_GCC3_DWARF_FRAME_REGISTERS
34363
34364     This macro is similar to 'DWARF_FRAME_REGISTERS', but is provided
34365     for backward compatibility in pre GCC 3.0 compiled code.
34366
34367     If this macro is not defined, it defaults to
34368     'DWARF_FRAME_REGISTERS'.
34369
34370 -- Macro: DWARF_REG_TO_UNWIND_COLUMN (REGNO)
34371
34372     Define this macro if the target's representation for dwarf
34373     registers is different than the internal representation for unwind
34374     column.  Given a dwarf register, this macro should return the
34375     internal unwind column number to use instead.
34376
34377 -- Macro: DWARF_FRAME_REGNUM (REGNO)
34378
34379     Define this macro if the target's representation for dwarf
34380     registers used in .eh_frame or .debug_frame is different from that
34381     used in other debug info sections.  Given a GCC hard register
34382     number, this macro should return the .eh_frame register number.
34383     The default is 'DBX_REGISTER_NUMBER (REGNO)'.
34384
34385 -- Macro: DWARF2_FRAME_REG_OUT (REGNO, FOR_EH)
34386
34387     Define this macro to map register numbers held in the call frame
34388     info that GCC has collected using 'DWARF_FRAME_REGNUM' to those
34389     that should be output in .debug_frame ('FOR_EH' is zero) and
34390     .eh_frame ('FOR_EH' is nonzero).  The default is to return 'REGNO'.
34391
34392 -- Macro: REG_VALUE_IN_UNWIND_CONTEXT
34393
34394     Define this macro if the target stores register values as
34395     '_Unwind_Word' type in unwind context.  It should be defined if
34396     target register size is larger than the size of 'void *'.  The
34397     default is to store register values as 'void *' type.
34398
34399 -- Macro: ASSUME_EXTENDED_UNWIND_CONTEXT
34400
34401     Define this macro to be 1 if the target always uses extended unwind
34402     context with version, args_size and by_value fields.  If it is
34403     undefined, it will be defined to 1 when
34404     'REG_VALUE_IN_UNWIND_CONTEXT' is defined and 0 otherwise.
34405
34406 -- Macro: DWARF_LAZY_REGISTER_VALUE (REGNO, VALUE)
34407     Define this macro if the target has pseudo DWARF registers whose
34408     values need to be computed lazily on demand by the unwinder (such
34409     as when referenced in a CFA expression).  The macro returns true if
34410     REGNO is such a register and stores its value in '*VALUE' if so.
34411
34412
34413File: gccint.info,  Node: Elimination,  Next: Stack Arguments,  Prev: Frame Registers,  Up: Stack and Calling
34414
3441518.9.5 Eliminating Frame Pointer and Arg Pointer
34416------------------------------------------------
34417
34418This is about eliminating the frame pointer and arg pointer.
34419
34420 -- Target Hook: bool TARGET_FRAME_POINTER_REQUIRED (void)
34421     This target hook should return 'true' if a function must have and
34422     use a frame pointer.  This target hook is called in the reload
34423     pass.  If its return value is 'true' the function will have a frame
34424     pointer.
34425
34426     This target hook can in principle examine the current function and
34427     decide according to the facts, but on most machines the constant
34428     'false' or the constant 'true' suffices.  Use 'false' when the
34429     machine allows code to be generated with no frame pointer, and
34430     doing so saves some time or space.  Use 'true' when there is no
34431     possible advantage to avoiding a frame pointer.
34432
34433     In certain cases, the compiler does not know how to produce valid
34434     code without a frame pointer.  The compiler recognizes those cases
34435     and automatically gives the function a frame pointer regardless of
34436     what 'targetm.frame_pointer_required' returns.  You don't need to
34437     worry about them.
34438
34439     In a function that does not require a frame pointer, the frame
34440     pointer register can be allocated for ordinary usage, unless you
34441     mark it as a fixed register.  See 'FIXED_REGISTERS' for more
34442     information.
34443
34444     Default return value is 'false'.
34445
34446 -- Macro: ELIMINABLE_REGS
34447     This macro specifies a table of register pairs used to eliminate
34448     unneeded registers that point into the stack frame.
34449
34450     The definition of this macro is a list of structure
34451     initializations, each of which specifies an original and
34452     replacement register.
34453
34454     On some machines, the position of the argument pointer is not known
34455     until the compilation is completed.  In such a case, a separate
34456     hard register must be used for the argument pointer.  This register
34457     can be eliminated by replacing it with either the frame pointer or
34458     the argument pointer, depending on whether or not the frame pointer
34459     has been eliminated.
34460
34461     In this case, you might specify:
34462          #define ELIMINABLE_REGS  \
34463          {{ARG_POINTER_REGNUM, STACK_POINTER_REGNUM}, \
34464           {ARG_POINTER_REGNUM, FRAME_POINTER_REGNUM}, \
34465           {FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM}}
34466
34467     Note that the elimination of the argument pointer with the stack
34468     pointer is specified first since that is the preferred elimination.
34469
34470 -- Target Hook: bool TARGET_CAN_ELIMINATE (const int FROM_REG, const
34471          int TO_REG)
34472     This target hook should return 'true' if the compiler is allowed to
34473     try to replace register number FROM_REG with register number
34474     TO_REG.  This target hook will usually be 'true', since most of the
34475     cases preventing register elimination are things that the compiler
34476     already knows about.
34477
34478     Default return value is 'true'.
34479
34480 -- Macro: INITIAL_ELIMINATION_OFFSET (FROM-REG, TO-REG, OFFSET-VAR)
34481     This macro returns the initial difference between the specified
34482     pair of registers.  The value would be computed from information
34483     such as the result of 'get_frame_size ()' and the tables of
34484     registers 'df_regs_ever_live_p' and 'call_used_regs'.
34485
34486 -- Target Hook: void TARGET_COMPUTE_FRAME_LAYOUT (void)
34487     This target hook is called once each time the frame layout needs to
34488     be recalculated.  The calculations can be cached by the target and
34489     can then be used by 'INITIAL_ELIMINATION_OFFSET' instead of
34490     re-computing the layout on every invocation of that hook.  This is
34491     particularly useful for targets that have an expensive frame layout
34492     function.  Implementing this callback is optional.
34493
34494
34495File: gccint.info,  Node: Stack Arguments,  Next: Register Arguments,  Prev: Elimination,  Up: Stack and Calling
34496
3449718.9.6 Passing Function Arguments on the Stack
34498----------------------------------------------
34499
34500The macros in this section control how arguments are passed on the
34501stack.  See the following section for other macros that control passing
34502certain arguments in registers.
34503
34504 -- Target Hook: bool TARGET_PROMOTE_PROTOTYPES (const_tree FNTYPE)
34505     This target hook returns 'true' if an argument declared in a
34506     prototype as an integral type smaller than 'int' should actually be
34507     passed as an 'int'.  In addition to avoiding errors in certain
34508     cases of mismatch, it also makes for better code on certain
34509     machines.  The default is to not promote prototypes.
34510
34511 -- Macro: PUSH_ARGS
34512     A C expression.  If nonzero, push insns will be used to pass
34513     outgoing arguments.  If the target machine does not have a push
34514     instruction, set it to zero.  That directs GCC to use an alternate
34515     strategy: to allocate the entire argument block and then store the
34516     arguments into it.  When 'PUSH_ARGS' is nonzero, 'PUSH_ROUNDING'
34517     must be defined too.
34518
34519 -- Macro: PUSH_ARGS_REVERSED
34520     A C expression.  If nonzero, function arguments will be evaluated
34521     from last to first, rather than from first to last.  If this macro
34522     is not defined, it defaults to 'PUSH_ARGS' on targets where the
34523     stack and args grow in opposite directions, and 0 otherwise.
34524
34525 -- Macro: PUSH_ROUNDING (NPUSHED)
34526     A C expression that is the number of bytes actually pushed onto the
34527     stack when an instruction attempts to push NPUSHED bytes.
34528
34529     On some machines, the definition
34530
34531          #define PUSH_ROUNDING(BYTES) (BYTES)
34532
34533     will suffice.  But on other machines, instructions that appear to
34534     push one byte actually push two bytes in an attempt to maintain
34535     alignment.  Then the definition should be
34536
34537          #define PUSH_ROUNDING(BYTES) (((BYTES) + 1) & ~1)
34538
34539     If the value of this macro has a type, it should be an unsigned
34540     type.
34541
34542 -- Macro: ACCUMULATE_OUTGOING_ARGS
34543     A C expression.  If nonzero, the maximum amount of space required
34544     for outgoing arguments will be computed and placed into
34545     'crtl->outgoing_args_size'.  No space will be pushed onto the stack
34546     for each call; instead, the function prologue should increase the
34547     stack frame size by this amount.
34548
34549     Setting both 'PUSH_ARGS' and 'ACCUMULATE_OUTGOING_ARGS' is not
34550     proper.
34551
34552 -- Macro: REG_PARM_STACK_SPACE (FNDECL)
34553     Define this macro if functions should assume that stack space has
34554     been allocated for arguments even when their values are passed in
34555     registers.
34556
34557     The value of this macro is the size, in bytes, of the area reserved
34558     for arguments passed in registers for the function represented by
34559     FNDECL, which can be zero if GCC is calling a library function.
34560     The argument FNDECL can be the FUNCTION_DECL, or the type itself of
34561     the function.
34562
34563     This space can be allocated by the caller, or be a part of the
34564     machine-dependent stack frame: 'OUTGOING_REG_PARM_STACK_SPACE' says
34565     which.
34566
34567 -- Macro: INCOMING_REG_PARM_STACK_SPACE (FNDECL)
34568     Like 'REG_PARM_STACK_SPACE', but for incoming register arguments.
34569     Define this macro if space guaranteed when compiling a function
34570     body is different to space required when making a call, a situation
34571     that can arise with K&R style function definitions.
34572
34573 -- Macro: OUTGOING_REG_PARM_STACK_SPACE (FNTYPE)
34574     Define this to a nonzero value if it is the responsibility of the
34575     caller to allocate the area reserved for arguments passed in
34576     registers when calling a function of FNTYPE.  FNTYPE may be NULL if
34577     the function called is a library function.
34578
34579     If 'ACCUMULATE_OUTGOING_ARGS' is defined, this macro controls
34580     whether the space for these arguments counts in the value of
34581     'crtl->outgoing_args_size'.
34582
34583 -- Macro: STACK_PARMS_IN_REG_PARM_AREA
34584     Define this macro if 'REG_PARM_STACK_SPACE' is defined, but the
34585     stack parameters don't skip the area specified by it.
34586
34587     Normally, when a parameter is not passed in registers, it is placed
34588     on the stack beyond the 'REG_PARM_STACK_SPACE' area.  Defining this
34589     macro suppresses this behavior and causes the parameter to be
34590     passed on the stack in its natural location.
34591
34592 -- Target Hook: poly_int64 TARGET_RETURN_POPS_ARGS (tree FUNDECL, tree
34593          FUNTYPE, poly_int64 SIZE)
34594     This target hook returns the number of bytes of its own arguments
34595     that a function pops on returning, or 0 if the function pops no
34596     arguments and the caller must therefore pop them all after the
34597     function returns.
34598
34599     FUNDECL is a C variable whose value is a tree node that describes
34600     the function in question.  Normally it is a node of type
34601     'FUNCTION_DECL' that describes the declaration of the function.
34602     From this you can obtain the 'DECL_ATTRIBUTES' of the function.
34603
34604     FUNTYPE is a C variable whose value is a tree node that describes
34605     the function in question.  Normally it is a node of type
34606     'FUNCTION_TYPE' that describes the data type of the function.  From
34607     this it is possible to obtain the data types of the value and
34608     arguments (if known).
34609
34610     When a call to a library function is being considered, FUNDECL will
34611     contain an identifier node for the library function.  Thus, if you
34612     need to distinguish among various library functions, you can do so
34613     by their names.  Note that "library function" in this context means
34614     a function used to perform arithmetic, whose name is known
34615     specially in the compiler and was not mentioned in the C code being
34616     compiled.
34617
34618     SIZE is the number of bytes of arguments passed on the stack.  If a
34619     variable number of bytes is passed, it is zero, and argument
34620     popping will always be the responsibility of the calling function.
34621
34622     On the VAX, all functions always pop their arguments, so the
34623     definition of this macro is SIZE.  On the 68000, using the standard
34624     calling convention, no functions pop their arguments, so the value
34625     of the macro is always 0 in this case.  But an alternative calling
34626     convention is available in which functions that take a fixed number
34627     of arguments pop them but other functions (such as 'printf') pop
34628     nothing (the caller pops all).  When this convention is in use,
34629     FUNTYPE is examined to determine whether a function takes a fixed
34630     number of arguments.
34631
34632 -- Macro: CALL_POPS_ARGS (CUM)
34633     A C expression that should indicate the number of bytes a call
34634     sequence pops off the stack.  It is added to the value of
34635     'RETURN_POPS_ARGS' when compiling a function call.
34636
34637     CUM is the variable in which all arguments to the called function
34638     have been accumulated.
34639
34640     On certain architectures, such as the SH5, a call trampoline is
34641     used that pops certain registers off the stack, depending on the
34642     arguments that have been passed to the function.  Since this is a
34643     property of the call site, not of the called function,
34644     'RETURN_POPS_ARGS' is not appropriate.
34645
34646
34647File: gccint.info,  Node: Register Arguments,  Next: Scalar Return,  Prev: Stack Arguments,  Up: Stack and Calling
34648
3464918.9.7 Passing Arguments in Registers
34650-------------------------------------
34651
34652This section describes the macros which let you control how various
34653types of arguments are passed in registers or how they are arranged in
34654the stack.
34655
34656 -- Target Hook: rtx TARGET_FUNCTION_ARG (cumulative_args_t CA, const
34657          function_arg_info &ARG)
34658     Return an RTX indicating whether function argument ARG is passed in
34659     a register and if so, which register.  Argument CA summarizes all
34660     the previous arguments.
34661
34662     The return value is usually either a 'reg' RTX for the hard
34663     register in which to pass the argument, or zero to pass the
34664     argument on the stack.
34665
34666     The return value can be a 'const_int' which means argument is
34667     passed in a target specific slot with specified number.  Target
34668     hooks should be used to store or load argument in such case.  See
34669     'TARGET_STORE_BOUNDS_FOR_ARG' and 'TARGET_LOAD_BOUNDS_FOR_ARG' for
34670     more information.
34671
34672     The value of the expression can also be a 'parallel' RTX.  This is
34673     used when an argument is passed in multiple locations.  The mode of
34674     the 'parallel' should be the mode of the entire argument.  The
34675     'parallel' holds any number of 'expr_list' pairs; each one
34676     describes where part of the argument is passed.  In each
34677     'expr_list' the first operand must be a 'reg' RTX for the hard
34678     register in which to pass this part of the argument, and the mode
34679     of the register RTX indicates how large this part of the argument
34680     is.  The second operand of the 'expr_list' is a 'const_int' which
34681     gives the offset in bytes into the entire argument of where this
34682     part starts.  As a special exception the first 'expr_list' in the
34683     'parallel' RTX may have a first operand of zero.  This indicates
34684     that the entire argument is also stored on the stack.
34685
34686     The last time this hook is called, it is called with 'MODE ==
34687     VOIDmode', and its result is passed to the 'call' or 'call_value'
34688     pattern as operands 2 and 3 respectively.
34689
34690     The usual way to make the ISO library 'stdarg.h' work on a machine
34691     where some arguments are usually passed in registers, is to cause
34692     nameless arguments to be passed on the stack instead.  This is done
34693     by making 'TARGET_FUNCTION_ARG' return 0 whenever NAMED is 'false'.
34694
34695     You may use the hook 'targetm.calls.must_pass_in_stack' in the
34696     definition of this macro to determine if this argument is of a type
34697     that must be passed in the stack.  If 'REG_PARM_STACK_SPACE' is not
34698     defined and 'TARGET_FUNCTION_ARG' returns nonzero for such an
34699     argument, the compiler will abort.  If 'REG_PARM_STACK_SPACE' is
34700     defined, the argument will be computed in the stack and then loaded
34701     into a register.
34702
34703 -- Target Hook: bool TARGET_MUST_PASS_IN_STACK (const function_arg_info
34704          &ARG)
34705     This target hook should return 'true' if we should not pass ARG
34706     solely in registers.  The file 'expr.h' defines a definition that
34707     is usually appropriate, refer to 'expr.h' for additional
34708     documentation.
34709
34710 -- Target Hook: rtx TARGET_FUNCTION_INCOMING_ARG (cumulative_args_t CA,
34711          const function_arg_info &ARG)
34712     Define this hook if the caller and callee on the target have
34713     different views of where arguments are passed.  Also define this
34714     hook if there are functions that are never directly called, but are
34715     invoked by the hardware and which have nonstandard calling
34716     conventions.
34717
34718     In this case 'TARGET_FUNCTION_ARG' computes the register in which
34719     the caller passes the value, and 'TARGET_FUNCTION_INCOMING_ARG'
34720     should be defined in a similar fashion to tell the function being
34721     called where the arguments will arrive.
34722
34723     'TARGET_FUNCTION_INCOMING_ARG' can also return arbitrary address
34724     computation using hard register, which can be forced into a
34725     register, so that it can be used to pass special arguments.
34726
34727     If 'TARGET_FUNCTION_INCOMING_ARG' is not defined,
34728     'TARGET_FUNCTION_ARG' serves both purposes.
34729
34730 -- Target Hook: bool TARGET_USE_PSEUDO_PIC_REG (void)
34731     This hook should return 1 in case pseudo register should be created
34732     for pic_offset_table_rtx during function expand.
34733
34734 -- Target Hook: void TARGET_INIT_PIC_REG (void)
34735     Perform a target dependent initialization of pic_offset_table_rtx.
34736     This hook is called at the start of register allocation.
34737
34738 -- Target Hook: int TARGET_ARG_PARTIAL_BYTES (cumulative_args_t CUM,
34739          const function_arg_info &ARG)
34740     This target hook returns the number of bytes at the beginning of an
34741     argument that must be put in registers.  The value must be zero for
34742     arguments that are passed entirely in registers or that are
34743     entirely pushed on the stack.
34744
34745     On some machines, certain arguments must be passed partially in
34746     registers and partially in memory.  On these machines, typically
34747     the first few words of arguments are passed in registers, and the
34748     rest on the stack.  If a multi-word argument (a 'double' or a
34749     structure) crosses that boundary, its first few words must be
34750     passed in registers and the rest must be pushed.  This macro tells
34751     the compiler when this occurs, and how many bytes should go in
34752     registers.
34753
34754     'TARGET_FUNCTION_ARG' for these arguments should return the first
34755     register to be used by the caller for this argument; likewise
34756     'TARGET_FUNCTION_INCOMING_ARG', for the called function.
34757
34758 -- Target Hook: bool TARGET_PASS_BY_REFERENCE (cumulative_args_t CUM,
34759          const function_arg_info &ARG)
34760     This target hook should return 'true' if argument ARG at the
34761     position indicated by CUM should be passed by reference.  This
34762     predicate is queried after target independent reasons for being
34763     passed by reference, such as 'TREE_ADDRESSABLE (ARG.type)'.
34764
34765     If the hook returns true, a copy of that argument is made in memory
34766     and a pointer to the argument is passed instead of the argument
34767     itself.  The pointer is passed in whatever way is appropriate for
34768     passing a pointer to that type.
34769
34770 -- Target Hook: bool TARGET_CALLEE_COPIES (cumulative_args_t CUM, const
34771          function_arg_info &ARG)
34772     The function argument described by the parameters to this hook is
34773     known to be passed by reference.  The hook should return true if
34774     the function argument should be copied by the callee instead of
34775     copied by the caller.
34776
34777     For any argument for which the hook returns true, if it can be
34778     determined that the argument is not modified, then a copy need not
34779     be generated.
34780
34781     The default version of this hook always returns false.
34782
34783 -- Macro: CUMULATIVE_ARGS
34784     A C type for declaring a variable that is used as the first
34785     argument of 'TARGET_FUNCTION_ARG' and other related values.  For
34786     some target machines, the type 'int' suffices and can hold the
34787     number of bytes of argument so far.
34788
34789     There is no need to record in 'CUMULATIVE_ARGS' anything about the
34790     arguments that have been passed on the stack.  The compiler has
34791     other variables to keep track of that.  For target machines on
34792     which all arguments are passed on the stack, there is no need to
34793     store anything in 'CUMULATIVE_ARGS'; however, the data structure
34794     must exist and should not be empty, so use 'int'.
34795
34796 -- Macro: OVERRIDE_ABI_FORMAT (FNDECL)
34797     If defined, this macro is called before generating any code for a
34798     function, but after the CFUN descriptor for the function has been
34799     created.  The back end may use this macro to update CFUN to reflect
34800     an ABI other than that which would normally be used by default.  If
34801     the compiler is generating code for a compiler-generated function,
34802     FNDECL may be 'NULL'.
34803
34804 -- Macro: INIT_CUMULATIVE_ARGS (CUM, FNTYPE, LIBNAME, FNDECL,
34805          N_NAMED_ARGS)
34806     A C statement (sans semicolon) for initializing the variable CUM
34807     for the state at the beginning of the argument list.  The variable
34808     has type 'CUMULATIVE_ARGS'.  The value of FNTYPE is the tree node
34809     for the data type of the function which will receive the args, or 0
34810     if the args are to a compiler support library function.  For direct
34811     calls that are not libcalls, FNDECL contain the declaration node of
34812     the function.  FNDECL is also set when 'INIT_CUMULATIVE_ARGS' is
34813     used to find arguments for the function being compiled.
34814     N_NAMED_ARGS is set to the number of named arguments, including a
34815     structure return address if it is passed as a parameter, when
34816     making a call.  When processing incoming arguments, N_NAMED_ARGS is
34817     set to -1.
34818
34819     When processing a call to a compiler support library function,
34820     LIBNAME identifies which one.  It is a 'symbol_ref' rtx which
34821     contains the name of the function, as a string.  LIBNAME is 0 when
34822     an ordinary C function call is being processed.  Thus, each time
34823     this macro is called, either LIBNAME or FNTYPE is nonzero, but
34824     never both of them at once.
34825
34826 -- Macro: INIT_CUMULATIVE_LIBCALL_ARGS (CUM, MODE, LIBNAME)
34827     Like 'INIT_CUMULATIVE_ARGS' but only used for outgoing libcalls, it
34828     gets a 'MODE' argument instead of FNTYPE, that would be 'NULL'.
34829     INDIRECT would always be zero, too.  If this macro is not defined,
34830     'INIT_CUMULATIVE_ARGS (cum, NULL_RTX, libname, 0)' is used instead.
34831
34832 -- Macro: INIT_CUMULATIVE_INCOMING_ARGS (CUM, FNTYPE, LIBNAME)
34833     Like 'INIT_CUMULATIVE_ARGS' but overrides it for the purposes of
34834     finding the arguments for the function being compiled.  If this
34835     macro is undefined, 'INIT_CUMULATIVE_ARGS' is used instead.
34836
34837     The value passed for LIBNAME is always 0, since library routines
34838     with special calling conventions are never compiled with GCC.  The
34839     argument LIBNAME exists for symmetry with 'INIT_CUMULATIVE_ARGS'.
34840
34841 -- Target Hook: void TARGET_FUNCTION_ARG_ADVANCE (cumulative_args_t CA,
34842          const function_arg_info &ARG)
34843     This hook updates the summarizer variable pointed to by CA to
34844     advance past argument ARG in the argument list.  Once this is done,
34845     the variable CUM is suitable for analyzing the _following_ argument
34846     with 'TARGET_FUNCTION_ARG', etc.
34847
34848     This hook need not do anything if the argument in question was
34849     passed on the stack.  The compiler knows how to track the amount of
34850     stack space used for arguments without any special help.
34851
34852 -- Target Hook: HOST_WIDE_INT TARGET_FUNCTION_ARG_OFFSET (machine_mode
34853          MODE, const_tree TYPE)
34854     This hook returns the number of bytes to add to the offset of an
34855     argument of type TYPE and mode MODE when passed in memory.  This is
34856     needed for the SPU, which passes 'char' and 'short' arguments in
34857     the preferred slot that is in the middle of the quad word instead
34858     of starting at the top.  The default implementation returns 0.
34859
34860 -- Target Hook: pad_direction TARGET_FUNCTION_ARG_PADDING (machine_mode
34861          MODE, const_tree TYPE)
34862     This hook determines whether, and in which direction, to pad out an
34863     argument of mode MODE and type TYPE.  It returns 'PAD_UPWARD' to
34864     insert padding above the argument, 'PAD_DOWNWARD' to insert padding
34865     below the argument, or 'PAD_NONE' to inhibit padding.
34866
34867     The _amount_ of padding is not controlled by this hook, but by
34868     'TARGET_FUNCTION_ARG_ROUND_BOUNDARY'.  It is always just enough to
34869     reach the next multiple of that boundary.
34870
34871     This hook has a default definition that is right for most systems.
34872     For little-endian machines, the default is to pad upward.  For
34873     big-endian machines, the default is to pad downward for an argument
34874     of constant size shorter than an 'int', and upward otherwise.
34875
34876 -- Macro: PAD_VARARGS_DOWN
34877     If defined, a C expression which determines whether the default
34878     implementation of va_arg will attempt to pad down before reading
34879     the next argument, if that argument is smaller than its aligned
34880     space as controlled by 'PARM_BOUNDARY'.  If this macro is not
34881     defined, all such arguments are padded down if 'BYTES_BIG_ENDIAN'
34882     is true.
34883
34884 -- Macro: BLOCK_REG_PADDING (MODE, TYPE, FIRST)
34885     Specify padding for the last element of a block move between
34886     registers and memory.  FIRST is nonzero if this is the only
34887     element.  Defining this macro allows better control of register
34888     function parameters on big-endian machines, without using
34889     'PARALLEL' rtl.  In particular, 'MUST_PASS_IN_STACK' need not test
34890     padding and mode of types in registers, as there is no longer a
34891     "wrong" part of a register; For example, a three byte aggregate may
34892     be passed in the high part of a register if so required.
34893
34894 -- Target Hook: unsigned int TARGET_FUNCTION_ARG_BOUNDARY (machine_mode
34895          MODE, const_tree TYPE)
34896     This hook returns the alignment boundary, in bits, of an argument
34897     with the specified mode and type.  The default hook returns
34898     'PARM_BOUNDARY' for all arguments.
34899
34900 -- Target Hook: unsigned int TARGET_FUNCTION_ARG_ROUND_BOUNDARY
34901          (machine_mode MODE, const_tree TYPE)
34902     Normally, the size of an argument is rounded up to 'PARM_BOUNDARY',
34903     which is the default value for this hook.  You can define this hook
34904     to return a different value if an argument size must be rounded to
34905     a larger value.
34906
34907 -- Macro: FUNCTION_ARG_REGNO_P (REGNO)
34908     A C expression that is nonzero if REGNO is the number of a hard
34909     register in which function arguments are sometimes passed.  This
34910     does _not_ include implicit arguments such as the static chain and
34911     the structure-value address.  On many machines, no registers can be
34912     used for this purpose since all function arguments are pushed on
34913     the stack.
34914
34915 -- Target Hook: bool TARGET_SPLIT_COMPLEX_ARG (const_tree TYPE)
34916     This hook should return true if parameter of type TYPE are passed
34917     as two scalar parameters.  By default, GCC will attempt to pack
34918     complex arguments into the target's word size.  Some ABIs require
34919     complex arguments to be split and treated as their individual
34920     components.  For example, on AIX64, complex floats should be passed
34921     in a pair of floating point registers, even though a complex float
34922     would fit in one 64-bit floating point register.
34923
34924     The default value of this hook is 'NULL', which is treated as
34925     always false.
34926
34927 -- Target Hook: tree TARGET_BUILD_BUILTIN_VA_LIST (void)
34928     This hook returns a type node for 'va_list' for the target.  The
34929     default version of the hook returns 'void*'.
34930
34931 -- Target Hook: int TARGET_ENUM_VA_LIST_P (int IDX, const char **PNAME,
34932          tree *PTREE)
34933     This target hook is used in function 'c_common_nodes_and_builtins'
34934     to iterate through the target specific builtin types for va_list.
34935     The variable IDX is used as iterator.  PNAME has to be a pointer to
34936     a 'const char *' and PTREE a pointer to a 'tree' typed variable.
34937     The arguments PNAME and PTREE are used to store the result of this
34938     macro and are set to the name of the va_list builtin type and its
34939     internal type.  If the return value of this macro is zero, then
34940     there is no more element.  Otherwise the IDX should be increased
34941     for the next call of this macro to iterate through all types.
34942
34943 -- Target Hook: tree TARGET_FN_ABI_VA_LIST (tree FNDECL)
34944     This hook returns the va_list type of the calling convention
34945     specified by FNDECL.  The default version of this hook returns
34946     'va_list_type_node'.
34947
34948 -- Target Hook: tree TARGET_CANONICAL_VA_LIST_TYPE (tree TYPE)
34949     This hook returns the va_list type of the calling convention
34950     specified by the type of TYPE.  If TYPE is not a valid va_list
34951     type, it returns 'NULL_TREE'.
34952
34953 -- Target Hook: tree TARGET_GIMPLIFY_VA_ARG_EXPR (tree VALIST, tree
34954          TYPE, gimple_seq *PRE_P, gimple_seq *POST_P)
34955     This hook performs target-specific gimplification of 'VA_ARG_EXPR'.
34956     The first two parameters correspond to the arguments to 'va_arg';
34957     the latter two are as in 'gimplify.c:gimplify_expr'.
34958
34959 -- Target Hook: bool TARGET_VALID_POINTER_MODE (scalar_int_mode MODE)
34960     Define this to return nonzero if the port can handle pointers with
34961     machine mode MODE.  The default version of this hook returns true
34962     for both 'ptr_mode' and 'Pmode'.
34963
34964 -- Target Hook: bool TARGET_REF_MAY_ALIAS_ERRNO (ao_ref *REF)
34965     Define this to return nonzero if the memory reference REF may alias
34966     with the system C library errno location.  The default version of
34967     this hook assumes the system C library errno location is either a
34968     declaration of type int or accessed by dereferencing a pointer to
34969     int.
34970
34971 -- Target Hook: machine_mode TARGET_TRANSLATE_MODE_ATTRIBUTE
34972          (machine_mode MODE)
34973     Define this hook if during mode attribute processing, the port
34974     should translate machine_mode MODE to another mode.  For example,
34975     rs6000's 'KFmode', when it is the same as 'TFmode'.
34976
34977     The default version of the hook returns that mode that was passed
34978     in.
34979
34980 -- Target Hook: bool TARGET_SCALAR_MODE_SUPPORTED_P (scalar_mode MODE)
34981     Define this to return nonzero if the port is prepared to handle
34982     insns involving scalar mode MODE.  For a scalar mode to be
34983     considered supported, all the basic arithmetic and comparisons must
34984     work.
34985
34986     The default version of this hook returns true for any mode required
34987     to handle the basic C types (as defined by the port).  Included
34988     here are the double-word arithmetic supported by the code in
34989     'optabs.c'.
34990
34991 -- Target Hook: bool TARGET_VECTOR_MODE_SUPPORTED_P (machine_mode MODE)
34992     Define this to return nonzero if the port is prepared to handle
34993     insns involving vector mode MODE.  At the very least, it must have
34994     move patterns for this mode.
34995
34996 -- Target Hook: bool TARGET_COMPATIBLE_VECTOR_TYPES_P (const_tree
34997          TYPE1, const_tree TYPE2)
34998     Return true if there is no target-specific reason for treating
34999     vector types TYPE1 and TYPE2 as distinct types.  The caller has
35000     already checked for target-independent reasons, meaning that the
35001     types are known to have the same mode, to have the same number of
35002     elements, and to have what the caller considers to be compatible
35003     element types.
35004
35005     The main reason for defining this hook is to reject pairs of types
35006     that are handled differently by the target's calling convention.
35007     For example, when a new N-bit vector architecture is added to a
35008     target, the target may want to handle normal N-bit 'VECTOR_TYPE'
35009     arguments and return values in the same way as before, to maintain
35010     backwards compatibility.  However, it may also provide new,
35011     architecture-specific 'VECTOR_TYPE's that are passed and returned
35012     in a more efficient way.  It is then important to maintain a
35013     distinction between the "normal" 'VECTOR_TYPE's and the new
35014     architecture-specific ones.
35015
35016     The default implementation returns true, which is correct for most
35017     targets.
35018
35019 -- Target Hook: opt_machine_mode TARGET_ARRAY_MODE (machine_mode MODE,
35020          unsigned HOST_WIDE_INT NELEMS)
35021     Return the mode that GCC should use for an array that has NELEMS
35022     elements, with each element having mode MODE.  Return no mode if
35023     the target has no special requirements.  In the latter case, GCC
35024     looks for an integer mode of the appropriate size if available and
35025     uses BLKmode otherwise.  Usually the search for the integer mode is
35026     limited to 'MAX_FIXED_MODE_SIZE', but the
35027     'TARGET_ARRAY_MODE_SUPPORTED_P' hook allows a larger mode to be
35028     used in specific cases.
35029
35030     The main use of this hook is to specify that an array of vectors
35031     should also have a vector mode.  The default implementation returns
35032     no mode.
35033
35034 -- Target Hook: bool TARGET_ARRAY_MODE_SUPPORTED_P (machine_mode MODE,
35035          unsigned HOST_WIDE_INT NELEMS)
35036     Return true if GCC should try to use a scalar mode to store an
35037     array of NELEMS elements, given that each element has mode MODE.
35038     Returning true here overrides the usual 'MAX_FIXED_MODE' limit and
35039     allows GCC to use any defined integer mode.
35040
35041     One use of this hook is to support vector load and store operations
35042     that operate on several homogeneous vectors.  For example, ARM NEON
35043     has operations like:
35044
35045          int8x8x3_t vld3_s8 (const int8_t *)
35046
35047     where the return type is defined as:
35048
35049          typedef struct int8x8x3_t
35050          {
35051            int8x8_t val[3];
35052          } int8x8x3_t;
35053
35054     If this hook allows 'val' to have a scalar mode, then 'int8x8x3_t'
35055     can have the same mode.  GCC can then store 'int8x8x3_t's in
35056     registers rather than forcing them onto the stack.
35057
35058 -- Target Hook: bool TARGET_LIBGCC_FLOATING_MODE_SUPPORTED_P
35059          (scalar_float_mode MODE)
35060     Define this to return nonzero if libgcc provides support for the
35061     floating-point mode MODE, which is known to pass
35062     'TARGET_SCALAR_MODE_SUPPORTED_P'.  The default version of this hook
35063     returns true for all of 'SFmode', 'DFmode', 'XFmode' and 'TFmode',
35064     if such modes exist.
35065
35066 -- Target Hook: opt_scalar_float_mode TARGET_FLOATN_MODE (int N, bool
35067          EXTENDED)
35068     Define this to return the machine mode to use for the type
35069     '_FloatN', if EXTENDED is false, or the type '_FloatNx', if
35070     EXTENDED is true.  If such a type is not supported, return
35071     'opt_scalar_float_mode ()'.  The default version of this hook
35072     returns 'SFmode' for '_Float32', 'DFmode' for '_Float64' and
35073     '_Float32x' and 'TFmode' for '_Float128', if those modes exist and
35074     satisfy the requirements for those types and pass
35075     'TARGET_SCALAR_MODE_SUPPORTED_P' and
35076     'TARGET_LIBGCC_FLOATING_MODE_SUPPORTED_P'; for '_Float64x', it
35077     returns the first of 'XFmode' and 'TFmode' that exists and
35078     satisfies the same requirements; for other types, it returns
35079     'opt_scalar_float_mode ()'.  The hook is only called for values of
35080     N and EXTENDED that are valid according to ISO/IEC TS 18661-3:2015;
35081     that is, N is one of 32, 64, 128, or, if EXTENDED is false, 16 or
35082     greater than 128 and a multiple of 32.
35083
35084 -- Target Hook: bool TARGET_FLOATN_BUILTIN_P (int FUNC)
35085     Define this to return true if the '_FloatN' and '_FloatNx' built-in
35086     functions should implicitly enable the built-in function without
35087     the '__builtin_' prefix in addition to the normal built-in function
35088     with the '__builtin_' prefix.  The default is to only enable
35089     built-in functions without the '__builtin_' prefix for the GNU C
35090     langauge.  In strict ANSI/ISO mode, the built-in function without
35091     the '__builtin_' prefix is not enabled.  The argument 'FUNC' is the
35092     'enum built_in_function' id of the function to be enabled.
35093
35094 -- Target Hook: bool TARGET_SMALL_REGISTER_CLASSES_FOR_MODE_P
35095          (machine_mode MODE)
35096     Define this to return nonzero for machine modes for which the port
35097     has small register classes.  If this target hook returns nonzero
35098     for a given MODE, the compiler will try to minimize the lifetime of
35099     registers in MODE.  The hook may be called with 'VOIDmode' as
35100     argument.  In this case, the hook is expected to return nonzero if
35101     it returns nonzero for any mode.
35102
35103     On some machines, it is risky to let hard registers live across
35104     arbitrary insns.  Typically, these machines have instructions that
35105     require values to be in specific registers (like an accumulator),
35106     and reload will fail if the required hard register is used for
35107     another purpose across such an insn.
35108
35109     Passes before reload do not know which hard registers will be used
35110     in an instruction, but the machine modes of the registers set or
35111     used in the instruction are already known.  And for some machines,
35112     register classes are small for, say, integer registers but not for
35113     floating point registers.  For example, the AMD x86-64 architecture
35114     requires specific registers for the legacy x86 integer
35115     instructions, but there are many SSE registers for floating point
35116     operations.  On such targets, a good strategy may be to return
35117     nonzero from this hook for 'INTEGRAL_MODE_P' machine modes but zero
35118     for the SSE register classes.
35119
35120     The default version of this hook returns false for any mode.  It is
35121     always safe to redefine this hook to return with a nonzero value.
35122     But if you unnecessarily define it, you will reduce the amount of
35123     optimizations that can be performed in some cases.  If you do not
35124     define this hook to return a nonzero value when it is required, the
35125     compiler will run out of spill registers and print a fatal error
35126     message.
35127
35128
35129File: gccint.info,  Node: Scalar Return,  Next: Aggregate Return,  Prev: Register Arguments,  Up: Stack and Calling
35130
3513118.9.8 How Scalar Function Values Are Returned
35132----------------------------------------------
35133
35134This section discusses the macros that control returning scalars as
35135values--values that can fit in registers.
35136
35137 -- Target Hook: rtx TARGET_FUNCTION_VALUE (const_tree RET_TYPE,
35138          const_tree FN_DECL_OR_TYPE, bool OUTGOING)
35139
35140     Define this to return an RTX representing the place where a
35141     function returns or receives a value of data type RET_TYPE, a tree
35142     node representing a data type.  FN_DECL_OR_TYPE is a tree node
35143     representing 'FUNCTION_DECL' or 'FUNCTION_TYPE' of a function being
35144     called.  If OUTGOING is false, the hook should compute the register
35145     in which the caller will see the return value.  Otherwise, the hook
35146     should return an RTX representing the place where a function
35147     returns a value.
35148
35149     On many machines, only 'TYPE_MODE (RET_TYPE)' is relevant.
35150     (Actually, on most machines, scalar values are returned in the same
35151     place regardless of mode.)  The value of the expression is usually
35152     a 'reg' RTX for the hard register where the return value is stored.
35153     The value can also be a 'parallel' RTX, if the return value is in
35154     multiple places.  See 'TARGET_FUNCTION_ARG' for an explanation of
35155     the 'parallel' form.  Note that the callee will populate every
35156     location specified in the 'parallel', but if the first element of
35157     the 'parallel' contains the whole return value, callers will use
35158     that element as the canonical location and ignore the others.  The
35159     m68k port uses this type of 'parallel' to return pointers in both
35160     '%a0' (the canonical location) and '%d0'.
35161
35162     If 'TARGET_PROMOTE_FUNCTION_RETURN' returns true, you must apply
35163     the same promotion rules specified in 'PROMOTE_MODE' if VALTYPE is
35164     a scalar type.
35165
35166     If the precise function being called is known, FUNC is a tree node
35167     ('FUNCTION_DECL') for it; otherwise, FUNC is a null pointer.  This
35168     makes it possible to use a different value-returning convention for
35169     specific functions when all their calls are known.
35170
35171     Some target machines have "register windows" so that the register
35172     in which a function returns its value is not the same as the one in
35173     which the caller sees the value.  For such machines, you should
35174     return different RTX depending on OUTGOING.
35175
35176     'TARGET_FUNCTION_VALUE' is not used for return values with
35177     aggregate data types, because these are returned in another way.
35178     See 'TARGET_STRUCT_VALUE_RTX' and related macros, below.
35179
35180 -- Macro: FUNCTION_VALUE (VALTYPE, FUNC)
35181     This macro has been deprecated.  Use 'TARGET_FUNCTION_VALUE' for a
35182     new target instead.
35183
35184 -- Macro: LIBCALL_VALUE (MODE)
35185     A C expression to create an RTX representing the place where a
35186     library function returns a value of mode MODE.
35187
35188     Note that "library function" in this context means a compiler
35189     support routine, used to perform arithmetic, whose name is known
35190     specially by the compiler and was not mentioned in the C code being
35191     compiled.
35192
35193 -- Target Hook: rtx TARGET_LIBCALL_VALUE (machine_mode MODE, const_rtx
35194          FUN)
35195     Define this hook if the back-end needs to know the name of the
35196     libcall function in order to determine where the result should be
35197     returned.
35198
35199     The mode of the result is given by MODE and the name of the called
35200     library function is given by FUN.  The hook should return an RTX
35201     representing the place where the library function result will be
35202     returned.
35203
35204     If this hook is not defined, then LIBCALL_VALUE will be used.
35205
35206 -- Macro: FUNCTION_VALUE_REGNO_P (REGNO)
35207     A C expression that is nonzero if REGNO is the number of a hard
35208     register in which the values of called function may come back.
35209
35210     A register whose use for returning values is limited to serving as
35211     the second of a pair (for a value of type 'double', say) need not
35212     be recognized by this macro.  So for most machines, this definition
35213     suffices:
35214
35215          #define FUNCTION_VALUE_REGNO_P(N) ((N) == 0)
35216
35217     If the machine has register windows, so that the caller and the
35218     called function use different registers for the return value, this
35219     macro should recognize only the caller's register numbers.
35220
35221     This macro has been deprecated.  Use
35222     'TARGET_FUNCTION_VALUE_REGNO_P' for a new target instead.
35223
35224 -- Target Hook: bool TARGET_FUNCTION_VALUE_REGNO_P (const unsigned int
35225          REGNO)
35226     A target hook that return 'true' if REGNO is the number of a hard
35227     register in which the values of called function may come back.
35228
35229     A register whose use for returning values is limited to serving as
35230     the second of a pair (for a value of type 'double', say) need not
35231     be recognized by this target hook.
35232
35233     If the machine has register windows, so that the caller and the
35234     called function use different registers for the return value, this
35235     target hook should recognize only the caller's register numbers.
35236
35237     If this hook is not defined, then FUNCTION_VALUE_REGNO_P will be
35238     used.
35239
35240 -- Macro: APPLY_RESULT_SIZE
35241     Define this macro if 'untyped_call' and 'untyped_return' need more
35242     space than is implied by 'FUNCTION_VALUE_REGNO_P' for saving and
35243     restoring an arbitrary return value.
35244
35245 -- Target Hook: bool TARGET_OMIT_STRUCT_RETURN_REG
35246     Normally, when a function returns a structure by memory, the
35247     address is passed as an invisible pointer argument, but the
35248     compiler also arranges to return the address from the function like
35249     it would a normal pointer return value.  Define this to true if
35250     that behavior is undesirable on your target.
35251
35252 -- Target Hook: bool TARGET_RETURN_IN_MSB (const_tree TYPE)
35253     This hook should return true if values of type TYPE are returned at
35254     the most significant end of a register (in other words, if they are
35255     padded at the least significant end).  You can assume that TYPE is
35256     returned in a register; the caller is required to check this.
35257
35258     Note that the register provided by 'TARGET_FUNCTION_VALUE' must be
35259     able to hold the complete return value.  For example, if a 1-, 2-
35260     or 3-byte structure is returned at the most significant end of a
35261     4-byte register, 'TARGET_FUNCTION_VALUE' should provide an 'SImode'
35262     rtx.
35263
35264
35265File: gccint.info,  Node: Aggregate Return,  Next: Caller Saves,  Prev: Scalar Return,  Up: Stack and Calling
35266
3526718.9.9 How Large Values Are Returned
35268------------------------------------
35269
35270When a function value's mode is 'BLKmode' (and in some other cases), the
35271value is not returned according to 'TARGET_FUNCTION_VALUE' (*note Scalar
35272Return::).  Instead, the caller passes the address of a block of memory
35273in which the value should be stored.  This address is called the
35274"structure value address".
35275
35276 This section describes how to control returning structure values in
35277memory.
35278
35279 -- Target Hook: bool TARGET_RETURN_IN_MEMORY (const_tree TYPE,
35280          const_tree FNTYPE)
35281     This target hook should return a nonzero value to say to return the
35282     function value in memory, just as large structures are always
35283     returned.  Here TYPE will be the data type of the value, and FNTYPE
35284     will be the type of the function doing the returning, or 'NULL' for
35285     libcalls.
35286
35287     Note that values of mode 'BLKmode' must be explicitly handled by
35288     this function.  Also, the option '-fpcc-struct-return' takes effect
35289     regardless of this macro.  On most systems, it is possible to leave
35290     the hook undefined; this causes a default definition to be used,
35291     whose value is the constant 1 for 'BLKmode' values, and 0
35292     otherwise.
35293
35294     Do not use this hook to indicate that structures and unions should
35295     always be returned in memory.  You should instead use
35296     'DEFAULT_PCC_STRUCT_RETURN' to indicate this.
35297
35298 -- Macro: DEFAULT_PCC_STRUCT_RETURN
35299     Define this macro to be 1 if all structure and union return values
35300     must be in memory.  Since this results in slower code, this should
35301     be defined only if needed for compatibility with other compilers or
35302     with an ABI.  If you define this macro to be 0, then the
35303     conventions used for structure and union return values are decided
35304     by the 'TARGET_RETURN_IN_MEMORY' target hook.
35305
35306     If not defined, this defaults to the value 1.
35307
35308 -- Target Hook: rtx TARGET_STRUCT_VALUE_RTX (tree FNDECL, int INCOMING)
35309     This target hook should return the location of the structure value
35310     address (normally a 'mem' or 'reg'), or 0 if the address is passed
35311     as an "invisible" first argument.  Note that FNDECL may be 'NULL',
35312     for libcalls.  You do not need to define this target hook if the
35313     address is always passed as an "invisible" first argument.
35314
35315     On some architectures the place where the structure value address
35316     is found by the called function is not the same place that the
35317     caller put it.  This can be due to register windows, or it could be
35318     because the function prologue moves it to a different place.
35319     INCOMING is '1' or '2' when the location is needed in the context
35320     of the called function, and '0' in the context of the caller.
35321
35322     If INCOMING is nonzero and the address is to be found on the stack,
35323     return a 'mem' which refers to the frame pointer.  If INCOMING is
35324     '2', the result is being used to fetch the structure value address
35325     at the beginning of a function.  If you need to emit adjusting
35326     code, you should do it at this point.
35327
35328 -- Macro: PCC_STATIC_STRUCT_RETURN
35329     Define this macro if the usual system convention on the target
35330     machine for returning structures and unions is for the called
35331     function to return the address of a static variable containing the
35332     value.
35333
35334     Do not define this if the usual system convention is for the caller
35335     to pass an address to the subroutine.
35336
35337     This macro has effect in '-fpcc-struct-return' mode, but it does
35338     nothing when you use '-freg-struct-return' mode.
35339
35340 -- Target Hook: fixed_size_mode TARGET_GET_RAW_RESULT_MODE (int REGNO)
35341     This target hook returns the mode to be used when accessing raw
35342     return registers in '__builtin_return'.  Define this macro if the
35343     value in REG_RAW_MODE is not correct.
35344
35345 -- Target Hook: fixed_size_mode TARGET_GET_RAW_ARG_MODE (int REGNO)
35346     This target hook returns the mode to be used when accessing raw
35347     argument registers in '__builtin_apply_args'.  Define this macro if
35348     the value in REG_RAW_MODE is not correct.
35349
35350 -- Target Hook: bool TARGET_EMPTY_RECORD_P (const_tree TYPE)
35351     This target hook returns true if the type is an empty record.  The
35352     default is to return 'false'.
35353
35354 -- Target Hook: void TARGET_WARN_PARAMETER_PASSING_ABI
35355          (cumulative_args_t CA, tree TYPE)
35356     This target hook warns about the change in empty class parameter
35357     passing ABI.
35358
35359
35360File: gccint.info,  Node: Caller Saves,  Next: Function Entry,  Prev: Aggregate Return,  Up: Stack and Calling
35361
3536218.9.10 Caller-Saves Register Allocation
35363----------------------------------------
35364
35365If you enable it, GCC can save registers around function calls.  This
35366makes it possible to use call-clobbered registers to hold variables that
35367must live across calls.
35368
35369 -- Macro: HARD_REGNO_CALLER_SAVE_MODE (REGNO, NREGS)
35370     A C expression specifying which mode is required for saving NREGS
35371     of a pseudo-register in call-clobbered hard register REGNO.  If
35372     REGNO is unsuitable for caller save, 'VOIDmode' should be returned.
35373     For most machines this macro need not be defined since GCC will
35374     select the smallest suitable mode.
35375
35376
35377File: gccint.info,  Node: Function Entry,  Next: Profiling,  Prev: Caller Saves,  Up: Stack and Calling
35378
3537918.9.11 Function Entry and Exit
35380-------------------------------
35381
35382This section describes the macros that output function entry
35383("prologue") and exit ("epilogue") code.
35384
35385 -- Target Hook: void TARGET_ASM_PRINT_PATCHABLE_FUNCTION_ENTRY (FILE
35386          *FILE, unsigned HOST_WIDE_INT PATCH_AREA_SIZE, bool RECORD_P)
35387     Generate a patchable area at the function start, consisting of
35388     PATCH_AREA_SIZE NOP instructions.  If the target supports named
35389     sections and if RECORD_P is true, insert a pointer to the current
35390     location in the table of patchable functions.  The default
35391     implementation of the hook places the table of pointers in the
35392     special section named '__patchable_function_entries'.
35393
35394 -- Target Hook: void TARGET_ASM_FUNCTION_PROLOGUE (FILE *FILE)
35395     If defined, a function that outputs the assembler code for entry to
35396     a function.  The prologue is responsible for setting up the stack
35397     frame, initializing the frame pointer register, saving registers
35398     that must be saved, and allocating SIZE additional bytes of storage
35399     for the local variables.  FILE is a stdio stream to which the
35400     assembler code should be output.
35401
35402     The label for the beginning of the function need not be output by
35403     this macro.  That has already been done when the macro is run.
35404
35405     To determine which registers to save, the macro can refer to the
35406     array 'regs_ever_live': element R is nonzero if hard register R is
35407     used anywhere within the function.  This implies the function
35408     prologue should save register R, provided it is not one of the
35409     call-used registers.  ('TARGET_ASM_FUNCTION_EPILOGUE' must likewise
35410     use 'regs_ever_live'.)
35411
35412     On machines that have "register windows", the function entry code
35413     does not save on the stack the registers that are in the windows,
35414     even if they are supposed to be preserved by function calls;
35415     instead it takes appropriate steps to "push" the register stack, if
35416     any non-call-used registers are used in the function.
35417
35418     On machines where functions may or may not have frame-pointers, the
35419     function entry code must vary accordingly; it must set up the frame
35420     pointer if one is wanted, and not otherwise.  To determine whether
35421     a frame pointer is in wanted, the macro can refer to the variable
35422     'frame_pointer_needed'.  The variable's value will be 1 at run time
35423     in a function that needs a frame pointer.  *Note Elimination::.
35424
35425     The function entry code is responsible for allocating any stack
35426     space required for the function.  This stack space consists of the
35427     regions listed below.  In most cases, these regions are allocated
35428     in the order listed, with the last listed region closest to the top
35429     of the stack (the lowest address if 'STACK_GROWS_DOWNWARD' is
35430     defined, and the highest address if it is not defined).  You can
35431     use a different order for a machine if doing so is more convenient
35432     or required for compatibility reasons.  Except in cases where
35433     required by standard or by a debugger, there is no reason why the
35434     stack layout used by GCC need agree with that used by other
35435     compilers for a machine.
35436
35437 -- Target Hook: void TARGET_ASM_FUNCTION_END_PROLOGUE (FILE *FILE)
35438     If defined, a function that outputs assembler code at the end of a
35439     prologue.  This should be used when the function prologue is being
35440     emitted as RTL, and you have some extra assembler that needs to be
35441     emitted.  *Note prologue instruction pattern::.
35442
35443 -- Target Hook: void TARGET_ASM_FUNCTION_BEGIN_EPILOGUE (FILE *FILE)
35444     If defined, a function that outputs assembler code at the start of
35445     an epilogue.  This should be used when the function epilogue is
35446     being emitted as RTL, and you have some extra assembler that needs
35447     to be emitted.  *Note epilogue instruction pattern::.
35448
35449 -- Target Hook: void TARGET_ASM_FUNCTION_EPILOGUE (FILE *FILE)
35450     If defined, a function that outputs the assembler code for exit
35451     from a function.  The epilogue is responsible for restoring the
35452     saved registers and stack pointer to their values when the function
35453     was called, and returning control to the caller.  This macro takes
35454     the same argument as the macro 'TARGET_ASM_FUNCTION_PROLOGUE', and
35455     the registers to restore are determined from 'regs_ever_live' and
35456     'CALL_USED_REGISTERS' in the same way.
35457
35458     On some machines, there is a single instruction that does all the
35459     work of returning from the function.  On these machines, give that
35460     instruction the name 'return' and do not define the macro
35461     'TARGET_ASM_FUNCTION_EPILOGUE' at all.
35462
35463     Do not define a pattern named 'return' if you want the
35464     'TARGET_ASM_FUNCTION_EPILOGUE' to be used.  If you want the target
35465     switches to control whether return instructions or epilogues are
35466     used, define a 'return' pattern with a validity condition that
35467     tests the target switches appropriately.  If the 'return' pattern's
35468     validity condition is false, epilogues will be used.
35469
35470     On machines where functions may or may not have frame-pointers, the
35471     function exit code must vary accordingly.  Sometimes the code for
35472     these two cases is completely different.  To determine whether a
35473     frame pointer is wanted, the macro can refer to the variable
35474     'frame_pointer_needed'.  The variable's value will be 1 when
35475     compiling a function that needs a frame pointer.
35476
35477     Normally, 'TARGET_ASM_FUNCTION_PROLOGUE' and
35478     'TARGET_ASM_FUNCTION_EPILOGUE' must treat leaf functions specially.
35479     The C variable 'current_function_is_leaf' is nonzero for such a
35480     function.  *Note Leaf Functions::.
35481
35482     On some machines, some functions pop their arguments on exit while
35483     others leave that for the caller to do.  For example, the 68020
35484     when given '-mrtd' pops arguments in functions that take a fixed
35485     number of arguments.
35486
35487     Your definition of the macro 'RETURN_POPS_ARGS' decides which
35488     functions pop their own arguments.  'TARGET_ASM_FUNCTION_EPILOGUE'
35489     needs to know what was decided.  The number of bytes of the current
35490     function's arguments that this function should pop is available in
35491     'crtl->args.pops_args'.  *Note Scalar Return::.
35492
35493   * A region of 'crtl->args.pretend_args_size' bytes of uninitialized
35494     space just underneath the first argument arriving on the stack.
35495     (This may not be at the very start of the allocated stack region if
35496     the calling sequence has pushed anything else since pushing the
35497     stack arguments.  But usually, on such machines, nothing else has
35498     been pushed yet, because the function prologue itself does all the
35499     pushing.)  This region is used on machines where an argument may be
35500     passed partly in registers and partly in memory, and, in some cases
35501     to support the features in '<stdarg.h>'.
35502
35503   * An area of memory used to save certain registers used by the
35504     function.  The size of this area, which may also include space for
35505     such things as the return address and pointers to previous stack
35506     frames, is machine-specific and usually depends on which registers
35507     have been used in the function.  Machines with register windows
35508     often do not require a save area.
35509
35510   * A region of at least SIZE bytes, possibly rounded up to an
35511     allocation boundary, to contain the local variables of the
35512     function.  On some machines, this region and the save area may
35513     occur in the opposite order, with the save area closer to the top
35514     of the stack.
35515
35516   * Optionally, when 'ACCUMULATE_OUTGOING_ARGS' is defined, a region of
35517     'crtl->outgoing_args_size' bytes to be used for outgoing argument
35518     lists of the function.  *Note Stack Arguments::.
35519
35520 -- Macro: EXIT_IGNORE_STACK
35521     Define this macro as a C expression that is nonzero if the return
35522     instruction or the function epilogue ignores the value of the stack
35523     pointer; in other words, if it is safe to delete an instruction to
35524     adjust the stack pointer before a return from the function.  The
35525     default is 0.
35526
35527     Note that this macro's value is relevant only for functions for
35528     which frame pointers are maintained.  It is never safe to delete a
35529     final stack adjustment in a function that has no frame pointer, and
35530     the compiler knows this regardless of 'EXIT_IGNORE_STACK'.
35531
35532 -- Macro: EPILOGUE_USES (REGNO)
35533     Define this macro as a C expression that is nonzero for registers
35534     that are used by the epilogue or the 'return' pattern.  The stack
35535     and frame pointer registers are already assumed to be used as
35536     needed.
35537
35538 -- Macro: EH_USES (REGNO)
35539     Define this macro as a C expression that is nonzero for registers
35540     that are used by the exception handling mechanism, and so should be
35541     considered live on entry to an exception edge.
35542
35543 -- Target Hook: void TARGET_ASM_OUTPUT_MI_THUNK (FILE *FILE, tree
35544          THUNK_FNDECL, HOST_WIDE_INT DELTA, HOST_WIDE_INT VCALL_OFFSET,
35545          tree FUNCTION)
35546     A function that outputs the assembler code for a thunk function,
35547     used to implement C++ virtual function calls with multiple
35548     inheritance.  The thunk acts as a wrapper around a virtual
35549     function, adjusting the implicit object parameter before handing
35550     control off to the real function.
35551
35552     First, emit code to add the integer DELTA to the location that
35553     contains the incoming first argument.  Assume that this argument
35554     contains a pointer, and is the one used to pass the 'this' pointer
35555     in C++.  This is the incoming argument _before_ the function
35556     prologue, e.g. '%o0' on a sparc.  The addition must preserve the
35557     values of all other incoming arguments.
35558
35559     Then, if VCALL_OFFSET is nonzero, an additional adjustment should
35560     be made after adding 'delta'.  In particular, if P is the adjusted
35561     pointer, the following adjustment should be made:
35562
35563          p += (*((ptrdiff_t **)p))[vcall_offset/sizeof(ptrdiff_t)]
35564
35565     After the additions, emit code to jump to FUNCTION, which is a
35566     'FUNCTION_DECL'.  This is a direct pure jump, not a call, and does
35567     not touch the return address.  Hence returning from FUNCTION will
35568     return to whoever called the current 'thunk'.
35569
35570     The effect must be as if FUNCTION had been called directly with the
35571     adjusted first argument.  This macro is responsible for emitting
35572     all of the code for a thunk function;
35573     'TARGET_ASM_FUNCTION_PROLOGUE' and 'TARGET_ASM_FUNCTION_EPILOGUE'
35574     are not invoked.
35575
35576     The THUNK_FNDECL is redundant.  (DELTA and FUNCTION have already
35577     been extracted from it.)  It might possibly be useful on some
35578     targets, but probably not.
35579
35580     If you do not define this macro, the target-independent code in the
35581     C++ front end will generate a less efficient heavyweight thunk that
35582     calls FUNCTION instead of jumping to it.  The generic approach does
35583     not support varargs.
35584
35585 -- Target Hook: bool TARGET_ASM_CAN_OUTPUT_MI_THUNK (const_tree
35586          THUNK_FNDECL, HOST_WIDE_INT DELTA, HOST_WIDE_INT VCALL_OFFSET,
35587          const_tree FUNCTION)
35588     A function that returns true if TARGET_ASM_OUTPUT_MI_THUNK would be
35589     able to output the assembler code for the thunk function specified
35590     by the arguments it is passed, and false otherwise.  In the latter
35591     case, the generic approach will be used by the C++ front end, with
35592     the limitations previously exposed.
35593
35594
35595File: gccint.info,  Node: Profiling,  Next: Tail Calls,  Prev: Function Entry,  Up: Stack and Calling
35596
3559718.9.12 Generating Code for Profiling
35598-------------------------------------
35599
35600These macros will help you generate code for profiling.
35601
35602 -- Macro: FUNCTION_PROFILER (FILE, LABELNO)
35603     A C statement or compound statement to output to FILE some
35604     assembler code to call the profiling subroutine 'mcount'.
35605
35606     The details of how 'mcount' expects to be called are determined by
35607     your operating system environment, not by GCC.  To figure them out,
35608     compile a small program for profiling using the system's installed
35609     C compiler and look at the assembler code that results.
35610
35611     Older implementations of 'mcount' expect the address of a counter
35612     variable to be loaded into some register.  The name of this
35613     variable is 'LP' followed by the number LABELNO, so you would
35614     generate the name using 'LP%d' in a 'fprintf'.
35615
35616 -- Macro: PROFILE_HOOK
35617     A C statement or compound statement to output to FILE some assembly
35618     code to call the profiling subroutine 'mcount' even the target does
35619     not support profiling.
35620
35621 -- Macro: NO_PROFILE_COUNTERS
35622     Define this macro to be an expression with a nonzero value if the
35623     'mcount' subroutine on your system does not need a counter variable
35624     allocated for each function.  This is true for almost all modern
35625     implementations.  If you define this macro, you must not use the
35626     LABELNO argument to 'FUNCTION_PROFILER'.
35627
35628 -- Macro: PROFILE_BEFORE_PROLOGUE
35629     Define this macro if the code for function profiling should come
35630     before the function prologue.  Normally, the profiling code comes
35631     after.
35632
35633 -- Target Hook: bool TARGET_KEEP_LEAF_WHEN_PROFILED (void)
35634     This target hook returns true if the target wants the leaf flag for
35635     the current function to stay true even if it calls mcount.  This
35636     might make sense for targets using the leaf flag only to determine
35637     whether a stack frame needs to be generated or not and for which
35638     the call to mcount is generated before the function prologue.
35639
35640
35641File: gccint.info,  Node: Tail Calls,  Next: Shrink-wrapping separate components,  Prev: Profiling,  Up: Stack and Calling
35642
3564318.9.13 Permitting tail calls
35644-----------------------------
35645
35646 -- Target Hook: bool TARGET_FUNCTION_OK_FOR_SIBCALL (tree DECL, tree
35647          EXP)
35648     True if it is OK to do sibling call optimization for the specified
35649     call expression EXP.  DECL will be the called function, or 'NULL'
35650     if this is an indirect call.
35651
35652     It is not uncommon for limitations of calling conventions to
35653     prevent tail calls to functions outside the current unit of
35654     translation, or during PIC compilation.  The hook is used to
35655     enforce these restrictions, as the 'sibcall' md pattern cannot
35656     fail, or fall over to a "normal" call.  The criteria for successful
35657     sibling call optimization may vary greatly between different
35658     architectures.
35659
35660 -- Target Hook: void TARGET_EXTRA_LIVE_ON_ENTRY (bitmap REGS)
35661     Add any hard registers to REGS that are live on entry to the
35662     function.  This hook only needs to be defined to provide registers
35663     that cannot be found by examination of FUNCTION_ARG_REGNO_P, the
35664     callee saved registers, STATIC_CHAIN_INCOMING_REGNUM,
35665     STATIC_CHAIN_REGNUM, TARGET_STRUCT_VALUE_RTX, FRAME_POINTER_REGNUM,
35666     EH_USES, FRAME_POINTER_REGNUM, ARG_POINTER_REGNUM, and the
35667     PIC_OFFSET_TABLE_REGNUM.
35668
35669 -- Target Hook: void TARGET_SET_UP_BY_PROLOGUE (struct
35670          hard_reg_set_container *)
35671     This hook should add additional registers that are computed by the
35672     prologue to the hard regset for shrink-wrapping optimization
35673     purposes.
35674
35675 -- Target Hook: bool TARGET_WARN_FUNC_RETURN (tree)
35676     True if a function's return statements should be checked for
35677     matching the function's return type.  This includes checking for
35678     falling off the end of a non-void function.  Return false if no
35679     such check should be made.
35680
35681
35682File: gccint.info,  Node: Shrink-wrapping separate components,  Next: Stack Smashing Protection,  Prev: Tail Calls,  Up: Stack and Calling
35683
3568418.9.14 Shrink-wrapping separate components
35685-------------------------------------------
35686
35687The prologue may perform a variety of target dependent tasks such as
35688saving callee-saved registers, saving the return address, aligning the
35689stack, creating a stack frame, initializing the PIC register, setting up
35690the static chain, etc.
35691
35692 On some targets some of these tasks may be independent of others and
35693thus may be shrink-wrapped separately.  These independent tasks are
35694referred to as components and are handled generically by the target
35695independent parts of GCC.
35696
35697 Using the following hooks those prologue or epilogue components can be
35698shrink-wrapped separately, so that the initialization (and possibly
35699teardown) those components do is not done as frequently on execution
35700paths where this would unnecessary.
35701
35702 What exactly those components are is up to the target code; the generic
35703code treats them abstractly, as a bit in an 'sbitmap'.  These 'sbitmap's
35704are allocated by the 'shrink_wrap.get_separate_components' and
35705'shrink_wrap.components_for_bb' hooks, and deallocated by the generic
35706code.
35707
35708 -- Target Hook: sbitmap TARGET_SHRINK_WRAP_GET_SEPARATE_COMPONENTS
35709          (void)
35710     This hook should return an 'sbitmap' with the bits set for those
35711     components that can be separately shrink-wrapped in the current
35712     function.  Return 'NULL' if the current function should not get any
35713     separate shrink-wrapping.  Don't define this hook if it would
35714     always return 'NULL'.  If it is defined, the other hooks in this
35715     group have to be defined as well.
35716
35717 -- Target Hook: sbitmap TARGET_SHRINK_WRAP_COMPONENTS_FOR_BB
35718          (basic_block)
35719     This hook should return an 'sbitmap' with the bits set for those
35720     components where either the prologue component has to be executed
35721     before the 'basic_block', or the epilogue component after it, or
35722     both.
35723
35724 -- Target Hook: void TARGET_SHRINK_WRAP_DISQUALIFY_COMPONENTS (sbitmap
35725          COMPONENTS, edge E, sbitmap EDGE_COMPONENTS, bool IS_PROLOGUE)
35726     This hook should clear the bits in the COMPONENTS bitmap for those
35727     components in EDGE_COMPONENTS that the target cannot handle on edge
35728     E, where IS_PROLOGUE says if this is for a prologue or an epilogue
35729     instead.
35730
35731 -- Target Hook: void TARGET_SHRINK_WRAP_EMIT_PROLOGUE_COMPONENTS
35732          (sbitmap)
35733     Emit prologue insns for the components indicated by the parameter.
35734
35735 -- Target Hook: void TARGET_SHRINK_WRAP_EMIT_EPILOGUE_COMPONENTS
35736          (sbitmap)
35737     Emit epilogue insns for the components indicated by the parameter.
35738
35739 -- Target Hook: void TARGET_SHRINK_WRAP_SET_HANDLED_COMPONENTS
35740          (sbitmap)
35741     Mark the components in the parameter as handled, so that the
35742     'prologue' and 'epilogue' named patterns know to ignore those
35743     components.  The target code should not hang on to the 'sbitmap',
35744     it will be deleted after this call.
35745
35746
35747File: gccint.info,  Node: Stack Smashing Protection,  Next: Miscellaneous Register Hooks,  Prev: Shrink-wrapping separate components,  Up: Stack and Calling
35748
3574918.9.15 Stack smashing protection
35750---------------------------------
35751
35752 -- Target Hook: tree TARGET_STACK_PROTECT_GUARD (void)
35753     This hook returns a 'DECL' node for the external variable to use
35754     for the stack protection guard.  This variable is initialized by
35755     the runtime to some random value and is used to initialize the
35756     guard value that is placed at the top of the local stack frame.
35757     The type of this variable must be 'ptr_type_node'.
35758
35759     The default version of this hook creates a variable called
35760     '__stack_chk_guard', which is normally defined in 'libgcc2.c'.
35761
35762 -- Target Hook: tree TARGET_STACK_PROTECT_FAIL (void)
35763     This hook returns a 'CALL_EXPR' that alerts the runtime that the
35764     stack protect guard variable has been modified.  This expression
35765     should involve a call to a 'noreturn' function.
35766
35767     The default version of this hook invokes a function called
35768     '__stack_chk_fail', taking no arguments.  This function is normally
35769     defined in 'libgcc2.c'.
35770
35771 -- Target Hook: bool TARGET_STACK_PROTECT_RUNTIME_ENABLED_P (void)
35772     Returns true if the target wants GCC's default stack protect
35773     runtime support, otherwise return false.  The default
35774     implementation always returns true.
35775
35776 -- Common Target Hook: bool TARGET_SUPPORTS_SPLIT_STACK (bool REPORT,
35777          struct gcc_options *OPTS)
35778     Whether this target supports splitting the stack when the options
35779     described in OPTS have been passed.  This is called after options
35780     have been parsed, so the target may reject splitting the stack in
35781     some configurations.  The default version of this hook returns
35782     false.  If REPORT is true, this function may issue a warning or
35783     error; if REPORT is false, it must simply return a value
35784
35785 -- Common Target Hook: vec<const char *> TARGET_GET_VALID_OPTION_VALUES
35786          (int OPTION_CODE, const char *PREFIX)
35787     The hook is used for options that have a non-trivial list of
35788     possible option values.  OPTION_CODE is option code of opt_code
35789     enum type.  PREFIX is used for bash completion and allows an
35790     implementation to return more specific completion based on the
35791     prefix.  All string values should be allocated from heap memory and
35792     consumers should release them.  The result will be pruned to cases
35793     with PREFIX if not NULL.
35794
35795
35796File: gccint.info,  Node: Miscellaneous Register Hooks,  Prev: Stack Smashing Protection,  Up: Stack and Calling
35797
3579818.9.16 Miscellaneous register hooks
35799------------------------------------
35800
35801 -- Target Hook: bool TARGET_CALL_FUSAGE_CONTAINS_NON_CALLEE_CLOBBERS
35802     Set to true if each call that binds to a local definition
35803     explicitly clobbers or sets all non-fixed registers modified by
35804     performing the call.  That is, by the call pattern itself, or by
35805     code that might be inserted by the linker (e.g. stubs, veneers,
35806     branch islands), but not including those modifiable by the callee.
35807     The affected registers may be mentioned explicitly in the call
35808     pattern, or included as clobbers in CALL_INSN_FUNCTION_USAGE. The
35809     default version of this hook is set to false.  The purpose of this
35810     hook is to enable the fipa-ra optimization.
35811
35812
35813File: gccint.info,  Node: Varargs,  Next: Trampolines,  Prev: Stack and Calling,  Up: Target Macros
35814
3581518.10 Implementing the Varargs Macros
35816=====================================
35817
35818GCC comes with an implementation of '<varargs.h>' and '<stdarg.h>' that
35819work without change on machines that pass arguments on the stack.  Other
35820machines require their own implementations of varargs, and the two
35821machine independent header files must have conditionals to include it.
35822
35823 ISO '<stdarg.h>' differs from traditional '<varargs.h>' mainly in the
35824calling convention for 'va_start'.  The traditional implementation takes
35825just one argument, which is the variable in which to store the argument
35826pointer.  The ISO implementation of 'va_start' takes an additional
35827second argument.  The user is supposed to write the last named argument
35828of the function here.
35829
35830 However, 'va_start' should not use this argument.  The way to find the
35831end of the named arguments is with the built-in functions described
35832below.
35833
35834 -- Macro: __builtin_saveregs ()
35835     Use this built-in function to save the argument registers in memory
35836     so that the varargs mechanism can access them.  Both ISO and
35837     traditional versions of 'va_start' must use '__builtin_saveregs',
35838     unless you use 'TARGET_SETUP_INCOMING_VARARGS' (see below) instead.
35839
35840     On some machines, '__builtin_saveregs' is open-coded under the
35841     control of the target hook 'TARGET_EXPAND_BUILTIN_SAVEREGS'.  On
35842     other machines, it calls a routine written in assembler language,
35843     found in 'libgcc2.c'.
35844
35845     Code generated for the call to '__builtin_saveregs' appears at the
35846     beginning of the function, as opposed to where the call to
35847     '__builtin_saveregs' is written, regardless of what the code is.
35848     This is because the registers must be saved before the function
35849     starts to use them for its own purposes.
35850
35851 -- Macro: __builtin_next_arg (LASTARG)
35852     This builtin returns the address of the first anonymous stack
35853     argument, as type 'void *'.  If 'ARGS_GROW_DOWNWARD', it returns
35854     the address of the location above the first anonymous stack
35855     argument.  Use it in 'va_start' to initialize the pointer for
35856     fetching arguments from the stack.  Also use it in 'va_start' to
35857     verify that the second parameter LASTARG is the last named argument
35858     of the current function.
35859
35860 -- Macro: __builtin_classify_type (OBJECT)
35861     Since each machine has its own conventions for which data types are
35862     passed in which kind of register, your implementation of 'va_arg'
35863     has to embody these conventions.  The easiest way to categorize the
35864     specified data type is to use '__builtin_classify_type' together
35865     with 'sizeof' and '__alignof__'.
35866
35867     '__builtin_classify_type' ignores the value of OBJECT, considering
35868     only its data type.  It returns an integer describing what kind of
35869     type that is--integer, floating, pointer, structure, and so on.
35870
35871     The file 'typeclass.h' defines an enumeration that you can use to
35872     interpret the values of '__builtin_classify_type'.
35873
35874 These machine description macros help implement varargs:
35875
35876 -- Target Hook: rtx TARGET_EXPAND_BUILTIN_SAVEREGS (void)
35877     If defined, this hook produces the machine-specific code for a call
35878     to '__builtin_saveregs'.  This code will be moved to the very
35879     beginning of the function, before any parameter access are made.
35880     The return value of this function should be an RTX that contains
35881     the value to use as the return of '__builtin_saveregs'.
35882
35883 -- Target Hook: void TARGET_SETUP_INCOMING_VARARGS (cumulative_args_t
35884          ARGS_SO_FAR, const function_arg_info &ARG, int
35885          *PRETEND_ARGS_SIZE, int SECOND_TIME)
35886     This target hook offers an alternative to using
35887     '__builtin_saveregs' and defining the hook
35888     'TARGET_EXPAND_BUILTIN_SAVEREGS'.  Use it to store the anonymous
35889     register arguments into the stack so that all the arguments appear
35890     to have been passed consecutively on the stack.  Once this is done,
35891     you can use the standard implementation of varargs that works for
35892     machines that pass all their arguments on the stack.
35893
35894     The argument ARGS_SO_FAR points to the 'CUMULATIVE_ARGS' data
35895     structure, containing the values that are obtained after processing
35896     the named arguments.  The argument ARG describes the last of these
35897     named arguments.
35898
35899     The target hook should do two things: first, push onto the stack
35900     all the argument registers _not_ used for the named arguments, and
35901     second, store the size of the data thus pushed into the
35902     'int'-valued variable pointed to by PRETEND_ARGS_SIZE.  The value
35903     that you store here will serve as additional offset for setting up
35904     the stack frame.
35905
35906     Because you must generate code to push the anonymous arguments at
35907     compile time without knowing their data types,
35908     'TARGET_SETUP_INCOMING_VARARGS' is only useful on machines that
35909     have just a single category of argument register and use it
35910     uniformly for all data types.
35911
35912     If the argument SECOND_TIME is nonzero, it means that the arguments
35913     of the function are being analyzed for the second time.  This
35914     happens for an inline function, which is not actually compiled
35915     until the end of the source file.  The hook
35916     'TARGET_SETUP_INCOMING_VARARGS' should not generate any
35917     instructions in this case.
35918
35919 -- Target Hook: bool TARGET_STRICT_ARGUMENT_NAMING (cumulative_args_t
35920          CA)
35921     Define this hook to return 'true' if the location where a function
35922     argument is passed depends on whether or not it is a named
35923     argument.
35924
35925     This hook controls how the NAMED argument to 'TARGET_FUNCTION_ARG'
35926     is set for varargs and stdarg functions.  If this hook returns
35927     'true', the NAMED argument is always true for named arguments, and
35928     false for unnamed arguments.  If it returns 'false', but
35929     'TARGET_PRETEND_OUTGOING_VARARGS_NAMED' returns 'true', then all
35930     arguments are treated as named.  Otherwise, all named arguments
35931     except the last are treated as named.
35932
35933     You need not define this hook if it always returns 'false'.
35934
35935 -- Target Hook: void TARGET_CALL_ARGS (rtx, TREE)
35936     While generating RTL for a function call, this target hook is
35937     invoked once for each argument passed to the function, either a
35938     register returned by 'TARGET_FUNCTION_ARG' or a memory location.
35939     It is called just before the point where argument registers are
35940     stored.  The type of the function to be called is also passed as
35941     the second argument; it is 'NULL_TREE' for libcalls.  The
35942     'TARGET_END_CALL_ARGS' hook is invoked just after the code to copy
35943     the return reg has been emitted.  This functionality can be used to
35944     perform special setup of call argument registers if a target needs
35945     it.  For functions without arguments, the hook is called once with
35946     'pc_rtx' passed instead of an argument register.  Most ports do not
35947     need to implement anything for this hook.
35948
35949 -- Target Hook: void TARGET_END_CALL_ARGS (void)
35950     This target hook is invoked while generating RTL for a function
35951     call, just after the point where the return reg is copied into a
35952     pseudo.  It signals that all the call argument and return registers
35953     for the just emitted call are now no longer in use.  Most ports do
35954     not need to implement anything for this hook.
35955
35956 -- Target Hook: bool TARGET_PRETEND_OUTGOING_VARARGS_NAMED
35957          (cumulative_args_t CA)
35958     If you need to conditionally change ABIs so that one works with
35959     'TARGET_SETUP_INCOMING_VARARGS', but the other works like neither
35960     'TARGET_SETUP_INCOMING_VARARGS' nor 'TARGET_STRICT_ARGUMENT_NAMING'
35961     was defined, then define this hook to return 'true' if
35962     'TARGET_SETUP_INCOMING_VARARGS' is used, 'false' otherwise.
35963     Otherwise, you should not define this hook.
35964
35965 -- Target Hook: rtx TARGET_LOAD_BOUNDS_FOR_ARG (rtx SLOT, rtx ARG, rtx
35966          SLOT_NO)
35967     This hook is used by expand pass to emit insn to load bounds of ARG
35968     passed in SLOT.  Expand pass uses this hook in case bounds of ARG
35969     are not passed in register.  If SLOT is a memory, then bounds are
35970     loaded as for regular pointer loaded from memory.  If SLOT is not a
35971     memory then SLOT_NO is an integer constant holding number of the
35972     target dependent special slot which should be used to obtain
35973     bounds.  Hook returns RTX holding loaded bounds.
35974
35975 -- Target Hook: void TARGET_STORE_BOUNDS_FOR_ARG (rtx ARG, rtx SLOT,
35976          rtx BOUNDS, rtx SLOT_NO)
35977     This hook is used by expand pass to emit insns to store BOUNDS of
35978     ARG passed in SLOT.  Expand pass uses this hook in case BOUNDS of
35979     ARG are not passed in register.  If SLOT is a memory, then BOUNDS
35980     are stored as for regular pointer stored in memory.  If SLOT is not
35981     a memory then SLOT_NO is an integer constant holding number of the
35982     target dependent special slot which should be used to store BOUNDS.
35983
35984 -- Target Hook: rtx TARGET_LOAD_RETURNED_BOUNDS (rtx SLOT)
35985     This hook is used by expand pass to emit insn to load bounds
35986     returned by function call in SLOT.  Hook returns RTX holding loaded
35987     bounds.
35988
35989 -- Target Hook: void TARGET_STORE_RETURNED_BOUNDS (rtx SLOT, rtx
35990          BOUNDS)
35991     This hook is used by expand pass to emit insn to store BOUNDS
35992     returned by function call into SLOT.
35993
35994
35995File: gccint.info,  Node: Trampolines,  Next: Library Calls,  Prev: Varargs,  Up: Target Macros
35996
3599718.11 Support for Nested Functions
35998==================================
35999
36000Taking the address of a nested function requires special compiler
36001handling to ensure that the static chain register is loaded when the
36002function is invoked via an indirect call.
36003
36004 GCC has traditionally supported nested functions by creating an
36005executable "trampoline" at run time when the address of a nested
36006function is taken.  This is a small piece of code which normally resides
36007on the stack, in the stack frame of the containing function.  The
36008trampoline loads the static chain register and then jumps to the real
36009address of the nested function.
36010
36011 The use of trampolines requires an executable stack, which is a
36012security risk.  To avoid this problem, GCC also supports another
36013strategy: using descriptors for nested functions.  Under this model,
36014taking the address of a nested function results in a pointer to a
36015non-executable function descriptor object.  Initializing the static
36016chain from the descriptor is handled at indirect call sites.
36017
36018 On some targets, including HPPA and IA-64, function descriptors may be
36019mandated by the ABI or be otherwise handled in a target-specific way by
36020the back end in its code generation strategy for indirect calls.  GCC
36021also provides its own generic descriptor implementation to support the
36022'-fno-trampolines' option.  In this case runtime detection of function
36023descriptors at indirect call sites relies on descriptor pointers being
36024tagged with a bit that is never set in bare function addresses.  Since
36025GCC's generic function descriptors are not ABI-compliant, this option is
36026typically used only on a per-language basis (notably by Ada) or when it
36027can otherwise be applied to the whole program.
36028
36029 Define the following hook if your backend either implements
36030ABI-specified descriptor support, or can use GCC's generic descriptor
36031implementation for nested functions.
36032
36033 -- Target Hook: int TARGET_CUSTOM_FUNCTION_DESCRIPTORS
36034     If the target can use GCC's generic descriptor mechanism for nested
36035     functions, define this hook to a power of 2 representing an unused
36036     bit in function pointers which can be used to differentiate
36037     descriptors at run time.  This value gives the number of bytes by
36038     which descriptor pointers are misaligned compared to function
36039     pointers.  For example, on targets that require functions to be
36040     aligned to a 4-byte boundary, a value of either 1 or 2 is
36041     appropriate unless the architecture already reserves the bit for
36042     another purpose, such as on ARM.
36043
36044     Define this hook to 0 if the target implements ABI support for
36045     function descriptors in its standard calling sequence, like for
36046     example HPPA or IA-64.
36047
36048     Using descriptors for nested functions eliminates the need for
36049     trampolines that reside on the stack and require it to be made
36050     executable.
36051
36052 The following macros tell GCC how to generate code to allocate and
36053initialize an executable trampoline.  You can also use this interface if
36054your back end needs to create ABI-specified non-executable descriptors;
36055in this case the "trampoline" created is the descriptor containing data
36056only.
36057
36058 The instructions in an executable trampoline must do two things: load a
36059constant address into the static chain register, and jump to the real
36060address of the nested function.  On CISC machines such as the m68k, this
36061requires two instructions, a move immediate and a jump.  Then the two
36062addresses exist in the trampoline as word-long immediate operands.  On
36063RISC machines, it is often necessary to load each address into a
36064register in two parts.  Then pieces of each address form separate
36065immediate operands.
36066
36067 The code generated to initialize the trampoline must store the variable
36068parts--the static chain value and the function address--into the
36069immediate operands of the instructions.  On a CISC machine, this is
36070simply a matter of copying each address to a memory reference at the
36071proper offset from the start of the trampoline.  On a RISC machine, it
36072may be necessary to take out pieces of the address and store them
36073separately.
36074
36075 -- Target Hook: void TARGET_ASM_TRAMPOLINE_TEMPLATE (FILE *F)
36076     This hook is called by 'assemble_trampoline_template' to output, on
36077     the stream F, assembler code for a block of data that contains the
36078     constant parts of a trampoline.  This code should not include a
36079     label--the label is taken care of automatically.
36080
36081     If you do not define this hook, it means no template is needed for
36082     the target.  Do not define this hook on systems where the block
36083     move code to copy the trampoline into place would be larger than
36084     the code to generate it on the spot.
36085
36086 -- Macro: TRAMPOLINE_SECTION
36087     Return the section into which the trampoline template is to be
36088     placed (*note Sections::).  The default value is
36089     'readonly_data_section'.
36090
36091 -- Macro: TRAMPOLINE_SIZE
36092     A C expression for the size in bytes of the trampoline, as an
36093     integer.
36094
36095 -- Macro: TRAMPOLINE_ALIGNMENT
36096     Alignment required for trampolines, in bits.
36097
36098     If you don't define this macro, the value of 'FUNCTION_ALIGNMENT'
36099     is used for aligning trampolines.
36100
36101 -- Target Hook: void TARGET_TRAMPOLINE_INIT (rtx M_TRAMP, tree FNDECL,
36102          rtx STATIC_CHAIN)
36103     This hook is called to initialize a trampoline.  M_TRAMP is an RTX
36104     for the memory block for the trampoline; FNDECL is the
36105     'FUNCTION_DECL' for the nested function; STATIC_CHAIN is an RTX for
36106     the static chain value that should be passed to the function when
36107     it is called.
36108
36109     If the target defines 'TARGET_ASM_TRAMPOLINE_TEMPLATE', then the
36110     first thing this hook should do is emit a block move into M_TRAMP
36111     from the memory block returned by 'assemble_trampoline_template'.
36112     Note that the block move need only cover the constant parts of the
36113     trampoline.  If the target isolates the variable parts of the
36114     trampoline to the end, not all 'TRAMPOLINE_SIZE' bytes need be
36115     copied.
36116
36117     If the target requires any other actions, such as flushing caches
36118     or enabling stack execution, these actions should be performed
36119     after initializing the trampoline proper.
36120
36121 -- Target Hook: rtx TARGET_TRAMPOLINE_ADJUST_ADDRESS (rtx ADDR)
36122     This hook should perform any machine-specific adjustment in the
36123     address of the trampoline.  Its argument contains the address of
36124     the memory block that was passed to 'TARGET_TRAMPOLINE_INIT'.  In
36125     case the address to be used for a function call should be different
36126     from the address at which the template was stored, the different
36127     address should be returned; otherwise ADDR should be returned
36128     unchanged.  If this hook is not defined, ADDR will be used for
36129     function calls.
36130
36131 Implementing trampolines is difficult on many machines because they
36132have separate instruction and data caches.  Writing into a stack
36133location fails to clear the memory in the instruction cache, so when the
36134program jumps to that location, it executes the old contents.
36135
36136 Here are two possible solutions.  One is to clear the relevant parts of
36137the instruction cache whenever a trampoline is set up.  The other is to
36138make all trampolines identical, by having them jump to a standard
36139subroutine.  The former technique makes trampoline execution faster; the
36140latter makes initialization faster.
36141
36142 To clear the instruction cache when a trampoline is initialized, define
36143the following macro.
36144
36145 -- Macro: CLEAR_INSN_CACHE (BEG, END)
36146     If defined, expands to a C expression clearing the _instruction
36147     cache_ in the specified interval.  The definition of this macro
36148     would typically be a series of 'asm' statements.  Both BEG and END
36149     are both pointer expressions.
36150
36151 To use a standard subroutine, define the following macro.  In addition,
36152you must make sure that the instructions in a trampoline fill an entire
36153cache line with identical instructions, or else ensure that the
36154beginning of the trampoline code is always aligned at the same point in
36155its cache line.  Look in 'm68k.h' as a guide.
36156
36157 -- Macro: TRANSFER_FROM_TRAMPOLINE
36158     Define this macro if trampolines need a special subroutine to do
36159     their work.  The macro should expand to a series of 'asm'
36160     statements which will be compiled with GCC.  They go in a library
36161     function named '__transfer_from_trampoline'.
36162
36163     If you need to avoid executing the ordinary prologue code of a
36164     compiled C function when you jump to the subroutine, you can do so
36165     by placing a special label of your own in the assembler code.  Use
36166     one 'asm' statement to generate an assembler label, and another to
36167     make the label global.  Then trampolines can use that label to jump
36168     directly to your special assembler code.
36169
36170
36171File: gccint.info,  Node: Library Calls,  Next: Addressing Modes,  Prev: Trampolines,  Up: Target Macros
36172
3617318.12 Implicit Calls to Library Routines
36174========================================
36175
36176Here is an explanation of implicit calls to library routines.
36177
36178 -- Macro: DECLARE_LIBRARY_RENAMES
36179     This macro, if defined, should expand to a piece of C code that
36180     will get expanded when compiling functions for libgcc.a.  It can be
36181     used to provide alternate names for GCC's internal library
36182     functions if there are ABI-mandated names that the compiler should
36183     provide.
36184
36185 -- Target Hook: void TARGET_INIT_LIBFUNCS (void)
36186     This hook should declare additional library routines or rename
36187     existing ones, using the functions 'set_optab_libfunc' and
36188     'init_one_libfunc' defined in 'optabs.c'.  'init_optabs' calls this
36189     macro after initializing all the normal library routines.
36190
36191     The default is to do nothing.  Most ports don't need to define this
36192     hook.
36193
36194 -- Target Hook: bool TARGET_LIBFUNC_GNU_PREFIX
36195     If false (the default), internal library routines start with two
36196     underscores.  If set to true, these routines start with '__gnu_'
36197     instead.  E.g., '__muldi3' changes to '__gnu_muldi3'.  This
36198     currently only affects functions defined in 'libgcc2.c'.  If this
36199     is set to true, the 'tm.h' file must also '#define
36200     LIBGCC2_GNU_PREFIX'.
36201
36202 -- Macro: FLOAT_LIB_COMPARE_RETURNS_BOOL (MODE, COMPARISON)
36203     This macro should return 'true' if the library routine that
36204     implements the floating point comparison operator COMPARISON in
36205     mode MODE will return a boolean, and FALSE if it will return a
36206     tristate.
36207
36208     GCC's own floating point libraries return tristates from the
36209     comparison operators, so the default returns false always.  Most
36210     ports don't need to define this macro.
36211
36212 -- Macro: TARGET_LIB_INT_CMP_BIASED
36213     This macro should evaluate to 'true' if the integer comparison
36214     functions (like '__cmpdi2') return 0 to indicate that the first
36215     operand is smaller than the second, 1 to indicate that they are
36216     equal, and 2 to indicate that the first operand is greater than the
36217     second.  If this macro evaluates to 'false' the comparison
36218     functions return -1, 0, and 1 instead of 0, 1, and 2.  If the
36219     target uses the routines in 'libgcc.a', you do not need to define
36220     this macro.
36221
36222 -- Macro: TARGET_HAS_NO_HW_DIVIDE
36223     This macro should be defined if the target has no hardware divide
36224     instructions.  If this macro is defined, GCC will use an algorithm
36225     which make use of simple logical and arithmetic operations for
36226     64-bit division.  If the macro is not defined, GCC will use an
36227     algorithm which make use of a 64-bit by 32-bit divide primitive.
36228
36229 -- Macro: TARGET_EDOM
36230     The value of 'EDOM' on the target machine, as a C integer constant
36231     expression.  If you don't define this macro, GCC does not attempt
36232     to deposit the value of 'EDOM' into 'errno' directly.  Look in
36233     '/usr/include/errno.h' to find the value of 'EDOM' on your system.
36234
36235     If you do not define 'TARGET_EDOM', then compiled code reports
36236     domain errors by calling the library function and letting it report
36237     the error.  If mathematical functions on your system use 'matherr'
36238     when there is an error, then you should leave 'TARGET_EDOM'
36239     undefined so that 'matherr' is used normally.
36240
36241 -- Macro: GEN_ERRNO_RTX
36242     Define this macro as a C expression to create an rtl expression
36243     that refers to the global "variable" 'errno'.  (On certain systems,
36244     'errno' may not actually be a variable.)  If you don't define this
36245     macro, a reasonable default is used.
36246
36247 -- Target Hook: bool TARGET_LIBC_HAS_FUNCTION (enum function_class
36248          FN_CLASS)
36249     This hook determines whether a function from a class of functions
36250     FN_CLASS is present in the target C library.
36251
36252 -- Target Hook: bool TARGET_LIBC_HAS_FAST_FUNCTION (int FCODE)
36253     This hook determines whether a function from a class of functions
36254     '(enum function_class)'FCODE has a fast implementation.
36255
36256 -- Macro: NEXT_OBJC_RUNTIME
36257     Set this macro to 1 to use the "NeXT" Objective-C message sending
36258     conventions by default.  This calling convention involves passing
36259     the object, the selector and the method arguments all at once to
36260     the method-lookup library function.  This is the usual setting when
36261     targeting Darwin/Mac OS X systems, which have the NeXT runtime
36262     installed.
36263
36264     If the macro is set to 0, the "GNU" Objective-C message sending
36265     convention will be used by default.  This convention passes just
36266     the object and the selector to the method-lookup function, which
36267     returns a pointer to the method.
36268
36269     In either case, it remains possible to select code-generation for
36270     the alternate scheme, by means of compiler command line switches.
36271
36272
36273File: gccint.info,  Node: Addressing Modes,  Next: Anchored Addresses,  Prev: Library Calls,  Up: Target Macros
36274
3627518.13 Addressing Modes
36276======================
36277
36278This is about addressing modes.
36279
36280 -- Macro: HAVE_PRE_INCREMENT
36281 -- Macro: HAVE_PRE_DECREMENT
36282 -- Macro: HAVE_POST_INCREMENT
36283 -- Macro: HAVE_POST_DECREMENT
36284     A C expression that is nonzero if the machine supports
36285     pre-increment, pre-decrement, post-increment, or post-decrement
36286     addressing respectively.
36287
36288 -- Macro: HAVE_PRE_MODIFY_DISP
36289 -- Macro: HAVE_POST_MODIFY_DISP
36290     A C expression that is nonzero if the machine supports pre- or
36291     post-address side-effect generation involving constants other than
36292     the size of the memory operand.
36293
36294 -- Macro: HAVE_PRE_MODIFY_REG
36295 -- Macro: HAVE_POST_MODIFY_REG
36296     A C expression that is nonzero if the machine supports pre- or
36297     post-address side-effect generation involving a register
36298     displacement.
36299
36300 -- Macro: CONSTANT_ADDRESS_P (X)
36301     A C expression that is 1 if the RTX X is a constant which is a
36302     valid address.  On most machines the default definition of
36303     '(CONSTANT_P (X) && GET_CODE (X) != CONST_DOUBLE)' is acceptable,
36304     but a few machines are more restrictive as to which constant
36305     addresses are supported.
36306
36307 -- Macro: CONSTANT_P (X)
36308     'CONSTANT_P', which is defined by target-independent code, accepts
36309     integer-values expressions whose values are not explicitly known,
36310     such as 'symbol_ref', 'label_ref', and 'high' expressions and
36311     'const' arithmetic expressions, in addition to 'const_int' and
36312     'const_double' expressions.
36313
36314 -- Macro: MAX_REGS_PER_ADDRESS
36315     A number, the maximum number of registers that can appear in a
36316     valid memory address.  Note that it is up to you to specify a value
36317     equal to the maximum number that 'TARGET_LEGITIMATE_ADDRESS_P'
36318     would ever accept.
36319
36320 -- Target Hook: bool TARGET_LEGITIMATE_ADDRESS_P (machine_mode MODE,
36321          rtx X, bool STRICT)
36322     A function that returns whether X (an RTX) is a legitimate memory
36323     address on the target machine for a memory operand of mode MODE.
36324
36325     Legitimate addresses are defined in two variants: a strict variant
36326     and a non-strict one.  The STRICT parameter chooses which variant
36327     is desired by the caller.
36328
36329     The strict variant is used in the reload pass.  It must be defined
36330     so that any pseudo-register that has not been allocated a hard
36331     register is considered a memory reference.  This is because in
36332     contexts where some kind of register is required, a pseudo-register
36333     with no hard register must be rejected.  For non-hard registers,
36334     the strict variant should look up the 'reg_renumber' array; it
36335     should then proceed using the hard register number in the array, or
36336     treat the pseudo as a memory reference if the array holds '-1'.
36337
36338     The non-strict variant is used in other passes.  It must be defined
36339     to accept all pseudo-registers in every context where some kind of
36340     register is required.
36341
36342     Normally, constant addresses which are the sum of a 'symbol_ref'
36343     and an integer are stored inside a 'const' RTX to mark them as
36344     constant.  Therefore, there is no need to recognize such sums
36345     specifically as legitimate addresses.  Normally you would simply
36346     recognize any 'const' as legitimate.
36347
36348     Usually 'PRINT_OPERAND_ADDRESS' is not prepared to handle constant
36349     sums that are not marked with 'const'.  It assumes that a naked
36350     'plus' indicates indexing.  If so, then you _must_ reject such
36351     naked constant sums as illegitimate addresses, so that none of them
36352     will be given to 'PRINT_OPERAND_ADDRESS'.
36353
36354     On some machines, whether a symbolic address is legitimate depends
36355     on the section that the address refers to.  On these machines,
36356     define the target hook 'TARGET_ENCODE_SECTION_INFO' to store the
36357     information into the 'symbol_ref', and then check for it here.
36358     When you see a 'const', you will have to look inside it to find the
36359     'symbol_ref' in order to determine the section.  *Note Assembler
36360     Format::.
36361
36362     Some ports are still using a deprecated legacy substitute for this
36363     hook, the 'GO_IF_LEGITIMATE_ADDRESS' macro.  This macro has this
36364     syntax:
36365
36366          #define GO_IF_LEGITIMATE_ADDRESS (MODE, X, LABEL)
36367
36368     and should 'goto LABEL' if the address X is a valid address on the
36369     target machine for a memory operand of mode MODE.
36370
36371     Compiler source files that want to use the strict variant of this
36372     macro define the macro 'REG_OK_STRICT'.  You should use an '#ifdef
36373     REG_OK_STRICT' conditional to define the strict variant in that
36374     case and the non-strict variant otherwise.
36375
36376     Using the hook is usually simpler because it limits the number of
36377     files that are recompiled when changes are made.
36378
36379 -- Macro: TARGET_MEM_CONSTRAINT
36380     A single character to be used instead of the default ''m''
36381     character for general memory addresses.  This defines the
36382     constraint letter which matches the memory addresses accepted by
36383     'TARGET_LEGITIMATE_ADDRESS_P'.  Define this macro if you want to
36384     support new address formats in your back end without changing the
36385     semantics of the ''m'' constraint.  This is necessary in order to
36386     preserve functionality of inline assembly constructs using the
36387     ''m'' constraint.
36388
36389 -- Macro: FIND_BASE_TERM (X)
36390     A C expression to determine the base term of address X, or to
36391     provide a simplified version of X from which 'alias.c' can easily
36392     find the base term.  This macro is used in only two places:
36393     'find_base_value' and 'find_base_term' in 'alias.c'.
36394
36395     It is always safe for this macro to not be defined.  It exists so
36396     that alias analysis can understand machine-dependent addresses.
36397
36398     The typical use of this macro is to handle addresses containing a
36399     label_ref or symbol_ref within an UNSPEC.
36400
36401 -- Target Hook: rtx TARGET_LEGITIMIZE_ADDRESS (rtx X, rtx OLDX,
36402          machine_mode MODE)
36403     This hook is given an invalid memory address X for an operand of
36404     mode MODE and should try to return a valid memory address.
36405
36406     X will always be the result of a call to 'break_out_memory_refs',
36407     and OLDX will be the operand that was given to that function to
36408     produce X.
36409
36410     The code of the hook should not alter the substructure of X.  If it
36411     transforms X into a more legitimate form, it should return the new
36412     X.
36413
36414     It is not necessary for this hook to come up with a legitimate
36415     address, with the exception of native TLS addresses (*note Emulated
36416     TLS::).  The compiler has standard ways of doing so in all cases.
36417     In fact, if the target supports only emulated TLS, it is safe to
36418     omit this hook or make it return X if it cannot find a valid way to
36419     legitimize the address.  But often a machine-dependent strategy can
36420     generate better code.
36421
36422 -- Macro: LEGITIMIZE_RELOAD_ADDRESS (X, MODE, OPNUM, TYPE, IND_LEVELS,
36423          WIN)
36424     A C compound statement that attempts to replace X, which is an
36425     address that needs reloading, with a valid memory address for an
36426     operand of mode MODE.  WIN will be a C statement label elsewhere in
36427     the code.  It is not necessary to define this macro, but it might
36428     be useful for performance reasons.
36429
36430     For example, on the i386, it is sometimes possible to use a single
36431     reload register instead of two by reloading a sum of two pseudo
36432     registers into a register.  On the other hand, for number of RISC
36433     processors offsets are limited so that often an intermediate
36434     address needs to be generated in order to address a stack slot.  By
36435     defining 'LEGITIMIZE_RELOAD_ADDRESS' appropriately, the
36436     intermediate addresses generated for adjacent some stack slots can
36437     be made identical, and thus be shared.
36438
36439     _Note_: This macro should be used with caution.  It is necessary to
36440     know something of how reload works in order to effectively use
36441     this, and it is quite easy to produce macros that build in too much
36442     knowledge of reload internals.
36443
36444     _Note_: This macro must be able to reload an address created by a
36445     previous invocation of this macro.  If it fails to handle such
36446     addresses then the compiler may generate incorrect code or abort.
36447
36448     The macro definition should use 'push_reload' to indicate parts
36449     that need reloading; OPNUM, TYPE and IND_LEVELS are usually
36450     suitable to be passed unaltered to 'push_reload'.
36451
36452     The code generated by this macro must not alter the substructure of
36453     X.  If it transforms X into a more legitimate form, it should
36454     assign X (which will always be a C variable) a new value.  This
36455     also applies to parts that you change indirectly by calling
36456     'push_reload'.
36457
36458     The macro definition may use 'strict_memory_address_p' to test if
36459     the address has become legitimate.
36460
36461     If you want to change only a part of X, one standard way of doing
36462     this is to use 'copy_rtx'.  Note, however, that it unshares only a
36463     single level of rtl.  Thus, if the part to be changed is not at the
36464     top level, you'll need to replace first the top level.  It is not
36465     necessary for this macro to come up with a legitimate address; but
36466     often a machine-dependent strategy can generate better code.
36467
36468 -- Target Hook: bool TARGET_MODE_DEPENDENT_ADDRESS_P (const_rtx ADDR,
36469          addr_space_t ADDRSPACE)
36470     This hook returns 'true' if memory address ADDR in address space
36471     ADDRSPACE can have different meanings depending on the machine mode
36472     of the memory reference it is used for or if the address is valid
36473     for some modes but not others.
36474
36475     Autoincrement and autodecrement addresses typically have
36476     mode-dependent effects because the amount of the increment or
36477     decrement is the size of the operand being addressed.  Some
36478     machines have other mode-dependent addresses.  Many RISC machines
36479     have no mode-dependent addresses.
36480
36481     You may assume that ADDR is a valid address for the machine.
36482
36483     The default version of this hook returns 'false'.
36484
36485 -- Target Hook: bool TARGET_LEGITIMATE_CONSTANT_P (machine_mode MODE,
36486          rtx X)
36487     This hook returns true if X is a legitimate constant for a
36488     MODE-mode immediate operand on the target machine.  You can assume
36489     that X satisfies 'CONSTANT_P', so you need not check this.
36490
36491     The default definition returns true.
36492
36493 -- Target Hook: rtx TARGET_DELEGITIMIZE_ADDRESS (rtx X)
36494     This hook is used to undo the possibly obfuscating effects of the
36495     'LEGITIMIZE_ADDRESS' and 'LEGITIMIZE_RELOAD_ADDRESS' target macros.
36496     Some backend implementations of these macros wrap symbol references
36497     inside an 'UNSPEC' rtx to represent PIC or similar addressing
36498     modes.  This target hook allows GCC's optimizers to understand the
36499     semantics of these opaque 'UNSPEC's by converting them back into
36500     their original form.
36501
36502 -- Target Hook: bool TARGET_CONST_NOT_OK_FOR_DEBUG_P (rtx X)
36503     This hook should return true if X should not be emitted into debug
36504     sections.
36505
36506 -- Target Hook: bool TARGET_CANNOT_FORCE_CONST_MEM (machine_mode MODE,
36507          rtx X)
36508     This hook should return true if X is of a form that cannot (or
36509     should not) be spilled to the constant pool.  MODE is the mode of
36510     X.
36511
36512     The default version of this hook returns false.
36513
36514     The primary reason to define this hook is to prevent reload from
36515     deciding that a non-legitimate constant would be better reloaded
36516     from the constant pool instead of spilling and reloading a register
36517     holding the constant.  This restriction is often true of addresses
36518     of TLS symbols for various targets.
36519
36520 -- Target Hook: bool TARGET_USE_BLOCKS_FOR_CONSTANT_P (machine_mode
36521          MODE, const_rtx X)
36522     This hook should return true if pool entries for constant X can be
36523     placed in an 'object_block' structure.  MODE is the mode of X.
36524
36525     The default version returns false for all constants.
36526
36527 -- Target Hook: bool TARGET_USE_BLOCKS_FOR_DECL_P (const_tree DECL)
36528     This hook should return true if pool entries for DECL should be
36529     placed in an 'object_block' structure.
36530
36531     The default version returns true for all decls.
36532
36533 -- Target Hook: tree TARGET_BUILTIN_RECIPROCAL (tree FNDECL)
36534     This hook should return the DECL of a function that implements the
36535     reciprocal of the machine-specific builtin function FNDECL, or
36536     'NULL_TREE' if such a function is not available.
36537
36538 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_MASK_FOR_LOAD (void)
36539     This hook should return the DECL of a function F that given an
36540     address ADDR as an argument returns a mask M that can be used to
36541     extract from two vectors the relevant data that resides in ADDR in
36542     case ADDR is not properly aligned.
36543
36544     The autovectorizer, when vectorizing a load operation from an
36545     address ADDR that may be unaligned, will generate two vector loads
36546     from the two aligned addresses around ADDR.  It then generates a
36547     'REALIGN_LOAD' operation to extract the relevant data from the two
36548     loaded vectors.  The first two arguments to 'REALIGN_LOAD', V1 and
36549     V2, are the two vectors, each of size VS, and the third argument,
36550     OFF, defines how the data will be extracted from these two vectors:
36551     if OFF is 0, then the returned vector is V2; otherwise, the
36552     returned vector is composed from the last VS-OFF elements of V1
36553     concatenated to the first OFF elements of V2.
36554
36555     If this hook is defined, the autovectorizer will generate a call to
36556     F (using the DECL tree that this hook returns) and will use the
36557     return value of F as the argument OFF to 'REALIGN_LOAD'.
36558     Therefore, the mask M returned by F should comply with the
36559     semantics expected by 'REALIGN_LOAD' described above.  If this hook
36560     is not defined, then ADDR will be used as the argument OFF to
36561     'REALIGN_LOAD', in which case the low log2(VS) - 1 bits of ADDR
36562     will be considered.
36563
36564 -- Target Hook: int TARGET_VECTORIZE_BUILTIN_VECTORIZATION_COST (enum
36565          vect_cost_for_stmt TYPE_OF_COST, tree VECTYPE, int MISALIGN)
36566     Returns cost of different scalar or vector statements for
36567     vectorization cost model.  For vector memory operations the cost
36568     may depend on type (VECTYPE) and misalignment value (MISALIGN).
36569
36570 -- Target Hook: poly_uint64 TARGET_VECTORIZE_PREFERRED_VECTOR_ALIGNMENT
36571          (const_tree TYPE)
36572     This hook returns the preferred alignment in bits for accesses to
36573     vectors of type TYPE in vectorized code.  This might be less than
36574     or greater than the ABI-defined value returned by
36575     'TARGET_VECTOR_ALIGNMENT'.  It can be equal to the alignment of a
36576     single element, in which case the vectorizer will not try to
36577     optimize for alignment.
36578
36579     The default hook returns 'TYPE_ALIGN (TYPE)', which is correct for
36580     most targets.
36581
36582 -- Target Hook: bool TARGET_VECTORIZE_VECTOR_ALIGNMENT_REACHABLE
36583          (const_tree TYPE, bool IS_PACKED)
36584     Return true if vector alignment is reachable (by peeling N
36585     iterations) for the given scalar type TYPE.  IS_PACKED is false if
36586     the scalar access using TYPE is known to be naturally aligned.
36587
36588 -- Target Hook: bool TARGET_VECTORIZE_VEC_PERM_CONST (machine_mode
36589          MODE, rtx OUTPUT, rtx IN0, rtx IN1, const vec_perm_indices
36590          &SEL)
36591     This hook is used to test whether the target can permute up to two
36592     vectors of mode MODE using the permutation vector 'sel', and also
36593     to emit such a permutation.  In the former case IN0, IN1 and OUT
36594     are all null.  In the latter case IN0 and IN1 are the source
36595     vectors and OUT is the destination vector; all three are registers
36596     of mode MODE.  IN1 is the same as IN0 if SEL describes a
36597     permutation on one vector instead of two.
36598
36599     Return true if the operation is possible, emitting instructions for
36600     it if rtxes are provided.
36601
36602     If the hook returns false for a mode with multibyte elements, GCC
36603     will try the equivalent byte operation.  If that also fails, it
36604     will try forcing the selector into a register and using the
36605     VEC_PERMMODE instruction pattern.  There is no need for the hook to
36606     handle these two implementation approaches itself.
36607
36608 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_VECTORIZED_FUNCTION
36609          (unsigned CODE, tree VEC_TYPE_OUT, tree VEC_TYPE_IN)
36610     This hook should return the decl of a function that implements the
36611     vectorized variant of the function with the 'combined_fn' code CODE
36612     or 'NULL_TREE' if such a function is not available.  The return
36613     type of the vectorized function shall be of vector type
36614     VEC_TYPE_OUT and the argument types should be VEC_TYPE_IN.
36615
36616 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_MD_VECTORIZED_FUNCTION
36617          (tree FNDECL, tree VEC_TYPE_OUT, tree VEC_TYPE_IN)
36618     This hook should return the decl of a function that implements the
36619     vectorized variant of target built-in function 'fndecl'.  The
36620     return type of the vectorized function shall be of vector type
36621     VEC_TYPE_OUT and the argument types should be VEC_TYPE_IN.
36622
36623 -- Target Hook: bool TARGET_VECTORIZE_SUPPORT_VECTOR_MISALIGNMENT
36624          (machine_mode MODE, const_tree TYPE, int MISALIGNMENT, bool
36625          IS_PACKED)
36626     This hook should return true if the target supports misaligned
36627     vector store/load of a specific factor denoted in the MISALIGNMENT
36628     parameter.  The vector store/load should be of machine mode MODE
36629     and the elements in the vectors should be of type TYPE.  IS_PACKED
36630     parameter is true if the memory access is defined in a packed
36631     struct.
36632
36633 -- Target Hook: machine_mode TARGET_VECTORIZE_PREFERRED_SIMD_MODE
36634          (scalar_mode MODE)
36635     This hook should return the preferred mode for vectorizing scalar
36636     mode MODE.  The default is equal to 'word_mode', because the
36637     vectorizer can do some transformations even in absence of
36638     specialized SIMD hardware.
36639
36640 -- Target Hook: machine_mode TARGET_VECTORIZE_SPLIT_REDUCTION
36641          (machine_mode)
36642     This hook should return the preferred mode to split the final
36643     reduction step on MODE to.  The reduction is then carried out
36644     reducing upper against lower halves of vectors recursively until
36645     the specified mode is reached.  The default is MODE which means no
36646     splitting.
36647
36648 -- Target Hook: unsigned int
36649          TARGET_VECTORIZE_AUTOVECTORIZE_VECTOR_MODES (vector_modes
36650          *MODES, bool ALL)
36651     If using the mode returned by
36652     'TARGET_VECTORIZE_PREFERRED_SIMD_MODE' is not the only approach
36653     worth considering, this hook should add one mode to MODES for each
36654     useful alternative approach.  These modes are then passed to
36655     'TARGET_VECTORIZE_RELATED_MODE' to obtain the vector mode for a
36656     given element mode.
36657
36658     The modes returned in MODES should use the smallest element mode
36659     possible for the vectorization approach that they represent,
36660     preferring integer modes over floating-poing modes in the event of
36661     a tie.  The first mode should be the
36662     'TARGET_VECTORIZE_PREFERRED_SIMD_MODE' for its element mode.
36663
36664     If ALL is true, add suitable vector modes even when they are
36665     generally not expected to be worthwhile.
36666
36667     The hook returns a bitmask of flags that control how the modes in
36668     MODES are used.  The flags are:
36669     'VECT_COMPARE_COSTS'
36670          Tells the loop vectorizer to try all the provided modes and
36671          pick the one with the lowest cost.  By default the vectorizer
36672          will choose the first mode that works.
36673
36674     The hook does not need to do anything if the vector returned by
36675     'TARGET_VECTORIZE_PREFERRED_SIMD_MODE' is the only one relevant for
36676     autovectorization.  The default implementation adds no modes and
36677     returns 0.
36678
36679 -- Target Hook: opt_machine_mode TARGET_VECTORIZE_RELATED_MODE
36680          (machine_mode VECTOR_MODE, scalar_mode ELEMENT_MODE,
36681          poly_uint64 NUNITS)
36682     If a piece of code is using vector mode VECTOR_MODE and also wants
36683     to operate on elements of mode ELEMENT_MODE, return the vector mode
36684     it should use for those elements.  If NUNITS is nonzero, ensure
36685     that the mode has exactly NUNITS elements, otherwise pick whichever
36686     vector size pairs the most naturally with VECTOR_MODE.  Return an
36687     empty 'opt_machine_mode' if there is no supported vector mode with
36688     the required properties.
36689
36690     There is no prescribed way of handling the case in which NUNITS is
36691     zero.  One common choice is to pick a vector mode with the same
36692     size as VECTOR_MODE; this is the natural choice if the target has a
36693     fixed vector size.  Another option is to choose a vector mode with
36694     the same number of elements as VECTOR_MODE; this is the natural
36695     choice if the target has a fixed number of elements.
36696     Alternatively, the hook might choose a middle ground, such as
36697     trying to keep the number of elements as similar as possible while
36698     applying maximum and minimum vector sizes.
36699
36700     The default implementation uses 'mode_for_vector' to find the
36701     requested mode, returning a mode with the same size as VECTOR_MODE
36702     when NUNITS is zero.  This is the correct behavior for most
36703     targets.
36704
36705 -- Target Hook: opt_machine_mode TARGET_VECTORIZE_GET_MASK_MODE
36706          (machine_mode MODE)
36707     Return the mode to use for a vector mask that holds one boolean
36708     result for each element of vector mode MODE.  The returned mask
36709     mode can be a vector of integers (class 'MODE_VECTOR_INT'), a
36710     vector of booleans (class 'MODE_VECTOR_BOOL') or a scalar integer
36711     (class 'MODE_INT').  Return an empty 'opt_machine_mode' if no such
36712     mask mode exists.
36713
36714     The default implementation returns a 'MODE_VECTOR_INT' with the
36715     same size and number of elements as MODE, if such a mode exists.
36716
36717 -- Target Hook: bool TARGET_VECTORIZE_EMPTY_MASK_IS_EXPENSIVE (unsigned
36718          IFN)
36719     This hook returns true if masked internal function IFN (really of
36720     type 'internal_fn') should be considered expensive when the mask is
36721     all zeros.  GCC can then try to branch around the instruction
36722     instead.
36723
36724 -- Target Hook: void * TARGET_VECTORIZE_INIT_COST (class loop
36725          *LOOP_INFO)
36726     This hook should initialize target-specific data structures in
36727     preparation for modeling the costs of vectorizing a loop or basic
36728     block.  The default allocates three unsigned integers for
36729     accumulating costs for the prologue, body, and epilogue of the loop
36730     or basic block.  If LOOP_INFO is non-NULL, it identifies the loop
36731     being vectorized; otherwise a single block is being vectorized.
36732
36733 -- Target Hook: unsigned TARGET_VECTORIZE_ADD_STMT_COST (void *DATA,
36734          int COUNT, enum vect_cost_for_stmt KIND, class _stmt_vec_info
36735          *STMT_INFO, int MISALIGN, enum vect_cost_model_location WHERE)
36736     This hook should update the target-specific DATA in response to
36737     adding COUNT copies of the given KIND of statement to a loop or
36738     basic block.  The default adds the builtin vectorizer cost for the
36739     copies of the statement to the accumulator specified by WHERE, (the
36740     prologue, body, or epilogue) and returns the amount added.  The
36741     return value should be viewed as a tentative cost that may later be
36742     revised.
36743
36744 -- Target Hook: void TARGET_VECTORIZE_FINISH_COST (void *DATA, unsigned
36745          *PROLOGUE_COST, unsigned *BODY_COST, unsigned *EPILOGUE_COST)
36746     This hook should complete calculations of the cost of vectorizing a
36747     loop or basic block based on DATA, and return the prologue, body,
36748     and epilogue costs as unsigned integers.  The default returns the
36749     value of the three accumulators.
36750
36751 -- Target Hook: void TARGET_VECTORIZE_DESTROY_COST_DATA (void *DATA)
36752     This hook should release DATA and any related data structures
36753     allocated by TARGET_VECTORIZE_INIT_COST. The default releases the
36754     accumulator.
36755
36756 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_GATHER (const_tree
36757          MEM_VECTYPE, const_tree INDEX_TYPE, int SCALE)
36758     Target builtin that implements vector gather operation.
36759     MEM_VECTYPE is the vector type of the load and INDEX_TYPE is scalar
36760     type of the index, scaled by SCALE.  The default is 'NULL_TREE'
36761     which means to not vectorize gather loads.
36762
36763 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_SCATTER (const_tree
36764          VECTYPE, const_tree INDEX_TYPE, int SCALE)
36765     Target builtin that implements vector scatter operation.  VECTYPE
36766     is the vector type of the store and INDEX_TYPE is scalar type of
36767     the index, scaled by SCALE.  The default is 'NULL_TREE' which means
36768     to not vectorize scatter stores.
36769
36770 -- Target Hook: int TARGET_SIMD_CLONE_COMPUTE_VECSIZE_AND_SIMDLEN
36771          (struct cgraph_node *, struct cgraph_simd_clone *, TREE, INT)
36772     This hook should set VECSIZE_MANGLE, VECSIZE_INT, VECSIZE_FLOAT
36773     fields in SIMD_CLONE structure pointed by CLONE_INFO argument and
36774     also SIMDLEN field if it was previously 0.  The hook should return
36775     0 if SIMD clones shouldn't be emitted, or number of VECSIZE_MANGLE
36776     variants that should be emitted.
36777
36778 -- Target Hook: void TARGET_SIMD_CLONE_ADJUST (struct cgraph_node *)
36779     This hook should add implicit 'attribute(target("..."))' attribute
36780     to SIMD clone NODE if needed.
36781
36782 -- Target Hook: int TARGET_SIMD_CLONE_USABLE (struct cgraph_node *)
36783     This hook should return -1 if SIMD clone NODE shouldn't be used in
36784     vectorized loops in current function, or non-negative number if it
36785     is usable.  In that case, the smaller the number is, the more
36786     desirable it is to use it.
36787
36788 -- Target Hook: int TARGET_SIMT_VF (void)
36789     Return number of threads in SIMT thread group on the target.
36790
36791 -- Target Hook: int TARGET_OMP_DEVICE_KIND_ARCH_ISA (enum
36792          omp_device_kind_arch_isa TRAIT, const char *NAME)
36793     Return 1 if TRAIT NAME is present in the OpenMP context's device
36794     trait set, return 0 if not present in any OpenMP context in the
36795     whole translation unit, or -1 if not present in the current OpenMP
36796     context but might be present in another OpenMP context in the same
36797     TU.
36798
36799 -- Target Hook: bool TARGET_GOACC_VALIDATE_DIMS (tree DECL, int *DIMS,
36800          int FN_LEVEL, unsigned USED)
36801     This hook should check the launch dimensions provided for an
36802     OpenACC compute region, or routine.  Defaulted values are
36803     represented as -1 and non-constant values as 0.  The FN_LEVEL is
36804     negative for the function corresponding to the compute region.  For
36805     a routine it is the outermost level at which partitioned execution
36806     may be spawned.  The hook should verify non-default values.  If
36807     DECL is NULL, global defaults are being validated and unspecified
36808     defaults should be filled in.  Diagnostics should be issued as
36809     appropriate.  Return true, if changes have been made.  You must
36810     override this hook to provide dimensions larger than 1.
36811
36812 -- Target Hook: int TARGET_GOACC_DIM_LIMIT (int AXIS)
36813     This hook should return the maximum size of a particular dimension,
36814     or zero if unbounded.
36815
36816 -- Target Hook: bool TARGET_GOACC_FORK_JOIN (gcall *CALL, const int
36817          *DIMS, bool IS_FORK)
36818     This hook can be used to convert IFN_GOACC_FORK and IFN_GOACC_JOIN
36819     function calls to target-specific gimple, or indicate whether they
36820     should be retained.  It is executed during the oacc_device_lower
36821     pass.  It should return true, if the call should be retained.  It
36822     should return false, if it is to be deleted (either because
36823     target-specific gimple has been inserted before it, or there is no
36824     need for it).  The default hook returns false, if there are no RTL
36825     expanders for them.
36826
36827 -- Target Hook: void TARGET_GOACC_REDUCTION (gcall *CALL)
36828     This hook is used by the oacc_transform pass to expand calls to the
36829     GOACC_REDUCTION internal function, into a sequence of gimple
36830     instructions.  CALL is gimple statement containing the call to the
36831     function.  This hook removes statement CALL after the expanded
36832     sequence has been inserted.  This hook is also responsible for
36833     allocating any storage for reductions when necessary.
36834
36835 -- Target Hook: tree TARGET_PREFERRED_ELSE_VALUE (unsigned IFN, tree
36836          TYPE, unsigned NOPS, tree *OPS)
36837     This hook returns the target's preferred final argument for a call
36838     to conditional internal function IFN (really of type
36839     'internal_fn').  TYPE specifies the return type of the function and
36840     OPS are the operands to the conditional operation, of which there
36841     are NOPS.
36842
36843     For example, if IFN is 'IFN_COND_ADD', the hook returns a value of
36844     type TYPE that should be used when 'OPS[0]' and 'OPS[1]' are
36845     conditionally added together.
36846
36847     This hook is only relevant if the target supports conditional
36848     patterns like 'cond_addM'.  The default implementation returns a
36849     zero constant of type TYPE.
36850
36851
36852File: gccint.info,  Node: Anchored Addresses,  Next: Condition Code,  Prev: Addressing Modes,  Up: Target Macros
36853
3685418.14 Anchored Addresses
36855========================
36856
36857GCC usually addresses every static object as a separate entity.  For
36858example, if we have:
36859
36860     static int a, b, c;
36861     int foo (void) { return a + b + c; }
36862
36863 the code for 'foo' will usually calculate three separate symbolic
36864addresses: those of 'a', 'b' and 'c'.  On some targets, it would be
36865better to calculate just one symbolic address and access the three
36866variables relative to it.  The equivalent pseudocode would be something
36867like:
36868
36869     int foo (void)
36870     {
36871       register int *xr = &x;
36872       return xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
36873     }
36874
36875 (which isn't valid C). We refer to shared addresses like 'x' as
36876"section anchors".  Their use is controlled by '-fsection-anchors'.
36877
36878 The hooks below describe the target properties that GCC needs to know
36879in order to make effective use of section anchors.  It won't use section
36880anchors at all unless either 'TARGET_MIN_ANCHOR_OFFSET' or
36881'TARGET_MAX_ANCHOR_OFFSET' is set to a nonzero value.
36882
36883 -- Target Hook: HOST_WIDE_INT TARGET_MIN_ANCHOR_OFFSET
36884     The minimum offset that should be applied to a section anchor.  On
36885     most targets, it should be the smallest offset that can be applied
36886     to a base register while still giving a legitimate address for
36887     every mode.  The default value is 0.
36888
36889 -- Target Hook: HOST_WIDE_INT TARGET_MAX_ANCHOR_OFFSET
36890     Like 'TARGET_MIN_ANCHOR_OFFSET', but the maximum (inclusive) offset
36891     that should be applied to section anchors.  The default value is 0.
36892
36893 -- Target Hook: void TARGET_ASM_OUTPUT_ANCHOR (rtx X)
36894     Write the assembly code to define section anchor X, which is a
36895     'SYMBOL_REF' for which 'SYMBOL_REF_ANCHOR_P (X)' is true.  The hook
36896     is called with the assembly output position set to the beginning of
36897     'SYMBOL_REF_BLOCK (X)'.
36898
36899     If 'ASM_OUTPUT_DEF' is available, the hook's default definition
36900     uses it to define the symbol as '. + SYMBOL_REF_BLOCK_OFFSET (X)'.
36901     If 'ASM_OUTPUT_DEF' is not available, the hook's default definition
36902     is 'NULL', which disables the use of section anchors altogether.
36903
36904 -- Target Hook: bool TARGET_USE_ANCHORS_FOR_SYMBOL_P (const_rtx X)
36905     Return true if GCC should attempt to use anchors to access
36906     'SYMBOL_REF' X.  You can assume 'SYMBOL_REF_HAS_BLOCK_INFO_P (X)'
36907     and '!SYMBOL_REF_ANCHOR_P (X)'.
36908
36909     The default version is correct for most targets, but you might need
36910     to intercept this hook to handle things like target-specific
36911     attributes or target-specific sections.
36912
36913
36914File: gccint.info,  Node: Condition Code,  Next: Costs,  Prev: Anchored Addresses,  Up: Target Macros
36915
3691618.15 Condition Code Status
36917===========================
36918
36919The macros in this section can be split in two families, according to
36920the two ways of representing condition codes in GCC.
36921
36922 The first representation is the so called '(cc0)' representation (*note
36923Jump Patterns::), where all instructions can have an implicit clobber of
36924the condition codes.  The second is the condition code register
36925representation, which provides better schedulability for architectures
36926that do have a condition code register, but on which most instructions
36927do not affect it.  The latter category includes most RISC machines.
36928
36929 The implicit clobbering poses a strong restriction on the placement of
36930the definition and use of the condition code.  In the past the
36931definition and use were always adjacent.  However, recent changes to
36932support trapping arithmatic may result in the definition and user being
36933in different blocks.  Thus, there may be a 'NOTE_INSN_BASIC_BLOCK'
36934between them.  Additionally, the definition may be the source of
36935exception handling edges.
36936
36937 These restrictions can prevent important optimizations on some
36938machines.  For example, on the IBM RS/6000, there is a delay for taken
36939branches unless the condition code register is set three instructions
36940earlier than the conditional branch.  The instruction scheduler cannot
36941perform this optimization if it is not permitted to separate the
36942definition and use of the condition code register.
36943
36944 For this reason, it is possible and suggested to use a register to
36945represent the condition code for new ports.  If there is a specific
36946condition code register in the machine, use a hard register.  If the
36947condition code or comparison result can be placed in any general
36948register, or if there are multiple condition registers, use a pseudo
36949register.  Registers used to store the condition code value will usually
36950have a mode that is in class 'MODE_CC'.
36951
36952 Alternatively, you can use 'BImode' if the comparison operator is
36953specified already in the compare instruction.  In this case, you are not
36954interested in most macros in this section.
36955
36956* Menu:
36957
36958* CC0 Condition Codes::      Old style representation of condition codes.
36959* MODE_CC Condition Codes::  Modern representation of condition codes.
36960
36961
36962File: gccint.info,  Node: CC0 Condition Codes,  Next: MODE_CC Condition Codes,  Up: Condition Code
36963
3696418.15.1 Representation of condition codes using '(cc0)'
36965-------------------------------------------------------
36966
36967The file 'conditions.h' defines a variable 'cc_status' to describe how
36968the condition code was computed (in case the interpretation of the
36969condition code depends on the instruction that it was set by).  This
36970variable contains the RTL expressions on which the condition code is
36971currently based, and several standard flags.
36972
36973 Sometimes additional machine-specific flags must be defined in the
36974machine description header file.  It can also add additional
36975machine-specific information by defining 'CC_STATUS_MDEP'.
36976
36977 -- Macro: CC_STATUS_MDEP
36978     C code for a data type which is used for declaring the 'mdep'
36979     component of 'cc_status'.  It defaults to 'int'.
36980
36981     This macro is not used on machines that do not use 'cc0'.
36982
36983 -- Macro: CC_STATUS_MDEP_INIT
36984     A C expression to initialize the 'mdep' field to "empty".  The
36985     default definition does nothing, since most machines don't use the
36986     field anyway.  If you want to use the field, you should probably
36987     define this macro to initialize it.
36988
36989     This macro is not used on machines that do not use 'cc0'.
36990
36991 -- Macro: NOTICE_UPDATE_CC (EXP, INSN)
36992     A C compound statement to set the components of 'cc_status'
36993     appropriately for an insn INSN whose body is EXP.  It is this
36994     macro's responsibility to recognize insns that set the condition
36995     code as a byproduct of other activity as well as those that
36996     explicitly set '(cc0)'.
36997
36998     This macro is not used on machines that do not use 'cc0'.
36999
37000     If there are insns that do not set the condition code but do alter
37001     other machine registers, this macro must check to see whether they
37002     invalidate the expressions that the condition code is recorded as
37003     reflecting.  For example, on the 68000, insns that store in address
37004     registers do not set the condition code, which means that usually
37005     'NOTICE_UPDATE_CC' can leave 'cc_status' unaltered for such insns.
37006     But suppose that the previous insn set the condition code based on
37007     location 'a4@(102)' and the current insn stores a new value in
37008     'a4'.  Although the condition code is not changed by this, it will
37009     no longer be true that it reflects the contents of 'a4@(102)'.
37010     Therefore, 'NOTICE_UPDATE_CC' must alter 'cc_status' in this case
37011     to say that nothing is known about the condition code value.
37012
37013     The definition of 'NOTICE_UPDATE_CC' must be prepared to deal with
37014     the results of peephole optimization: insns whose patterns are
37015     'parallel' RTXs containing various 'reg', 'mem' or constants which
37016     are just the operands.  The RTL structure of these insns is not
37017     sufficient to indicate what the insns actually do.  What
37018     'NOTICE_UPDATE_CC' should do when it sees one is just to run
37019     'CC_STATUS_INIT'.
37020
37021     A possible definition of 'NOTICE_UPDATE_CC' is to call a function
37022     that looks at an attribute (*note Insn Attributes::) named, for
37023     example, 'cc'.  This avoids having detailed information about
37024     patterns in two places, the 'md' file and in 'NOTICE_UPDATE_CC'.
37025
37026
37027File: gccint.info,  Node: MODE_CC Condition Codes,  Prev: CC0 Condition Codes,  Up: Condition Code
37028
3702918.15.2 Representation of condition codes using registers
37030---------------------------------------------------------
37031
37032 -- Macro: SELECT_CC_MODE (OP, X, Y)
37033     On many machines, the condition code may be produced by other
37034     instructions than compares, for example the branch can use directly
37035     the condition code set by a subtract instruction.  However, on some
37036     machines when the condition code is set this way some bits (such as
37037     the overflow bit) are not set in the same way as a test
37038     instruction, so that a different branch instruction must be used
37039     for some conditional branches.  When this happens, use the machine
37040     mode of the condition code register to record different formats of
37041     the condition code register.  Modes can also be used to record
37042     which compare instruction (e.g. a signed or an unsigned comparison)
37043     produced the condition codes.
37044
37045     If other modes than 'CCmode' are required, add them to
37046     'MACHINE-modes.def' and define 'SELECT_CC_MODE' to choose a mode
37047     given an operand of a compare.  This is needed because the modes
37048     have to be chosen not only during RTL generation but also, for
37049     example, by instruction combination.  The result of
37050     'SELECT_CC_MODE' should be consistent with the mode used in the
37051     patterns; for example to support the case of the add on the SPARC
37052     discussed above, we have the pattern
37053
37054          (define_insn ""
37055            [(set (reg:CCNZ 0)
37056                  (compare:CCNZ
37057                    (plus:SI (match_operand:SI 0 "register_operand" "%r")
37058                             (match_operand:SI 1 "arith_operand" "rI"))
37059                    (const_int 0)))]
37060            ""
37061            "...")
37062
37063     together with a 'SELECT_CC_MODE' that returns 'CCNZmode' for
37064     comparisons whose argument is a 'plus':
37065
37066          #define SELECT_CC_MODE(OP,X,Y) \
37067            (GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT           \
37068             ? ((OP == LT || OP == LE || OP == GT || OP == GE)     \
37069                ? CCFPEmode : CCFPmode)                            \
37070             : ((GET_CODE (X) == PLUS || GET_CODE (X) == MINUS     \
37071                 || GET_CODE (X) == NEG || GET_CODE (x) == ASHIFT) \
37072                ? CCNZmode : CCmode))
37073
37074     Another reason to use modes is to retain information on which
37075     operands were used by the comparison; see 'REVERSIBLE_CC_MODE'
37076     later in this section.
37077
37078     You should define this macro if and only if you define extra CC
37079     modes in 'MACHINE-modes.def'.
37080
37081 -- Target Hook: void TARGET_CANONICALIZE_COMPARISON (int *CODE, rtx
37082          *OP0, rtx *OP1, bool OP0_PRESERVE_VALUE)
37083     On some machines not all possible comparisons are defined, but you
37084     can convert an invalid comparison into a valid one.  For example,
37085     the Alpha does not have a 'GT' comparison, but you can use an 'LT'
37086     comparison instead and swap the order of the operands.
37087
37088     On such machines, implement this hook to do any required
37089     conversions.  CODE is the initial comparison code and OP0 and OP1
37090     are the left and right operands of the comparison, respectively.
37091     If OP0_PRESERVE_VALUE is 'true' the implementation is not allowed
37092     to change the value of OP0 since the value might be used in RTXs
37093     which aren't comparisons.  E.g.  the implementation is not allowed
37094     to swap operands in that case.
37095
37096     GCC will not assume that the comparison resulting from this macro
37097     is valid but will see if the resulting insn matches a pattern in
37098     the 'md' file.
37099
37100     You need not to implement this hook if it would never change the
37101     comparison code or operands.
37102
37103 -- Macro: REVERSIBLE_CC_MODE (MODE)
37104     A C expression whose value is one if it is always safe to reverse a
37105     comparison whose mode is MODE.  If 'SELECT_CC_MODE' can ever return
37106     MODE for a floating-point inequality comparison, then
37107     'REVERSIBLE_CC_MODE (MODE)' must be zero.
37108
37109     You need not define this macro if it would always returns zero or
37110     if the floating-point format is anything other than
37111     'IEEE_FLOAT_FORMAT'.  For example, here is the definition used on
37112     the SPARC, where floating-point inequality comparisons are given
37113     either 'CCFPEmode' or 'CCFPmode':
37114
37115          #define REVERSIBLE_CC_MODE(MODE) \
37116             ((MODE) != CCFPEmode && (MODE) != CCFPmode)
37117
37118 -- Macro: REVERSE_CONDITION (CODE, MODE)
37119     A C expression whose value is reversed condition code of the CODE
37120     for comparison done in CC_MODE MODE.  The macro is used only in
37121     case 'REVERSIBLE_CC_MODE (MODE)' is nonzero.  Define this macro in
37122     case machine has some non-standard way how to reverse certain
37123     conditionals.  For instance in case all floating point conditions
37124     are non-trapping, compiler may freely convert unordered compares to
37125     ordered ones.  Then definition may look like:
37126
37127          #define REVERSE_CONDITION(CODE, MODE) \
37128             ((MODE) != CCFPmode ? reverse_condition (CODE) \
37129              : reverse_condition_maybe_unordered (CODE))
37130
37131 -- Target Hook: bool TARGET_FIXED_CONDITION_CODE_REGS (unsigned int
37132          *P1, unsigned int *P2)
37133     On targets which do not use '(cc0)', and which use a hard register
37134     rather than a pseudo-register to hold condition codes, the regular
37135     CSE passes are often not able to identify cases in which the hard
37136     register is set to a common value.  Use this hook to enable a small
37137     pass which optimizes such cases.  This hook should return true to
37138     enable this pass, and it should set the integers to which its
37139     arguments point to the hard register numbers used for condition
37140     codes.  When there is only one such register, as is true on most
37141     systems, the integer pointed to by P2 should be set to
37142     'INVALID_REGNUM'.
37143
37144     The default version of this hook returns false.
37145
37146 -- Target Hook: machine_mode TARGET_CC_MODES_COMPATIBLE (machine_mode
37147          M1, machine_mode M2)
37148     On targets which use multiple condition code modes in class
37149     'MODE_CC', it is sometimes the case that a comparison can be
37150     validly done in more than one mode.  On such a system, define this
37151     target hook to take two mode arguments and to return a mode in
37152     which both comparisons may be validly done.  If there is no such
37153     mode, return 'VOIDmode'.
37154
37155     The default version of this hook checks whether the modes are the
37156     same.  If they are, it returns that mode.  If they are different,
37157     it returns 'VOIDmode'.
37158
37159 -- Target Hook: unsigned int TARGET_FLAGS_REGNUM
37160     If the target has a dedicated flags register, and it needs to use
37161     the post-reload comparison elimination pass, or the delay slot
37162     filler pass, then this value should be set appropriately.
37163
37164
37165File: gccint.info,  Node: Costs,  Next: Scheduling,  Prev: Condition Code,  Up: Target Macros
37166
3716718.16 Describing Relative Costs of Operations
37168=============================================
37169
37170These macros let you describe the relative speed of various operations
37171on the target machine.
37172
37173 -- Macro: REGISTER_MOVE_COST (MODE, FROM, TO)
37174     A C expression for the cost of moving data of mode MODE from a
37175     register in class FROM to one in class TO.  The classes are
37176     expressed using the enumeration values such as 'GENERAL_REGS'.  A
37177     value of 2 is the default; other values are interpreted relative to
37178     that.
37179
37180     It is not required that the cost always equal 2 when FROM is the
37181     same as TO; on some machines it is expensive to move between
37182     registers if they are not general registers.
37183
37184     If reload sees an insn consisting of a single 'set' between two
37185     hard registers, and if 'REGISTER_MOVE_COST' applied to their
37186     classes returns a value of 2, reload does not check to ensure that
37187     the constraints of the insn are met.  Setting a cost of other than
37188     2 will allow reload to verify that the constraints are met.  You
37189     should do this if the 'movM' pattern's constraints do not allow
37190     such copying.
37191
37192     These macros are obsolete, new ports should use the target hook
37193     'TARGET_REGISTER_MOVE_COST' instead.
37194
37195 -- Target Hook: int TARGET_REGISTER_MOVE_COST (machine_mode MODE,
37196          reg_class_t FROM, reg_class_t TO)
37197     This target hook should return the cost of moving data of mode MODE
37198     from a register in class FROM to one in class TO.  The classes are
37199     expressed using the enumeration values such as 'GENERAL_REGS'.  A
37200     value of 2 is the default; other values are interpreted relative to
37201     that.
37202
37203     It is not required that the cost always equal 2 when FROM is the
37204     same as TO; on some machines it is expensive to move between
37205     registers if they are not general registers.
37206
37207     If reload sees an insn consisting of a single 'set' between two
37208     hard registers, and if 'TARGET_REGISTER_MOVE_COST' applied to their
37209     classes returns a value of 2, reload does not check to ensure that
37210     the constraints of the insn are met.  Setting a cost of other than
37211     2 will allow reload to verify that the constraints are met.  You
37212     should do this if the 'movM' pattern's constraints do not allow
37213     such copying.
37214
37215     The default version of this function returns 2.
37216
37217 -- Macro: MEMORY_MOVE_COST (MODE, CLASS, IN)
37218     A C expression for the cost of moving data of mode MODE between a
37219     register of class CLASS and memory; IN is zero if the value is to
37220     be written to memory, nonzero if it is to be read in.  This cost is
37221     relative to those in 'REGISTER_MOVE_COST'.  If moving between
37222     registers and memory is more expensive than between two registers,
37223     you should define this macro to express the relative cost.
37224
37225     If you do not define this macro, GCC uses a default cost of 4 plus
37226     the cost of copying via a secondary reload register, if one is
37227     needed.  If your machine requires a secondary reload register to
37228     copy between memory and a register of CLASS but the reload
37229     mechanism is more complex than copying via an intermediate, define
37230     this macro to reflect the actual cost of the move.
37231
37232     GCC defines the function 'memory_move_secondary_cost' if secondary
37233     reloads are needed.  It computes the costs due to copying via a
37234     secondary register.  If your machine copies from memory using a
37235     secondary register in the conventional way but the default base
37236     value of 4 is not correct for your machine, define this macro to
37237     add some other value to the result of that function.  The arguments
37238     to that function are the same as to this macro.
37239
37240     These macros are obsolete, new ports should use the target hook
37241     'TARGET_MEMORY_MOVE_COST' instead.
37242
37243 -- Target Hook: int TARGET_MEMORY_MOVE_COST (machine_mode MODE,
37244          reg_class_t RCLASS, bool IN)
37245     This target hook should return the cost of moving data of mode MODE
37246     between a register of class RCLASS and memory; IN is 'false' if the
37247     value is to be written to memory, 'true' if it is to be read in.
37248     This cost is relative to those in 'TARGET_REGISTER_MOVE_COST'.  If
37249     moving between registers and memory is more expensive than between
37250     two registers, you should add this target hook to express the
37251     relative cost.
37252
37253     If you do not add this target hook, GCC uses a default cost of 4
37254     plus the cost of copying via a secondary reload register, if one is
37255     needed.  If your machine requires a secondary reload register to
37256     copy between memory and a register of RCLASS but the reload
37257     mechanism is more complex than copying via an intermediate, use
37258     this target hook to reflect the actual cost of the move.
37259
37260     GCC defines the function 'memory_move_secondary_cost' if secondary
37261     reloads are needed.  It computes the costs due to copying via a
37262     secondary register.  If your machine copies from memory using a
37263     secondary register in the conventional way but the default base
37264     value of 4 is not correct for your machine, use this target hook to
37265     add some other value to the result of that function.  The arguments
37266     to that function are the same as to this target hook.
37267
37268 -- Macro: BRANCH_COST (SPEED_P, PREDICTABLE_P)
37269     A C expression for the cost of a branch instruction.  A value of 1
37270     is the default; other values are interpreted relative to that.
37271     Parameter SPEED_P is true when the branch in question should be
37272     optimized for speed.  When it is false, 'BRANCH_COST' should return
37273     a value optimal for code size rather than performance.
37274     PREDICTABLE_P is true for well-predicted branches.  On many
37275     architectures the 'BRANCH_COST' can be reduced then.
37276
37277 Here are additional macros which do not specify precise relative costs,
37278but only that certain actions are more expensive than GCC would
37279ordinarily expect.
37280
37281 -- Macro: SLOW_BYTE_ACCESS
37282     Define this macro as a C expression which is nonzero if accessing
37283     less than a word of memory (i.e. a 'char' or a 'short') is no
37284     faster than accessing a word of memory, i.e., if such access
37285     require more than one instruction or if there is no difference in
37286     cost between byte and (aligned) word loads.
37287
37288     When this macro is not defined, the compiler will access a field by
37289     finding the smallest containing object; when it is defined, a
37290     fullword load will be used if alignment permits.  Unless bytes
37291     accesses are faster than word accesses, using word accesses is
37292     preferable since it may eliminate subsequent memory access if
37293     subsequent accesses occur to other fields in the same word of the
37294     structure, but to different bytes.
37295
37296 -- Target Hook: bool TARGET_SLOW_UNALIGNED_ACCESS (machine_mode MODE,
37297          unsigned int ALIGN)
37298     This hook returns true if memory accesses described by the MODE and
37299     ALIGNMENT parameters have a cost many times greater than aligned
37300     accesses, for example if they are emulated in a trap handler.  This
37301     hook is invoked only for unaligned accesses, i.e. when 'ALIGNMENT <
37302     GET_MODE_ALIGNMENT (MODE)'.
37303
37304     When this hook returns true, the compiler will act as if
37305     'STRICT_ALIGNMENT' were true when generating code for block moves.
37306     This can cause significantly more instructions to be produced.
37307     Therefore, do not make this hook return true if unaligned accesses
37308     only add a cycle or two to the time for a memory access.
37309
37310     The hook must return true whenever 'STRICT_ALIGNMENT' is true.  The
37311     default implementation returns 'STRICT_ALIGNMENT'.
37312
37313 -- Macro: MOVE_RATIO (SPEED)
37314     The threshold of number of scalar memory-to-memory move insns,
37315     _below_ which a sequence of insns should be generated instead of a
37316     string move insn or a library call.  Increasing the value will
37317     always make code faster, but eventually incurs high cost in
37318     increased code size.
37319
37320     Note that on machines where the corresponding move insn is a
37321     'define_expand' that emits a sequence of insns, this macro counts
37322     the number of such sequences.
37323
37324     The parameter SPEED is true if the code is currently being
37325     optimized for speed rather than size.
37326
37327     If you don't define this, a reasonable default is used.
37328
37329 -- Target Hook: bool TARGET_USE_BY_PIECES_INFRASTRUCTURE_P (unsigned
37330          HOST_WIDE_INT SIZE, unsigned int ALIGNMENT, enum
37331          by_pieces_operation OP, bool SPEED_P)
37332     GCC will attempt several strategies when asked to copy between two
37333     areas of memory, or to set, clear or store to memory, for example
37334     when copying a 'struct'.  The 'by_pieces' infrastructure implements
37335     such memory operations as a sequence of load, store or move insns.
37336     Alternate strategies are to expand the 'cpymem' or 'setmem' optabs,
37337     to emit a library call, or to emit unit-by-unit, loop-based
37338     operations.
37339
37340     This target hook should return true if, for a memory operation with
37341     a given SIZE and ALIGNMENT, using the 'by_pieces' infrastructure is
37342     expected to result in better code generation.  Both SIZE and
37343     ALIGNMENT are measured in terms of storage units.
37344
37345     The parameter OP is one of: 'CLEAR_BY_PIECES', 'MOVE_BY_PIECES',
37346     'SET_BY_PIECES', 'STORE_BY_PIECES' or 'COMPARE_BY_PIECES'.  These
37347     describe the type of memory operation under consideration.
37348
37349     The parameter SPEED_P is true if the code is currently being
37350     optimized for speed rather than size.
37351
37352     Returning true for higher values of SIZE can improve code
37353     generation for speed if the target does not provide an
37354     implementation of the 'cpymem' or 'setmem' standard names, if the
37355     'cpymem' or 'setmem' implementation would be more expensive than a
37356     sequence of insns, or if the overhead of a library call would
37357     dominate that of the body of the memory operation.
37358
37359     Returning true for higher values of 'size' may also cause an
37360     increase in code size, for example where the number of insns
37361     emitted to perform a move would be greater than that of a library
37362     call.
37363
37364 -- Target Hook: int TARGET_COMPARE_BY_PIECES_BRANCH_RATIO (machine_mode
37365          MODE)
37366     When expanding a block comparison in MODE, gcc can try to reduce
37367     the number of branches at the expense of more memory operations.
37368     This hook allows the target to override the default choice.  It
37369     should return the factor by which branches should be reduced over
37370     the plain expansion with one comparison per MODE-sized piece.  A
37371     port can also prevent a particular mode from being used for block
37372     comparisons by returning a negative number from this hook.
37373
37374 -- Macro: MOVE_MAX_PIECES
37375     A C expression used by 'move_by_pieces' to determine the largest
37376     unit a load or store used to copy memory is.  Defaults to
37377     'MOVE_MAX'.
37378
37379 -- Macro: STORE_MAX_PIECES
37380     A C expression used by 'store_by_pieces' to determine the largest
37381     unit a store used to memory is.  Defaults to 'MOVE_MAX_PIECES', or
37382     two times the size of 'HOST_WIDE_INT', whichever is smaller.
37383
37384 -- Macro: COMPARE_MAX_PIECES
37385     A C expression used by 'compare_by_pieces' to determine the largest
37386     unit a load or store used to compare memory is.  Defaults to
37387     'MOVE_MAX_PIECES'.
37388
37389 -- Macro: CLEAR_RATIO (SPEED)
37390     The threshold of number of scalar move insns, _below_ which a
37391     sequence of insns should be generated to clear memory instead of a
37392     string clear insn or a library call.  Increasing the value will
37393     always make code faster, but eventually incurs high cost in
37394     increased code size.
37395
37396     The parameter SPEED is true if the code is currently being
37397     optimized for speed rather than size.
37398
37399     If you don't define this, a reasonable default is used.
37400
37401 -- Macro: SET_RATIO (SPEED)
37402     The threshold of number of scalar move insns, _below_ which a
37403     sequence of insns should be generated to set memory to a constant
37404     value, instead of a block set insn or a library call.  Increasing
37405     the value will always make code faster, but eventually incurs high
37406     cost in increased code size.
37407
37408     The parameter SPEED is true if the code is currently being
37409     optimized for speed rather than size.
37410
37411     If you don't define this, it defaults to the value of 'MOVE_RATIO'.
37412
37413 -- Macro: USE_LOAD_POST_INCREMENT (MODE)
37414     A C expression used to determine whether a load postincrement is a
37415     good thing to use for a given mode.  Defaults to the value of
37416     'HAVE_POST_INCREMENT'.
37417
37418 -- Macro: USE_LOAD_POST_DECREMENT (MODE)
37419     A C expression used to determine whether a load postdecrement is a
37420     good thing to use for a given mode.  Defaults to the value of
37421     'HAVE_POST_DECREMENT'.
37422
37423 -- Macro: USE_LOAD_PRE_INCREMENT (MODE)
37424     A C expression used to determine whether a load preincrement is a
37425     good thing to use for a given mode.  Defaults to the value of
37426     'HAVE_PRE_INCREMENT'.
37427
37428 -- Macro: USE_LOAD_PRE_DECREMENT (MODE)
37429     A C expression used to determine whether a load predecrement is a
37430     good thing to use for a given mode.  Defaults to the value of
37431     'HAVE_PRE_DECREMENT'.
37432
37433 -- Macro: USE_STORE_POST_INCREMENT (MODE)
37434     A C expression used to determine whether a store postincrement is a
37435     good thing to use for a given mode.  Defaults to the value of
37436     'HAVE_POST_INCREMENT'.
37437
37438 -- Macro: USE_STORE_POST_DECREMENT (MODE)
37439     A C expression used to determine whether a store postdecrement is a
37440     good thing to use for a given mode.  Defaults to the value of
37441     'HAVE_POST_DECREMENT'.
37442
37443 -- Macro: USE_STORE_PRE_INCREMENT (MODE)
37444     This macro is used to determine whether a store preincrement is a
37445     good thing to use for a given mode.  Defaults to the value of
37446     'HAVE_PRE_INCREMENT'.
37447
37448 -- Macro: USE_STORE_PRE_DECREMENT (MODE)
37449     This macro is used to determine whether a store predecrement is a
37450     good thing to use for a given mode.  Defaults to the value of
37451     'HAVE_PRE_DECREMENT'.
37452
37453 -- Macro: NO_FUNCTION_CSE
37454     Define this macro to be true if it is as good or better to call a
37455     constant function address than to call an address kept in a
37456     register.
37457
37458 -- Macro: LOGICAL_OP_NON_SHORT_CIRCUIT
37459     Define this macro if a non-short-circuit operation produced by
37460     'fold_range_test ()' is optimal.  This macro defaults to true if
37461     'BRANCH_COST' is greater than or equal to the value 2.
37462
37463 -- Target Hook: bool TARGET_OPTAB_SUPPORTED_P (int OP, machine_mode
37464          MODE1, machine_mode MODE2, optimization_type OPT_TYPE)
37465     Return true if the optimizers should use optab OP with modes MODE1
37466     and MODE2 for optimization type OPT_TYPE.  The optab is known to
37467     have an associated '.md' instruction whose C condition is true.
37468     MODE2 is only meaningful for conversion optabs; for direct optabs
37469     it is a copy of MODE1.
37470
37471     For example, when called with OP equal to 'rint_optab' and MODE1
37472     equal to 'DFmode', the hook should say whether the optimizers
37473     should use optab 'rintdf2'.
37474
37475     The default hook returns true for all inputs.
37476
37477 -- Target Hook: bool TARGET_RTX_COSTS (rtx X, machine_mode MODE, int
37478          OUTER_CODE, int OPNO, int *TOTAL, bool SPEED)
37479     This target hook describes the relative costs of RTL expressions.
37480
37481     The cost may depend on the precise form of the expression, which is
37482     available for examination in X, and the fact that X appears as
37483     operand OPNO of an expression with rtx code OUTER_CODE.  That is,
37484     the hook can assume that there is some rtx Y such that 'GET_CODE
37485     (Y) == OUTER_CODE' and such that either (a) 'XEXP (Y, OPNO) == X'
37486     or (b) 'XVEC (Y, OPNO)' contains X.
37487
37488     MODE is X's machine mode, or for cases like 'const_int' that do not
37489     have a mode, the mode in which X is used.
37490
37491     In implementing this hook, you can use the construct 'COSTS_N_INSNS
37492     (N)' to specify a cost equal to N fast instructions.
37493
37494     On entry to the hook, '*TOTAL' contains a default estimate for the
37495     cost of the expression.  The hook should modify this value as
37496     necessary.  Traditionally, the default costs are 'COSTS_N_INSNS
37497     (5)' for multiplications, 'COSTS_N_INSNS (7)' for division and
37498     modulus operations, and 'COSTS_N_INSNS (1)' for all other
37499     operations.
37500
37501     When optimizing for code size, i.e. when 'speed' is false, this
37502     target hook should be used to estimate the relative size cost of an
37503     expression, again relative to 'COSTS_N_INSNS'.
37504
37505     The hook returns true when all subexpressions of X have been
37506     processed, and false when 'rtx_cost' should recurse.
37507
37508 -- Target Hook: int TARGET_ADDRESS_COST (rtx ADDRESS, machine_mode
37509          MODE, addr_space_t AS, bool SPEED)
37510     This hook computes the cost of an addressing mode that contains
37511     ADDRESS.  If not defined, the cost is computed from the ADDRESS
37512     expression and the 'TARGET_RTX_COST' hook.
37513
37514     For most CISC machines, the default cost is a good approximation of
37515     the true cost of the addressing mode.  However, on RISC machines,
37516     all instructions normally have the same length and execution time.
37517     Hence all addresses will have equal costs.
37518
37519     In cases where more than one form of an address is known, the form
37520     with the lowest cost will be used.  If multiple forms have the
37521     same, lowest, cost, the one that is the most complex will be used.
37522
37523     For example, suppose an address that is equal to the sum of a
37524     register and a constant is used twice in the same basic block.
37525     When this macro is not defined, the address will be computed in a
37526     register and memory references will be indirect through that
37527     register.  On machines where the cost of the addressing mode
37528     containing the sum is no higher than that of a simple indirect
37529     reference, this will produce an additional instruction and possibly
37530     require an additional register.  Proper specification of this macro
37531     eliminates this overhead for such machines.
37532
37533     This hook is never called with an invalid address.
37534
37535     On machines where an address involving more than one register is as
37536     cheap as an address computation involving only one register,
37537     defining 'TARGET_ADDRESS_COST' to reflect this can cause two
37538     registers to be live over a region of code where only one would
37539     have been if 'TARGET_ADDRESS_COST' were not defined in that manner.
37540     This effect should be considered in the definition of this macro.
37541     Equivalent costs should probably only be given to addresses with
37542     different numbers of registers on machines with lots of registers.
37543
37544 -- Target Hook: int TARGET_INSN_COST (rtx_insn *INSN, bool SPEED)
37545     This target hook describes the relative costs of RTL instructions.
37546
37547     In implementing this hook, you can use the construct 'COSTS_N_INSNS
37548     (N)' to specify a cost equal to N fast instructions.
37549
37550     When optimizing for code size, i.e. when 'speed' is false, this
37551     target hook should be used to estimate the relative size cost of an
37552     expression, again relative to 'COSTS_N_INSNS'.
37553
37554 -- Target Hook: unsigned int TARGET_MAX_NOCE_IFCVT_SEQ_COST (edge E)
37555     This hook returns a value in the same units as 'TARGET_RTX_COSTS',
37556     giving the maximum acceptable cost for a sequence generated by the
37557     RTL if-conversion pass when conditional execution is not available.
37558     The RTL if-conversion pass attempts to convert conditional
37559     operations that would require a branch to a series of unconditional
37560     operations and 'movMODEcc' insns.  This hook returns the maximum
37561     cost of the unconditional instructions and the 'movMODEcc' insns.
37562     RTL if-conversion is cancelled if the cost of the converted
37563     sequence is greater than the value returned by this hook.
37564
37565     'e' is the edge between the basic block containing the conditional
37566     branch to the basic block which would be executed if the condition
37567     were true.
37568
37569     The default implementation of this hook uses the
37570     'max-rtl-if-conversion-[un]predictable' parameters if they are set,
37571     and uses a multiple of 'BRANCH_COST' otherwise.
37572
37573 -- Target Hook: bool TARGET_NOCE_CONVERSION_PROFITABLE_P (rtx_insn
37574          *SEQ, struct noce_if_info *IF_INFO)
37575     This hook returns true if the instruction sequence 'seq' is a good
37576     candidate as a replacement for the if-convertible sequence
37577     described in 'if_info'.
37578
37579 -- Target Hook: bool TARGET_NO_SPECULATION_IN_DELAY_SLOTS_P (void)
37580     This predicate controls the use of the eager delay slot filler to
37581     disallow speculatively executed instructions being placed in delay
37582     slots.  Targets such as certain MIPS architectures possess both
37583     branches with and without delay slots.  As the eager delay slot
37584     filler can decrease performance, disabling it is beneficial when
37585     ordinary branches are available.  Use of delay slot branches filled
37586     using the basic filler is often still desirable as the delay slot
37587     can hide a pipeline bubble.
37588
37589 -- Target Hook: HOST_WIDE_INT TARGET_ESTIMATED_POLY_VALUE (poly_int64
37590          VAL)
37591     Return an estimate of the runtime value of VAL, for use in things
37592     like cost calculations or profiling frequencies.  The default
37593     implementation returns the lowest possible value of VAL.
37594
37595
37596File: gccint.info,  Node: Scheduling,  Next: Sections,  Prev: Costs,  Up: Target Macros
37597
3759818.17 Adjusting the Instruction Scheduler
37599=========================================
37600
37601The instruction scheduler may need a fair amount of machine-specific
37602adjustment in order to produce good code.  GCC provides several target
37603hooks for this purpose.  It is usually enough to define just a few of
37604them: try the first ones in this list first.
37605
37606 -- Target Hook: int TARGET_SCHED_ISSUE_RATE (void)
37607     This hook returns the maximum number of instructions that can ever
37608     issue at the same time on the target machine.  The default is one.
37609     Although the insn scheduler can define itself the possibility of
37610     issue an insn on the same cycle, the value can serve as an
37611     additional constraint to issue insns on the same simulated
37612     processor cycle (see hooks 'TARGET_SCHED_REORDER' and
37613     'TARGET_SCHED_REORDER2').  This value must be constant over the
37614     entire compilation.  If you need it to vary depending on what the
37615     instructions are, you must use 'TARGET_SCHED_VARIABLE_ISSUE'.
37616
37617 -- Target Hook: int TARGET_SCHED_VARIABLE_ISSUE (FILE *FILE, int
37618          VERBOSE, rtx_insn *INSN, int MORE)
37619     This hook is executed by the scheduler after it has scheduled an
37620     insn from the ready list.  It should return the number of insns
37621     which can still be issued in the current cycle.  The default is
37622     'MORE - 1' for insns other than 'CLOBBER' and 'USE', which normally
37623     are not counted against the issue rate.  You should define this
37624     hook if some insns take more machine resources than others, so that
37625     fewer insns can follow them in the same cycle.  FILE is either a
37626     null pointer, or a stdio stream to write any debug output to.
37627     VERBOSE is the verbose level provided by '-fsched-verbose-N'.  INSN
37628     is the instruction that was scheduled.
37629
37630 -- Target Hook: int TARGET_SCHED_ADJUST_COST (rtx_insn *INSN, int
37631          DEP_TYPE1, rtx_insn *DEP_INSN, int COST, unsigned int DW)
37632     This function corrects the value of COST based on the relationship
37633     between INSN and DEP_INSN through a dependence of type dep_type,
37634     and strength DW.  It should return the new value.  The default is
37635     to make no adjustment to COST.  This can be used for example to
37636     specify to the scheduler using the traditional pipeline description
37637     that an output- or anti-dependence does not incur the same cost as
37638     a data-dependence.  If the scheduler using the automaton based
37639     pipeline description, the cost of anti-dependence is zero and the
37640     cost of output-dependence is maximum of one and the difference of
37641     latency times of the first and the second insns.  If these values
37642     are not acceptable, you could use the hook to modify them too.  See
37643     also *note Processor pipeline description::.
37644
37645 -- Target Hook: int TARGET_SCHED_ADJUST_PRIORITY (rtx_insn *INSN, int
37646          PRIORITY)
37647     This hook adjusts the integer scheduling priority PRIORITY of INSN.
37648     It should return the new priority.  Increase the priority to
37649     execute INSN earlier, reduce the priority to execute INSN later.
37650     Do not define this hook if you do not need to adjust the scheduling
37651     priorities of insns.
37652
37653 -- Target Hook: int TARGET_SCHED_REORDER (FILE *FILE, int VERBOSE,
37654          rtx_insn **READY, int *N_READYP, int CLOCK)
37655     This hook is executed by the scheduler after it has scheduled the
37656     ready list, to allow the machine description to reorder it (for
37657     example to combine two small instructions together on 'VLIW'
37658     machines).  FILE is either a null pointer, or a stdio stream to
37659     write any debug output to.  VERBOSE is the verbose level provided
37660     by '-fsched-verbose-N'.  READY is a pointer to the ready list of
37661     instructions that are ready to be scheduled.  N_READYP is a pointer
37662     to the number of elements in the ready list.  The scheduler reads
37663     the ready list in reverse order, starting with READY[*N_READYP - 1]
37664     and going to READY[0].  CLOCK is the timer tick of the scheduler.
37665     You may modify the ready list and the number of ready insns.  The
37666     return value is the number of insns that can issue this cycle;
37667     normally this is just 'issue_rate'.  See also
37668     'TARGET_SCHED_REORDER2'.
37669
37670 -- Target Hook: int TARGET_SCHED_REORDER2 (FILE *FILE, int VERBOSE,
37671          rtx_insn **READY, int *N_READYP, int CLOCK)
37672     Like 'TARGET_SCHED_REORDER', but called at a different time.  That
37673     function is called whenever the scheduler starts a new cycle.  This
37674     one is called once per iteration over a cycle, immediately after
37675     'TARGET_SCHED_VARIABLE_ISSUE'; it can reorder the ready list and
37676     return the number of insns to be scheduled in the same cycle.
37677     Defining this hook can be useful if there are frequent situations
37678     where scheduling one insn causes other insns to become ready in the
37679     same cycle.  These other insns can then be taken into account
37680     properly.
37681
37682 -- Target Hook: bool TARGET_SCHED_MACRO_FUSION_P (void)
37683     This hook is used to check whether target platform supports macro
37684     fusion.
37685
37686 -- Target Hook: bool TARGET_SCHED_MACRO_FUSION_PAIR_P (rtx_insn *PREV,
37687          rtx_insn *CURR)
37688     This hook is used to check whether two insns should be macro fused
37689     for a target microarchitecture.  If this hook returns true for the
37690     given insn pair (PREV and CURR), the scheduler will put them into a
37691     sched group, and they will not be scheduled apart.  The two insns
37692     will be either two SET insns or a compare and a conditional jump
37693     and this hook should validate any dependencies needed to fuse the
37694     two insns together.
37695
37696 -- Target Hook: void TARGET_SCHED_DEPENDENCIES_EVALUATION_HOOK
37697          (rtx_insn *HEAD, rtx_insn *TAIL)
37698     This hook is called after evaluation forward dependencies of insns
37699     in chain given by two parameter values (HEAD and TAIL
37700     correspondingly) but before insns scheduling of the insn chain.
37701     For example, it can be used for better insn classification if it
37702     requires analysis of dependencies.  This hook can use backward and
37703     forward dependencies of the insn scheduler because they are already
37704     calculated.
37705
37706 -- Target Hook: void TARGET_SCHED_INIT (FILE *FILE, int VERBOSE, int
37707          MAX_READY)
37708     This hook is executed by the scheduler at the beginning of each
37709     block of instructions that are to be scheduled.  FILE is either a
37710     null pointer, or a stdio stream to write any debug output to.
37711     VERBOSE is the verbose level provided by '-fsched-verbose-N'.
37712     MAX_READY is the maximum number of insns in the current scheduling
37713     region that can be live at the same time.  This can be used to
37714     allocate scratch space if it is needed, e.g. by
37715     'TARGET_SCHED_REORDER'.
37716
37717 -- Target Hook: void TARGET_SCHED_FINISH (FILE *FILE, int VERBOSE)
37718     This hook is executed by the scheduler at the end of each block of
37719     instructions that are to be scheduled.  It can be used to perform
37720     cleanup of any actions done by the other scheduling hooks.  FILE is
37721     either a null pointer, or a stdio stream to write any debug output
37722     to.  VERBOSE is the verbose level provided by '-fsched-verbose-N'.
37723
37724 -- Target Hook: void TARGET_SCHED_INIT_GLOBAL (FILE *FILE, int VERBOSE,
37725          int OLD_MAX_UID)
37726     This hook is executed by the scheduler after function level
37727     initializations.  FILE is either a null pointer, or a stdio stream
37728     to write any debug output to.  VERBOSE is the verbose level
37729     provided by '-fsched-verbose-N'.  OLD_MAX_UID is the maximum insn
37730     uid when scheduling begins.
37731
37732 -- Target Hook: void TARGET_SCHED_FINISH_GLOBAL (FILE *FILE, int
37733          VERBOSE)
37734     This is the cleanup hook corresponding to
37735     'TARGET_SCHED_INIT_GLOBAL'.  FILE is either a null pointer, or a
37736     stdio stream to write any debug output to.  VERBOSE is the verbose
37737     level provided by '-fsched-verbose-N'.
37738
37739 -- Target Hook: rtx TARGET_SCHED_DFA_PRE_CYCLE_INSN (void)
37740     The hook returns an RTL insn.  The automaton state used in the
37741     pipeline hazard recognizer is changed as if the insn were scheduled
37742     when the new simulated processor cycle starts.  Usage of the hook
37743     may simplify the automaton pipeline description for some VLIW
37744     processors.  If the hook is defined, it is used only for the
37745     automaton based pipeline description.  The default is not to change
37746     the state when the new simulated processor cycle starts.
37747
37748 -- Target Hook: void TARGET_SCHED_INIT_DFA_PRE_CYCLE_INSN (void)
37749     The hook can be used to initialize data used by the previous hook.
37750
37751 -- Target Hook: rtx_insn * TARGET_SCHED_DFA_POST_CYCLE_INSN (void)
37752     The hook is analogous to 'TARGET_SCHED_DFA_PRE_CYCLE_INSN' but used
37753     to changed the state as if the insn were scheduled when the new
37754     simulated processor cycle finishes.
37755
37756 -- Target Hook: void TARGET_SCHED_INIT_DFA_POST_CYCLE_INSN (void)
37757     The hook is analogous to 'TARGET_SCHED_INIT_DFA_PRE_CYCLE_INSN' but
37758     used to initialize data used by the previous hook.
37759
37760 -- Target Hook: void TARGET_SCHED_DFA_PRE_ADVANCE_CYCLE (void)
37761     The hook to notify target that the current simulated cycle is about
37762     to finish.  The hook is analogous to
37763     'TARGET_SCHED_DFA_PRE_CYCLE_INSN' but used to change the state in
37764     more complicated situations - e.g., when advancing state on a
37765     single insn is not enough.
37766
37767 -- Target Hook: void TARGET_SCHED_DFA_POST_ADVANCE_CYCLE (void)
37768     The hook to notify target that new simulated cycle has just
37769     started.  The hook is analogous to
37770     'TARGET_SCHED_DFA_POST_CYCLE_INSN' but used to change the state in
37771     more complicated situations - e.g., when advancing state on a
37772     single insn is not enough.
37773
37774 -- Target Hook: int TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD
37775          (void)
37776     This hook controls better choosing an insn from the ready insn
37777     queue for the DFA-based insn scheduler.  Usually the scheduler
37778     chooses the first insn from the queue.  If the hook returns a
37779     positive value, an additional scheduler code tries all permutations
37780     of 'TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD ()' subsequent
37781     ready insns to choose an insn whose issue will result in maximal
37782     number of issued insns on the same cycle.  For the VLIW processor,
37783     the code could actually solve the problem of packing simple insns
37784     into the VLIW insn.  Of course, if the rules of VLIW packing are
37785     described in the automaton.
37786
37787     This code also could be used for superscalar RISC processors.  Let
37788     us consider a superscalar RISC processor with 3 pipelines.  Some
37789     insns can be executed in pipelines A or B, some insns can be
37790     executed only in pipelines B or C, and one insn can be executed in
37791     pipeline B.  The processor may issue the 1st insn into A and the
37792     2nd one into B.  In this case, the 3rd insn will wait for freeing B
37793     until the next cycle.  If the scheduler issues the 3rd insn the
37794     first, the processor could issue all 3 insns per cycle.
37795
37796     Actually this code demonstrates advantages of the automaton based
37797     pipeline hazard recognizer.  We try quickly and easy many insn
37798     schedules to choose the best one.
37799
37800     The default is no multipass scheduling.
37801
37802 -- Target Hook: int
37803          TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD
37804          (rtx_insn *INSN, int READY_INDEX)
37805
37806     This hook controls what insns from the ready insn queue will be
37807     considered for the multipass insn scheduling.  If the hook returns
37808     zero for INSN, the insn will be considered in multipass scheduling.
37809     Positive return values will remove INSN from consideration on the
37810     current round of multipass scheduling.  Negative return values will
37811     remove INSN from consideration for given number of cycles.
37812     Backends should be careful about returning non-zero for highest
37813     priority instruction at position 0 in the ready list.  READY_INDEX
37814     is passed to allow backends make correct judgements.
37815
37816     The default is that any ready insns can be chosen to be issued.
37817
37818 -- Target Hook: void TARGET_SCHED_FIRST_CYCLE_MULTIPASS_BEGIN (void
37819          *DATA, signed char *READY_TRY, int N_READY, bool
37820          FIRST_CYCLE_INSN_P)
37821     This hook prepares the target backend for a new round of multipass
37822     scheduling.
37823
37824 -- Target Hook: void TARGET_SCHED_FIRST_CYCLE_MULTIPASS_ISSUE (void
37825          *DATA, signed char *READY_TRY, int N_READY, rtx_insn *INSN,
37826          const void *PREV_DATA)
37827     This hook is called when multipass scheduling evaluates instruction
37828     INSN.
37829
37830 -- Target Hook: void TARGET_SCHED_FIRST_CYCLE_MULTIPASS_BACKTRACK
37831          (const void *DATA, signed char *READY_TRY, int N_READY)
37832     This is called when multipass scheduling backtracks from evaluation
37833     of an instruction.
37834
37835 -- Target Hook: void TARGET_SCHED_FIRST_CYCLE_MULTIPASS_END (const void
37836          *DATA)
37837     This hook notifies the target about the result of the concluded
37838     current round of multipass scheduling.
37839
37840 -- Target Hook: void TARGET_SCHED_FIRST_CYCLE_MULTIPASS_INIT (void
37841          *DATA)
37842     This hook initializes target-specific data used in multipass
37843     scheduling.
37844
37845 -- Target Hook: void TARGET_SCHED_FIRST_CYCLE_MULTIPASS_FINI (void
37846          *DATA)
37847     This hook finalizes target-specific data used in multipass
37848     scheduling.
37849
37850 -- Target Hook: int TARGET_SCHED_DFA_NEW_CYCLE (FILE *DUMP, int
37851          VERBOSE, rtx_insn *INSN, int LAST_CLOCK, int CLOCK, int
37852          *SORT_P)
37853     This hook is called by the insn scheduler before issuing INSN on
37854     cycle CLOCK.  If the hook returns nonzero, INSN is not issued on
37855     this processor cycle.  Instead, the processor cycle is advanced.
37856     If *SORT_P is zero, the insn ready queue is not sorted on the new
37857     cycle start as usually.  DUMP and VERBOSE specify the file and
37858     verbosity level to use for debugging output.  LAST_CLOCK and CLOCK
37859     are, respectively, the processor cycle on which the previous insn
37860     has been issued, and the current processor cycle.
37861
37862 -- Target Hook: bool TARGET_SCHED_IS_COSTLY_DEPENDENCE (struct _dep
37863          *_DEP, int COST, int DISTANCE)
37864     This hook is used to define which dependences are considered costly
37865     by the target, so costly that it is not advisable to schedule the
37866     insns that are involved in the dependence too close to one another.
37867     The parameters to this hook are as follows: The first parameter
37868     _DEP is the dependence being evaluated.  The second parameter COST
37869     is the cost of the dependence as estimated by the scheduler, and
37870     the third parameter DISTANCE is the distance in cycles between the
37871     two insns.  The hook returns 'true' if considering the distance
37872     between the two insns the dependence between them is considered
37873     costly by the target, and 'false' otherwise.
37874
37875     Defining this hook can be useful in multiple-issue out-of-order
37876     machines, where (a) it's practically hopeless to predict the actual
37877     data/resource delays, however: (b) there's a better chance to
37878     predict the actual grouping that will be formed, and (c) correctly
37879     emulating the grouping can be very important.  In such targets one
37880     may want to allow issuing dependent insns closer to one
37881     another--i.e., closer than the dependence distance; however, not in
37882     cases of "costly dependences", which this hooks allows to define.
37883
37884 -- Target Hook: void TARGET_SCHED_H_I_D_EXTENDED (void)
37885     This hook is called by the insn scheduler after emitting a new
37886     instruction to the instruction stream.  The hook notifies a target
37887     backend to extend its per instruction data structures.
37888
37889 -- Target Hook: void * TARGET_SCHED_ALLOC_SCHED_CONTEXT (void)
37890     Return a pointer to a store large enough to hold target scheduling
37891     context.
37892
37893 -- Target Hook: void TARGET_SCHED_INIT_SCHED_CONTEXT (void *TC, bool
37894          CLEAN_P)
37895     Initialize store pointed to by TC to hold target scheduling
37896     context.  It CLEAN_P is true then initialize TC as if scheduler is
37897     at the beginning of the block.  Otherwise, copy the current context
37898     into TC.
37899
37900 -- Target Hook: void TARGET_SCHED_SET_SCHED_CONTEXT (void *TC)
37901     Copy target scheduling context pointed to by TC to the current
37902     context.
37903
37904 -- Target Hook: void TARGET_SCHED_CLEAR_SCHED_CONTEXT (void *TC)
37905     Deallocate internal data in target scheduling context pointed to by
37906     TC.
37907
37908 -- Target Hook: void TARGET_SCHED_FREE_SCHED_CONTEXT (void *TC)
37909     Deallocate a store for target scheduling context pointed to by TC.
37910
37911 -- Target Hook: int TARGET_SCHED_SPECULATE_INSN (rtx_insn *INSN,
37912          unsigned int DEP_STATUS, rtx *NEW_PAT)
37913     This hook is called by the insn scheduler when INSN has only
37914     speculative dependencies and therefore can be scheduled
37915     speculatively.  The hook is used to check if the pattern of INSN
37916     has a speculative version and, in case of successful check, to
37917     generate that speculative pattern.  The hook should return 1, if
37918     the instruction has a speculative form, or -1, if it doesn't.
37919     REQUEST describes the type of requested speculation.  If the return
37920     value equals 1 then NEW_PAT is assigned the generated speculative
37921     pattern.
37922
37923 -- Target Hook: bool TARGET_SCHED_NEEDS_BLOCK_P (unsigned int
37924          DEP_STATUS)
37925     This hook is called by the insn scheduler during generation of
37926     recovery code for INSN.  It should return 'true', if the
37927     corresponding check instruction should branch to recovery code, or
37928     'false' otherwise.
37929
37930 -- Target Hook: rtx TARGET_SCHED_GEN_SPEC_CHECK (rtx_insn *INSN,
37931          rtx_insn *LABEL, unsigned int DS)
37932     This hook is called by the insn scheduler to generate a pattern for
37933     recovery check instruction.  If MUTATE_P is zero, then INSN is a
37934     speculative instruction for which the check should be generated.
37935     LABEL is either a label of a basic block, where recovery code
37936     should be emitted, or a null pointer, when requested check doesn't
37937     branch to recovery code (a simple check).  If MUTATE_P is nonzero,
37938     then a pattern for a branchy check corresponding to a simple check
37939     denoted by INSN should be generated.  In this case LABEL can't be
37940     null.
37941
37942 -- Target Hook: void TARGET_SCHED_SET_SCHED_FLAGS (struct spec_info_def
37943          *SPEC_INFO)
37944     This hook is used by the insn scheduler to find out what features
37945     should be enabled/used.  The structure *SPEC_INFO should be filled
37946     in by the target.  The structure describes speculation types that
37947     can be used in the scheduler.
37948
37949 -- Target Hook: bool TARGET_SCHED_CAN_SPECULATE_INSN (rtx_insn *INSN)
37950     Some instructions should never be speculated by the schedulers,
37951     usually because the instruction is too expensive to get this wrong.
37952     Often such instructions have long latency, and often they are not
37953     fully modeled in the pipeline descriptions.  This hook should
37954     return 'false' if INSN should not be speculated.
37955
37956 -- Target Hook: int TARGET_SCHED_SMS_RES_MII (struct ddg *G)
37957     This hook is called by the swing modulo scheduler to calculate a
37958     resource-based lower bound which is based on the resources
37959     available in the machine and the resources required by each
37960     instruction.  The target backend can use G to calculate such bound.
37961     A very simple lower bound will be used in case this hook is not
37962     implemented: the total number of instructions divided by the issue
37963     rate.
37964
37965 -- Target Hook: bool TARGET_SCHED_DISPATCH (rtx_insn *INSN, int X)
37966     This hook is called by Haifa Scheduler.  It returns true if
37967     dispatch scheduling is supported in hardware and the condition
37968     specified in the parameter is true.
37969
37970 -- Target Hook: void TARGET_SCHED_DISPATCH_DO (rtx_insn *INSN, int X)
37971     This hook is called by Haifa Scheduler.  It performs the operation
37972     specified in its second parameter.
37973
37974 -- Target Hook: bool TARGET_SCHED_EXPOSED_PIPELINE
37975     True if the processor has an exposed pipeline, which means that not
37976     just the order of instructions is important for correctness when
37977     scheduling, but also the latencies of operations.
37978
37979 -- Target Hook: int TARGET_SCHED_REASSOCIATION_WIDTH (unsigned int OPC,
37980          machine_mode MODE)
37981     This hook is called by tree reassociator to determine a level of
37982     parallelism required in output calculations chain.
37983
37984 -- Target Hook: void TARGET_SCHED_FUSION_PRIORITY (rtx_insn *INSN, int
37985          MAX_PRI, int *FUSION_PRI, int *PRI)
37986     This hook is called by scheduling fusion pass.  It calculates
37987     fusion priorities for each instruction passed in by parameter.  The
37988     priorities are returned via pointer parameters.
37989
37990     INSN is the instruction whose priorities need to be calculated.
37991     MAX_PRI is the maximum priority can be returned in any cases.
37992     FUSION_PRI is the pointer parameter through which INSN's fusion
37993     priority should be calculated and returned.  PRI is the pointer
37994     parameter through which INSN's priority should be calculated and
37995     returned.
37996
37997     Same FUSION_PRI should be returned for instructions which should be
37998     scheduled together.  Different PRI should be returned for
37999     instructions with same FUSION_PRI.  FUSION_PRI is the major sort
38000     key, PRI is the minor sort key.  All instructions will be scheduled
38001     according to the two priorities.  All priorities calculated should
38002     be between 0 (exclusive) and MAX_PRI (inclusive).  To avoid false
38003     dependencies, FUSION_PRI of instructions which need to be scheduled
38004     together should be smaller than FUSION_PRI of irrelevant
38005     instructions.
38006
38007     Given below example:
38008
38009              ldr r10, [r1, 4]
38010              add r4, r4, r10
38011              ldr r15, [r2, 8]
38012              sub r5, r5, r15
38013              ldr r11, [r1, 0]
38014              add r4, r4, r11
38015              ldr r16, [r2, 12]
38016              sub r5, r5, r16
38017
38018     On targets like ARM/AArch64, the two pairs of consecutive loads
38019     should be merged.  Since peephole2 pass can't help in this case
38020     unless consecutive loads are actually next to each other in
38021     instruction flow.  That's where this scheduling fusion pass works.
38022     This hook calculates priority for each instruction based on its
38023     fustion type, like:
38024
38025              ldr r10, [r1, 4]  ; fusion_pri=99,  pri=96
38026              add r4, r4, r10   ; fusion_pri=100, pri=100
38027              ldr r15, [r2, 8]  ; fusion_pri=98,  pri=92
38028              sub r5, r5, r15   ; fusion_pri=100, pri=100
38029              ldr r11, [r1, 0]  ; fusion_pri=99,  pri=100
38030              add r4, r4, r11   ; fusion_pri=100, pri=100
38031              ldr r16, [r2, 12] ; fusion_pri=98,  pri=88
38032              sub r5, r5, r16   ; fusion_pri=100, pri=100
38033
38034     Scheduling fusion pass then sorts all ready to issue instructions
38035     according to the priorities.  As a result, instructions of same
38036     fusion type will be pushed together in instruction flow, like:
38037
38038              ldr r11, [r1, 0]
38039              ldr r10, [r1, 4]
38040              ldr r15, [r2, 8]
38041              ldr r16, [r2, 12]
38042              add r4, r4, r10
38043              sub r5, r5, r15
38044              add r4, r4, r11
38045              sub r5, r5, r16
38046
38047     Now peephole2 pass can simply merge the two pairs of loads.
38048
38049     Since scheduling fusion pass relies on peephole2 to do real fusion
38050     work, it is only enabled by default when peephole2 is in effect.
38051
38052     This is firstly introduced on ARM/AArch64 targets, please refer to
38053     the hook implementation for how different fusion types are
38054     supported.
38055
38056 -- Target Hook: void TARGET_EXPAND_DIVMOD_LIBFUNC (rtx LIBFUNC,
38057          machine_mode MODE, rtx OP0, rtx OP1, rtx *QUOT, rtx *REM)
38058     Define this hook for enabling divmod transform if the port does not
38059     have hardware divmod insn but defines target-specific divmod
38060     libfuncs.
38061
38062
38063File: gccint.info,  Node: Sections,  Next: PIC,  Prev: Scheduling,  Up: Target Macros
38064
3806518.18 Dividing the Output into Sections (Texts, Data, ...)
38066==========================================================
38067
38068An object file is divided into sections containing different types of
38069data.  In the most common case, there are three sections: the "text
38070section", which holds instructions and read-only data; the "data
38071section", which holds initialized writable data; and the "bss section",
38072which holds uninitialized data.  Some systems have other kinds of
38073sections.
38074
38075 'varasm.c' provides several well-known sections, such as
38076'text_section', 'data_section' and 'bss_section'.  The normal way of
38077controlling a 'FOO_section' variable is to define the associated
38078'FOO_SECTION_ASM_OP' macro, as described below.  The macros are only
38079read once, when 'varasm.c' initializes itself, so their values must be
38080run-time constants.  They may however depend on command-line flags.
38081
38082 _Note:_ Some run-time files, such 'crtstuff.c', also make use of the
38083'FOO_SECTION_ASM_OP' macros, and expect them to be string literals.
38084
38085 Some assemblers require a different string to be written every time a
38086section is selected.  If your assembler falls into this category, you
38087should define the 'TARGET_ASM_INIT_SECTIONS' hook and use
38088'get_unnamed_section' to set up the sections.
38089
38090 You must always create a 'text_section', either by defining
38091'TEXT_SECTION_ASM_OP' or by initializing 'text_section' in
38092'TARGET_ASM_INIT_SECTIONS'.  The same is true of 'data_section' and
38093'DATA_SECTION_ASM_OP'.  If you do not create a distinct
38094'readonly_data_section', the default is to reuse 'text_section'.
38095
38096 All the other 'varasm.c' sections are optional, and are null if the
38097target does not provide them.
38098
38099 -- Macro: TEXT_SECTION_ASM_OP
38100     A C expression whose value is a string, including spacing,
38101     containing the assembler operation that should precede instructions
38102     and read-only data.  Normally '"\t.text"' is right.
38103
38104 -- Macro: HOT_TEXT_SECTION_NAME
38105     If defined, a C string constant for the name of the section
38106     containing most frequently executed functions of the program.  If
38107     not defined, GCC will provide a default definition if the target
38108     supports named sections.
38109
38110 -- Macro: UNLIKELY_EXECUTED_TEXT_SECTION_NAME
38111     If defined, a C string constant for the name of the section
38112     containing unlikely executed functions in the program.
38113
38114 -- Macro: DATA_SECTION_ASM_OP
38115     A C expression whose value is a string, including spacing,
38116     containing the assembler operation to identify the following data
38117     as writable initialized data.  Normally '"\t.data"' is right.
38118
38119 -- Macro: SDATA_SECTION_ASM_OP
38120     If defined, a C expression whose value is a string, including
38121     spacing, containing the assembler operation to identify the
38122     following data as initialized, writable small data.
38123
38124 -- Macro: READONLY_DATA_SECTION_ASM_OP
38125     A C expression whose value is a string, including spacing,
38126     containing the assembler operation to identify the following data
38127     as read-only initialized data.
38128
38129 -- Macro: BSS_SECTION_ASM_OP
38130     If defined, a C expression whose value is a string, including
38131     spacing, containing the assembler operation to identify the
38132     following data as uninitialized global data.  If not defined, and
38133     'ASM_OUTPUT_ALIGNED_BSS' not defined, uninitialized global data
38134     will be output in the data section if '-fno-common' is passed,
38135     otherwise 'ASM_OUTPUT_COMMON' will be used.
38136
38137 -- Macro: SBSS_SECTION_ASM_OP
38138     If defined, a C expression whose value is a string, including
38139     spacing, containing the assembler operation to identify the
38140     following data as uninitialized, writable small data.
38141
38142 -- Macro: TLS_COMMON_ASM_OP
38143     If defined, a C expression whose value is a string containing the
38144     assembler operation to identify the following data as thread-local
38145     common data.  The default is '".tls_common"'.
38146
38147 -- Macro: TLS_SECTION_ASM_FLAG
38148     If defined, a C expression whose value is a character constant
38149     containing the flag used to mark a section as a TLS section.  The
38150     default is ''T''.
38151
38152 -- Macro: INIT_SECTION_ASM_OP
38153     If defined, a C expression whose value is a string, including
38154     spacing, containing the assembler operation to identify the
38155     following data as initialization code.  If not defined, GCC will
38156     assume such a section does not exist.  This section has no
38157     corresponding 'init_section' variable; it is used entirely in
38158     runtime code.
38159
38160 -- Macro: FINI_SECTION_ASM_OP
38161     If defined, a C expression whose value is a string, including
38162     spacing, containing the assembler operation to identify the
38163     following data as finalization code.  If not defined, GCC will
38164     assume such a section does not exist.  This section has no
38165     corresponding 'fini_section' variable; it is used entirely in
38166     runtime code.
38167
38168 -- Macro: INIT_ARRAY_SECTION_ASM_OP
38169     If defined, a C expression whose value is a string, including
38170     spacing, containing the assembler operation to identify the
38171     following data as part of the '.init_array' (or equivalent)
38172     section.  If not defined, GCC will assume such a section does not
38173     exist.  Do not define both this macro and 'INIT_SECTION_ASM_OP'.
38174
38175 -- Macro: FINI_ARRAY_SECTION_ASM_OP
38176     If defined, a C expression whose value is a string, including
38177     spacing, containing the assembler operation to identify the
38178     following data as part of the '.fini_array' (or equivalent)
38179     section.  If not defined, GCC will assume such a section does not
38180     exist.  Do not define both this macro and 'FINI_SECTION_ASM_OP'.
38181
38182 -- Macro: MACH_DEP_SECTION_ASM_FLAG
38183     If defined, a C expression whose value is a character constant
38184     containing the flag used to mark a machine-dependent section.  This
38185     corresponds to the 'SECTION_MACH_DEP' section flag.
38186
38187 -- Macro: CRT_CALL_STATIC_FUNCTION (SECTION_OP, FUNCTION)
38188     If defined, an ASM statement that switches to a different section
38189     via SECTION_OP, calls FUNCTION, and switches back to the text
38190     section.  This is used in 'crtstuff.c' if 'INIT_SECTION_ASM_OP' or
38191     'FINI_SECTION_ASM_OP' to calls to initialization and finalization
38192     functions from the init and fini sections.  By default, this macro
38193     uses a simple function call.  Some ports need hand-crafted assembly
38194     code to avoid dependencies on registers initialized in the function
38195     prologue or to ensure that constant pools don't end up too far way
38196     in the text section.
38197
38198 -- Macro: TARGET_LIBGCC_SDATA_SECTION
38199     If defined, a string which names the section into which small
38200     variables defined in crtstuff and libgcc should go.  This is useful
38201     when the target has options for optimizing access to small data,
38202     and you want the crtstuff and libgcc routines to be conservative in
38203     what they expect of your application yet liberal in what your
38204     application expects.  For example, for targets with a '.sdata'
38205     section (like MIPS), you could compile crtstuff with '-G 0' so that
38206     it doesn't require small data support from your application, but
38207     use this macro to put small data into '.sdata' so that your
38208     application can access these variables whether it uses small data
38209     or not.
38210
38211 -- Macro: FORCE_CODE_SECTION_ALIGN
38212     If defined, an ASM statement that aligns a code section to some
38213     arbitrary boundary.  This is used to force all fragments of the
38214     '.init' and '.fini' sections to have to same alignment and thus
38215     prevent the linker from having to add any padding.
38216
38217 -- Macro: JUMP_TABLES_IN_TEXT_SECTION
38218     Define this macro to be an expression with a nonzero value if jump
38219     tables (for 'tablejump' insns) should be output in the text
38220     section, along with the assembler instructions.  Otherwise, the
38221     readonly data section is used.
38222
38223     This macro is irrelevant if there is no separate readonly data
38224     section.
38225
38226 -- Target Hook: void TARGET_ASM_INIT_SECTIONS (void)
38227     Define this hook if you need to do something special to set up the
38228     'varasm.c' sections, or if your target has some special sections of
38229     its own that you need to create.
38230
38231     GCC calls this hook after processing the command line, but before
38232     writing any assembly code, and before calling any of the
38233     section-returning hooks described below.
38234
38235 -- Target Hook: int TARGET_ASM_RELOC_RW_MASK (void)
38236     Return a mask describing how relocations should be treated when
38237     selecting sections.  Bit 1 should be set if global relocations
38238     should be placed in a read-write section; bit 0 should be set if
38239     local relocations should be placed in a read-write section.
38240
38241     The default version of this function returns 3 when '-fpic' is in
38242     effect, and 0 otherwise.  The hook is typically redefined when the
38243     target cannot support (some kinds of) dynamic relocations in
38244     read-only sections even in executables.
38245
38246 -- Target Hook: bool TARGET_ASM_GENERATE_PIC_ADDR_DIFF_VEC (void)
38247     Return true to generate ADDR_DIF_VEC table or false to generate
38248     ADDR_VEC table for jumps in case of -fPIC.
38249
38250     The default version of this function returns true if flag_pic
38251     equals true and false otherwise
38252
38253 -- Target Hook: section * TARGET_ASM_SELECT_SECTION (tree EXP, int
38254          RELOC, unsigned HOST_WIDE_INT ALIGN)
38255     Return the section into which EXP should be placed.  You can assume
38256     that EXP is either a 'VAR_DECL' node or a constant of some sort.
38257     RELOC indicates whether the initial value of EXP requires link-time
38258     relocations.  Bit 0 is set when variable contains local relocations
38259     only, while bit 1 is set for global relocations.  ALIGN is the
38260     constant alignment in bits.
38261
38262     The default version of this function takes care of putting
38263     read-only variables in 'readonly_data_section'.
38264
38265     See also USE_SELECT_SECTION_FOR_FUNCTIONS.
38266
38267 -- Macro: USE_SELECT_SECTION_FOR_FUNCTIONS
38268     Define this macro if you wish TARGET_ASM_SELECT_SECTION to be
38269     called for 'FUNCTION_DECL's as well as for variables and constants.
38270
38271     In the case of a 'FUNCTION_DECL', RELOC will be zero if the
38272     function has been determined to be likely to be called, and nonzero
38273     if it is unlikely to be called.
38274
38275 -- Target Hook: void TARGET_ASM_UNIQUE_SECTION (tree DECL, int RELOC)
38276     Build up a unique section name, expressed as a 'STRING_CST' node,
38277     and assign it to 'DECL_SECTION_NAME (DECL)'.  As with
38278     'TARGET_ASM_SELECT_SECTION', RELOC indicates whether the initial
38279     value of EXP requires link-time relocations.
38280
38281     The default version of this function appends the symbol name to the
38282     ELF section name that would normally be used for the symbol.  For
38283     example, the function 'foo' would be placed in '.text.foo'.
38284     Whatever the actual target object format, this is often good
38285     enough.
38286
38287 -- Target Hook: section * TARGET_ASM_FUNCTION_RODATA_SECTION (tree
38288          DECL)
38289     Return the readonly data section associated with 'DECL_SECTION_NAME
38290     (DECL)'.  The default version of this function selects
38291     '.gnu.linkonce.r.name' if the function's section is
38292     '.gnu.linkonce.t.name', '.rodata.name' if function is in
38293     '.text.name', and the normal readonly-data section otherwise.
38294
38295 -- Target Hook: const char * TARGET_ASM_MERGEABLE_RODATA_PREFIX
38296     Usually, the compiler uses the prefix '".rodata"' to construct
38297     section names for mergeable constant data.  Define this macro to
38298     override the string if a different section name should be used.
38299
38300 -- Target Hook: section * TARGET_ASM_TM_CLONE_TABLE_SECTION (void)
38301     Return the section that should be used for transactional memory
38302     clone tables.
38303
38304 -- Target Hook: section * TARGET_ASM_SELECT_RTX_SECTION (machine_mode
38305          MODE, rtx X, unsigned HOST_WIDE_INT ALIGN)
38306     Return the section into which a constant X, of mode MODE, should be
38307     placed.  You can assume that X is some kind of constant in RTL.
38308     The argument MODE is redundant except in the case of a 'const_int'
38309     rtx.  ALIGN is the constant alignment in bits.
38310
38311     The default version of this function takes care of putting symbolic
38312     constants in 'flag_pic' mode in 'data_section' and everything else
38313     in 'readonly_data_section'.
38314
38315 -- Target Hook: tree TARGET_MANGLE_DECL_ASSEMBLER_NAME (tree DECL, tree
38316          ID)
38317     Define this hook if you need to postprocess the assembler name
38318     generated by target-independent code.  The ID provided to this hook
38319     will be the computed name (e.g., the macro 'DECL_NAME' of the DECL
38320     in C, or the mangled name of the DECL in C++).  The return value of
38321     the hook is an 'IDENTIFIER_NODE' for the appropriate mangled name
38322     on your target system.  The default implementation of this hook
38323     just returns the ID provided.
38324
38325 -- Target Hook: void TARGET_ENCODE_SECTION_INFO (tree DECL, rtx RTL,
38326          int NEW_DECL_P)
38327     Define this hook if references to a symbol or a constant must be
38328     treated differently depending on something about the variable or
38329     function named by the symbol (such as what section it is in).
38330
38331     The hook is executed immediately after rtl has been created for
38332     DECL, which may be a variable or function declaration or an entry
38333     in the constant pool.  In either case, RTL is the rtl in question.
38334     Do _not_ use 'DECL_RTL (DECL)' in this hook; that field may not
38335     have been initialized yet.
38336
38337     In the case of a constant, it is safe to assume that the rtl is a
38338     'mem' whose address is a 'symbol_ref'.  Most decls will also have
38339     this form, but that is not guaranteed.  Global register variables,
38340     for instance, will have a 'reg' for their rtl.  (Normally the right
38341     thing to do with such unusual rtl is leave it alone.)
38342
38343     The NEW_DECL_P argument will be true if this is the first time that
38344     'TARGET_ENCODE_SECTION_INFO' has been invoked on this decl.  It
38345     will be false for subsequent invocations, which will happen for
38346     duplicate declarations.  Whether or not anything must be done for
38347     the duplicate declaration depends on whether the hook examines
38348     'DECL_ATTRIBUTES'.  NEW_DECL_P is always true when the hook is
38349     called for a constant.
38350
38351     The usual thing for this hook to do is to record flags in the
38352     'symbol_ref', using 'SYMBOL_REF_FLAG' or 'SYMBOL_REF_FLAGS'.
38353     Historically, the name string was modified if it was necessary to
38354     encode more than one bit of information, but this practice is now
38355     discouraged; use 'SYMBOL_REF_FLAGS'.
38356
38357     The default definition of this hook, 'default_encode_section_info'
38358     in 'varasm.c', sets a number of commonly-useful bits in
38359     'SYMBOL_REF_FLAGS'.  Check whether the default does what you need
38360     before overriding it.
38361
38362 -- Target Hook: const char * TARGET_STRIP_NAME_ENCODING (const char
38363          *NAME)
38364     Decode NAME and return the real name part, sans the characters that
38365     'TARGET_ENCODE_SECTION_INFO' may have added.
38366
38367 -- Target Hook: bool TARGET_IN_SMALL_DATA_P (const_tree EXP)
38368     Returns true if EXP should be placed into a "small data" section.
38369     The default version of this hook always returns false.
38370
38371 -- Target Hook: bool TARGET_HAVE_SRODATA_SECTION
38372     Contains the value true if the target places read-only "small data"
38373     into a separate section.  The default value is false.
38374
38375 -- Target Hook: bool TARGET_PROFILE_BEFORE_PROLOGUE (void)
38376     It returns true if target wants profile code emitted before
38377     prologue.
38378
38379     The default version of this hook use the target macro
38380     'PROFILE_BEFORE_PROLOGUE'.
38381
38382 -- Target Hook: bool TARGET_BINDS_LOCAL_P (const_tree EXP)
38383     Returns true if EXP names an object for which name resolution rules
38384     must resolve to the current "module" (dynamic shared library or
38385     executable image).
38386
38387     The default version of this hook implements the name resolution
38388     rules for ELF, which has a looser model of global name binding than
38389     other currently supported object file formats.
38390
38391 -- Target Hook: bool TARGET_HAVE_TLS
38392     Contains the value true if the target supports thread-local
38393     storage.  The default value is false.
38394
38395
38396File: gccint.info,  Node: PIC,  Next: Assembler Format,  Prev: Sections,  Up: Target Macros
38397
3839818.19 Position Independent Code
38399===============================
38400
38401This section describes macros that help implement generation of position
38402independent code.  Simply defining these macros is not enough to
38403generate valid PIC; you must also add support to the hook
38404'TARGET_LEGITIMATE_ADDRESS_P' and to the macro 'PRINT_OPERAND_ADDRESS',
38405as well as 'LEGITIMIZE_ADDRESS'.  You must modify the definition of
38406'movsi' to do something appropriate when the source operand contains a
38407symbolic address.  You may also need to alter the handling of switch
38408statements so that they use relative addresses.
38409
38410 -- Macro: PIC_OFFSET_TABLE_REGNUM
38411     The register number of the register used to address a table of
38412     static data addresses in memory.  In some cases this register is
38413     defined by a processor's "application binary interface" (ABI).
38414     When this macro is defined, RTL is generated for this register
38415     once, as with the stack pointer and frame pointer registers.  If
38416     this macro is not defined, it is up to the machine-dependent files
38417     to allocate such a register (if necessary).  Note that this
38418     register must be fixed when in use (e.g. when 'flag_pic' is true).
38419
38420 -- Macro: PIC_OFFSET_TABLE_REG_CALL_CLOBBERED
38421     A C expression that is nonzero if the register defined by
38422     'PIC_OFFSET_TABLE_REGNUM' is clobbered by calls.  If not defined,
38423     the default is zero.  Do not define this macro if
38424     'PIC_OFFSET_TABLE_REGNUM' is not defined.
38425
38426 -- Macro: LEGITIMATE_PIC_OPERAND_P (X)
38427     A C expression that is nonzero if X is a legitimate immediate
38428     operand on the target machine when generating position independent
38429     code.  You can assume that X satisfies 'CONSTANT_P', so you need
38430     not check this.  You can also assume FLAG_PIC is true, so you need
38431     not check it either.  You need not define this macro if all
38432     constants (including 'SYMBOL_REF') can be immediate operands when
38433     generating position independent code.
38434
38435
38436File: gccint.info,  Node: Assembler Format,  Next: Debugging Info,  Prev: PIC,  Up: Target Macros
38437
3843818.20 Defining the Output Assembler Language
38439============================================
38440
38441This section describes macros whose principal purpose is to describe how
38442to write instructions in assembler language--rather than what the
38443instructions do.
38444
38445* Menu:
38446
38447* File Framework::       Structural information for the assembler file.
38448* Data Output::          Output of constants (numbers, strings, addresses).
38449* Uninitialized Data::   Output of uninitialized variables.
38450* Label Output::         Output and generation of labels.
38451* Initialization::       General principles of initialization
38452                         and termination routines.
38453* Macros for Initialization::
38454                         Specific macros that control the handling of
38455                         initialization and termination routines.
38456* Instruction Output::   Output of actual instructions.
38457* Dispatch Tables::      Output of jump tables.
38458* Exception Region Output:: Output of exception region code.
38459* Alignment Output::     Pseudo ops for alignment and skipping data.
38460
38461
38462File: gccint.info,  Node: File Framework,  Next: Data Output,  Up: Assembler Format
38463
3846418.20.1 The Overall Framework of an Assembler File
38465--------------------------------------------------
38466
38467This describes the overall framework of an assembly file.
38468
38469 -- Target Hook: void TARGET_ASM_FILE_START (void)
38470     Output to 'asm_out_file' any text which the assembler expects to
38471     find at the beginning of a file.  The default behavior is
38472     controlled by two flags, documented below.  Unless your target's
38473     assembler is quite unusual, if you override the default, you should
38474     call 'default_file_start' at some point in your target hook.  This
38475     lets other target files rely on these variables.
38476
38477 -- Target Hook: bool TARGET_ASM_FILE_START_APP_OFF
38478     If this flag is true, the text of the macro 'ASM_APP_OFF' will be
38479     printed as the very first line in the assembly file, unless
38480     '-fverbose-asm' is in effect.  (If that macro has been defined to
38481     the empty string, this variable has no effect.)  With the normal
38482     definition of 'ASM_APP_OFF', the effect is to notify the GNU
38483     assembler that it need not bother stripping comments or extra
38484     whitespace from its input.  This allows it to work a bit faster.
38485
38486     The default is false.  You should not set it to true unless you
38487     have verified that your port does not generate any extra whitespace
38488     or comments that will cause GAS to issue errors in NO_APP mode.
38489
38490 -- Target Hook: bool TARGET_ASM_FILE_START_FILE_DIRECTIVE
38491     If this flag is true, 'output_file_directive' will be called for
38492     the primary source file, immediately after printing 'ASM_APP_OFF'
38493     (if that is enabled).  Most ELF assemblers expect this to be done.
38494     The default is false.
38495
38496 -- Target Hook: void TARGET_ASM_FILE_END (void)
38497     Output to 'asm_out_file' any text which the assembler expects to
38498     find at the end of a file.  The default is to output nothing.
38499
38500 -- Function: void file_end_indicate_exec_stack ()
38501     Some systems use a common convention, the '.note.GNU-stack' special
38502     section, to indicate whether or not an object file relies on the
38503     stack being executable.  If your system uses this convention, you
38504     should define 'TARGET_ASM_FILE_END' to this function.  If you need
38505     to do other things in that hook, have your hook function call this
38506     function.
38507
38508 -- Target Hook: void TARGET_ASM_LTO_START (void)
38509     Output to 'asm_out_file' any text which the assembler expects to
38510     find at the start of an LTO section.  The default is to output
38511     nothing.
38512
38513 -- Target Hook: void TARGET_ASM_LTO_END (void)
38514     Output to 'asm_out_file' any text which the assembler expects to
38515     find at the end of an LTO section.  The default is to output
38516     nothing.
38517
38518 -- Target Hook: void TARGET_ASM_CODE_END (void)
38519     Output to 'asm_out_file' any text which is needed before emitting
38520     unwind info and debug info at the end of a file.  Some targets emit
38521     here PIC setup thunks that cannot be emitted at the end of file,
38522     because they couldn't have unwind info then.  The default is to
38523     output nothing.
38524
38525 -- Macro: ASM_COMMENT_START
38526     A C string constant describing how to begin a comment in the target
38527     assembler language.  The compiler assumes that the comment will end
38528     at the end of the line.
38529
38530 -- Macro: ASM_APP_ON
38531     A C string constant for text to be output before each 'asm'
38532     statement or group of consecutive ones.  Normally this is '"#APP"',
38533     which is a comment that has no effect on most assemblers but tells
38534     the GNU assembler that it must check the lines that follow for all
38535     valid assembler constructs.
38536
38537 -- Macro: ASM_APP_OFF
38538     A C string constant for text to be output after each 'asm'
38539     statement or group of consecutive ones.  Normally this is
38540     '"#NO_APP"', which tells the GNU assembler to resume making the
38541     time-saving assumptions that are valid for ordinary compiler
38542     output.
38543
38544 -- Macro: ASM_OUTPUT_SOURCE_FILENAME (STREAM, NAME)
38545     A C statement to output COFF information or DWARF debugging
38546     information which indicates that filename NAME is the current
38547     source file to the stdio stream STREAM.
38548
38549     This macro need not be defined if the standard form of output for
38550     the file format in use is appropriate.
38551
38552 -- Target Hook: void TARGET_ASM_OUTPUT_SOURCE_FILENAME (FILE *FILE,
38553          const char *NAME)
38554     Output DWARF debugging information which indicates that filename
38555     NAME is the current source file to the stdio stream FILE.
38556
38557     This target hook need not be defined if the standard form of output
38558     for the file format in use is appropriate.
38559
38560 -- Target Hook: void TARGET_ASM_OUTPUT_IDENT (const char *NAME)
38561     Output a string based on NAME, suitable for the '#ident' directive,
38562     or the equivalent directive or pragma in non-C-family languages.
38563     If this hook is not defined, nothing is output for the '#ident'
38564     directive.
38565
38566 -- Macro: OUTPUT_QUOTED_STRING (STREAM, STRING)
38567     A C statement to output the string STRING to the stdio stream
38568     STREAM.  If you do not call the function 'output_quoted_string' in
38569     your config files, GCC will only call it to output filenames to the
38570     assembler source.  So you can use it to canonicalize the format of
38571     the filename using this macro.
38572
38573 -- Target Hook: void TARGET_ASM_NAMED_SECTION (const char *NAME,
38574          unsigned int FLAGS, tree DECL)
38575     Output assembly directives to switch to section NAME.  The section
38576     should have attributes as specified by FLAGS, which is a bit mask
38577     of the 'SECTION_*' flags defined in 'output.h'.  If DECL is
38578     non-NULL, it is the 'VAR_DECL' or 'FUNCTION_DECL' with which this
38579     section is associated.
38580
38581 -- Target Hook: bool TARGET_ASM_ELF_FLAGS_NUMERIC (unsigned int FLAGS,
38582          unsigned int *NUM)
38583     This hook can be used to encode ELF section flags for which no
38584     letter code has been defined in the assembler.  It is called by
38585     'default_asm_named_section' whenever the section flags need to be
38586     emitted in the assembler output.  If the hook returns true, then
38587     the numerical value for ELF section flags should be calculated from
38588     FLAGS and saved in *NUM; the value is printed out instead of the
38589     normal sequence of letter codes.  If the hook is not defined, or if
38590     it returns false, then NUM is ignored and the traditional letter
38591     sequence is emitted.
38592
38593 -- Target Hook: section * TARGET_ASM_FUNCTION_SECTION (tree DECL, enum
38594          node_frequency FREQ, bool STARTUP, bool EXIT)
38595     Return preferred text (sub)section for function DECL.  Main purpose
38596     of this function is to separate cold, normal and hot functions.
38597     STARTUP is true when function is known to be used only at startup
38598     (from static constructors or it is 'main()').  EXIT is true when
38599     function is known to be used only at exit (from static
38600     destructors).  Return NULL if function should go to default text
38601     section.
38602
38603 -- Target Hook: void TARGET_ASM_FUNCTION_SWITCHED_TEXT_SECTIONS (FILE
38604          *FILE, tree DECL, bool NEW_IS_COLD)
38605     Used by the target to emit any assembler directives or additional
38606     labels needed when a function is partitioned between different
38607     sections.  Output should be written to FILE.  The function decl is
38608     available as DECL and the new section is 'cold' if NEW_IS_COLD is
38609     'true'.
38610
38611 -- Common Target Hook: bool TARGET_HAVE_NAMED_SECTIONS
38612     This flag is true if the target supports
38613     'TARGET_ASM_NAMED_SECTION'.  It must not be modified by
38614     command-line option processing.
38615
38616 -- Target Hook: bool TARGET_HAVE_SWITCHABLE_BSS_SECTIONS
38617     This flag is true if we can create zeroed data by switching to a
38618     BSS section and then using 'ASM_OUTPUT_SKIP' to allocate the space.
38619     This is true on most ELF targets.
38620
38621 -- Target Hook: unsigned int TARGET_SECTION_TYPE_FLAGS (tree DECL,
38622          const char *NAME, int RELOC)
38623     Choose a set of section attributes for use by
38624     'TARGET_ASM_NAMED_SECTION' based on a variable or function decl, a
38625     section name, and whether or not the declaration's initializer may
38626     contain runtime relocations.  DECL may be null, in which case
38627     read-write data should be assumed.
38628
38629     The default version of this function handles choosing code vs data,
38630     read-only vs read-write data, and 'flag_pic'.  You should only need
38631     to override this if your target has special flags that might be set
38632     via '__attribute__'.
38633
38634 -- Target Hook: int TARGET_ASM_RECORD_GCC_SWITCHES (print_switch_type
38635          TYPE, const char *TEXT)
38636     Provides the target with the ability to record the gcc command line
38637     switches that have been passed to the compiler, and options that
38638     are enabled.  The TYPE argument specifies what is being recorded.
38639     It can take the following values:
38640
38641     'SWITCH_TYPE_PASSED'
38642          TEXT is a command line switch that has been set by the user.
38643
38644     'SWITCH_TYPE_ENABLED'
38645          TEXT is an option which has been enabled.  This might be as a
38646          direct result of a command line switch, or because it is
38647          enabled by default or because it has been enabled as a side
38648          effect of a different command line switch.  For example, the
38649          '-O2' switch enables various different individual optimization
38650          passes.
38651
38652     'SWITCH_TYPE_DESCRIPTIVE'
38653          TEXT is either NULL or some descriptive text which should be
38654          ignored.  If TEXT is NULL then it is being used to warn the
38655          target hook that either recording is starting or ending.  The
38656          first time TYPE is SWITCH_TYPE_DESCRIPTIVE and TEXT is NULL,
38657          the warning is for start up and the second time the warning is
38658          for wind down.  This feature is to allow the target hook to
38659          make any necessary preparations before it starts to record
38660          switches and to perform any necessary tidying up after it has
38661          finished recording switches.
38662
38663     'SWITCH_TYPE_LINE_START'
38664          This option can be ignored by this target hook.
38665
38666     'SWITCH_TYPE_LINE_END'
38667          This option can be ignored by this target hook.
38668
38669     The hook's return value must be zero.  Other return values may be
38670     supported in the future.
38671
38672     By default this hook is set to NULL, but an example implementation
38673     is provided for ELF based targets.  Called ELF_RECORD_GCC_SWITCHES,
38674     it records the switches as ASCII text inside a new, string
38675     mergeable section in the assembler output file.  The name of the
38676     new section is provided by the
38677     'TARGET_ASM_RECORD_GCC_SWITCHES_SECTION' target hook.
38678
38679 -- Target Hook: const char * TARGET_ASM_RECORD_GCC_SWITCHES_SECTION
38680     This is the name of the section that will be created by the example
38681     ELF implementation of the 'TARGET_ASM_RECORD_GCC_SWITCHES' target
38682     hook.
38683
38684
38685File: gccint.info,  Node: Data Output,  Next: Uninitialized Data,  Prev: File Framework,  Up: Assembler Format
38686
3868718.20.2 Output of Data
38688----------------------
38689
38690 -- Target Hook: const char * TARGET_ASM_BYTE_OP
38691 -- Target Hook: const char * TARGET_ASM_ALIGNED_HI_OP
38692 -- Target Hook: const char * TARGET_ASM_ALIGNED_PSI_OP
38693 -- Target Hook: const char * TARGET_ASM_ALIGNED_SI_OP
38694 -- Target Hook: const char * TARGET_ASM_ALIGNED_PDI_OP
38695 -- Target Hook: const char * TARGET_ASM_ALIGNED_DI_OP
38696 -- Target Hook: const char * TARGET_ASM_ALIGNED_PTI_OP
38697 -- Target Hook: const char * TARGET_ASM_ALIGNED_TI_OP
38698 -- Target Hook: const char * TARGET_ASM_UNALIGNED_HI_OP
38699 -- Target Hook: const char * TARGET_ASM_UNALIGNED_PSI_OP
38700 -- Target Hook: const char * TARGET_ASM_UNALIGNED_SI_OP
38701 -- Target Hook: const char * TARGET_ASM_UNALIGNED_PDI_OP
38702 -- Target Hook: const char * TARGET_ASM_UNALIGNED_DI_OP
38703 -- Target Hook: const char * TARGET_ASM_UNALIGNED_PTI_OP
38704 -- Target Hook: const char * TARGET_ASM_UNALIGNED_TI_OP
38705     These hooks specify assembly directives for creating certain kinds
38706     of integer object.  The 'TARGET_ASM_BYTE_OP' directive creates a
38707     byte-sized object, the 'TARGET_ASM_ALIGNED_HI_OP' one creates an
38708     aligned two-byte object, and so on.  Any of the hooks may be
38709     'NULL', indicating that no suitable directive is available.
38710
38711     The compiler will print these strings at the start of a new line,
38712     followed immediately by the object's initial value.  In most cases,
38713     the string should contain a tab, a pseudo-op, and then another tab.
38714
38715 -- Target Hook: bool TARGET_ASM_INTEGER (rtx X, unsigned int SIZE, int
38716          ALIGNED_P)
38717     The 'assemble_integer' function uses this hook to output an integer
38718     object.  X is the object's value, SIZE is its size in bytes and
38719     ALIGNED_P indicates whether it is aligned.  The function should
38720     return 'true' if it was able to output the object.  If it returns
38721     false, 'assemble_integer' will try to split the object into smaller
38722     parts.
38723
38724     The default implementation of this hook will use the
38725     'TARGET_ASM_BYTE_OP' family of strings, returning 'false' when the
38726     relevant string is 'NULL'.
38727
38728 -- Target Hook: void TARGET_ASM_DECL_END (void)
38729     Define this hook if the target assembler requires a special marker
38730     to terminate an initialized variable declaration.
38731
38732 -- Target Hook: bool TARGET_ASM_OUTPUT_ADDR_CONST_EXTRA (FILE *FILE,
38733          rtx X)
38734     A target hook to recognize RTX patterns that 'output_addr_const'
38735     can't deal with, and output assembly code to FILE corresponding to
38736     the pattern X.  This may be used to allow machine-dependent
38737     'UNSPEC's to appear within constants.
38738
38739     If target hook fails to recognize a pattern, it must return
38740     'false', so that a standard error message is printed.  If it prints
38741     an error message itself, by calling, for example,
38742     'output_operand_lossage', it may just return 'true'.
38743
38744 -- Macro: ASM_OUTPUT_ASCII (STREAM, PTR, LEN)
38745     A C statement to output to the stdio stream STREAM an assembler
38746     instruction to assemble a string constant containing the LEN bytes
38747     at PTR.  PTR will be a C expression of type 'char *' and LEN a C
38748     expression of type 'int'.
38749
38750     If the assembler has a '.ascii' pseudo-op as found in the Berkeley
38751     Unix assembler, do not define the macro 'ASM_OUTPUT_ASCII'.
38752
38753 -- Macro: ASM_OUTPUT_FDESC (STREAM, DECL, N)
38754     A C statement to output word N of a function descriptor for DECL.
38755     This must be defined if 'TARGET_VTABLE_USES_DESCRIPTORS' is
38756     defined, and is otherwise unused.
38757
38758 -- Macro: CONSTANT_POOL_BEFORE_FUNCTION
38759     You may define this macro as a C expression.  You should define the
38760     expression to have a nonzero value if GCC should output the
38761     constant pool for a function before the code for the function, or a
38762     zero value if GCC should output the constant pool after the
38763     function.  If you do not define this macro, the usual case, GCC
38764     will output the constant pool before the function.
38765
38766 -- Macro: ASM_OUTPUT_POOL_PROLOGUE (FILE, FUNNAME, FUNDECL, SIZE)
38767     A C statement to output assembler commands to define the start of
38768     the constant pool for a function.  FUNNAME is a string giving the
38769     name of the function.  Should the return type of the function be
38770     required, it can be obtained via FUNDECL.  SIZE is the size, in
38771     bytes, of the constant pool that will be written immediately after
38772     this call.
38773
38774     If no constant-pool prefix is required, the usual case, this macro
38775     need not be defined.
38776
38777 -- Macro: ASM_OUTPUT_SPECIAL_POOL_ENTRY (FILE, X, MODE, ALIGN, LABELNO,
38778          JUMPTO)
38779     A C statement (with or without semicolon) to output a constant in
38780     the constant pool, if it needs special treatment.  (This macro need
38781     not do anything for RTL expressions that can be output normally.)
38782
38783     The argument FILE is the standard I/O stream to output the
38784     assembler code on.  X is the RTL expression for the constant to
38785     output, and MODE is the machine mode (in case X is a 'const_int').
38786     ALIGN is the required alignment for the value X; you should output
38787     an assembler directive to force this much alignment.
38788
38789     The argument LABELNO is a number to use in an internal label for
38790     the address of this pool entry.  The definition of this macro is
38791     responsible for outputting the label definition at the proper
38792     place.  Here is how to do this:
38793
38794          (*targetm.asm_out.internal_label) (FILE, "LC", LABELNO);
38795
38796     When you output a pool entry specially, you should end with a
38797     'goto' to the label JUMPTO.  This will prevent the same pool entry
38798     from being output a second time in the usual manner.
38799
38800     You need not define this macro if it would do nothing.
38801
38802 -- Macro: ASM_OUTPUT_POOL_EPILOGUE (FILE FUNNAME FUNDECL SIZE)
38803     A C statement to output assembler commands to at the end of the
38804     constant pool for a function.  FUNNAME is a string giving the name
38805     of the function.  Should the return type of the function be
38806     required, you can obtain it via FUNDECL.  SIZE is the size, in
38807     bytes, of the constant pool that GCC wrote immediately before this
38808     call.
38809
38810     If no constant-pool epilogue is required, the usual case, you need
38811     not define this macro.
38812
38813 -- Macro: IS_ASM_LOGICAL_LINE_SEPARATOR (C, STR)
38814     Define this macro as a C expression which is nonzero if C is used
38815     as a logical line separator by the assembler.  STR points to the
38816     position in the string where C was found; this can be used if a
38817     line separator uses multiple characters.
38818
38819     If you do not define this macro, the default is that only the
38820     character ';' is treated as a logical line separator.
38821
38822 -- Target Hook: const char * TARGET_ASM_OPEN_PAREN
38823 -- Target Hook: const char * TARGET_ASM_CLOSE_PAREN
38824     These target hooks are C string constants, describing the syntax in
38825     the assembler for grouping arithmetic expressions.  If not
38826     overridden, they default to normal parentheses, which is correct
38827     for most assemblers.
38828
38829 These macros are provided by 'real.h' for writing the definitions of
38830'ASM_OUTPUT_DOUBLE' and the like:
38831
38832 -- Macro: REAL_VALUE_TO_TARGET_SINGLE (X, L)
38833 -- Macro: REAL_VALUE_TO_TARGET_DOUBLE (X, L)
38834 -- Macro: REAL_VALUE_TO_TARGET_LONG_DOUBLE (X, L)
38835 -- Macro: REAL_VALUE_TO_TARGET_DECIMAL32 (X, L)
38836 -- Macro: REAL_VALUE_TO_TARGET_DECIMAL64 (X, L)
38837 -- Macro: REAL_VALUE_TO_TARGET_DECIMAL128 (X, L)
38838     These translate X, of type 'REAL_VALUE_TYPE', to the target's
38839     floating point representation, and store its bit pattern in the
38840     variable L.  For 'REAL_VALUE_TO_TARGET_SINGLE' and
38841     'REAL_VALUE_TO_TARGET_DECIMAL32', this variable should be a simple
38842     'long int'.  For the others, it should be an array of 'long int'.
38843     The number of elements in this array is determined by the size of
38844     the desired target floating point data type: 32 bits of it go in
38845     each 'long int' array element.  Each array element holds 32 bits of
38846     the result, even if 'long int' is wider than 32 bits on the host
38847     machine.
38848
38849     The array element values are designed so that you can print them
38850     out using 'fprintf' in the order they should appear in the target
38851     machine's memory.
38852
38853
38854File: gccint.info,  Node: Uninitialized Data,  Next: Label Output,  Prev: Data Output,  Up: Assembler Format
38855
3885618.20.3 Output of Uninitialized Variables
38857-----------------------------------------
38858
38859Each of the macros in this section is used to do the whole job of
38860outputting a single uninitialized variable.
38861
38862 -- Macro: ASM_OUTPUT_COMMON (STREAM, NAME, SIZE, ROUNDED)
38863     A C statement (sans semicolon) to output to the stdio stream STREAM
38864     the assembler definition of a common-label named NAME whose size is
38865     SIZE bytes.  The variable ROUNDED is the size rounded up to
38866     whatever alignment the caller wants.  It is possible that SIZE may
38867     be zero, for instance if a struct with no other member than a
38868     zero-length array is defined.  In this case, the backend must
38869     output a symbol definition that allocates at least one byte, both
38870     so that the address of the resulting object does not compare equal
38871     to any other, and because some object formats cannot even express
38872     the concept of a zero-sized common symbol, as that is how they
38873     represent an ordinary undefined external.
38874
38875     Use the expression 'assemble_name (STREAM, NAME)' to output the
38876     name itself; before and after that, output the additional assembler
38877     syntax for defining the name, and a newline.
38878
38879     This macro controls how the assembler definitions of uninitialized
38880     common global variables are output.
38881
38882 -- Macro: ASM_OUTPUT_ALIGNED_COMMON (STREAM, NAME, SIZE, ALIGNMENT)
38883     Like 'ASM_OUTPUT_COMMON' except takes the required alignment as a
38884     separate, explicit argument.  If you define this macro, it is used
38885     in place of 'ASM_OUTPUT_COMMON', and gives you more flexibility in
38886     handling the required alignment of the variable.  The alignment is
38887     specified as the number of bits.
38888
38889 -- Macro: ASM_OUTPUT_ALIGNED_DECL_COMMON (STREAM, DECL, NAME, SIZE,
38890          ALIGNMENT)
38891     Like 'ASM_OUTPUT_ALIGNED_COMMON' except that DECL of the variable
38892     to be output, if there is one, or 'NULL_TREE' if there is no
38893     corresponding variable.  If you define this macro, GCC will use it
38894     in place of both 'ASM_OUTPUT_COMMON' and
38895     'ASM_OUTPUT_ALIGNED_COMMON'.  Define this macro when you need to
38896     see the variable's decl in order to chose what to output.
38897
38898 -- Macro: ASM_OUTPUT_ALIGNED_BSS (STREAM, DECL, NAME, SIZE, ALIGNMENT)
38899     A C statement (sans semicolon) to output to the stdio stream STREAM
38900     the assembler definition of uninitialized global DECL named NAME
38901     whose size is SIZE bytes.  The variable ALIGNMENT is the alignment
38902     specified as the number of bits.
38903
38904     Try to use function 'asm_output_aligned_bss' defined in file
38905     'varasm.c' when defining this macro.  If unable, use the expression
38906     'assemble_name (STREAM, NAME)' to output the name itself; before
38907     and after that, output the additional assembler syntax for defining
38908     the name, and a newline.
38909
38910     There are two ways of handling global BSS.  One is to define this
38911     macro.  The other is to have 'TARGET_ASM_SELECT_SECTION' return a
38912     switchable BSS section (*note
38913     TARGET_HAVE_SWITCHABLE_BSS_SECTIONS::).  You do not need to do
38914     both.
38915
38916     Some languages do not have 'common' data, and require a non-common
38917     form of global BSS in order to handle uninitialized globals
38918     efficiently.  C++ is one example of this.  However, if the target
38919     does not support global BSS, the front end may choose to make
38920     globals common in order to save space in the object file.
38921
38922 -- Macro: ASM_OUTPUT_LOCAL (STREAM, NAME, SIZE, ROUNDED)
38923     A C statement (sans semicolon) to output to the stdio stream STREAM
38924     the assembler definition of a local-common-label named NAME whose
38925     size is SIZE bytes.  The variable ROUNDED is the size rounded up to
38926     whatever alignment the caller wants.
38927
38928     Use the expression 'assemble_name (STREAM, NAME)' to output the
38929     name itself; before and after that, output the additional assembler
38930     syntax for defining the name, and a newline.
38931
38932     This macro controls how the assembler definitions of uninitialized
38933     static variables are output.
38934
38935 -- Macro: ASM_OUTPUT_ALIGNED_LOCAL (STREAM, NAME, SIZE, ALIGNMENT)
38936     Like 'ASM_OUTPUT_LOCAL' except takes the required alignment as a
38937     separate, explicit argument.  If you define this macro, it is used
38938     in place of 'ASM_OUTPUT_LOCAL', and gives you more flexibility in
38939     handling the required alignment of the variable.  The alignment is
38940     specified as the number of bits.
38941
38942 -- Macro: ASM_OUTPUT_ALIGNED_DECL_LOCAL (STREAM, DECL, NAME, SIZE,
38943          ALIGNMENT)
38944     Like 'ASM_OUTPUT_ALIGNED_LOCAL' except that DECL of the variable to
38945     be output, if there is one, or 'NULL_TREE' if there is no
38946     corresponding variable.  If you define this macro, GCC will use it
38947     in place of both 'ASM_OUTPUT_LOCAL' and 'ASM_OUTPUT_ALIGNED_LOCAL'.
38948     Define this macro when you need to see the variable's decl in order
38949     to chose what to output.
38950
38951
38952File: gccint.info,  Node: Label Output,  Next: Initialization,  Prev: Uninitialized Data,  Up: Assembler Format
38953
3895418.20.4 Output and Generation of Labels
38955---------------------------------------
38956
38957This is about outputting labels.
38958
38959 -- Macro: ASM_OUTPUT_LABEL (STREAM, NAME)
38960     A C statement (sans semicolon) to output to the stdio stream STREAM
38961     the assembler definition of a label named NAME.  Use the expression
38962     'assemble_name (STREAM, NAME)' to output the name itself; before
38963     and after that, output the additional assembler syntax for defining
38964     the name, and a newline.  A default definition of this macro is
38965     provided which is correct for most systems.
38966
38967 -- Macro: ASM_OUTPUT_FUNCTION_LABEL (STREAM, NAME, DECL)
38968     A C statement (sans semicolon) to output to the stdio stream STREAM
38969     the assembler definition of a label named NAME of a function.  Use
38970     the expression 'assemble_name (STREAM, NAME)' to output the name
38971     itself; before and after that, output the additional assembler
38972     syntax for defining the name, and a newline.  A default definition
38973     of this macro is provided which is correct for most systems.
38974
38975     If this macro is not defined, then the function name is defined in
38976     the usual manner as a label (by means of 'ASM_OUTPUT_LABEL').
38977
38978 -- Macro: ASM_OUTPUT_INTERNAL_LABEL (STREAM, NAME)
38979     Identical to 'ASM_OUTPUT_LABEL', except that NAME is known to refer
38980     to a compiler-generated label.  The default definition uses
38981     'assemble_name_raw', which is like 'assemble_name' except that it
38982     is more efficient.
38983
38984 -- Macro: SIZE_ASM_OP
38985     A C string containing the appropriate assembler directive to
38986     specify the size of a symbol, without any arguments.  On systems
38987     that use ELF, the default (in 'config/elfos.h') is '"\t.size\t"';
38988     on other systems, the default is not to define this macro.
38989
38990     Define this macro only if it is correct to use the default
38991     definitions of 'ASM_OUTPUT_SIZE_DIRECTIVE' and
38992     'ASM_OUTPUT_MEASURED_SIZE' for your system.  If you need your own
38993     custom definitions of those macros, or if you do not need explicit
38994     symbol sizes at all, do not define this macro.
38995
38996 -- Macro: ASM_OUTPUT_SIZE_DIRECTIVE (STREAM, NAME, SIZE)
38997     A C statement (sans semicolon) to output to the stdio stream STREAM
38998     a directive telling the assembler that the size of the symbol NAME
38999     is SIZE.  SIZE is a 'HOST_WIDE_INT'.  If you define 'SIZE_ASM_OP',
39000     a default definition of this macro is provided.
39001
39002 -- Macro: ASM_OUTPUT_MEASURED_SIZE (STREAM, NAME)
39003     A C statement (sans semicolon) to output to the stdio stream STREAM
39004     a directive telling the assembler to calculate the size of the
39005     symbol NAME by subtracting its address from the current address.
39006
39007     If you define 'SIZE_ASM_OP', a default definition of this macro is
39008     provided.  The default assumes that the assembler recognizes a
39009     special '.' symbol as referring to the current address, and can
39010     calculate the difference between this and another symbol.  If your
39011     assembler does not recognize '.' or cannot do calculations with it,
39012     you will need to redefine 'ASM_OUTPUT_MEASURED_SIZE' to use some
39013     other technique.
39014
39015 -- Macro: NO_DOLLAR_IN_LABEL
39016     Define this macro if the assembler does not accept the character
39017     '$' in label names.  By default constructors and destructors in G++
39018     have '$' in the identifiers.  If this macro is defined, '.' is used
39019     instead.
39020
39021 -- Macro: NO_DOT_IN_LABEL
39022     Define this macro if the assembler does not accept the character
39023     '.' in label names.  By default constructors and destructors in G++
39024     have names that use '.'.  If this macro is defined, these names are
39025     rewritten to avoid '.'.
39026
39027 -- Macro: TYPE_ASM_OP
39028     A C string containing the appropriate assembler directive to
39029     specify the type of a symbol, without any arguments.  On systems
39030     that use ELF, the default (in 'config/elfos.h') is '"\t.type\t"';
39031     on other systems, the default is not to define this macro.
39032
39033     Define this macro only if it is correct to use the default
39034     definition of 'ASM_OUTPUT_TYPE_DIRECTIVE' for your system.  If you
39035     need your own custom definition of this macro, or if you do not
39036     need explicit symbol types at all, do not define this macro.
39037
39038 -- Macro: TYPE_OPERAND_FMT
39039     A C string which specifies (using 'printf' syntax) the format of
39040     the second operand to 'TYPE_ASM_OP'.  On systems that use ELF, the
39041     default (in 'config/elfos.h') is '"@%s"'; on other systems, the
39042     default is not to define this macro.
39043
39044     Define this macro only if it is correct to use the default
39045     definition of 'ASM_OUTPUT_TYPE_DIRECTIVE' for your system.  If you
39046     need your own custom definition of this macro, or if you do not
39047     need explicit symbol types at all, do not define this macro.
39048
39049 -- Macro: ASM_OUTPUT_TYPE_DIRECTIVE (STREAM, TYPE)
39050     A C statement (sans semicolon) to output to the stdio stream STREAM
39051     a directive telling the assembler that the type of the symbol NAME
39052     is TYPE.  TYPE is a C string; currently, that string is always
39053     either '"function"' or '"object"', but you should not count on
39054     this.
39055
39056     If you define 'TYPE_ASM_OP' and 'TYPE_OPERAND_FMT', a default
39057     definition of this macro is provided.
39058
39059 -- Macro: ASM_DECLARE_FUNCTION_NAME (STREAM, NAME, DECL)
39060     A C statement (sans semicolon) to output to the stdio stream STREAM
39061     any text necessary for declaring the name NAME of a function which
39062     is being defined.  This macro is responsible for outputting the
39063     label definition (perhaps using 'ASM_OUTPUT_FUNCTION_LABEL').  The
39064     argument DECL is the 'FUNCTION_DECL' tree node representing the
39065     function.
39066
39067     If this macro is not defined, then the function name is defined in
39068     the usual manner as a label (by means of
39069     'ASM_OUTPUT_FUNCTION_LABEL').
39070
39071     You may wish to use 'ASM_OUTPUT_TYPE_DIRECTIVE' in the definition
39072     of this macro.
39073
39074 -- Macro: ASM_DECLARE_FUNCTION_SIZE (STREAM, NAME, DECL)
39075     A C statement (sans semicolon) to output to the stdio stream STREAM
39076     any text necessary for declaring the size of a function which is
39077     being defined.  The argument NAME is the name of the function.  The
39078     argument DECL is the 'FUNCTION_DECL' tree node representing the
39079     function.
39080
39081     If this macro is not defined, then the function size is not
39082     defined.
39083
39084     You may wish to use 'ASM_OUTPUT_MEASURED_SIZE' in the definition of
39085     this macro.
39086
39087 -- Macro: ASM_DECLARE_COLD_FUNCTION_NAME (STREAM, NAME, DECL)
39088     A C statement (sans semicolon) to output to the stdio stream STREAM
39089     any text necessary for declaring the name NAME of a cold function
39090     partition which is being defined.  This macro is responsible for
39091     outputting the label definition (perhaps using
39092     'ASM_OUTPUT_FUNCTION_LABEL').  The argument DECL is the
39093     'FUNCTION_DECL' tree node representing the function.
39094
39095     If this macro is not defined, then the cold partition name is
39096     defined in the usual manner as a label (by means of
39097     'ASM_OUTPUT_LABEL').
39098
39099     You may wish to use 'ASM_OUTPUT_TYPE_DIRECTIVE' in the definition
39100     of this macro.
39101
39102 -- Macro: ASM_DECLARE_COLD_FUNCTION_SIZE (STREAM, NAME, DECL)
39103     A C statement (sans semicolon) to output to the stdio stream STREAM
39104     any text necessary for declaring the size of a cold function
39105     partition which is being defined.  The argument NAME is the name of
39106     the cold partition of the function.  The argument DECL is the
39107     'FUNCTION_DECL' tree node representing the function.
39108
39109     If this macro is not defined, then the partition size is not
39110     defined.
39111
39112     You may wish to use 'ASM_OUTPUT_MEASURED_SIZE' in the definition of
39113     this macro.
39114
39115 -- Macro: ASM_DECLARE_OBJECT_NAME (STREAM, NAME, DECL)
39116     A C statement (sans semicolon) to output to the stdio stream STREAM
39117     any text necessary for declaring the name NAME of an initialized
39118     variable which is being defined.  This macro must output the label
39119     definition (perhaps using 'ASM_OUTPUT_LABEL').  The argument DECL
39120     is the 'VAR_DECL' tree node representing the variable.
39121
39122     If this macro is not defined, then the variable name is defined in
39123     the usual manner as a label (by means of 'ASM_OUTPUT_LABEL').
39124
39125     You may wish to use 'ASM_OUTPUT_TYPE_DIRECTIVE' and/or
39126     'ASM_OUTPUT_SIZE_DIRECTIVE' in the definition of this macro.
39127
39128 -- Target Hook: void TARGET_ASM_DECLARE_CONSTANT_NAME (FILE *FILE,
39129          const char *NAME, const_tree EXPR, HOST_WIDE_INT SIZE)
39130     A target hook to output to the stdio stream FILE any text necessary
39131     for declaring the name NAME of a constant which is being defined.
39132     This target hook is responsible for outputting the label definition
39133     (perhaps using 'assemble_label').  The argument EXP is the value of
39134     the constant, and SIZE is the size of the constant in bytes.  The
39135     NAME will be an internal label.
39136
39137     The default version of this target hook, define the NAME in the
39138     usual manner as a label (by means of 'assemble_label').
39139
39140     You may wish to use 'ASM_OUTPUT_TYPE_DIRECTIVE' in this target
39141     hook.
39142
39143 -- Macro: ASM_DECLARE_REGISTER_GLOBAL (STREAM, DECL, REGNO, NAME)
39144     A C statement (sans semicolon) to output to the stdio stream STREAM
39145     any text necessary for claiming a register REGNO for a global
39146     variable DECL with name NAME.
39147
39148     If you don't define this macro, that is equivalent to defining it
39149     to do nothing.
39150
39151 -- Macro: ASM_FINISH_DECLARE_OBJECT (STREAM, DECL, TOPLEVEL, ATEND)
39152     A C statement (sans semicolon) to finish up declaring a variable
39153     name once the compiler has processed its initializer fully and thus
39154     has had a chance to determine the size of an array when controlled
39155     by an initializer.  This is used on systems where it's necessary to
39156     declare something about the size of the object.
39157
39158     If you don't define this macro, that is equivalent to defining it
39159     to do nothing.
39160
39161     You may wish to use 'ASM_OUTPUT_SIZE_DIRECTIVE' and/or
39162     'ASM_OUTPUT_MEASURED_SIZE' in the definition of this macro.
39163
39164 -- Target Hook: void TARGET_ASM_GLOBALIZE_LABEL (FILE *STREAM, const
39165          char *NAME)
39166     This target hook is a function to output to the stdio stream STREAM
39167     some commands that will make the label NAME global; that is,
39168     available for reference from other files.
39169
39170     The default implementation relies on a proper definition of
39171     'GLOBAL_ASM_OP'.
39172
39173 -- Target Hook: void TARGET_ASM_GLOBALIZE_DECL_NAME (FILE *STREAM, tree
39174          DECL)
39175     This target hook is a function to output to the stdio stream STREAM
39176     some commands that will make the name associated with DECL global;
39177     that is, available for reference from other files.
39178
39179     The default implementation uses the TARGET_ASM_GLOBALIZE_LABEL
39180     target hook.
39181
39182 -- Target Hook: void TARGET_ASM_ASSEMBLE_UNDEFINED_DECL (FILE *STREAM,
39183          const char *NAME, const_tree DECL)
39184     This target hook is a function to output to the stdio stream STREAM
39185     some commands that will declare the name associated with DECL which
39186     is not defined in the current translation unit.  Most assemblers do
39187     not require anything to be output in this case.
39188
39189 -- Macro: ASM_WEAKEN_LABEL (STREAM, NAME)
39190     A C statement (sans semicolon) to output to the stdio stream STREAM
39191     some commands that will make the label NAME weak; that is,
39192     available for reference from other files but only used if no other
39193     definition is available.  Use the expression 'assemble_name
39194     (STREAM, NAME)' to output the name itself; before and after that,
39195     output the additional assembler syntax for making that name weak,
39196     and a newline.
39197
39198     If you don't define this macro or 'ASM_WEAKEN_DECL', GCC will not
39199     support weak symbols and you should not define the 'SUPPORTS_WEAK'
39200     macro.
39201
39202 -- Macro: ASM_WEAKEN_DECL (STREAM, DECL, NAME, VALUE)
39203     Combines (and replaces) the function of 'ASM_WEAKEN_LABEL' and
39204     'ASM_OUTPUT_WEAK_ALIAS', allowing access to the associated function
39205     or variable decl.  If VALUE is not 'NULL', this C statement should
39206     output to the stdio stream STREAM assembler code which defines
39207     (equates) the weak symbol NAME to have the value VALUE.  If VALUE
39208     is 'NULL', it should output commands to make NAME weak.
39209
39210 -- Macro: ASM_OUTPUT_WEAKREF (STREAM, DECL, NAME, VALUE)
39211     Outputs a directive that enables NAME to be used to refer to symbol
39212     VALUE with weak-symbol semantics.  'decl' is the declaration of
39213     'name'.
39214
39215 -- Macro: SUPPORTS_WEAK
39216     A preprocessor constant expression which evaluates to true if the
39217     target supports weak symbols.
39218
39219     If you don't define this macro, 'defaults.h' provides a default
39220     definition.  If either 'ASM_WEAKEN_LABEL' or 'ASM_WEAKEN_DECL' is
39221     defined, the default definition is '1'; otherwise, it is '0'.
39222
39223 -- Macro: TARGET_SUPPORTS_WEAK
39224     A C expression which evaluates to true if the target supports weak
39225     symbols.
39226
39227     If you don't define this macro, 'defaults.h' provides a default
39228     definition.  The default definition is '(SUPPORTS_WEAK)'.  Define
39229     this macro if you want to control weak symbol support with a
39230     compiler flag such as '-melf'.
39231
39232 -- Macro: MAKE_DECL_ONE_ONLY (DECL)
39233     A C statement (sans semicolon) to mark DECL to be emitted as a
39234     public symbol such that extra copies in multiple translation units
39235     will be discarded by the linker.  Define this macro if your object
39236     file format provides support for this concept, such as the 'COMDAT'
39237     section flags in the Microsoft Windows PE/COFF format, and this
39238     support requires changes to DECL, such as putting it in a separate
39239     section.
39240
39241 -- Macro: SUPPORTS_ONE_ONLY
39242     A C expression which evaluates to true if the target supports
39243     one-only semantics.
39244
39245     If you don't define this macro, 'varasm.c' provides a default
39246     definition.  If 'MAKE_DECL_ONE_ONLY' is defined, the default
39247     definition is '1'; otherwise, it is '0'.  Define this macro if you
39248     want to control one-only symbol support with a compiler flag, or if
39249     setting the 'DECL_ONE_ONLY' flag is enough to mark a declaration to
39250     be emitted as one-only.
39251
39252 -- Target Hook: void TARGET_ASM_ASSEMBLE_VISIBILITY (tree DECL, int
39253          VISIBILITY)
39254     This target hook is a function to output to ASM_OUT_FILE some
39255     commands that will make the symbol(s) associated with DECL have
39256     hidden, protected or internal visibility as specified by
39257     VISIBILITY.
39258
39259 -- Macro: TARGET_WEAK_NOT_IN_ARCHIVE_TOC
39260     A C expression that evaluates to true if the target's linker
39261     expects that weak symbols do not appear in a static archive's table
39262     of contents.  The default is '0'.
39263
39264     Leaving weak symbols out of an archive's table of contents means
39265     that, if a symbol will only have a definition in one translation
39266     unit and will have undefined references from other translation
39267     units, that symbol should not be weak.  Defining this macro to be
39268     nonzero will thus have the effect that certain symbols that would
39269     normally be weak (explicit template instantiations, and vtables for
39270     polymorphic classes with noninline key methods) will instead be
39271     nonweak.
39272
39273     The C++ ABI requires this macro to be zero.  Define this macro for
39274     targets where full C++ ABI compliance is impossible and where
39275     linker restrictions require weak symbols to be left out of a static
39276     archive's table of contents.
39277
39278 -- Macro: ASM_OUTPUT_EXTERNAL (STREAM, DECL, NAME)
39279     A C statement (sans semicolon) to output to the stdio stream STREAM
39280     any text necessary for declaring the name of an external symbol
39281     named NAME which is referenced in this compilation but not defined.
39282     The value of DECL is the tree node for the declaration.
39283
39284     This macro need not be defined if it does not need to output
39285     anything.  The GNU assembler and most Unix assemblers don't require
39286     anything.
39287
39288 -- Target Hook: void TARGET_ASM_EXTERNAL_LIBCALL (rtx SYMREF)
39289     This target hook is a function to output to ASM_OUT_FILE an
39290     assembler pseudo-op to declare a library function name external.
39291     The name of the library function is given by SYMREF, which is a
39292     'symbol_ref'.
39293
39294 -- Target Hook: void TARGET_ASM_MARK_DECL_PRESERVED (const char
39295          *SYMBOL)
39296     This target hook is a function to output to ASM_OUT_FILE an
39297     assembler directive to annotate SYMBOL as used.  The Darwin target
39298     uses the .no_dead_code_strip directive.
39299
39300 -- Macro: ASM_OUTPUT_LABELREF (STREAM, NAME)
39301     A C statement (sans semicolon) to output to the stdio stream STREAM
39302     a reference in assembler syntax to a label named NAME.  This should
39303     add '_' to the front of the name, if that is customary on your
39304     operating system, as it is in most Berkeley Unix systems.  This
39305     macro is used in 'assemble_name'.
39306
39307 -- Target Hook: tree TARGET_MANGLE_ASSEMBLER_NAME (const char *NAME)
39308     Given a symbol NAME, perform same mangling as 'varasm.c''s
39309     'assemble_name', but in memory rather than to a file stream,
39310     returning result as an 'IDENTIFIER_NODE'.  Required for correct LTO
39311     symtabs.  The default implementation calls the
39312     'TARGET_STRIP_NAME_ENCODING' hook and then prepends the
39313     'USER_LABEL_PREFIX', if any.
39314
39315 -- Macro: ASM_OUTPUT_SYMBOL_REF (STREAM, SYM)
39316     A C statement (sans semicolon) to output a reference to
39317     'SYMBOL_REF' SYM.  If not defined, 'assemble_name' will be used to
39318     output the name of the symbol.  This macro may be used to modify
39319     the way a symbol is referenced depending on information encoded by
39320     'TARGET_ENCODE_SECTION_INFO'.
39321
39322 -- Macro: ASM_OUTPUT_LABEL_REF (STREAM, BUF)
39323     A C statement (sans semicolon) to output a reference to BUF, the
39324     result of 'ASM_GENERATE_INTERNAL_LABEL'.  If not defined,
39325     'assemble_name' will be used to output the name of the symbol.
39326     This macro is not used by 'output_asm_label', or the '%l' specifier
39327     that calls it; the intention is that this macro should be set when
39328     it is necessary to output a label differently when its address is
39329     being taken.
39330
39331 -- Target Hook: void TARGET_ASM_INTERNAL_LABEL (FILE *STREAM, const
39332          char *PREFIX, unsigned long LABELNO)
39333     A function to output to the stdio stream STREAM a label whose name
39334     is made from the string PREFIX and the number LABELNO.
39335
39336     It is absolutely essential that these labels be distinct from the
39337     labels used for user-level functions and variables.  Otherwise,
39338     certain programs will have name conflicts with internal labels.
39339
39340     It is desirable to exclude internal labels from the symbol table of
39341     the object file.  Most assemblers have a naming convention for
39342     labels that should be excluded; on many systems, the letter 'L' at
39343     the beginning of a label has this effect.  You should find out what
39344     convention your system uses, and follow it.
39345
39346     The default version of this function utilizes
39347     'ASM_GENERATE_INTERNAL_LABEL'.
39348
39349 -- Macro: ASM_OUTPUT_DEBUG_LABEL (STREAM, PREFIX, NUM)
39350     A C statement to output to the stdio stream STREAM a debug info
39351     label whose name is made from the string PREFIX and the number NUM.
39352     This is useful for VLIW targets, where debug info labels may need
39353     to be treated differently than branch target labels.  On some
39354     systems, branch target labels must be at the beginning of
39355     instruction bundles, but debug info labels can occur in the middle
39356     of instruction bundles.
39357
39358     If this macro is not defined, then
39359     '(*targetm.asm_out.internal_label)' will be used.
39360
39361 -- Macro: ASM_GENERATE_INTERNAL_LABEL (STRING, PREFIX, NUM)
39362     A C statement to store into the string STRING a label whose name is
39363     made from the string PREFIX and the number NUM.
39364
39365     This string, when output subsequently by 'assemble_name', should
39366     produce the output that '(*targetm.asm_out.internal_label)' would
39367     produce with the same PREFIX and NUM.
39368
39369     If the string begins with '*', then 'assemble_name' will output the
39370     rest of the string unchanged.  It is often convenient for
39371     'ASM_GENERATE_INTERNAL_LABEL' to use '*' in this way.  If the
39372     string doesn't start with '*', then 'ASM_OUTPUT_LABELREF' gets to
39373     output the string, and may change it.  (Of course,
39374     'ASM_OUTPUT_LABELREF' is also part of your machine description, so
39375     you should know what it does on your machine.)
39376
39377 -- Macro: ASM_FORMAT_PRIVATE_NAME (OUTVAR, NAME, NUMBER)
39378     A C expression to assign to OUTVAR (which is a variable of type
39379     'char *') a newly allocated string made from the string NAME and
39380     the number NUMBER, with some suitable punctuation added.  Use
39381     'alloca' to get space for the string.
39382
39383     The string will be used as an argument to 'ASM_OUTPUT_LABELREF' to
39384     produce an assembler label for an internal static variable whose
39385     name is NAME.  Therefore, the string must be such as to result in
39386     valid assembler code.  The argument NUMBER is different each time
39387     this macro is executed; it prevents conflicts between
39388     similarly-named internal static variables in different scopes.
39389
39390     Ideally this string should not be a valid C identifier, to prevent
39391     any conflict with the user's own symbols.  Most assemblers allow
39392     periods or percent signs in assembler symbols; putting at least one
39393     of these between the name and the number will suffice.
39394
39395     If this macro is not defined, a default definition will be provided
39396     which is correct for most systems.
39397
39398 -- Macro: ASM_OUTPUT_DEF (STREAM, NAME, VALUE)
39399     A C statement to output to the stdio stream STREAM assembler code
39400     which defines (equates) the symbol NAME to have the value VALUE.
39401
39402     If 'SET_ASM_OP' is defined, a default definition is provided which
39403     is correct for most systems.
39404
39405 -- Macro: ASM_OUTPUT_DEF_FROM_DECLS (STREAM, DECL_OF_NAME,
39406          DECL_OF_VALUE)
39407     A C statement to output to the stdio stream STREAM assembler code
39408     which defines (equates) the symbol whose tree node is DECL_OF_NAME
39409     to have the value of the tree node DECL_OF_VALUE.  This macro will
39410     be used in preference to 'ASM_OUTPUT_DEF' if it is defined and if
39411     the tree nodes are available.
39412
39413     If 'SET_ASM_OP' is defined, a default definition is provided which
39414     is correct for most systems.
39415
39416 -- Macro: TARGET_DEFERRED_OUTPUT_DEFS (DECL_OF_NAME, DECL_OF_VALUE)
39417     A C statement that evaluates to true if the assembler code which
39418     defines (equates) the symbol whose tree node is DECL_OF_NAME to
39419     have the value of the tree node DECL_OF_VALUE should be emitted
39420     near the end of the current compilation unit.  The default is to
39421     not defer output of defines.  This macro affects defines output by
39422     'ASM_OUTPUT_DEF' and 'ASM_OUTPUT_DEF_FROM_DECLS'.
39423
39424 -- Macro: ASM_OUTPUT_WEAK_ALIAS (STREAM, NAME, VALUE)
39425     A C statement to output to the stdio stream STREAM assembler code
39426     which defines (equates) the weak symbol NAME to have the value
39427     VALUE.  If VALUE is 'NULL', it defines NAME as an undefined weak
39428     symbol.
39429
39430     Define this macro if the target only supports weak aliases; define
39431     'ASM_OUTPUT_DEF' instead if possible.
39432
39433 -- Macro: OBJC_GEN_METHOD_LABEL (BUF, IS_INST, CLASS_NAME, CAT_NAME,
39434          SEL_NAME)
39435     Define this macro to override the default assembler names used for
39436     Objective-C methods.
39437
39438     The default name is a unique method number followed by the name of
39439     the class (e.g. '_1_Foo').  For methods in categories, the name of
39440     the category is also included in the assembler name (e.g.
39441     '_1_Foo_Bar').
39442
39443     These names are safe on most systems, but make debugging difficult
39444     since the method's selector is not present in the name.  Therefore,
39445     particular systems define other ways of computing names.
39446
39447     BUF is an expression of type 'char *' which gives you a buffer in
39448     which to store the name; its length is as long as CLASS_NAME,
39449     CAT_NAME and SEL_NAME put together, plus 50 characters extra.
39450
39451     The argument IS_INST specifies whether the method is an instance
39452     method or a class method; CLASS_NAME is the name of the class;
39453     CAT_NAME is the name of the category (or 'NULL' if the method is
39454     not in a category); and SEL_NAME is the name of the selector.
39455
39456     On systems where the assembler can handle quoted names, you can use
39457     this macro to provide more human-readable names.
39458
39459
39460File: gccint.info,  Node: Initialization,  Next: Macros for Initialization,  Prev: Label Output,  Up: Assembler Format
39461
3946218.20.5 How Initialization Functions Are Handled
39463------------------------------------------------
39464
39465The compiled code for certain languages includes "constructors" (also
39466called "initialization routines")--functions to initialize data in the
39467program when the program is started.  These functions need to be called
39468before the program is "started"--that is to say, before 'main' is
39469called.
39470
39471 Compiling some languages generates "destructors" (also called
39472"termination routines") that should be called when the program
39473terminates.
39474
39475 To make the initialization and termination functions work, the compiler
39476must output something in the assembler code to cause those functions to
39477be called at the appropriate time.  When you port the compiler to a new
39478system, you need to specify how to do this.
39479
39480 There are two major ways that GCC currently supports the execution of
39481initialization and termination functions.  Each way has two variants.
39482Much of the structure is common to all four variations.
39483
39484 The linker must build two lists of these functions--a list of
39485initialization functions, called '__CTOR_LIST__', and a list of
39486termination functions, called '__DTOR_LIST__'.
39487
39488 Each list always begins with an ignored function pointer (which may
39489hold 0, -1, or a count of the function pointers after it, depending on
39490the environment).  This is followed by a series of zero or more function
39491pointers to constructors (or destructors), followed by a function
39492pointer containing zero.
39493
39494 Depending on the operating system and its executable file format,
39495either 'crtstuff.c' or 'libgcc2.c' traverses these lists at startup time
39496and exit time.  Constructors are called in reverse order of the list;
39497destructors in forward order.
39498
39499 The best way to handle static constructors works only for object file
39500formats which provide arbitrarily-named sections.  A section is set
39501aside for a list of constructors, and another for a list of destructors.
39502Traditionally these are called '.ctors' and '.dtors'.  Each object file
39503that defines an initialization function also puts a word in the
39504constructor section to point to that function.  The linker accumulates
39505all these words into one contiguous '.ctors' section.  Termination
39506functions are handled similarly.
39507
39508 This method will be chosen as the default by 'target-def.h' if
39509'TARGET_ASM_NAMED_SECTION' is defined.  A target that does not support
39510arbitrary sections, but does support special designated constructor and
39511destructor sections may define 'CTORS_SECTION_ASM_OP' and
39512'DTORS_SECTION_ASM_OP' to achieve the same effect.
39513
39514 When arbitrary sections are available, there are two variants,
39515depending upon how the code in 'crtstuff.c' is called.  On systems that
39516support a ".init" section which is executed at program startup, parts of
39517'crtstuff.c' are compiled into that section.  The program is linked by
39518the 'gcc' driver like this:
39519
39520     ld -o OUTPUT_FILE crti.o crtbegin.o ... -lgcc crtend.o crtn.o
39521
39522 The prologue of a function ('__init') appears in the '.init' section of
39523'crti.o'; the epilogue appears in 'crtn.o'.  Likewise for the function
39524'__fini' in the ".fini" section.  Normally these files are provided by
39525the operating system or by the GNU C library, but are provided by GCC
39526for a few targets.
39527
39528 The objects 'crtbegin.o' and 'crtend.o' are (for most targets) compiled
39529from 'crtstuff.c'.  They contain, among other things, code fragments
39530within the '.init' and '.fini' sections that branch to routines in the
39531'.text' section.  The linker will pull all parts of a section together,
39532which results in a complete '__init' function that invokes the routines
39533we need at startup.
39534
39535 To use this variant, you must define the 'INIT_SECTION_ASM_OP' macro
39536properly.
39537
39538 If no init section is available, when GCC compiles any function called
39539'main' (or more accurately, any function designated as a program entry
39540point by the language front end calling 'expand_main_function'), it
39541inserts a procedure call to '__main' as the first executable code after
39542the function prologue.  The '__main' function is defined in 'libgcc2.c'
39543and runs the global constructors.
39544
39545 In file formats that don't support arbitrary sections, there are again
39546two variants.  In the simplest variant, the GNU linker (GNU 'ld') and an
39547'a.out' format must be used.  In this case, 'TARGET_ASM_CONSTRUCTOR' is
39548defined to produce a '.stabs' entry of type 'N_SETT', referencing the
39549name '__CTOR_LIST__', and with the address of the void function
39550containing the initialization code as its value.  The GNU linker
39551recognizes this as a request to add the value to a "set"; the values are
39552accumulated, and are eventually placed in the executable as a vector in
39553the format described above, with a leading (ignored) count and a
39554trailing zero element.  'TARGET_ASM_DESTRUCTOR' is handled similarly.
39555Since no init section is available, the absence of 'INIT_SECTION_ASM_OP'
39556causes the compilation of 'main' to call '__main' as above, starting the
39557initialization process.
39558
39559 The last variant uses neither arbitrary sections nor the GNU linker.
39560This is preferable when you want to do dynamic linking and when using
39561file formats which the GNU linker does not support, such as 'ECOFF'.  In
39562this case, 'TARGET_HAVE_CTORS_DTORS' is false, initialization and
39563termination functions are recognized simply by their names.  This
39564requires an extra program in the linkage step, called 'collect2'.  This
39565program pretends to be the linker, for use with GCC; it does its job by
39566running the ordinary linker, but also arranges to include the vectors of
39567initialization and termination functions.  These functions are called
39568via '__main' as described above.  In order to use this method,
39569'use_collect2' must be defined in the target in 'config.gcc'.
39570
39571 The following section describes the specific macros that control and
39572customize the handling of initialization and termination functions.
39573
39574
39575File: gccint.info,  Node: Macros for Initialization,  Next: Instruction Output,  Prev: Initialization,  Up: Assembler Format
39576
3957718.20.6 Macros Controlling Initialization Routines
39578--------------------------------------------------
39579
39580Here are the macros that control how the compiler handles initialization
39581and termination functions:
39582
39583 -- Macro: INIT_SECTION_ASM_OP
39584     If defined, a C string constant, including spacing, for the
39585     assembler operation to identify the following data as
39586     initialization code.  If not defined, GCC will assume such a
39587     section does not exist.  When you are using special sections for
39588     initialization and termination functions, this macro also controls
39589     how 'crtstuff.c' and 'libgcc2.c' arrange to run the initialization
39590     functions.
39591
39592 -- Macro: HAS_INIT_SECTION
39593     If defined, 'main' will not call '__main' as described above.  This
39594     macro should be defined for systems that control start-up code on a
39595     symbol-by-symbol basis, such as OSF/1, and should not be defined
39596     explicitly for systems that support 'INIT_SECTION_ASM_OP'.
39597
39598 -- Macro: LD_INIT_SWITCH
39599     If defined, a C string constant for a switch that tells the linker
39600     that the following symbol is an initialization routine.
39601
39602 -- Macro: LD_FINI_SWITCH
39603     If defined, a C string constant for a switch that tells the linker
39604     that the following symbol is a finalization routine.
39605
39606 -- Macro: COLLECT_SHARED_INIT_FUNC (STREAM, FUNC)
39607     If defined, a C statement that will write a function that can be
39608     automatically called when a shared library is loaded.  The function
39609     should call FUNC, which takes no arguments.  If not defined, and
39610     the object format requires an explicit initialization function,
39611     then a function called '_GLOBAL__DI' will be generated.
39612
39613     This function and the following one are used by collect2 when
39614     linking a shared library that needs constructors or destructors, or
39615     has DWARF2 exception tables embedded in the code.
39616
39617 -- Macro: COLLECT_SHARED_FINI_FUNC (STREAM, FUNC)
39618     If defined, a C statement that will write a function that can be
39619     automatically called when a shared library is unloaded.  The
39620     function should call FUNC, which takes no arguments.  If not
39621     defined, and the object format requires an explicit finalization
39622     function, then a function called '_GLOBAL__DD' will be generated.
39623
39624 -- Macro: INVOKE__main
39625     If defined, 'main' will call '__main' despite the presence of
39626     'INIT_SECTION_ASM_OP'.  This macro should be defined for systems
39627     where the init section is not actually run automatically, but is
39628     still useful for collecting the lists of constructors and
39629     destructors.
39630
39631 -- Macro: SUPPORTS_INIT_PRIORITY
39632     If nonzero, the C++ 'init_priority' attribute is supported and the
39633     compiler should emit instructions to control the order of
39634     initialization of objects.  If zero, the compiler will issue an
39635     error message upon encountering an 'init_priority' attribute.
39636
39637 -- Target Hook: bool TARGET_HAVE_CTORS_DTORS
39638     This value is true if the target supports some "native" method of
39639     collecting constructors and destructors to be run at startup and
39640     exit.  It is false if we must use 'collect2'.
39641
39642 -- Target Hook: void TARGET_ASM_CONSTRUCTOR (rtx SYMBOL, int PRIORITY)
39643     If defined, a function that outputs assembler code to arrange to
39644     call the function referenced by SYMBOL at initialization time.
39645
39646     Assume that SYMBOL is a 'SYMBOL_REF' for a function taking no
39647     arguments and with no return value.  If the target supports
39648     initialization priorities, PRIORITY is a value between 0 and
39649     'MAX_INIT_PRIORITY'; otherwise it must be 'DEFAULT_INIT_PRIORITY'.
39650
39651     If this macro is not defined by the target, a suitable default will
39652     be chosen if (1) the target supports arbitrary section names, (2)
39653     the target defines 'CTORS_SECTION_ASM_OP', or (3) 'USE_COLLECT2' is
39654     not defined.
39655
39656 -- Target Hook: void TARGET_ASM_DESTRUCTOR (rtx SYMBOL, int PRIORITY)
39657     This is like 'TARGET_ASM_CONSTRUCTOR' but used for termination
39658     functions rather than initialization functions.
39659
39660 If 'TARGET_HAVE_CTORS_DTORS' is true, the initialization routine
39661generated for the generated object file will have static linkage.
39662
39663 If your system uses 'collect2' as the means of processing constructors,
39664then that program normally uses 'nm' to scan an object file for
39665constructor functions to be called.
39666
39667 On certain kinds of systems, you can define this macro to make
39668'collect2' work faster (and, in some cases, make it work at all):
39669
39670 -- Macro: OBJECT_FORMAT_COFF
39671     Define this macro if the system uses COFF (Common Object File
39672     Format) object files, so that 'collect2' can assume this format and
39673     scan object files directly for dynamic constructor/destructor
39674     functions.
39675
39676     This macro is effective only in a native compiler; 'collect2' as
39677     part of a cross compiler always uses 'nm' for the target machine.
39678
39679 -- Macro: REAL_NM_FILE_NAME
39680     Define this macro as a C string constant containing the file name
39681     to use to execute 'nm'.  The default is to search the path normally
39682     for 'nm'.
39683
39684 -- Macro: NM_FLAGS
39685     'collect2' calls 'nm' to scan object files for static constructors
39686     and destructors and LTO info.  By default, '-n' is passed.  Define
39687     'NM_FLAGS' to a C string constant if other options are needed to
39688     get the same output format as GNU 'nm -n' produces.
39689
39690 If your system supports shared libraries and has a program to list the
39691dynamic dependencies of a given library or executable, you can define
39692these macros to enable support for running initialization and
39693termination functions in shared libraries:
39694
39695 -- Macro: LDD_SUFFIX
39696     Define this macro to a C string constant containing the name of the
39697     program which lists dynamic dependencies, like 'ldd' under SunOS 4.
39698
39699 -- Macro: PARSE_LDD_OUTPUT (PTR)
39700     Define this macro to be C code that extracts filenames from the
39701     output of the program denoted by 'LDD_SUFFIX'.  PTR is a variable
39702     of type 'char *' that points to the beginning of a line of output
39703     from 'LDD_SUFFIX'.  If the line lists a dynamic dependency, the
39704     code must advance PTR to the beginning of the filename on that
39705     line.  Otherwise, it must set PTR to 'NULL'.
39706
39707 -- Macro: SHLIB_SUFFIX
39708     Define this macro to a C string constant containing the default
39709     shared library extension of the target (e.g., '".so"').  'collect2'
39710     strips version information after this suffix when generating global
39711     constructor and destructor names.  This define is only needed on
39712     targets that use 'collect2' to process constructors and
39713     destructors.
39714
39715
39716File: gccint.info,  Node: Instruction Output,  Next: Dispatch Tables,  Prev: Macros for Initialization,  Up: Assembler Format
39717
3971818.20.7 Output of Assembler Instructions
39719----------------------------------------
39720
39721This describes assembler instruction output.
39722
39723 -- Macro: REGISTER_NAMES
39724     A C initializer containing the assembler's names for the machine
39725     registers, each one as a C string constant.  This is what
39726     translates register numbers in the compiler into assembler
39727     language.
39728
39729 -- Macro: ADDITIONAL_REGISTER_NAMES
39730     If defined, a C initializer for an array of structures containing a
39731     name and a register number.  This macro defines additional names
39732     for hard registers, thus allowing the 'asm' option in declarations
39733     to refer to registers using alternate names.
39734
39735 -- Macro: OVERLAPPING_REGISTER_NAMES
39736     If defined, a C initializer for an array of structures containing a
39737     name, a register number and a count of the number of consecutive
39738     machine registers the name overlaps.  This macro defines additional
39739     names for hard registers, thus allowing the 'asm' option in
39740     declarations to refer to registers using alternate names.  Unlike
39741     'ADDITIONAL_REGISTER_NAMES', this macro should be used when the
39742     register name implies multiple underlying registers.
39743
39744     This macro should be used when it is important that a clobber in an
39745     'asm' statement clobbers all the underlying values implied by the
39746     register name.  For example, on ARM, clobbering the
39747     double-precision VFP register "d0" implies clobbering both
39748     single-precision registers "s0" and "s1".
39749
39750 -- Macro: ASM_OUTPUT_OPCODE (STREAM, PTR)
39751     Define this macro if you are using an unusual assembler that
39752     requires different names for the machine instructions.
39753
39754     The definition is a C statement or statements which output an
39755     assembler instruction opcode to the stdio stream STREAM.  The
39756     macro-operand PTR is a variable of type 'char *' which points to
39757     the opcode name in its "internal" form--the form that is written in
39758     the machine description.  The definition should output the opcode
39759     name to STREAM, performing any translation you desire, and
39760     increment the variable PTR to point at the end of the opcode so
39761     that it will not be output twice.
39762
39763     In fact, your macro definition may process less than the entire
39764     opcode name, or more than the opcode name; but if you want to
39765     process text that includes '%'-sequences to substitute operands,
39766     you must take care of the substitution yourself.  Just be sure to
39767     increment PTR over whatever text should not be output normally.
39768
39769     If you need to look at the operand values, they can be found as the
39770     elements of 'recog_data.operand'.
39771
39772     If the macro definition does nothing, the instruction is output in
39773     the usual way.
39774
39775 -- Macro: FINAL_PRESCAN_INSN (INSN, OPVEC, NOPERANDS)
39776     If defined, a C statement to be executed just prior to the output
39777     of assembler code for INSN, to modify the extracted operands so
39778     they will be output differently.
39779
39780     Here the argument OPVEC is the vector containing the operands
39781     extracted from INSN, and NOPERANDS is the number of elements of the
39782     vector which contain meaningful data for this insn.  The contents
39783     of this vector are what will be used to convert the insn template
39784     into assembler code, so you can change the assembler output by
39785     changing the contents of the vector.
39786
39787     This macro is useful when various assembler syntaxes share a single
39788     file of instruction patterns; by defining this macro differently,
39789     you can cause a large class of instructions to be output
39790     differently (such as with rearranged operands).  Naturally,
39791     variations in assembler syntax affecting individual insn patterns
39792     ought to be handled by writing conditional output routines in those
39793     patterns.
39794
39795     If this macro is not defined, it is equivalent to a null statement.
39796
39797 -- Target Hook: void TARGET_ASM_FINAL_POSTSCAN_INSN (FILE *FILE,
39798          rtx_insn *INSN, rtx *OPVEC, int NOPERANDS)
39799     If defined, this target hook is a function which is executed just
39800     after the output of assembler code for INSN, to change the mode of
39801     the assembler if necessary.
39802
39803     Here the argument OPVEC is the vector containing the operands
39804     extracted from INSN, and NOPERANDS is the number of elements of the
39805     vector which contain meaningful data for this insn.  The contents
39806     of this vector are what was used to convert the insn template into
39807     assembler code, so you can change the assembler mode by checking
39808     the contents of the vector.
39809
39810 -- Macro: PRINT_OPERAND (STREAM, X, CODE)
39811     A C compound statement to output to stdio stream STREAM the
39812     assembler syntax for an instruction operand X.  X is an RTL
39813     expression.
39814
39815     CODE is a value that can be used to specify one of several ways of
39816     printing the operand.  It is used when identical operands must be
39817     printed differently depending on the context.  CODE comes from the
39818     '%' specification that was used to request printing of the operand.
39819     If the specification was just '%DIGIT' then CODE is 0; if the
39820     specification was '%LTR DIGIT' then CODE is the ASCII code for LTR.
39821
39822     If X is a register, this macro should print the register's name.
39823     The names can be found in an array 'reg_names' whose type is 'char
39824     *[]'.  'reg_names' is initialized from 'REGISTER_NAMES'.
39825
39826     When the machine description has a specification '%PUNCT' (a '%'
39827     followed by a punctuation character), this macro is called with a
39828     null pointer for X and the punctuation character for CODE.
39829
39830 -- Macro: PRINT_OPERAND_PUNCT_VALID_P (CODE)
39831     A C expression which evaluates to true if CODE is a valid
39832     punctuation character for use in the 'PRINT_OPERAND' macro.  If
39833     'PRINT_OPERAND_PUNCT_VALID_P' is not defined, it means that no
39834     punctuation characters (except for the standard one, '%') are used
39835     in this way.
39836
39837 -- Macro: PRINT_OPERAND_ADDRESS (STREAM, X)
39838     A C compound statement to output to stdio stream STREAM the
39839     assembler syntax for an instruction operand that is a memory
39840     reference whose address is X.  X is an RTL expression.
39841
39842     On some machines, the syntax for a symbolic address depends on the
39843     section that the address refers to.  On these machines, define the
39844     hook 'TARGET_ENCODE_SECTION_INFO' to store the information into the
39845     'symbol_ref', and then check for it here.  *Note Assembler
39846     Format::.
39847
39848 -- Macro: DBR_OUTPUT_SEQEND (FILE)
39849     A C statement, to be executed after all slot-filler instructions
39850     have been output.  If necessary, call 'dbr_sequence_length' to
39851     determine the number of slots filled in a sequence (zero if not
39852     currently outputting a sequence), to decide how many no-ops to
39853     output, or whatever.
39854
39855     Don't define this macro if it has nothing to do, but it is helpful
39856     in reading assembly output if the extent of the delay sequence is
39857     made explicit (e.g. with white space).
39858
39859 Note that output routines for instructions with delay slots must be
39860prepared to deal with not being output as part of a sequence (i.e. when
39861the scheduling pass is not run, or when no slot fillers could be found.)
39862The variable 'final_sequence' is null when not processing a sequence,
39863otherwise it contains the 'sequence' rtx being output.
39864
39865 -- Macro: REGISTER_PREFIX
39866 -- Macro: LOCAL_LABEL_PREFIX
39867 -- Macro: USER_LABEL_PREFIX
39868 -- Macro: IMMEDIATE_PREFIX
39869     If defined, C string expressions to be used for the '%R', '%L',
39870     '%U', and '%I' options of 'asm_fprintf' (see 'final.c').  These are
39871     useful when a single 'md' file must support multiple assembler
39872     formats.  In that case, the various 'tm.h' files can define these
39873     macros differently.
39874
39875 -- Macro: ASM_FPRINTF_EXTENSIONS (FILE, ARGPTR, FORMAT)
39876     If defined this macro should expand to a series of 'case'
39877     statements which will be parsed inside the 'switch' statement of
39878     the 'asm_fprintf' function.  This allows targets to define extra
39879     printf formats which may useful when generating their assembler
39880     statements.  Note that uppercase letters are reserved for future
39881     generic extensions to asm_fprintf, and so are not available to
39882     target specific code.  The output file is given by the parameter
39883     FILE.  The varargs input pointer is ARGPTR and the rest of the
39884     format string, starting the character after the one that is being
39885     switched upon, is pointed to by FORMAT.
39886
39887 -- Macro: ASSEMBLER_DIALECT
39888     If your target supports multiple dialects of assembler language
39889     (such as different opcodes), define this macro as a C expression
39890     that gives the numeric index of the assembler language dialect to
39891     use, with zero as the first variant.
39892
39893     If this macro is defined, you may use constructs of the form
39894          '{option0|option1|option2...}'
39895     in the output templates of patterns (*note Output Template::) or in
39896     the first argument of 'asm_fprintf'.  This construct outputs
39897     'option0', 'option1', 'option2', etc., if the value of
39898     'ASSEMBLER_DIALECT' is zero, one, two, etc.  Any special characters
39899     within these strings retain their usual meaning.  If there are
39900     fewer alternatives within the braces than the value of
39901     'ASSEMBLER_DIALECT', the construct outputs nothing.  If it's needed
39902     to print curly braces or '|' character in assembler output
39903     directly, '%{', '%}' and '%|' can be used.
39904
39905     If you do not define this macro, the characters '{', '|' and '}' do
39906     not have any special meaning when used in templates or operands to
39907     'asm_fprintf'.
39908
39909     Define the macros 'REGISTER_PREFIX', 'LOCAL_LABEL_PREFIX',
39910     'USER_LABEL_PREFIX' and 'IMMEDIATE_PREFIX' if you can express the
39911     variations in assembler language syntax with that mechanism.
39912     Define 'ASSEMBLER_DIALECT' and use the '{option0|option1}' syntax
39913     if the syntax variant are larger and involve such things as
39914     different opcodes or operand order.
39915
39916 -- Macro: ASM_OUTPUT_REG_PUSH (STREAM, REGNO)
39917     A C expression to output to STREAM some assembler code which will
39918     push hard register number REGNO onto the stack.  The code need not
39919     be optimal, since this macro is used only when profiling.
39920
39921 -- Macro: ASM_OUTPUT_REG_POP (STREAM, REGNO)
39922     A C expression to output to STREAM some assembler code which will
39923     pop hard register number REGNO off of the stack.  The code need not
39924     be optimal, since this macro is used only when profiling.
39925
39926
39927File: gccint.info,  Node: Dispatch Tables,  Next: Exception Region Output,  Prev: Instruction Output,  Up: Assembler Format
39928
3992918.20.8 Output of Dispatch Tables
39930---------------------------------
39931
39932This concerns dispatch tables.
39933
39934 -- Macro: ASM_OUTPUT_ADDR_DIFF_ELT (STREAM, BODY, VALUE, REL)
39935     A C statement to output to the stdio stream STREAM an assembler
39936     pseudo-instruction to generate a difference between two labels.
39937     VALUE and REL are the numbers of two internal labels.  The
39938     definitions of these labels are output using
39939     '(*targetm.asm_out.internal_label)', and they must be printed in
39940     the same way here.  For example,
39941
39942          fprintf (STREAM, "\t.word L%d-L%d\n",
39943                   VALUE, REL)
39944
39945     You must provide this macro on machines where the addresses in a
39946     dispatch table are relative to the table's own address.  If
39947     defined, GCC will also use this macro on all machines when
39948     producing PIC.  BODY is the body of the 'ADDR_DIFF_VEC'; it is
39949     provided so that the mode and flags can be read.
39950
39951 -- Macro: ASM_OUTPUT_ADDR_VEC_ELT (STREAM, VALUE)
39952     This macro should be provided on machines where the addresses in a
39953     dispatch table are absolute.
39954
39955     The definition should be a C statement to output to the stdio
39956     stream STREAM an assembler pseudo-instruction to generate a
39957     reference to a label.  VALUE is the number of an internal label
39958     whose definition is output using
39959     '(*targetm.asm_out.internal_label)'.  For example,
39960
39961          fprintf (STREAM, "\t.word L%d\n", VALUE)
39962
39963 -- Macro: ASM_OUTPUT_CASE_LABEL (STREAM, PREFIX, NUM, TABLE)
39964     Define this if the label before a jump-table needs to be output
39965     specially.  The first three arguments are the same as for
39966     '(*targetm.asm_out.internal_label)'; the fourth argument is the
39967     jump-table which follows (a 'jump_table_data' containing an
39968     'addr_vec' or 'addr_diff_vec').
39969
39970     This feature is used on system V to output a 'swbeg' statement for
39971     the table.
39972
39973     If this macro is not defined, these labels are output with
39974     '(*targetm.asm_out.internal_label)'.
39975
39976 -- Macro: ASM_OUTPUT_CASE_END (STREAM, NUM, TABLE)
39977     Define this if something special must be output at the end of a
39978     jump-table.  The definition should be a C statement to be executed
39979     after the assembler code for the table is written.  It should write
39980     the appropriate code to stdio stream STREAM.  The argument TABLE is
39981     the jump-table insn, and NUM is the label-number of the preceding
39982     label.
39983
39984     If this macro is not defined, nothing special is output at the end
39985     of the jump-table.
39986
39987 -- Target Hook: void TARGET_ASM_POST_CFI_STARTPROC (FILE *, TREE)
39988     This target hook is used to emit assembly strings required by the
39989     target after the .cfi_startproc directive.  The first argument is
39990     the file stream to write the strings to and the second argument is
39991     the function's declaration.  The expected use is to add more .cfi_*
39992     directives.
39993
39994     The default is to not output any assembly strings.
39995
39996 -- Target Hook: void TARGET_ASM_EMIT_UNWIND_LABEL (FILE *STREAM, tree
39997          DECL, int FOR_EH, int EMPTY)
39998     This target hook emits a label at the beginning of each FDE.  It
39999     should be defined on targets where FDEs need special labels, and it
40000     should write the appropriate label, for the FDE associated with the
40001     function declaration DECL, to the stdio stream STREAM.  The third
40002     argument, FOR_EH, is a boolean: true if this is for an exception
40003     table.  The fourth argument, EMPTY, is a boolean: true if this is a
40004     placeholder label for an omitted FDE.
40005
40006     The default is that FDEs are not given nonlocal labels.
40007
40008 -- Target Hook: void TARGET_ASM_EMIT_EXCEPT_TABLE_LABEL (FILE *STREAM)
40009     This target hook emits a label at the beginning of the exception
40010     table.  It should be defined on targets where it is desirable for
40011     the table to be broken up according to function.
40012
40013     The default is that no label is emitted.
40014
40015 -- Target Hook: void TARGET_ASM_EMIT_EXCEPT_PERSONALITY (rtx
40016          PERSONALITY)
40017     If the target implements 'TARGET_ASM_UNWIND_EMIT', this hook may be
40018     used to emit a directive to install a personality hook into the
40019     unwind info.  This hook should not be used if dwarf2 unwind info is
40020     used.
40021
40022 -- Target Hook: void TARGET_ASM_UNWIND_EMIT (FILE *STREAM, rtx_insn
40023          *INSN)
40024     This target hook emits assembly directives required to unwind the
40025     given instruction.  This is only used when
40026     'TARGET_EXCEPT_UNWIND_INFO' returns 'UI_TARGET'.
40027
40028 -- Target Hook: bool TARGET_ASM_UNWIND_EMIT_BEFORE_INSN
40029     True if the 'TARGET_ASM_UNWIND_EMIT' hook should be called before
40030     the assembly for INSN has been emitted, false if the hook should be
40031     called afterward.
40032
40033 -- Target Hook: bool TARGET_ASM_SHOULD_RESTORE_CFA_STATE (void)
40034     For DWARF-based unwind frames, two CFI instructions provide for
40035     save and restore of register state.  GCC maintains the current
40036     frame address (CFA) separately from the register bank but the
40037     unwinder in libgcc preserves this state along with the registers
40038     (and this is expected by the code that writes the unwind frames).
40039     This hook allows the target to specify that the CFA data is not
40040     saved/restored along with the registers by the target unwinder so
40041     that suitable additional instructions should be emitted to restore
40042     it.
40043
40044
40045File: gccint.info,  Node: Exception Region Output,  Next: Alignment Output,  Prev: Dispatch Tables,  Up: Assembler Format
40046
4004718.20.9 Assembler Commands for Exception Regions
40048------------------------------------------------
40049
40050This describes commands marking the start and the end of an exception
40051region.
40052
40053 -- Macro: EH_FRAME_SECTION_NAME
40054     If defined, a C string constant for the name of the section
40055     containing exception handling frame unwind information.  If not
40056     defined, GCC will provide a default definition if the target
40057     supports named sections.  'crtstuff.c' uses this macro to switch to
40058     the appropriate section.
40059
40060     You should define this symbol if your target supports DWARF 2 frame
40061     unwind information and the default definition does not work.
40062
40063 -- Macro: EH_FRAME_THROUGH_COLLECT2
40064     If defined, DWARF 2 frame unwind information will identified by
40065     specially named labels.  The collect2 process will locate these
40066     labels and generate code to register the frames.
40067
40068     This might be necessary, for instance, if the system linker will
40069     not place the eh_frames in-between the sentinals from 'crtstuff.c',
40070     or if the system linker does garbage collection and sections cannot
40071     be marked as not to be collected.
40072
40073 -- Macro: EH_TABLES_CAN_BE_READ_ONLY
40074     Define this macro to 1 if your target is such that no frame unwind
40075     information encoding used with non-PIC code will ever require a
40076     runtime relocation, but the linker may not support merging
40077     read-only and read-write sections into a single read-write section.
40078
40079 -- Macro: MASK_RETURN_ADDR
40080     An rtx used to mask the return address found via 'RETURN_ADDR_RTX',
40081     so that it does not contain any extraneous set bits in it.
40082
40083 -- Macro: DWARF2_UNWIND_INFO
40084     Define this macro to 0 if your target supports DWARF 2 frame unwind
40085     information, but it does not yet work with exception handling.
40086     Otherwise, if your target supports this information (if it defines
40087     'INCOMING_RETURN_ADDR_RTX' and 'OBJECT_FORMAT_ELF'), GCC will
40088     provide a default definition of 1.
40089
40090 -- Common Target Hook: enum unwind_info_type TARGET_EXCEPT_UNWIND_INFO
40091          (struct gcc_options *OPTS)
40092     This hook defines the mechanism that will be used for exception
40093     handling by the target.  If the target has ABI specified unwind
40094     tables, the hook should return 'UI_TARGET'.  If the target is to
40095     use the 'setjmp'/'longjmp'-based exception handling scheme, the
40096     hook should return 'UI_SJLJ'.  If the target supports DWARF 2 frame
40097     unwind information, the hook should return 'UI_DWARF2'.
40098
40099     A target may, if exceptions are disabled, choose to return
40100     'UI_NONE'.  This may end up simplifying other parts of
40101     target-specific code.  The default implementation of this hook
40102     never returns 'UI_NONE'.
40103
40104     Note that the value returned by this hook should be constant.  It
40105     should not depend on anything except the command-line switches
40106     described by OPTS.  In particular, the setting 'UI_SJLJ' must be
40107     fixed at compiler start-up as C pre-processor macros and builtin
40108     functions related to exception handling are set up depending on
40109     this setting.
40110
40111     The default implementation of the hook first honors the
40112     '--enable-sjlj-exceptions' configure option, then
40113     'DWARF2_UNWIND_INFO', and finally defaults to 'UI_SJLJ'.  If
40114     'DWARF2_UNWIND_INFO' depends on command-line options, the target
40115     must define this hook so that OPTS is used correctly.
40116
40117 -- Common Target Hook: bool TARGET_UNWIND_TABLES_DEFAULT
40118     This variable should be set to 'true' if the target ABI requires
40119     unwinding tables even when exceptions are not used.  It must not be
40120     modified by command-line option processing.
40121
40122 -- Macro: DONT_USE_BUILTIN_SETJMP
40123     Define this macro to 1 if the 'setjmp'/'longjmp'-based scheme
40124     should use the 'setjmp'/'longjmp' functions from the C library
40125     instead of the '__builtin_setjmp'/'__builtin_longjmp' machinery.
40126
40127 -- Macro: JMP_BUF_SIZE
40128     This macro has no effect unless 'DONT_USE_BUILTIN_SETJMP' is also
40129     defined.  Define this macro if the default size of 'jmp_buf' buffer
40130     for the 'setjmp'/'longjmp'-based exception handling mechanism is
40131     not large enough, or if it is much too large.  The default size is
40132     'FIRST_PSEUDO_REGISTER * sizeof(void *)'.
40133
40134 -- Macro: DWARF_CIE_DATA_ALIGNMENT
40135     This macro need only be defined if the target might save registers
40136     in the function prologue at an offset to the stack pointer that is
40137     not aligned to 'UNITS_PER_WORD'.  The definition should be the
40138     negative minimum alignment if 'STACK_GROWS_DOWNWARD' is true, and
40139     the positive minimum alignment otherwise.  *Note DWARF::.  Only
40140     applicable if the target supports DWARF 2 frame unwind information.
40141
40142 -- Target Hook: bool TARGET_TERMINATE_DW2_EH_FRAME_INFO
40143     Contains the value true if the target should add a zero word onto
40144     the end of a Dwarf-2 frame info section when used for exception
40145     handling.  Default value is false if 'EH_FRAME_SECTION_NAME' is
40146     defined, and true otherwise.
40147
40148 -- Target Hook: rtx TARGET_DWARF_REGISTER_SPAN (rtx REG)
40149     Given a register, this hook should return a parallel of registers
40150     to represent where to find the register pieces.  Define this hook
40151     if the register and its mode are represented in Dwarf in
40152     non-contiguous locations, or if the register should be represented
40153     in more than one register in Dwarf.  Otherwise, this hook should
40154     return 'NULL_RTX'.  If not defined, the default is to return
40155     'NULL_RTX'.
40156
40157 -- Target Hook: machine_mode TARGET_DWARF_FRAME_REG_MODE (int REGNO)
40158     Given a register, this hook should return the mode which the
40159     corresponding Dwarf frame register should have.  This is normally
40160     used to return a smaller mode than the raw mode to prevent call
40161     clobbered parts of a register altering the frame register size
40162
40163 -- Target Hook: void TARGET_INIT_DWARF_REG_SIZES_EXTRA (tree ADDRESS)
40164     If some registers are represented in Dwarf-2 unwind information in
40165     multiple pieces, define this hook to fill in information about the
40166     sizes of those pieces in the table used by the unwinder at runtime.
40167     It will be called by 'expand_builtin_init_dwarf_reg_sizes' after
40168     filling in a single size corresponding to each hard register;
40169     ADDRESS is the address of the table.
40170
40171 -- Target Hook: bool TARGET_ASM_TTYPE (rtx SYM)
40172     This hook is used to output a reference from a frame unwinding
40173     table to the type_info object identified by SYM.  It should return
40174     'true' if the reference was output.  Returning 'false' will cause
40175     the reference to be output using the normal Dwarf2 routines.
40176
40177 -- Target Hook: bool TARGET_ARM_EABI_UNWINDER
40178     This flag should be set to 'true' on targets that use an ARM EABI
40179     based unwinding library, and 'false' on other targets.  This
40180     effects the format of unwinding tables, and how the unwinder in
40181     entered after running a cleanup.  The default is 'false'.
40182
40183
40184File: gccint.info,  Node: Alignment Output,  Prev: Exception Region Output,  Up: Assembler Format
40185
4018618.20.10 Assembler Commands for Alignment
40187-----------------------------------------
40188
40189This describes commands for alignment.
40190
40191 -- Macro: JUMP_ALIGN (LABEL)
40192     The alignment (log base 2) to put in front of LABEL, which is a
40193     common destination of jumps and has no fallthru incoming edge.
40194
40195     This macro need not be defined if you don't want any special
40196     alignment to be done at such a time.  Most machine descriptions do
40197     not currently define the macro.
40198
40199     Unless it's necessary to inspect the LABEL parameter, it is better
40200     to set the variable ALIGN_JUMPS in the target's
40201     'TARGET_OPTION_OVERRIDE'.  Otherwise, you should try to honor the
40202     user's selection in ALIGN_JUMPS in a 'JUMP_ALIGN' implementation.
40203
40204 -- Macro: LABEL_ALIGN_AFTER_BARRIER (LABEL)
40205     The alignment (log base 2) to put in front of LABEL, which follows
40206     a 'BARRIER'.
40207
40208     This macro need not be defined if you don't want any special
40209     alignment to be done at such a time.  Most machine descriptions do
40210     not currently define the macro.
40211
40212 -- Macro: LOOP_ALIGN (LABEL)
40213     The alignment (log base 2) to put in front of LABEL that heads a
40214     frequently executed basic block (usually the header of a loop).
40215
40216     This macro need not be defined if you don't want any special
40217     alignment to be done at such a time.  Most machine descriptions do
40218     not currently define the macro.
40219
40220     Unless it's necessary to inspect the LABEL parameter, it is better
40221     to set the variable 'align_loops' in the target's
40222     'TARGET_OPTION_OVERRIDE'.  Otherwise, you should try to honor the
40223     user's selection in 'align_loops' in a 'LOOP_ALIGN' implementation.
40224
40225 -- Macro: LABEL_ALIGN (LABEL)
40226     The alignment (log base 2) to put in front of LABEL.  If
40227     'LABEL_ALIGN_AFTER_BARRIER' / 'LOOP_ALIGN' specify a different
40228     alignment, the maximum of the specified values is used.
40229
40230     Unless it's necessary to inspect the LABEL parameter, it is better
40231     to set the variable 'align_labels' in the target's
40232     'TARGET_OPTION_OVERRIDE'.  Otherwise, you should try to honor the
40233     user's selection in 'align_labels' in a 'LABEL_ALIGN'
40234     implementation.
40235
40236 -- Macro: ASM_OUTPUT_SKIP (STREAM, NBYTES)
40237     A C statement to output to the stdio stream STREAM an assembler
40238     instruction to advance the location counter by NBYTES bytes.  Those
40239     bytes should be zero when loaded.  NBYTES will be a C expression of
40240     type 'unsigned HOST_WIDE_INT'.
40241
40242 -- Macro: ASM_NO_SKIP_IN_TEXT
40243     Define this macro if 'ASM_OUTPUT_SKIP' should not be used in the
40244     text section because it fails to put zeros in the bytes that are
40245     skipped.  This is true on many Unix systems, where the pseudo-op to
40246     skip bytes produces no-op instructions rather than zeros when used
40247     in the text section.
40248
40249 -- Macro: ASM_OUTPUT_ALIGN (STREAM, POWER)
40250     A C statement to output to the stdio stream STREAM an assembler
40251     command to advance the location counter to a multiple of 2 to the
40252     POWER bytes.  POWER will be a C expression of type 'int'.
40253
40254 -- Macro: ASM_OUTPUT_ALIGN_WITH_NOP (STREAM, POWER)
40255     Like 'ASM_OUTPUT_ALIGN', except that the "nop" instruction is used
40256     for padding, if necessary.
40257
40258 -- Macro: ASM_OUTPUT_MAX_SKIP_ALIGN (STREAM, POWER, MAX_SKIP)
40259     A C statement to output to the stdio stream STREAM an assembler
40260     command to advance the location counter to a multiple of 2 to the
40261     POWER bytes, but only if MAX_SKIP or fewer bytes are needed to
40262     satisfy the alignment request.  POWER and MAX_SKIP will be a C
40263     expression of type 'int'.
40264
40265
40266File: gccint.info,  Node: Debugging Info,  Next: Floating Point,  Prev: Assembler Format,  Up: Target Macros
40267
4026818.21 Controlling Debugging Information Format
40269==============================================
40270
40271This describes how to specify debugging information.
40272
40273* Menu:
40274
40275* All Debuggers::      Macros that affect all debugging formats uniformly.
40276* DBX Options::        Macros enabling specific options in DBX format.
40277* DBX Hooks::          Hook macros for varying DBX format.
40278* File Names and DBX:: Macros controlling output of file names in DBX format.
40279* DWARF::              Macros for DWARF format.
40280* VMS Debug::          Macros for VMS debug format.
40281
40282
40283File: gccint.info,  Node: All Debuggers,  Next: DBX Options,  Up: Debugging Info
40284
4028518.21.1 Macros Affecting All Debugging Formats
40286----------------------------------------------
40287
40288These macros affect all debugging formats.
40289
40290 -- Macro: DBX_REGISTER_NUMBER (REGNO)
40291     A C expression that returns the DBX register number for the
40292     compiler register number REGNO.  In the default macro provided, the
40293     value of this expression will be REGNO itself.  But sometimes there
40294     are some registers that the compiler knows about and DBX does not,
40295     or vice versa.  In such cases, some register may need to have one
40296     number in the compiler and another for DBX.
40297
40298     If two registers have consecutive numbers inside GCC, and they can
40299     be used as a pair to hold a multiword value, then they _must_ have
40300     consecutive numbers after renumbering with 'DBX_REGISTER_NUMBER'.
40301     Otherwise, debuggers will be unable to access such a pair, because
40302     they expect register pairs to be consecutive in their own numbering
40303     scheme.
40304
40305     If you find yourself defining 'DBX_REGISTER_NUMBER' in way that
40306     does not preserve register pairs, then what you must do instead is
40307     redefine the actual register numbering scheme.
40308
40309 -- Macro: DEBUGGER_AUTO_OFFSET (X)
40310     A C expression that returns the integer offset value for an
40311     automatic variable having address X (an RTL expression).  The
40312     default computation assumes that X is based on the frame-pointer
40313     and gives the offset from the frame-pointer.  This is required for
40314     targets that produce debugging output for DBX and allow the
40315     frame-pointer to be eliminated when the '-g' option is used.
40316
40317 -- Macro: DEBUGGER_ARG_OFFSET (OFFSET, X)
40318     A C expression that returns the integer offset value for an
40319     argument having address X (an RTL expression).  The nominal offset
40320     is OFFSET.
40321
40322 -- Macro: PREFERRED_DEBUGGING_TYPE
40323     A C expression that returns the type of debugging output GCC should
40324     produce when the user specifies just '-g'.  Define this if you have
40325     arranged for GCC to support more than one format of debugging
40326     output.  Currently, the allowable values are 'DBX_DEBUG',
40327     'DWARF2_DEBUG', 'XCOFF_DEBUG', 'VMS_DEBUG', and
40328     'VMS_AND_DWARF2_DEBUG'.
40329
40330     When the user specifies '-ggdb', GCC normally also uses the value
40331     of this macro to select the debugging output format, but with two
40332     exceptions.  If 'DWARF2_DEBUGGING_INFO' is defined, GCC uses the
40333     value 'DWARF2_DEBUG'.  Otherwise, if 'DBX_DEBUGGING_INFO' is
40334     defined, GCC uses 'DBX_DEBUG'.
40335
40336     The value of this macro only affects the default debugging output;
40337     the user can always get a specific type of output by using
40338     '-gstabs', '-gdwarf-2', '-gxcoff', or '-gvms'.
40339
40340
40341File: gccint.info,  Node: DBX Options,  Next: DBX Hooks,  Prev: All Debuggers,  Up: Debugging Info
40342
4034318.21.2 Specific Options for DBX Output
40344---------------------------------------
40345
40346These are specific options for DBX output.
40347
40348 -- Macro: DBX_DEBUGGING_INFO
40349     Define this macro if GCC should produce debugging output for DBX in
40350     response to the '-g' option.
40351
40352 -- Macro: XCOFF_DEBUGGING_INFO
40353     Define this macro if GCC should produce XCOFF format debugging
40354     output in response to the '-g' option.  This is a variant of DBX
40355     format.
40356
40357 -- Macro: DEFAULT_GDB_EXTENSIONS
40358     Define this macro to control whether GCC should by default generate
40359     GDB's extended version of DBX debugging information (assuming
40360     DBX-format debugging information is enabled at all).  If you don't
40361     define the macro, the default is 1: always generate the extended
40362     information if there is any occasion to.
40363
40364 -- Macro: DEBUG_SYMS_TEXT
40365     Define this macro if all '.stabs' commands should be output while
40366     in the text section.
40367
40368 -- Macro: ASM_STABS_OP
40369     A C string constant, including spacing, naming the assembler pseudo
40370     op to use instead of '"\t.stabs\t"' to define an ordinary debugging
40371     symbol.  If you don't define this macro, '"\t.stabs\t"' is used.
40372     This macro applies only to DBX debugging information format.
40373
40374 -- Macro: ASM_STABD_OP
40375     A C string constant, including spacing, naming the assembler pseudo
40376     op to use instead of '"\t.stabd\t"' to define a debugging symbol
40377     whose value is the current location.  If you don't define this
40378     macro, '"\t.stabd\t"' is used.  This macro applies only to DBX
40379     debugging information format.
40380
40381 -- Macro: ASM_STABN_OP
40382     A C string constant, including spacing, naming the assembler pseudo
40383     op to use instead of '"\t.stabn\t"' to define a debugging symbol
40384     with no name.  If you don't define this macro, '"\t.stabn\t"' is
40385     used.  This macro applies only to DBX debugging information format.
40386
40387 -- Macro: DBX_NO_XREFS
40388     Define this macro if DBX on your system does not support the
40389     construct 'xsTAGNAME'.  On some systems, this construct is used to
40390     describe a forward reference to a structure named TAGNAME.  On
40391     other systems, this construct is not supported at all.
40392
40393 -- Macro: DBX_CONTIN_LENGTH
40394     A symbol name in DBX-format debugging information is normally
40395     continued (split into two separate '.stabs' directives) when it
40396     exceeds a certain length (by default, 80 characters).  On some
40397     operating systems, DBX requires this splitting; on others,
40398     splitting must not be done.  You can inhibit splitting by defining
40399     this macro with the value zero.  You can override the default
40400     splitting-length by defining this macro as an expression for the
40401     length you desire.
40402
40403 -- Macro: DBX_CONTIN_CHAR
40404     Normally continuation is indicated by adding a '\' character to the
40405     end of a '.stabs' string when a continuation follows.  To use a
40406     different character instead, define this macro as a character
40407     constant for the character you want to use.  Do not define this
40408     macro if backslash is correct for your system.
40409
40410 -- Macro: DBX_STATIC_STAB_DATA_SECTION
40411     Define this macro if it is necessary to go to the data section
40412     before outputting the '.stabs' pseudo-op for a non-global static
40413     variable.
40414
40415 -- Macro: DBX_TYPE_DECL_STABS_CODE
40416     The value to use in the "code" field of the '.stabs' directive for
40417     a typedef.  The default is 'N_LSYM'.
40418
40419 -- Macro: DBX_STATIC_CONST_VAR_CODE
40420     The value to use in the "code" field of the '.stabs' directive for
40421     a static variable located in the text section.  DBX format does not
40422     provide any "right" way to do this.  The default is 'N_FUN'.
40423
40424 -- Macro: DBX_REGPARM_STABS_CODE
40425     The value to use in the "code" field of the '.stabs' directive for
40426     a parameter passed in registers.  DBX format does not provide any
40427     "right" way to do this.  The default is 'N_RSYM'.
40428
40429 -- Macro: DBX_REGPARM_STABS_LETTER
40430     The letter to use in DBX symbol data to identify a symbol as a
40431     parameter passed in registers.  DBX format does not customarily
40432     provide any way to do this.  The default is ''P''.
40433
40434 -- Macro: DBX_FUNCTION_FIRST
40435     Define this macro if the DBX information for a function and its
40436     arguments should precede the assembler code for the function.
40437     Normally, in DBX format, the debugging information entirely follows
40438     the assembler code.
40439
40440 -- Macro: DBX_BLOCKS_FUNCTION_RELATIVE
40441     Define this macro, with value 1, if the value of a symbol
40442     describing the scope of a block ('N_LBRAC' or 'N_RBRAC') should be
40443     relative to the start of the enclosing function.  Normally, GCC
40444     uses an absolute address.
40445
40446 -- Macro: DBX_LINES_FUNCTION_RELATIVE
40447     Define this macro, with value 1, if the value of a symbol
40448     indicating the current line number ('N_SLINE') should be relative
40449     to the start of the enclosing function.  Normally, GCC uses an
40450     absolute address.
40451
40452 -- Macro: DBX_USE_BINCL
40453     Define this macro if GCC should generate 'N_BINCL' and 'N_EINCL'
40454     stabs for included header files, as on Sun systems.  This macro
40455     also directs GCC to output a type number as a pair of a file number
40456     and a type number within the file.  Normally, GCC does not generate
40457     'N_BINCL' or 'N_EINCL' stabs, and it outputs a single number for a
40458     type number.
40459
40460
40461File: gccint.info,  Node: DBX Hooks,  Next: File Names and DBX,  Prev: DBX Options,  Up: Debugging Info
40462
4046318.21.3 Open-Ended Hooks for DBX Format
40464---------------------------------------
40465
40466These are hooks for DBX format.
40467
40468 -- Macro: DBX_OUTPUT_SOURCE_LINE (STREAM, LINE, COUNTER)
40469     A C statement to output DBX debugging information before code for
40470     line number LINE of the current source file to the stdio stream
40471     STREAM.  COUNTER is the number of time the macro was invoked,
40472     including the current invocation; it is intended to generate unique
40473     labels in the assembly output.
40474
40475     This macro should not be defined if the default output is correct,
40476     or if it can be made correct by defining
40477     'DBX_LINES_FUNCTION_RELATIVE'.
40478
40479 -- Macro: NO_DBX_FUNCTION_END
40480     Some stabs encapsulation formats (in particular ECOFF), cannot
40481     handle the '.stabs "",N_FUN,,0,0,Lscope-function-1' gdb dbx
40482     extension construct.  On those machines, define this macro to turn
40483     this feature off without disturbing the rest of the gdb extensions.
40484
40485 -- Macro: NO_DBX_BNSYM_ENSYM
40486     Some assemblers cannot handle the '.stabd BNSYM/ENSYM,0,0' gdb dbx
40487     extension construct.  On those machines, define this macro to turn
40488     this feature off without disturbing the rest of the gdb extensions.
40489
40490
40491File: gccint.info,  Node: File Names and DBX,  Next: DWARF,  Prev: DBX Hooks,  Up: Debugging Info
40492
4049318.21.4 File Names in DBX Format
40494--------------------------------
40495
40496This describes file names in DBX format.
40497
40498 -- Macro: DBX_OUTPUT_MAIN_SOURCE_FILENAME (STREAM, NAME)
40499     A C statement to output DBX debugging information to the stdio
40500     stream STREAM, which indicates that file NAME is the main source
40501     file--the file specified as the input file for compilation.  This
40502     macro is called only once, at the beginning of compilation.
40503
40504     This macro need not be defined if the standard form of output for
40505     DBX debugging information is appropriate.
40506
40507     It may be necessary to refer to a label equal to the beginning of
40508     the text section.  You can use 'assemble_name (stream,
40509     ltext_label_name)' to do so.  If you do this, you must also set the
40510     variable USED_LTEXT_LABEL_NAME to 'true'.
40511
40512 -- Macro: NO_DBX_MAIN_SOURCE_DIRECTORY
40513     Define this macro, with value 1, if GCC should not emit an
40514     indication of the current directory for compilation and current
40515     source language at the beginning of the file.
40516
40517 -- Macro: NO_DBX_GCC_MARKER
40518     Define this macro, with value 1, if GCC should not emit an
40519     indication that this object file was compiled by GCC.  The default
40520     is to emit an 'N_OPT' stab at the beginning of every source file,
40521     with 'gcc2_compiled.' for the string and value 0.
40522
40523 -- Macro: DBX_OUTPUT_MAIN_SOURCE_FILE_END (STREAM, NAME)
40524     A C statement to output DBX debugging information at the end of
40525     compilation of the main source file NAME.  Output should be written
40526     to the stdio stream STREAM.
40527
40528     If you don't define this macro, nothing special is output at the
40529     end of compilation, which is correct for most machines.
40530
40531 -- Macro: DBX_OUTPUT_NULL_N_SO_AT_MAIN_SOURCE_FILE_END
40532     Define this macro _instead of_ defining
40533     'DBX_OUTPUT_MAIN_SOURCE_FILE_END', if what needs to be output at
40534     the end of compilation is an 'N_SO' stab with an empty string,
40535     whose value is the highest absolute text address in the file.
40536
40537
40538File: gccint.info,  Node: DWARF,  Next: VMS Debug,  Prev: File Names and DBX,  Up: Debugging Info
40539
4054018.21.5 Macros for DWARF Output
40541-------------------------------
40542
40543Here are macros for DWARF output.
40544
40545 -- Macro: DWARF2_DEBUGGING_INFO
40546     Define this macro if GCC should produce dwarf version 2 format
40547     debugging output in response to the '-g' option.
40548
40549      -- Target Hook: int TARGET_DWARF_CALLING_CONVENTION (const_tree
40550               FUNCTION)
40551          Define this to enable the dwarf attribute
40552          'DW_AT_calling_convention' to be emitted for each function.
40553          Instead of an integer return the enum value for the 'DW_CC_'
40554          tag.
40555
40556     To support optional call frame debugging information, you must also
40557     define 'INCOMING_RETURN_ADDR_RTX' and either set
40558     'RTX_FRAME_RELATED_P' on the prologue insns if you use RTL for the
40559     prologue, or call 'dwarf2out_def_cfa' and 'dwarf2out_reg_save' as
40560     appropriate from 'TARGET_ASM_FUNCTION_PROLOGUE' if you don't.
40561
40562 -- Macro: DWARF2_FRAME_INFO
40563     Define this macro to a nonzero value if GCC should always output
40564     Dwarf 2 frame information.  If 'TARGET_EXCEPT_UNWIND_INFO' (*note
40565     Exception Region Output::) returns 'UI_DWARF2', and exceptions are
40566     enabled, GCC will output this information not matter how you define
40567     'DWARF2_FRAME_INFO'.
40568
40569 -- Target Hook: enum unwind_info_type TARGET_DEBUG_UNWIND_INFO (void)
40570     This hook defines the mechanism that will be used for describing
40571     frame unwind information to the debugger.  Normally the hook will
40572     return 'UI_DWARF2' if DWARF 2 debug information is enabled, and
40573     return 'UI_NONE' otherwise.
40574
40575     A target may return 'UI_DWARF2' even when DWARF 2 debug information
40576     is disabled in order to always output DWARF 2 frame information.
40577
40578     A target may return 'UI_TARGET' if it has ABI specified unwind
40579     tables.  This will suppress generation of the normal debug frame
40580     unwind information.
40581
40582 -- Macro: DWARF2_ASM_LINE_DEBUG_INFO
40583     Define this macro to be a nonzero value if the assembler can
40584     generate Dwarf 2 line debug info sections.  This will result in
40585     much more compact line number tables, and hence is desirable if it
40586     works.
40587
40588 -- Macro: DWARF2_ASM_VIEW_DEBUG_INFO
40589     Define this macro to be a nonzero value if the assembler supports
40590     view assignment and verification in '.loc'.  If it does not, but
40591     the user enables location views, the compiler may have to fallback
40592     to internal line number tables.
40593
40594 -- Target Hook: int TARGET_RESET_LOCATION_VIEW (rtx_insn *)
40595     This hook, if defined, enables -ginternal-reset-location-views, and
40596     uses its result to override cases in which the estimated min insn
40597     length might be nonzero even when a PC advance (i.e., a view reset)
40598     cannot be taken for granted.
40599
40600     If the hook is defined, it must return a positive value to indicate
40601     the insn definitely advances the PC, and so the view number can be
40602     safely assumed to be reset; a negative value to mean the insn
40603     definitely does not advance the PC, and os the view number must not
40604     be reset; or zero to decide based on the estimated insn length.
40605
40606     If insn length is to be regarded as reliable, set the hook to
40607     'hook_int_rtx_insn_0'.
40608
40609 -- Target Hook: bool TARGET_WANT_DEBUG_PUB_SECTIONS
40610     True if the '.debug_pubtypes' and '.debug_pubnames' sections should
40611     be emitted.  These sections are not used on most platforms, and in
40612     particular GDB does not use them.
40613
40614 -- Target Hook: bool TARGET_DELAY_SCHED2
40615     True if sched2 is not to be run at its normal place.  This usually
40616     means it will be run as part of machine-specific reorg.
40617
40618 -- Target Hook: bool TARGET_DELAY_VARTRACK
40619     True if vartrack is not to be run at its normal place.  This
40620     usually means it will be run as part of machine-specific reorg.
40621
40622 -- Target Hook: bool TARGET_NO_REGISTER_ALLOCATION
40623     True if register allocation and the passes following it should not
40624     be run.  Usually true only for virtual assembler targets.
40625
40626 -- Macro: ASM_OUTPUT_DWARF_DELTA (STREAM, SIZE, LABEL1, LABEL2)
40627     A C statement to issue assembly directives that create a difference
40628     LAB1 minus LAB2, using an integer of the given SIZE.
40629
40630 -- Macro: ASM_OUTPUT_DWARF_VMS_DELTA (STREAM, SIZE, LABEL1, LABEL2)
40631     A C statement to issue assembly directives that create a difference
40632     between the two given labels in system defined units, e.g.
40633     instruction slots on IA64 VMS, using an integer of the given size.
40634
40635 -- Macro: ASM_OUTPUT_DWARF_OFFSET (STREAM, SIZE, LABEL, OFFSET,
40636          SECTION)
40637     A C statement to issue assembly directives that create a
40638     section-relative reference to the given LABEL plus OFFSET, using an
40639     integer of the given SIZE.  The label is known to be defined in the
40640     given SECTION.
40641
40642 -- Macro: ASM_OUTPUT_DWARF_PCREL (STREAM, SIZE, LABEL)
40643     A C statement to issue assembly directives that create a
40644     self-relative reference to the given LABEL, using an integer of the
40645     given SIZE.
40646
40647 -- Macro: ASM_OUTPUT_DWARF_DATAREL (STREAM, SIZE, LABEL)
40648     A C statement to issue assembly directives that create a reference
40649     to the given LABEL relative to the dbase, using an integer of the
40650     given SIZE.
40651
40652 -- Macro: ASM_OUTPUT_DWARF_TABLE_REF (LABEL)
40653     A C statement to issue assembly directives that create a reference
40654     to the DWARF table identifier LABEL from the current section.  This
40655     is used on some systems to avoid garbage collecting a DWARF table
40656     which is referenced by a function.
40657
40658 -- Target Hook: void TARGET_ASM_OUTPUT_DWARF_DTPREL (FILE *FILE, int
40659          SIZE, rtx X)
40660     If defined, this target hook is a function which outputs a
40661     DTP-relative reference to the given TLS symbol of the specified
40662     size.
40663
40664
40665File: gccint.info,  Node: VMS Debug,  Prev: DWARF,  Up: Debugging Info
40666
4066718.21.6 Macros for VMS Debug Format
40668-----------------------------------
40669
40670Here are macros for VMS debug format.
40671
40672 -- Macro: VMS_DEBUGGING_INFO
40673     Define this macro if GCC should produce debugging output for VMS in
40674     response to the '-g' option.  The default behavior for VMS is to
40675     generate minimal debug info for a traceback in the absence of '-g'
40676     unless explicitly overridden with '-g0'.  This behavior is
40677     controlled by 'TARGET_OPTION_OPTIMIZATION' and
40678     'TARGET_OPTION_OVERRIDE'.
40679
40680
40681File: gccint.info,  Node: Floating Point,  Next: Mode Switching,  Prev: Debugging Info,  Up: Target Macros
40682
4068318.22 Cross Compilation and Floating Point
40684==========================================
40685
40686While all modern machines use twos-complement representation for
40687integers, there are a variety of representations for floating point
40688numbers.  This means that in a cross-compiler the representation of
40689floating point numbers in the compiled program may be different from
40690that used in the machine doing the compilation.
40691
40692 Because different representation systems may offer different amounts of
40693range and precision, all floating point constants must be represented in
40694the target machine's format.  Therefore, the cross compiler cannot
40695safely use the host machine's floating point arithmetic; it must emulate
40696the target's arithmetic.  To ensure consistency, GCC always uses
40697emulation to work with floating point values, even when the host and
40698target floating point formats are identical.
40699
40700 The following macros are provided by 'real.h' for the compiler to use.
40701All parts of the compiler which generate or optimize floating-point
40702calculations must use these macros.  They may evaluate their operands
40703more than once, so operands must not have side effects.
40704
40705 -- Macro: REAL_VALUE_TYPE
40706     The C data type to be used to hold a floating point value in the
40707     target machine's format.  Typically this is a 'struct' containing
40708     an array of 'HOST_WIDE_INT', but all code should treat it as an
40709     opaque quantity.
40710
40711 -- Macro: HOST_WIDE_INT REAL_VALUE_FIX (REAL_VALUE_TYPE X)
40712     Truncates X to a signed integer, rounding toward zero.
40713
40714 -- Macro: unsigned HOST_WIDE_INT REAL_VALUE_UNSIGNED_FIX
40715          (REAL_VALUE_TYPE X)
40716     Truncates X to an unsigned integer, rounding toward zero.  If X is
40717     negative, returns zero.
40718
40719 -- Macro: REAL_VALUE_TYPE REAL_VALUE_ATOF (const char *STRING,
40720          machine_mode MODE)
40721     Converts STRING into a floating point number in the target
40722     machine's representation for mode MODE.  This routine can handle
40723     both decimal and hexadecimal floating point constants, using the
40724     syntax defined by the C language for both.
40725
40726 -- Macro: int REAL_VALUE_NEGATIVE (REAL_VALUE_TYPE X)
40727     Returns 1 if X is negative (including negative zero), 0 otherwise.
40728
40729 -- Macro: int REAL_VALUE_ISINF (REAL_VALUE_TYPE X)
40730     Determines whether X represents infinity (positive or negative).
40731
40732 -- Macro: int REAL_VALUE_ISNAN (REAL_VALUE_TYPE X)
40733     Determines whether X represents a "NaN" (not-a-number).
40734
40735 -- Macro: REAL_VALUE_TYPE REAL_VALUE_NEGATE (REAL_VALUE_TYPE X)
40736     Returns the negative of the floating point value X.
40737
40738 -- Macro: REAL_VALUE_TYPE REAL_VALUE_ABS (REAL_VALUE_TYPE X)
40739     Returns the absolute value of X.
40740
40741
40742File: gccint.info,  Node: Mode Switching,  Next: Target Attributes,  Prev: Floating Point,  Up: Target Macros
40743
4074418.23 Mode Switching Instructions
40745=================================
40746
40747The following macros control mode switching optimizations:
40748
40749 -- Macro: OPTIMIZE_MODE_SWITCHING (ENTITY)
40750     Define this macro if the port needs extra instructions inserted for
40751     mode switching in an optimizing compilation.
40752
40753     For an example, the SH4 can perform both single and double
40754     precision floating point operations, but to perform a single
40755     precision operation, the FPSCR PR bit has to be cleared, while for
40756     a double precision operation, this bit has to be set.  Changing the
40757     PR bit requires a general purpose register as a scratch register,
40758     hence these FPSCR sets have to be inserted before reload, i.e. you
40759     cannot put this into instruction emitting or
40760     'TARGET_MACHINE_DEPENDENT_REORG'.
40761
40762     You can have multiple entities that are mode-switched, and select
40763     at run time which entities actually need it.
40764     'OPTIMIZE_MODE_SWITCHING' should return nonzero for any ENTITY that
40765     needs mode-switching.  If you define this macro, you also have to
40766     define 'NUM_MODES_FOR_MODE_SWITCHING', 'TARGET_MODE_NEEDED',
40767     'TARGET_MODE_PRIORITY' and 'TARGET_MODE_EMIT'.
40768     'TARGET_MODE_AFTER', 'TARGET_MODE_ENTRY', and 'TARGET_MODE_EXIT'
40769     are optional.
40770
40771 -- Macro: NUM_MODES_FOR_MODE_SWITCHING
40772     If you define 'OPTIMIZE_MODE_SWITCHING', you have to define this as
40773     initializer for an array of integers.  Each initializer element N
40774     refers to an entity that needs mode switching, and specifies the
40775     number of different modes that might need to be set for this
40776     entity.  The position of the initializer in the
40777     initializer--starting counting at zero--determines the integer that
40778     is used to refer to the mode-switched entity in question.  In
40779     macros that take mode arguments / yield a mode result, modes are
40780     represented as numbers 0 ... N - 1.  N is used to specify that no
40781     mode switch is needed / supplied.
40782
40783 -- Target Hook: void TARGET_MODE_EMIT (int ENTITY, int MODE, int
40784          PREV_MODE, HARD_REG_SET REGS_LIVE)
40785     Generate one or more insns to set ENTITY to MODE.  HARD_REG_LIVE is
40786     the set of hard registers live at the point where the insn(s) are
40787     to be inserted.  PREV_MOXDE indicates the mode to switch from.
40788     Sets of a lower numbered entity will be emitted before sets of a
40789     higher numbered entity to a mode of the same or lower priority.
40790
40791 -- Target Hook: int TARGET_MODE_NEEDED (int ENTITY, rtx_insn *INSN)
40792     ENTITY is an integer specifying a mode-switched entity.  If
40793     'OPTIMIZE_MODE_SWITCHING' is defined, you must define this macro to
40794     return an integer value not larger than the corresponding element
40795     in 'NUM_MODES_FOR_MODE_SWITCHING', to denote the mode that ENTITY
40796     must be switched into prior to the execution of INSN.
40797
40798 -- Target Hook: int TARGET_MODE_AFTER (int ENTITY, int MODE, rtx_insn
40799          *INSN)
40800     ENTITY is an integer specifying a mode-switched entity.  If this
40801     macro is defined, it is evaluated for every INSN during mode
40802     switching.  It determines the mode that an insn results in (if
40803     different from the incoming mode).
40804
40805 -- Target Hook: int TARGET_MODE_ENTRY (int ENTITY)
40806     If this macro is defined, it is evaluated for every ENTITY that
40807     needs mode switching.  It should evaluate to an integer, which is a
40808     mode that ENTITY is assumed to be switched to at function entry.
40809     If 'TARGET_MODE_ENTRY' is defined then 'TARGET_MODE_EXIT' must be
40810     defined.
40811
40812 -- Target Hook: int TARGET_MODE_EXIT (int ENTITY)
40813     If this macro is defined, it is evaluated for every ENTITY that
40814     needs mode switching.  It should evaluate to an integer, which is a
40815     mode that ENTITY is assumed to be switched to at function exit.  If
40816     'TARGET_MODE_EXIT' is defined then 'TARGET_MODE_ENTRY' must be
40817     defined.
40818
40819 -- Target Hook: int TARGET_MODE_PRIORITY (int ENTITY, int N)
40820     This macro specifies the order in which modes for ENTITY are
40821     processed.  0 is the highest priority,
40822     'NUM_MODES_FOR_MODE_SWITCHING[ENTITY] - 1' the lowest.  The value
40823     of the macro should be an integer designating a mode for ENTITY.
40824     For any fixed ENTITY, 'mode_priority' (ENTITY, N) shall be a
40825     bijection in 0 ... 'num_modes_for_mode_switching[ENTITY] - 1'.
40826
40827
40828File: gccint.info,  Node: Target Attributes,  Next: Emulated TLS,  Prev: Mode Switching,  Up: Target Macros
40829
4083018.24 Defining target-specific uses of '__attribute__'
40831======================================================
40832
40833Target-specific attributes may be defined for functions, data and types.
40834These are described using the following target hooks; they also need to
40835be documented in 'extend.texi'.
40836
40837 -- Target Hook: const struct attribute_spec * TARGET_ATTRIBUTE_TABLE
40838     If defined, this target hook points to an array of 'struct
40839     attribute_spec' (defined in 'tree-core.h') specifying the machine
40840     specific attributes for this target and some of the restrictions on
40841     the entities to which these attributes are applied and the
40842     arguments they take.
40843
40844 -- Target Hook: bool TARGET_ATTRIBUTE_TAKES_IDENTIFIER_P (const_tree
40845          NAME)
40846     If defined, this target hook is a function which returns true if
40847     the machine-specific attribute named NAME expects an identifier
40848     given as its first argument to be passed on as a plain identifier,
40849     not subjected to name lookup.  If this is not defined, the default
40850     is false for all machine-specific attributes.
40851
40852 -- Target Hook: int TARGET_COMP_TYPE_ATTRIBUTES (const_tree TYPE1,
40853          const_tree TYPE2)
40854     If defined, this target hook is a function which returns zero if
40855     the attributes on TYPE1 and TYPE2 are incompatible, one if they are
40856     compatible, and two if they are nearly compatible (which causes a
40857     warning to be generated).  If this is not defined, machine-specific
40858     attributes are supposed always to be compatible.
40859
40860 -- Target Hook: void TARGET_SET_DEFAULT_TYPE_ATTRIBUTES (tree TYPE)
40861     If defined, this target hook is a function which assigns default
40862     attributes to the newly defined TYPE.
40863
40864 -- Target Hook: tree TARGET_MERGE_TYPE_ATTRIBUTES (tree TYPE1, tree
40865          TYPE2)
40866     Define this target hook if the merging of type attributes needs
40867     special handling.  If defined, the result is a list of the combined
40868     'TYPE_ATTRIBUTES' of TYPE1 and TYPE2.  It is assumed that
40869     'comptypes' has already been called and returned 1.  This function
40870     may call 'merge_attributes' to handle machine-independent merging.
40871
40872 -- Target Hook: tree TARGET_MERGE_DECL_ATTRIBUTES (tree OLDDECL, tree
40873          NEWDECL)
40874     Define this target hook if the merging of decl attributes needs
40875     special handling.  If defined, the result is a list of the combined
40876     'DECL_ATTRIBUTES' of OLDDECL and NEWDECL.  NEWDECL is a duplicate
40877     declaration of OLDDECL.  Examples of when this is needed are when
40878     one attribute overrides another, or when an attribute is nullified
40879     by a subsequent definition.  This function may call
40880     'merge_attributes' to handle machine-independent merging.
40881
40882     If the only target-specific handling you require is 'dllimport' for
40883     Microsoft Windows targets, you should define the macro
40884     'TARGET_DLLIMPORT_DECL_ATTRIBUTES' to '1'.  The compiler will then
40885     define a function called 'merge_dllimport_decl_attributes' which
40886     can then be defined as the expansion of
40887     'TARGET_MERGE_DECL_ATTRIBUTES'.  You can also add
40888     'handle_dll_attribute' in the attribute table for your port to
40889     perform initial processing of the 'dllimport' and 'dllexport'
40890     attributes.  This is done in 'i386/cygwin.h' and 'i386/i386.c', for
40891     example.
40892
40893 -- Target Hook: bool TARGET_VALID_DLLIMPORT_ATTRIBUTE_P (const_tree
40894          DECL)
40895     DECL is a variable or function with '__attribute__((dllimport))'
40896     specified.  Use this hook if the target needs to add extra
40897     validation checks to 'handle_dll_attribute'.
40898
40899 -- Macro: TARGET_DECLSPEC
40900     Define this macro to a nonzero value if you want to treat
40901     '__declspec(X)' as equivalent to '__attribute((X))'.  By default,
40902     this behavior is enabled only for targets that define
40903     'TARGET_DLLIMPORT_DECL_ATTRIBUTES'.  The current implementation of
40904     '__declspec' is via a built-in macro, but you should not rely on
40905     this implementation detail.
40906
40907 -- Target Hook: void TARGET_INSERT_ATTRIBUTES (tree NODE, tree
40908          *ATTR_PTR)
40909     Define this target hook if you want to be able to add attributes to
40910     a decl when it is being created.  This is normally useful for back
40911     ends which wish to implement a pragma by using the attributes which
40912     correspond to the pragma's effect.  The NODE argument is the decl
40913     which is being created.  The ATTR_PTR argument is a pointer to the
40914     attribute list for this decl.  The list itself should not be
40915     modified, since it may be shared with other decls, but attributes
40916     may be chained on the head of the list and '*ATTR_PTR' modified to
40917     point to the new attributes, or a copy of the list may be made if
40918     further changes are needed.
40919
40920 -- Target Hook: tree TARGET_HANDLE_GENERIC_ATTRIBUTE (tree *NODE, tree
40921          NAME, tree ARGS, int FLAGS, bool *NO_ADD_ATTRS)
40922     Define this target hook if you want to be able to perform
40923     additional target-specific processing of an attribute which is
40924     handled generically by a front end.  The arguments are the same as
40925     those which are passed to attribute handlers.  So far this only
40926     affects the NOINIT and SECTION attribute.
40927
40928 -- Target Hook: bool TARGET_FUNCTION_ATTRIBUTE_INLINABLE_P (const_tree
40929          FNDECL)
40930     This target hook returns 'true' if it is OK to inline FNDECL into
40931     the current function, despite its having target-specific
40932     attributes, 'false' otherwise.  By default, if a function has a
40933     target specific attribute attached to it, it will not be inlined.
40934
40935 -- Target Hook: bool TARGET_OPTION_VALID_ATTRIBUTE_P (tree FNDECL, tree
40936          NAME, tree ARGS, int FLAGS)
40937     This hook is called to parse 'attribute(target("..."))', which
40938     allows setting target-specific options on individual functions.
40939     These function-specific options may differ from the options
40940     specified on the command line.  The hook should return 'true' if
40941     the options are valid.
40942
40943     The hook should set the 'DECL_FUNCTION_SPECIFIC_TARGET' field in
40944     the function declaration to hold a pointer to a target-specific
40945     'struct cl_target_option' structure.
40946
40947 -- Target Hook: void TARGET_OPTION_SAVE (struct cl_target_option *PTR,
40948          struct gcc_options *OPTS)
40949     This hook is called to save any additional target-specific
40950     information in the 'struct cl_target_option' structure for
40951     function-specific options from the 'struct gcc_options' structure.
40952     *Note Option file format::.
40953
40954 -- Target Hook: void TARGET_OPTION_RESTORE (struct gcc_options *OPTS,
40955          struct cl_target_option *PTR)
40956     This hook is called to restore any additional target-specific
40957     information in the 'struct cl_target_option' structure for
40958     function-specific options to the 'struct gcc_options' structure.
40959
40960 -- Target Hook: void TARGET_OPTION_POST_STREAM_IN (struct
40961          cl_target_option *PTR)
40962     This hook is called to update target-specific information in the
40963     'struct cl_target_option' structure after it is streamed in from
40964     LTO bytecode.
40965
40966 -- Target Hook: void TARGET_OPTION_PRINT (FILE *FILE, int INDENT,
40967          struct cl_target_option *PTR)
40968     This hook is called to print any additional target-specific
40969     information in the 'struct cl_target_option' structure for
40970     function-specific options.
40971
40972 -- Target Hook: bool TARGET_OPTION_PRAGMA_PARSE (tree ARGS, tree
40973          POP_TARGET)
40974     This target hook parses the options for '#pragma GCC target', which
40975     sets the target-specific options for functions that occur later in
40976     the input stream.  The options accepted should be the same as those
40977     handled by the 'TARGET_OPTION_VALID_ATTRIBUTE_P' hook.
40978
40979 -- Target Hook: void TARGET_OPTION_OVERRIDE (void)
40980     Sometimes certain combinations of command options do not make sense
40981     on a particular target machine.  You can override the hook
40982     'TARGET_OPTION_OVERRIDE' to take account of this.  This hooks is
40983     called once just after all the command options have been parsed.
40984
40985     Don't use this hook to turn on various extra optimizations for
40986     '-O'.  That is what 'TARGET_OPTION_OPTIMIZATION' is for.
40987
40988     If you need to do something whenever the optimization level is
40989     changed via the optimize attribute or pragma, see
40990     'TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE'
40991
40992 -- Target Hook: bool TARGET_OPTION_FUNCTION_VERSIONS (tree DECL1, tree
40993          DECL2)
40994     This target hook returns 'true' if DECL1 and DECL2 are versions of
40995     the same function.  DECL1 and DECL2 are function versions if and
40996     only if they have the same function signature and different target
40997     specific attributes, that is, they are compiled for different
40998     target machines.
40999
41000 -- Target Hook: bool TARGET_CAN_INLINE_P (tree CALLER, tree CALLEE)
41001     This target hook returns 'false' if the CALLER function cannot
41002     inline CALLEE, based on target specific information.  By default,
41003     inlining is not allowed if the callee function has function
41004     specific target options and the caller does not use the same
41005     options.
41006
41007 -- Target Hook: void TARGET_RELAYOUT_FUNCTION (tree FNDECL)
41008     This target hook fixes function FNDECL after attributes are
41009     processed.  Default does nothing.  On ARM, the default function's
41010     alignment is updated with the attribute target.
41011
41012
41013File: gccint.info,  Node: Emulated TLS,  Next: MIPS Coprocessors,  Prev: Target Attributes,  Up: Target Macros
41014
4101518.25 Emulating TLS
41016===================
41017
41018For targets whose psABI does not provide Thread Local Storage via
41019specific relocations and instruction sequences, an emulation layer is
41020used.  A set of target hooks allows this emulation layer to be
41021configured for the requirements of a particular target.  For instance
41022the psABI may in fact specify TLS support in terms of an emulation
41023layer.
41024
41025 The emulation layer works by creating a control object for every TLS
41026object.  To access the TLS object, a lookup function is provided which,
41027when given the address of the control object, will return the address of
41028the current thread's instance of the TLS object.
41029
41030 -- Target Hook: const char * TARGET_EMUTLS_GET_ADDRESS
41031     Contains the name of the helper function that uses a TLS control
41032     object to locate a TLS instance.  The default causes libgcc's
41033     emulated TLS helper function to be used.
41034
41035 -- Target Hook: const char * TARGET_EMUTLS_REGISTER_COMMON
41036     Contains the name of the helper function that should be used at
41037     program startup to register TLS objects that are implicitly
41038     initialized to zero.  If this is 'NULL', all TLS objects will have
41039     explicit initializers.  The default causes libgcc's emulated TLS
41040     registration function to be used.
41041
41042 -- Target Hook: const char * TARGET_EMUTLS_VAR_SECTION
41043     Contains the name of the section in which TLS control variables
41044     should be placed.  The default of 'NULL' allows these to be placed
41045     in any section.
41046
41047 -- Target Hook: const char * TARGET_EMUTLS_TMPL_SECTION
41048     Contains the name of the section in which TLS initializers should
41049     be placed.  The default of 'NULL' allows these to be placed in any
41050     section.
41051
41052 -- Target Hook: const char * TARGET_EMUTLS_VAR_PREFIX
41053     Contains the prefix to be prepended to TLS control variable names.
41054     The default of 'NULL' uses a target-specific prefix.
41055
41056 -- Target Hook: const char * TARGET_EMUTLS_TMPL_PREFIX
41057     Contains the prefix to be prepended to TLS initializer objects.
41058     The default of 'NULL' uses a target-specific prefix.
41059
41060 -- Target Hook: tree TARGET_EMUTLS_VAR_FIELDS (tree TYPE, tree *NAME)
41061     Specifies a function that generates the FIELD_DECLs for a TLS
41062     control object type.  TYPE is the RECORD_TYPE the fields are for
41063     and NAME should be filled with the structure tag, if the default of
41064     '__emutls_object' is unsuitable.  The default creates a type
41065     suitable for libgcc's emulated TLS function.
41066
41067 -- Target Hook: tree TARGET_EMUTLS_VAR_INIT (tree VAR, tree DECL, tree
41068          TMPL_ADDR)
41069     Specifies a function that generates the CONSTRUCTOR to initialize a
41070     TLS control object.  VAR is the TLS control object, DECL is the TLS
41071     object and TMPL_ADDR is the address of the initializer.  The
41072     default initializes libgcc's emulated TLS control object.
41073
41074 -- Target Hook: bool TARGET_EMUTLS_VAR_ALIGN_FIXED
41075     Specifies whether the alignment of TLS control variable objects is
41076     fixed and should not be increased as some backends may do to
41077     optimize single objects.  The default is false.
41078
41079 -- Target Hook: bool TARGET_EMUTLS_DEBUG_FORM_TLS_ADDRESS
41080     Specifies whether a DWARF 'DW_OP_form_tls_address' location
41081     descriptor may be used to describe emulated TLS control objects.
41082
41083
41084File: gccint.info,  Node: MIPS Coprocessors,  Next: PCH Target,  Prev: Emulated TLS,  Up: Target Macros
41085
4108618.26 Defining coprocessor specifics for MIPS targets.
41087======================================================
41088
41089The MIPS specification allows MIPS implementations to have as many as 4
41090coprocessors, each with as many as 32 private registers.  GCC supports
41091accessing these registers and transferring values between the registers
41092and memory using asm-ized variables.  For example:
41093
41094       register unsigned int cp0count asm ("c0r1");
41095       unsigned int d;
41096
41097       d = cp0count + 3;
41098
41099 ("c0r1" is the default name of register 1 in coprocessor 0; alternate
41100names may be added as described below, or the default names may be
41101overridden entirely in 'SUBTARGET_CONDITIONAL_REGISTER_USAGE'.)
41102
41103 Coprocessor registers are assumed to be epilogue-used; sets to them
41104will be preserved even if it does not appear that the register is used
41105again later in the function.
41106
41107 Another note: according to the MIPS spec, coprocessor 1 (if present) is
41108the FPU.  One accesses COP1 registers through standard mips
41109floating-point support; they are not included in this mechanism.
41110
41111
41112File: gccint.info,  Node: PCH Target,  Next: C++ ABI,  Prev: MIPS Coprocessors,  Up: Target Macros
41113
4111418.27 Parameters for Precompiled Header Validity Checking
41115=========================================================
41116
41117 -- Target Hook: void * TARGET_GET_PCH_VALIDITY (size_t *SZ)
41118     This hook returns a pointer to the data needed by
41119     'TARGET_PCH_VALID_P' and sets '*SZ' to the size of the data in
41120     bytes.
41121
41122 -- Target Hook: const char * TARGET_PCH_VALID_P (const void *DATA,
41123          size_t SZ)
41124     This hook checks whether the options used to create a PCH file are
41125     compatible with the current settings.  It returns 'NULL' if so and
41126     a suitable error message if not.  Error messages will be presented
41127     to the user and must be localized using '_(MSG)'.
41128
41129     DATA is the data that was returned by 'TARGET_GET_PCH_VALIDITY'
41130     when the PCH file was created and SZ is the size of that data in
41131     bytes.  It's safe to assume that the data was created by the same
41132     version of the compiler, so no format checking is needed.
41133
41134     The default definition of 'default_pch_valid_p' should be suitable
41135     for most targets.
41136
41137 -- Target Hook: const char * TARGET_CHECK_PCH_TARGET_FLAGS (int
41138          PCH_FLAGS)
41139     If this hook is nonnull, the default implementation of
41140     'TARGET_PCH_VALID_P' will use it to check for compatible values of
41141     'target_flags'.  PCH_FLAGS specifies the value that 'target_flags'
41142     had when the PCH file was created.  The return value is the same as
41143     for 'TARGET_PCH_VALID_P'.
41144
41145 -- Target Hook: void TARGET_PREPARE_PCH_SAVE (void)
41146     Called before writing out a PCH file.  If the target has some
41147     garbage-collected data that needs to be in a particular state on
41148     PCH loads, it can use this hook to enforce that state.  Very few
41149     targets need to do anything here.
41150
41151
41152File: gccint.info,  Node: C++ ABI,  Next: D Language and ABI,  Prev: PCH Target,  Up: Target Macros
41153
4115418.28 C++ ABI parameters
41155========================
41156
41157 -- Target Hook: tree TARGET_CXX_GUARD_TYPE (void)
41158     Define this hook to override the integer type used for guard
41159     variables.  These are used to implement one-time construction of
41160     static objects.  The default is long_long_integer_type_node.
41161
41162 -- Target Hook: bool TARGET_CXX_GUARD_MASK_BIT (void)
41163     This hook determines how guard variables are used.  It should
41164     return 'false' (the default) if the first byte should be used.  A
41165     return value of 'true' indicates that only the least significant
41166     bit should be used.
41167
41168 -- Target Hook: tree TARGET_CXX_GET_COOKIE_SIZE (tree TYPE)
41169     This hook returns the size of the cookie to use when allocating an
41170     array whose elements have the indicated TYPE.  Assumes that it is
41171     already known that a cookie is needed.  The default is 'max(sizeof
41172     (size_t), alignof(type))', as defined in section 2.7 of the
41173     IA64/Generic C++ ABI.
41174
41175 -- Target Hook: bool TARGET_CXX_COOKIE_HAS_SIZE (void)
41176     This hook should return 'true' if the element size should be stored
41177     in array cookies.  The default is to return 'false'.
41178
41179 -- Target Hook: int TARGET_CXX_IMPORT_EXPORT_CLASS (tree TYPE, int
41180          IMPORT_EXPORT)
41181     If defined by a backend this hook allows the decision made to
41182     export class TYPE to be overruled.  Upon entry IMPORT_EXPORT will
41183     contain 1 if the class is going to be exported, -1 if it is going
41184     to be imported and 0 otherwise.  This function should return the
41185     modified value and perform any other actions necessary to support
41186     the backend's targeted operating system.
41187
41188 -- Target Hook: bool TARGET_CXX_CDTOR_RETURNS_THIS (void)
41189     This hook should return 'true' if constructors and destructors
41190     return the address of the object created/destroyed.  The default is
41191     to return 'false'.
41192
41193 -- Target Hook: bool TARGET_CXX_KEY_METHOD_MAY_BE_INLINE (void)
41194     This hook returns true if the key method for a class (i.e., the
41195     method which, if defined in the current translation unit, causes
41196     the virtual table to be emitted) may be an inline function.  Under
41197     the standard Itanium C++ ABI the key method may be an inline
41198     function so long as the function is not declared inline in the
41199     class definition.  Under some variants of the ABI, an inline
41200     function can never be the key method.  The default is to return
41201     'true'.
41202
41203 -- Target Hook: void TARGET_CXX_DETERMINE_CLASS_DATA_VISIBILITY (tree
41204          DECL)
41205     DECL is a virtual table, virtual table table, typeinfo object, or
41206     other similar implicit class data object that will be emitted with
41207     external linkage in this translation unit.  No ELF visibility has
41208     been explicitly specified.  If the target needs to specify a
41209     visibility other than that of the containing class, use this hook
41210     to set 'DECL_VISIBILITY' and 'DECL_VISIBILITY_SPECIFIED'.
41211
41212 -- Target Hook: bool TARGET_CXX_CLASS_DATA_ALWAYS_COMDAT (void)
41213     This hook returns true (the default) if virtual tables and other
41214     similar implicit class data objects are always COMDAT if they have
41215     external linkage.  If this hook returns false, then class data for
41216     classes whose virtual table will be emitted in only one translation
41217     unit will not be COMDAT.
41218
41219 -- Target Hook: bool TARGET_CXX_LIBRARY_RTTI_COMDAT (void)
41220     This hook returns true (the default) if the RTTI information for
41221     the basic types which is defined in the C++ runtime should always
41222     be COMDAT, false if it should not be COMDAT.
41223
41224 -- Target Hook: bool TARGET_CXX_USE_AEABI_ATEXIT (void)
41225     This hook returns true if '__aeabi_atexit' (as defined by the ARM
41226     EABI) should be used to register static destructors when
41227     '-fuse-cxa-atexit' is in effect.  The default is to return false to
41228     use '__cxa_atexit'.
41229
41230 -- Target Hook: bool TARGET_CXX_USE_ATEXIT_FOR_CXA_ATEXIT (void)
41231     This hook returns true if the target 'atexit' function can be used
41232     in the same manner as '__cxa_atexit' to register C++ static
41233     destructors.  This requires that 'atexit'-registered functions in
41234     shared libraries are run in the correct order when the libraries
41235     are unloaded.  The default is to return false.
41236
41237 -- Target Hook: void TARGET_CXX_ADJUST_CLASS_AT_DEFINITION (tree TYPE)
41238     TYPE is a C++ class (i.e., RECORD_TYPE or UNION_TYPE) that has just
41239     been defined.  Use this hook to make adjustments to the class (eg,
41240     tweak visibility or perform any other required target
41241     modifications).
41242
41243 -- Target Hook: tree TARGET_CXX_DECL_MANGLING_CONTEXT (const_tree DECL)
41244     Return target-specific mangling context of DECL or 'NULL_TREE'.
41245
41246
41247File: gccint.info,  Node: D Language and ABI,  Next: Named Address Spaces,  Prev: C++ ABI,  Up: Target Macros
41248
4124918.29 D ABI parameters
41250======================
41251
41252 -- D Target Hook: void TARGET_D_CPU_VERSIONS (void)
41253     Declare all environmental version identifiers relating to the
41254     target CPU using the function 'builtin_version', which takes a
41255     string representing the name of the version.  Version identifiers
41256     predefined by this hook apply to all modules that are being
41257     compiled and imported.
41258
41259 -- D Target Hook: void TARGET_D_OS_VERSIONS (void)
41260     Similarly to 'TARGET_D_CPU_VERSIONS', but is used for versions
41261     relating to the target operating system.
41262
41263 -- D Target Hook: unsigned TARGET_D_CRITSEC_SIZE (void)
41264     Returns the size of the data structure used by the target operating
41265     system for critical sections and monitors.  For example, on
41266     Microsoft Windows this would return the 'sizeof(CRITICAL_SECTION)',
41267     while other platforms that implement pthreads would return
41268     'sizeof(pthread_mutex_t)'.
41269
41270
41271File: gccint.info,  Node: Named Address Spaces,  Next: Misc,  Prev: D Language and ABI,  Up: Target Macros
41272
4127318.30 Adding support for named address spaces
41274=============================================
41275
41276The draft technical report of the ISO/IEC JTC1 S22 WG14 N1275 standards
41277committee, 'Programming Languages - C - Extensions to support embedded
41278processors', specifies a syntax for embedded processors to specify
41279alternate address spaces.  You can configure a GCC port to support
41280section 5.1 of the draft report to add support for address spaces other
41281than the default address space.  These address spaces are new keywords
41282that are similar to the 'volatile' and 'const' type attributes.
41283
41284 Pointers to named address spaces can have a different size than
41285pointers to the generic address space.
41286
41287 For example, the SPU port uses the '__ea' address space to refer to
41288memory in the host processor, rather than memory local to the SPU
41289processor.  Access to memory in the '__ea' address space involves
41290issuing DMA operations to move data between the host processor and the
41291local processor memory address space.  Pointers in the '__ea' address
41292space are either 32 bits or 64 bits based on the '-mea32' or '-mea64'
41293switches (native SPU pointers are always 32 bits).
41294
41295 Internally, address spaces are represented as a small integer in the
41296range 0 to 15 with address space 0 being reserved for the generic
41297address space.
41298
41299 To register a named address space qualifier keyword with the C front
41300end, the target may call the 'c_register_addr_space' routine.  For
41301example, the SPU port uses the following to declare '__ea' as the
41302keyword for named address space #1:
41303     #define ADDR_SPACE_EA 1
41304     c_register_addr_space ("__ea", ADDR_SPACE_EA);
41305
41306 -- Target Hook: scalar_int_mode TARGET_ADDR_SPACE_POINTER_MODE
41307          (addr_space_t ADDRESS_SPACE)
41308     Define this to return the machine mode to use for pointers to
41309     ADDRESS_SPACE if the target supports named address spaces.  The
41310     default version of this hook returns 'ptr_mode'.
41311
41312 -- Target Hook: scalar_int_mode TARGET_ADDR_SPACE_ADDRESS_MODE
41313          (addr_space_t ADDRESS_SPACE)
41314     Define this to return the machine mode to use for addresses in
41315     ADDRESS_SPACE if the target supports named address spaces.  The
41316     default version of this hook returns 'Pmode'.
41317
41318 -- Target Hook: bool TARGET_ADDR_SPACE_VALID_POINTER_MODE
41319          (scalar_int_mode MODE, addr_space_t AS)
41320     Define this to return nonzero if the port can handle pointers with
41321     machine mode MODE to address space AS.  This target hook is the
41322     same as the 'TARGET_VALID_POINTER_MODE' target hook, except that it
41323     includes explicit named address space support.  The default version
41324     of this hook returns true for the modes returned by either the
41325     'TARGET_ADDR_SPACE_POINTER_MODE' or
41326     'TARGET_ADDR_SPACE_ADDRESS_MODE' target hooks for the given address
41327     space.
41328
41329 -- Target Hook: bool TARGET_ADDR_SPACE_LEGITIMATE_ADDRESS_P
41330          (machine_mode MODE, rtx EXP, bool STRICT, addr_space_t AS)
41331     Define this to return true if EXP is a valid address for mode MODE
41332     in the named address space AS.  The STRICT parameter says whether
41333     strict addressing is in effect after reload has finished.  This
41334     target hook is the same as the 'TARGET_LEGITIMATE_ADDRESS_P' target
41335     hook, except that it includes explicit named address space support.
41336
41337 -- Target Hook: rtx TARGET_ADDR_SPACE_LEGITIMIZE_ADDRESS (rtx X, rtx
41338          OLDX, machine_mode MODE, addr_space_t AS)
41339     Define this to modify an invalid address X to be a valid address
41340     with mode MODE in the named address space AS.  This target hook is
41341     the same as the 'TARGET_LEGITIMIZE_ADDRESS' target hook, except
41342     that it includes explicit named address space support.
41343
41344 -- Target Hook: bool TARGET_ADDR_SPACE_SUBSET_P (addr_space_t SUBSET,
41345          addr_space_t SUPERSET)
41346     Define this to return whether the SUBSET named address space is
41347     contained within the SUPERSET named address space.  Pointers to a
41348     named address space that is a subset of another named address space
41349     will be converted automatically without a cast if used together in
41350     arithmetic operations.  Pointers to a superset address space can be
41351     converted to pointers to a subset address space via explicit casts.
41352
41353 -- Target Hook: bool TARGET_ADDR_SPACE_ZERO_ADDRESS_VALID (addr_space_t
41354          AS)
41355     Define this to modify the default handling of address 0 for the
41356     address space.  Return true if 0 should be considered a valid
41357     address.
41358
41359 -- Target Hook: rtx TARGET_ADDR_SPACE_CONVERT (rtx OP, tree FROM_TYPE,
41360          tree TO_TYPE)
41361     Define this to convert the pointer expression represented by the
41362     RTL OP with type FROM_TYPE that points to a named address space to
41363     a new pointer expression with type TO_TYPE that points to a
41364     different named address space.  When this hook it called, it is
41365     guaranteed that one of the two address spaces is a subset of the
41366     other, as determined by the 'TARGET_ADDR_SPACE_SUBSET_P' target
41367     hook.
41368
41369 -- Target Hook: int TARGET_ADDR_SPACE_DEBUG (addr_space_t AS)
41370     Define this to define how the address space is encoded in dwarf.
41371     The result is the value to be used with 'DW_AT_address_class'.
41372
41373 -- Target Hook: void TARGET_ADDR_SPACE_DIAGNOSE_USAGE (addr_space_t AS,
41374          location_t LOC)
41375     Define this hook if the availability of an address space depends on
41376     command line options and some diagnostics should be printed when
41377     the address space is used.  This hook is called during parsing and
41378     allows to emit a better diagnostic compared to the case where the
41379     address space was not registered with 'c_register_addr_space'.  AS
41380     is the address space as registered with 'c_register_addr_space'.
41381     LOC is the location of the address space qualifier token.  The
41382     default implementation does nothing.
41383
41384
41385File: gccint.info,  Node: Misc,  Prev: Named Address Spaces,  Up: Target Macros
41386
4138718.31 Miscellaneous Parameters
41388==============================
41389
41390Here are several miscellaneous parameters.
41391
41392 -- Macro: HAS_LONG_COND_BRANCH
41393     Define this boolean macro to indicate whether or not your
41394     architecture has conditional branches that can span all of memory.
41395     It is used in conjunction with an optimization that partitions hot
41396     and cold basic blocks into separate sections of the executable.  If
41397     this macro is set to false, gcc will convert any conditional
41398     branches that attempt to cross between sections into unconditional
41399     branches or indirect jumps.
41400
41401 -- Macro: HAS_LONG_UNCOND_BRANCH
41402     Define this boolean macro to indicate whether or not your
41403     architecture has unconditional branches that can span all of
41404     memory.  It is used in conjunction with an optimization that
41405     partitions hot and cold basic blocks into separate sections of the
41406     executable.  If this macro is set to false, gcc will convert any
41407     unconditional branches that attempt to cross between sections into
41408     indirect jumps.
41409
41410 -- Macro: CASE_VECTOR_MODE
41411     An alias for a machine mode name.  This is the machine mode that
41412     elements of a jump-table should have.
41413
41414 -- Macro: CASE_VECTOR_SHORTEN_MODE (MIN_OFFSET, MAX_OFFSET, BODY)
41415     Optional: return the preferred mode for an 'addr_diff_vec' when the
41416     minimum and maximum offset are known.  If you define this, it
41417     enables extra code in branch shortening to deal with
41418     'addr_diff_vec'.  To make this work, you also have to define
41419     'INSN_ALIGN' and make the alignment for 'addr_diff_vec' explicit.
41420     The BODY argument is provided so that the offset_unsigned and scale
41421     flags can be updated.
41422
41423 -- Macro: CASE_VECTOR_PC_RELATIVE
41424     Define this macro to be a C expression to indicate when jump-tables
41425     should contain relative addresses.  You need not define this macro
41426     if jump-tables never contain relative addresses, or jump-tables
41427     should contain relative addresses only when '-fPIC' or '-fPIC' is
41428     in effect.
41429
41430 -- Target Hook: unsigned int TARGET_CASE_VALUES_THRESHOLD (void)
41431     This function return the smallest number of different values for
41432     which it is best to use a jump-table instead of a tree of
41433     conditional branches.  The default is four for machines with a
41434     'casesi' instruction and five otherwise.  This is best for most
41435     machines.
41436
41437 -- Macro: WORD_REGISTER_OPERATIONS
41438     Define this macro to 1 if operations between registers with
41439     integral mode smaller than a word are always performed on the
41440     entire register.  To be more explicit, if you start with a pair of
41441     'word_mode' registers with known values and you do a subword, for
41442     example 'QImode', addition on the low part of the registers, then
41443     the compiler may consider that the result has a known value in
41444     'word_mode' too if the macro is defined to 1.  Most RISC machines
41445     have this property and most CISC machines do not.
41446
41447 -- Target Hook: unsigned int TARGET_MIN_ARITHMETIC_PRECISION (void)
41448     On some RISC architectures with 64-bit registers, the processor
41449     also maintains 32-bit condition codes that make it possible to do
41450     real 32-bit arithmetic, although the operations are performed on
41451     the full registers.
41452
41453     On such architectures, defining this hook to 32 tells the compiler
41454     to try using 32-bit arithmetical operations setting the condition
41455     codes instead of doing full 64-bit arithmetic.
41456
41457     More generally, define this hook on RISC architectures if you want
41458     the compiler to try using arithmetical operations setting the
41459     condition codes with a precision lower than the word precision.
41460
41461     You need not define this hook if 'WORD_REGISTER_OPERATIONS' is not
41462     defined to 1.
41463
41464 -- Macro: LOAD_EXTEND_OP (MEM_MODE)
41465     Define this macro to be a C expression indicating when insns that
41466     read memory in MEM_MODE, an integral mode narrower than a word, set
41467     the bits outside of MEM_MODE to be either the sign-extension or the
41468     zero-extension of the data read.  Return 'SIGN_EXTEND' for values
41469     of MEM_MODE for which the insn sign-extends, 'ZERO_EXTEND' for
41470     which it zero-extends, and 'UNKNOWN' for other modes.
41471
41472     This macro is not called with MEM_MODE non-integral or with a width
41473     greater than or equal to 'BITS_PER_WORD', so you may return any
41474     value in this case.  Do not define this macro if it would always
41475     return 'UNKNOWN'.  On machines where this macro is defined, you
41476     will normally define it as the constant 'SIGN_EXTEND' or
41477     'ZERO_EXTEND'.
41478
41479     You may return a non-'UNKNOWN' value even if for some hard
41480     registers the sign extension is not performed, if for the
41481     'REGNO_REG_CLASS' of these hard registers
41482     'TARGET_CAN_CHANGE_MODE_CLASS' returns false when the FROM mode is
41483     MEM_MODE and the TO mode is any integral mode larger than this but
41484     not larger than 'word_mode'.
41485
41486     You must return 'UNKNOWN' if for some hard registers that allow
41487     this mode, 'TARGET_CAN_CHANGE_MODE_CLASS' says that they cannot
41488     change to 'word_mode', but that they can change to another integral
41489     mode that is larger then MEM_MODE but still smaller than
41490     'word_mode'.
41491
41492 -- Macro: SHORT_IMMEDIATES_SIGN_EXTEND
41493     Define this macro to 1 if loading short immediate values into
41494     registers sign extends.
41495
41496 -- Target Hook: unsigned int TARGET_MIN_DIVISIONS_FOR_RECIP_MUL
41497          (machine_mode MODE)
41498     When '-ffast-math' is in effect, GCC tries to optimize divisions by
41499     the same divisor, by turning them into multiplications by the
41500     reciprocal.  This target hook specifies the minimum number of
41501     divisions that should be there for GCC to perform the optimization
41502     for a variable of mode MODE.  The default implementation returns 3
41503     if the machine has an instruction for the division, and 2 if it
41504     does not.
41505
41506 -- Macro: MOVE_MAX
41507     The maximum number of bytes that a single instruction can move
41508     quickly between memory and registers or between two memory
41509     locations.
41510
41511 -- Macro: MAX_MOVE_MAX
41512     The maximum number of bytes that a single instruction can move
41513     quickly between memory and registers or between two memory
41514     locations.  If this is undefined, the default is 'MOVE_MAX'.
41515     Otherwise, it is the constant value that is the largest value that
41516     'MOVE_MAX' can have at run-time.
41517
41518 -- Macro: SHIFT_COUNT_TRUNCATED
41519     A C expression that is nonzero if on this machine the number of
41520     bits actually used for the count of a shift operation is equal to
41521     the number of bits needed to represent the size of the object being
41522     shifted.  When this macro is nonzero, the compiler will assume that
41523     it is safe to omit a sign-extend, zero-extend, and certain bitwise
41524     'and' instructions that truncates the count of a shift operation.
41525     On machines that have instructions that act on bit-fields at
41526     variable positions, which may include 'bit test' instructions, a
41527     nonzero 'SHIFT_COUNT_TRUNCATED' also enables deletion of
41528     truncations of the values that serve as arguments to bit-field
41529     instructions.
41530
41531     If both types of instructions truncate the count (for shifts) and
41532     position (for bit-field operations), or if no variable-position
41533     bit-field instructions exist, you should define this macro.
41534
41535     However, on some machines, such as the 80386 and the 680x0,
41536     truncation only applies to shift operations and not the (real or
41537     pretended) bit-field operations.  Define 'SHIFT_COUNT_TRUNCATED' to
41538     be zero on such machines.  Instead, add patterns to the 'md' file
41539     that include the implied truncation of the shift instructions.
41540
41541     You need not define this macro if it would always have the value of
41542     zero.
41543
41544 -- Target Hook: unsigned HOST_WIDE_INT TARGET_SHIFT_TRUNCATION_MASK
41545          (machine_mode MODE)
41546     This function describes how the standard shift patterns for MODE
41547     deal with shifts by negative amounts or by more than the width of
41548     the mode.  *Note shift patterns::.
41549
41550     On many machines, the shift patterns will apply a mask M to the
41551     shift count, meaning that a fixed-width shift of X by Y is
41552     equivalent to an arbitrary-width shift of X by Y & M.  If this is
41553     true for mode MODE, the function should return M, otherwise it
41554     should return 0.  A return value of 0 indicates that no particular
41555     behavior is guaranteed.
41556
41557     Note that, unlike 'SHIFT_COUNT_TRUNCATED', this function does _not_
41558     apply to general shift rtxes; it applies only to instructions that
41559     are generated by the named shift patterns.
41560
41561     The default implementation of this function returns
41562     'GET_MODE_BITSIZE (MODE) - 1' if 'SHIFT_COUNT_TRUNCATED' and 0
41563     otherwise.  This definition is always safe, but if
41564     'SHIFT_COUNT_TRUNCATED' is false, and some shift patterns
41565     nevertheless truncate the shift count, you may get better code by
41566     overriding it.
41567
41568 -- Target Hook: bool TARGET_TRULY_NOOP_TRUNCATION (poly_uint64 OUTPREC,
41569          poly_uint64 INPREC)
41570     This hook returns true if it is safe to "convert" a value of INPREC
41571     bits to one of OUTPREC bits (where OUTPREC is smaller than INPREC)
41572     by merely operating on it as if it had only OUTPREC bits.  The
41573     default returns true unconditionally, which is correct for most
41574     machines.
41575
41576     If 'TARGET_MODES_TIEABLE_P' returns false for a pair of modes,
41577     suboptimal code can result if this hook returns true for the
41578     corresponding mode sizes.  Making this hook return false in such
41579     cases may improve things.
41580
41581 -- Target Hook: int TARGET_MODE_REP_EXTENDED (scalar_int_mode MODE,
41582          scalar_int_mode REP_MODE)
41583     The representation of an integral mode can be such that the values
41584     are always extended to a wider integral mode.  Return 'SIGN_EXTEND'
41585     if values of MODE are represented in sign-extended form to
41586     REP_MODE.  Return 'UNKNOWN' otherwise.  (Currently, none of the
41587     targets use zero-extended representation this way so unlike
41588     'LOAD_EXTEND_OP', 'TARGET_MODE_REP_EXTENDED' is expected to return
41589     either 'SIGN_EXTEND' or 'UNKNOWN'.  Also no target extends MODE to
41590     REP_MODE so that REP_MODE is not the next widest integral mode and
41591     currently we take advantage of this fact.)
41592
41593     Similarly to 'LOAD_EXTEND_OP' you may return a non-'UNKNOWN' value
41594     even if the extension is not performed on certain hard registers as
41595     long as for the 'REGNO_REG_CLASS' of these hard registers
41596     'TARGET_CAN_CHANGE_MODE_CLASS' returns false.
41597
41598     Note that 'TARGET_MODE_REP_EXTENDED' and 'LOAD_EXTEND_OP' describe
41599     two related properties.  If you define 'TARGET_MODE_REP_EXTENDED
41600     (mode, word_mode)' you probably also want to define 'LOAD_EXTEND_OP
41601     (mode)' to return the same type of extension.
41602
41603     In order to enforce the representation of 'mode',
41604     'TARGET_TRULY_NOOP_TRUNCATION' should return false when truncating
41605     to 'mode'.
41606
41607 -- Target Hook: bool TARGET_SETJMP_PRESERVES_NONVOLATILE_REGS_P (void)
41608     On some targets, it is assumed that the compiler will spill all
41609     pseudos that are live across a call to 'setjmp', while other
41610     targets treat 'setjmp' calls as normal function calls.
41611
41612     This hook returns false if 'setjmp' calls do not preserve all
41613     non-volatile registers so that gcc that must spill all pseudos that
41614     are live across 'setjmp' calls.  Define this to return true if the
41615     target does not need to spill all pseudos live across 'setjmp'
41616     calls.  The default implementation conservatively assumes all
41617     pseudos must be spilled across 'setjmp' calls.
41618
41619 -- Macro: STORE_FLAG_VALUE
41620     A C expression describing the value returned by a comparison
41621     operator with an integral mode and stored by a store-flag
41622     instruction ('cstoreMODE4') when the condition is true.  This
41623     description must apply to _all_ the 'cstoreMODE4' patterns and all
41624     the comparison operators whose results have a 'MODE_INT' mode.
41625
41626     A value of 1 or -1 means that the instruction implementing the
41627     comparison operator returns exactly 1 or -1 when the comparison is
41628     true and 0 when the comparison is false.  Otherwise, the value
41629     indicates which bits of the result are guaranteed to be 1 when the
41630     comparison is true.  This value is interpreted in the mode of the
41631     comparison operation, which is given by the mode of the first
41632     operand in the 'cstoreMODE4' pattern.  Either the low bit or the
41633     sign bit of 'STORE_FLAG_VALUE' be on.  Presently, only those bits
41634     are used by the compiler.
41635
41636     If 'STORE_FLAG_VALUE' is neither 1 or -1, the compiler will
41637     generate code that depends only on the specified bits.  It can also
41638     replace comparison operators with equivalent operations if they
41639     cause the required bits to be set, even if the remaining bits are
41640     undefined.  For example, on a machine whose comparison operators
41641     return an 'SImode' value and where 'STORE_FLAG_VALUE' is defined as
41642     '0x80000000', saying that just the sign bit is relevant, the
41643     expression
41644
41645          (ne:SI (and:SI X (const_int POWER-OF-2)) (const_int 0))
41646
41647     can be converted to
41648
41649          (ashift:SI X (const_int N))
41650
41651     where N is the appropriate shift count to move the bit being tested
41652     into the sign bit.
41653
41654     There is no way to describe a machine that always sets the
41655     low-order bit for a true value, but does not guarantee the value of
41656     any other bits, but we do not know of any machine that has such an
41657     instruction.  If you are trying to port GCC to such a machine,
41658     include an instruction to perform a logical-and of the result with
41659     1 in the pattern for the comparison operators and let us know at
41660     <gcc@gcc.gnu.org>.
41661
41662     Often, a machine will have multiple instructions that obtain a
41663     value from a comparison (or the condition codes).  Here are rules
41664     to guide the choice of value for 'STORE_FLAG_VALUE', and hence the
41665     instructions to be used:
41666
41667        * Use the shortest sequence that yields a valid definition for
41668          'STORE_FLAG_VALUE'.  It is more efficient for the compiler to
41669          "normalize" the value (convert it to, e.g., 1 or 0) than for
41670          the comparison operators to do so because there may be
41671          opportunities to combine the normalization with other
41672          operations.
41673
41674        * For equal-length sequences, use a value of 1 or -1, with -1
41675          being slightly preferred on machines with expensive jumps and
41676          1 preferred on other machines.
41677
41678        * As a second choice, choose a value of '0x80000001' if
41679          instructions exist that set both the sign and low-order bits
41680          but do not define the others.
41681
41682        * Otherwise, use a value of '0x80000000'.
41683
41684     Many machines can produce both the value chosen for
41685     'STORE_FLAG_VALUE' and its negation in the same number of
41686     instructions.  On those machines, you should also define a pattern
41687     for those cases, e.g., one matching
41688
41689          (set A (neg:M (ne:M B C)))
41690
41691     Some machines can also perform 'and' or 'plus' operations on
41692     condition code values with less instructions than the corresponding
41693     'cstoreMODE4' insn followed by 'and' or 'plus'.  On those machines,
41694     define the appropriate patterns.  Use the names 'incscc' and
41695     'decscc', respectively, for the patterns which perform 'plus' or
41696     'minus' operations on condition code values.  See 'rs6000.md' for
41697     some examples.  The GNU Superoptimizer can be used to find such
41698     instruction sequences on other machines.
41699
41700     If this macro is not defined, the default value, 1, is used.  You
41701     need not define 'STORE_FLAG_VALUE' if the machine has no store-flag
41702     instructions, or if the value generated by these instructions is 1.
41703
41704 -- Macro: FLOAT_STORE_FLAG_VALUE (MODE)
41705     A C expression that gives a nonzero 'REAL_VALUE_TYPE' value that is
41706     returned when comparison operators with floating-point results are
41707     true.  Define this macro on machines that have comparison
41708     operations that return floating-point values.  If there are no such
41709     operations, do not define this macro.
41710
41711 -- Macro: VECTOR_STORE_FLAG_VALUE (MODE)
41712     A C expression that gives a rtx representing the nonzero true
41713     element for vector comparisons.  The returned rtx should be valid
41714     for the inner mode of MODE which is guaranteed to be a vector mode.
41715     Define this macro on machines that have vector comparison
41716     operations that return a vector result.  If there are no such
41717     operations, do not define this macro.  Typically, this macro is
41718     defined as 'const1_rtx' or 'constm1_rtx'.  This macro may return
41719     'NULL_RTX' to prevent the compiler optimizing such vector
41720     comparison operations for the given mode.
41721
41722 -- Macro: CLZ_DEFINED_VALUE_AT_ZERO (MODE, VALUE)
41723 -- Macro: CTZ_DEFINED_VALUE_AT_ZERO (MODE, VALUE)
41724     A C expression that indicates whether the architecture defines a
41725     value for 'clz' or 'ctz' with a zero operand.  A result of '0'
41726     indicates the value is undefined.  If the value is defined for only
41727     the RTL expression, the macro should evaluate to '1'; if the value
41728     applies also to the corresponding optab entry (which is normally
41729     the case if it expands directly into the corresponding RTL), then
41730     the macro should evaluate to '2'.  In the cases where the value is
41731     defined, VALUE should be set to this value.
41732
41733     If this macro is not defined, the value of 'clz' or 'ctz' at zero
41734     is assumed to be undefined.
41735
41736     This macro must be defined if the target's expansion for 'ffs'
41737     relies on a particular value to get correct results.  Otherwise it
41738     is not necessary, though it may be used to optimize some corner
41739     cases, and to provide a default expansion for the 'ffs' optab.
41740
41741     Note that regardless of this macro the "definedness" of 'clz' and
41742     'ctz' at zero do _not_ extend to the builtin functions visible to
41743     the user.  Thus one may be free to adjust the value at will to
41744     match the target expansion of these operations without fear of
41745     breaking the API.
41746
41747 -- Macro: Pmode
41748     An alias for the machine mode for pointers.  On most machines,
41749     define this to be the integer mode corresponding to the width of a
41750     hardware pointer; 'SImode' on 32-bit machine or 'DImode' on 64-bit
41751     machines.  On some machines you must define this to be one of the
41752     partial integer modes, such as 'PSImode'.
41753
41754     The width of 'Pmode' must be at least as large as the value of
41755     'POINTER_SIZE'.  If it is not equal, you must define the macro
41756     'POINTERS_EXTEND_UNSIGNED' to specify how pointers are extended to
41757     'Pmode'.
41758
41759 -- Macro: FUNCTION_MODE
41760     An alias for the machine mode used for memory references to
41761     functions being called, in 'call' RTL expressions.  On most CISC
41762     machines, where an instruction can begin at any byte address, this
41763     should be 'QImode'.  On most RISC machines, where all instructions
41764     have fixed size and alignment, this should be a mode with the same
41765     size and alignment as the machine instruction words - typically
41766     'SImode' or 'HImode'.
41767
41768 -- Macro: STDC_0_IN_SYSTEM_HEADERS
41769     In normal operation, the preprocessor expands '__STDC__' to the
41770     constant 1, to signify that GCC conforms to ISO Standard C.  On
41771     some hosts, like Solaris, the system compiler uses a different
41772     convention, where '__STDC__' is normally 0, but is 1 if the user
41773     specifies strict conformance to the C Standard.
41774
41775     Defining 'STDC_0_IN_SYSTEM_HEADERS' makes GNU CPP follows the host
41776     convention when processing system header files, but when processing
41777     user files '__STDC__' will always expand to 1.
41778
41779 -- C Target Hook: const char * TARGET_C_PREINCLUDE (void)
41780     Define this hook to return the name of a header file to be included
41781     at the start of all compilations, as if it had been included with
41782     '#include <FILE>'.  If this hook returns 'NULL', or is not defined,
41783     or the header is not found, or if the user specifies
41784     '-ffreestanding' or '-nostdinc', no header is included.
41785
41786     This hook can be used together with a header provided by the system
41787     C library to implement ISO C requirements for certain macros to be
41788     predefined that describe properties of the whole implementation
41789     rather than just the compiler.
41790
41791 -- C Target Hook: bool TARGET_CXX_IMPLICIT_EXTERN_C (const char*)
41792     Define this hook to add target-specific C++ implicit extern C
41793     functions.  If this function returns true for the name of a
41794     file-scope function, that function implicitly gets extern "C"
41795     linkage rather than whatever language linkage the declaration would
41796     normally have.  An example of such function is WinMain on Win32
41797     targets.
41798
41799 -- Macro: SYSTEM_IMPLICIT_EXTERN_C
41800     Define this macro if the system header files do not support C++.
41801     This macro handles system header files by pretending that system
41802     header files are enclosed in 'extern "C" {...}'.
41803
41804 -- Macro: REGISTER_TARGET_PRAGMAS ()
41805     Define this macro if you want to implement any target-specific
41806     pragmas.  If defined, it is a C expression which makes a series of
41807     calls to 'c_register_pragma' or 'c_register_pragma_with_expansion'
41808     for each pragma.  The macro may also do any setup required for the
41809     pragmas.
41810
41811     The primary reason to define this macro is to provide compatibility
41812     with other compilers for the same target.  In general, we
41813     discourage definition of target-specific pragmas for GCC.
41814
41815     If the pragma can be implemented by attributes then you should
41816     consider defining the target hook 'TARGET_INSERT_ATTRIBUTES' as
41817     well.
41818
41819     Preprocessor macros that appear on pragma lines are not expanded.
41820     All '#pragma' directives that do not match any registered pragma
41821     are silently ignored, unless the user specifies
41822     '-Wunknown-pragmas'.
41823
41824 -- Function: void c_register_pragma (const char *SPACE, const char
41825          *NAME, void (*CALLBACK) (struct cpp_reader *))
41826 -- Function: void c_register_pragma_with_expansion (const char *SPACE,
41827          const char *NAME, void (*CALLBACK) (struct cpp_reader *))
41828
41829     Each call to 'c_register_pragma' or
41830     'c_register_pragma_with_expansion' establishes one pragma.  The
41831     CALLBACK routine will be called when the preprocessor encounters a
41832     pragma of the form
41833
41834          #pragma [SPACE] NAME ...
41835
41836     SPACE is the case-sensitive namespace of the pragma, or 'NULL' to
41837     put the pragma in the global namespace.  The callback routine
41838     receives PFILE as its first argument, which can be passed on to
41839     cpplib's functions if necessary.  You can lex tokens after the NAME
41840     by calling 'pragma_lex'.  Tokens that are not read by the callback
41841     will be silently ignored.  The end of the line is indicated by a
41842     token of type 'CPP_EOF'.  Macro expansion occurs on the arguments
41843     of pragmas registered with 'c_register_pragma_with_expansion' but
41844     not on the arguments of pragmas registered with
41845     'c_register_pragma'.
41846
41847     Note that the use of 'pragma_lex' is specific to the C and C++
41848     compilers.  It will not work in the Java or Fortran compilers, or
41849     any other language compilers for that matter.  Thus if 'pragma_lex'
41850     is going to be called from target-specific code, it must only be
41851     done so when building the C and C++ compilers.  This can be done by
41852     defining the variables 'c_target_objs' and 'cxx_target_objs' in the
41853     target entry in the 'config.gcc' file.  These variables should name
41854     the target-specific, language-specific object file which contains
41855     the code that uses 'pragma_lex'.  Note it will also be necessary to
41856     add a rule to the makefile fragment pointed to by 'tmake_file' that
41857     shows how to build this object file.
41858
41859 -- Macro: HANDLE_PRAGMA_PACK_WITH_EXPANSION
41860     Define this macro if macros should be expanded in the arguments of
41861     '#pragma pack'.
41862
41863 -- Macro: TARGET_DEFAULT_PACK_STRUCT
41864     If your target requires a structure packing default other than 0
41865     (meaning the machine default), define this macro to the necessary
41866     value (in bytes).  This must be a value that would also be valid to
41867     use with '#pragma pack()' (that is, a small power of two).
41868
41869 -- Macro: DOLLARS_IN_IDENTIFIERS
41870     Define this macro to control use of the character '$' in identifier
41871     names for the C family of languages.  0 means '$' is not allowed by
41872     default; 1 means it is allowed.  1 is the default; there is no need
41873     to define this macro in that case.
41874
41875 -- Macro: INSN_SETS_ARE_DELAYED (INSN)
41876     Define this macro as a C expression that is nonzero if it is safe
41877     for the delay slot scheduler to place instructions in the delay
41878     slot of INSN, even if they appear to use a resource set or
41879     clobbered in INSN.  INSN is always a 'jump_insn' or an 'insn'; GCC
41880     knows that every 'call_insn' has this behavior.  On machines where
41881     some 'insn' or 'jump_insn' is really a function call and hence has
41882     this behavior, you should define this macro.
41883
41884     You need not define this macro if it would always return zero.
41885
41886 -- Macro: INSN_REFERENCES_ARE_DELAYED (INSN)
41887     Define this macro as a C expression that is nonzero if it is safe
41888     for the delay slot scheduler to place instructions in the delay
41889     slot of INSN, even if they appear to set or clobber a resource
41890     referenced in INSN.  INSN is always a 'jump_insn' or an 'insn'.  On
41891     machines where some 'insn' or 'jump_insn' is really a function call
41892     and its operands are registers whose use is actually in the
41893     subroutine it calls, you should define this macro.  Doing so allows
41894     the delay slot scheduler to move instructions which copy arguments
41895     into the argument registers into the delay slot of INSN.
41896
41897     You need not define this macro if it would always return zero.
41898
41899 -- Macro: MULTIPLE_SYMBOL_SPACES
41900     Define this macro as a C expression that is nonzero if, in some
41901     cases, global symbols from one translation unit may not be bound to
41902     undefined symbols in another translation unit without user
41903     intervention.  For instance, under Microsoft Windows symbols must
41904     be explicitly imported from shared libraries (DLLs).
41905
41906     You need not define this macro if it would always evaluate to zero.
41907
41908 -- Target Hook: rtx_insn * TARGET_MD_ASM_ADJUST (vec<rtx>& OUTPUTS,
41909          vec<rtx>& INPUTS, vec<const char *>& CONSTRAINTS, vec<rtx>&
41910          CLOBBERS, HARD_REG_SET& CLOBBERED_REGS)
41911     This target hook may add "clobbers" to CLOBBERS and CLOBBERED_REGS
41912     for any hard regs the port wishes to automatically clobber for an
41913     asm.  The OUTPUTS and INPUTS may be inspected to avoid clobbering a
41914     register that is already used by the asm.
41915
41916     It may modify the OUTPUTS, INPUTS, and CONSTRAINTS as necessary for
41917     other pre-processing.  In this case the return value is a sequence
41918     of insns to emit after the asm.
41919
41920 -- Macro: MATH_LIBRARY
41921     Define this macro as a C string constant for the linker argument to
41922     link in the system math library, minus the initial '"-l"', or '""'
41923     if the target does not have a separate math library.
41924
41925     You need only define this macro if the default of '"m"' is wrong.
41926
41927 -- Macro: LIBRARY_PATH_ENV
41928     Define this macro as a C string constant for the environment
41929     variable that specifies where the linker should look for libraries.
41930
41931     You need only define this macro if the default of '"LIBRARY_PATH"'
41932     is wrong.
41933
41934 -- Macro: TARGET_POSIX_IO
41935     Define this macro if the target supports the following POSIX file
41936     functions, access, mkdir and file locking with fcntl / F_SETLKW.
41937     Defining 'TARGET_POSIX_IO' will enable the test coverage code to
41938     use file locking when exiting a program, which avoids race
41939     conditions if the program has forked.  It will also create
41940     directories at run-time for cross-profiling.
41941
41942 -- Macro: MAX_CONDITIONAL_EXECUTE
41943
41944     A C expression for the maximum number of instructions to execute
41945     via conditional execution instructions instead of a branch.  A
41946     value of 'BRANCH_COST'+1 is the default if the machine does not use
41947     cc0, and 1 if it does use cc0.
41948
41949 -- Macro: IFCVT_MODIFY_TESTS (CE_INFO, TRUE_EXPR, FALSE_EXPR)
41950     Used if the target needs to perform machine-dependent modifications
41951     on the conditionals used for turning basic blocks into
41952     conditionally executed code.  CE_INFO points to a data structure,
41953     'struct ce_if_block', which contains information about the
41954     currently processed blocks.  TRUE_EXPR and FALSE_EXPR are the tests
41955     that are used for converting the then-block and the else-block,
41956     respectively.  Set either TRUE_EXPR or FALSE_EXPR to a null pointer
41957     if the tests cannot be converted.
41958
41959 -- Macro: IFCVT_MODIFY_MULTIPLE_TESTS (CE_INFO, BB, TRUE_EXPR,
41960          FALSE_EXPR)
41961     Like 'IFCVT_MODIFY_TESTS', but used when converting more
41962     complicated if-statements into conditions combined by 'and' and
41963     'or' operations.  BB contains the basic block that contains the
41964     test that is currently being processed and about to be turned into
41965     a condition.
41966
41967 -- Macro: IFCVT_MODIFY_INSN (CE_INFO, PATTERN, INSN)
41968     A C expression to modify the PATTERN of an INSN that is to be
41969     converted to conditional execution format.  CE_INFO points to a
41970     data structure, 'struct ce_if_block', which contains information
41971     about the currently processed blocks.
41972
41973 -- Macro: IFCVT_MODIFY_FINAL (CE_INFO)
41974     A C expression to perform any final machine dependent modifications
41975     in converting code to conditional execution.  The involved basic
41976     blocks can be found in the 'struct ce_if_block' structure that is
41977     pointed to by CE_INFO.
41978
41979 -- Macro: IFCVT_MODIFY_CANCEL (CE_INFO)
41980     A C expression to cancel any machine dependent modifications in
41981     converting code to conditional execution.  The involved basic
41982     blocks can be found in the 'struct ce_if_block' structure that is
41983     pointed to by CE_INFO.
41984
41985 -- Macro: IFCVT_MACHDEP_INIT (CE_INFO)
41986     A C expression to initialize any machine specific data for
41987     if-conversion of the if-block in the 'struct ce_if_block' structure
41988     that is pointed to by CE_INFO.
41989
41990 -- Target Hook: void TARGET_MACHINE_DEPENDENT_REORG (void)
41991     If non-null, this hook performs a target-specific pass over the
41992     instruction stream.  The compiler will run it at all optimization
41993     levels, just before the point at which it normally does
41994     delayed-branch scheduling.
41995
41996     The exact purpose of the hook varies from target to target.  Some
41997     use it to do transformations that are necessary for correctness,
41998     such as laying out in-function constant pools or avoiding hardware
41999     hazards.  Others use it as an opportunity to do some
42000     machine-dependent optimizations.
42001
42002     You need not implement the hook if it has nothing to do.  The
42003     default definition is null.
42004
42005 -- Target Hook: void TARGET_INIT_BUILTINS (void)
42006     Define this hook if you have any machine-specific built-in
42007     functions that need to be defined.  It should be a function that
42008     performs the necessary setup.
42009
42010     Machine specific built-in functions can be useful to expand special
42011     machine instructions that would otherwise not normally be generated
42012     because they have no equivalent in the source language (for
42013     example, SIMD vector instructions or prefetch instructions).
42014
42015     To create a built-in function, call the function
42016     'lang_hooks.builtin_function' which is defined by the language
42017     front end.  You can use any type nodes set up by
42018     'build_common_tree_nodes'; only language front ends that use those
42019     two functions will call 'TARGET_INIT_BUILTINS'.
42020
42021 -- Target Hook: tree TARGET_BUILTIN_DECL (unsigned CODE, bool
42022          INITIALIZE_P)
42023     Define this hook if you have any machine-specific built-in
42024     functions that need to be defined.  It should be a function that
42025     returns the builtin function declaration for the builtin function
42026     code CODE.  If there is no such builtin and it cannot be
42027     initialized at this time if INITIALIZE_P is true the function
42028     should return 'NULL_TREE'.  If CODE is out of range the function
42029     should return 'error_mark_node'.
42030
42031 -- Target Hook: rtx TARGET_EXPAND_BUILTIN (tree EXP, rtx TARGET, rtx
42032          SUBTARGET, machine_mode MODE, int IGNORE)
42033
42034     Expand a call to a machine specific built-in function that was set
42035     up by 'TARGET_INIT_BUILTINS'.  EXP is the expression for the
42036     function call; the result should go to TARGET if that is
42037     convenient, and have mode MODE if that is convenient.  SUBTARGET
42038     may be used as the target for computing one of EXP's operands.
42039     IGNORE is nonzero if the value is to be ignored.  This function
42040     should return the result of the call to the built-in function.
42041
42042 -- Target Hook: tree TARGET_RESOLVE_OVERLOADED_BUILTIN (unsigned int
42043          LOC, tree FNDECL, void *ARGLIST)
42044     Select a replacement for a machine specific built-in function that
42045     was set up by 'TARGET_INIT_BUILTINS'.  This is done _before_
42046     regular type checking, and so allows the target to implement a
42047     crude form of function overloading.  FNDECL is the declaration of
42048     the built-in function.  ARGLIST is the list of arguments passed to
42049     the built-in function.  The result is a complete expression that
42050     implements the operation, usually another 'CALL_EXPR'.  ARGLIST
42051     really has type 'VEC(tree,gc)*'
42052
42053 -- Target Hook: bool TARGET_CHECK_BUILTIN_CALL (location_t LOC,
42054          vec<location_t> ARG_LOC, tree FNDECL, tree ORIG_FNDECL,
42055          unsigned int NARGS, tree *ARGS)
42056     Perform semantic checking on a call to a machine-specific built-in
42057     function after its arguments have been constrained to the function
42058     signature.  Return true if the call is valid, otherwise report an
42059     error and return false.
42060
42061     This hook is called after 'TARGET_RESOLVE_OVERLOADED_BUILTIN'.  The
42062     call was originally to built-in function ORIG_FNDECL, but after the
42063     optional 'TARGET_RESOLVE_OVERLOADED_BUILTIN' step is now to
42064     built-in function FNDECL.  LOC is the location of the call and ARGS
42065     is an array of function arguments, of which there are NARGS.
42066     ARG_LOC specifies the location of each argument.
42067
42068 -- Target Hook: tree TARGET_FOLD_BUILTIN (tree FNDECL, int N_ARGS, tree
42069          *ARGP, bool IGNORE)
42070     Fold a call to a machine specific built-in function that was set up
42071     by 'TARGET_INIT_BUILTINS'.  FNDECL is the declaration of the
42072     built-in function.  N_ARGS is the number of arguments passed to the
42073     function; the arguments themselves are pointed to by ARGP.  The
42074     result is another tree, valid for both GIMPLE and GENERIC,
42075     containing a simplified expression for the call's result.  If
42076     IGNORE is true the value will be ignored.
42077
42078 -- Target Hook: bool TARGET_GIMPLE_FOLD_BUILTIN (gimple_stmt_iterator
42079          *GSI)
42080     Fold a call to a machine specific built-in function that was set up
42081     by 'TARGET_INIT_BUILTINS'.  GSI points to the gimple statement
42082     holding the function call.  Returns true if any change was made to
42083     the GIMPLE stream.
42084
42085 -- Target Hook: int TARGET_COMPARE_VERSION_PRIORITY (tree DECL1, tree
42086          DECL2)
42087     This hook is used to compare the target attributes in two functions
42088     to determine which function's features get higher priority.  This
42089     is used during function multi-versioning to figure out the order in
42090     which two versions must be dispatched.  A function version with a
42091     higher priority is checked for dispatching earlier.  DECL1 and
42092     DECL2 are the two function decls that will be compared.
42093
42094 -- Target Hook: tree TARGET_GET_FUNCTION_VERSIONS_DISPATCHER (void
42095          *DECL)
42096     This hook is used to get the dispatcher function for a set of
42097     function versions.  The dispatcher function is called to invoke the
42098     right function version at run-time.  DECL is one version from a set
42099     of semantically identical versions.
42100
42101 -- Target Hook: tree TARGET_GENERATE_VERSION_DISPATCHER_BODY (void
42102          *ARG)
42103     This hook is used to generate the dispatcher logic to invoke the
42104     right function version at run-time for a given set of function
42105     versions.  ARG points to the callgraph node of the dispatcher
42106     function whose body must be generated.
42107
42108 -- Target Hook: bool TARGET_PREDICT_DOLOOP_P (class loop *LOOP)
42109     Return true if we can predict it is possible to use a low-overhead
42110     loop for a particular loop.  The parameter LOOP is a pointer to the
42111     loop.  This target hook is required only when the target supports
42112     low-overhead loops, and will help ivopts to make some decisions.
42113     The default version of this hook returns false.
42114
42115 -- Target Hook: bool TARGET_HAVE_COUNT_REG_DECR_P
42116     Return true if the target supports hardware count register for
42117     decrement and branch.  The default value is false.
42118
42119 -- Target Hook: int64_t TARGET_DOLOOP_COST_FOR_GENERIC
42120     One IV candidate dedicated for doloop is introduced in IVOPTs, we
42121     can calculate the computation cost of adopting it to any generic IV
42122     use by function get_computation_cost as before.  But for targets
42123     which have hardware count register support for decrement and
42124     branch, it may have to move IV value from hardware count register
42125     to general purpose register while doloop IV candidate is used for
42126     generic IV uses.  It probably takes expensive penalty.  This hook
42127     allows target owners to define the cost for this especially for
42128     generic IV uses.  The default value is zero.
42129
42130 -- Target Hook: int64_t TARGET_DOLOOP_COST_FOR_ADDRESS
42131     One IV candidate dedicated for doloop is introduced in IVOPTs, we
42132     can calculate the computation cost of adopting it to any address IV
42133     use by function get_computation_cost as before.  But for targets
42134     which have hardware count register support for decrement and
42135     branch, it may have to move IV value from hardware count register
42136     to general purpose register while doloop IV candidate is used for
42137     address IV uses.  It probably takes expensive penalty.  This hook
42138     allows target owners to define the cost for this escpecially for
42139     address IV uses.  The default value is zero.
42140
42141 -- Target Hook: bool TARGET_CAN_USE_DOLOOP_P (const widest_int
42142          &ITERATIONS, const widest_int &ITERATIONS_MAX, unsigned int
42143          LOOP_DEPTH, bool ENTERED_AT_TOP)
42144     Return true if it is possible to use low-overhead loops
42145     ('doloop_end' and 'doloop_begin') for a particular loop.
42146     ITERATIONS gives the exact number of iterations, or 0 if not known.
42147     ITERATIONS_MAX gives the maximum number of iterations, or 0 if not
42148     known.  LOOP_DEPTH is the nesting depth of the loop, with 1 for
42149     innermost loops, 2 for loops that contain innermost loops, and so
42150     on.  ENTERED_AT_TOP is true if the loop is only entered from the
42151     top.
42152
42153     This hook is only used if 'doloop_end' is available.  The default
42154     implementation returns true.  You can use
42155     'can_use_doloop_if_innermost' if the loop must be the innermost,
42156     and if there are no other restrictions.
42157
42158 -- Target Hook: const char * TARGET_INVALID_WITHIN_DOLOOP (const
42159          rtx_insn *INSN)
42160
42161     Take an instruction in INSN and return NULL if it is valid within a
42162     low-overhead loop, otherwise return a string explaining why doloop
42163     could not be applied.
42164
42165     Many targets use special registers for low-overhead looping.  For
42166     any instruction that clobbers these this function should return a
42167     string indicating the reason why the doloop could not be applied.
42168     By default, the RTL loop optimizer does not use a present doloop
42169     pattern for loops containing function calls or branch on table
42170     instructions.
42171
42172 -- Target Hook: bool TARGET_LEGITIMATE_COMBINED_INSN (rtx_insn *INSN)
42173     Take an instruction in INSN and return 'false' if the instruction
42174     is not appropriate as a combination of two or more instructions.
42175     The default is to accept all instructions.
42176
42177 -- Target Hook: bool TARGET_CAN_FOLLOW_JUMP (const rtx_insn *FOLLOWER,
42178          const rtx_insn *FOLLOWEE)
42179     FOLLOWER and FOLLOWEE are JUMP_INSN instructions; return true if
42180     FOLLOWER may be modified to follow FOLLOWEE; false, if it can't.
42181     For example, on some targets, certain kinds of branches can't be
42182     made to follow through a hot/cold partitioning.
42183
42184 -- Target Hook: bool TARGET_COMMUTATIVE_P (const_rtx X, int OUTER_CODE)
42185     This target hook returns 'true' if X is considered to be
42186     commutative.  Usually, this is just COMMUTATIVE_P (X), but the HP
42187     PA doesn't consider PLUS to be commutative inside a MEM.
42188     OUTER_CODE is the rtx code of the enclosing rtl, if known,
42189     otherwise it is UNKNOWN.
42190
42191 -- Target Hook: rtx TARGET_ALLOCATE_INITIAL_VALUE (rtx HARD_REG)
42192
42193     When the initial value of a hard register has been copied in a
42194     pseudo register, it is often not necessary to actually allocate
42195     another register to this pseudo register, because the original hard
42196     register or a stack slot it has been saved into can be used.
42197     'TARGET_ALLOCATE_INITIAL_VALUE' is called at the start of register
42198     allocation once for each hard register that had its initial value
42199     copied by using 'get_func_hard_reg_initial_val' or
42200     'get_hard_reg_initial_val'.  Possible values are 'NULL_RTX', if you
42201     don't want to do any special allocation, a 'REG' rtx--that would
42202     typically be the hard register itself, if it is known not to be
42203     clobbered--or a 'MEM'.  If you are returning a 'MEM', this is only
42204     a hint for the allocator; it might decide to use another register
42205     anyways.  You may use 'current_function_is_leaf' or 'REG_N_SETS' in
42206     the hook to determine if the hard register in question will not be
42207     clobbered.  The default value of this hook is 'NULL', which
42208     disables any special allocation.
42209
42210 -- Target Hook: int TARGET_UNSPEC_MAY_TRAP_P (const_rtx X, unsigned
42211          FLAGS)
42212     This target hook returns nonzero if X, an 'unspec' or
42213     'unspec_volatile' operation, might cause a trap.  Targets can use
42214     this hook to enhance precision of analysis for 'unspec' and
42215     'unspec_volatile' operations.  You may call 'may_trap_p_1' to
42216     analyze inner elements of X in which case FLAGS should be passed
42217     along.
42218
42219 -- Target Hook: void TARGET_SET_CURRENT_FUNCTION (tree DECL)
42220     The compiler invokes this hook whenever it changes its current
42221     function context ('cfun').  You can define this function if the
42222     back end needs to perform any initialization or reset actions on a
42223     per-function basis.  For example, it may be used to implement
42224     function attributes that affect register usage or code generation
42225     patterns.  The argument DECL is the declaration for the new
42226     function context, and may be null to indicate that the compiler has
42227     left a function context and is returning to processing at the top
42228     level.  The default hook function does nothing.
42229
42230     GCC sets 'cfun' to a dummy function context during initialization
42231     of some parts of the back end.  The hook function is not invoked in
42232     this situation; you need not worry about the hook being invoked
42233     recursively, or when the back end is in a partially-initialized
42234     state.  'cfun' might be 'NULL' to indicate processing at top level,
42235     outside of any function scope.
42236
42237 -- Macro: TARGET_OBJECT_SUFFIX
42238     Define this macro to be a C string representing the suffix for
42239     object files on your target machine.  If you do not define this
42240     macro, GCC will use '.o' as the suffix for object files.
42241
42242 -- Macro: TARGET_EXECUTABLE_SUFFIX
42243     Define this macro to be a C string representing the suffix to be
42244     automatically added to executable files on your target machine.  If
42245     you do not define this macro, GCC will use the null string as the
42246     suffix for executable files.
42247
42248 -- Macro: COLLECT_EXPORT_LIST
42249     If defined, 'collect2' will scan the individual object files
42250     specified on its command line and create an export list for the
42251     linker.  Define this macro for systems like AIX, where the linker
42252     discards object files that are not referenced from 'main' and uses
42253     export lists.
42254
42255 -- Target Hook: bool TARGET_CANNOT_MODIFY_JUMPS_P (void)
42256     This target hook returns 'true' past the point in which new jump
42257     instructions could be created.  On machines that require a register
42258     for every jump such as the SHmedia ISA of SH5, this point would
42259     typically be reload, so this target hook should be defined to a
42260     function such as:
42261
42262          static bool
42263          cannot_modify_jumps_past_reload_p ()
42264          {
42265            return (reload_completed || reload_in_progress);
42266          }
42267
42268 -- Target Hook: bool TARGET_HAVE_CONDITIONAL_EXECUTION (void)
42269     This target hook returns true if the target supports conditional
42270     execution.  This target hook is required only when the target has
42271     several different modes and they have different conditional
42272     execution capability, such as ARM.
42273
42274 -- Target Hook: rtx TARGET_GEN_CCMP_FIRST (rtx_insn **PREP_SEQ,
42275          rtx_insn **GEN_SEQ, int CODE, tree OP0, tree OP1)
42276     This function prepares to emit a comparison insn for the first
42277     compare in a sequence of conditional comparisions.  It returns an
42278     appropriate comparison with 'CC' for passing to 'gen_ccmp_next' or
42279     'cbranch_optab'.  The insns to prepare the compare are saved in
42280     PREP_SEQ and the compare insns are saved in GEN_SEQ.  They will be
42281     emitted when all the compares in the conditional comparision are
42282     generated without error.  CODE is the 'rtx_code' of the compare for
42283     OP0 and OP1.
42284
42285 -- Target Hook: rtx TARGET_GEN_CCMP_NEXT (rtx_insn **PREP_SEQ, rtx_insn
42286          **GEN_SEQ, rtx PREV, int CMP_CODE, tree OP0, tree OP1, int
42287          BIT_CODE)
42288     This function prepares to emit a conditional comparison within a
42289     sequence of conditional comparisons.  It returns an appropriate
42290     comparison with 'CC' for passing to 'gen_ccmp_next' or
42291     'cbranch_optab'.  The insns to prepare the compare are saved in
42292     PREP_SEQ and the compare insns are saved in GEN_SEQ.  They will be
42293     emitted when all the compares in the conditional comparision are
42294     generated without error.  The PREV expression is the result of a
42295     prior call to 'gen_ccmp_first' or 'gen_ccmp_next'.  It may return
42296     'NULL' if the combination of PREV and this comparison is not
42297     supported, otherwise the result must be appropriate for passing to
42298     'gen_ccmp_next' or 'cbranch_optab'.  CODE is the 'rtx_code' of the
42299     compare for OP0 and OP1.  BIT_CODE is 'AND' or 'IOR', which is the
42300     op on the compares.
42301
42302 -- Target Hook: unsigned TARGET_LOOP_UNROLL_ADJUST (unsigned NUNROLL,
42303          class loop *LOOP)
42304     This target hook returns a new value for the number of times LOOP
42305     should be unrolled.  The parameter NUNROLL is the number of times
42306     the loop is to be unrolled.  The parameter LOOP is a pointer to the
42307     loop, which is going to be checked for unrolling.  This target hook
42308     is required only when the target has special constraints like
42309     maximum number of memory accesses.
42310
42311 -- Macro: POWI_MAX_MULTS
42312     If defined, this macro is interpreted as a signed integer C
42313     expression that specifies the maximum number of floating point
42314     multiplications that should be emitted when expanding
42315     exponentiation by an integer constant inline.  When this value is
42316     defined, exponentiation requiring more than this number of
42317     multiplications is implemented by calling the system library's
42318     'pow', 'powf' or 'powl' routines.  The default value places no
42319     upper bound on the multiplication count.
42320
42321 -- Macro: void TARGET_EXTRA_INCLUDES (const char *SYSROOT, const char
42322          *IPREFIX, int STDINC)
42323     This target hook should register any extra include files for the
42324     target.  The parameter STDINC indicates if normal include files are
42325     present.  The parameter SYSROOT is the system root directory.  The
42326     parameter IPREFIX is the prefix for the gcc directory.
42327
42328 -- Macro: void TARGET_EXTRA_PRE_INCLUDES (const char *SYSROOT, const
42329          char *IPREFIX, int STDINC)
42330     This target hook should register any extra include files for the
42331     target before any standard headers.  The parameter STDINC indicates
42332     if normal include files are present.  The parameter SYSROOT is the
42333     system root directory.  The parameter IPREFIX is the prefix for the
42334     gcc directory.
42335
42336 -- Macro: void TARGET_OPTF (char *PATH)
42337     This target hook should register special include paths for the
42338     target.  The parameter PATH is the include to register.  On Darwin
42339     systems, this is used for Framework includes, which have semantics
42340     that are different from '-I'.
42341
42342 -- Macro: bool TARGET_USE_LOCAL_THUNK_ALIAS_P (tree FNDECL)
42343     This target macro returns 'true' if it is safe to use a local alias
42344     for a virtual function FNDECL when constructing thunks, 'false'
42345     otherwise.  By default, the macro returns 'true' for all functions,
42346     if a target supports aliases (i.e. defines 'ASM_OUTPUT_DEF'),
42347     'false' otherwise,
42348
42349 -- Macro: TARGET_FORMAT_TYPES
42350     If defined, this macro is the name of a global variable containing
42351     target-specific format checking information for the '-Wformat'
42352     option.  The default is to have no target-specific format checks.
42353
42354 -- Macro: TARGET_N_FORMAT_TYPES
42355     If defined, this macro is the number of entries in
42356     'TARGET_FORMAT_TYPES'.
42357
42358 -- Macro: TARGET_OVERRIDES_FORMAT_ATTRIBUTES
42359     If defined, this macro is the name of a global variable containing
42360     target-specific format overrides for the '-Wformat' option.  The
42361     default is to have no target-specific format overrides.  If
42362     defined, 'TARGET_FORMAT_TYPES' must be defined, too.
42363
42364 -- Macro: TARGET_OVERRIDES_FORMAT_ATTRIBUTES_COUNT
42365     If defined, this macro specifies the number of entries in
42366     'TARGET_OVERRIDES_FORMAT_ATTRIBUTES'.
42367
42368 -- Macro: TARGET_OVERRIDES_FORMAT_INIT
42369     If defined, this macro specifies the optional initialization
42370     routine for target specific customizations of the system printf and
42371     scanf formatter settings.
42372
42373 -- Target Hook: const char * TARGET_INVALID_ARG_FOR_UNPROTOTYPED_FN
42374          (const_tree TYPELIST, const_tree FUNCDECL, const_tree VAL)
42375     If defined, this macro returns the diagnostic message when it is
42376     illegal to pass argument VAL to function FUNCDECL with prototype
42377     TYPELIST.
42378
42379 -- Target Hook: const char * TARGET_INVALID_CONVERSION (const_tree
42380          FROMTYPE, const_tree TOTYPE)
42381     If defined, this macro returns the diagnostic message when it is
42382     invalid to convert from FROMTYPE to TOTYPE, or 'NULL' if validity
42383     should be determined by the front end.
42384
42385 -- Target Hook: const char * TARGET_INVALID_UNARY_OP (int OP,
42386          const_tree TYPE)
42387     If defined, this macro returns the diagnostic message when it is
42388     invalid to apply operation OP (where unary plus is denoted by
42389     'CONVERT_EXPR') to an operand of type TYPE, or 'NULL' if validity
42390     should be determined by the front end.
42391
42392 -- Target Hook: const char * TARGET_INVALID_BINARY_OP (int OP,
42393          const_tree TYPE1, const_tree TYPE2)
42394     If defined, this macro returns the diagnostic message when it is
42395     invalid to apply operation OP to operands of types TYPE1 and TYPE2,
42396     or 'NULL' if validity should be determined by the front end.
42397
42398 -- Target Hook: tree TARGET_PROMOTED_TYPE (const_tree TYPE)
42399     If defined, this target hook returns the type to which values of
42400     TYPE should be promoted when they appear in expressions, analogous
42401     to the integer promotions, or 'NULL_TREE' to use the front end's
42402     normal promotion rules.  This hook is useful when there are
42403     target-specific types with special promotion rules.  This is
42404     currently used only by the C and C++ front ends.
42405
42406 -- Target Hook: tree TARGET_CONVERT_TO_TYPE (tree TYPE, tree EXPR)
42407     If defined, this hook returns the result of converting EXPR to
42408     TYPE.  It should return the converted expression, or 'NULL_TREE' to
42409     apply the front end's normal conversion rules.  This hook is useful
42410     when there are target-specific types with special conversion rules.
42411     This is currently used only by the C and C++ front ends.
42412
42413 -- Target Hook: bool TARGET_VERIFY_TYPE_CONTEXT (location_t LOC,
42414          type_context_kind CONTEXT, const_tree TYPE, bool SILENT_P)
42415     If defined, this hook returns false if there is a target-specific
42416     reason why type TYPE cannot be used in the source language context
42417     described by CONTEXT.  When SILENT_P is false, the hook also
42418     reports an error against LOC for invalid uses of TYPE.
42419
42420     Calls to this hook should be made through the global function
42421     'verify_type_context', which makes the SILENT_P parameter default
42422     to false and also handles 'error_mark_node'.
42423
42424     The default implementation always returns true.
42425
42426 -- Macro: OBJC_JBLEN
42427     This macro determines the size of the objective C jump buffer for
42428     the NeXT runtime.  By default, OBJC_JBLEN is defined to an
42429     innocuous value.
42430
42431 -- Macro: LIBGCC2_UNWIND_ATTRIBUTE
42432     Define this macro if any target-specific attributes need to be
42433     attached to the functions in 'libgcc' that provide low-level
42434     support for call stack unwinding.  It is used in declarations in
42435     'unwind-generic.h' and the associated definitions of those
42436     functions.
42437
42438 -- Target Hook: void TARGET_UPDATE_STACK_BOUNDARY (void)
42439     Define this macro to update the current function stack boundary if
42440     necessary.
42441
42442 -- Target Hook: rtx TARGET_GET_DRAP_RTX (void)
42443     This hook should return an rtx for Dynamic Realign Argument Pointer
42444     (DRAP) if a different argument pointer register is needed to access
42445     the function's argument list due to stack realignment.  Return
42446     'NULL' if no DRAP is needed.
42447
42448 -- Target Hook: bool TARGET_ALLOCATE_STACK_SLOTS_FOR_ARGS (void)
42449     When optimization is disabled, this hook indicates whether or not
42450     arguments should be allocated to stack slots.  Normally, GCC
42451     allocates stacks slots for arguments when not optimizing in order
42452     to make debugging easier.  However, when a function is declared
42453     with '__attribute__((naked))', there is no stack frame, and the
42454     compiler cannot safely move arguments from the registers in which
42455     they are passed to the stack.  Therefore, this hook should return
42456     true in general, but false for naked functions.  The default
42457     implementation always returns true.
42458
42459 -- Target Hook: unsigned HOST_WIDE_INT TARGET_CONST_ANCHOR
42460     On some architectures it can take multiple instructions to
42461     synthesize a constant.  If there is another constant already in a
42462     register that is close enough in value then it is preferable that
42463     the new constant is computed from this register using immediate
42464     addition or subtraction.  We accomplish this through CSE. Besides
42465     the value of the constant we also add a lower and an upper constant
42466     anchor to the available expressions.  These are then queried when
42467     encountering new constants.  The anchors are computed by rounding
42468     the constant up and down to a multiple of the value of
42469     'TARGET_CONST_ANCHOR'.  'TARGET_CONST_ANCHOR' should be the maximum
42470     positive value accepted by immediate-add plus one.  We currently
42471     assume that the value of 'TARGET_CONST_ANCHOR' is a power of 2.
42472     For example, on MIPS, where add-immediate takes a 16-bit signed
42473     value, 'TARGET_CONST_ANCHOR' is set to '0x8000'.  The default value
42474     is zero, which disables this optimization.
42475
42476 -- Target Hook: unsigned HOST_WIDE_INT TARGET_ASAN_SHADOW_OFFSET (void)
42477     Return the offset bitwise ored into shifted address to get
42478     corresponding Address Sanitizer shadow memory address.  NULL if
42479     Address Sanitizer is not supported by the target.
42480
42481 -- Target Hook: unsigned HOST_WIDE_INT TARGET_MEMMODEL_CHECK (unsigned
42482          HOST_WIDE_INT VAL)
42483     Validate target specific memory model mask bits.  When NULL no
42484     target specific memory model bits are allowed.
42485
42486 -- Target Hook: unsigned char TARGET_ATOMIC_TEST_AND_SET_TRUEVAL
42487     This value should be set if the result written by
42488     'atomic_test_and_set' is not exactly 1, i.e. the 'bool' 'true'.
42489
42490 -- Target Hook: bool TARGET_HAS_IFUNC_P (void)
42491     It returns true if the target supports GNU indirect functions.  The
42492     support includes the assembler, linker and dynamic linker.  The
42493     default value of this hook is based on target's libc.
42494
42495 -- Target Hook: unsigned int TARGET_ATOMIC_ALIGN_FOR_MODE (machine_mode
42496          MODE)
42497     If defined, this function returns an appropriate alignment in bits
42498     for an atomic object of machine_mode MODE.  If 0 is returned then
42499     the default alignment for the specified mode is used.
42500
42501 -- Target Hook: void TARGET_ATOMIC_ASSIGN_EXPAND_FENV (tree *HOLD, tree
42502          *CLEAR, tree *UPDATE)
42503     ISO C11 requires atomic compound assignments that may raise
42504     floating-point exceptions to raise exceptions corresponding to the
42505     arithmetic operation whose result was successfully stored in a
42506     compare-and-exchange sequence.  This requires code equivalent to
42507     calls to 'feholdexcept', 'feclearexcept' and 'feupdateenv' to be
42508     generated at appropriate points in the compare-and-exchange
42509     sequence.  This hook should set '*HOLD' to an expression equivalent
42510     to the call to 'feholdexcept', '*CLEAR' to an expression equivalent
42511     to the call to 'feclearexcept' and '*UPDATE' to an expression
42512     equivalent to the call to 'feupdateenv'.  The three expressions are
42513     'NULL_TREE' on entry to the hook and may be left as 'NULL_TREE' if
42514     no code is required in a particular place.  The default
42515     implementation leaves all three expressions as 'NULL_TREE'.  The
42516     '__atomic_feraiseexcept' function from 'libatomic' may be of use as
42517     part of the code generated in '*UPDATE'.
42518
42519 -- Target Hook: void TARGET_RECORD_OFFLOAD_SYMBOL (tree)
42520     Used when offloaded functions are seen in the compilation unit and
42521     no named sections are available.  It is called once for each symbol
42522     that must be recorded in the offload function and variable table.
42523
42524 -- Target Hook: char * TARGET_OFFLOAD_OPTIONS (void)
42525     Used when writing out the list of options into an LTO file.  It
42526     should translate any relevant target-specific options (such as the
42527     ABI in use) into one of the '-foffload' options that exist as a
42528     common interface to express such options.  It should return a
42529     string containing these options, separated by spaces, which the
42530     caller will free.
42531
42532 -- Macro: TARGET_SUPPORTS_WIDE_INT
42533
42534     On older ports, large integers are stored in 'CONST_DOUBLE' rtl
42535     objects.  Newer ports define 'TARGET_SUPPORTS_WIDE_INT' to be
42536     nonzero to indicate that large integers are stored in
42537     'CONST_WIDE_INT' rtl objects.  The 'CONST_WIDE_INT' allows very
42538     large integer constants to be represented.  'CONST_DOUBLE' is
42539     limited to twice the size of the host's 'HOST_WIDE_INT'
42540     representation.
42541
42542     Converting a port mostly requires looking for the places where
42543     'CONST_DOUBLE's are used with 'VOIDmode' and replacing that code
42544     with code that accesses 'CONST_WIDE_INT's.  '"grep -i
42545     const_double"' at the port level gets you to 95% of the changes
42546     that need to be made.  There are a few places that require a deeper
42547     look.
42548
42549        * There is no equivalent to 'hval' and 'lval' for
42550          'CONST_WIDE_INT's.  This would be difficult to express in the
42551          md language since there are a variable number of elements.
42552
42553          Most ports only check that 'hval' is either 0 or -1 to see if
42554          the value is small.  As mentioned above, this will no longer
42555          be necessary since small constants are always 'CONST_INT'.  Of
42556          course there are still a few exceptions, the alpha's
42557          constraint used by the zap instruction certainly requires
42558          careful examination by C code.  However, all the current code
42559          does is pass the hval and lval to C code, so evolving the c
42560          code to look at the 'CONST_WIDE_INT' is not really a large
42561          change.
42562
42563        * Because there is no standard template that ports use to
42564          materialize constants, there is likely to be some futzing that
42565          is unique to each port in this code.
42566
42567        * The rtx costs may have to be adjusted to properly account for
42568          larger constants that are represented as 'CONST_WIDE_INT'.
42569
42570     All and all it does not take long to convert ports that the
42571     maintainer is familiar with.
42572
42573 -- Target Hook: bool TARGET_HAVE_SPECULATION_SAFE_VALUE (bool ACTIVE)
42574     This hook is used to determine the level of target support for
42575     '__builtin_speculation_safe_value'.  If called with an argument of
42576     false, it returns true if the target has been modified to support
42577     this builtin.  If called with an argument of true, it returns true
42578     if the target requires active mitigation execution might be
42579     speculative.
42580
42581     The default implementation returns false if the target does not
42582     define a pattern named 'speculation_barrier'.  Else it returns true
42583     for the first case and whether the pattern is enabled for the
42584     current compilation for the second case.
42585
42586     For targets that have no processors that can execute instructions
42587     speculatively an alternative implemenation of this hook is
42588     available: simply redefine this hook to
42589     'speculation_safe_value_not_needed' along with your other target
42590     hooks.
42591
42592 -- Target Hook: rtx TARGET_SPECULATION_SAFE_VALUE (machine_mode MODE,
42593          rtx RESULT, rtx VAL, rtx FAILVAL)
42594     This target hook can be used to generate a target-specific code
42595     sequence that implements the '__builtin_speculation_safe_value'
42596     built-in function.  The function must always return VAL in RESULT
42597     in mode MODE when the cpu is not executing speculatively, but must
42598     never return that when speculating until it is known that the
42599     speculation will not be unwound.  The hook supports two primary
42600     mechanisms for implementing the requirements.  The first is to emit
42601     a speculation barrier which forces the processor to wait until all
42602     prior speculative operations have been resolved; the second is to
42603     use a target-specific mechanism that can track the speculation
42604     state and to return FAILVAL if it can determine that speculation
42605     must be unwound at a later time.
42606
42607     The default implementation simply copies VAL to RESULT and emits a
42608     'speculation_barrier' instruction if that is defined.
42609
42610 -- Target Hook: void TARGET_RUN_TARGET_SELFTESTS (void)
42611     If selftests are enabled, run any selftests for this target.
42612
42613
42614File: gccint.info,  Node: Host Config,  Next: Fragments,  Prev: Target Macros,  Up: Top
42615
4261619 Host Configuration
42617*********************
42618
42619Most details about the machine and system on which the compiler is
42620actually running are detected by the 'configure' script.  Some things
42621are impossible for 'configure' to detect; these are described in two
42622ways, either by macros defined in a file named 'xm-MACHINE.h' or by hook
42623functions in the file specified by the OUT_HOST_HOOK_OBJ variable in
42624'config.gcc'.  (The intention is that very few hosts will need a header
42625file but nearly every fully supported host will need to override some
42626hooks.)
42627
42628 If you need to define only a few macros, and they have simple
42629definitions, consider using the 'xm_defines' variable in your
42630'config.gcc' entry instead of creating a host configuration header.
42631*Note System Config::.
42632
42633* Menu:
42634
42635* Host Common::         Things every host probably needs implemented.
42636* Filesystem::          Your host cannot have the letter 'a' in filenames?
42637* Host Misc::           Rare configuration options for hosts.
42638
42639
42640File: gccint.info,  Node: Host Common,  Next: Filesystem,  Up: Host Config
42641
4264219.1 Host Common
42643================
42644
42645Some things are just not portable, even between similar operating
42646systems, and are too difficult for autoconf to detect.  They get
42647implemented using hook functions in the file specified by the
42648HOST_HOOK_OBJ variable in 'config.gcc'.
42649
42650 -- Host Hook: void HOST_HOOKS_EXTRA_SIGNALS (void)
42651     This host hook is used to set up handling for extra signals.  The
42652     most common thing to do in this hook is to detect stack overflow.
42653
42654 -- Host Hook: void * HOST_HOOKS_GT_PCH_GET_ADDRESS (size_t SIZE, int
42655          FD)
42656     This host hook returns the address of some space that is likely to
42657     be free in some subsequent invocation of the compiler.  We intend
42658     to load the PCH data at this address such that the data need not be
42659     relocated.  The area should be able to hold SIZE bytes.  If the
42660     host uses 'mmap', FD is an open file descriptor that can be used
42661     for probing.
42662
42663 -- Host Hook: int HOST_HOOKS_GT_PCH_USE_ADDRESS (void * ADDRESS, size_t
42664          SIZE, int FD, size_t OFFSET)
42665     This host hook is called when a PCH file is about to be loaded.  We
42666     want to load SIZE bytes from FD at OFFSET into memory at ADDRESS.
42667     The given address will be the result of a previous invocation of
42668     'HOST_HOOKS_GT_PCH_GET_ADDRESS'.  Return -1 if we couldn't allocate
42669     SIZE bytes at ADDRESS.  Return 0 if the memory is allocated but the
42670     data is not loaded.  Return 1 if the hook has performed everything.
42671
42672     If the implementation uses reserved address space, free any
42673     reserved space beyond SIZE, regardless of the return value.  If no
42674     PCH will be loaded, this hook may be called with SIZE zero, in
42675     which case all reserved address space should be freed.
42676
42677     Do not try to handle values of ADDRESS that could not have been
42678     returned by this executable; just return -1.  Such values usually
42679     indicate an out-of-date PCH file (built by some other GCC
42680     executable), and such a PCH file won't work.
42681
42682 -- Host Hook: size_t HOST_HOOKS_GT_PCH_ALLOC_GRANULARITY (void);
42683     This host hook returns the alignment required for allocating
42684     virtual memory.  Usually this is the same as getpagesize, but on
42685     some hosts the alignment for reserving memory differs from the
42686     pagesize for committing memory.
42687
42688
42689File: gccint.info,  Node: Filesystem,  Next: Host Misc,  Prev: Host Common,  Up: Host Config
42690
4269119.2 Host Filesystem
42692====================
42693
42694GCC needs to know a number of things about the semantics of the host
42695machine's filesystem.  Filesystems with Unix and MS-DOS semantics are
42696automatically detected.  For other systems, you can define the following
42697macros in 'xm-MACHINE.h'.
42698
42699'HAVE_DOS_BASED_FILE_SYSTEM'
42700     This macro is automatically defined by 'system.h' if the host file
42701     system obeys the semantics defined by MS-DOS instead of Unix.  DOS
42702     file systems are case insensitive, file specifications may begin
42703     with a drive letter, and both forward slash and backslash ('/' and
42704     '\') are directory separators.
42705
42706'DIR_SEPARATOR'
42707'DIR_SEPARATOR_2'
42708     If defined, these macros expand to character constants specifying
42709     separators for directory names within a file specification.
42710     'system.h' will automatically give them appropriate values on Unix
42711     and MS-DOS file systems.  If your file system is neither of these,
42712     define one or both appropriately in 'xm-MACHINE.h'.
42713
42714     However, operating systems like VMS, where constructing a pathname
42715     is more complicated than just stringing together directory names
42716     separated by a special character, should not define either of these
42717     macros.
42718
42719'PATH_SEPARATOR'
42720     If defined, this macro should expand to a character constant
42721     specifying the separator for elements of search paths.  The default
42722     value is a colon (':').  DOS-based systems usually, but not always,
42723     use semicolon (';').
42724
42725'VMS'
42726     Define this macro if the host system is VMS.
42727
42728'HOST_OBJECT_SUFFIX'
42729     Define this macro to be a C string representing the suffix for
42730     object files on your host machine.  If you do not define this
42731     macro, GCC will use '.o' as the suffix for object files.
42732
42733'HOST_EXECUTABLE_SUFFIX'
42734     Define this macro to be a C string representing the suffix for
42735     executable files on your host machine.  If you do not define this
42736     macro, GCC will use the null string as the suffix for executable
42737     files.
42738
42739'HOST_BIT_BUCKET'
42740     A pathname defined by the host operating system, which can be
42741     opened as a file and written to, but all the information written is
42742     discarded.  This is commonly known as a "bit bucket" or "null
42743     device".  If you do not define this macro, GCC will use '/dev/null'
42744     as the bit bucket.  If the host does not support a bit bucket,
42745     define this macro to an invalid filename.
42746
42747'UPDATE_PATH_HOST_CANONICALIZE (PATH)'
42748     If defined, a C statement (sans semicolon) that performs
42749     host-dependent canonicalization when a path used in a compilation
42750     driver or preprocessor is canonicalized.  PATH is a malloc-ed path
42751     to be canonicalized.  If the C statement does canonicalize PATH
42752     into a different buffer, the old path should be freed and the new
42753     buffer should have been allocated with malloc.
42754
42755'DUMPFILE_FORMAT'
42756     Define this macro to be a C string representing the format to use
42757     for constructing the index part of debugging dump file names.  The
42758     resultant string must fit in fifteen bytes.  The full filename will
42759     be the concatenation of: the prefix of the assembler file name, the
42760     string resulting from applying this format to an index number, and
42761     a string unique to each dump file kind, e.g. 'rtl'.
42762
42763     If you do not define this macro, GCC will use '.%02d.'.  You should
42764     define this macro if using the default will create an invalid file
42765     name.
42766
42767'DELETE_IF_ORDINARY'
42768     Define this macro to be a C statement (sans semicolon) that
42769     performs host-dependent removal of ordinary temp files in the
42770     compilation driver.
42771
42772     If you do not define this macro, GCC will use the default version.
42773     You should define this macro if the default version does not
42774     reliably remove the temp file as, for example, on VMS which allows
42775     multiple versions of a file.
42776
42777'HOST_LACKS_INODE_NUMBERS'
42778     Define this macro if the host filesystem does not report meaningful
42779     inode numbers in struct stat.
42780
42781
42782File: gccint.info,  Node: Host Misc,  Prev: Filesystem,  Up: Host Config
42783
4278419.3 Host Misc
42785==============
42786
42787'FATAL_EXIT_CODE'
42788     A C expression for the status code to be returned when the compiler
42789     exits after serious errors.  The default is the system-provided
42790     macro 'EXIT_FAILURE', or '1' if the system doesn't define that
42791     macro.  Define this macro only if these defaults are incorrect.
42792
42793'SUCCESS_EXIT_CODE'
42794     A C expression for the status code to be returned when the compiler
42795     exits without serious errors.  (Warnings are not serious errors.)
42796     The default is the system-provided macro 'EXIT_SUCCESS', or '0' if
42797     the system doesn't define that macro.  Define this macro only if
42798     these defaults are incorrect.
42799
42800'USE_C_ALLOCA'
42801     Define this macro if GCC should use the C implementation of
42802     'alloca' provided by 'libiberty.a'.  This only affects how some
42803     parts of the compiler itself allocate memory.  It does not change
42804     code generation.
42805
42806     When GCC is built with a compiler other than itself, the C 'alloca'
42807     is always used.  This is because most other implementations have
42808     serious bugs.  You should define this macro only on a system where
42809     no stack-based 'alloca' can possibly work.  For instance, if a
42810     system has a small limit on the size of the stack, GCC's builtin
42811     'alloca' will not work reliably.
42812
42813'COLLECT2_HOST_INITIALIZATION'
42814     If defined, a C statement (sans semicolon) that performs
42815     host-dependent initialization when 'collect2' is being initialized.
42816
42817'GCC_DRIVER_HOST_INITIALIZATION'
42818     If defined, a C statement (sans semicolon) that performs
42819     host-dependent initialization when a compilation driver is being
42820     initialized.
42821
42822'HOST_LONG_LONG_FORMAT'
42823     If defined, the string used to indicate an argument of type 'long
42824     long' to functions like 'printf'.  The default value is '"ll"'.
42825
42826'HOST_LONG_FORMAT'
42827     If defined, the string used to indicate an argument of type 'long'
42828     to functions like 'printf'.  The default value is '"l"'.
42829
42830'HOST_PTR_PRINTF'
42831     If defined, the string used to indicate an argument of type 'void
42832     *' to functions like 'printf'.  The default value is '"%p"'.
42833
42834 In addition, if 'configure' generates an incorrect definition of any of
42835the macros in 'auto-host.h', you can override that definition in a host
42836configuration header.  If you need to do this, first see if it is
42837possible to fix 'configure'.
42838
42839
42840File: gccint.info,  Node: Fragments,  Next: Collect2,  Prev: Host Config,  Up: Top
42841
4284220 Makefile Fragments
42843*********************
42844
42845When you configure GCC using the 'configure' script, it will construct
42846the file 'Makefile' from the template file 'Makefile.in'.  When it does
42847this, it can incorporate makefile fragments from the 'config' directory.
42848These are used to set Makefile parameters that are not amenable to being
42849calculated by autoconf.  The list of fragments to incorporate is set by
42850'config.gcc' (and occasionally 'config.build' and 'config.host'); *Note
42851System Config::.
42852
42853 Fragments are named either 't-TARGET' or 'x-HOST', depending on whether
42854they are relevant to configuring GCC to produce code for a particular
42855target, or to configuring GCC to run on a particular host.  Here TARGET
42856and HOST are mnemonics which usually have some relationship to the
42857canonical system name, but no formal connection.
42858
42859 If these files do not exist, it means nothing needs to be added for a
42860given target or host.  Most targets need a few 't-TARGET' fragments, but
42861needing 'x-HOST' fragments is rare.
42862
42863* Menu:
42864
42865* Target Fragment:: Writing 't-TARGET' files.
42866* Host Fragment::   Writing 'x-HOST' files.
42867
42868
42869File: gccint.info,  Node: Target Fragment,  Next: Host Fragment,  Up: Fragments
42870
4287120.1 Target Makefile Fragments
42872==============================
42873
42874Target makefile fragments can set these Makefile variables.
42875
42876'LIBGCC2_CFLAGS'
42877     Compiler flags to use when compiling 'libgcc2.c'.
42878
42879'LIB2FUNCS_EXTRA'
42880     A list of source file names to be compiled or assembled and
42881     inserted into 'libgcc.a'.
42882
42883'CRTSTUFF_T_CFLAGS'
42884     Special flags used when compiling 'crtstuff.c'.  *Note
42885     Initialization::.
42886
42887'CRTSTUFF_T_CFLAGS_S'
42888     Special flags used when compiling 'crtstuff.c' for shared linking.
42889     Used if you use 'crtbeginS.o' and 'crtendS.o' in 'EXTRA-PARTS'.
42890     *Note Initialization::.
42891
42892'MULTILIB_OPTIONS'
42893     For some targets, invoking GCC in different ways produces objects
42894     that cannot be linked together.  For example, for some targets GCC
42895     produces both big and little endian code.  For these targets, you
42896     must arrange for multiple versions of 'libgcc.a' to be compiled,
42897     one for each set of incompatible options.  When GCC invokes the
42898     linker, it arranges to link in the right version of 'libgcc.a',
42899     based on the command line options used.
42900
42901     The 'MULTILIB_OPTIONS' macro lists the set of options for which
42902     special versions of 'libgcc.a' must be built.  Write options that
42903     are mutually incompatible side by side, separated by a slash.
42904     Write options that may be used together separated by a space.  The
42905     build procedure will build all combinations of compatible options.
42906
42907     For example, if you set 'MULTILIB_OPTIONS' to 'm68000/m68020
42908     msoft-float', 'Makefile' will build special versions of 'libgcc.a'
42909     using the following sets of options: '-m68000', '-m68020',
42910     '-msoft-float', '-m68000 -msoft-float', and '-m68020 -msoft-float'.
42911
42912'MULTILIB_DIRNAMES'
42913     If 'MULTILIB_OPTIONS' is used, this variable specifies the
42914     directory names that should be used to hold the various libraries.
42915     Write one element in 'MULTILIB_DIRNAMES' for each element in
42916     'MULTILIB_OPTIONS'.  If 'MULTILIB_DIRNAMES' is not used, the
42917     default value will be 'MULTILIB_OPTIONS', with all slashes treated
42918     as spaces.
42919
42920     'MULTILIB_DIRNAMES' describes the multilib directories using GCC
42921     conventions and is applied to directories that are part of the GCC
42922     installation.  When multilib-enabled, the compiler will add a
42923     subdirectory of the form PREFIX/MULTILIB before each directory in
42924     the search path for libraries and crt files.
42925
42926     For example, if 'MULTILIB_OPTIONS' is set to 'm68000/m68020
42927     msoft-float', then the default value of 'MULTILIB_DIRNAMES' is
42928     'm68000 m68020 msoft-float'.  You may specify a different value if
42929     you desire a different set of directory names.
42930
42931'MULTILIB_MATCHES'
42932     Sometimes the same option may be written in two different ways.  If
42933     an option is listed in 'MULTILIB_OPTIONS', GCC needs to know about
42934     any synonyms.  In that case, set 'MULTILIB_MATCHES' to a list of
42935     items of the form 'option=option' to describe all relevant
42936     synonyms.  For example, 'm68000=mc68000 m68020=mc68020'.
42937
42938'MULTILIB_EXCEPTIONS'
42939     Sometimes when there are multiple sets of 'MULTILIB_OPTIONS' being
42940     specified, there are combinations that should not be built.  In
42941     that case, set 'MULTILIB_EXCEPTIONS' to be all of the switch
42942     exceptions in shell case syntax that should not be built.
42943
42944     For example the ARM processor cannot execute both hardware floating
42945     point instructions and the reduced size THUMB instructions at the
42946     same time, so there is no need to build libraries with both of
42947     these options enabled.  Therefore 'MULTILIB_EXCEPTIONS' is set to:
42948          *mthumb/*mhard-float*
42949
42950'MULTILIB_REQUIRED'
42951     Sometimes when there are only a few combinations are required, it
42952     would be a big effort to come up with a 'MULTILIB_EXCEPTIONS' list
42953     to cover all undesired ones.  In such a case, just listing all the
42954     required combinations in 'MULTILIB_REQUIRED' would be more
42955     straightforward.
42956
42957     The way to specify the entries in 'MULTILIB_REQUIRED' is same with
42958     the way used for 'MULTILIB_EXCEPTIONS', only this time what are
42959     required will be specified.  Suppose there are multiple sets of
42960     'MULTILIB_OPTIONS' and only two combinations are required, one for
42961     ARMv7-M and one for ARMv7-R with hard floating-point ABI and FPU,
42962     the 'MULTILIB_REQUIRED' can be set to:
42963          MULTILIB_REQUIRED =  mthumb/march=armv7-m
42964          MULTILIB_REQUIRED += march=armv7-r/mfloat-abi=hard/mfpu=vfpv3-d16
42965
42966     The 'MULTILIB_REQUIRED' can be used together with
42967     'MULTILIB_EXCEPTIONS'.  The option combinations generated from
42968     'MULTILIB_OPTIONS' will be filtered by 'MULTILIB_EXCEPTIONS' and
42969     then by 'MULTILIB_REQUIRED'.
42970
42971'MULTILIB_REUSE'
42972     Sometimes it is desirable to reuse one existing multilib for
42973     different sets of options.  Such kind of reuse can minimize the
42974     number of multilib variants.  And for some targets it is better to
42975     reuse an existing multilib than to fall back to default multilib
42976     when there is no corresponding multilib.  This can be done by
42977     adding reuse rules to 'MULTILIB_REUSE'.
42978
42979     A reuse rule is comprised of two parts connected by equality sign.
42980     The left part is the option set used to build multilib and the
42981     right part is the option set that will reuse this multilib.  Both
42982     parts should only use options specified in 'MULTILIB_OPTIONS' and
42983     the equality signs found in options name should be replaced with
42984     periods.  An explicit period in the rule can be escaped by
42985     preceding it with a backslash.  The order of options in the left
42986     part matters and should be same with those specified in
42987     'MULTILIB_REQUIRED' or aligned with the order in
42988     'MULTILIB_OPTIONS'.  There is no such limitation for options in the
42989     right part as we don't build multilib from them.
42990
42991     'MULTILIB_REUSE' is different from 'MULTILIB_MATCHES' in that it
42992     sets up relations between two option sets rather than two options.
42993     Here is an example to demo how we reuse libraries built in Thumb
42994     mode for applications built in ARM mode:
42995          MULTILIB_REUSE = mthumb/march.armv7-r=marm/march.armv7-r
42996
42997     Before the advent of 'MULTILIB_REUSE', GCC select multilib by
42998     comparing command line options with options used to build multilib.
42999     The 'MULTILIB_REUSE' is complementary to that way.  Only when the
43000     original comparison matches nothing it will work to see if it is OK
43001     to reuse some existing multilib.
43002
43003'MULTILIB_EXTRA_OPTS'
43004     Sometimes it is desirable that when building multiple versions of
43005     'libgcc.a' certain options should always be passed on to the
43006     compiler.  In that case, set 'MULTILIB_EXTRA_OPTS' to be the list
43007     of options to be used for all builds.  If you set this, you should
43008     probably set 'CRTSTUFF_T_CFLAGS' to a dash followed by it.
43009
43010'MULTILIB_OSDIRNAMES'
43011     If 'MULTILIB_OPTIONS' is used, this variable specifies a list of
43012     subdirectory names, that are used to modify the search path
43013     depending on the chosen multilib.  Unlike 'MULTILIB_DIRNAMES',
43014     'MULTILIB_OSDIRNAMES' describes the multilib directories using
43015     operating systems conventions, and is applied to the directories
43016     such as 'lib' or those in the 'LIBRARY_PATH' environment variable.
43017     The format is either the same as of 'MULTILIB_DIRNAMES', or a set
43018     of mappings.  When it is the same as 'MULTILIB_DIRNAMES', it
43019     describes the multilib directories using operating system
43020     conventions, rather than GCC conventions.  When it is a set of
43021     mappings of the form GCCDIR=OSDIR, the left side gives the GCC
43022     convention and the right gives the equivalent OS defined location.
43023     If the OSDIR part begins with a '!', GCC will not search in the
43024     non-multilib directory and use exclusively the multilib directory.
43025     Otherwise, the compiler will examine the search path for libraries
43026     and crt files twice; the first time it will add MULTILIB to each
43027     directory in the search path, the second it will not.
43028
43029     For configurations that support both multilib and multiarch,
43030     'MULTILIB_OSDIRNAMES' also encodes the multiarch name, thus
43031     subsuming 'MULTIARCH_DIRNAME'.  The multiarch name is appended to
43032     each directory name, separated by a colon (e.g.
43033     '../lib32:i386-linux-gnu').
43034
43035     Each multiarch subdirectory will be searched before the
43036     corresponding OS multilib directory, for example
43037     '/lib/i386-linux-gnu' before '/lib/../lib32'.  The multiarch name
43038     will also be used to modify the system header search path, as
43039     explained for 'MULTIARCH_DIRNAME'.
43040
43041'MULTIARCH_DIRNAME'
43042     This variable specifies the multiarch name for configurations that
43043     are multiarch-enabled but not multilibbed configurations.
43044
43045     The multiarch name is used to augment the search path for
43046     libraries, crt files and system header files with additional
43047     locations.  The compiler will add a multiarch subdirectory of the
43048     form PREFIX/MULTIARCH before each directory in the library and crt
43049     search path.  It will also add two directories
43050     'LOCAL_INCLUDE_DIR'/MULTIARCH and
43051     'NATIVE_SYSTEM_HEADER_DIR'/MULTIARCH) to the system header search
43052     path, respectively before 'LOCAL_INCLUDE_DIR' and
43053     'NATIVE_SYSTEM_HEADER_DIR'.
43054
43055     'MULTIARCH_DIRNAME' is not used for configurations that support
43056     both multilib and multiarch.  In that case, multiarch names are
43057     encoded in 'MULTILIB_OSDIRNAMES' instead.
43058
43059     More documentation about multiarch can be found at
43060     <https://wiki.debian.org/Multiarch>.
43061
43062'SPECS'
43063     Unfortunately, setting 'MULTILIB_EXTRA_OPTS' is not enough, since
43064     it does not affect the build of target libraries, at least not the
43065     build of the default multilib.  One possible work-around is to use
43066     'DRIVER_SELF_SPECS' to bring options from the 'specs' file as if
43067     they had been passed in the compiler driver command line.  However,
43068     you don't want to be adding these options after the toolchain is
43069     installed, so you can instead tweak the 'specs' file that will be
43070     used during the toolchain build, while you still install the
43071     original, built-in 'specs'.  The trick is to set 'SPECS' to some
43072     other filename (say 'specs.install'), that will then be created out
43073     of the built-in specs, and introduce a 'Makefile' rule to generate
43074     the 'specs' file that's going to be used at build time out of your
43075     'specs.install'.
43076
43077'T_CFLAGS'
43078     These are extra flags to pass to the C compiler.  They are used
43079     both when building GCC, and when compiling things with the
43080     just-built GCC.  This variable is deprecated and should not be
43081     used.
43082
43083
43084File: gccint.info,  Node: Host Fragment,  Prev: Target Fragment,  Up: Fragments
43085
4308620.2 Host Makefile Fragments
43087============================
43088
43089The use of 'x-HOST' fragments is discouraged.  You should only use it
43090for makefile dependencies.
43091
43092
43093File: gccint.info,  Node: Collect2,  Next: Header Dirs,  Prev: Fragments,  Up: Top
43094
4309521 'collect2'
43096*************
43097
43098GCC uses a utility called 'collect2' on nearly all systems to arrange to
43099call various initialization functions at start time.
43100
43101 The program 'collect2' works by linking the program once and looking
43102through the linker output file for symbols with particular names
43103indicating they are constructor functions.  If it finds any, it creates
43104a new temporary '.c' file containing a table of them, compiles it, and
43105links the program a second time including that file.
43106
43107 The actual calls to the constructors are carried out by a subroutine
43108called '__main', which is called (automatically) at the beginning of the
43109body of 'main' (provided 'main' was compiled with GNU CC).  Calling
43110'__main' is necessary, even when compiling C code, to allow linking C
43111and C++ object code together.  (If you use '-nostdlib', you get an
43112unresolved reference to '__main', since it's defined in the standard GCC
43113library.  Include '-lgcc' at the end of your compiler command line to
43114resolve this reference.)
43115
43116 The program 'collect2' is installed as 'ld' in the directory where the
43117passes of the compiler are installed.  When 'collect2' needs to find the
43118_real_ 'ld', it tries the following file names:
43119
43120   * a hard coded linker file name, if GCC was configured with the
43121     '--with-ld' option.
43122
43123   * 'real-ld' in the directories listed in the compiler's search
43124     directories.
43125
43126   * 'real-ld' in the directories listed in the environment variable
43127     'PATH'.
43128
43129   * The file specified in the 'REAL_LD_FILE_NAME' configuration macro,
43130     if specified.
43131
43132   * 'ld' in the compiler's search directories, except that 'collect2'
43133     will not execute itself recursively.
43134
43135   * 'ld' in 'PATH'.
43136
43137 "The compiler's search directories" means all the directories where
43138'gcc' searches for passes of the compiler.  This includes directories
43139that you specify with '-B'.
43140
43141 Cross-compilers search a little differently:
43142
43143   * 'real-ld' in the compiler's search directories.
43144
43145   * 'TARGET-real-ld' in 'PATH'.
43146
43147   * The file specified in the 'REAL_LD_FILE_NAME' configuration macro,
43148     if specified.
43149
43150   * 'ld' in the compiler's search directories.
43151
43152   * 'TARGET-ld' in 'PATH'.
43153
43154 'collect2' explicitly avoids running 'ld' using the file name under
43155which 'collect2' itself was invoked.  In fact, it remembers up a list of
43156such names--in case one copy of 'collect2' finds another copy (or
43157version) of 'collect2' installed as 'ld' in a second place in the search
43158path.
43159
43160 'collect2' searches for the utilities 'nm' and 'strip' using the same
43161algorithm as above for 'ld'.
43162
43163
43164File: gccint.info,  Node: Header Dirs,  Next: Type Information,  Prev: Collect2,  Up: Top
43165
4316622 Standard Header File Directories
43167***********************************
43168
43169'GCC_INCLUDE_DIR' means the same thing for native and cross.  It is
43170where GCC stores its private include files, and also where GCC stores
43171the fixed include files.  A cross compiled GCC runs 'fixincludes' on the
43172header files in '$(tooldir)/include'.  (If the cross compilation header
43173files need to be fixed, they must be installed before GCC is built.  If
43174the cross compilation header files are already suitable for GCC, nothing
43175special need be done).
43176
43177 'GPLUSPLUS_INCLUDE_DIR' means the same thing for native and cross.  It
43178is where 'g++' looks first for header files.  The C++ library installs
43179only target independent header files in that directory.
43180
43181 'LOCAL_INCLUDE_DIR' is used only by native compilers.  GCC doesn't
43182install anything there.  It is normally '/usr/local/include'.  This is
43183where local additions to a packaged system should place header files.
43184
43185 'CROSS_INCLUDE_DIR' is used only by cross compilers.  GCC doesn't
43186install anything there.
43187
43188 'TOOL_INCLUDE_DIR' is used for both native and cross compilers.  It is
43189the place for other packages to install header files that GCC will use.
43190For a cross-compiler, this is the equivalent of '/usr/include'.  When
43191you build a cross-compiler, 'fixincludes' processes any header files in
43192this directory.
43193
43194
43195File: gccint.info,  Node: Type Information,  Next: Plugins,  Prev: Header Dirs,  Up: Top
43196
4319723 Memory Management and Type Information
43198*****************************************
43199
43200GCC uses some fairly sophisticated memory management techniques, which
43201involve determining information about GCC's data structures from GCC's
43202source code and using this information to perform garbage collection and
43203implement precompiled headers.
43204
43205 A full C++ parser would be too complicated for this task, so a limited
43206subset of C++ is interpreted and special markers are used to determine
43207what parts of the source to look at.  All 'struct', 'union' and
43208'template' structure declarations that define data structures that are
43209allocated under control of the garbage collector must be marked.  All
43210global variables that hold pointers to garbage-collected memory must
43211also be marked.  Finally, all global variables that need to be saved and
43212restored by a precompiled header must be marked.  (The precompiled
43213header mechanism can only save static variables if they're scalar.
43214Complex data structures must be allocated in garbage-collected memory to
43215be saved in a precompiled header.)
43216
43217 The full format of a marker is
43218     GTY (([OPTION] [(PARAM)], [OPTION] [(PARAM)] ...))
43219but in most cases no options are needed.  The outer double parentheses
43220are still necessary, though: 'GTY(())'.  Markers can appear:
43221
43222   * In a structure definition, before the open brace;
43223   * In a global variable declaration, after the keyword 'static' or
43224     'extern'; and
43225   * In a structure field definition, before the name of the field.
43226
43227 Here are some examples of marking simple data structures and globals.
43228
43229     struct GTY(()) TAG
43230     {
43231       FIELDS...
43232     };
43233
43234     typedef struct GTY(()) TAG
43235     {
43236       FIELDS...
43237     } *TYPENAME;
43238
43239     static GTY(()) struct TAG *LIST;   /* points to GC memory */
43240     static GTY(()) int COUNTER;        /* save counter in a PCH */
43241
43242 The parser understands simple typedefs such as 'typedef struct TAG
43243*NAME;' and 'typedef int NAME;'.  These don't need to be marked.
43244
43245 Since 'gengtype''s understanding of C++ is limited, there are several
43246constructs and declarations that are not supported inside
43247classes/structures marked for automatic GC code generation.  The
43248following C++ constructs produce a 'gengtype' error on
43249structures/classes marked for automatic GC code generation:
43250
43251   * Type definitions inside classes/structures are not supported.
43252   * Enumerations inside classes/structures are not supported.
43253
43254 If you have a class or structure using any of the above constructs, you
43255need to mark that class as 'GTY ((user))' and provide your own marking
43256routines (see section *note User GC:: for details).
43257
43258 It is always valid to include function definitions inside classes.
43259Those are always ignored by 'gengtype', as it only cares about data
43260members.
43261
43262* Menu:
43263
43264* GTY Options::         What goes inside a 'GTY(())'.
43265* Inheritance and GTY:: Adding GTY to a class hierarchy.
43266* User GC::		Adding user-provided GC marking routines.
43267* GGC Roots::           Making global variables GGC roots.
43268* Files::               How the generated files work.
43269* Invoking the garbage collector::   How to invoke the garbage collector.
43270* Troubleshooting::     When something does not work as expected.
43271
43272
43273File: gccint.info,  Node: GTY Options,  Next: Inheritance and GTY,  Up: Type Information
43274
4327523.1 The Inside of a 'GTY(())'
43276==============================
43277
43278Sometimes the C code is not enough to fully describe the type structure.
43279Extra information can be provided with 'GTY' options and additional
43280markers.  Some options take a parameter, which may be either a string or
43281a type name, depending on the parameter.  If an option takes no
43282parameter, it is acceptable either to omit the parameter entirely, or to
43283provide an empty string as a parameter.  For example, 'GTY ((skip))' and
43284'GTY ((skip ("")))' are equivalent.
43285
43286 When the parameter is a string, often it is a fragment of C code.  Four
43287special escapes may be used in these strings, to refer to pieces of the
43288data structure being marked:
43289
43290'%h'
43291     The current structure.
43292'%1'
43293     The structure that immediately contains the current structure.
43294'%0'
43295     The outermost structure that contains the current structure.
43296'%a'
43297     A partial expression of the form '[i1][i2]...' that indexes the
43298     array item currently being marked.
43299
43300 For instance, suppose that you have a structure of the form
43301     struct A {
43302       ...
43303     };
43304     struct B {
43305       struct A foo[12];
43306     };
43307and 'b' is a variable of type 'struct B'.  When marking 'b.foo[11]',
43308'%h' would expand to 'b.foo[11]', '%0' and '%1' would both expand to
43309'b', and '%a' would expand to '[11]'.
43310
43311 As in ordinary C, adjacent strings will be concatenated; this is
43312helpful when you have a complicated expression.
43313     GTY ((chain_next ("TREE_CODE (&%h.generic) == INTEGER_TYPE"
43314                       " ? TYPE_NEXT_VARIANT (&%h.generic)"
43315                       " : TREE_CHAIN (&%h.generic)")))
43316
43317 The available options are:
43318
43319'length ("EXPRESSION")'
43320
43321     There are two places the type machinery will need to be explicitly
43322     told the length of an array of non-atomic objects.  The first case
43323     is when a structure ends in a variable-length array, like this:
43324          struct GTY(()) rtvec_def {
43325            int num_elem;         /* number of elements */
43326            rtx GTY ((length ("%h.num_elem"))) elem[1];
43327          };
43328
43329     In this case, the 'length' option is used to override the specified
43330     array length (which should usually be '1').  The parameter of the
43331     option is a fragment of C code that calculates the length.
43332
43333     The second case is when a structure or a global variable contains a
43334     pointer to an array, like this:
43335          struct gimple_omp_for_iter * GTY((length ("%h.collapse"))) iter;
43336     In this case, 'iter' has been allocated by writing something like
43337            x->iter = ggc_alloc_cleared_vec_gimple_omp_for_iter (collapse);
43338     and the 'collapse' provides the length of the field.
43339
43340     This second use of 'length' also works on global variables, like:
43341     static GTY((length("reg_known_value_size"))) rtx *reg_known_value;
43342
43343     Note that the 'length' option is only meant for use with arrays of
43344     non-atomic objects, that is, objects that contain pointers pointing
43345     to other GTY-managed objects.  For other GC-allocated arrays and
43346     strings you should use 'atomic'.
43347
43348'skip'
43349
43350     If 'skip' is applied to a field, the type machinery will ignore it.
43351     This is somewhat dangerous; the only safe use is in a union when
43352     one field really isn't ever used.
43353
43354'for_user'
43355
43356     Use this to mark types that need to be marked by user gc routines,
43357     but are not refered to in a template argument.  So if you have some
43358     user gc type T1 and a non user gc type T2 you can give T2 the
43359     for_user option so that the marking functions for T1 can call non
43360     mangled functions to mark T2.
43361
43362'desc ("EXPRESSION")'
43363'tag ("CONSTANT")'
43364'default'
43365
43366     The type machinery needs to be told which field of a 'union' is
43367     currently active.  This is done by giving each field a constant
43368     'tag' value, and then specifying a discriminator using 'desc'.  The
43369     value of the expression given by 'desc' is compared against each
43370     'tag' value, each of which should be different.  If no 'tag' is
43371     matched, the field marked with 'default' is used if there is one,
43372     otherwise no field in the union will be marked.
43373
43374     In the 'desc' option, the "current structure" is the union that it
43375     discriminates.  Use '%1' to mean the structure containing it.
43376     There are no escapes available to the 'tag' option, since it is a
43377     constant.
43378
43379     For example,
43380          struct GTY(()) tree_binding
43381          {
43382            struct tree_common common;
43383            union tree_binding_u {
43384              tree GTY ((tag ("0"))) scope;
43385              struct cp_binding_level * GTY ((tag ("1"))) level;
43386            } GTY ((desc ("BINDING_HAS_LEVEL_P ((tree)&%0)"))) xscope;
43387            tree value;
43388          };
43389
43390     In this example, the value of BINDING_HAS_LEVEL_P when applied to a
43391     'struct tree_binding *' is presumed to be 0 or 1.  If 1, the type
43392     mechanism will treat the field 'level' as being present and if 0,
43393     will treat the field 'scope' as being present.
43394
43395     The 'desc' and 'tag' options can also be used for inheritance to
43396     denote which subclass an instance is.  See *note Inheritance and
43397     GTY:: for more information.
43398
43399'cache'
43400
43401     When the 'cache' option is applied to a global variable
43402     gt_clear_cache is called on that variable between the mark and
43403     sweep phases of garbage collection.  The gt_clear_cache function is
43404     free to mark blocks as used, or to clear pointers in the variable.
43405
43406'deletable'
43407
43408     'deletable', when applied to a global variable, indicates that when
43409     garbage collection runs, there's no need to mark anything pointed
43410     to by this variable, it can just be set to 'NULL' instead.  This is
43411     used to keep a list of free structures around for re-use.
43412
43413'maybe_undef'
43414
43415     When applied to a field, 'maybe_undef' indicates that it's OK if
43416     the structure that this fields points to is never defined, so long
43417     as this field is always 'NULL'.  This is used to avoid requiring
43418     backends to define certain optional structures.  It doesn't work
43419     with language frontends.
43420
43421'nested_ptr (TYPE, "TO EXPRESSION", "FROM EXPRESSION")'
43422
43423     The type machinery expects all pointers to point to the start of an
43424     object.  Sometimes for abstraction purposes it's convenient to have
43425     a pointer which points inside an object.  So long as it's possible
43426     to convert the original object to and from the pointer, such
43427     pointers can still be used.  TYPE is the type of the original
43428     object, the TO EXPRESSION returns the pointer given the original
43429     object, and the FROM EXPRESSION returns the original object given
43430     the pointer.  The pointer will be available using the '%h' escape.
43431
43432'chain_next ("EXPRESSION")'
43433'chain_prev ("EXPRESSION")'
43434'chain_circular ("EXPRESSION")'
43435
43436     It's helpful for the type machinery to know if objects are often
43437     chained together in long lists; this lets it generate code that
43438     uses less stack space by iterating along the list instead of
43439     recursing down it.  'chain_next' is an expression for the next item
43440     in the list, 'chain_prev' is an expression for the previous item.
43441     For singly linked lists, use only 'chain_next'; for doubly linked
43442     lists, use both.  The machinery requires that taking the next item
43443     of the previous item gives the original item.  'chain_circular' is
43444     similar to 'chain_next', but can be used for circular single linked
43445     lists.
43446
43447'reorder ("FUNCTION NAME")'
43448
43449     Some data structures depend on the relative ordering of pointers.
43450     If the precompiled header machinery needs to change that ordering,
43451     it will call the function referenced by the 'reorder' option,
43452     before changing the pointers in the object that's pointed to by the
43453     field the option applies to.  The function must take four
43454     arguments, with the signature
43455     'void *, void *, gt_pointer_operator, void *'.  The first parameter
43456     is a pointer to the structure that contains the object being
43457     updated, or the object itself if there is no containing structure.
43458     The second parameter is a cookie that should be ignored.  The third
43459     parameter is a routine that, given a pointer, will update it to its
43460     correct new value.  The fourth parameter is a cookie that must be
43461     passed to the second parameter.
43462
43463     PCH cannot handle data structures that depend on the absolute
43464     values of pointers.  'reorder' functions can be expensive.  When
43465     possible, it is better to depend on properties of the data, like an
43466     ID number or the hash of a string instead.
43467
43468'atomic'
43469
43470     The 'atomic' option can only be used with pointers.  It informs the
43471     GC machinery that the memory that the pointer points to does not
43472     contain any pointers, and hence it should be treated by the GC and
43473     PCH machinery as an "atomic" block of memory that does not need to
43474     be examined when scanning memory for pointers.  In particular, the
43475     machinery will not scan that memory for pointers to mark them as
43476     reachable (when marking pointers for GC) or to relocate them (when
43477     writing a PCH file).
43478
43479     The 'atomic' option differs from the 'skip' option.  'atomic' keeps
43480     the memory under Garbage Collection, but makes the GC ignore the
43481     contents of the memory.  'skip' is more drastic in that it causes
43482     the pointer and the memory to be completely ignored by the Garbage
43483     Collector.  So, memory marked as 'atomic' is automatically freed
43484     when no longer reachable, while memory marked as 'skip' is not.
43485
43486     The 'atomic' option must be used with great care, because all sorts
43487     of problem can occur if used incorrectly, that is, if the memory
43488     the pointer points to does actually contain a pointer.
43489
43490     Here is an example of how to use it:
43491          struct GTY(()) my_struct {
43492            int number_of_elements;
43493            unsigned int * GTY ((atomic)) elements;
43494          };
43495     In this case, 'elements' is a pointer under GC, and the memory it
43496     points to needs to be allocated using the Garbage Collector, and
43497     will be freed automatically by the Garbage Collector when it is no
43498     longer referenced.  But the memory that the pointer points to is an
43499     array of 'unsigned int' elements, and the GC must not try to scan
43500     it to find pointers to mark or relocate, which is why it is marked
43501     with the 'atomic' option.
43502
43503     Note that, currently, global variables cannot be marked with
43504     'atomic'; only fields of a struct can.  This is a known limitation.
43505     It would be useful to be able to mark global pointers with 'atomic'
43506     to make the PCH machinery aware of them so that they are saved and
43507     restored correctly to PCH files.
43508
43509'special ("NAME")'
43510
43511     The 'special' option is used to mark types that have to be dealt
43512     with by special case machinery.  The parameter is the name of the
43513     special case.  See 'gengtype.c' for further details.  Avoid adding
43514     new special cases unless there is no other alternative.
43515
43516'user'
43517
43518     The 'user' option indicates that the code to mark structure fields
43519     is completely handled by user-provided routines.  See section *note
43520     User GC:: for details on what functions need to be provided.
43521
43522
43523File: gccint.info,  Node: Inheritance and GTY,  Next: User GC,  Prev: GTY Options,  Up: Type Information
43524
4352523.2 Support for inheritance
43526============================
43527
43528gengtype has some support for simple class hierarchies.  You can use
43529this to have gengtype autogenerate marking routines, provided:
43530
43531   * There must be a concrete base class, with a discriminator
43532     expression that can be used to identify which subclass an instance
43533     is.
43534   * Only single inheritance is used.
43535   * None of the classes within the hierarchy are templates.
43536
43537 If your class hierarchy does not fit in this pattern, you must use
43538*note User GC:: instead.
43539
43540 The base class and its discriminator must be identified using the
43541"desc" option.  Each concrete subclass must use the "tag" option to
43542identify which value of the discriminator it corresponds to.
43543
43544 Every class in the hierarchy must have a 'GTY(())' marker, as gengtype
43545will only attempt to parse classes that have such a marker (1).
43546
43547     class GTY((desc("%h.kind"), tag("0"))) example_base
43548     {
43549     public:
43550         int kind;
43551         tree a;
43552     };
43553
43554     class GTY((tag("1"))) some_subclass : public example_base
43555     {
43556     public:
43557         tree b;
43558     };
43559
43560     class GTY((tag("2"))) some_other_subclass : public example_base
43561     {
43562     public:
43563         tree c;
43564     };
43565
43566 The generated marking routines for the above will contain a "switch" on
43567"kind", visiting all appropriate fields.  For example, if kind is 2, it
43568will cast to "some_other_subclass" and visit fields a, b, and c.
43569
43570   ---------- Footnotes ----------
43571
43572   (1) Classes lacking such a marker will not be identified as being
43573part of the hierarchy, and so the marking routines will not handle them,
43574leading to a assertion failure within the marking routines due to an
43575unknown tag value (assuming that assertions are enabled).
43576
43577
43578File: gccint.info,  Node: User GC,  Next: GGC Roots,  Prev: Inheritance and GTY,  Up: Type Information
43579
4358023.3 Support for user-provided GC marking routines
43581==================================================
43582
43583The garbage collector supports types for which no automatic marking code
43584is generated.  For these types, the user is required to provide three
43585functions: one to act as a marker for garbage collection, and two
43586functions to act as marker and pointer walker for pre-compiled headers.
43587
43588 Given a structure 'struct GTY((user)) my_struct', the following
43589functions should be defined to mark 'my_struct':
43590
43591     void gt_ggc_mx (my_struct *p)
43592     {
43593       /* This marks field 'fld'.  */
43594       gt_ggc_mx (p->fld);
43595     }
43596
43597     void gt_pch_nx (my_struct *p)
43598     {
43599       /* This marks field 'fld'.  */
43600       gt_pch_nx (tp->fld);
43601     }
43602
43603     void gt_pch_nx (my_struct *p, gt_pointer_operator op, void *cookie)
43604     {
43605       /* For every field 'fld', call the given pointer operator.  */
43606       op (&(tp->fld), cookie);
43607     }
43608
43609 In general, each marker 'M' should call 'M' for every pointer field in
43610the structure.  Fields that are not allocated in GC or are not pointers
43611must be ignored.
43612
43613 For embedded lists (e.g., structures with a 'next' or 'prev' pointer),
43614the marker must follow the chain and mark every element in it.
43615
43616 Note that the rules for the pointer walker 'gt_pch_nx (my_struct *,
43617gt_pointer_operator, void *)' are slightly different.  In this case, the
43618operation 'op' must be applied to the _address_ of every pointer field.
43619
4362023.3.1 User-provided marking routines for template types
43621--------------------------------------------------------
43622
43623When a template type 'TP' is marked with 'GTY', all instances of that
43624type are considered user-provided types.  This means that the individual
43625instances of 'TP' do not need to be marked with 'GTY'.  The user needs
43626to provide template functions to mark all the fields of the type.
43627
43628 The following code snippets represent all the functions that need to be
43629provided.  Note that type 'TP' may reference to more than one type.  In
43630these snippets, there is only one type 'T', but there could be more.
43631
43632     template<typename T>
43633     void gt_ggc_mx (TP<T> *tp)
43634     {
43635       extern void gt_ggc_mx (T&);
43636
43637       /* This marks field 'fld' of type 'T'.  */
43638       gt_ggc_mx (tp->fld);
43639     }
43640
43641     template<typename T>
43642     void gt_pch_nx (TP<T> *tp)
43643     {
43644       extern void gt_pch_nx (T&);
43645
43646       /* This marks field 'fld' of type 'T'.  */
43647       gt_pch_nx (tp->fld);
43648     }
43649
43650     template<typename T>
43651     void gt_pch_nx (TP<T *> *tp, gt_pointer_operator op, void *cookie)
43652     {
43653       /* For every field 'fld' of 'tp' with type 'T *', call the given
43654          pointer operator.  */
43655       op (&(tp->fld), cookie);
43656     }
43657
43658     template<typename T>
43659     void gt_pch_nx (TP<T> *tp, gt_pointer_operator, void *cookie)
43660     {
43661       extern void gt_pch_nx (T *, gt_pointer_operator, void *);
43662
43663       /* For every field 'fld' of 'tp' with type 'T', call the pointer
43664          walker for all the fields of T.  */
43665       gt_pch_nx (&(tp->fld), op, cookie);
43666     }
43667
43668 Support for user-defined types is currently limited.  The following
43669restrictions apply:
43670
43671  1. Type 'TP' and all the argument types 'T' must be marked with 'GTY'.
43672
43673  2. Type 'TP' can only have type names in its argument list.
43674
43675  3. The pointer walker functions are different for 'TP<T>' and 'TP<T
43676     *>'.  In the case of 'TP<T>', references to 'T' must be handled by
43677     calling 'gt_pch_nx' (which will, in turn, walk all the pointers
43678     inside fields of 'T').  In the case of 'TP<T *>', references to 'T
43679     *' must be handled by calling the 'op' function on the address of
43680     the pointer (see the code snippets above).
43681
43682
43683File: gccint.info,  Node: GGC Roots,  Next: Files,  Prev: User GC,  Up: Type Information
43684
4368523.4 Marking Roots for the Garbage Collector
43686============================================
43687
43688In addition to keeping track of types, the type machinery also locates
43689the global variables ("roots") that the garbage collector starts at.
43690Roots must be declared using one of the following syntaxes:
43691
43692   * 'extern GTY(([OPTIONS])) TYPE NAME;'
43693   * 'static GTY(([OPTIONS])) TYPE NAME;'
43694The syntax
43695   * 'GTY(([OPTIONS])) TYPE NAME;'
43696is _not_ accepted.  There should be an 'extern' declaration of such a
43697variable in a header somewhere--mark that, not the definition.  Or, if
43698the variable is only used in one file, make it 'static'.
43699
43700
43701File: gccint.info,  Node: Files,  Next: Invoking the garbage collector,  Prev: GGC Roots,  Up: Type Information
43702
4370323.5 Source Files Containing Type Information
43704=============================================
43705
43706Whenever you add 'GTY' markers to a source file that previously had
43707none, or create a new source file containing 'GTY' markers, there are
43708three things you need to do:
43709
43710  1. You need to add the file to the list of source files the type
43711     machinery scans.  There are four cases:
43712
43713       a. For a back-end file, this is usually done automatically; if
43714          not, you should add it to 'target_gtfiles' in the appropriate
43715          port's entries in 'config.gcc'.
43716
43717       b. For files shared by all front ends, add the filename to the
43718          'GTFILES' variable in 'Makefile.in'.
43719
43720       c. For files that are part of one front end, add the filename to
43721          the 'gtfiles' variable defined in the appropriate
43722          'config-lang.in'.  Headers should appear before non-headers in
43723          this list.
43724
43725       d. For files that are part of some but not all front ends, add
43726          the filename to the 'gtfiles' variable of _all_ the front ends
43727          that use it.
43728
43729  2. If the file was a header file, you'll need to check that it's
43730     included in the right place to be visible to the generated files.
43731     For a back-end header file, this should be done automatically.  For
43732     a front-end header file, it needs to be included by the same file
43733     that includes 'gtype-LANG.h'.  For other header files, it needs to
43734     be included in 'gtype-desc.c', which is a generated file, so add it
43735     to 'ifiles' in 'open_base_file' in 'gengtype.c'.
43736
43737     For source files that aren't header files, the machinery will
43738     generate a header file that should be included in the source file
43739     you just changed.  The file will be called 'gt-PATH.h' where PATH
43740     is the pathname relative to the 'gcc' directory with slashes
43741     replaced by -, so for example the header file to be included in
43742     'cp/parser.c' is called 'gt-cp-parser.c'.  The generated header
43743     file should be included after everything else in the source file.
43744     Don't forget to mention this file as a dependency in the
43745     'Makefile'!
43746
43747 For language frontends, there is another file that needs to be included
43748somewhere.  It will be called 'gtype-LANG.h', where LANG is the name of
43749the subdirectory the language is contained in.
43750
43751 Plugins can add additional root tables.  Run the 'gengtype' utility in
43752plugin mode as 'gengtype -P pluginout.h SOURCE-DIR FILE-LIST PLUGIN*.C'
43753with your plugin files PLUGIN*.C using 'GTY' to generate the PLUGINOUT.H
43754file.  The GCC build tree is needed to be present in that mode.
43755
43756
43757File: gccint.info,  Node: Invoking the garbage collector,  Next: Troubleshooting,  Prev: Files,  Up: Type Information
43758
4375923.6 How to invoke the garbage collector
43760========================================
43761
43762The GCC garbage collector GGC is only invoked explicitly.  In contrast
43763with many other garbage collectors, it is not implicitly invoked by
43764allocation routines when a lot of memory has been consumed.  So the only
43765way to have GGC reclaim storage is to call the 'ggc_collect' function
43766explicitly.  This call is an expensive operation, as it may have to scan
43767the entire heap.  Beware that local variables (on the GCC call stack)
43768are not followed by such an invocation (as many other garbage collectors
43769do): you should reference all your data from static or external 'GTY'-ed
43770variables, and it is advised to call 'ggc_collect' with a shallow call
43771stack.  The GGC is an exact mark and sweep garbage collector (so it does
43772not scan the call stack for pointers).  In practice GCC passes don't
43773often call 'ggc_collect' themselves, because it is called by the pass
43774manager between passes.
43775
43776 At the time of the 'ggc_collect' call all pointers in the GC-marked
43777structures must be valid or 'NULL'.  In practice this means that there
43778should not be uninitialized pointer fields in the structures even if
43779your code never reads or writes those fields at a particular instance.
43780One way to ensure this is to use cleared versions of allocators unless
43781all the fields are initialized manually immediately after allocation.
43782
43783
43784File: gccint.info,  Node: Troubleshooting,  Prev: Invoking the garbage collector,  Up: Type Information
43785
4378623.7 Troubleshooting the garbage collector
43787==========================================
43788
43789With the current garbage collector implementation, most issues should
43790show up as GCC compilation errors.  Some of the most commonly
43791encountered issues are described below.
43792
43793   * Gengtype does not produce allocators for a 'GTY'-marked type.
43794     Gengtype checks if there is at least one possible path from GC
43795     roots to at least one instance of each type before outputting
43796     allocators.  If there is no such path, the 'GTY' markers will be
43797     ignored and no allocators will be output.  Solve this by making
43798     sure that there exists at least one such path.  If creating it is
43799     unfeasible or raises a "code smell", consider if you really must
43800     use GC for allocating such type.
43801
43802   * Link-time errors about undefined 'gt_ggc_r_foo_bar' and
43803     similarly-named symbols.  Check if your 'foo_bar' source file has
43804     '#include "gt-foo_bar.h"' as its very last line.
43805
43806
43807File: gccint.info,  Node: Plugins,  Next: LTO,  Prev: Type Information,  Up: Top
43808
4380924 Plugins
43810**********
43811
43812GCC plugins are loadable modules that provide extra features to the
43813compiler.  Like GCC itself they can be distributed in source and binary
43814forms.
43815
43816 GCC plugins provide developers with a rich subset of the GCC API to
43817allow them to extend GCC as they see fit.  Whether it is writing an
43818additional optimization pass, transforming code, or analyzing
43819information, plugins can be quite useful.
43820
43821* Menu:
43822
43823* Plugins loading::      How can we load plugins.
43824* Plugin API::           The APIs for plugins.
43825* Plugins pass::         How a plugin interact with the pass manager.
43826* Plugins GC::           How a plugin Interact with GCC Garbage Collector.
43827* Plugins description::  Giving information about a plugin itself.
43828* Plugins attr::         Registering custom attributes or pragmas.
43829* Plugins recording::    Recording information about pass execution.
43830* Plugins gate::         Controlling which passes are being run.
43831* Plugins tracking::     Keeping track of available passes.
43832* Plugins building::     How can we build a plugin.
43833
43834
43835File: gccint.info,  Node: Plugins loading,  Next: Plugin API,  Up: Plugins
43836
4383724.1 Loading Plugins
43838====================
43839
43840Plugins are supported on platforms that support '-ldl -rdynamic' as well
43841as Windows/MinGW. They are loaded by the compiler using 'dlopen' or
43842equivalent and invoked at pre-determined locations in the compilation
43843process.
43844
43845 Plugins are loaded with
43846
43847 '-fplugin=/path/to/NAME.EXT' '-fplugin-arg-NAME-KEY1[=VALUE1]'
43848
43849 Where NAME is the plugin name and EXT is the platform-specific dynamic
43850library extension.  It should be 'dll' on Windows/MinGW, 'dylib' on
43851Darwin/Mac OS X, and 'so' on all other platforms.  The plugin arguments
43852are parsed by GCC and passed to respective plugins as key-value pairs.
43853Multiple plugins can be invoked by specifying multiple '-fplugin'
43854arguments.
43855
43856 A plugin can be simply given by its short name (no dots or slashes).
43857When simply passing '-fplugin=NAME', the plugin is loaded from the
43858'plugin' directory, so '-fplugin=NAME' is the same as '-fplugin=`gcc
43859-print-file-name=plugin`/NAME.EXT', using backquote shell syntax to
43860query the 'plugin' directory.
43861
43862
43863File: gccint.info,  Node: Plugin API,  Next: Plugins pass,  Prev: Plugins loading,  Up: Plugins
43864
4386524.2 Plugin API
43866===============
43867
43868Plugins are activated by the compiler at specific events as defined in
43869'gcc-plugin.h'.  For each event of interest, the plugin should call
43870'register_callback' specifying the name of the event and address of the
43871callback function that will handle that event.
43872
43873 The header 'gcc-plugin.h' must be the first gcc header to be included.
43874
4387524.2.1 Plugin license check
43876---------------------------
43877
43878Every plugin should define the global symbol 'plugin_is_GPL_compatible'
43879to assert that it has been licensed under a GPL-compatible license.  If
43880this symbol does not exist, the compiler will emit a fatal error and
43881exit with the error message:
43882
43883     fatal error: plugin NAME is not licensed under a GPL-compatible license
43884     NAME: undefined symbol: plugin_is_GPL_compatible
43885     compilation terminated
43886
43887 The declared type of the symbol should be int, to match a forward
43888declaration in 'gcc-plugin.h' that suppresses C++ mangling.  It does not
43889need to be in any allocated section, though.  The compiler merely
43890asserts that the symbol exists in the global scope.  Something like this
43891is enough:
43892
43893     int plugin_is_GPL_compatible;
43894
4389524.2.2 Plugin initialization
43896----------------------------
43897
43898Every plugin should export a function called 'plugin_init' that is
43899called right after the plugin is loaded.  This function is responsible
43900for registering all the callbacks required by the plugin and do any
43901other required initialization.
43902
43903 This function is called from 'compile_file' right before invoking the
43904parser.  The arguments to 'plugin_init' are:
43905
43906   * 'plugin_info': Plugin invocation information.
43907   * 'version': GCC version.
43908
43909 The 'plugin_info' struct is defined as follows:
43910
43911     struct plugin_name_args
43912     {
43913       char *base_name;              /* Short name of the plugin
43914                                        (filename without .so suffix). */
43915       const char *full_name;        /* Path to the plugin as specified with
43916                                        -fplugin=. */
43917       int argc;                     /* Number of arguments specified with
43918                                        -fplugin-arg-.... */
43919       struct plugin_argument *argv; /* Array of ARGC key-value pairs. */
43920       const char *version;          /* Version string provided by plugin. */
43921       const char *help;             /* Help string provided by plugin. */
43922     }
43923
43924 If initialization fails, 'plugin_init' must return a non-zero value.
43925Otherwise, it should return 0.
43926
43927 The version of the GCC compiler loading the plugin is described by the
43928following structure:
43929
43930     struct plugin_gcc_version
43931     {
43932       const char *basever;
43933       const char *datestamp;
43934       const char *devphase;
43935       const char *revision;
43936       const char *configuration_arguments;
43937     };
43938
43939 The function 'plugin_default_version_check' takes two pointers to such
43940structure and compare them field by field.  It can be used by the
43941plugin's 'plugin_init' function.
43942
43943 The version of GCC used to compile the plugin can be found in the
43944symbol 'gcc_version' defined in the header 'plugin-version.h'.  The
43945recommended version check to perform looks like
43946
43947     #include "plugin-version.h"
43948     ...
43949
43950     int
43951     plugin_init (struct plugin_name_args *plugin_info,
43952                  struct plugin_gcc_version *version)
43953     {
43954       if (!plugin_default_version_check (version, &gcc_version))
43955         return 1;
43956
43957     }
43958
43959 but you can also check the individual fields if you want a less strict
43960check.
43961
4396224.2.3 Plugin callbacks
43963-----------------------
43964
43965Callback functions have the following prototype:
43966
43967     /* The prototype for a plugin callback function.
43968          gcc_data  - event-specific data provided by GCC
43969          user_data - plugin-specific data provided by the plug-in.  */
43970     typedef void (*plugin_callback_func)(void *gcc_data, void *user_data);
43971
43972 Callbacks can be invoked at the following pre-determined events:
43973
43974     enum plugin_event
43975     {
43976       PLUGIN_START_PARSE_FUNCTION,  /* Called before parsing the body of a function. */
43977       PLUGIN_FINISH_PARSE_FUNCTION, /* After finishing parsing a function. */
43978       PLUGIN_PASS_MANAGER_SETUP,    /* To hook into pass manager.  */
43979       PLUGIN_FINISH_TYPE,           /* After finishing parsing a type.  */
43980       PLUGIN_FINISH_DECL,           /* After finishing parsing a declaration. */
43981       PLUGIN_FINISH_UNIT,           /* Useful for summary processing.  */
43982       PLUGIN_PRE_GENERICIZE,        /* Allows to see low level AST in C and C++ frontends.  */
43983       PLUGIN_FINISH,                /* Called before GCC exits.  */
43984       PLUGIN_INFO,                  /* Information about the plugin. */
43985       PLUGIN_GGC_START,             /* Called at start of GCC Garbage Collection. */
43986       PLUGIN_GGC_MARKING,           /* Extend the GGC marking. */
43987       PLUGIN_GGC_END,               /* Called at end of GGC. */
43988       PLUGIN_REGISTER_GGC_ROOTS,    /* Register an extra GGC root table. */
43989       PLUGIN_ATTRIBUTES,            /* Called during attribute registration */
43990       PLUGIN_START_UNIT,            /* Called before processing a translation unit.  */
43991       PLUGIN_PRAGMAS,               /* Called during pragma registration. */
43992       /* Called before first pass from all_passes.  */
43993       PLUGIN_ALL_PASSES_START,
43994       /* Called after last pass from all_passes.  */
43995       PLUGIN_ALL_PASSES_END,
43996       /* Called before first ipa pass.  */
43997       PLUGIN_ALL_IPA_PASSES_START,
43998       /* Called after last ipa pass.  */
43999       PLUGIN_ALL_IPA_PASSES_END,
44000       /* Allows to override pass gate decision for current_pass.  */
44001       PLUGIN_OVERRIDE_GATE,
44002       /* Called before executing a pass.  */
44003       PLUGIN_PASS_EXECUTION,
44004       /* Called before executing subpasses of a GIMPLE_PASS in
44005          execute_ipa_pass_list.  */
44006       PLUGIN_EARLY_GIMPLE_PASSES_START,
44007       /* Called after executing subpasses of a GIMPLE_PASS in
44008          execute_ipa_pass_list.  */
44009       PLUGIN_EARLY_GIMPLE_PASSES_END,
44010       /* Called when a pass is first instantiated.  */
44011       PLUGIN_NEW_PASS,
44012     /* Called when a file is #include-d or given via the #line directive.
44013        This could happen many times.  The event data is the included file path,
44014        as a const char* pointer.  */
44015       PLUGIN_INCLUDE_FILE,
44016
44017       PLUGIN_EVENT_FIRST_DYNAMIC    /* Dummy event used for indexing callback
44018                                        array.  */
44019     };
44020
44021 In addition, plugins can also look up the enumerator of a named event,
44022and / or generate new events dynamically, by calling the function
44023'get_named_event_id'.
44024
44025 To register a callback, the plugin calls 'register_callback' with the
44026arguments:
44027
44028   * 'char *name': Plugin name.
44029   * 'int event': The event code.
44030   * 'plugin_callback_func callback': The function that handles 'event'.
44031   * 'void *user_data': Pointer to plugin-specific data.
44032
44033 For the PLUGIN_PASS_MANAGER_SETUP, PLUGIN_INFO, and
44034PLUGIN_REGISTER_GGC_ROOTS pseudo-events the 'callback' should be null,
44035and the 'user_data' is specific.
44036
44037 When the PLUGIN_PRAGMAS event is triggered (with a null pointer as data
44038from GCC), plugins may register their own pragmas.  Notice that pragmas
44039are not available from 'lto1', so plugins used with '-flto' option to
44040GCC during link-time optimization cannot use pragmas and do not even see
44041functions like 'c_register_pragma' or 'pragma_lex'.
44042
44043 The PLUGIN_INCLUDE_FILE event, with a 'const char*' file path as GCC
44044data, is triggered for processing of '#include' or '#line' directives.
44045
44046 The PLUGIN_FINISH event is the last time that plugins can call GCC
44047functions, notably emit diagnostics with 'warning', 'error' etc.
44048
44049
44050File: gccint.info,  Node: Plugins pass,  Next: Plugins GC,  Prev: Plugin API,  Up: Plugins
44051
4405224.3 Interacting with the pass manager
44053======================================
44054
44055There needs to be a way to add/reorder/remove passes dynamically.  This
44056is useful for both analysis plugins (plugging in after a certain pass
44057such as CFG or an IPA pass) and optimization plugins.
44058
44059 Basic support for inserting new passes or replacing existing passes is
44060provided.  A plugin registers a new pass with GCC by calling
44061'register_callback' with the 'PLUGIN_PASS_MANAGER_SETUP' event and a
44062pointer to a 'struct register_pass_info' object defined as follows
44063
44064     enum pass_positioning_ops
44065     {
44066       PASS_POS_INSERT_AFTER,  // Insert after the reference pass.
44067       PASS_POS_INSERT_BEFORE, // Insert before the reference pass.
44068       PASS_POS_REPLACE        // Replace the reference pass.
44069     };
44070
44071     struct register_pass_info
44072     {
44073       struct opt_pass *pass;            /* New pass provided by the plugin.  */
44074       const char *reference_pass_name;  /* Name of the reference pass for hooking
44075                                            up the new pass.  */
44076       int ref_pass_instance_number;     /* Insert the pass at the specified
44077                                            instance number of the reference pass.  */
44078                                         /* Do it for every instance if it is 0.  */
44079       enum pass_positioning_ops pos_op; /* how to insert the new pass.  */
44080     };
44081
44082
44083     /* Sample plugin code that registers a new pass.  */
44084     int
44085     plugin_init (struct plugin_name_args *plugin_info,
44086                  struct plugin_gcc_version *version)
44087     {
44088       struct register_pass_info pass_info;
44089
44090       ...
44091
44092       /* Code to fill in the pass_info object with new pass information.  */
44093
44094       ...
44095
44096       /* Register the new pass.  */
44097       register_callback (plugin_info->base_name, PLUGIN_PASS_MANAGER_SETUP, NULL, &pass_info);
44098
44099       ...
44100     }
44101
44102
44103File: gccint.info,  Node: Plugins GC,  Next: Plugins description,  Prev: Plugins pass,  Up: Plugins
44104
4410524.4 Interacting with the GCC Garbage Collector
44106===============================================
44107
44108Some plugins may want to be informed when GGC (the GCC Garbage
44109Collector) is running.  They can register callbacks for the
44110'PLUGIN_GGC_START' and 'PLUGIN_GGC_END' events (for which the callback
44111is called with a null 'gcc_data') to be notified of the start or end of
44112the GCC garbage collection.
44113
44114 Some plugins may need to have GGC mark additional data.  This can be
44115done by registering a callback (called with a null 'gcc_data') for the
44116'PLUGIN_GGC_MARKING' event.  Such callbacks can call the 'ggc_set_mark'
44117routine, preferably through the 'ggc_mark' macro (and conversely, these
44118routines should usually not be used in plugins outside of the
44119'PLUGIN_GGC_MARKING' event).  Plugins that wish to hold weak references
44120to gc data may also use this event to drop weak references when the
44121object is about to be collected.  The 'ggc_marked_p' function can be
44122used to tell if an object is marked, or is about to be collected.  The
44123'gt_clear_cache' overloads which some types define may also be of use in
44124managing weak references.
44125
44126 Some plugins may need to add extra GGC root tables, e.g. to handle
44127their own 'GTY'-ed data.  This can be done with the
44128'PLUGIN_REGISTER_GGC_ROOTS' pseudo-event with a null callback and the
44129extra root table (of type 'struct ggc_root_tab*') as 'user_data'.
44130Running the 'gengtype -p SOURCE-DIR FILE-LIST PLUGIN*.C ...' utility
44131generates these extra root tables.
44132
44133 You should understand the details of memory management inside GCC
44134before using 'PLUGIN_GGC_MARKING' or 'PLUGIN_REGISTER_GGC_ROOTS'.
44135
44136
44137File: gccint.info,  Node: Plugins description,  Next: Plugins attr,  Prev: Plugins GC,  Up: Plugins
44138
4413924.5 Giving information about a plugin
44140======================================
44141
44142A plugin should give some information to the user about itself.  This
44143uses the following structure:
44144
44145     struct plugin_info
44146     {
44147       const char *version;
44148       const char *help;
44149     };
44150
44151 Such a structure is passed as the 'user_data' by the plugin's init
44152routine using 'register_callback' with the 'PLUGIN_INFO' pseudo-event
44153and a null callback.
44154
44155
44156File: gccint.info,  Node: Plugins attr,  Next: Plugins recording,  Prev: Plugins description,  Up: Plugins
44157
4415824.6 Registering custom attributes or pragmas
44159=============================================
44160
44161For analysis (or other) purposes it is useful to be able to add custom
44162attributes or pragmas.
44163
44164 The 'PLUGIN_ATTRIBUTES' callback is called during attribute
44165registration.  Use the 'register_attribute' function to register custom
44166attributes.
44167
44168     /* Attribute handler callback */
44169     static tree
44170     handle_user_attribute (tree *node, tree name, tree args,
44171                            int flags, bool *no_add_attrs)
44172     {
44173       return NULL_TREE;
44174     }
44175
44176     /* Attribute definition */
44177     static struct attribute_spec user_attr =
44178       { "user", 1, 1, false,  false, false, false, handle_user_attribute, NULL };
44179
44180     /* Plugin callback called during attribute registration.
44181     Registered with register_callback (plugin_name, PLUGIN_ATTRIBUTES, register_attributes, NULL)
44182     */
44183     static void
44184     register_attributes (void *event_data, void *data)
44185     {
44186       warning (0, G_("Callback to register attributes"));
44187       register_attribute (&user_attr);
44188     }
44189
44190 The PLUGIN_PRAGMAS callback is called once during pragmas registration.
44191Use the 'c_register_pragma', 'c_register_pragma_with_data',
44192'c_register_pragma_with_expansion',
44193'c_register_pragma_with_expansion_and_data' functions to register custom
44194pragmas and their handlers (which often want to call 'pragma_lex') from
44195'c-family/c-pragma.h'.
44196
44197     /* Plugin callback called during pragmas registration. Registered with
44198          register_callback (plugin_name, PLUGIN_PRAGMAS,
44199                             register_my_pragma, NULL);
44200     */
44201     static void
44202     register_my_pragma (void *event_data, void *data)
44203     {
44204       warning (0, G_("Callback to register pragmas"));
44205       c_register_pragma ("GCCPLUGIN", "sayhello", handle_pragma_sayhello);
44206     }
44207
44208 It is suggested to pass '"GCCPLUGIN"' (or a short name identifying your
44209plugin) as the "space" argument of your pragma.
44210
44211 Pragmas registered with 'c_register_pragma_with_expansion' or
44212'c_register_pragma_with_expansion_and_data' support preprocessor
44213expansions.  For example:
44214
44215     #define NUMBER 10
44216     #pragma GCCPLUGIN foothreshold (NUMBER)
44217
44218
44219File: gccint.info,  Node: Plugins recording,  Next: Plugins gate,  Prev: Plugins attr,  Up: Plugins
44220
4422124.7 Recording information about pass execution
44222===============================================
44223
44224The event PLUGIN_PASS_EXECUTION passes the pointer to the executed pass
44225(the same as current_pass) as 'gcc_data' to the callback.  You can also
44226inspect cfun to find out about which function this pass is executed for.
44227Note that this event will only be invoked if the gate check (if
44228applicable, modified by PLUGIN_OVERRIDE_GATE) succeeds.  You can use
44229other hooks, like 'PLUGIN_ALL_PASSES_START', 'PLUGIN_ALL_PASSES_END',
44230'PLUGIN_ALL_IPA_PASSES_START', 'PLUGIN_ALL_IPA_PASSES_END',
44231'PLUGIN_EARLY_GIMPLE_PASSES_START', and/or
44232'PLUGIN_EARLY_GIMPLE_PASSES_END' to manipulate global state in your
44233plugin(s) in order to get context for the pass execution.
44234
44235
44236File: gccint.info,  Node: Plugins gate,  Next: Plugins tracking,  Prev: Plugins recording,  Up: Plugins
44237
4423824.8 Controlling which passes are being run
44239===========================================
44240
44241After the original gate function for a pass is called, its result - the
44242gate status - is stored as an integer.  Then the event
44243'PLUGIN_OVERRIDE_GATE' is invoked, with a pointer to the gate status in
44244the 'gcc_data' parameter to the callback function.  A nonzero value of
44245the gate status means that the pass is to be executed.  You can both
44246read and write the gate status via the passed pointer.
44247
44248
44249File: gccint.info,  Node: Plugins tracking,  Next: Plugins building,  Prev: Plugins gate,  Up: Plugins
44250
4425124.9 Keeping track of available passes
44252======================================
44253
44254When your plugin is loaded, you can inspect the various pass lists to
44255determine what passes are available.  However, other plugins might add
44256new passes.  Also, future changes to GCC might cause generic passes to
44257be added after plugin loading.  When a pass is first added to one of the
44258pass lists, the event 'PLUGIN_NEW_PASS' is invoked, with the callback
44259parameter 'gcc_data' pointing to the new pass.
44260
44261
44262File: gccint.info,  Node: Plugins building,  Prev: Plugins tracking,  Up: Plugins
44263
4426424.10 Building GCC plugins
44265==========================
44266
44267If plugins are enabled, GCC installs the headers needed to build a
44268plugin (somewhere in the installation tree, e.g. under '/usr/local').
44269In particular a 'plugin/include' directory is installed, containing all
44270the header files needed to build plugins.
44271
44272 On most systems, you can query this 'plugin' directory by invoking 'gcc
44273-print-file-name=plugin' (replace if needed 'gcc' with the appropriate
44274program path).
44275
44276 Inside plugins, this 'plugin' directory name can be queried by calling
44277'default_plugin_dir_name ()'.
44278
44279 Plugins may know, when they are compiled, the GCC version for which
44280'plugin-version.h' is provided.  The constant macros
44281'GCCPLUGIN_VERSION_MAJOR', 'GCCPLUGIN_VERSION_MINOR',
44282'GCCPLUGIN_VERSION_PATCHLEVEL', 'GCCPLUGIN_VERSION' are integer numbers,
44283so a plugin could ensure it is built for GCC 4.7 with
44284     #if GCCPLUGIN_VERSION != 4007
44285     #error this GCC plugin is for GCC 4.7
44286     #endif
44287
44288 The following GNU Makefile excerpt shows how to build a simple plugin:
44289
44290     HOST_GCC=g++
44291     TARGET_GCC=gcc
44292     PLUGIN_SOURCE_FILES= plugin1.c plugin2.cc
44293     GCCPLUGINS_DIR:= $(shell $(TARGET_GCC) -print-file-name=plugin)
44294     CXXFLAGS+= -I$(GCCPLUGINS_DIR)/include -fPIC -fno-rtti -O2
44295
44296     plugin.so: $(PLUGIN_SOURCE_FILES)
44297        $(HOST_GCC) -shared $(CXXFLAGS) $^ -o $@
44298
44299 A single source file plugin may be built with 'g++ -I`gcc
44300-print-file-name=plugin`/include -fPIC -shared -fno-rtti -O2 plugin.c -o
44301plugin.so', using backquote shell syntax to query the 'plugin'
44302directory.
44303
44304 Plugin support on Windows/MinGW has a number of limitations and
44305additional requirements.  When building a plugin on Windows we have to
44306link an import library for the corresponding backend executable, for
44307example, 'cc1.exe', 'cc1plus.exe', etc., in order to gain access to the
44308symbols provided by GCC. This means that on Windows a plugin is
44309language-specific, for example, for C, C++, etc.  If you wish to use
44310your plugin with multiple languages, then you will need to build
44311multiple plugin libraries and either instruct your users on how to load
44312the correct version or provide a compiler wrapper that does this
44313automatically.
44314
44315 Additionally, on Windows the plugin library has to export the
44316'plugin_is_GPL_compatible' and 'plugin_init' symbols.  If you do not
44317wish to modify the source code of your plugin, then you can use the
44318'-Wl,--export-all-symbols' option or provide a suitable DEF file.
44319Alternatively, you can export just these two symbols by decorating them
44320with '__declspec(dllexport)', for example:
44321
44322     #ifdef _WIN32
44323     __declspec(dllexport)
44324     #endif
44325     int plugin_is_GPL_compatible;
44326
44327     #ifdef _WIN32
44328     __declspec(dllexport)
44329     #endif
44330     int plugin_init (plugin_name_args *, plugin_gcc_version *)
44331
44332 The import libraries are installed into the 'plugin' directory and
44333their names are derived by appending the '.a' extension to the backend
44334executable names, for example, 'cc1.exe.a', 'cc1plus.exe.a', etc.  The
44335following command line shows how to build the single source file plugin
44336on Windows to be used with the C++ compiler:
44337
44338     g++ -I`gcc -print-file-name=plugin`/include -shared -Wl,--export-all-symbols \
44339     -o plugin.dll plugin.c `gcc -print-file-name=plugin`/cc1plus.exe.a
44340
44341 When a plugin needs to use 'gengtype', be sure that both 'gengtype' and
44342'gtype.state' have the same version as the GCC for which the plugin is
44343built.
44344
44345
44346File: gccint.info,  Node: LTO,  Next: Match and Simplify,  Prev: Plugins,  Up: Top
44347
4434825 Link Time Optimization
44349*************************
44350
44351Link Time Optimization (LTO) gives GCC the capability of dumping its
44352internal representation (GIMPLE) to disk, so that all the different
44353compilation units that make up a single executable can be optimized as a
44354single module.  This expands the scope of inter-procedural optimizations
44355to encompass the whole program (or, rather, everything that is visible
44356at link time).
44357
44358* Menu:
44359
44360* LTO Overview::            Overview of LTO.
44361* LTO object file layout::  LTO file sections in ELF.
44362* IPA::                     Using summary information in IPA passes.
44363* WHOPR::                   Whole program assumptions,
44364                            linker plugin and symbol visibilities.
44365* Internal flags::          Internal flags controlling 'lto1'.
44366
44367
44368File: gccint.info,  Node: LTO Overview,  Next: LTO object file layout,  Up: LTO
44369
4437025.1 Design Overview
44371====================
44372
44373Link time optimization is implemented as a GCC front end for a bytecode
44374representation of GIMPLE that is emitted in special sections of '.o'
44375files.  Currently, LTO support is enabled in most ELF-based systems, as
44376well as darwin, cygwin and mingw systems.
44377
44378 Since GIMPLE bytecode is saved alongside final object code, object
44379files generated with LTO support are larger than regular object files.
44380This "fat" object format makes it easy to integrate LTO into existing
44381build systems, as one can, for instance, produce archives of the files.
44382Additionally, one might be able to ship one set of fat objects which
44383could be used both for development and the production of optimized
44384builds.  A, perhaps surprising, side effect of this feature is that any
44385mistake in the toolchain leads to LTO information not being used (e.g.
44386an older 'libtool' calling 'ld' directly).  This is both an advantage,
44387as the system is more robust, and a disadvantage, as the user is not
44388informed that the optimization has been disabled.
44389
44390 The current implementation only produces "fat" objects, effectively
44391doubling compilation time and increasing file sizes up to 5x the
44392original size.  This hides the problem that some tools, such as 'ar' and
44393'nm', need to understand symbol tables of LTO sections.  These tools
44394were extended to use the plugin infrastructure, and with these problems
44395solved, GCC will also support "slim" objects consisting of the
44396intermediate code alone.
44397
44398 At the highest level, LTO splits the compiler in two.  The first half
44399(the "writer") produces a streaming representation of all the internal
44400data structures needed to optimize and generate code.  This includes
44401declarations, types, the callgraph and the GIMPLE representation of
44402function bodies.
44403
44404 When '-flto' is given during compilation of a source file, the pass
44405manager executes all the passes in 'all_lto_gen_passes'.  Currently,
44406this phase is composed of two IPA passes:
44407
44408   * 'pass_ipa_lto_gimple_out' This pass executes the function
44409     'lto_output' in 'lto-streamer-out.c', which traverses the call
44410     graph encoding every reachable declaration, type and function.
44411     This generates a memory representation of all the file sections
44412     described below.
44413
44414   * 'pass_ipa_lto_finish_out' This pass executes the function
44415     'produce_asm_for_decls' in 'lto-streamer-out.c', which takes the
44416     memory image built in the previous pass and encodes it in the
44417     corresponding ELF file sections.
44418
44419 The second half of LTO support is the "reader".  This is implemented as
44420the GCC front end 'lto1' in 'lto/lto.c'.  When 'collect2' detects a link
44421set of '.o'/'.a' files with LTO information and the '-flto' is enabled,
44422it invokes 'lto1' which reads the set of files and aggregates them into
44423a single translation unit for optimization.  The main entry point for
44424the reader is 'lto/lto.c':'lto_main'.
44425
4442625.1.1 LTO modes of operation
44427-----------------------------
44428
44429One of the main goals of the GCC link-time infrastructure was to allow
44430effective compilation of large programs.  For this reason GCC implements
44431two link-time compilation modes.
44432
44433  1. _LTO mode_, in which the whole program is read into the compiler at
44434     link-time and optimized in a similar way as if it were a single
44435     source-level compilation unit.
44436
44437  2. _WHOPR or partitioned mode_, designed to utilize multiple CPUs
44438     and/or a distributed compilation environment to quickly link large
44439     applications.  WHOPR stands for WHOle Program optimizeR (not to be
44440     confused with the semantics of '-fwhole-program').  It partitions
44441     the aggregated callgraph from many different '.o' files and
44442     distributes the compilation of the sub-graphs to different CPUs.
44443
44444     Note that distributed compilation is not implemented yet, but since
44445     the parallelism is facilitated via generating a 'Makefile', it
44446     would be easy to implement.
44447
44448 WHOPR splits LTO into three main stages:
44449  1. Local generation (LGEN) This stage executes in parallel.  Every
44450     file in the program is compiled into the intermediate language and
44451     packaged together with the local call-graph and summary
44452     information.  This stage is the same for both the LTO and WHOPR
44453     compilation mode.
44454
44455  2. Whole Program Analysis (WPA) WPA is performed sequentially.  The
44456     global call-graph is generated, and a global analysis procedure
44457     makes transformation decisions.  The global call-graph is
44458     partitioned to facilitate parallel optimization during phase 3.
44459     The results of the WPA stage are stored into new object files which
44460     contain the partitions of program expressed in the intermediate
44461     language and the optimization decisions.
44462
44463  3. Local transformations (LTRANS) This stage executes in parallel.
44464     All the decisions made during phase 2 are implemented locally in
44465     each partitioned object file, and the final object code is
44466     generated.  Optimizations which cannot be decided efficiently
44467     during the phase 2 may be performed on the local call-graph
44468     partitions.
44469
44470 WHOPR can be seen as an extension of the usual LTO mode of compilation.
44471In LTO, WPA and LTRANS are executed within a single execution of the
44472compiler, after the whole program has been read into memory.
44473
44474 When compiling in WHOPR mode, the callgraph is partitioned during the
44475WPA stage.  The whole program is split into a given number of partitions
44476of roughly the same size.  The compiler tries to minimize the number of
44477references which cross partition boundaries.  The main advantage of
44478WHOPR is to allow the parallel execution of LTRANS stages, which are the
44479most time-consuming part of the compilation process.  Additionally, it
44480avoids the need to load the whole program into memory.
44481
44482
44483File: gccint.info,  Node: LTO object file layout,  Next: IPA,  Prev: LTO Overview,  Up: LTO
44484
4448525.2 LTO file sections
44486======================
44487
44488LTO information is stored in several ELF sections inside object files.
44489Data structures and enum codes for sections are defined in
44490'lto-streamer.h'.
44491
44492 These sections are emitted from 'lto-streamer-out.c' and mapped in all
44493at once from 'lto/lto.c':'lto_file_read'.  The individual functions
44494dealing with the reading/writing of each section are described below.
44495
44496   * Command line options ('.gnu.lto_.opts')
44497
44498     This section contains the command line options used to generate the
44499     object files.  This is used at link time to determine the
44500     optimization level and other settings when they are not explicitly
44501     specified at the linker command line.
44502
44503     Currently, GCC does not support combining LTO object files compiled
44504     with different set of the command line options into a single
44505     binary.  At link time, the options given on the command line and
44506     the options saved on all the files in a link-time set are applied
44507     globally.  No attempt is made at validating the combination of
44508     flags (other than the usual validation done by option processing).
44509     This is implemented in 'lto/lto.c':'lto_read_all_file_options'.
44510
44511   * Symbol table ('.gnu.lto_.symtab')
44512
44513     This table replaces the ELF symbol table for functions and
44514     variables represented in the LTO IL. Symbols used and exported by
44515     the optimized assembly code of "fat" objects might not match the
44516     ones used and exported by the intermediate code.  This table is
44517     necessary because the intermediate code is less optimized and thus
44518     requires a separate symbol table.
44519
44520     Additionally, the binary code in the "fat" object will lack a call
44521     to a function, since the call was optimized out at compilation time
44522     after the intermediate language was streamed out.  In some special
44523     cases, the same optimization may not happen during link-time
44524     optimization.  This would lead to an undefined symbol if only one
44525     symbol table was used.
44526
44527     The symbol table is emitted in
44528     'lto-streamer-out.c':'produce_symtab'.
44529
44530   * Global declarations and types ('.gnu.lto_.decls')
44531
44532     This section contains an intermediate language dump of all
44533     declarations and types required to represent the callgraph, static
44534     variables and top-level debug info.
44535
44536     The contents of this section are emitted in
44537     'lto-streamer-out.c':'produce_asm_for_decls'.  Types and symbols
44538     are emitted in a topological order that preserves the sharing of
44539     pointers when the file is read back in
44540     ('lto.c':'read_cgraph_and_symbols').
44541
44542   * The callgraph ('.gnu.lto_.cgraph')
44543
44544     This section contains the basic data structure used by the GCC
44545     inter-procedural optimization infrastructure.  This section stores
44546     an annotated multi-graph which represents the functions and call
44547     sites as well as the variables, aliases and top-level 'asm'
44548     statements.
44549
44550     This section is emitted in 'lto-streamer-out.c':'output_cgraph' and
44551     read in 'lto-cgraph.c':'input_cgraph'.
44552
44553   * IPA references ('.gnu.lto_.refs')
44554
44555     This section contains references between function and static
44556     variables.  It is emitted by 'lto-cgraph.c':'output_refs' and read
44557     by 'lto-cgraph.c':'input_refs'.
44558
44559   * Function bodies ('.gnu.lto_.function_body.<name>')
44560
44561     This section contains function bodies in the intermediate language
44562     representation.  Every function body is in a separate section to
44563     allow copying of the section independently to different object
44564     files or reading the function on demand.
44565
44566     Functions are emitted in 'lto-streamer-out.c':'output_function' and
44567     read in 'lto-streamer-in.c':'input_function'.
44568
44569   * Static variable initializers ('.gnu.lto_.vars')
44570
44571     This section contains all the symbols in the global variable pool.
44572     It is emitted by 'lto-cgraph.c':'output_varpool' and read in
44573     'lto-cgraph.c':'input_cgraph'.
44574
44575   * Summaries and optimization summaries used by IPA passes
44576     ('.gnu.lto_.<xxx>', where '<xxx>' is one of 'jmpfuncs', 'pureconst'
44577     or 'reference')
44578
44579     These sections are used by IPA passes that need to emit summary
44580     information during LTO generation to be read and aggregated at link
44581     time.  Each pass is responsible for implementing two pass manager
44582     hooks: one for writing the summary and another for reading it in.
44583     The format of these sections is entirely up to each individual
44584     pass.  The only requirement is that the writer and reader hooks
44585     agree on the format.
44586
44587
44588File: gccint.info,  Node: IPA,  Next: WHOPR,  Prev: LTO object file layout,  Up: LTO
44589
4459025.3 Using summary information in IPA passes
44591============================================
44592
44593Programs are represented internally as a _callgraph_ (a multi-graph
44594where nodes are functions and edges are call sites) and a _varpool_ (a
44595list of static and external variables in the program).
44596
44597 The inter-procedural optimization is organized as a sequence of
44598individual passes, which operate on the callgraph and the varpool.  To
44599make the implementation of WHOPR possible, every inter-procedural
44600optimization pass is split into several stages that are executed at
44601different times during WHOPR compilation:
44602
44603   * LGEN time
44604       1. _Generate summary_ ('generate_summary' in 'struct
44605          ipa_opt_pass_d').  This stage analyzes every function body and
44606          variable initializer is examined and stores relevant
44607          information into a pass-specific data structure.
44608
44609       2. _Write summary_ ('write_summary' in 'struct ipa_opt_pass_d').
44610          This stage writes all the pass-specific information generated
44611          by 'generate_summary'.  Summaries go into their own
44612          'LTO_section_*' sections that have to be declared in
44613          'lto-streamer.h':'enum lto_section_type'.  A new section is
44614          created by calling 'create_output_block' and data can be
44615          written using the 'lto_output_*' routines.
44616
44617   * WPA time
44618       1. _Read summary_ ('read_summary' in 'struct ipa_opt_pass_d').
44619          This stage reads all the pass-specific information in exactly
44620          the same order that it was written by 'write_summary'.
44621
44622       2. _Execute_ ('execute' in 'struct opt_pass').  This performs
44623          inter-procedural propagation.  This must be done without
44624          actual access to the individual function bodies or variable
44625          initializers.  Typically, this results in a transitive closure
44626          operation over the summary information of all the nodes in the
44627          callgraph.
44628
44629       3. _Write optimization summary_ ('write_optimization_summary' in
44630          'struct ipa_opt_pass_d').  This writes the result of the
44631          inter-procedural propagation into the object file.  This can
44632          use the same data structures and helper routines used in
44633          'write_summary'.
44634
44635   * LTRANS time
44636       1. _Read optimization summary_ ('read_optimization_summary' in
44637          'struct ipa_opt_pass_d').  The counterpart to
44638          'write_optimization_summary'.  This reads the interprocedural
44639          optimization decisions in exactly the same format emitted by
44640          'write_optimization_summary'.
44641
44642       2. _Transform_ ('function_transform' and 'variable_transform' in
44643          'struct ipa_opt_pass_d').  The actual function bodies and
44644          variable initializers are updated based on the information
44645          passed down from the _Execute_ stage.
44646
44647 The implementation of the inter-procedural passes are shared between
44648LTO, WHOPR and classic non-LTO compilation.
44649
44650   * During the traditional file-by-file mode every pass executes its
44651     own _Generate summary_, _Execute_, and _Transform_ stages within
44652     the single execution context of the compiler.
44653
44654   * In LTO compilation mode, every pass uses _Generate summary_ and
44655     _Write summary_ stages at compilation time, while the _Read
44656     summary_, _Execute_, and _Transform_ stages are executed at link
44657     time.
44658
44659   * In WHOPR mode all stages are used.
44660
44661 To simplify development, the GCC pass manager differentiates between
44662normal inter-procedural passes (*note Regular IPA passes::), small
44663inter-procedural passes (*note Small IPA passes::) and late
44664inter-procedural passes (*note Late IPA passes::).  A small or late IPA
44665pass ('SIMPLE_IPA_PASS') does everything at once and thus cannot be
44666executed during WPA in WHOPR mode.  It defines only the _Execute_ stage
44667and during this stage it accesses and modifies the function bodies.
44668Such passes are useful for optimization at LGEN or LTRANS time and are
44669used, for example, to implement early optimization before writing object
44670files.  The simple inter-procedural passes can also be used for easier
44671prototyping and development of a new inter-procedural pass.
44672
4467325.3.1 Virtual clones
44674---------------------
44675
44676One of the main challenges of introducing the WHOPR compilation mode was
44677addressing the interactions between optimization passes.  In LTO
44678compilation mode, the passes are executed in a sequence, each of which
44679consists of analysis (or _Generate summary_), propagation (or _Execute_)
44680and _Transform_ stages.  Once the work of one pass is finished, the next
44681pass sees the updated program representation and can execute.  This
44682makes the individual passes dependent on each other.
44683
44684 In WHOPR mode all passes first execute their _Generate summary_ stage.
44685Then summary writing marks the end of the LGEN stage.  At WPA time, the
44686summaries are read back into memory and all passes run the _Execute_
44687stage.  Optimization summaries are streamed and sent to LTRANS, where
44688all the passes execute the _Transform_ stage.
44689
44690 Most optimization passes split naturally into analysis, propagation and
44691transformation stages.  But some do not.  The main problem arises when
44692one pass performs changes and the following pass gets confused by seeing
44693different callgraphs between the _Transform_ stage and the _Generate
44694summary_ or _Execute_ stage.  This means that the passes are required to
44695communicate their decisions with each other.
44696
44697 To facilitate this communication, the GCC callgraph infrastructure
44698implements _virtual clones_, a method of representing the changes
44699performed by the optimization passes in the callgraph without needing to
44700update function bodies.
44701
44702 A _virtual clone_ in the callgraph is a function that has no associated
44703body, just a description of how to create its body based on a different
44704function (which itself may be a virtual clone).
44705
44706 The description of function modifications includes adjustments to the
44707function's signature (which allows, for example, removing or adding
44708function arguments), substitutions to perform on the function body, and,
44709for inlined functions, a pointer to the function that it will be inlined
44710into.
44711
44712 It is also possible to redirect any edge of the callgraph from a
44713function to its virtual clone.  This implies updating of the call site
44714to adjust for the new function signature.
44715
44716 Most of the transformations performed by inter-procedural optimizations
44717can be represented via virtual clones.  For instance, a constant
44718propagation pass can produce a virtual clone of the function which
44719replaces one of its arguments by a constant.  The inliner can represent
44720its decisions by producing a clone of a function whose body will be
44721later integrated into a given function.
44722
44723 Using _virtual clones_, the program can be easily updated during the
44724_Execute_ stage, solving most of pass interactions problems that would
44725otherwise occur during _Transform_.
44726
44727 Virtual clones are later materialized in the LTRANS stage and turned
44728into real functions.  Passes executed after the virtual clone were
44729introduced also perform their _Transform_ stage on new functions, so for
44730a pass there is no significant difference between operating on a real
44731function or a virtual clone introduced before its _Execute_ stage.
44732
44733 Optimization passes then work on virtual clones introduced before their
44734_Execute_ stage as if they were real functions.  The only difference is
44735that clones are not visible during the _Generate Summary_ stage.
44736
44737 To keep function summaries updated, the callgraph interface allows an
44738optimizer to register a callback that is called every time a new clone
44739is introduced as well as when the actual function or variable is
44740generated or when a function or variable is removed.  These hooks are
44741registered in the _Generate summary_ stage and allow the pass to keep
44742its information intact until the _Execute_ stage.  The same hooks can
44743also be registered during the _Execute_ stage to keep the optimization
44744summaries updated for the _Transform_ stage.
44745
4474625.3.2 IPA references
44747---------------------
44748
44749GCC represents IPA references in the callgraph.  For a function or
44750variable 'A', the _IPA reference_ is a list of all locations where the
44751address of 'A' is taken and, when 'A' is a variable, a list of all
44752direct stores and reads to/from 'A'.  References represent an oriented
44753multi-graph on the union of nodes of the callgraph and the varpool.  See
44754'ipa-reference.c':'ipa_reference_write_optimization_summary' and
44755'ipa-reference.c':'ipa_reference_read_optimization_summary' for details.
44756
4475725.3.3 Jump functions
44758---------------------
44759
44760Suppose that an optimization pass sees a function 'A' and it knows the
44761values of (some of) its arguments.  The _jump function_ describes the
44762value of a parameter of a given function call in function 'A' based on
44763this knowledge.
44764
44765 Jump functions are used by several optimizations, such as the
44766inter-procedural constant propagation pass and the devirtualization
44767pass.  The inliner also uses jump functions to perform inlining of
44768callbacks.
44769
44770
44771File: gccint.info,  Node: WHOPR,  Next: Internal flags,  Prev: IPA,  Up: LTO
44772
4477325.4 Whole program assumptions, linker plugin and symbol visibilities
44774=====================================================================
44775
44776Link-time optimization gives relatively minor benefits when used alone.
44777The problem is that propagation of inter-procedural information does not
44778work well across functions and variables that are called or referenced
44779by other compilation units (such as from a dynamically linked library).
44780We say that such functions and variables are _externally visible_.
44781
44782 To make the situation even more difficult, many applications organize
44783themselves as a set of shared libraries, and the default ELF visibility
44784rules allow one to overwrite any externally visible symbol with a
44785different symbol at runtime.  This basically disables any optimizations
44786across such functions and variables, because the compiler cannot be sure
44787that the function body it is seeing is the same function body that will
44788be used at runtime.  Any function or variable not declared 'static' in
44789the sources degrades the quality of inter-procedural optimization.
44790
44791 To avoid this problem the compiler must assume that it sees the whole
44792program when doing link-time optimization.  Strictly speaking, the whole
44793program is rarely visible even at link-time.  Standard system libraries
44794are usually linked dynamically or not provided with the link-time
44795information.  In GCC, the whole program option ('-fwhole-program')
44796asserts that every function and variable defined in the current
44797compilation unit is static, except for function 'main' (note: at link
44798time, the current unit is the union of all objects compiled with LTO).
44799Since some functions and variables need to be referenced externally, for
44800example by another DSO or from an assembler file, GCC also provides the
44801function and variable attribute 'externally_visible' which can be used
44802to disable the effect of '-fwhole-program' on a specific symbol.
44803
44804 The whole program mode assumptions are slightly more complex in C++,
44805where inline functions in headers are put into _COMDAT_ sections.
44806COMDAT function and variables can be defined by multiple object files
44807and their bodies are unified at link-time and dynamic link-time.  COMDAT
44808functions are changed to local only when their address is not taken and
44809thus un-sharing them with a library is not harmful.  COMDAT variables
44810always remain externally visible, however for readonly variables it is
44811assumed that their initializers cannot be overwritten by a different
44812value.
44813
44814 GCC provides the function and variable attribute 'visibility' that can
44815be used to specify the visibility of externally visible symbols (or
44816alternatively an '-fdefault-visibility' command line option).  ELF
44817defines the 'default', 'protected', 'hidden' and 'internal'
44818visibilities.
44819
44820 The most commonly used is visibility is 'hidden'.  It specifies that
44821the symbol cannot be referenced from outside of the current shared
44822library.  Unfortunately, this information cannot be used directly by the
44823link-time optimization in the compiler since the whole shared library
44824also might contain non-LTO objects and those are not visible to the
44825compiler.
44826
44827 GCC solves this problem using linker plugins.  A _linker plugin_ is an
44828interface to the linker that allows an external program to claim the
44829ownership of a given object file.  The linker then performs the linking
44830procedure by querying the plugin about the symbol table of the claimed
44831objects and once the linking decisions are complete, the plugin is
44832allowed to provide the final object file before the actual linking is
44833made.  The linker plugin obtains the symbol resolution information which
44834specifies which symbols provided by the claimed objects are bound from
44835the rest of a binary being linked.
44836
44837 GCC is designed to be independent of the rest of the toolchain and aims
44838to support linkers without plugin support.  For this reason it does not
44839use the linker plugin by default.  Instead, the object files are
44840examined by 'collect2' before being passed to the linker and objects
44841found to have LTO sections are passed to 'lto1' first.  This mode does
44842not work for library archives.  The decision on what object files from
44843the archive are needed depends on the actual linking and thus GCC would
44844have to implement the linker itself.  The resolution information is
44845missing too and thus GCC needs to make an educated guess based on
44846'-fwhole-program'.  Without the linker plugin GCC also assumes that
44847symbols are declared 'hidden' and not referred by non-LTO code by
44848default.
44849
44850
44851File: gccint.info,  Node: Internal flags,  Prev: WHOPR,  Up: LTO
44852
4485325.5 Internal flags controlling 'lto1'
44854======================================
44855
44856The following flags are passed into 'lto1' and are not meant to be used
44857directly from the command line.
44858
44859   * -fwpa This option runs the serial part of the link-time optimizer
44860     performing the inter-procedural propagation (WPA mode).  The
44861     compiler reads in summary information from all inputs and performs
44862     an analysis based on summary information only.  It generates object
44863     files for subsequent runs of the link-time optimizer where
44864     individual object files are optimized using both summary
44865     information from the WPA mode and the actual function bodies.  It
44866     then drives the LTRANS phase.
44867
44868   * -fltrans This option runs the link-time optimizer in the
44869     local-transformation (LTRANS) mode, which reads in output from a
44870     previous run of the LTO in WPA mode.  In the LTRANS mode, LTO
44871     optimizes an object and produces the final assembly.
44872
44873   * -fltrans-output-list=FILE This option specifies a file to which the
44874     names of LTRANS output files are written.  This option is only
44875     meaningful in conjunction with '-fwpa'.
44876
44877   * -fresolution=FILE This option specifies the linker resolution file.
44878     This option is only meaningful in conjunction with '-fwpa' and as
44879     option to pass through to the LTO linker plugin.
44880
44881
44882File: gccint.info,  Node: Match and Simplify,  Next: Static Analyzer,  Prev: LTO,  Up: Top
44883
4488426 Match and Simplify
44885*********************
44886
44887The GIMPLE and GENERIC pattern matching project match-and-simplify tries
44888to address several issues.
44889
44890  1. unify expression simplifications currently spread and duplicated
44891     over separate files like fold-const.c, gimple-fold.c and builtins.c
44892  2. allow for a cheap way to implement building and simplifying
44893     non-trivial GIMPLE expressions, avoiding the need to go through
44894     building and simplifying GENERIC via fold_buildN and then
44895     gimplifying via force_gimple_operand
44896
44897 To address these the project introduces a simple domain specific
44898language to write expression simplifications from which code targeting
44899GIMPLE and GENERIC is auto-generated.  The GENERIC variant follows the
44900fold_buildN API while for the GIMPLE variant and to address 2) new APIs
44901are introduced.
44902
44903* Menu:
44904
44905* GIMPLE API::
44906* The Language::
44907
44908
44909File: gccint.info,  Node: GIMPLE API,  Next: The Language,  Up: Match and Simplify
44910
4491126.1 GIMPLE API
44912===============
44913
44914 -- GIMPLE function: tree gimple_simplify (enum tree_code, tree, tree,
44915          gimple_seq *, tree (*)(tree))
44916 -- GIMPLE function: tree gimple_simplify (enum tree_code, tree, tree,
44917          tree, gimple_seq *, tree (*)(tree))
44918 -- GIMPLE function: tree gimple_simplify (enum tree_code, tree, tree,
44919          tree, tree, gimple_seq *, tree (*)(tree))
44920 -- GIMPLE function: tree gimple_simplify (enum built_in_function, tree,
44921          tree, gimple_seq *, tree (*)(tree))
44922 -- GIMPLE function: tree gimple_simplify (enum built_in_function, tree,
44923          tree, tree, gimple_seq *, tree (*)(tree))
44924 -- GIMPLE function: tree gimple_simplify (enum built_in_function, tree,
44925          tree, tree, tree, gimple_seq *, tree (*)(tree))
44926     The main GIMPLE API entry to the expression simplifications
44927     mimicing that of the GENERIC fold_{unary,binary,ternary} functions.
44928
44929 thus providing n-ary overloads for operation or function.  The
44930additional arguments are a gimple_seq where built statements are
44931inserted on (if 'NULL' then simplifications requiring new statements are
44932not performed) and a valueization hook that can be used to tie
44933simplifications to a SSA lattice.
44934
44935 In addition to those APIs 'fold_stmt' is overloaded with a valueization
44936hook:
44937
44938 -- bool: fold_stmt (gimple_stmt_iterator *, tree (*)(tree));
44939
44940 Ontop of these a 'fold_buildN'-like API for GIMPLE is introduced:
44941
44942 -- GIMPLE function: tree gimple_build (gimple_seq *, location_t, enum
44943          tree_code, tree, tree, tree (*valueize) (tree) = NULL);
44944 -- GIMPLE function: tree gimple_build (gimple_seq *, location_t, enum
44945          tree_code, tree, tree, tree, tree (*valueize) (tree) = NULL);
44946 -- GIMPLE function: tree gimple_build (gimple_seq *, location_t, enum
44947          tree_code, tree, tree, tree, tree, tree (*valueize) (tree) =
44948          NULL);
44949 -- GIMPLE function: tree gimple_build (gimple_seq *, location_t, enum
44950          built_in_function, tree, tree, tree (*valueize) (tree) =
44951          NULL);
44952 -- GIMPLE function: tree gimple_build (gimple_seq *, location_t, enum
44953          built_in_function, tree, tree, tree, tree (*valueize) (tree) =
44954          NULL);
44955 -- GIMPLE function: tree gimple_build (gimple_seq *, location_t, enum
44956          built_in_function, tree, tree, tree, tree, tree (*valueize)
44957          (tree) = NULL);
44958 -- GIMPLE function: tree gimple_convert (gimple_seq *, location_t,
44959          tree, tree);
44960
44961 which is supposed to replace 'force_gimple_operand (fold_buildN (...),
44962...)' and calls to 'fold_convert'.  Overloads without the 'location_t'
44963argument exist.  Built statements are inserted on the provided sequence
44964and simplification is performed using the optional valueization hook.
44965
44966
44967File: gccint.info,  Node: The Language,  Prev: GIMPLE API,  Up: Match and Simplify
44968
4496926.2 The Language
44970=================
44971
44972The language to write expression simplifications in resembles other
44973domain-specific languages GCC uses.  Thus it is lispy.  Lets start with
44974an example from the match.pd file:
44975
44976     (simplify
44977       (bit_and @0 integer_all_onesp)
44978       @0)
44979
44980 This example contains all required parts of an expression
44981simplification.  A simplification is wrapped inside a '(simplify ...)'
44982expression.  That contains at least two operands - an expression that is
44983matched with the GIMPLE or GENERIC IL and a replacement expression that
44984is returned if the match was successful.
44985
44986 Expressions have an operator ID, 'bit_and' in this case.  Expressions
44987can be lower-case tree codes with '_expr' stripped off or builtin
44988function code names in all-caps, like 'BUILT_IN_SQRT'.
44989
44990 '@n' denotes a so-called capture.  It captures the operand and lets you
44991refer to it in other places of the match-and-simplify.  In the above
44992example it is refered to in the replacement expression.  Captures are
44993'@' followed by a number or an identifier.
44994
44995     (simplify
44996       (bit_xor @0 @0)
44997       { build_zero_cst (type); })
44998
44999 In this example '@0' is mentioned twice which constrains the matched
45000expression to have two equal operands.  Usually matches are constraint
45001to equal types.  If operands may be constants and conversions are
45002involved matching by value might be preferred in which case use '@@0' to
45003denote a by value match and the specific operand you want to refer to in
45004the result part.  This example also introduces operands written in C
45005code.  These can be used in the expression replacements and are supposed
45006to evaluate to a tree node which has to be a valid GIMPLE operand (so
45007you cannot generate expressions in C code).
45008
45009     (simplify
45010       (trunc_mod integer_zerop@0 @1)
45011       (if (!integer_zerop (@1))
45012        @0))
45013
45014 Here '@0' captures the first operand of the trunc_mod expression which
45015is also predicated with 'integer_zerop'.  Expression operands may be
45016either expressions, predicates or captures.  Captures can be
45017unconstrained or capture expresions or predicates.
45018
45019 This example introduces an optional operand of simplify, the
45020if-expression.  This condition is evaluated after the expression matched
45021in the IL and is required to evaluate to true to enable the replacement
45022expression in the second operand position.  The expression operand of
45023the 'if' is a standard C expression which may contain references to
45024captures.  The 'if' has an optional third operand which may contain the
45025replacement expression that is enabled when the condition evaluates to
45026false.
45027
45028 A 'if' expression can be used to specify a common condition for
45029multiple simplify patterns, avoiding the need to repeat that multiple
45030times:
45031
45032     (if (!TYPE_SATURATING (type)
45033          && !FLOAT_TYPE_P (type) && !FIXED_POINT_TYPE_P (type))
45034       (simplify
45035         (minus (plus @0 @1) @0)
45036         @1)
45037       (simplify
45038         (minus (minus @0 @1) @0)
45039         (negate @1)))
45040
45041 Note that 'if's in outer position do not have the optional else clause
45042but instead have multiple then clauses.
45043
45044 Ifs can be nested.
45045
45046 There exists a 'switch' expression which can be used to chain
45047conditions avoiding nesting 'if's too much:
45048
45049     (simplify
45050      (simple_comparison @0 REAL_CST@1)
45051      (switch
45052       /* a CMP (-0) -> a CMP 0  */
45053       (if (REAL_VALUE_MINUS_ZERO (TREE_REAL_CST (@1)))
45054        (cmp @0 { build_real (TREE_TYPE (@1), dconst0); }))
45055       /* x != NaN is always true, other ops are always false.  */
45056       (if (REAL_VALUE_ISNAN (TREE_REAL_CST (@1))
45057            && ! HONOR_SNANS (@1))
45058        { constant_boolean_node (cmp == NE_EXPR, type); })))
45059
45060 Is equal to
45061
45062     (simplify
45063      (simple_comparison @0 REAL_CST@1)
45064      (switch
45065       /* a CMP (-0) -> a CMP 0  */
45066       (if (REAL_VALUE_MINUS_ZERO (TREE_REAL_CST (@1)))
45067        (cmp @0 { build_real (TREE_TYPE (@1), dconst0); })
45068        /* x != NaN is always true, other ops are always false.  */
45069        (if (REAL_VALUE_ISNAN (TREE_REAL_CST (@1))
45070             && ! HONOR_SNANS (@1))
45071         { constant_boolean_node (cmp == NE_EXPR, type); }))))
45072
45073 which has the second 'if' in the else operand of the first.  The
45074'switch' expression takes 'if' expressions as operands (which may not
45075have else clauses) and as a last operand a replacement expression which
45076should be enabled by default if no other condition evaluated to true.
45077
45078 Captures can also be used for capturing results of sub-expressions.
45079
45080     #if GIMPLE
45081     (simplify
45082       (pointer_plus (addr@2 @0) INTEGER_CST_P@1)
45083       (if (is_gimple_min_invariant (@2)))
45084       {
45085         poly_int64 off;
45086         tree base = get_addr_base_and_unit_offset (@0, &off);
45087         off += tree_to_uhwi (@1);
45088         /* Now with that we should be able to simply write
45089            (addr (mem_ref (addr @base) (plus @off @1)))  */
45090         build1 (ADDR_EXPR, type,
45091                 build2 (MEM_REF, TREE_TYPE (TREE_TYPE (@2)),
45092                         build_fold_addr_expr (base),
45093                         build_int_cst (ptr_type_node, off)));
45094       })
45095     #endif
45096
45097 In the above example, '@2' captures the result of the expression '(addr
45098@0)'.  For outermost expression only its type can be captured, and the
45099keyword 'type' is reserved for this purpose.  The above example also
45100gives a way to conditionalize patterns to only apply to 'GIMPLE' or
45101'GENERIC' by means of using the pre-defined preprocessor macros 'GIMPLE'
45102and 'GENERIC' and using preprocessor directives.
45103
45104     (simplify
45105       (bit_and:c integral_op_p@0 (bit_ior:c (bit_not @0) @1))
45106       (bit_and @1 @0))
45107
45108 Here we introduce flags on match expressions.  The flag used above,
45109'c', denotes that the expression should be also matched commutated.
45110Thus the above match expression is really the following four match
45111expressions:
45112
45113       (bit_and integral_op_p@0 (bit_ior (bit_not @0) @1))
45114       (bit_and (bit_ior (bit_not @0) @1) integral_op_p@0)
45115       (bit_and integral_op_p@0 (bit_ior @1 (bit_not @0)))
45116       (bit_and (bit_ior @1 (bit_not @0)) integral_op_p@0)
45117
45118 Usual canonicalizations you know from GENERIC expressions are applied
45119before matching, so for example constant operands always come second in
45120commutative expressions.
45121
45122 The second supported flag is 's' which tells the code generator to fail
45123the pattern if the expression marked with 's' does have more than one
45124use and the simplification results in an expression with more than one
45125operator.  For example in
45126
45127     (simplify
45128       (pointer_plus (pointer_plus:s @0 @1) @3)
45129       (pointer_plus @0 (plus @1 @3)))
45130
45131 this avoids the association if '(pointer_plus @0 @1)' is used outside
45132of the matched expression and thus it would stay live and not trivially
45133removed by dead code elimination.  Now consider '((x + 3) + -3)' with
45134the temporary holding '(x + 3)' used elsewhere.  This simplifies down to
45135'x' which is desirable and thus flagging with 's' does not prevent the
45136transform.  Now consider '((x + 3) + 1)' which simplifies to '(x + 4)'.
45137Despite being flagged with 's' the simplification will be performed.
45138The simplification of '((x + a) + 1)' to '(x + (a + 1))' will not
45139performed in this case though.
45140
45141 More features exist to avoid too much repetition.
45142
45143     (for op (plus pointer_plus minus bit_ior bit_xor)
45144       (simplify
45145         (op @0 integer_zerop)
45146         @0))
45147
45148 A 'for' expression can be used to repeat a pattern for each operator
45149specified, substituting 'op'.  'for' can be nested and a 'for' can have
45150multiple operators to iterate.
45151
45152     (for opa (plus minus)
45153          opb (minus plus)
45154       (for opc (plus minus)
45155         (simplify...
45156
45157 In this example the pattern will be repeated four times with 'opa, opb,
45158opc' being 'plus, minus, plus'; 'plus, minus, minus'; 'minus, plus,
45159plus'; 'minus, plus, minus'.
45160
45161 To avoid repeating operator lists in 'for' you can name them via
45162
45163     (define_operator_list pmm plus minus mult)
45164
45165 and use them in 'for' operator lists where they get expanded.
45166
45167     (for opa (pmm trunc_div)
45168      (simplify...
45169
45170 So this example iterates over 'plus', 'minus', 'mult' and 'trunc_div'.
45171
45172 Using operator lists can also remove the need to explicitely write a
45173'for'.  All operator list uses that appear in a 'simplify' or 'match'
45174pattern in operator positions will implicitely be added to a new 'for'.
45175For example
45176
45177     (define_operator_list SQRT BUILT_IN_SQRTF BUILT_IN_SQRT BUILT_IN_SQRTL)
45178     (define_operator_list POW BUILT_IN_POWF BUILT_IN_POW BUILT_IN_POWL)
45179     (simplify
45180      (SQRT (POW @0 @1))
45181      (POW (abs @0) (mult @1 { built_real (TREE_TYPE (@1), dconsthalf); })))
45182
45183 is the same as
45184
45185     (for SQRT (BUILT_IN_SQRTF BUILT_IN_SQRT BUILT_IN_SQRTL)
45186          POW (BUILT_IN_POWF BUILT_IN_POW BUILT_IN_POWL)
45187      (simplify
45188       (SQRT (POW @0 @1))
45189       (POW (abs @0) (mult @1 { built_real (TREE_TYPE (@1), dconsthalf); }))))
45190
45191 'for's and operator lists can include the special identifier 'null'
45192that matches nothing and can never be generated.  This can be used to
45193pad an operator list so that it has a standard form, even if there isn't
45194a suitable operator for every form.
45195
45196 Another building block are 'with' expressions in the result expression
45197which nest the generated code in a new C block followed by its argument:
45198
45199     (simplify
45200      (convert (mult @0 @1))
45201      (with { tree utype = unsigned_type_for (type); }
45202       (convert (mult (convert:utype @0) (convert:utype @1)))))
45203
45204 This allows code nested in the 'with' to refer to the declared
45205variables.  In the above case we use the feature to specify the type of
45206a generated expression with the ':type' syntax where 'type' needs to be
45207an identifier that refers to the desired type.  Usually the types of the
45208generated result expressions are determined from the context, but
45209sometimes like in the above case it is required that you specify them
45210explicitely.
45211
45212 As intermediate conversions are often optional there is a way to avoid
45213the need to repeat patterns both with and without such conversions.
45214Namely you can mark a conversion as being optional with a '?':
45215
45216     (simplify
45217      (eq (convert@0 @1) (convert? @2))
45218      (eq @1 (convert @2)))
45219
45220 which will match both '(eq (convert @1) (convert @2))' and '(eq
45221(convert @1) @2)'.  The optional converts are supposed to be all either
45222present or not, thus '(eq (convert? @1) (convert? @2))' will result in
45223two patterns only.  If you want to match all four combinations you have
45224access to two additional conditional converts as in '(eq (convert1? @1)
45225(convert2? @2))'.
45226
45227 The support for '?' marking extends to all unary operations including
45228predicates you declare yourself with 'match'.
45229
45230 Predicates available from the GCC middle-end need to be made available
45231explicitely via 'define_predicates':
45232
45233     (define_predicates
45234      integer_onep integer_zerop integer_all_onesp)
45235
45236 You can also define predicates using the pattern matching language and
45237the 'match' form:
45238
45239     (match negate_expr_p
45240      INTEGER_CST
45241      (if (TYPE_OVERFLOW_WRAPS (type)
45242           || may_negate_without_overflow_p (t))))
45243     (match negate_expr_p
45244      (negate @0))
45245
45246 This shows that for 'match' expressions there is 't' available which
45247captures the outermost expression (something not possible in the
45248'simplify' context).  As you can see 'match' has an identifier as first
45249operand which is how you refer to the predicate in patterns.  Multiple
45250'match' for the same identifier add additional cases where the predicate
45251matches.
45252
45253 Predicates can also match an expression in which case you need to
45254provide a template specifying the identifier and where to get its
45255operands from:
45256
45257     (match (logical_inverted_value @0)
45258      (eq @0 integer_zerop))
45259     (match (logical_inverted_value @0)
45260      (bit_not truth_valued_p@0))
45261
45262 You can use the above predicate like
45263
45264     (simplify
45265      (bit_and @0 (logical_inverted_value @0))
45266      { build_zero_cst (type); })
45267
45268 Which will match a bitwise and of an operand with its logical inverted
45269value.
45270
45271
45272File: gccint.info,  Node: Static Analyzer,  Next: User Experience Guidelines,  Prev: Match and Simplify,  Up: Top
45273
4527427 Static Analyzer
45275******************
45276
45277* Menu:
45278
45279* Analyzer Internals::       Analyzer Internals
45280* Debugging the Analyzer::   Useful debugging tips
45281
45282
45283File: gccint.info,  Node: Analyzer Internals,  Next: Debugging the Analyzer,  Up: Static Analyzer
45284
4528527.1 Analyzer Internals
45286=======================
45287
4528827.1.1 Overview
45289---------------
45290
45291The analyzer implementation works on the gimple-SSA representation.  (I
45292chose this in the hopes of making it easy to work with LTO to do
45293whole-program analysis).
45294
45295 The implementation is read-only: it doesn't attempt to change anything,
45296just emit warnings.
45297
45298 The gimple representation can be seen using '-fdump-ipa-analyzer'.
45299
45300 First, we build a 'supergraph' which combines the callgraph and all of
45301the CFGs into a single directed graph, with both interprocedural and
45302intraprocedural edges.  The nodes and edges in the supergraph are called
45303"supernodes" and "superedges", and often referred to in code as 'snodes'
45304and 'sedges'.  Basic blocks in the CFGs are split at interprocedural
45305calls, so there can be more than one supernode per basic block.  Most
45306statements will be in just one supernode, but a call statement can
45307appear in two supernodes: at the end of one for the call, and again at
45308the start of another for the return.
45309
45310 The supergraph can be seen using '-fdump-analyzer-supergraph'.
45311
45312 We then build an 'analysis_plan' which walks the callgraph to determine
45313which calls might be suitable for being summarized (rather than fully
45314explored) and thus in what order to explore the functions.
45315
45316 Next is the heart of the analyzer: we use a worklist to explore state
45317within the supergraph, building an "exploded graph".  Nodes in the
45318exploded graph correspond to <point, state> pairs, as in "Precise
45319Interprocedural Dataflow Analysis via Graph Reachability" (Thomas Reps,
45320Susan Horwitz and Mooly Sagiv).
45321
45322 We reuse nodes for <point, state> pairs we've already seen, and avoid
45323tracking state too closely, so that (hopefully) we rapidly converge on a
45324final exploded graph, and terminate the analysis.  We also bail out if
45325the number of exploded <end-of-basic-block, state> nodes gets larger
45326than a particular multiple of the total number of basic blocks (to
45327ensure termination in the face of pathological state-explosion cases, or
45328bugs).  We also stop exploring a point once we hit a limit of states for
45329that point.
45330
45331 We can identify problems directly when processing a <point, state>
45332instance.  For example, if we're finding the successors of
45333
45334        <point: before-stmt: "free (ptr);",
45335         state: {"ptr": freed}>
45336
45337 then we can detect a double-free of "ptr".  We can then emit a path to
45338reach the problem by finding the simplest route through the graph.
45339
45340 Program points in the analysis are much more fine-grained than in the
45341CFG and supergraph, with points (and thus potentially exploded nodes)
45342for various events, including before individual statements.  By default
45343the exploded graph merges multiple consecutive statements in a supernode
45344into one exploded edge to minimize the size of the exploded graph.  This
45345can be suppressed via '-fanalyzer-fine-grained'.  The fine-grained
45346approach seems to make things simpler and more debuggable that other
45347approaches I tried, in that each point is responsible for one thing.
45348
45349 Program points in the analysis also have a "call string" identifying
45350the stack of callsites below them, so that paths in the exploded graph
45351correspond to interprocedurally valid paths: we always return to the
45352correct call site, propagating state information accordingly.  We avoid
45353infinite recursion by stopping the analysis if a callsite appears more
45354than 'analyzer-max-recursion-depth' in a callstring (defaulting to 2).
45355
4535627.1.2 Graphs
45357-------------
45358
45359Nodes and edges in the exploded graph are called "exploded nodes" and
45360"exploded edges" and often referred to in the code as 'enodes' and
45361'eedges' (especially when distinguishing them from the 'snodes' and
45362'sedges' in the supergraph).
45363
45364 Each graph numbers its nodes, giving unique identifiers - supernodes
45365are referred to throughout dumps in the form 'SN': INDEX' and exploded
45366nodes in the form 'EN: INDEX' (e.g.  'SN: 2' and 'EN:29').
45367
45368 The supergraph can be seen using '-fdump-analyzer-supergraph-graph'.
45369
45370 The exploded graph can be seen using '-fdump-analyzer-exploded-graph'
45371and other dump options.  Exploded nodes are color-coded in the .dot
45372output based on state-machine states to make it easier to see state
45373changes at a glance.
45374
4537527.1.3 State Tracking
45376---------------------
45377
45378There's a tension between:
45379   * precision of analysis in the straight-line case, vs
45380   * exponential blow-up in the face of control flow.
45381
45382 For example, in general, given this CFG:
45383
45384           A
45385          / \
45386         B   C
45387          \ /
45388           D
45389          / \
45390         E   F
45391          \ /
45392           G
45393
45394 we want to avoid differences in state-tracking in B and C from leading
45395to blow-up.  If we don't prevent state blowup, we end up with
45396exponential growth of the exploded graph like this:
45397
45398
45399                1:A
45400               /   \
45401              /     \
45402             /       \
45403           2:B       3:C
45404            |         |
45405           4:D       5:D        (2 exploded nodes for D)
45406          /   \     /   \
45407        6:E   7:F 8:E   9:F
45408         |     |   |     |
45409        10:G 11:G 12:G  13:G    (4 exploded nodes for G)
45410
45411 Similar issues arise with loops.
45412
45413 To prevent this, we follow various approaches:
45414
45415  a. state pruning: which tries to discard state that won't be relevant
45416     later on withing the function.  This can be disabled via
45417     '-fno-analyzer-state-purge'.
45418
45419  b. state merging.  We can try to find the commonality between two
45420     program_state instances to make a third, simpler program_state.  We
45421     have two strategies here:
45422
45423       1. the worklist keeps new nodes for the same program_point
45424          together, and tries to merge them before processing, and thus
45425          before they have successors.  Hence, in the above, the two
45426          nodes for D (4 and 5) reach the front of the worklist
45427          together, and we create a node for D with the merger of the
45428          incoming states.
45429
45430       2. try merging with the state of existing enodes for the
45431          program_point (which may have already been explored).  There
45432          will be duplication, but only one set of duplication;
45433          subsequent duplicates are more likely to hit the cache.  In
45434          particular, (hopefully) all merger chains are finite, and so
45435          we guarantee termination.  This is intended to help with
45436          loops: we ought to explore the first iteration, and then have
45437          a "subsequent iterations" exploration, which uses a state
45438          merged from that of the first, to be more abstract.
45439
45440     We avoid merging pairs of states that have state-machine
45441     differences, as these are the kinds of differences that are likely
45442     to be most interesting.  So, for example, given:
45443
45444                if (condition)
45445                  ptr = malloc (size);
45446                else
45447                  ptr = local_buf;
45448
45449                .... do things with 'ptr'
45450
45451                if (condition)
45452                  free (ptr);
45453
45454                ...etc
45455
45456     then we end up with an exploded graph that looks like this:
45457
45458
45459                             if (condition)
45460                               / T      \ F
45461                      ---------          ----------
45462                     /                             \
45463                ptr = malloc (size)             ptr = local_buf
45464                    |                               |
45465                copy of                         copy of
45466                  "do things with 'ptr'"          "do things with 'ptr'"
45467                with ptr: heap-allocated        with ptr: stack-allocated
45468                    |                               |
45469                if (condition)                  if (condition)
45470                    | known to be T                 | known to be F
45471                free (ptr);                         |
45472                     \                             /
45473                      -----------------------------
45474                                   | ('ptr' is pruned, so states can be merged)
45475                                  etc
45476
45477     where some duplication has occurred, but only for the places where
45478     the the different paths are worth exploringly separately.
45479
45480     Merging can be disabled via '-fno-analyzer-state-merge'.
45481
4548227.1.4 Region Model
45483-------------------
45484
45485Part of the state stored at a 'exploded_node' is a 'region_model'.  This
45486is an implementation of the region-based ternary model described in "A
45487Memory Model for Static Analysis of C Programs"
45488(http://lcs.ios.ac.cn/~xuzb/canalyze/memmodel.pdf) (Zhongxing Xu, Ted
45489Kremenek, and Jian Zhang).
45490
45491 A 'region_model' encapsulates a representation of the state of memory,
45492with a tree of 'region' instances, along with their associated values.
45493The representation is graph-like because values can be pointers to
45494regions.  It also stores a constraint_manager, capturing relationships
45495between the values.
45496
45497 Because each node in the 'exploded_graph' has a 'region_model', and
45498each of the latter is graph-like, the 'exploded_graph' is in some ways a
45499graph of graphs.
45500
45501 Here's an example of printing a 'region_model', showing the ASCII-art
45502used to visualize the region hierarchy (colorized when printing to
45503stderr):
45504
45505     (gdb) call debug (*this)
45506     r0: {kind: 'root', parent: null, sval: null}
45507     |-stack: r1: {kind: 'stack', parent: r0, sval: sv1}
45508     |  |: sval: sv1: {poisoned: uninit}
45509     |  |-frame for 'test': r2: {kind: 'frame', parent: r1, sval: null, map: {'ptr_3': r3}, function: 'test', depth: 0}
45510     |  |  `-'ptr_3': r3: {kind: 'map', parent: r2, sval: sv3, type: 'void *', map: {}}
45511     |  |    |: sval: sv3: {type: 'void *', unknown}
45512     |  |    |: type: 'void *'
45513     |  `-frame for 'calls_malloc': r4: {kind: 'frame', parent: r1, sval: null, map: {'result_3': r7, '_4': r8, '<anonymous>': r5}, function: 'calls_malloc', depth: 1}
45514     |    |-'<anonymous>': r5: {kind: 'map', parent: r4, sval: sv4, type: 'void *', map: {}}
45515     |    |  |: sval: sv4: {type: 'void *', &r6}
45516     |    |  |: type: 'void *'
45517     |    |-'result_3': r7: {kind: 'map', parent: r4, sval: sv4, type: 'void *', map: {}}
45518     |    |  |: sval: sv4: {type: 'void *', &r6}
45519     |    |  |: type: 'void *'
45520     |    `-'_4': r8: {kind: 'map', parent: r4, sval: sv4, type: 'void *', map: {}}
45521     |      |: sval: sv4: {type: 'void *', &r6}
45522     |      |: type: 'void *'
45523     `-heap: r9: {kind: 'heap', parent: r0, sval: sv2}
45524       |: sval: sv2: {poisoned: uninit}
45525       `-r6: {kind: 'symbolic', parent: r9, sval: null, map: {}}
45526     svalues:
45527       sv0: {type: 'size_t', '1024'}
45528       sv1: {poisoned: uninit}
45529       sv2: {poisoned: uninit}
45530       sv3: {type: 'void *', unknown}
45531       sv4: {type: 'void *', &r6}
45532     constraint manager:
45533       equiv classes:
45534         ec0: {sv0 == '1024'}
45535         ec1: {sv4}
45536       constraints:
45537
45538 This is the state at the point of returning from 'calls_malloc' back to
45539'test' in the following:
45540
45541     void *
45542     calls_malloc (void)
45543     {
45544       void *result = malloc (1024);
45545       return result;
45546     }
45547
45548     void test (void)
45549     {
45550       void *ptr = calls_malloc ();
45551       /* etc.  */
45552     }
45553
45554 The "root" region ("r0") has a "stack" child ("r1"), with two children:
45555a frame for 'test' ("r2"), and a frame for 'calls_malloc' ("r4").  These
45556frame regions have child regions for storing their local variables.  For
45557example, the return region and that of various other regions within the
45558"calls_malloc" frame all have value "sv4", a pointer to a heap-allocated
45559region "r6".  Within the parent frame, 'ptr_3' has value "sv3", an
45560unknown 'void *'.
45561
4556227.1.5 Analyzer Paths
45563---------------------
45564
45565We need to explain to the user what the problem is, and to persuade them
45566that there really is a problem.  Hence having a 'diagnostic_path' isn't
45567just an incidental detail of the analyzer; it's required.
45568
45569 Paths ought to be:
45570   * interprocedurally-valid
45571   * feasible
45572
45573 Without state-merging, all paths in the exploded graph are feasible (in
45574terms of constraints being satisified).  With state-merging, paths in
45575the exploded graph can be infeasible.
45576
45577 We collate warnings and only emit them for the simplest path e.g.  for
45578a bug in a utility function, with lots of routes to calling it, we only
45579emit the simplest path (which could be intraprocedural, if it can be
45580reproduced without a caller).  We apply a check that each duplicate
45581warning's shortest path is feasible, rejecting any warnings for which
45582the shortest path is infeasible (which could lead to false negatives).
45583
45584 We use the shortest feasible 'exploded_path' through the
45585'exploded_graph' (a list of 'exploded_edge *') to build a
45586'diagnostic_path' (a list of events for the diagnostic subsystem) -
45587specifically a 'checker_path'.
45588
45589 Having built the 'checker_path', we prune it to try to eliminate events
45590that aren't relevant, to minimize how much the user has to read.
45591
45592 After pruning, we notify each event in the path of its ID and record
45593the IDs of interesting events, allowing for events to refer to other
45594events in their descriptions.  The 'pending_diagnostic' class has
45595various vfuncs to support emitting more precise descriptions, so that
45596e.g.
45597
45598   * a deref-of-unchecked-malloc diagnostic might use:
45599            returning possibly-NULL pointer to 'make_obj' from 'allocator'
45600     for a 'return_event' to make it clearer how the unchecked value
45601     moves from callee back to caller
45602   * a double-free diagnostic might use:
45603            second 'free' here; first 'free' was at (3)
45604     and a use-after-free might use
45605            use after 'free' here; memory was freed at (2)
45606
45607 At this point we can emit the diagnostic.
45608
4560927.1.6 Limitations
45610------------------
45611
45612   * Only for C so far
45613   * The implementation of call summaries is currently very simplistic.
45614   * Lack of function pointer analysis
45615   * The constraint-handling code assumes reflexivity in some places
45616     (that values are equal to themselves), which is not the case for
45617     NaN. As a simple workaround, constraints on floating-point values
45618     are currently ignored.
45619   * The region model code creates lots of little mutable objects at
45620     each 'region_model' (and thus per 'exploded_node') rather than
45621     sharing immutable objects and having the mutable state in the
45622     'program_state' or 'region_model'.  The latter approach might be
45623     more efficient, and might avoid dealing with IDs rather than
45624     pointers (which requires us to impose an ordering to get meaningful
45625     equality).
45626   * The region model code doesn't yet support 'memcpy'.  At the
45627     gimple-ssa level these have been optimized to statements like this:
45628          _10 = MEM <long unsigned int> [(char * {ref-all})&c]
45629          MEM <long unsigned int> [(char * {ref-all})&d] = _10;
45630     Perhaps they could be supported via a new 'compound_svalue' type.
45631   * There are various other limitations in the region model (grep for
45632     TODO/xfail in the testsuite).
45633   * The constraint_manager's implementation of transitivity is
45634     currently too expensive to enable by default and so must be
45635     manually enabled via '-fanalyzer-transitivity').
45636   * The checkers are currently hardcoded and don't allow for user
45637     extensibility (e.g.  adding allocate/release pairs).
45638   * Although the analyzer's test suite has a proof-of-concept test case
45639     for LTO, LTO support hasn't had extensive testing.  There are
45640     various lang-specific things in the analyzer that assume C rather
45641     than LTO. For example, SSA names are printed to the user in "raw"
45642     form, rather than printing the underlying variable name.
45643
45644 Some ideas for other checkers
45645   * File-descriptor-based APIs
45646   * Linux kernel internal APIs
45647   * Signal handling
45648
45649
45650File: gccint.info,  Node: Debugging the Analyzer,  Prev: Analyzer Internals,  Up: Static Analyzer
45651
4565227.2 Debugging the Analyzer
45653===========================
45654
4565527.2.1 Special Functions for Debugging the Analyzer
45656---------------------------------------------------
45657
45658The analyzer recognizes various special functions by name, for use in
45659debugging the analyzer.  Declarations can be seen in the testsuite in
45660'analyzer-decls.h'.  None of these functions are actually implemented.
45661
45662 Add:
45663       __analyzer_break ();
45664 to the source being analyzed to trigger a breakpoint in the analyzer
45665when that source is reached.  By putting a series of these in the
45666source, it's much easier to effectively step through the program state
45667as it's analyzed.
45668
45669     __analyzer_dump ();
45670
45671 will dump the copious information about the analyzer's state each time
45672it reaches the call in its traversal of the source.
45673
45674     __analyzer_dump_path ();
45675
45676 will emit a placeholder "note" diagnostic with a path to that call
45677site, if the analyzer finds a feasible path to it.
45678
45679 The builtin '__analyzer_dump_exploded_nodes' will emit a warning after
45680analysis containing information on all of the exploded nodes at that
45681program point:
45682
45683       __analyzer_dump_exploded_nodes (0);
45684
45685 will output the number of "processed" nodes, and the IDs of both
45686"processed" and "merger" nodes, such as:
45687
45688     warning: 2 processed enodes: [EN: 56, EN: 58] merger(s): [EN: 54-55, EN: 57, EN: 59]
45689
45690 With a non-zero argument
45691
45692       __analyzer_dump_exploded_nodes (1);
45693
45694 it will also dump all of the states within the "processed" nodes.
45695
45696        __analyzer_dump_region_model ();
45697 will dump the region_model's state to stderr.
45698
45699     __analyzer_eval (expr);
45700 will emit a warning with text "TRUE", FALSE" or "UNKNOWN" based on the
45701truthfulness of the argument.  This is useful for writing DejaGnu tests.
45702
4570327.2.2 Other Debugging Techniques
45704---------------------------------
45705
45706One approach when tracking down where a particular bogus state is
45707introduced into the 'exploded_graph' is to add custom code to
45708'region_model::validate'.
45709
45710 For example, this custom code (added to 'region_model::validate')
45711breaks with an assertion failure when a variable called 'ptr' acquires a
45712value that's unknown, using 'region_model::get_value_by_name' to locate
45713the variable
45714
45715         /* Find a variable matching "ptr".  */
45716         svalue_id sid = get_value_by_name ("ptr");
45717         if (!sid.null_p ())
45718           {
45719     	svalue *sval = get_svalue (sid);
45720     	gcc_assert (sval->get_kind () != SK_UNKNOWN);
45721           }
45722
45723 making it easier to investigate further in a debugger when this occurs.
45724
45725
45726File: gccint.info,  Node: User Experience Guidelines,  Next: Funding,  Prev: Static Analyzer,  Up: Top
45727
4572828 User Experience Guidelines
45729*****************************
45730
45731To borrow a slogan from Elm
45732(https://elm-lang.org/news/compilers-as-assistants),
45733
45734     *Compilers should be assistants, not adversaries.*  A compiler
45735     should not just detect bugs, it should then help you understand why
45736     there is a bug.  It should not berate you in a robot voice, it
45737     should give you specific hints that help you write better code.
45738     Ultimately, a compiler should make programming faster and more fun!
45739                          -- _Evan Czaplicki_
45740
45741 This chapter provides guidelines on how to implement diagnostics and
45742command-line options in ways that we hope achieve the above ideal.
45743
45744* Menu:
45745
45746* Guidelines for Diagnostics::       How to implement diagnostics.
45747* Guidelines for Options::           Guidelines for command-line options.
45748
45749
45750File: gccint.info,  Node: Guidelines for Diagnostics,  Next: Guidelines for Options,  Up: User Experience Guidelines
45751
4575228.1 Guidelines for Diagnostics
45753===============================
45754
4575528.1.1 Talk in terms of the user's code
45756---------------------------------------
45757
45758Diagnostics should be worded in terms of the user's source code, and the
45759source language, rather than GCC's own implementation details.
45760
4576128.1.2 Diagnostics are actionable
45762---------------------------------
45763
45764A good diagnostic is "actionable": it should assist the user in taking
45765action.
45766
45767 Consider what an end user will want to do when encountering a
45768diagnostic.
45769
45770 Given an error, an end user will think: "How do I fix this?"
45771
45772 Given a warning, an end user will think:
45773
45774   * "Is this a real problem?"
45775   * "Do I care?"
45776   * if they decide it's genuine: "How do I fix this?"
45777
45778 A good diagnostic provides pertinent information to allow the user to
45779easily answer the above questions.
45780
4578128.1.3 The user's attention is important
45782----------------------------------------
45783
45784A perfect compiler would issue a warning on every aspect of the user's
45785source code that ought to be fixed, and issue no other warnings.
45786Naturally, this ideal is impossible to achieve.
45787
45788 Warnings should have a good "signal-to-noise ratio": we should have few
45789"false positives" (falsely issuing a warning when no warning is
45790warranted) and few "false negatives" (failing to issue a warning when
45791one _is_ justified).
45792
45793 Note that a false positive can mean, in practice, a warning that the
45794user doesn't agree with.  Ideally a diagnostic should contain enough
45795information to allow the user to make an informed choice about whether
45796they should care (and how to fix it), but a balance must be drawn
45797against overloading the user with irrelevant data.
45798
4579928.1.4 Precision of Wording
45800---------------------------
45801
45802Provide the user with details that allow them to identify what the
45803problem is.  For example, the vaguely-worded message:
45804
45805     demo.c:1:1: warning: 'noinline' attribute ignored [-Wattributes]
45806         1 | int foo __attribute__((noinline));
45807           | ^~~
45808
45809doesn't tell the user why the attribute was ignored, or what kind of
45810entity the compiler thought the attribute was being applied to (the
45811source location for the diagnostic is also poor; *note discussion of
45812'input_location': input_location_example.).  A better message would be:
45813
45814     demo.c:1:24: warning: attribute 'noinline' on variable 'foo' was
45815        ignored [-Wattributes]
45816         1 | int foo __attribute__((noinline));
45817           |     ~~~ ~~~~~~~~~~~~~~~^~~~~~~~~
45818     demo.c:1:24: note: attribute 'noinline' is only applicable to functions
45819
45820which spells out the missing information (and fixes the location
45821information, as discussed below).
45822
45823 The above example uses a note to avoid a combinatorial explosion of
45824possible messages.
45825
4582628.1.5 Try the diagnostic on real-world code
45827--------------------------------------------
45828
45829It's worth testing a new warning on many instances of real-world code,
45830written by different people, and seeing what it complains about, and
45831what it doesn't complain about.
45832
45833 This may suggest heuristics that silence common false positives.
45834
45835 It may also suggest ways to improve the precision of the message.
45836
4583728.1.6 Make mismatches clear
45838----------------------------
45839
45840Many diagnostics relate to a mismatch between two different places in
45841the user's source code.  Examples include:
45842   * a type mismatch, where the type at a usage site does not match the
45843     type at a declaration
45844
45845   * the argument count at a call site does not match the parameter
45846     count at the declaration
45847
45848   * something is erroneously duplicated (e.g. an error, due to breaking
45849     a uniqueness requirement, or a warning, if it's suggestive of a
45850     bug)
45851
45852   * an "opened" syntactic construct (such as an open-parenthesis) is
45853     not closed
45854
45855 In each case, the diagnostic should indicate *both* pertinent locations
45856(so that the user can easily see the problem and how to fix it).
45857
45858 The standard way to do this is with a note (via 'inform').  For
45859example:
45860
45861       auto_diagnostic_group d;
45862       if (warning_at (loc, OPT_Wduplicated_cond,
45863                       "duplicated %<if%> condition"))
45864         inform (EXPR_LOCATION (t), "previously used here");
45865
45866which leads to:
45867
45868     demo.c: In function 'test':
45869     demo.c:5:17: warning: duplicated 'if' condition [-Wduplicated-cond]
45870         5 |   else if (flag > 3)
45871           |            ~~~~~^~~
45872     demo.c:3:12: note: previously used here
45873         3 |   if (flag > 3)
45874           |       ~~~~~^~~
45875
45876The 'inform' call should be guarded by the return value from the
45877'warning_at' call so that the note isn't emitted when the warning is
45878suppressed.
45879
45880 For cases involving punctuation where the locations might be near each
45881other, they can be conditionally consolidated via
45882'gcc_rich_location::add_location_if_nearby':
45883
45884         auto_diagnostic_group d;
45885         gcc_rich_location richloc (primary_loc);
45886         bool added secondary = richloc.add_location_if_nearby (secondary_loc);
45887         error_at (&richloc, "main message");
45888         if (!added secondary)
45889           inform (secondary_loc, "message for secondary");
45890
45891This will emit either one diagnostic with two locations:
45892       demo.c:42:10: error: main message
45893         (foo)
45894         ~   ^
45895
45896or two diagnostics:
45897
45898       demo.c:42:4: error: main message
45899         foo)
45900            ^
45901       demo.c:40:2: note: message for secondary
45902         (
45903         ^
45904
4590528.1.7 Location Information
45906---------------------------
45907
45908GCC's 'location_t' type can support both ordinary locations, and
45909locations relating to a macro expansion.
45910
45911 As of GCC 6, ordinary locations changed from supporting just a point in
45912the user's source code to supporting three points: the "caret" location,
45913plus a start and a finish:
45914
45915           a = foo && bar;
45916               ~~~~^~~~~~
45917               |   |    |
45918               |   |    finish
45919               |   caret
45920               start
45921
45922 Tokens coming out of libcpp have locations of the form 'caret ==
45923start', such as for 'foo' here:
45924
45925           a = foo && bar;
45926               ^~~
45927               | |
45928               | finish
45929               caret == start
45930
45931 Compound expressions should be reported using the location of the
45932expression as a whole, rather than just of one token within it.
45933
45934 For example, in '-Wformat', rather than underlining just the first
45935token of a bad argument:
45936
45937        printf("hello %i %s", (long)0, "world");
45938                      ~^      ~
45939                      %li
45940
45941the whole of the expression should be underlined, so that the user can
45942easily identify what is being referred to:
45943
45944        printf("hello %i %s", (long)0, "world");
45945                      ~^      ~~~~~~~
45946                      %li
45947
45948 Avoid using the 'input_location' global, and the diagnostic functions
45949that implicitly use it--use 'error_at' and 'warning_at' rather than
45950'error' and 'warning', and provide the most appropriate 'location_t'
45951value available at that phase of the compilation.  It's possible to
45952supply secondary 'location_t' values via 'rich_location'.
45953
45954For example, in the example of imprecise wording above, generating the
45955diagnostic using 'warning':
45956
45957       // BAD: implicitly uses input_location
45958       warning (OPT_Wattributes, "%qE attribute ignored", name);
45959
45960leads to:
45961
45962     // BAD: uses input_location
45963     demo.c:1:1: warning: 'noinline' attribute ignored [-Wattributes]
45964         1 | int foo __attribute__((noinline));
45965           | ^~~
45966
45967which thus happened to use the location of the 'int' token, rather than
45968that of the attribute.  Using 'warning_at' with the location of the
45969attribute, providing the location of the declaration in question as a
45970secondary location, and adding a note:
45971
45972       auto_diagnostic_group d;
45973       gcc_rich_location richloc (attrib_loc);
45974       richloc.add_range (decl_loc);
45975       if (warning_at (OPT_Wattributes, &richloc,
45976                       "attribute %qE on variable %qE was ignored", name))
45977         inform (attrib_loc, "attribute %qE is only applicable to functions");
45978
45979would lead to:
45980
45981     // OK: use location of attribute, with a secondary location
45982     demo.c:1:24: warning: attribute 'noinline' on variable 'foo' was
45983        ignored [-Wattributes]
45984         1 | int foo __attribute__((noinline));
45985           |     ~~~ ~~~~~~~~~~~~~~~^~~~~~~~~
45986     demo.c:1:24: note: attribute 'noinline' is only applicable to functions
45987
4598828.1.8 Coding Conventions
45989-------------------------
45990
45991See the diagnostics section
45992(https://gcc.gnu.org/codingconventions.html#Diagnostics) of the GCC
45993coding conventions.
45994
45995 In the C++ front end, when comparing two types in a message, use '%H'
45996and '%I' rather than '%T', as this allows the diagnostics subsystem to
45997highlight differences between template-based types.  For example, rather
45998than using '%qT':
45999
46000       // BAD: a pair of %qT used in C++ front end for type comparison
46001       error_at (loc, "could not convert %qE from %qT to %qT", expr,
46002                 TREE_TYPE (expr), type);
46003
46004which could lead to:
46005
46006     error: could not convert 'map<int, double>()' from 'map<int,double>'
46007        to 'map<int,int>'
46008
46009using '%H' and '%I' (via '%qH' and '%qI'):
46010
46011       // OK: compare types in C++ front end via %qH and %qI
46012       error_at (loc, "could not convert %qE from %qH to %qI", expr,
46013                 TREE_TYPE (expr), type);
46014
46015allows the above output to be simplified to:
46016
46017     error: could not convert 'map<int, double>()' from 'map<[...],double>'
46018        to 'map<[...],int>'
46019
46020where the 'double' and 'int' are colorized to highlight them.
46021
4602228.1.9 Group logically-related diagnostics
46023------------------------------------------
46024
46025Use 'auto_diagnostic_group' when issuing multiple related diagnostics
46026(seen in various examples on this page).  This informs the diagnostic
46027subsystem that all diagnostics issued within the lifetime of the
46028'auto_diagnostic_group' are related.  For example,
46029'-fdiagnostics-format=json' will treat the first diagnostic emitted
46030within the group as a top-level diagnostic, and all subsequent
46031diagnostics within the group as its children.
46032
4603328.1.10 Quoting
46034---------------
46035
46036Text should be quoted by either using the 'q' modifier in a directive
46037such as '%qE', or by enclosing the quoted text in a pair of '%<' and
46038'%>' directives, and never by using explicit quote characters.  The
46039directives handle the appropriate quote characters for each language and
46040apply the correct color or highlighting.
46041
46042 The following elements should be quoted in GCC diagnostics:
46043
46044   * Language keywords.
46045   * Tokens.
46046   * Boolean, numerical, character, and string constants that appear in
46047     the source code.
46048   * Identifiers, including function, macro, type, and variable names.
46049
46050 Other elements such as numbers that do not refer to numeric constants
46051that appear in the source code should not be quoted.  For example, in
46052the message:
46053
46054     argument %d of %qE must be a pointer type
46055
46056since the argument number does not refer to a numerical constant in the
46057source code it should not be quoted.
46058
4605928.1.11 Spelling and Terminology
46060--------------------------------
46061
46062See the terminology and markup
46063(https://gcc.gnu.org/codingconventions.html#Spelling Spelling) section
46064of the GCC coding conventions.
46065
4606628.1.12 Fix-it hints
46067--------------------
46068
46069GCC's diagnostic subsystem can emit "fix-it hints": small suggested
46070edits to the user's source code.
46071
46072 They are printed by default underneath the code in question.  They can
46073also be viewed via '-fdiagnostics-generate-patch' and
46074'-fdiagnostics-parseable-fixits'.  With the latter, an IDE ought to be
46075able to offer to automatically apply the suggested fix.
46076
46077 Fix-it hints contain code fragments, and thus they should not be marked
46078for translation.
46079
46080 Fix-it hints can be added to a diagnostic by using a 'rich_location'
46081rather than a 'location_t' - the fix-it hints are added to the
46082'rich_location' using one of the various 'add_fixit' member functions of
46083'rich_location'.  They are documented with 'rich_location' in
46084'libcpp/line-map.h'.  It's easiest to use the 'gcc_rich_location'
46085subclass of 'rich_location' found in 'gcc-rich-location.h', as this
46086implicitly supplies the 'line_table' variable.
46087
46088 For example:
46089
46090        if (const char *suggestion = hint.suggestion ())
46091          {
46092            gcc_rich_location richloc (location);
46093            richloc.add_fixit_replace (suggestion);
46094            error_at (&richloc,
46095                      "%qE does not name a type; did you mean %qs?",
46096                      id, suggestion);
46097          }
46098
46099which can lead to:
46100
46101     spellcheck-typenames.C:73:1: error: 'singed' does not name a type; did
46102        you mean 'signed'?
46103        73 | singed char ch;
46104           | ^~~~~~
46105           | signed
46106
46107 Non-trivial edits can be built up by adding multiple fix-it hints to
46108one 'rich_location'.  It's best to express the edits in terms of the
46109locations of individual tokens.  Various handy functions for adding
46110fix-it hints for idiomatic C and C++ can be seen in
46111'gcc-rich-location.h'.
46112
4611328.1.12.1 Fix-it hints should work
46114..................................
46115
46116When implementing a fix-it hint, please verify that the suggested edit
46117leads to fixed, compilable code.  (Unfortunately, this currently must be
46118done by hand using '-fdiagnostics-generate-patch'.  It would be good to
46119have an automated way of verifying that fix-it hints actually fix the
46120code).
46121
46122 For example, a "gotcha" here is to forget to add a space when adding a
46123missing reserved word.  Consider a C++ fix-it hint that adds 'typename'
46124in front of a template declaration.  A naive way to implement this might
46125be:
46126
46127     gcc_rich_location richloc (loc);
46128     // BAD: insertion is missing a trailing space
46129     richloc.add_fixit_insert_before ("typename");
46130     error_at (&richloc, "need %<typename%> before %<%T::%E%> because "
46131                          "%qT is a dependent scope",
46132                          parser->scope, id, parser->scope);
46133
46134When applied to the code, this might lead to:
46135
46136     T::type x;
46137
46138being "corrected" to:
46139
46140     typenameT::type x;
46141
46142In this case, the correct thing to do is to add a trailing space after
46143'typename':
46144
46145     gcc_rich_location richloc (loc);
46146     // OK: note that here we have a trailing space
46147     richloc.add_fixit_insert_before ("typename ");
46148     error_at (&richloc, "need %<typename%> before %<%T::%E%> because "
46149                          "%qT is a dependent scope",
46150                          parser->scope, id, parser->scope);
46151
46152leading to this corrected code:
46153
46154     typename T::type x;
46155
4615628.1.12.2 Express deletion in terms of deletion, not replacement
46157................................................................
46158
46159It's best to express deletion suggestions in terms of deletion fix-it
46160hints, rather than replacement fix-it hints.  For example, consider
46161this:
46162
46163         auto_diagnostic_group d;
46164         gcc_rich_location richloc (location_of (retval));
46165         tree name = DECL_NAME (arg);
46166         richloc.add_fixit_replace (IDENTIFIER_POINTER (name));
46167         warning_at (&richloc, OPT_Wredundant_move,
46168                     "redundant move in return statement");
46169
46170which is intended to e.g. replace a 'std::move' with the underlying
46171value:
46172
46173        return std::move (retval);
46174               ~~~~~~~~~~^~~~~~~~
46175               retval
46176
46177where the change has been expressed as replacement, replacing with the
46178name of the declaration.  This works for simple cases, but consider this
46179case:
46180
46181     #ifdef SOME_CONFIG_FLAG
46182     # define CONFIGURY_GLOBAL global_a
46183     #else
46184     # define CONFIGURY_GLOBAL global_b
46185     #endif
46186
46187     int fn ()
46188     {
46189       return std::move (CONFIGURY_GLOBAL /* some comment */);
46190     }
46191
46192The above implementation erroneously strips out the macro and the
46193comment in the fix-it hint:
46194
46195        return std::move (CONFIGURY_GLOBAL /* some comment */);
46196               ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
46197               global_a
46198
46199and thus this resulting code:
46200
46201        return global_a;
46202
46203It's better to do deletions in terms of deletions; deleting the
46204'std::move (' and the trailing close-paren, leading to this:
46205
46206        return std::move (CONFIGURY_GLOBAL /* some comment */);
46207               ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
46208               CONFIGURY_GLOBAL /* some comment */
46209
46210and thus this result:
46211
46212        return CONFIGURY_GLOBAL /* some comment */;
46213
46214Unfortunately, the pertinent 'location_t' values are not always
46215available.
46216
4621728.1.12.3 Multiple suggestions
46218..............................
46219
46220In the rare cases where you need to suggest more than one mutually
46221exclusive solution to a problem, this can be done by emitting multiple
46222notes and calling 'rich_location::fixits_cannot_be_auto_applied' on each
46223note's 'rich_location'.  If this is called, then the fix-it hints in the
46224'rich_location' will be printed, but will not be added to generated
46225patches.
46226
46227
46228File: gccint.info,  Node: Guidelines for Options,  Prev: Guidelines for Diagnostics,  Up: User Experience Guidelines
46229
4623028.2 Guidelines for Options
46231===========================
46232
46233
46234File: gccint.info,  Node: Funding,  Next: GNU Project,  Prev: User Experience Guidelines,  Up: Top
46235
46236Funding Free Software
46237*********************
46238
46239If you want to have more free software a few years from now, it makes
46240sense for you to help encourage people to contribute funds for its
46241development.  The most effective approach known is to encourage
46242commercial redistributors to donate.
46243
46244 Users of free software systems can boost the pace of development by
46245encouraging for-a-fee distributors to donate part of their selling price
46246to free software developers--the Free Software Foundation, and others.
46247
46248 The way to convince distributors to do this is to demand it and expect
46249it from them.  So when you compare distributors, judge them partly by
46250how much they give to free software development.  Show distributors they
46251must compete to be the one who gives the most.
46252
46253 To make this approach work, you must insist on numbers that you can
46254compare, such as, "We will donate ten dollars to the Frobnitz project
46255for each disk sold."  Don't be satisfied with a vague promise, such as
46256"A portion of the profits are donated," since it doesn't give a basis
46257for comparison.
46258
46259 Even a precise fraction "of the profits from this disk" is not very
46260meaningful, since creative accounting and unrelated business decisions
46261can greatly alter what fraction of the sales price counts as profit.  If
46262the price you pay is $50, ten percent of the profit is probably less
46263than a dollar; it might be a few cents, or nothing at all.
46264
46265 Some redistributors do development work themselves.  This is useful
46266too; but to keep everyone honest, you need to inquire how much they do,
46267and what kind.  Some kinds of development make much more long-term
46268difference than others.  For example, maintaining a separate version of
46269a program contributes very little; maintaining the standard version of a
46270program for the whole community contributes much.  Easy new ports
46271contribute little, since someone else would surely do them; difficult
46272ports such as adding a new CPU to the GNU Compiler Collection contribute
46273more; major new features or packages contribute the most.
46274
46275 By establishing the idea that supporting further development is "the
46276proper thing to do" when distributing free software for a fee, we can
46277assure a steady flow of resources into making more free software.
46278
46279     Copyright (C) 1994 Free Software Foundation, Inc.
46280     Verbatim copying and redistribution of this section is permitted
46281     without royalty; alteration is not permitted.
46282
46283
46284File: gccint.info,  Node: GNU Project,  Next: Copying,  Prev: Funding,  Up: Top
46285
46286The GNU Project and GNU/Linux
46287*****************************
46288
46289The GNU Project was launched in 1984 to develop a complete Unix-like
46290operating system which is free software: the GNU system.  (GNU is a
46291recursive acronym for "GNU's Not Unix"; it is pronounced "guh-NEW".)
46292Variants of the GNU operating system, which use the kernel Linux, are
46293now widely used; though these systems are often referred to as "Linux",
46294they are more accurately called GNU/Linux systems.
46295
46296 For more information, see:
46297     <http://www.gnu.org/>
46298     <http://www.gnu.org/gnu/linux-and-gnu.html>
46299
46300
46301File: gccint.info,  Node: Copying,  Next: GNU Free Documentation License,  Prev: GNU Project,  Up: Top
46302
46303GNU General Public License
46304**************************
46305
46306                        Version 3, 29 June 2007
46307
46308     Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
46309
46310     Everyone is permitted to copy and distribute verbatim copies of this
46311     license document, but changing it is not allowed.
46312
46313Preamble
46314========
46315
46316The GNU General Public License is a free, copyleft license for software
46317and other kinds of works.
46318
46319 The licenses for most software and other practical works are designed
46320to take away your freedom to share and change the works.  By contrast,
46321the GNU General Public License is intended to guarantee your freedom to
46322share and change all versions of a program-to make sure it remains free
46323software for all its users.  We, the Free Software Foundation, use the
46324GNU General Public License for most of our software; it applies also to
46325any other work released this way by its authors.  You can apply it to
46326your programs, too.
46327
46328 When we speak of free software, we are referring to freedom, not price.
46329Our General Public Licenses are designed to make sure that you have the
46330freedom to distribute copies of free software (and charge for them if
46331you wish), that you receive source code or can get it if you want it,
46332that you can change the software or use pieces of it in new free
46333programs, and that you know you can do these things.
46334
46335 To protect your rights, we need to prevent others from denying you
46336these rights or asking you to surrender the rights.  Therefore, you have
46337certain responsibilities if you distribute copies of the software, or if
46338you modify it: responsibilities to respect the freedom of others.
46339
46340 For example, if you distribute copies of such a program, whether gratis
46341or for a fee, you must pass on to the recipients the same freedoms that
46342you received.  You must make sure that they, too, receive or can get the
46343source code.  And you must show them these terms so they know their
46344rights.
46345
46346 Developers that use the GNU GPL protect your rights with two steps: (1)
46347assert copyright on the software, and (2) offer you this License giving
46348you legal permission to copy, distribute and/or modify it.
46349
46350 For the developers' and authors' protection, the GPL clearly explains
46351that there is no warranty for this free software.  For both users' and
46352authors' sake, the GPL requires that modified versions be marked as
46353changed, so that their problems will not be attributed erroneously to
46354authors of previous versions.
46355
46356 Some devices are designed to deny users access to install or run
46357modified versions of the software inside them, although the manufacturer
46358can do so.  This is fundamentally incompatible with the aim of
46359protecting users' freedom to change the software.  The systematic
46360pattern of such abuse occurs in the area of products for individuals to
46361use, which is precisely where it is most unacceptable.  Therefore, we
46362have designed this version of the GPL to prohibit the practice for those
46363products.  If such problems arise substantially in other domains, we
46364stand ready to extend this provision to those domains in future versions
46365of the GPL, as needed to protect the freedom of users.
46366
46367 Finally, every program is threatened constantly by software patents.
46368States should not allow patents to restrict development and use of
46369software on general-purpose computers, but in those that do, we wish to
46370avoid the special danger that patents applied to a free program could
46371make it effectively proprietary.  To prevent this, the GPL assures that
46372patents cannot be used to render the program non-free.
46373
46374 The precise terms and conditions for copying, distribution and
46375modification follow.
46376
46377TERMS AND CONDITIONS
46378====================
46379
46380  0. Definitions.
46381
46382     "This License" refers to version 3 of the GNU General Public
46383     License.
46384
46385     "Copyright" also means copyright-like laws that apply to other
46386     kinds of works, such as semiconductor masks.
46387
46388     "The Program" refers to any copyrightable work licensed under this
46389     License.  Each licensee is addressed as "you".  "Licensees" and
46390     "recipients" may be individuals or organizations.
46391
46392     To "modify" a work means to copy from or adapt all or part of the
46393     work in a fashion requiring copyright permission, other than the
46394     making of an exact copy.  The resulting work is called a "modified
46395     version" of the earlier work or a work "based on" the earlier work.
46396
46397     A "covered work" means either the unmodified Program or a work
46398     based on the Program.
46399
46400     To "propagate" a work means to do anything with it that, without
46401     permission, would make you directly or secondarily liable for
46402     infringement under applicable copyright law, except executing it on
46403     a computer or modifying a private copy.  Propagation includes
46404     copying, distribution (with or without modification), making
46405     available to the public, and in some countries other activities as
46406     well.
46407
46408     To "convey" a work means any kind of propagation that enables other
46409     parties to make or receive copies.  Mere interaction with a user
46410     through a computer network, with no transfer of a copy, is not
46411     conveying.
46412
46413     An interactive user interface displays "Appropriate Legal Notices"
46414     to the extent that it includes a convenient and prominently visible
46415     feature that (1) displays an appropriate copyright notice, and (2)
46416     tells the user that there is no warranty for the work (except to
46417     the extent that warranties are provided), that licensees may convey
46418     the work under this License, and how to view a copy of this
46419     License.  If the interface presents a list of user commands or
46420     options, such as a menu, a prominent item in the list meets this
46421     criterion.
46422
46423  1. Source Code.
46424
46425     The "source code" for a work means the preferred form of the work
46426     for making modifications to it.  "Object code" means any non-source
46427     form of a work.
46428
46429     A "Standard Interface" means an interface that either is an
46430     official standard defined by a recognized standards body, or, in
46431     the case of interfaces specified for a particular programming
46432     language, one that is widely used among developers working in that
46433     language.
46434
46435     The "System Libraries" of an executable work include anything,
46436     other than the work as a whole, that (a) is included in the normal
46437     form of packaging a Major Component, but which is not part of that
46438     Major Component, and (b) serves only to enable use of the work with
46439     that Major Component, or to implement a Standard Interface for
46440     which an implementation is available to the public in source code
46441     form.  A "Major Component", in this context, means a major
46442     essential component (kernel, window system, and so on) of the
46443     specific operating system (if any) on which the executable work
46444     runs, or a compiler used to produce the work, or an object code
46445     interpreter used to run it.
46446
46447     The "Corresponding Source" for a work in object code form means all
46448     the source code needed to generate, install, and (for an executable
46449     work) run the object code and to modify the work, including scripts
46450     to control those activities.  However, it does not include the
46451     work's System Libraries, or general-purpose tools or generally
46452     available free programs which are used unmodified in performing
46453     those activities but which are not part of the work.  For example,
46454     Corresponding Source includes interface definition files associated
46455     with source files for the work, and the source code for shared
46456     libraries and dynamically linked subprograms that the work is
46457     specifically designed to require, such as by intimate data
46458     communication or control flow between those subprograms and other
46459     parts of the work.
46460
46461     The Corresponding Source need not include anything that users can
46462     regenerate automatically from other parts of the Corresponding
46463     Source.
46464
46465     The Corresponding Source for a work in source code form is that
46466     same work.
46467
46468  2. Basic Permissions.
46469
46470     All rights granted under this License are granted for the term of
46471     copyright on the Program, and are irrevocable provided the stated
46472     conditions are met.  This License explicitly affirms your unlimited
46473     permission to run the unmodified Program.  The output from running
46474     a covered work is covered by this License only if the output, given
46475     its content, constitutes a covered work.  This License acknowledges
46476     your rights of fair use or other equivalent, as provided by
46477     copyright law.
46478
46479     You may make, run and propagate covered works that you do not
46480     convey, without conditions so long as your license otherwise
46481     remains in force.  You may convey covered works to others for the
46482     sole purpose of having them make modifications exclusively for you,
46483     or provide you with facilities for running those works, provided
46484     that you comply with the terms of this License in conveying all
46485     material for which you do not control copyright.  Those thus making
46486     or running the covered works for you must do so exclusively on your
46487     behalf, under your direction and control, on terms that prohibit
46488     them from making any copies of your copyrighted material outside
46489     their relationship with you.
46490
46491     Conveying under any other circumstances is permitted solely under
46492     the conditions stated below.  Sublicensing is not allowed; section
46493     10 makes it unnecessary.
46494
46495  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
46496
46497     No covered work shall be deemed part of an effective technological
46498     measure under any applicable law fulfilling obligations under
46499     article 11 of the WIPO copyright treaty adopted on 20 December
46500     1996, or similar laws prohibiting or restricting circumvention of
46501     such measures.
46502
46503     When you convey a covered work, you waive any legal power to forbid
46504     circumvention of technological measures to the extent such
46505     circumvention is effected by exercising rights under this License
46506     with respect to the covered work, and you disclaim any intention to
46507     limit operation or modification of the work as a means of
46508     enforcing, against the work's users, your or third parties' legal
46509     rights to forbid circumvention of technological measures.
46510
46511  4. Conveying Verbatim Copies.
46512
46513     You may convey verbatim copies of the Program's source code as you
46514     receive it, in any medium, provided that you conspicuously and
46515     appropriately publish on each copy an appropriate copyright notice;
46516     keep intact all notices stating that this License and any
46517     non-permissive terms added in accord with section 7 apply to the
46518     code; keep intact all notices of the absence of any warranty; and
46519     give all recipients a copy of this License along with the Program.
46520
46521     You may charge any price or no price for each copy that you convey,
46522     and you may offer support or warranty protection for a fee.
46523
46524  5. Conveying Modified Source Versions.
46525
46526     You may convey a work based on the Program, or the modifications to
46527     produce it from the Program, in the form of source code under the
46528     terms of section 4, provided that you also meet all of these
46529     conditions:
46530
46531       a. The work must carry prominent notices stating that you
46532          modified it, and giving a relevant date.
46533
46534       b. The work must carry prominent notices stating that it is
46535          released under this License and any conditions added under
46536          section 7.  This requirement modifies the requirement in
46537          section 4 to "keep intact all notices".
46538
46539       c. You must license the entire work, as a whole, under this
46540          License to anyone who comes into possession of a copy.  This
46541          License will therefore apply, along with any applicable
46542          section 7 additional terms, to the whole of the work, and all
46543          its parts, regardless of how they are packaged.  This License
46544          gives no permission to license the work in any other way, but
46545          it does not invalidate such permission if you have separately
46546          received it.
46547
46548       d. If the work has interactive user interfaces, each must display
46549          Appropriate Legal Notices; however, if the Program has
46550          interactive interfaces that do not display Appropriate Legal
46551          Notices, your work need not make them do so.
46552
46553     A compilation of a covered work with other separate and independent
46554     works, which are not by their nature extensions of the covered
46555     work, and which are not combined with it such as to form a larger
46556     program, in or on a volume of a storage or distribution medium, is
46557     called an "aggregate" if the compilation and its resulting
46558     copyright are not used to limit the access or legal rights of the
46559     compilation's users beyond what the individual works permit.
46560     Inclusion of a covered work in an aggregate does not cause this
46561     License to apply to the other parts of the aggregate.
46562
46563  6. Conveying Non-Source Forms.
46564
46565     You may convey a covered work in object code form under the terms
46566     of sections 4 and 5, provided that you also convey the
46567     machine-readable Corresponding Source under the terms of this
46568     License, in one of these ways:
46569
46570       a. Convey the object code in, or embodied in, a physical product
46571          (including a physical distribution medium), accompanied by the
46572          Corresponding Source fixed on a durable physical medium
46573          customarily used for software interchange.
46574
46575       b. Convey the object code in, or embodied in, a physical product
46576          (including a physical distribution medium), accompanied by a
46577          written offer, valid for at least three years and valid for as
46578          long as you offer spare parts or customer support for that
46579          product model, to give anyone who possesses the object code
46580          either (1) a copy of the Corresponding Source for all the
46581          software in the product that is covered by this License, on a
46582          durable physical medium customarily used for software
46583          interchange, for a price no more than your reasonable cost of
46584          physically performing this conveying of source, or (2) access
46585          to copy the Corresponding Source from a network server at no
46586          charge.
46587
46588       c. Convey individual copies of the object code with a copy of the
46589          written offer to provide the Corresponding Source.  This
46590          alternative is allowed only occasionally and noncommercially,
46591          and only if you received the object code with such an offer,
46592          in accord with subsection 6b.
46593
46594       d. Convey the object code by offering access from a designated
46595          place (gratis or for a charge), and offer equivalent access to
46596          the Corresponding Source in the same way through the same
46597          place at no further charge.  You need not require recipients
46598          to copy the Corresponding Source along with the object code.
46599          If the place to copy the object code is a network server, the
46600          Corresponding Source may be on a different server (operated by
46601          you or a third party) that supports equivalent copying
46602          facilities, provided you maintain clear directions next to the
46603          object code saying where to find the Corresponding Source.
46604          Regardless of what server hosts the Corresponding Source, you
46605          remain obligated to ensure that it is available for as long as
46606          needed to satisfy these requirements.
46607
46608       e. Convey the object code using peer-to-peer transmission,
46609          provided you inform other peers where the object code and
46610          Corresponding Source of the work are being offered to the
46611          general public at no charge under subsection 6d.
46612
46613     A separable portion of the object code, whose source code is
46614     excluded from the Corresponding Source as a System Library, need
46615     not be included in conveying the object code work.
46616
46617     A "User Product" is either (1) a "consumer product", which means
46618     any tangible personal property which is normally used for personal,
46619     family, or household purposes, or (2) anything designed or sold for
46620     incorporation into a dwelling.  In determining whether a product is
46621     a consumer product, doubtful cases shall be resolved in favor of
46622     coverage.  For a particular product received by a particular user,
46623     "normally used" refers to a typical or common use of that class of
46624     product, regardless of the status of the particular user or of the
46625     way in which the particular user actually uses, or expects or is
46626     expected to use, the product.  A product is a consumer product
46627     regardless of whether the product has substantial commercial,
46628     industrial or non-consumer uses, unless such uses represent the
46629     only significant mode of use of the product.
46630
46631     "Installation Information" for a User Product means any methods,
46632     procedures, authorization keys, or other information required to
46633     install and execute modified versions of a covered work in that
46634     User Product from a modified version of its Corresponding Source.
46635     The information must suffice to ensure that the continued
46636     functioning of the modified object code is in no case prevented or
46637     interfered with solely because modification has been made.
46638
46639     If you convey an object code work under this section in, or with,
46640     or specifically for use in, a User Product, and the conveying
46641     occurs as part of a transaction in which the right of possession
46642     and use of the User Product is transferred to the recipient in
46643     perpetuity or for a fixed term (regardless of how the transaction
46644     is characterized), the Corresponding Source conveyed under this
46645     section must be accompanied by the Installation Information.  But
46646     this requirement does not apply if neither you nor any third party
46647     retains the ability to install modified object code on the User
46648     Product (for example, the work has been installed in ROM).
46649
46650     The requirement to provide Installation Information does not
46651     include a requirement to continue to provide support service,
46652     warranty, or updates for a work that has been modified or installed
46653     by the recipient, or for the User Product in which it has been
46654     modified or installed.  Access to a network may be denied when the
46655     modification itself materially and adversely affects the operation
46656     of the network or violates the rules and protocols for
46657     communication across the network.
46658
46659     Corresponding Source conveyed, and Installation Information
46660     provided, in accord with this section must be in a format that is
46661     publicly documented (and with an implementation available to the
46662     public in source code form), and must require no special password
46663     or key for unpacking, reading or copying.
46664
46665  7. Additional Terms.
46666
46667     "Additional permissions" are terms that supplement the terms of
46668     this License by making exceptions from one or more of its
46669     conditions.  Additional permissions that are applicable to the
46670     entire Program shall be treated as though they were included in
46671     this License, to the extent that they are valid under applicable
46672     law.  If additional permissions apply only to part of the Program,
46673     that part may be used separately under those permissions, but the
46674     entire Program remains governed by this License without regard to
46675     the additional permissions.
46676
46677     When you convey a copy of a covered work, you may at your option
46678     remove any additional permissions from that copy, or from any part
46679     of it.  (Additional permissions may be written to require their own
46680     removal in certain cases when you modify the work.)  You may place
46681     additional permissions on material, added by you to a covered work,
46682     for which you have or can give appropriate copyright permission.
46683
46684     Notwithstanding any other provision of this License, for material
46685     you add to a covered work, you may (if authorized by the copyright
46686     holders of that material) supplement the terms of this License with
46687     terms:
46688
46689       a. Disclaiming warranty or limiting liability differently from
46690          the terms of sections 15 and 16 of this License; or
46691
46692       b. Requiring preservation of specified reasonable legal notices
46693          or author attributions in that material or in the Appropriate
46694          Legal Notices displayed by works containing it; or
46695
46696       c. Prohibiting misrepresentation of the origin of that material,
46697          or requiring that modified versions of such material be marked
46698          in reasonable ways as different from the original version; or
46699
46700       d. Limiting the use for publicity purposes of names of licensors
46701          or authors of the material; or
46702
46703       e. Declining to grant rights under trademark law for use of some
46704          trade names, trademarks, or service marks; or
46705
46706       f. Requiring indemnification of licensors and authors of that
46707          material by anyone who conveys the material (or modified
46708          versions of it) with contractual assumptions of liability to
46709          the recipient, for any liability that these contractual
46710          assumptions directly impose on those licensors and authors.
46711
46712     All other non-permissive additional terms are considered "further
46713     restrictions" within the meaning of section 10.  If the Program as
46714     you received it, or any part of it, contains a notice stating that
46715     it is governed by this License along with a term that is a further
46716     restriction, you may remove that term.  If a license document
46717     contains a further restriction but permits relicensing or conveying
46718     under this License, you may add to a covered work material governed
46719     by the terms of that license document, provided that the further
46720     restriction does not survive such relicensing or conveying.
46721
46722     If you add terms to a covered work in accord with this section, you
46723     must place, in the relevant source files, a statement of the
46724     additional terms that apply to those files, or a notice indicating
46725     where to find the applicable terms.
46726
46727     Additional terms, permissive or non-permissive, may be stated in
46728     the form of a separately written license, or stated as exceptions;
46729     the above requirements apply either way.
46730
46731  8. Termination.
46732
46733     You may not propagate or modify a covered work except as expressly
46734     provided under this License.  Any attempt otherwise to propagate or
46735     modify it is void, and will automatically terminate your rights
46736     under this License (including any patent licenses granted under the
46737     third paragraph of section 11).
46738
46739     However, if you cease all violation of this License, then your
46740     license from a particular copyright holder is reinstated (a)
46741     provisionally, unless and until the copyright holder explicitly and
46742     finally terminates your license, and (b) permanently, if the
46743     copyright holder fails to notify you of the violation by some
46744     reasonable means prior to 60 days after the cessation.
46745
46746     Moreover, your license from a particular copyright holder is
46747     reinstated permanently if the copyright holder notifies you of the
46748     violation by some reasonable means, this is the first time you have
46749     received notice of violation of this License (for any work) from
46750     that copyright holder, and you cure the violation prior to 30 days
46751     after your receipt of the notice.
46752
46753     Termination of your rights under this section does not terminate
46754     the licenses of parties who have received copies or rights from you
46755     under this License.  If your rights have been terminated and not
46756     permanently reinstated, you do not qualify to receive new licenses
46757     for the same material under section 10.
46758
46759  9. Acceptance Not Required for Having Copies.
46760
46761     You are not required to accept this License in order to receive or
46762     run a copy of the Program.  Ancillary propagation of a covered work
46763     occurring solely as a consequence of using peer-to-peer
46764     transmission to receive a copy likewise does not require
46765     acceptance.  However, nothing other than this License grants you
46766     permission to propagate or modify any covered work.  These actions
46767     infringe copyright if you do not accept this License.  Therefore,
46768     by modifying or propagating a covered work, you indicate your
46769     acceptance of this License to do so.
46770
46771  10. Automatic Licensing of Downstream Recipients.
46772
46773     Each time you convey a covered work, the recipient automatically
46774     receives a license from the original licensors, to run, modify and
46775     propagate that work, subject to this License.  You are not
46776     responsible for enforcing compliance by third parties with this
46777     License.
46778
46779     An "entity transaction" is a transaction transferring control of an
46780     organization, or substantially all assets of one, or subdividing an
46781     organization, or merging organizations.  If propagation of a
46782     covered work results from an entity transaction, each party to that
46783     transaction who receives a copy of the work also receives whatever
46784     licenses to the work the party's predecessor in interest had or
46785     could give under the previous paragraph, plus a right to possession
46786     of the Corresponding Source of the work from the predecessor in
46787     interest, if the predecessor has it or can get it with reasonable
46788     efforts.
46789
46790     You may not impose any further restrictions on the exercise of the
46791     rights granted or affirmed under this License.  For example, you
46792     may not impose a license fee, royalty, or other charge for exercise
46793     of rights granted under this License, and you may not initiate
46794     litigation (including a cross-claim or counterclaim in a lawsuit)
46795     alleging that any patent claim is infringed by making, using,
46796     selling, offering for sale, or importing the Program or any portion
46797     of it.
46798
46799  11. Patents.
46800
46801     A "contributor" is a copyright holder who authorizes use under this
46802     License of the Program or a work on which the Program is based.
46803     The work thus licensed is called the contributor's "contributor
46804     version".
46805
46806     A contributor's "essential patent claims" are all patent claims
46807     owned or controlled by the contributor, whether already acquired or
46808     hereafter acquired, that would be infringed by some manner,
46809     permitted by this License, of making, using, or selling its
46810     contributor version, but do not include claims that would be
46811     infringed only as a consequence of further modification of the
46812     contributor version.  For purposes of this definition, "control"
46813     includes the right to grant patent sublicenses in a manner
46814     consistent with the requirements of this License.
46815
46816     Each contributor grants you a non-exclusive, worldwide,
46817     royalty-free patent license under the contributor's essential
46818     patent claims, to make, use, sell, offer for sale, import and
46819     otherwise run, modify and propagate the contents of its contributor
46820     version.
46821
46822     In the following three paragraphs, a "patent license" is any
46823     express agreement or commitment, however denominated, not to
46824     enforce a patent (such as an express permission to practice a
46825     patent or covenant not to sue for patent infringement).  To "grant"
46826     such a patent license to a party means to make such an agreement or
46827     commitment not to enforce a patent against the party.
46828
46829     If you convey a covered work, knowingly relying on a patent
46830     license, and the Corresponding Source of the work is not available
46831     for anyone to copy, free of charge and under the terms of this
46832     License, through a publicly available network server or other
46833     readily accessible means, then you must either (1) cause the
46834     Corresponding Source to be so available, or (2) arrange to deprive
46835     yourself of the benefit of the patent license for this particular
46836     work, or (3) arrange, in a manner consistent with the requirements
46837     of this License, to extend the patent license to downstream
46838     recipients.  "Knowingly relying" means you have actual knowledge
46839     that, but for the patent license, your conveying the covered work
46840     in a country, or your recipient's use of the covered work in a
46841     country, would infringe one or more identifiable patents in that
46842     country that you have reason to believe are valid.
46843
46844     If, pursuant to or in connection with a single transaction or
46845     arrangement, you convey, or propagate by procuring conveyance of, a
46846     covered work, and grant a patent license to some of the parties
46847     receiving the covered work authorizing them to use, propagate,
46848     modify or convey a specific copy of the covered work, then the
46849     patent license you grant is automatically extended to all
46850     recipients of the covered work and works based on it.
46851
46852     A patent license is "discriminatory" if it does not include within
46853     the scope of its coverage, prohibits the exercise of, or is
46854     conditioned on the non-exercise of one or more of the rights that
46855     are specifically granted under this License.  You may not convey a
46856     covered work if you are a party to an arrangement with a third
46857     party that is in the business of distributing software, under which
46858     you make payment to the third party based on the extent of your
46859     activity of conveying the work, and under which the third party
46860     grants, to any of the parties who would receive the covered work
46861     from you, a discriminatory patent license (a) in connection with
46862     copies of the covered work conveyed by you (or copies made from
46863     those copies), or (b) primarily for and in connection with specific
46864     products or compilations that contain the covered work, unless you
46865     entered into that arrangement, or that patent license was granted,
46866     prior to 28 March 2007.
46867
46868     Nothing in this License shall be construed as excluding or limiting
46869     any implied license or other defenses to infringement that may
46870     otherwise be available to you under applicable patent law.
46871
46872  12. No Surrender of Others' Freedom.
46873
46874     If conditions are imposed on you (whether by court order, agreement
46875     or otherwise) that contradict the conditions of this License, they
46876     do not excuse you from the conditions of this License.  If you
46877     cannot convey a covered work so as to satisfy simultaneously your
46878     obligations under this License and any other pertinent obligations,
46879     then as a consequence you may not convey it at all.  For example,
46880     if you agree to terms that obligate you to collect a royalty for
46881     further conveying from those to whom you convey the Program, the
46882     only way you could satisfy both those terms and this License would
46883     be to refrain entirely from conveying the Program.
46884
46885  13. Use with the GNU Affero General Public License.
46886
46887     Notwithstanding any other provision of this License, you have
46888     permission to link or combine any covered work with a work licensed
46889     under version 3 of the GNU Affero General Public License into a
46890     single combined work, and to convey the resulting work.  The terms
46891     of this License will continue to apply to the part which is the
46892     covered work, but the special requirements of the GNU Affero
46893     General Public License, section 13, concerning interaction through
46894     a network will apply to the combination as such.
46895
46896  14. Revised Versions of this License.
46897
46898     The Free Software Foundation may publish revised and/or new
46899     versions of the GNU General Public License from time to time.  Such
46900     new versions will be similar in spirit to the present version, but
46901     may differ in detail to address new problems or concerns.
46902
46903     Each version is given a distinguishing version number.  If the
46904     Program specifies that a certain numbered version of the GNU
46905     General Public License "or any later version" applies to it, you
46906     have the option of following the terms and conditions either of
46907     that numbered version or of any later version published by the Free
46908     Software Foundation.  If the Program does not specify a version
46909     number of the GNU General Public License, you may choose any
46910     version ever published by the Free Software Foundation.
46911
46912     If the Program specifies that a proxy can decide which future
46913     versions of the GNU General Public License can be used, that
46914     proxy's public statement of acceptance of a version permanently
46915     authorizes you to choose that version for the Program.
46916
46917     Later license versions may give you additional or different
46918     permissions.  However, no additional obligations are imposed on any
46919     author or copyright holder as a result of your choosing to follow a
46920     later version.
46921
46922  15. Disclaimer of Warranty.
46923
46924     THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
46925     APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE
46926     COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS"
46927     WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
46928     INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
46929     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE
46930     RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.
46931     SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
46932     NECESSARY SERVICING, REPAIR OR CORRECTION.
46933
46934  16. Limitation of Liability.
46935
46936     IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
46937     WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES
46938     AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR
46939     DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
46940     CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE
46941     THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA
46942     BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
46943     PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
46944     PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF
46945     THE POSSIBILITY OF SUCH DAMAGES.
46946
46947  17. Interpretation of Sections 15 and 16.
46948
46949     If the disclaimer of warranty and limitation of liability provided
46950     above cannot be given local legal effect according to their terms,
46951     reviewing courts shall apply local law that most closely
46952     approximates an absolute waiver of all civil liability in
46953     connection with the Program, unless a warranty or assumption of
46954     liability accompanies a copy of the Program in return for a fee.
46955
46956END OF TERMS AND CONDITIONS
46957===========================
46958
46959How to Apply These Terms to Your New Programs
46960=============================================
46961
46962If you develop a new program, and you want it to be of the greatest
46963possible use to the public, the best way to achieve this is to make it
46964free software which everyone can redistribute and change under these
46965terms.
46966
46967 To do so, attach the following notices to the program.  It is safest to
46968attach them to the start of each source file to most effectively state
46969the exclusion of warranty; and each file should have at least the
46970"copyright" line and a pointer to where the full notice is found.
46971
46972     ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES.
46973     Copyright (C) YEAR NAME OF AUTHOR
46974
46975     This program is free software: you can redistribute it and/or modify
46976     it under the terms of the GNU General Public License as published by
46977     the Free Software Foundation, either version 3 of the License, or (at
46978     your option) any later version.
46979
46980     This program is distributed in the hope that it will be useful, but
46981     WITHOUT ANY WARRANTY; without even the implied warranty of
46982     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
46983     General Public License for more details.
46984
46985     You should have received a copy of the GNU General Public License
46986     along with this program.  If not, see <http://www.gnu.org/licenses/>.
46987
46988 Also add information on how to contact you by electronic and paper
46989mail.
46990
46991 If the program does terminal interaction, make it output a short notice
46992like this when it starts in an interactive mode:
46993
46994     PROGRAM Copyright (C) YEAR NAME OF AUTHOR
46995     This program comes with ABSOLUTELY NO WARRANTY; for details type 'show w'.
46996     This is free software, and you are welcome to redistribute it
46997     under certain conditions; type 'show c' for details.
46998
46999 The hypothetical commands 'show w' and 'show c' should show the
47000appropriate parts of the General Public License.  Of course, your
47001program's commands might be different; for a GUI interface, you would
47002use an "about box".
47003
47004 You should also get your employer (if you work as a programmer) or
47005school, if any, to sign a "copyright disclaimer" for the program, if
47006necessary.  For more information on this, and how to apply and follow
47007the GNU GPL, see <http://www.gnu.org/licenses/>.
47008
47009 The GNU General Public License does not permit incorporating your
47010program into proprietary programs.  If your program is a subroutine
47011library, you may consider it more useful to permit linking proprietary
47012applications with the library.  If this is what you want to do, use the
47013GNU Lesser General Public License instead of this License.  But first,
47014please read <https://www.gnu.org/licenses/why-not-lgpl.html>.
47015
47016
47017File: gccint.info,  Node: GNU Free Documentation License,  Next: Contributors,  Prev: Copying,  Up: Top
47018
47019GNU Free Documentation License
47020******************************
47021
47022                     Version 1.3, 3 November 2008
47023
47024     Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
47025     <http://fsf.org/>
47026
47027     Everyone is permitted to copy and distribute verbatim copies
47028     of this license document, but changing it is not allowed.
47029
47030  0. PREAMBLE
47031
47032     The purpose of this License is to make a manual, textbook, or other
47033     functional and useful document "free" in the sense of freedom: to
47034     assure everyone the effective freedom to copy and redistribute it,
47035     with or without modifying it, either commercially or
47036     noncommercially.  Secondarily, this License preserves for the
47037     author and publisher a way to get credit for their work, while not
47038     being considered responsible for modifications made by others.
47039
47040     This License is a kind of "copyleft", which means that derivative
47041     works of the document must themselves be free in the same sense.
47042     It complements the GNU General Public License, which is a copyleft
47043     license designed for free software.
47044
47045     We have designed this License in order to use it for manuals for
47046     free software, because free software needs free documentation: a
47047     free program should come with manuals providing the same freedoms
47048     that the software does.  But this License is not limited to
47049     software manuals; it can be used for any textual work, regardless
47050     of subject matter or whether it is published as a printed book.  We
47051     recommend this License principally for works whose purpose is
47052     instruction or reference.
47053
47054  1. APPLICABILITY AND DEFINITIONS
47055
47056     This License applies to any manual or other work, in any medium,
47057     that contains a notice placed by the copyright holder saying it can
47058     be distributed under the terms of this License.  Such a notice
47059     grants a world-wide, royalty-free license, unlimited in duration,
47060     to use that work under the conditions stated herein.  The
47061     "Document", below, refers to any such manual or work.  Any member
47062     of the public is a licensee, and is addressed as "you".  You accept
47063     the license if you copy, modify or distribute the work in a way
47064     requiring permission under copyright law.
47065
47066     A "Modified Version" of the Document means any work containing the
47067     Document or a portion of it, either copied verbatim, or with
47068     modifications and/or translated into another language.
47069
47070     A "Secondary Section" is a named appendix or a front-matter section
47071     of the Document that deals exclusively with the relationship of the
47072     publishers or authors of the Document to the Document's overall
47073     subject (or to related matters) and contains nothing that could
47074     fall directly within that overall subject.  (Thus, if the Document
47075     is in part a textbook of mathematics, a Secondary Section may not
47076     explain any mathematics.)  The relationship could be a matter of
47077     historical connection with the subject or with related matters, or
47078     of legal, commercial, philosophical, ethical or political position
47079     regarding them.
47080
47081     The "Invariant Sections" are certain Secondary Sections whose
47082     titles are designated, as being those of Invariant Sections, in the
47083     notice that says that the Document is released under this License.
47084     If a section does not fit the above definition of Secondary then it
47085     is not allowed to be designated as Invariant.  The Document may
47086     contain zero Invariant Sections.  If the Document does not identify
47087     any Invariant Sections then there are none.
47088
47089     The "Cover Texts" are certain short passages of text that are
47090     listed, as Front-Cover Texts or Back-Cover Texts, in the notice
47091     that says that the Document is released under this License.  A
47092     Front-Cover Text may be at most 5 words, and a Back-Cover Text may
47093     be at most 25 words.
47094
47095     A "Transparent" copy of the Document means a machine-readable copy,
47096     represented in a format whose specification is available to the
47097     general public, that is suitable for revising the document
47098     straightforwardly with generic text editors or (for images composed
47099     of pixels) generic paint programs or (for drawings) some widely
47100     available drawing editor, and that is suitable for input to text
47101     formatters or for automatic translation to a variety of formats
47102     suitable for input to text formatters.  A copy made in an otherwise
47103     Transparent file format whose markup, or absence of markup, has
47104     been arranged to thwart or discourage subsequent modification by
47105     readers is not Transparent.  An image format is not Transparent if
47106     used for any substantial amount of text.  A copy that is not
47107     "Transparent" is called "Opaque".
47108
47109     Examples of suitable formats for Transparent copies include plain
47110     ASCII without markup, Texinfo input format, LaTeX input format,
47111     SGML or XML using a publicly available DTD, and standard-conforming
47112     simple HTML, PostScript or PDF designed for human modification.
47113     Examples of transparent image formats include PNG, XCF and JPG.
47114     Opaque formats include proprietary formats that can be read and
47115     edited only by proprietary word processors, SGML or XML for which
47116     the DTD and/or processing tools are not generally available, and
47117     the machine-generated HTML, PostScript or PDF produced by some word
47118     processors for output purposes only.
47119
47120     The "Title Page" means, for a printed book, the title page itself,
47121     plus such following pages as are needed to hold, legibly, the
47122     material this License requires to appear in the title page.  For
47123     works in formats which do not have any title page as such, "Title
47124     Page" means the text near the most prominent appearance of the
47125     work's title, preceding the beginning of the body of the text.
47126
47127     The "publisher" means any person or entity that distributes copies
47128     of the Document to the public.
47129
47130     A section "Entitled XYZ" means a named subunit of the Document
47131     whose title either is precisely XYZ or contains XYZ in parentheses
47132     following text that translates XYZ in another language.  (Here XYZ
47133     stands for a specific section name mentioned below, such as
47134     "Acknowledgements", "Dedications", "Endorsements", or "History".)
47135     To "Preserve the Title" of such a section when you modify the
47136     Document means that it remains a section "Entitled XYZ" according
47137     to this definition.
47138
47139     The Document may include Warranty Disclaimers next to the notice
47140     which states that this License applies to the Document.  These
47141     Warranty Disclaimers are considered to be included by reference in
47142     this License, but only as regards disclaiming warranties: any other
47143     implication that these Warranty Disclaimers may have is void and
47144     has no effect on the meaning of this License.
47145
47146  2. VERBATIM COPYING
47147
47148     You may copy and distribute the Document in any medium, either
47149     commercially or noncommercially, provided that this License, the
47150     copyright notices, and the license notice saying this License
47151     applies to the Document are reproduced in all copies, and that you
47152     add no other conditions whatsoever to those of this License.  You
47153     may not use technical measures to obstruct or control the reading
47154     or further copying of the copies you make or distribute.  However,
47155     you may accept compensation in exchange for copies.  If you
47156     distribute a large enough number of copies you must also follow the
47157     conditions in section 3.
47158
47159     You may also lend copies, under the same conditions stated above,
47160     and you may publicly display copies.
47161
47162  3. COPYING IN QUANTITY
47163
47164     If you publish printed copies (or copies in media that commonly
47165     have printed covers) of the Document, numbering more than 100, and
47166     the Document's license notice requires Cover Texts, you must
47167     enclose the copies in covers that carry, clearly and legibly, all
47168     these Cover Texts: Front-Cover Texts on the front cover, and
47169     Back-Cover Texts on the back cover.  Both covers must also clearly
47170     and legibly identify you as the publisher of these copies.  The
47171     front cover must present the full title with all words of the title
47172     equally prominent and visible.  You may add other material on the
47173     covers in addition.  Copying with changes limited to the covers, as
47174     long as they preserve the title of the Document and satisfy these
47175     conditions, can be treated as verbatim copying in other respects.
47176
47177     If the required texts for either cover are too voluminous to fit
47178     legibly, you should put the first ones listed (as many as fit
47179     reasonably) on the actual cover, and continue the rest onto
47180     adjacent pages.
47181
47182     If you publish or distribute Opaque copies of the Document
47183     numbering more than 100, you must either include a machine-readable
47184     Transparent copy along with each Opaque copy, or state in or with
47185     each Opaque copy a computer-network location from which the general
47186     network-using public has access to download using public-standard
47187     network protocols a complete Transparent copy of the Document, free
47188     of added material.  If you use the latter option, you must take
47189     reasonably prudent steps, when you begin distribution of Opaque
47190     copies in quantity, to ensure that this Transparent copy will
47191     remain thus accessible at the stated location until at least one
47192     year after the last time you distribute an Opaque copy (directly or
47193     through your agents or retailers) of that edition to the public.
47194
47195     It is requested, but not required, that you contact the authors of
47196     the Document well before redistributing any large number of copies,
47197     to give them a chance to provide you with an updated version of the
47198     Document.
47199
47200  4. MODIFICATIONS
47201
47202     You may copy and distribute a Modified Version of the Document
47203     under the conditions of sections 2 and 3 above, provided that you
47204     release the Modified Version under precisely this License, with the
47205     Modified Version filling the role of the Document, thus licensing
47206     distribution and modification of the Modified Version to whoever
47207     possesses a copy of it.  In addition, you must do these things in
47208     the Modified Version:
47209
47210       A. Use in the Title Page (and on the covers, if any) a title
47211          distinct from that of the Document, and from those of previous
47212          versions (which should, if there were any, be listed in the
47213          History section of the Document).  You may use the same title
47214          as a previous version if the original publisher of that
47215          version gives permission.
47216
47217       B. List on the Title Page, as authors, one or more persons or
47218          entities responsible for authorship of the modifications in
47219          the Modified Version, together with at least five of the
47220          principal authors of the Document (all of its principal
47221          authors, if it has fewer than five), unless they release you
47222          from this requirement.
47223
47224       C. State on the Title page the name of the publisher of the
47225          Modified Version, as the publisher.
47226
47227       D. Preserve all the copyright notices of the Document.
47228
47229       E. Add an appropriate copyright notice for your modifications
47230          adjacent to the other copyright notices.
47231
47232       F. Include, immediately after the copyright notices, a license
47233          notice giving the public permission to use the Modified
47234          Version under the terms of this License, in the form shown in
47235          the Addendum below.
47236
47237       G. Preserve in that license notice the full lists of Invariant
47238          Sections and required Cover Texts given in the Document's
47239          license notice.
47240
47241       H. Include an unaltered copy of this License.
47242
47243       I. Preserve the section Entitled "History", Preserve its Title,
47244          and add to it an item stating at least the title, year, new
47245          authors, and publisher of the Modified Version as given on the
47246          Title Page.  If there is no section Entitled "History" in the
47247          Document, create one stating the title, year, authors, and
47248          publisher of the Document as given on its Title Page, then add
47249          an item describing the Modified Version as stated in the
47250          previous sentence.
47251
47252       J. Preserve the network location, if any, given in the Document
47253          for public access to a Transparent copy of the Document, and
47254          likewise the network locations given in the Document for
47255          previous versions it was based on.  These may be placed in the
47256          "History" section.  You may omit a network location for a work
47257          that was published at least four years before the Document
47258          itself, or if the original publisher of the version it refers
47259          to gives permission.
47260
47261       K. For any section Entitled "Acknowledgements" or "Dedications",
47262          Preserve the Title of the section, and preserve in the section
47263          all the substance and tone of each of the contributor
47264          acknowledgements and/or dedications given therein.
47265
47266       L. Preserve all the Invariant Sections of the Document, unaltered
47267          in their text and in their titles.  Section numbers or the
47268          equivalent are not considered part of the section titles.
47269
47270       M. Delete any section Entitled "Endorsements".  Such a section
47271          may not be included in the Modified Version.
47272
47273       N. Do not retitle any existing section to be Entitled
47274          "Endorsements" or to conflict in title with any Invariant
47275          Section.
47276
47277       O. Preserve any Warranty Disclaimers.
47278
47279     If the Modified Version includes new front-matter sections or
47280     appendices that qualify as Secondary Sections and contain no
47281     material copied from the Document, you may at your option designate
47282     some or all of these sections as invariant.  To do this, add their
47283     titles to the list of Invariant Sections in the Modified Version's
47284     license notice.  These titles must be distinct from any other
47285     section titles.
47286
47287     You may add a section Entitled "Endorsements", provided it contains
47288     nothing but endorsements of your Modified Version by various
47289     parties--for example, statements of peer review or that the text
47290     has been approved by an organization as the authoritative
47291     definition of a standard.
47292
47293     You may add a passage of up to five words as a Front-Cover Text,
47294     and a passage of up to 25 words as a Back-Cover Text, to the end of
47295     the list of Cover Texts in the Modified Version.  Only one passage
47296     of Front-Cover Text and one of Back-Cover Text may be added by (or
47297     through arrangements made by) any one entity.  If the Document
47298     already includes a cover text for the same cover, previously added
47299     by you or by arrangement made by the same entity you are acting on
47300     behalf of, you may not add another; but you may replace the old
47301     one, on explicit permission from the previous publisher that added
47302     the old one.
47303
47304     The author(s) and publisher(s) of the Document do not by this
47305     License give permission to use their names for publicity for or to
47306     assert or imply endorsement of any Modified Version.
47307
47308  5. COMBINING DOCUMENTS
47309
47310     You may combine the Document with other documents released under
47311     this License, under the terms defined in section 4 above for
47312     modified versions, provided that you include in the combination all
47313     of the Invariant Sections of all of the original documents,
47314     unmodified, and list them all as Invariant Sections of your
47315     combined work in its license notice, and that you preserve all
47316     their Warranty Disclaimers.
47317
47318     The combined work need only contain one copy of this License, and
47319     multiple identical Invariant Sections may be replaced with a single
47320     copy.  If there are multiple Invariant Sections with the same name
47321     but different contents, make the title of each such section unique
47322     by adding at the end of it, in parentheses, the name of the
47323     original author or publisher of that section if known, or else a
47324     unique number.  Make the same adjustment to the section titles in
47325     the list of Invariant Sections in the license notice of the
47326     combined work.
47327
47328     In the combination, you must combine any sections Entitled
47329     "History" in the various original documents, forming one section
47330     Entitled "History"; likewise combine any sections Entitled
47331     "Acknowledgements", and any sections Entitled "Dedications".  You
47332     must delete all sections Entitled "Endorsements."
47333
47334  6. COLLECTIONS OF DOCUMENTS
47335
47336     You may make a collection consisting of the Document and other
47337     documents released under this License, and replace the individual
47338     copies of this License in the various documents with a single copy
47339     that is included in the collection, provided that you follow the
47340     rules of this License for verbatim copying of each of the documents
47341     in all other respects.
47342
47343     You may extract a single document from such a collection, and
47344     distribute it individually under this License, provided you insert
47345     a copy of this License into the extracted document, and follow this
47346     License in all other respects regarding verbatim copying of that
47347     document.
47348
47349  7. AGGREGATION WITH INDEPENDENT WORKS
47350
47351     A compilation of the Document or its derivatives with other
47352     separate and independent documents or works, in or on a volume of a
47353     storage or distribution medium, is called an "aggregate" if the
47354     copyright resulting from the compilation is not used to limit the
47355     legal rights of the compilation's users beyond what the individual
47356     works permit.  When the Document is included in an aggregate, this
47357     License does not apply to the other works in the aggregate which
47358     are not themselves derivative works of the Document.
47359
47360     If the Cover Text requirement of section 3 is applicable to these
47361     copies of the Document, then if the Document is less than one half
47362     of the entire aggregate, the Document's Cover Texts may be placed
47363     on covers that bracket the Document within the aggregate, or the
47364     electronic equivalent of covers if the Document is in electronic
47365     form.  Otherwise they must appear on printed covers that bracket
47366     the whole aggregate.
47367
47368  8. TRANSLATION
47369
47370     Translation is considered a kind of modification, so you may
47371     distribute translations of the Document under the terms of section
47372     4.  Replacing Invariant Sections with translations requires special
47373     permission from their copyright holders, but you may include
47374     translations of some or all Invariant Sections in addition to the
47375     original versions of these Invariant Sections.  You may include a
47376     translation of this License, and all the license notices in the
47377     Document, and any Warranty Disclaimers, provided that you also
47378     include the original English version of this License and the
47379     original versions of those notices and disclaimers.  In case of a
47380     disagreement between the translation and the original version of
47381     this License or a notice or disclaimer, the original version will
47382     prevail.
47383
47384     If a section in the Document is Entitled "Acknowledgements",
47385     "Dedications", or "History", the requirement (section 4) to
47386     Preserve its Title (section 1) will typically require changing the
47387     actual title.
47388
47389  9. TERMINATION
47390
47391     You may not copy, modify, sublicense, or distribute the Document
47392     except as expressly provided under this License.  Any attempt
47393     otherwise to copy, modify, sublicense, or distribute it is void,
47394     and will automatically terminate your rights under this License.
47395
47396     However, if you cease all violation of this License, then your
47397     license from a particular copyright holder is reinstated (a)
47398     provisionally, unless and until the copyright holder explicitly and
47399     finally terminates your license, and (b) permanently, if the
47400     copyright holder fails to notify you of the violation by some
47401     reasonable means prior to 60 days after the cessation.
47402
47403     Moreover, your license from a particular copyright holder is
47404     reinstated permanently if the copyright holder notifies you of the
47405     violation by some reasonable means, this is the first time you have
47406     received notice of violation of this License (for any work) from
47407     that copyright holder, and you cure the violation prior to 30 days
47408     after your receipt of the notice.
47409
47410     Termination of your rights under this section does not terminate
47411     the licenses of parties who have received copies or rights from you
47412     under this License.  If your rights have been terminated and not
47413     permanently reinstated, receipt of a copy of some or all of the
47414     same material does not give you any rights to use it.
47415
47416  10. FUTURE REVISIONS OF THIS LICENSE
47417
47418     The Free Software Foundation may publish new, revised versions of
47419     the GNU Free Documentation License from time to time.  Such new
47420     versions will be similar in spirit to the present version, but may
47421     differ in detail to address new problems or concerns.  See
47422     <http://www.gnu.org/copyleft/>.
47423
47424     Each version of the License is given a distinguishing version
47425     number.  If the Document specifies that a particular numbered
47426     version of this License "or any later version" applies to it, you
47427     have the option of following the terms and conditions either of
47428     that specified version or of any later version that has been
47429     published (not as a draft) by the Free Software Foundation.  If the
47430     Document does not specify a version number of this License, you may
47431     choose any version ever published (not as a draft) by the Free
47432     Software Foundation.  If the Document specifies that a proxy can
47433     decide which future versions of this License can be used, that
47434     proxy's public statement of acceptance of a version permanently
47435     authorizes you to choose that version for the Document.
47436
47437  11. RELICENSING
47438
47439     "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
47440     World Wide Web server that publishes copyrightable works and also
47441     provides prominent facilities for anybody to edit those works.  A
47442     public wiki that anybody can edit is an example of such a server.
47443     A "Massive Multiauthor Collaboration" (or "MMC") contained in the
47444     site means any set of copyrightable works thus published on the MMC
47445     site.
47446
47447     "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
47448     license published by Creative Commons Corporation, a not-for-profit
47449     corporation with a principal place of business in San Francisco,
47450     California, as well as future copyleft versions of that license
47451     published by that same organization.
47452
47453     "Incorporate" means to publish or republish a Document, in whole or
47454     in part, as part of another Document.
47455
47456     An MMC is "eligible for relicensing" if it is licensed under this
47457     License, and if all works that were first published under this
47458     License somewhere other than this MMC, and subsequently
47459     incorporated in whole or in part into the MMC, (1) had no cover
47460     texts or invariant sections, and (2) were thus incorporated prior
47461     to November 1, 2008.
47462
47463     The operator of an MMC Site may republish an MMC contained in the
47464     site under CC-BY-SA on the same site at any time before August 1,
47465     2009, provided the MMC is eligible for relicensing.
47466
47467ADDENDUM: How to use this License for your documents
47468====================================================
47469
47470To use this License in a document you have written, include a copy of
47471the License in the document and put the following copyright and license
47472notices just after the title page:
47473
47474       Copyright (C)  YEAR  YOUR NAME.
47475       Permission is granted to copy, distribute and/or modify this document
47476       under the terms of the GNU Free Documentation License, Version 1.3
47477       or any later version published by the Free Software Foundation;
47478       with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
47479       Texts.  A copy of the license is included in the section entitled ``GNU
47480       Free Documentation License''.
47481
47482 If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
47483replace the "with...Texts."  line with this:
47484
47485         with the Invariant Sections being LIST THEIR TITLES, with
47486         the Front-Cover Texts being LIST, and with the Back-Cover Texts
47487         being LIST.
47488
47489 If you have Invariant Sections without Cover Texts, or some other
47490combination of the three, merge those two alternatives to suit the
47491situation.
47492
47493 If your document contains nontrivial examples of program code, we
47494recommend releasing these examples in parallel under your choice of free
47495software license, such as the GNU General Public License, to permit
47496their use in free software.
47497
47498
47499File: gccint.info,  Node: Contributors,  Next: Option Index,  Prev: GNU Free Documentation License,  Up: Top
47500
47501Contributors to GCC
47502*******************
47503
47504The GCC project would like to thank its many contributors.  Without them
47505the project would not have been nearly as successful as it has been.
47506Any omissions in this list are accidental.  Feel free to contact
47507<law@redhat.com> or <gerald@pfeifer.com> if you have been left out or
47508some of your contributions are not listed.  Please keep this list in
47509alphabetical order.
47510
47511   * Analog Devices helped implement the support for complex data types
47512     and iterators.
47513
47514   * John David Anglin for threading-related fixes and improvements to
47515     libstdc++-v3, and the HP-UX port.
47516
47517   * James van Artsdalen wrote the code that makes efficient use of the
47518     Intel 80387 register stack.
47519
47520   * Abramo and Roberto Bagnara for the SysV68 Motorola 3300 Delta
47521     Series port.
47522
47523   * Alasdair Baird for various bug fixes.
47524
47525   * Giovanni Bajo for analyzing lots of complicated C++ problem
47526     reports.
47527
47528   * Peter Barada for his work to improve code generation for new
47529     ColdFire cores.
47530
47531   * Gerald Baumgartner added the signature extension to the C++ front
47532     end.
47533
47534   * Godmar Back for his Java improvements and encouragement.
47535
47536   * Scott Bambrough for help porting the Java compiler.
47537
47538   * Wolfgang Bangerth for processing tons of bug reports.
47539
47540   * Jon Beniston for his Microsoft Windows port of Java and port to
47541     Lattice Mico32.
47542
47543   * Daniel Berlin for better DWARF 2 support, faster/better
47544     optimizations, improved alias analysis, plus migrating GCC to
47545     Bugzilla.
47546
47547   * Geoff Berry for his Java object serialization work and various
47548     patches.
47549
47550   * David Binderman tests weekly snapshots of GCC trunk against Fedora
47551     Rawhide for several architectures.
47552
47553   * Laurynas Biveinis for memory management work and DJGPP port fixes.
47554
47555   * Uros Bizjak for the implementation of x87 math built-in functions
47556     and for various middle end and i386 back end improvements and bug
47557     fixes.
47558
47559   * Eric Blake for helping to make GCJ and libgcj conform to the
47560     specifications.
47561
47562   * Janne Blomqvist for contributions to GNU Fortran.
47563
47564   * Hans-J. Boehm for his garbage collector, IA-64 libffi port, and
47565     other Java work.
47566
47567   * Segher Boessenkool for helping maintain the PowerPC port and the
47568     instruction combiner plus various contributions to the middle end.
47569
47570   * Neil Booth for work on cpplib, lang hooks, debug hooks and other
47571     miscellaneous clean-ups.
47572
47573   * Steven Bosscher for integrating the GNU Fortran front end into GCC
47574     and for contributing to the tree-ssa branch.
47575
47576   * Eric Botcazou for fixing middle- and backend bugs left and right.
47577
47578   * Per Bothner for his direction via the steering committee and
47579     various improvements to the infrastructure for supporting new
47580     languages.  Chill front end implementation.  Initial
47581     implementations of cpplib, fix-header, config.guess, libio, and
47582     past C++ library (libg++) maintainer.  Dreaming up, designing and
47583     implementing much of GCJ.
47584
47585   * Devon Bowen helped port GCC to the Tahoe.
47586
47587   * Don Bowman for mips-vxworks contributions.
47588
47589   * James Bowman for the FT32 port.
47590
47591   * Dave Brolley for work on cpplib and Chill.
47592
47593   * Paul Brook for work on the ARM architecture and maintaining GNU
47594     Fortran.
47595
47596   * Robert Brown implemented the support for Encore 32000 systems.
47597
47598   * Christian Bruel for improvements to local store elimination.
47599
47600   * Herman A.J. ten Brugge for various fixes.
47601
47602   * Joerg Brunsmann for Java compiler hacking and help with the GCJ
47603     FAQ.
47604
47605   * Joe Buck for his direction via the steering committee from its
47606     creation to 2013.
47607
47608   * Iain Buclaw for the D frontend.
47609
47610   * Craig Burley for leadership of the G77 Fortran effort.
47611
47612   * Tobias Burnus for contributions to GNU Fortran.
47613
47614   * Stephan Buys for contributing Doxygen notes for libstdc++.
47615
47616   * Paolo Carlini for libstdc++ work: lots of efficiency improvements
47617     to the C++ strings, streambufs and formatted I/O, hard detective
47618     work on the frustrating localization issues, and keeping up with
47619     the problem reports.
47620
47621   * John Carr for his alias work, SPARC hacking, infrastructure
47622     improvements, previous contributions to the steering committee,
47623     loop optimizations, etc.
47624
47625   * Stephane Carrez for 68HC11 and 68HC12 ports.
47626
47627   * Steve Chamberlain for support for the Renesas SH and H8 processors
47628     and the PicoJava processor, and for GCJ config fixes.
47629
47630   * Glenn Chambers for help with the GCJ FAQ.
47631
47632   * John-Marc Chandonia for various libgcj patches.
47633
47634   * Denis Chertykov for contributing and maintaining the AVR port, the
47635     first GCC port for an 8-bit architecture.
47636
47637   * Kito Cheng for his work on the RISC-V port, including bringing up
47638     the test suite and maintenance.
47639
47640   * Scott Christley for his Objective-C contributions.
47641
47642   * Eric Christopher for his Java porting help and clean-ups.
47643
47644   * Branko Cibej for more warning contributions.
47645
47646   * The GNU Classpath project for all of their merged runtime code.
47647
47648   * Nick Clifton for arm, mcore, fr30, v850, m32r, msp430 rx work,
47649     '--help', and other random hacking.
47650
47651   * Michael Cook for libstdc++ cleanup patches to reduce warnings.
47652
47653   * R. Kelley Cook for making GCC buildable from a read-only directory
47654     as well as other miscellaneous build process and documentation
47655     clean-ups.
47656
47657   * Ralf Corsepius for SH testing and minor bug fixing.
47658
47659   * Franc,ois-Xavier Coudert for contributions to GNU Fortran.
47660
47661   * Stan Cox for care and feeding of the x86 port and lots of behind
47662     the scenes hacking.
47663
47664   * Alex Crain provided changes for the 3b1.
47665
47666   * Ian Dall for major improvements to the NS32k port.
47667
47668   * Paul Dale for his work to add uClinux platform support to the m68k
47669     backend.
47670
47671   * Palmer Dabbelt for his work maintaining the RISC-V port.
47672
47673   * Dario Dariol contributed the four varieties of sample programs that
47674     print a copy of their source.
47675
47676   * Russell Davidson for fstream and stringstream fixes in libstdc++.
47677
47678   * Bud Davis for work on the G77 and GNU Fortran compilers.
47679
47680   * Mo DeJong for GCJ and libgcj bug fixes.
47681
47682   * Jerry DeLisle for contributions to GNU Fortran.
47683
47684   * DJ Delorie for the DJGPP port, build and libiberty maintenance,
47685     various bug fixes, and the M32C, MeP, MSP430, and RL78 ports.
47686
47687   * Arnaud Desitter for helping to debug GNU Fortran.
47688
47689   * Gabriel Dos Reis for contributions to G++, contributions and
47690     maintenance of GCC diagnostics infrastructure, libstdc++-v3,
47691     including 'valarray<>', 'complex<>', maintaining the numerics
47692     library (including that pesky '<limits>' :-) and keeping up-to-date
47693     anything to do with numbers.
47694
47695   * Ulrich Drepper for his work on glibc, testing of GCC using glibc,
47696     ISO C99 support, CFG dumping support, etc., plus support of the C++
47697     runtime libraries including for all kinds of C interface issues,
47698     contributing and maintaining 'complex<>', sanity checking and
47699     disbursement, configuration architecture, libio maintenance, and
47700     early math work.
47701
47702   * Franc,ois Dumont for his work on libstdc++-v3, especially
47703     maintaining and improving 'debug-mode' and associative and
47704     unordered containers.
47705
47706   * Zdenek Dvorak for a new loop unroller and various fixes.
47707
47708   * Michael Eager for his work on the Xilinx MicroBlaze port.
47709
47710   * Richard Earnshaw for his ongoing work with the ARM.
47711
47712   * David Edelsohn for his direction via the steering committee,
47713     ongoing work with the RS6000/PowerPC port, help cleaning up Haifa
47714     loop changes, doing the entire AIX port of libstdc++ with his bare
47715     hands, and for ensuring GCC properly keeps working on AIX.
47716
47717   * Kevin Ediger for the floating point formatting of num_put::do_put
47718     in libstdc++.
47719
47720   * Phil Edwards for libstdc++ work including configuration hackery,
47721     documentation maintainer, chief breaker of the web pages, the
47722     occasional iostream bug fix, and work on shared library symbol
47723     versioning.
47724
47725   * Paul Eggert for random hacking all over GCC.
47726
47727   * Mark Elbrecht for various DJGPP improvements, and for libstdc++
47728     configuration support for locales and fstream-related fixes.
47729
47730   * Vadim Egorov for libstdc++ fixes in strings, streambufs, and
47731     iostreams.
47732
47733   * Christian Ehrhardt for dealing with bug reports.
47734
47735   * Ben Elliston for his work to move the Objective-C runtime into its
47736     own subdirectory and for his work on autoconf.
47737
47738   * Revital Eres for work on the PowerPC 750CL port.
47739
47740   * Marc Espie for OpenBSD support.
47741
47742   * Doug Evans for much of the global optimization framework, arc,
47743     m32r, and SPARC work.
47744
47745   * Christopher Faylor for his work on the Cygwin port and for caring
47746     and feeding the gcc.gnu.org box and saving its users tons of spam.
47747
47748   * Fred Fish for BeOS support and Ada fixes.
47749
47750   * Ivan Fontes Garcia for the Portuguese translation of the GCJ FAQ.
47751
47752   * Peter Gerwinski for various bug fixes and the Pascal front end.
47753
47754   * Kaveh R. Ghazi for his direction via the steering committee,
47755     amazing work to make '-W -Wall -W* -Werror' useful, and testing GCC
47756     on a plethora of platforms.  Kaveh extends his gratitude to the
47757     CAIP Center at Rutgers University for providing him with computing
47758     resources to work on Free Software from the late 1980s to 2010.
47759
47760   * John Gilmore for a donation to the FSF earmarked improving GNU
47761     Java.
47762
47763   * Judy Goldberg for c++ contributions.
47764
47765   * Torbjorn Granlund for various fixes and the c-torture testsuite,
47766     multiply- and divide-by-constant optimization, improved long long
47767     support, improved leaf function register allocation, and his
47768     direction via the steering committee.
47769
47770   * Jonny Grant for improvements to 'collect2's' '--help'
47771     documentation.
47772
47773   * Anthony Green for his '-Os' contributions, the moxie port, and Java
47774     front end work.
47775
47776   * Stu Grossman for gdb hacking, allowing GCJ developers to debug Java
47777     code.
47778
47779   * Michael K. Gschwind contributed the port to the PDP-11.
47780
47781   * Richard Biener for his ongoing middle-end contributions and bug
47782     fixes and for release management.
47783
47784   * Ron Guilmette implemented the 'protoize' and 'unprotoize' tools,
47785     the support for DWARF 1 symbolic debugging information, and much of
47786     the support for System V Release 4.  He has also worked heavily on
47787     the Intel 386 and 860 support.
47788
47789   * Sumanth Gundapaneni for contributing the CR16 port.
47790
47791   * Mostafa Hagog for Swing Modulo Scheduling (SMS) and post reload
47792     GCSE.
47793
47794   * Bruno Haible for improvements in the runtime overhead for EH, new
47795     warnings and assorted bug fixes.
47796
47797   * Andrew Haley for his amazing Java compiler and library efforts.
47798
47799   * Chris Hanson assisted in making GCC work on HP-UX for the 9000
47800     series 300.
47801
47802   * Michael Hayes for various thankless work he's done trying to get
47803     the c30/c40 ports functional.  Lots of loop and unroll improvements
47804     and fixes.
47805
47806   * Dara Hazeghi for wading through myriads of target-specific bug
47807     reports.
47808
47809   * Kate Hedstrom for staking the G77 folks with an initial testsuite.
47810
47811   * Richard Henderson for his ongoing SPARC, alpha, ia32, and ia64
47812     work, loop opts, and generally fixing lots of old problems we've
47813     ignored for years, flow rewrite and lots of further stuff,
47814     including reviewing tons of patches.
47815
47816   * Aldy Hernandez for working on the PowerPC port, SIMD support, and
47817     various fixes.
47818
47819   * Nobuyuki Hikichi of Software Research Associates, Tokyo,
47820     contributed the support for the Sony NEWS machine.
47821
47822   * Kazu Hirata for caring and feeding the Renesas H8/300 port and
47823     various fixes.
47824
47825   * Katherine Holcomb for work on GNU Fortran.
47826
47827   * Manfred Hollstein for his ongoing work to keep the m88k alive, lots
47828     of testing and bug fixing, particularly of GCC configury code.
47829
47830   * Steve Holmgren for MachTen patches.
47831
47832   * Mat Hostetter for work on the TILE-Gx and TILEPro ports.
47833
47834   * Jan Hubicka for his x86 port improvements.
47835
47836   * Falk Hueffner for working on C and optimization bug reports.
47837
47838   * Bernardo Innocenti for his m68k work, including merging of ColdFire
47839     improvements and uClinux support.
47840
47841   * Christian Iseli for various bug fixes.
47842
47843   * Kamil Iskra for general m68k hacking.
47844
47845   * Lee Iverson for random fixes and MIPS testing.
47846
47847   * Balaji V. Iyer for Cilk+ development and merging.
47848
47849   * Andreas Jaeger for testing and benchmarking of GCC and various bug
47850     fixes.
47851
47852   * Martin Jambor for his work on inter-procedural optimizations, the
47853     switch conversion pass, and scalar replacement of aggregates.
47854
47855   * Jakub Jelinek for his SPARC work and sibling call optimizations as
47856     well as lots of bug fixes and test cases, and for improving the
47857     Java build system.
47858
47859   * Janis Johnson for ia64 testing and fixes, her quality improvement
47860     sidetracks, and web page maintenance.
47861
47862   * Kean Johnston for SCO OpenServer support and various fixes.
47863
47864   * Tim Josling for the sample language treelang based originally on
47865     Richard Kenner's "toy" language.
47866
47867   * Nicolai Josuttis for additional libstdc++ documentation.
47868
47869   * Klaus Kaempf for his ongoing work to make alpha-vms a viable
47870     target.
47871
47872   * Steven G. Kargl for work on GNU Fortran.
47873
47874   * David Kashtan of SRI adapted GCC to VMS.
47875
47876   * Ryszard Kabatek for many, many libstdc++ bug fixes and
47877     optimizations of strings, especially member functions, and for
47878     auto_ptr fixes.
47879
47880   * Geoffrey Keating for his ongoing work to make the PPC work for
47881     GNU/Linux and his automatic regression tester.
47882
47883   * Brendan Kehoe for his ongoing work with G++ and for a lot of early
47884     work in just about every part of libstdc++.
47885
47886   * Oliver M. Kellogg of Deutsche Aerospace contributed the port to the
47887     MIL-STD-1750A.
47888
47889   * Richard Kenner of the New York University Ultracomputer Research
47890     Laboratory wrote the machine descriptions for the AMD 29000, the
47891     DEC Alpha, the IBM RT PC, and the IBM RS/6000 as well as the
47892     support for instruction attributes.  He also made changes to better
47893     support RISC processors including changes to common subexpression
47894     elimination, strength reduction, function calling sequence
47895     handling, and condition code support, in addition to generalizing
47896     the code for frame pointer elimination and delay slot scheduling.
47897     Richard Kenner was also the head maintainer of GCC for several
47898     years.
47899
47900   * Mumit Khan for various contributions to the Cygwin and Mingw32
47901     ports and maintaining binary releases for Microsoft Windows hosts,
47902     and for massive libstdc++ porting work to Cygwin/Mingw32.
47903
47904   * Robin Kirkham for cpu32 support.
47905
47906   * Mark Klein for PA improvements.
47907
47908   * Thomas Koenig for various bug fixes.
47909
47910   * Bruce Korb for the new and improved fixincludes code.
47911
47912   * Benjamin Kosnik for his G++ work and for leading the libstdc++-v3
47913     effort.
47914
47915   * Maxim Kuvyrkov for contributions to the instruction scheduler, the
47916     Android and m68k/Coldfire ports, and optimizations.
47917
47918   * Charles LaBrec contributed the support for the Integrated Solutions
47919     68020 system.
47920
47921   * Asher Langton and Mike Kumbera for contributing Cray pointer
47922     support to GNU Fortran, and for other GNU Fortran improvements.
47923
47924   * Jeff Law for his direction via the steering committee, coordinating
47925     the entire egcs project and GCC 2.95, rolling out snapshots and
47926     releases, handling merges from GCC2, reviewing tons of patches that
47927     might have fallen through the cracks else, and random but extensive
47928     hacking.
47929
47930   * Walter Lee for work on the TILE-Gx and TILEPro ports.
47931
47932   * Marc Lehmann for his direction via the steering committee and
47933     helping with analysis and improvements of x86 performance.
47934
47935   * Victor Leikehman for work on GNU Fortran.
47936
47937   * Ted Lemon wrote parts of the RTL reader and printer.
47938
47939   * Kriang Lerdsuwanakij for C++ improvements including template as
47940     template parameter support, and many C++ fixes.
47941
47942   * Warren Levy for tremendous work on libgcj (Java Runtime Library)
47943     and random work on the Java front end.
47944
47945   * Alain Lichnewsky ported GCC to the MIPS CPU.
47946
47947   * Oskar Liljeblad for hacking on AWT and his many Java bug reports
47948     and patches.
47949
47950   * Robert Lipe for OpenServer support, new testsuites, testing, etc.
47951
47952   * Chen Liqin for various S+core related fixes/improvement, and for
47953     maintaining the S+core port.
47954
47955   * Martin Liska for his work on identical code folding, the
47956     sanitizers, HSA, general bug fixing and for running automated
47957     regression testing of GCC and reporting numerous bugs.
47958
47959   * Weiwen Liu for testing and various bug fixes.
47960
47961   * Manuel Lo'pez-Iba'n~ez for improving '-Wconversion' and many other
47962     diagnostics fixes and improvements.
47963
47964   * Dave Love for his ongoing work with the Fortran front end and
47965     runtime libraries.
47966
47967   * Martin von Lo"wis for internal consistency checking infrastructure,
47968     various C++ improvements including namespace support, and tons of
47969     assistance with libstdc++/compiler merges.
47970
47971   * H.J. Lu for his previous contributions to the steering committee,
47972     many x86 bug reports, prototype patches, and keeping the GNU/Linux
47973     ports working.
47974
47975   * Greg McGary for random fixes and (someday) bounded pointers.
47976
47977   * Andrew MacLeod for his ongoing work in building a real EH system,
47978     various code generation improvements, work on the global optimizer,
47979     etc.
47980
47981   * Vladimir Makarov for hacking some ugly i960 problems, PowerPC
47982     hacking improvements to compile-time performance, overall knowledge
47983     and direction in the area of instruction scheduling, design and
47984     implementation of the automaton based instruction scheduler and
47985     design and implementation of the integrated and local register
47986     allocators.
47987
47988   * David Malcolm for his work on improving GCC diagnostics, JIT,
47989     self-tests and unit testing.
47990
47991   * Bob Manson for his behind the scenes work on dejagnu.
47992
47993   * John Marino for contributing the DragonFly BSD port.
47994
47995   * Philip Martin for lots of libstdc++ string and vector iterator
47996     fixes and improvements, and string clean up and testsuites.
47997
47998   * Michael Matz for his work on dominance tree discovery, the x86-64
47999     port, link-time optimization framework and general optimization
48000     improvements.
48001
48002   * All of the Mauve project contributors for Java test code.
48003
48004   * Bryce McKinlay for numerous GCJ and libgcj fixes and improvements.
48005
48006   * Adam Megacz for his work on the Microsoft Windows port of GCJ.
48007
48008   * Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS,
48009     powerpc, haifa, ECOFF debug support, and other assorted hacking.
48010
48011   * Jason Merrill for his direction via the steering committee and
48012     leading the G++ effort.
48013
48014   * Martin Michlmayr for testing GCC on several architectures using the
48015     entire Debian archive.
48016
48017   * David Miller for his direction via the steering committee, lots of
48018     SPARC work, improvements in jump.c and interfacing with the Linux
48019     kernel developers.
48020
48021   * Gary Miller ported GCC to Charles River Data Systems machines.
48022
48023   * Alfred Minarik for libstdc++ string and ios bug fixes, and turning
48024     the entire libstdc++ testsuite namespace-compatible.
48025
48026   * Mark Mitchell for his direction via the steering committee,
48027     mountains of C++ work, load/store hoisting out of loops, alias
48028     analysis improvements, ISO C 'restrict' support, and serving as
48029     release manager from 2000 to 2011.
48030
48031   * Alan Modra for various GNU/Linux bits and testing.
48032
48033   * Toon Moene for his direction via the steering committee, Fortran
48034     maintenance, and his ongoing work to make us make Fortran run fast.
48035
48036   * Jason Molenda for major help in the care and feeding of all the
48037     services on the gcc.gnu.org (formerly egcs.cygnus.com)
48038     machine--mail, web services, ftp services, etc etc.  Doing all this
48039     work on scrap paper and the backs of envelopes would have been...
48040     difficult.
48041
48042   * Catherine Moore for fixing various ugly problems we have sent her
48043     way, including the haifa bug which was killing the Alpha & PowerPC
48044     Linux kernels.
48045
48046   * Mike Moreton for his various Java patches.
48047
48048   * David Mosberger-Tang for various Alpha improvements, and for the
48049     initial IA-64 port.
48050
48051   * Stephen Moshier contributed the floating point emulator that
48052     assists in cross-compilation and permits support for floating point
48053     numbers wider than 64 bits and for ISO C99 support.
48054
48055   * Bill Moyer for his behind the scenes work on various issues.
48056
48057   * Philippe De Muyter for his work on the m68k port.
48058
48059   * Joseph S. Myers for his work on the PDP-11 port, format checking
48060     and ISO C99 support, and continuous emphasis on (and contributions
48061     to) documentation.
48062
48063   * Nathan Myers for his work on libstdc++-v3: architecture and
48064     authorship through the first three snapshots, including
48065     implementation of locale infrastructure, string, shadow C headers,
48066     and the initial project documentation (DESIGN, CHECKLIST, and so
48067     forth).  Later, more work on MT-safe string and shadow headers.
48068
48069   * Felix Natter for documentation on porting libstdc++.
48070
48071   * Nathanael Nerode for cleaning up the configuration/build process.
48072
48073   * NeXT, Inc. donated the front end that supports the Objective-C
48074     language.
48075
48076   * Hans-Peter Nilsson for the CRIS and MMIX ports, improvements to the
48077     search engine setup, various documentation fixes and other small
48078     fixes.
48079
48080   * Geoff Noer for his work on getting cygwin native builds working.
48081
48082   * Vegard Nossum for running automated regression testing of GCC and
48083     reporting numerous bugs.
48084
48085   * Diego Novillo for his work on Tree SSA, OpenMP, SPEC performance
48086     tracking web pages, GIMPLE tuples, and assorted fixes.
48087
48088   * David O'Brien for the FreeBSD/alpha, FreeBSD/AMD x86-64,
48089     FreeBSD/ARM, FreeBSD/PowerPC, and FreeBSD/SPARC64 ports and related
48090     infrastructure improvements.
48091
48092   * Alexandre Oliva for various build infrastructure improvements,
48093     scripts and amazing testing work, including keeping libtool issues
48094     sane and happy.
48095
48096   * Stefan Olsson for work on mt_alloc.
48097
48098   * Melissa O'Neill for various NeXT fixes.
48099
48100   * Rainer Orth for random MIPS work, including improvements to GCC's
48101     o32 ABI support, improvements to dejagnu's MIPS support, Java
48102     configuration clean-ups and porting work, and maintaining the IRIX,
48103     Solaris 2, and Tru64 UNIX ports.
48104
48105   * Steven Pemberton for his contribution of 'enquire' which allowed
48106     GCC to determine various properties of the floating point unit and
48107     generate 'float.h' in older versions of GCC.
48108
48109   * Hartmut Penner for work on the s390 port.
48110
48111   * Paul Petersen wrote the machine description for the Alliant FX/8.
48112
48113   * Alexandre Petit-Bianco for implementing much of the Java compiler
48114     and continued Java maintainership.
48115
48116   * Matthias Pfaller for major improvements to the NS32k port.
48117
48118   * Gerald Pfeifer for his direction via the steering committee,
48119     pointing out lots of problems we need to solve, maintenance of the
48120     web pages, and taking care of documentation maintenance in general.
48121
48122   * Marek Polacek for his work on the C front end, the sanitizers and
48123     general bug fixing.
48124
48125   * Andrew Pinski for processing bug reports by the dozen.
48126
48127   * Ovidiu Predescu for his work on the Objective-C front end and
48128     runtime libraries.
48129
48130   * Jerry Quinn for major performance improvements in C++ formatted
48131     I/O.
48132
48133   * Ken Raeburn for various improvements to checker, MIPS ports and
48134     various cleanups in the compiler.
48135
48136   * Rolf W. Rasmussen for hacking on AWT.
48137
48138   * David Reese of Sun Microsystems contributed to the Solaris on
48139     PowerPC port.
48140
48141   * John Regehr for running automated regression testing of GCC and
48142     reporting numerous bugs.
48143
48144   * Volker Reichelt for running automated regression testing of GCC and
48145     reporting numerous bugs and for keeping up with the problem
48146     reports.
48147
48148   * Joern Rennecke for maintaining the sh port, loop, regmove & reload
48149     hacking and developing and maintaining the Epiphany port.
48150
48151   * Loren J. Rittle for improvements to libstdc++-v3 including the
48152     FreeBSD port, threading fixes, thread-related configury changes,
48153     critical threading documentation, and solutions to really tricky
48154     I/O problems, as well as keeping GCC properly working on FreeBSD
48155     and continuous testing.
48156
48157   * Craig Rodrigues for processing tons of bug reports.
48158
48159   * Ola Ro"nnerup for work on mt_alloc.
48160
48161   * Gavin Romig-Koch for lots of behind the scenes MIPS work.
48162
48163   * David Ronis inspired and encouraged Craig to rewrite the G77
48164     documentation in texinfo format by contributing a first pass at a
48165     translation of the old 'g77-0.5.16/f/DOC' file.
48166
48167   * Ken Rose for fixes to GCC's delay slot filling code.
48168
48169   * Ira Rosen for her contributions to the auto-vectorizer.
48170
48171   * Paul Rubin wrote most of the preprocessor.
48172
48173   * Pe'tur Runo'lfsson for major performance improvements in C++
48174     formatted I/O and large file support in C++ filebuf.
48175
48176   * Chip Salzenberg for libstdc++ patches and improvements to locales,
48177     traits, Makefiles, libio, libtool hackery, and "long long" support.
48178
48179   * Juha Sarlin for improvements to the H8 code generator.
48180
48181   * Greg Satz assisted in making GCC work on HP-UX for the 9000 series
48182     300.
48183
48184   * Roger Sayle for improvements to constant folding and GCC's RTL
48185     optimizers as well as for fixing numerous bugs.
48186
48187   * Bradley Schatz for his work on the GCJ FAQ.
48188
48189   * Peter Schauer wrote the code to allow debugging to work on the
48190     Alpha.
48191
48192   * William Schelter did most of the work on the Intel 80386 support.
48193
48194   * Tobias Schlu"ter for work on GNU Fortran.
48195
48196   * Bernd Schmidt for various code generation improvements and major
48197     work in the reload pass, serving as release manager for GCC 2.95.3,
48198     and work on the Blackfin and C6X ports.
48199
48200   * Peter Schmid for constant testing of libstdc++--especially
48201     application testing, going above and beyond what was requested for
48202     the release criteria--and libstdc++ header file tweaks.
48203
48204   * Jason Schroeder for jcf-dump patches.
48205
48206   * Andreas Schwab for his work on the m68k port.
48207
48208   * Lars Segerlund for work on GNU Fortran.
48209
48210   * Dodji Seketeli for numerous C++ bug fixes and debug info
48211     improvements.
48212
48213   * Tim Shen for major work on '<regex>'.
48214
48215   * Joel Sherrill for his direction via the steering committee, RTEMS
48216     contributions and RTEMS testing.
48217
48218   * Nathan Sidwell for many C++ fixes/improvements.
48219
48220   * Jeffrey Siegal for helping RMS with the original design of GCC,
48221     some code which handles the parse tree and RTL data structures,
48222     constant folding and help with the original VAX & m68k ports.
48223
48224   * Kenny Simpson for prompting libstdc++ fixes due to defect reports
48225     from the LWG (thereby keeping GCC in line with updates from the
48226     ISO).
48227
48228   * Franz Sirl for his ongoing work with making the PPC port stable for
48229     GNU/Linux.
48230
48231   * Andrey Slepuhin for assorted AIX hacking.
48232
48233   * Trevor Smigiel for contributing the SPU port.
48234
48235   * Christopher Smith did the port for Convex machines.
48236
48237   * Danny Smith for his major efforts on the Mingw (and Cygwin) ports.
48238     Retired from GCC maintainership August 2010, having mentored two
48239     new maintainers into the role.
48240
48241   * Randy Smith finished the Sun FPA support.
48242
48243   * Ed Smith-Rowland for his continuous work on libstdc++-v3, special
48244     functions, '<random>', and various improvements to C++11 features.
48245
48246   * Scott Snyder for queue, iterator, istream, and string fixes and
48247     libstdc++ testsuite entries.  Also for providing the patch to G77
48248     to add rudimentary support for 'INTEGER*1', 'INTEGER*2', and
48249     'LOGICAL*1'.
48250
48251   * Zdenek Sojka for running automated regression testing of GCC and
48252     reporting numerous bugs.
48253
48254   * Arseny Solokha for running automated regression testing of GCC and
48255     reporting numerous bugs.
48256
48257   * Jayant Sonar for contributing the CR16 port.
48258
48259   * Brad Spencer for contributions to the GLIBCPP_FORCE_NEW technique.
48260
48261   * Richard Stallman, for writing the original GCC and launching the
48262     GNU project.
48263
48264   * Jan Stein of the Chalmers Computer Society provided support for
48265     Genix, as well as part of the 32000 machine description.
48266
48267   * Gerhard Steinmetz for running automated regression testing of GCC
48268     and reporting numerous bugs.
48269
48270   * Nigel Stephens for various mips16 related fixes/improvements.
48271
48272   * Jonathan Stone wrote the machine description for the Pyramid
48273     computer.
48274
48275   * Graham Stott for various infrastructure improvements.
48276
48277   * John Stracke for his Java HTTP protocol fixes.
48278
48279   * Mike Stump for his Elxsi port, G++ contributions over the years and
48280     more recently his vxworks contributions
48281
48282   * Jeff Sturm for Java porting help, bug fixes, and encouragement.
48283
48284   * Zhendong Su for running automated regression testing of GCC and
48285     reporting numerous bugs.
48286
48287   * Chengnian Sun for running automated regression testing of GCC and
48288     reporting numerous bugs.
48289
48290   * Shigeya Suzuki for this fixes for the bsdi platforms.
48291
48292   * Ian Lance Taylor for the Go frontend, the initial mips16 and mips64
48293     support, general configury hacking, fixincludes, etc.
48294
48295   * Holger Teutsch provided the support for the Clipper CPU.
48296
48297   * Gary Thomas for his ongoing work to make the PPC work for
48298     GNU/Linux.
48299
48300   * Paul Thomas for contributions to GNU Fortran.
48301
48302   * Philipp Thomas for random bug fixes throughout the compiler
48303
48304   * Jason Thorpe for thread support in libstdc++ on NetBSD.
48305
48306   * Kresten Krab Thorup wrote the run time support for the Objective-C
48307     language and the fantastic Java bytecode interpreter.
48308
48309   * Michael Tiemann for random bug fixes, the first instruction
48310     scheduler, initial C++ support, function integration, NS32k, SPARC
48311     and M88k machine description work, delay slot scheduling.
48312
48313   * Andreas Tobler for his work porting libgcj to Darwin.
48314
48315   * Teemu Torma for thread safe exception handling support.
48316
48317   * Leonard Tower wrote parts of the parser, RTL generator, and RTL
48318     definitions, and of the VAX machine description.
48319
48320   * Daniel Towner and Hariharan Sandanagobalane contributed and
48321     maintain the picoChip port.
48322
48323   * Tom Tromey for internationalization support and for his many Java
48324     contributions and libgcj maintainership.
48325
48326   * Lassi Tuura for improvements to config.guess to determine HP
48327     processor types.
48328
48329   * Petter Urkedal for libstdc++ CXXFLAGS, math, and algorithms fixes.
48330
48331   * Andy Vaught for the design and initial implementation of the GNU
48332     Fortran front end.
48333
48334   * Brent Verner for work with the libstdc++ cshadow files and their
48335     associated configure steps.
48336
48337   * Todd Vierling for contributions for NetBSD ports.
48338
48339   * Andrew Waterman for contributing the RISC-V port, as well as
48340     maintaining it.
48341
48342   * Jonathan Wakely for contributing libstdc++ Doxygen notes and XHTML
48343     guidance and maintaining libstdc++.
48344
48345   * Dean Wakerley for converting the install documentation from HTML to
48346     texinfo in time for GCC 3.0.
48347
48348   * Krister Walfridsson for random bug fixes.
48349
48350   * Feng Wang for contributions to GNU Fortran.
48351
48352   * Stephen M. Webb for time and effort on making libstdc++ shadow
48353     files work with the tricky Solaris 8+ headers, and for pushing the
48354     build-time header tree.  Also, for starting and driving the
48355     '<regex>' effort.
48356
48357   * John Wehle for various improvements for the x86 code generator,
48358     related infrastructure improvements to help x86 code generation,
48359     value range propagation and other work, WE32k port.
48360
48361   * Ulrich Weigand for work on the s390 port.
48362
48363   * Janus Weil for contributions to GNU Fortran.
48364
48365   * Zack Weinberg for major work on cpplib and various other bug fixes.
48366
48367   * Matt Welsh for help with Linux Threads support in GCJ.
48368
48369   * Urban Widmark for help fixing java.io.
48370
48371   * Mark Wielaard for new Java library code and his work integrating
48372     with Classpath.
48373
48374   * Dale Wiles helped port GCC to the Tahoe.
48375
48376   * Bob Wilson from Tensilica, Inc. for the Xtensa port.
48377
48378   * Jim Wilson for his direction via the steering committee, tackling
48379     hard problems in various places that nobody else wanted to work on,
48380     strength reduction and other loop optimizations.
48381
48382   * Paul Woegerer and Tal Agmon for the CRX port.
48383
48384   * Carlo Wood for various fixes.
48385
48386   * Tom Wood for work on the m88k port.
48387
48388   * Chung-Ju Wu for his work on the Andes NDS32 port.
48389
48390   * Canqun Yang for work on GNU Fortran.
48391
48392   * Masanobu Yuhara of Fujitsu Laboratories implemented the machine
48393     description for the Tron architecture (specifically, the Gmicro).
48394
48395   * Kevin Zachmann helped port GCC to the Tahoe.
48396
48397   * Ayal Zaks for Swing Modulo Scheduling (SMS).
48398
48399   * Qirun Zhang for running automated regression testing of GCC and
48400     reporting numerous bugs.
48401
48402   * Xiaoqiang Zhang for work on GNU Fortran.
48403
48404   * Gilles Zunino for help porting Java to Irix.
48405
48406 The following people are recognized for their contributions to GNAT,
48407the Ada front end of GCC:
48408   * Bernard Banner
48409
48410   * Romain Berrendonner
48411
48412   * Geert Bosch
48413
48414   * Emmanuel Briot
48415
48416   * Joel Brobecker
48417
48418   * Ben Brosgol
48419
48420   * Vincent Celier
48421
48422   * Arnaud Charlet
48423
48424   * Chien Chieng
48425
48426   * Cyrille Comar
48427
48428   * Cyrille Crozes
48429
48430   * Robert Dewar
48431
48432   * Gary Dismukes
48433
48434   * Robert Duff
48435
48436   * Ed Falis
48437
48438   * Ramon Fernandez
48439
48440   * Sam Figueroa
48441
48442   * Vasiliy Fofanov
48443
48444   * Michael Friess
48445
48446   * Franco Gasperoni
48447
48448   * Ted Giering
48449
48450   * Matthew Gingell
48451
48452   * Laurent Guerby
48453
48454   * Jerome Guitton
48455
48456   * Olivier Hainque
48457
48458   * Jerome Hugues
48459
48460   * Hristian Kirtchev
48461
48462   * Jerome Lambourg
48463
48464   * Bruno Leclerc
48465
48466   * Albert Lee
48467
48468   * Sean McNeil
48469
48470   * Javier Miranda
48471
48472   * Laurent Nana
48473
48474   * Pascal Obry
48475
48476   * Dong-Ik Oh
48477
48478   * Laurent Pautet
48479
48480   * Brett Porter
48481
48482   * Thomas Quinot
48483
48484   * Nicolas Roche
48485
48486   * Pat Rogers
48487
48488   * Jose Ruiz
48489
48490   * Douglas Rupp
48491
48492   * Sergey Rybin
48493
48494   * Gail Schenker
48495
48496   * Ed Schonberg
48497
48498   * Nicolas Setton
48499
48500   * Samuel Tardieu
48501
48502 The following people are recognized for their contributions of new
48503features, bug reports, testing and integration of classpath/libgcj for
48504GCC version 4.1:
48505   * Lillian Angel for 'JTree' implementation and lots Free Swing
48506     additions and bug fixes.
48507
48508   * Wolfgang Baer for 'GapContent' bug fixes.
48509
48510   * Anthony Balkissoon for 'JList', Free Swing 1.5 updates and mouse
48511     event fixes, lots of Free Swing work including 'JTable' editing.
48512
48513   * Stuart Ballard for RMI constant fixes.
48514
48515   * Goffredo Baroncelli for 'HTTPURLConnection' fixes.
48516
48517   * Gary Benson for 'MessageFormat' fixes.
48518
48519   * Daniel Bonniot for 'Serialization' fixes.
48520
48521   * Chris Burdess for lots of gnu.xml and http protocol fixes, 'StAX'
48522     and 'DOM xml:id' support.
48523
48524   * Ka-Hing Cheung for 'TreePath' and 'TreeSelection' fixes.
48525
48526   * Archie Cobbs for build fixes, VM interface updates,
48527     'URLClassLoader' updates.
48528
48529   * Kelley Cook for build fixes.
48530
48531   * Martin Cordova for Suggestions for better 'SocketTimeoutException'.
48532
48533   * David Daney for 'BitSet' bug fixes, 'HttpURLConnection' rewrite and
48534     improvements.
48535
48536   * Thomas Fitzsimmons for lots of upgrades to the gtk+ AWT and Cairo
48537     2D support.  Lots of imageio framework additions, lots of AWT and
48538     Free Swing bug fixes.
48539
48540   * Jeroen Frijters for 'ClassLoader' and nio cleanups, serialization
48541     fixes, better 'Proxy' support, bug fixes and IKVM integration.
48542
48543   * Santiago Gala for 'AccessControlContext' fixes.
48544
48545   * Nicolas Geoffray for 'VMClassLoader' and 'AccessController'
48546     improvements.
48547
48548   * David Gilbert for 'basic' and 'metal' icon and plaf support and
48549     lots of documenting, Lots of Free Swing and metal theme additions.
48550     'MetalIconFactory' implementation.
48551
48552   * Anthony Green for 'MIDI' framework, 'ALSA' and 'DSSI' providers.
48553
48554   * Andrew Haley for 'Serialization' and 'URLClassLoader' fixes, gcj
48555     build speedups.
48556
48557   * Kim Ho for 'JFileChooser' implementation.
48558
48559   * Andrew John Hughes for 'Locale' and net fixes, URI RFC2986 updates,
48560     'Serialization' fixes, 'Properties' XML support and generic branch
48561     work, VMIntegration guide update.
48562
48563   * Bastiaan Huisman for 'TimeZone' bug fixing.
48564
48565   * Andreas Jaeger for mprec updates.
48566
48567   * Paul Jenner for better '-Werror' support.
48568
48569   * Ito Kazumitsu for 'NetworkInterface' implementation and updates.
48570
48571   * Roman Kennke for 'BoxLayout', 'GrayFilter' and 'SplitPane', plus
48572     bug fixes all over.  Lots of Free Swing work including styled text.
48573
48574   * Simon Kitching for 'String' cleanups and optimization suggestions.
48575
48576   * Michael Koch for configuration fixes, 'Locale' updates, bug and
48577     build fixes.
48578
48579   * Guilhem Lavaux for configuration, thread and channel fixes and
48580     Kaffe integration.  JCL native 'Pointer' updates.  Logger bug
48581     fixes.
48582
48583   * David Lichteblau for JCL support library global/local reference
48584     cleanups.
48585
48586   * Aaron Luchko for JDWP updates and documentation fixes.
48587
48588   * Ziga Mahkovec for 'Graphics2D' upgraded to Cairo 0.5 and new regex
48589     features.
48590
48591   * Sven de Marothy for BMP imageio support, CSS and 'TextLayout'
48592     fixes.  'GtkImage' rewrite, 2D, awt, free swing and date/time fixes
48593     and implementing the Qt4 peers.
48594
48595   * Casey Marshall for crypto algorithm fixes, 'FileChannel' lock,
48596     'SystemLogger' and 'FileHandler' rotate implementations, NIO
48597     'FileChannel.map' support, security and policy updates.
48598
48599   * Bryce McKinlay for RMI work.
48600
48601   * Audrius Meskauskas for lots of Free Corba, RMI and HTML work plus
48602     testing and documenting.
48603
48604   * Kalle Olavi Niemitalo for build fixes.
48605
48606   * Rainer Orth for build fixes.
48607
48608   * Andrew Overholt for 'File' locking fixes.
48609
48610   * Ingo Proetel for 'Image', 'Logger' and 'URLClassLoader' updates.
48611
48612   * Olga Rodimina for 'MenuSelectionManager' implementation.
48613
48614   * Jan Roehrich for 'BasicTreeUI' and 'JTree' fixes.
48615
48616   * Julian Scheid for documentation updates and gjdoc support.
48617
48618   * Christian Schlichtherle for zip fixes and cleanups.
48619
48620   * Robert Schuster for documentation updates and beans fixes,
48621     'TreeNode' enumerations and 'ActionCommand' and various fixes, XML
48622     and URL, AWT and Free Swing bug fixes.
48623
48624   * Keith Seitz for lots of JDWP work.
48625
48626   * Christian Thalinger for 64-bit cleanups, Configuration and VM
48627     interface fixes and 'CACAO' integration, 'fdlibm' updates.
48628
48629   * Gael Thomas for 'VMClassLoader' boot packages support suggestions.
48630
48631   * Andreas Tobler for Darwin and Solaris testing and fixing, 'Qt4'
48632     support for Darwin/OS X, 'Graphics2D' support, 'gtk+' updates.
48633
48634   * Dalibor Topic for better 'DEBUG' support, build cleanups and Kaffe
48635     integration.  'Qt4' build infrastructure, 'SHA1PRNG' and
48636     'GdkPixbugDecoder' updates.
48637
48638   * Tom Tromey for Eclipse integration, generics work, lots of bug
48639     fixes and gcj integration including coordinating The Big Merge.
48640
48641   * Mark Wielaard for bug fixes, packaging and release management,
48642     'Clipboard' implementation, system call interrupts and network
48643     timeouts and 'GdkPixpufDecoder' fixes.
48644
48645 In addition to the above, all of which also contributed time and energy
48646in testing GCC, we would like to thank the following for their
48647contributions to testing:
48648
48649   * Michael Abd-El-Malek
48650
48651   * Thomas Arend
48652
48653   * Bonzo Armstrong
48654
48655   * Steven Ashe
48656
48657   * Chris Baldwin
48658
48659   * David Billinghurst
48660
48661   * Jim Blandy
48662
48663   * Stephane Bortzmeyer
48664
48665   * Horst von Brand
48666
48667   * Frank Braun
48668
48669   * Rodney Brown
48670
48671   * Sidney Cadot
48672
48673   * Bradford Castalia
48674
48675   * Robert Clark
48676
48677   * Jonathan Corbet
48678
48679   * Ralph Doncaster
48680
48681   * Richard Emberson
48682
48683   * Levente Farkas
48684
48685   * Graham Fawcett
48686
48687   * Mark Fernyhough
48688
48689   * Robert A. French
48690
48691   * Jo"rgen Freyh
48692
48693   * Mark K. Gardner
48694
48695   * Charles-Antoine Gauthier
48696
48697   * Yung Shing Gene
48698
48699   * David Gilbert
48700
48701   * Simon Gornall
48702
48703   * Fred Gray
48704
48705   * John Griffin
48706
48707   * Patrik Hagglund
48708
48709   * Phil Hargett
48710
48711   * Amancio Hasty
48712
48713   * Takafumi Hayashi
48714
48715   * Bryan W. Headley
48716
48717   * Kevin B. Hendricks
48718
48719   * Joep Jansen
48720
48721   * Christian Joensson
48722
48723   * Michel Kern
48724
48725   * David Kidd
48726
48727   * Tobias Kuipers
48728
48729   * Anand Krishnaswamy
48730
48731   * A. O. V. Le Blanc
48732
48733   * llewelly
48734
48735   * Damon Love
48736
48737   * Brad Lucier
48738
48739   * Matthias Klose
48740
48741   * Martin Knoblauch
48742
48743   * Rick Lutowski
48744
48745   * Jesse Macnish
48746
48747   * Stefan Morrell
48748
48749   * Anon A. Mous
48750
48751   * Matthias Mueller
48752
48753   * Pekka Nikander
48754
48755   * Rick Niles
48756
48757   * Jon Olson
48758
48759   * Magnus Persson
48760
48761   * Chris Pollard
48762
48763   * Richard Polton
48764
48765   * Derk Reefman
48766
48767   * David Rees
48768
48769   * Paul Reilly
48770
48771   * Tom Reilly
48772
48773   * Torsten Rueger
48774
48775   * Danny Sadinoff
48776
48777   * Marc Schifer
48778
48779   * Erik Schnetter
48780
48781   * Wayne K. Schroll
48782
48783   * David Schuler
48784
48785   * Vin Shelton
48786
48787   * Tim Souder
48788
48789   * Adam Sulmicki
48790
48791   * Bill Thorson
48792
48793   * George Talbot
48794
48795   * Pedro A. M. Vazquez
48796
48797   * Gregory Warnes
48798
48799   * Ian Watson
48800
48801   * David E. Young
48802
48803   * And many others
48804
48805 And finally we'd like to thank everyone who uses the compiler, provides
48806feedback and generally reminds us why we're doing this work in the first
48807place.
48808
48809
48810File: gccint.info,  Node: Option Index,  Next: Concept Index,  Prev: Contributors,  Up: Top
48811
48812Option Index
48813************
48814
48815GCC's command line options are indexed here without any initial '-' or
48816'--'.  Where an option has both positive and negative forms (such as
48817'-fOPTION' and '-fno-OPTION'), relevant entries in the manual are
48818indexed under the most appropriate form; it may sometimes be useful to
48819look up both forms.
48820
48821�[index�]
48822* Menu:
48823
48824* fltrans:                               Internal flags.       (line 18)
48825* fltrans-output-list:                   Internal flags.       (line 23)
48826* fresolution:                           Internal flags.       (line 27)
48827* fwpa:                                  Internal flags.       (line  9)
48828* msoft-float:                           Soft float library routines.
48829                                                               (line  6)
48830
48831
48832File: gccint.info,  Node: Concept Index,  Prev: Option Index,  Up: Top
48833
48834Concept Index
48835*************
48836
48837�[index�]
48838* Menu:
48839
48840* '!' in constraint:                     Multi-Alternative.  (line   48)
48841* '#' in constraint:                     Modifiers.          (line   78)
48842* '#' in template:                       Output Template.    (line   66)
48843* #pragma:                               Misc.               (line  420)
48844* '$' in constraint:                     Multi-Alternative.  (line   57)
48845* '%' in constraint:                     Modifiers.          (line   52)
48846* % in GTY option:                       GTY Options.        (line   18)
48847* '%' in template:                       Output Template.    (line    6)
48848* '&' in constraint:                     Modifiers.          (line   25)
48849* (gimple:                               Logical Operators.  (line  169)
48850* (gimple <1>:                           Logical Operators.  (line  173)
48851* (gimple <2>:                           Logical Operators.  (line  177)
48852* (gimple_stmt_iterator:                 GIMPLE API.         (line   30)
48853* (nil):                                 RTL Objects.        (line   73)
48854* '*' in constraint:                     Modifiers.          (line   83)
48855* '*' in template:                       Output Statement.   (line   29)
48856* *gimple_build_asm_vec:                 'GIMPLE_ASM'.       (line    6)
48857* *gimple_build_assign:                  'GIMPLE_ASSIGN'.    (line    6)
48858* *gimple_build_assign <1>:              'GIMPLE_ASSIGN'.    (line   18)
48859* *gimple_build_assign <2>:              'GIMPLE_ASSIGN'.    (line   29)
48860* *gimple_build_assign <3>:              'GIMPLE_ASSIGN'.    (line   35)
48861* *gimple_build_bind:                    'GIMPLE_BIND'.      (line    6)
48862* *gimple_build_call:                    'GIMPLE_CALL'.      (line    6)
48863* *gimple_build_call_from_tree:          'GIMPLE_CALL'.      (line   15)
48864* *gimple_build_call_vec:                'GIMPLE_CALL'.      (line   25)
48865* *gimple_build_catch:                   'GIMPLE_CATCH'.     (line    6)
48866* *gimple_build_cond:                    'GIMPLE_COND'.      (line    6)
48867* *gimple_build_cond_from_tree:          'GIMPLE_COND'.      (line   14)
48868* *gimple_build_debug_bind:              'GIMPLE_DEBUG'.     (line    6)
48869* *gimple_build_eh_filter:               'GIMPLE_EH_FILTER'. (line    6)
48870* *gimple_build_goto:                    'GIMPLE_GOTO'.      (line    6)
48871* *gimple_build_label:                   'GIMPLE_LABEL'.     (line    6)
48872* *gimple_build_omp_atomic_load:         'GIMPLE_OMP_ATOMIC_LOAD'.
48873                                                             (line    6)
48874* *gimple_build_omp_atomic_store:        'GIMPLE_OMP_ATOMIC_STORE'.
48875                                                             (line    6)
48876* *gimple_build_omp_continue:            'GIMPLE_OMP_CONTINUE'.
48877                                                             (line    6)
48878* *gimple_build_omp_critical:            'GIMPLE_OMP_CRITICAL'.
48879                                                             (line    6)
48880* *gimple_build_omp_for:                 'GIMPLE_OMP_FOR'.   (line    6)
48881* *gimple_build_omp_parallel:            'GIMPLE_OMP_PARALLEL'.
48882                                                             (line    6)
48883* *gimple_build_omp_sections:            'GIMPLE_OMP_SECTIONS'.
48884                                                             (line    6)
48885* *gimple_build_omp_single:              'GIMPLE_OMP_SINGLE'.
48886                                                             (line    6)
48887* *gimple_build_resx:                    'GIMPLE_RESX'.      (line    6)
48888* *gimple_build_return:                  'GIMPLE_RETURN'.    (line    6)
48889* *gimple_build_switch:                  'GIMPLE_SWITCH'.    (line    6)
48890* *gimple_build_try:                     'GIMPLE_TRY'.       (line    6)
48891* '+' in constraint:                     Modifiers.          (line   12)
48892* '-fsection-anchors':                   Special Accessors.  (line  117)
48893* '-fsection-anchors' <1>:               Anchored Addresses. (line    6)
48894* '/c' in RTL dump:                      Flags.              (line  230)
48895* '/f' in RTL dump:                      Flags.              (line  238)
48896* '/i' in RTL dump:                      Flags.              (line  283)
48897* '/j' in RTL dump:                      Flags.              (line  295)
48898* '/s' in RTL dump:                      Flags.              (line  254)
48899* '/u' in RTL dump:                      Flags.              (line  307)
48900* '/v' in RTL dump:                      Flags.              (line  339)
48901* '0' in constraint:                     Simple Constraints. (line  128)
48902* '<' in constraint:                     Simple Constraints. (line   47)
48903* '=' in constraint:                     Modifiers.          (line    8)
48904* '>' in constraint:                     Simple Constraints. (line   59)
48905* '?' in constraint:                     Multi-Alternative.  (line   42)
48906* '@' in instruction pattern names:      Parameterized Names.
48907                                                             (line    6)
48908* \:                                     Output Template.    (line   46)
48909* '^' in constraint:                     Multi-Alternative.  (line   53)
48910* __absvdi2:                             Integer library routines.
48911                                                             (line  106)
48912* __absvsi2:                             Integer library routines.
48913                                                             (line  105)
48914* __addda3:                              Fixed-point fractional library routines.
48915                                                             (line   44)
48916* __adddf3:                              Soft float library routines.
48917                                                             (line   22)
48918* __adddq3:                              Fixed-point fractional library routines.
48919                                                             (line   31)
48920* __addha3:                              Fixed-point fractional library routines.
48921                                                             (line   41)
48922* __addhq3:                              Fixed-point fractional library routines.
48923                                                             (line   29)
48924* __addqq3:                              Fixed-point fractional library routines.
48925                                                             (line   27)
48926* __addsa3:                              Fixed-point fractional library routines.
48927                                                             (line   43)
48928* __addsf3:                              Soft float library routines.
48929                                                             (line   21)
48930* __addsq3:                              Fixed-point fractional library routines.
48931                                                             (line   30)
48932* __addta3:                              Fixed-point fractional library routines.
48933                                                             (line   45)
48934* __addtf3:                              Soft float library routines.
48935                                                             (line   23)
48936* __adduda3:                             Fixed-point fractional library routines.
48937                                                             (line   51)
48938* __addudq3:                             Fixed-point fractional library routines.
48939                                                             (line   39)
48940* __adduha3:                             Fixed-point fractional library routines.
48941                                                             (line   47)
48942* __adduhq3:                             Fixed-point fractional library routines.
48943                                                             (line   35)
48944* __adduqq3:                             Fixed-point fractional library routines.
48945                                                             (line   33)
48946* __addusa3:                             Fixed-point fractional library routines.
48947                                                             (line   49)
48948* __addusq3:                             Fixed-point fractional library routines.
48949                                                             (line   37)
48950* __adduta3:                             Fixed-point fractional library routines.
48951                                                             (line   53)
48952* __addvdi3:                             Integer library routines.
48953                                                             (line  110)
48954* __addvsi3:                             Integer library routines.
48955                                                             (line  109)
48956* __addxf3:                              Soft float library routines.
48957                                                             (line   25)
48958* __ashlda3:                             Fixed-point fractional library routines.
48959                                                             (line  350)
48960* __ashldi3:                             Integer library routines.
48961                                                             (line   13)
48962* __ashldq3:                             Fixed-point fractional library routines.
48963                                                             (line  338)
48964* __ashlha3:                             Fixed-point fractional library routines.
48965                                                             (line  348)
48966* __ashlhq3:                             Fixed-point fractional library routines.
48967                                                             (line  336)
48968* __ashlqq3:                             Fixed-point fractional library routines.
48969                                                             (line  335)
48970* __ashlsa3:                             Fixed-point fractional library routines.
48971                                                             (line  349)
48972* __ashlsi3:                             Integer library routines.
48973                                                             (line   12)
48974* __ashlsq3:                             Fixed-point fractional library routines.
48975                                                             (line  337)
48976* __ashlta3:                             Fixed-point fractional library routines.
48977                                                             (line  351)
48978* __ashlti3:                             Integer library routines.
48979                                                             (line   14)
48980* __ashluda3:                            Fixed-point fractional library routines.
48981                                                             (line  357)
48982* __ashludq3:                            Fixed-point fractional library routines.
48983                                                             (line  346)
48984* __ashluha3:                            Fixed-point fractional library routines.
48985                                                             (line  353)
48986* __ashluhq3:                            Fixed-point fractional library routines.
48987                                                             (line  342)
48988* __ashluqq3:                            Fixed-point fractional library routines.
48989                                                             (line  340)
48990* __ashlusa3:                            Fixed-point fractional library routines.
48991                                                             (line  355)
48992* __ashlusq3:                            Fixed-point fractional library routines.
48993                                                             (line  344)
48994* __ashluta3:                            Fixed-point fractional library routines.
48995                                                             (line  359)
48996* __ashrda3:                             Fixed-point fractional library routines.
48997                                                             (line  370)
48998* __ashrdi3:                             Integer library routines.
48999                                                             (line   18)
49000* __ashrdq3:                             Fixed-point fractional library routines.
49001                                                             (line  366)
49002* __ashrha3:                             Fixed-point fractional library routines.
49003                                                             (line  368)
49004* __ashrhq3:                             Fixed-point fractional library routines.
49005                                                             (line  364)
49006* __ashrqq3:                             Fixed-point fractional library routines.
49007                                                             (line  363)
49008* __ashrsa3:                             Fixed-point fractional library routines.
49009                                                             (line  369)
49010* __ashrsi3:                             Integer library routines.
49011                                                             (line   17)
49012* __ashrsq3:                             Fixed-point fractional library routines.
49013                                                             (line  365)
49014* __ashrta3:                             Fixed-point fractional library routines.
49015                                                             (line  371)
49016* __ashrti3:                             Integer library routines.
49017                                                             (line   19)
49018* __bid_adddd3:                          Decimal float library routines.
49019                                                             (line   23)
49020* __bid_addsd3:                          Decimal float library routines.
49021                                                             (line   19)
49022* __bid_addtd3:                          Decimal float library routines.
49023                                                             (line   27)
49024* __bid_divdd3:                          Decimal float library routines.
49025                                                             (line   66)
49026* __bid_divsd3:                          Decimal float library routines.
49027                                                             (line   62)
49028* __bid_divtd3:                          Decimal float library routines.
49029                                                             (line   70)
49030* __bid_eqdd2:                           Decimal float library routines.
49031                                                             (line  258)
49032* __bid_eqsd2:                           Decimal float library routines.
49033                                                             (line  256)
49034* __bid_eqtd2:                           Decimal float library routines.
49035                                                             (line  260)
49036* __bid_extendddtd2:                     Decimal float library routines.
49037                                                             (line   91)
49038* __bid_extendddtf:                      Decimal float library routines.
49039                                                             (line  139)
49040* __bid_extendddxf:                      Decimal float library routines.
49041                                                             (line  133)
49042* __bid_extenddfdd:                      Decimal float library routines.
49043                                                             (line  146)
49044* __bid_extenddftd:                      Decimal float library routines.
49045                                                             (line  106)
49046* __bid_extendsddd2:                     Decimal float library routines.
49047                                                             (line   87)
49048* __bid_extendsddf:                      Decimal float library routines.
49049                                                             (line  127)
49050* __bid_extendsdtd2:                     Decimal float library routines.
49051                                                             (line   89)
49052* __bid_extendsdtf:                      Decimal float library routines.
49053                                                             (line  137)
49054* __bid_extendsdxf:                      Decimal float library routines.
49055                                                             (line  131)
49056* __bid_extendsfdd:                      Decimal float library routines.
49057                                                             (line  102)
49058* __bid_extendsfsd:                      Decimal float library routines.
49059                                                             (line  144)
49060* __bid_extendsftd:                      Decimal float library routines.
49061                                                             (line  104)
49062* __bid_extendtftd:                      Decimal float library routines.
49063                                                             (line  148)
49064* __bid_extendxftd:                      Decimal float library routines.
49065                                                             (line  108)
49066* __bid_fixdddi:                         Decimal float library routines.
49067                                                             (line  169)
49068* __bid_fixddsi:                         Decimal float library routines.
49069                                                             (line  161)
49070* __bid_fixsddi:                         Decimal float library routines.
49071                                                             (line  167)
49072* __bid_fixsdsi:                         Decimal float library routines.
49073                                                             (line  159)
49074* __bid_fixtddi:                         Decimal float library routines.
49075                                                             (line  171)
49076* __bid_fixtdsi:                         Decimal float library routines.
49077                                                             (line  163)
49078* __bid_fixunsdddi:                      Decimal float library routines.
49079                                                             (line  186)
49080* __bid_fixunsddsi:                      Decimal float library routines.
49081                                                             (line  177)
49082* __bid_fixunssddi:                      Decimal float library routines.
49083                                                             (line  184)
49084* __bid_fixunssdsi:                      Decimal float library routines.
49085                                                             (line  175)
49086* __bid_fixunstddi:                      Decimal float library routines.
49087                                                             (line  188)
49088* __bid_fixunstdsi:                      Decimal float library routines.
49089                                                             (line  179)
49090* __bid_floatdidd:                       Decimal float library routines.
49091                                                             (line  204)
49092* __bid_floatdisd:                       Decimal float library routines.
49093                                                             (line  202)
49094* __bid_floatditd:                       Decimal float library routines.
49095                                                             (line  206)
49096* __bid_floatsidd:                       Decimal float library routines.
49097                                                             (line  195)
49098* __bid_floatsisd:                       Decimal float library routines.
49099                                                             (line  193)
49100* __bid_floatsitd:                       Decimal float library routines.
49101                                                             (line  197)
49102* __bid_floatunsdidd:                    Decimal float library routines.
49103                                                             (line  222)
49104* __bid_floatunsdisd:                    Decimal float library routines.
49105                                                             (line  220)
49106* __bid_floatunsditd:                    Decimal float library routines.
49107                                                             (line  224)
49108* __bid_floatunssidd:                    Decimal float library routines.
49109                                                             (line  213)
49110* __bid_floatunssisd:                    Decimal float library routines.
49111                                                             (line  211)
49112* __bid_floatunssitd:                    Decimal float library routines.
49113                                                             (line  215)
49114* __bid_gedd2:                           Decimal float library routines.
49115                                                             (line  276)
49116* __bid_gesd2:                           Decimal float library routines.
49117                                                             (line  274)
49118* __bid_getd2:                           Decimal float library routines.
49119                                                             (line  278)
49120* __bid_gtdd2:                           Decimal float library routines.
49121                                                             (line  303)
49122* __bid_gtsd2:                           Decimal float library routines.
49123                                                             (line  301)
49124* __bid_gttd2:                           Decimal float library routines.
49125                                                             (line  305)
49126* __bid_ledd2:                           Decimal float library routines.
49127                                                             (line  294)
49128* __bid_lesd2:                           Decimal float library routines.
49129                                                             (line  292)
49130* __bid_letd2:                           Decimal float library routines.
49131                                                             (line  296)
49132* __bid_ltdd2:                           Decimal float library routines.
49133                                                             (line  285)
49134* __bid_ltsd2:                           Decimal float library routines.
49135                                                             (line  283)
49136* __bid_lttd2:                           Decimal float library routines.
49137                                                             (line  287)
49138* __bid_muldd3:                          Decimal float library routines.
49139                                                             (line   52)
49140* __bid_mulsd3:                          Decimal float library routines.
49141                                                             (line   48)
49142* __bid_multd3:                          Decimal float library routines.
49143                                                             (line   56)
49144* __bid_nedd2:                           Decimal float library routines.
49145                                                             (line  267)
49146* __bid_negdd2:                          Decimal float library routines.
49147                                                             (line   77)
49148* __bid_negsd2:                          Decimal float library routines.
49149                                                             (line   75)
49150* __bid_negtd2:                          Decimal float library routines.
49151                                                             (line   79)
49152* __bid_nesd2:                           Decimal float library routines.
49153                                                             (line  265)
49154* __bid_netd2:                           Decimal float library routines.
49155                                                             (line  269)
49156* __bid_subdd3:                          Decimal float library routines.
49157                                                             (line   37)
49158* __bid_subsd3:                          Decimal float library routines.
49159                                                             (line   33)
49160* __bid_subtd3:                          Decimal float library routines.
49161                                                             (line   41)
49162* __bid_truncdddf:                       Decimal float library routines.
49163                                                             (line  152)
49164* __bid_truncddsd2:                      Decimal float library routines.
49165                                                             (line   93)
49166* __bid_truncddsf:                       Decimal float library routines.
49167                                                             (line  123)
49168* __bid_truncdfsd:                       Decimal float library routines.
49169                                                             (line  110)
49170* __bid_truncsdsf:                       Decimal float library routines.
49171                                                             (line  150)
49172* __bid_trunctddd2:                      Decimal float library routines.
49173                                                             (line   97)
49174* __bid_trunctddf:                       Decimal float library routines.
49175                                                             (line  129)
49176* __bid_trunctdsd2:                      Decimal float library routines.
49177                                                             (line   95)
49178* __bid_trunctdsf:                       Decimal float library routines.
49179                                                             (line  125)
49180* __bid_trunctdtf:                       Decimal float library routines.
49181                                                             (line  154)
49182* __bid_trunctdxf:                       Decimal float library routines.
49183                                                             (line  135)
49184* __bid_trunctfdd:                       Decimal float library routines.
49185                                                             (line  118)
49186* __bid_trunctfsd:                       Decimal float library routines.
49187                                                             (line  114)
49188* __bid_truncxfdd:                       Decimal float library routines.
49189                                                             (line  116)
49190* __bid_truncxfsd:                       Decimal float library routines.
49191                                                             (line  112)
49192* __bid_unorddd2:                        Decimal float library routines.
49193                                                             (line  234)
49194* __bid_unordsd2:                        Decimal float library routines.
49195                                                             (line  232)
49196* __bid_unordtd2:                        Decimal float library routines.
49197                                                             (line  236)
49198* __bswapdi2:                            Integer library routines.
49199                                                             (line  161)
49200* __bswapsi2:                            Integer library routines.
49201                                                             (line  160)
49202* __builtin_classify_type:               Varargs.            (line   48)
49203* __builtin_next_arg:                    Varargs.            (line   39)
49204* __builtin_saveregs:                    Varargs.            (line   22)
49205* __clear_cache:                         Miscellaneous routines.
49206                                                             (line    9)
49207* __clzdi2:                              Integer library routines.
49208                                                             (line  130)
49209* __clzsi2:                              Integer library routines.
49210                                                             (line  129)
49211* __clzti2:                              Integer library routines.
49212                                                             (line  131)
49213* __cmpda2:                              Fixed-point fractional library routines.
49214                                                             (line  450)
49215* __cmpdf2:                              Soft float library routines.
49216                                                             (line  163)
49217* __cmpdi2:                              Integer library routines.
49218                                                             (line   86)
49219* __cmpdq2:                              Fixed-point fractional library routines.
49220                                                             (line  439)
49221* __cmpha2:                              Fixed-point fractional library routines.
49222                                                             (line  448)
49223* __cmphq2:                              Fixed-point fractional library routines.
49224                                                             (line  437)
49225* __cmpqq2:                              Fixed-point fractional library routines.
49226                                                             (line  436)
49227* __cmpsa2:                              Fixed-point fractional library routines.
49228                                                             (line  449)
49229* __cmpsf2:                              Soft float library routines.
49230                                                             (line  162)
49231* __cmpsq2:                              Fixed-point fractional library routines.
49232                                                             (line  438)
49233* __cmpta2:                              Fixed-point fractional library routines.
49234                                                             (line  451)
49235* __cmptf2:                              Soft float library routines.
49236                                                             (line  164)
49237* __cmpti2:                              Integer library routines.
49238                                                             (line   87)
49239* __cmpuda2:                             Fixed-point fractional library routines.
49240                                                             (line  456)
49241* __cmpudq2:                             Fixed-point fractional library routines.
49242                                                             (line  446)
49243* __cmpuha2:                             Fixed-point fractional library routines.
49244                                                             (line  453)
49245* __cmpuhq2:                             Fixed-point fractional library routines.
49246                                                             (line  443)
49247* __cmpuqq2:                             Fixed-point fractional library routines.
49248                                                             (line  441)
49249* __cmpusa2:                             Fixed-point fractional library routines.
49250                                                             (line  455)
49251* __cmpusq2:                             Fixed-point fractional library routines.
49252                                                             (line  444)
49253* __cmputa2:                             Fixed-point fractional library routines.
49254                                                             (line  458)
49255* __CTOR_LIST__:                         Initialization.     (line   25)
49256* __ctzdi2:                              Integer library routines.
49257                                                             (line  137)
49258* __ctzsi2:                              Integer library routines.
49259                                                             (line  136)
49260* __ctzti2:                              Integer library routines.
49261                                                             (line  138)
49262* __divda3:                              Fixed-point fractional library routines.
49263                                                             (line  226)
49264* __divdc3:                              Soft float library routines.
49265                                                             (line  250)
49266* __divdf3:                              Soft float library routines.
49267                                                             (line   47)
49268* __divdi3:                              Integer library routines.
49269                                                             (line   24)
49270* __divdq3:                              Fixed-point fractional library routines.
49271                                                             (line  221)
49272* __divha3:                              Fixed-point fractional library routines.
49273                                                             (line  223)
49274* __divhq3:                              Fixed-point fractional library routines.
49275                                                             (line  219)
49276* __divqq3:                              Fixed-point fractional library routines.
49277                                                             (line  217)
49278* __divsa3:                              Fixed-point fractional library routines.
49279                                                             (line  225)
49280* __divsc3:                              Soft float library routines.
49281                                                             (line  248)
49282* __divsf3:                              Soft float library routines.
49283                                                             (line   46)
49284* __divsi3:                              Integer library routines.
49285                                                             (line   23)
49286* __divsq3:                              Fixed-point fractional library routines.
49287                                                             (line  220)
49288* __divta3:                              Fixed-point fractional library routines.
49289                                                             (line  227)
49290* __divtc3:                              Soft float library routines.
49291                                                             (line  252)
49292* __divtf3:                              Soft float library routines.
49293                                                             (line   48)
49294* __divti3:                              Integer library routines.
49295                                                             (line   25)
49296* __divxc3:                              Soft float library routines.
49297                                                             (line  254)
49298* __divxf3:                              Soft float library routines.
49299                                                             (line   50)
49300* __dpd_adddd3:                          Decimal float library routines.
49301                                                             (line   21)
49302* __dpd_addsd3:                          Decimal float library routines.
49303                                                             (line   17)
49304* __dpd_addtd3:                          Decimal float library routines.
49305                                                             (line   25)
49306* __dpd_divdd3:                          Decimal float library routines.
49307                                                             (line   64)
49308* __dpd_divsd3:                          Decimal float library routines.
49309                                                             (line   60)
49310* __dpd_divtd3:                          Decimal float library routines.
49311                                                             (line   68)
49312* __dpd_eqdd2:                           Decimal float library routines.
49313                                                             (line  257)
49314* __dpd_eqsd2:                           Decimal float library routines.
49315                                                             (line  255)
49316* __dpd_eqtd2:                           Decimal float library routines.
49317                                                             (line  259)
49318* __dpd_extendddtd2:                     Decimal float library routines.
49319                                                             (line   90)
49320* __dpd_extendddtf:                      Decimal float library routines.
49321                                                             (line  138)
49322* __dpd_extendddxf:                      Decimal float library routines.
49323                                                             (line  132)
49324* __dpd_extenddfdd:                      Decimal float library routines.
49325                                                             (line  145)
49326* __dpd_extenddftd:                      Decimal float library routines.
49327                                                             (line  105)
49328* __dpd_extendsddd2:                     Decimal float library routines.
49329                                                             (line   86)
49330* __dpd_extendsddf:                      Decimal float library routines.
49331                                                             (line  126)
49332* __dpd_extendsdtd2:                     Decimal float library routines.
49333                                                             (line   88)
49334* __dpd_extendsdtf:                      Decimal float library routines.
49335                                                             (line  136)
49336* __dpd_extendsdxf:                      Decimal float library routines.
49337                                                             (line  130)
49338* __dpd_extendsfdd:                      Decimal float library routines.
49339                                                             (line  101)
49340* __dpd_extendsfsd:                      Decimal float library routines.
49341                                                             (line  143)
49342* __dpd_extendsftd:                      Decimal float library routines.
49343                                                             (line  103)
49344* __dpd_extendtftd:                      Decimal float library routines.
49345                                                             (line  147)
49346* __dpd_extendxftd:                      Decimal float library routines.
49347                                                             (line  107)
49348* __dpd_fixdddi:                         Decimal float library routines.
49349                                                             (line  168)
49350* __dpd_fixddsi:                         Decimal float library routines.
49351                                                             (line  160)
49352* __dpd_fixsddi:                         Decimal float library routines.
49353                                                             (line  166)
49354* __dpd_fixsdsi:                         Decimal float library routines.
49355                                                             (line  158)
49356* __dpd_fixtddi:                         Decimal float library routines.
49357                                                             (line  170)
49358* __dpd_fixtdsi:                         Decimal float library routines.
49359                                                             (line  162)
49360* __dpd_fixunsdddi:                      Decimal float library routines.
49361                                                             (line  185)
49362* __dpd_fixunsddsi:                      Decimal float library routines.
49363                                                             (line  176)
49364* __dpd_fixunssddi:                      Decimal float library routines.
49365                                                             (line  183)
49366* __dpd_fixunssdsi:                      Decimal float library routines.
49367                                                             (line  174)
49368* __dpd_fixunstddi:                      Decimal float library routines.
49369                                                             (line  187)
49370* __dpd_fixunstdsi:                      Decimal float library routines.
49371                                                             (line  178)
49372* __dpd_floatdidd:                       Decimal float library routines.
49373                                                             (line  203)
49374* __dpd_floatdisd:                       Decimal float library routines.
49375                                                             (line  201)
49376* __dpd_floatditd:                       Decimal float library routines.
49377                                                             (line  205)
49378* __dpd_floatsidd:                       Decimal float library routines.
49379                                                             (line  194)
49380* __dpd_floatsisd:                       Decimal float library routines.
49381                                                             (line  192)
49382* __dpd_floatsitd:                       Decimal float library routines.
49383                                                             (line  196)
49384* __dpd_floatunsdidd:                    Decimal float library routines.
49385                                                             (line  221)
49386* __dpd_floatunsdisd:                    Decimal float library routines.
49387                                                             (line  219)
49388* __dpd_floatunsditd:                    Decimal float library routines.
49389                                                             (line  223)
49390* __dpd_floatunssidd:                    Decimal float library routines.
49391                                                             (line  212)
49392* __dpd_floatunssisd:                    Decimal float library routines.
49393                                                             (line  210)
49394* __dpd_floatunssitd:                    Decimal float library routines.
49395                                                             (line  214)
49396* __dpd_gedd2:                           Decimal float library routines.
49397                                                             (line  275)
49398* __dpd_gesd2:                           Decimal float library routines.
49399                                                             (line  273)
49400* __dpd_getd2:                           Decimal float library routines.
49401                                                             (line  277)
49402* __dpd_gtdd2:                           Decimal float library routines.
49403                                                             (line  302)
49404* __dpd_gtsd2:                           Decimal float library routines.
49405                                                             (line  300)
49406* __dpd_gttd2:                           Decimal float library routines.
49407                                                             (line  304)
49408* __dpd_ledd2:                           Decimal float library routines.
49409                                                             (line  293)
49410* __dpd_lesd2:                           Decimal float library routines.
49411                                                             (line  291)
49412* __dpd_letd2:                           Decimal float library routines.
49413                                                             (line  295)
49414* __dpd_ltdd2:                           Decimal float library routines.
49415                                                             (line  284)
49416* __dpd_ltsd2:                           Decimal float library routines.
49417                                                             (line  282)
49418* __dpd_lttd2:                           Decimal float library routines.
49419                                                             (line  286)
49420* __dpd_muldd3:                          Decimal float library routines.
49421                                                             (line   50)
49422* __dpd_mulsd3:                          Decimal float library routines.
49423                                                             (line   46)
49424* __dpd_multd3:                          Decimal float library routines.
49425                                                             (line   54)
49426* __dpd_nedd2:                           Decimal float library routines.
49427                                                             (line  266)
49428* __dpd_negdd2:                          Decimal float library routines.
49429                                                             (line   76)
49430* __dpd_negsd2:                          Decimal float library routines.
49431                                                             (line   74)
49432* __dpd_negtd2:                          Decimal float library routines.
49433                                                             (line   78)
49434* __dpd_nesd2:                           Decimal float library routines.
49435                                                             (line  264)
49436* __dpd_netd2:                           Decimal float library routines.
49437                                                             (line  268)
49438* __dpd_subdd3:                          Decimal float library routines.
49439                                                             (line   35)
49440* __dpd_subsd3:                          Decimal float library routines.
49441                                                             (line   31)
49442* __dpd_subtd3:                          Decimal float library routines.
49443                                                             (line   39)
49444* __dpd_truncdddf:                       Decimal float library routines.
49445                                                             (line  151)
49446* __dpd_truncddsd2:                      Decimal float library routines.
49447                                                             (line   92)
49448* __dpd_truncddsf:                       Decimal float library routines.
49449                                                             (line  122)
49450* __dpd_truncdfsd:                       Decimal float library routines.
49451                                                             (line  109)
49452* __dpd_truncsdsf:                       Decimal float library routines.
49453                                                             (line  149)
49454* __dpd_trunctddd2:                      Decimal float library routines.
49455                                                             (line   96)
49456* __dpd_trunctddf:                       Decimal float library routines.
49457                                                             (line  128)
49458* __dpd_trunctdsd2:                      Decimal float library routines.
49459                                                             (line   94)
49460* __dpd_trunctdsf:                       Decimal float library routines.
49461                                                             (line  124)
49462* __dpd_trunctdtf:                       Decimal float library routines.
49463                                                             (line  153)
49464* __dpd_trunctdxf:                       Decimal float library routines.
49465                                                             (line  134)
49466* __dpd_trunctfdd:                       Decimal float library routines.
49467                                                             (line  117)
49468* __dpd_trunctfsd:                       Decimal float library routines.
49469                                                             (line  113)
49470* __dpd_truncxfdd:                       Decimal float library routines.
49471                                                             (line  115)
49472* __dpd_truncxfsd:                       Decimal float library routines.
49473                                                             (line  111)
49474* __dpd_unorddd2:                        Decimal float library routines.
49475                                                             (line  233)
49476* __dpd_unordsd2:                        Decimal float library routines.
49477                                                             (line  231)
49478* __dpd_unordtd2:                        Decimal float library routines.
49479                                                             (line  235)
49480* __DTOR_LIST__:                         Initialization.     (line   25)
49481* __eqdf2:                               Soft float library routines.
49482                                                             (line  193)
49483* __eqsf2:                               Soft float library routines.
49484                                                             (line  192)
49485* __eqtf2:                               Soft float library routines.
49486                                                             (line  194)
49487* __extenddftf2:                         Soft float library routines.
49488                                                             (line   67)
49489* __extenddfxf2:                         Soft float library routines.
49490                                                             (line   68)
49491* __extendsfdf2:                         Soft float library routines.
49492                                                             (line   64)
49493* __extendsftf2:                         Soft float library routines.
49494                                                             (line   65)
49495* __extendsfxf2:                         Soft float library routines.
49496                                                             (line   66)
49497* __ffsdi2:                              Integer library routines.
49498                                                             (line  143)
49499* __ffsti2:                              Integer library routines.
49500                                                             (line  144)
49501* __fixdfdi:                             Soft float library routines.
49502                                                             (line   87)
49503* __fixdfsi:                             Soft float library routines.
49504                                                             (line   80)
49505* __fixdfti:                             Soft float library routines.
49506                                                             (line   93)
49507* __fixsfdi:                             Soft float library routines.
49508                                                             (line   86)
49509* __fixsfsi:                             Soft float library routines.
49510                                                             (line   79)
49511* __fixsfti:                             Soft float library routines.
49512                                                             (line   92)
49513* __fixtfdi:                             Soft float library routines.
49514                                                             (line   88)
49515* __fixtfsi:                             Soft float library routines.
49516                                                             (line   81)
49517* __fixtfti:                             Soft float library routines.
49518                                                             (line   94)
49519* __fixunsdfdi:                          Soft float library routines.
49520                                                             (line  107)
49521* __fixunsdfsi:                          Soft float library routines.
49522                                                             (line  100)
49523* __fixunsdfti:                          Soft float library routines.
49524                                                             (line  114)
49525* __fixunssfdi:                          Soft float library routines.
49526                                                             (line  106)
49527* __fixunssfsi:                          Soft float library routines.
49528                                                             (line   99)
49529* __fixunssfti:                          Soft float library routines.
49530                                                             (line  113)
49531* __fixunstfdi:                          Soft float library routines.
49532                                                             (line  108)
49533* __fixunstfsi:                          Soft float library routines.
49534                                                             (line  101)
49535* __fixunstfti:                          Soft float library routines.
49536                                                             (line  115)
49537* __fixunsxfdi:                          Soft float library routines.
49538                                                             (line  109)
49539* __fixunsxfsi:                          Soft float library routines.
49540                                                             (line  102)
49541* __fixunsxfti:                          Soft float library routines.
49542                                                             (line  116)
49543* __fixxfdi:                             Soft float library routines.
49544                                                             (line   89)
49545* __fixxfsi:                             Soft float library routines.
49546                                                             (line   82)
49547* __fixxfti:                             Soft float library routines.
49548                                                             (line   95)
49549* __floatdidf:                           Soft float library routines.
49550                                                             (line  127)
49551* __floatdisf:                           Soft float library routines.
49552                                                             (line  126)
49553* __floatditf:                           Soft float library routines.
49554                                                             (line  128)
49555* __floatdixf:                           Soft float library routines.
49556                                                             (line  129)
49557* __floatsidf:                           Soft float library routines.
49558                                                             (line  121)
49559* __floatsisf:                           Soft float library routines.
49560                                                             (line  120)
49561* __floatsitf:                           Soft float library routines.
49562                                                             (line  122)
49563* __floatsixf:                           Soft float library routines.
49564                                                             (line  123)
49565* __floattidf:                           Soft float library routines.
49566                                                             (line  133)
49567* __floattisf:                           Soft float library routines.
49568                                                             (line  132)
49569* __floattitf:                           Soft float library routines.
49570                                                             (line  134)
49571* __floattixf:                           Soft float library routines.
49572                                                             (line  135)
49573* __floatundidf:                         Soft float library routines.
49574                                                             (line  145)
49575* __floatundisf:                         Soft float library routines.
49576                                                             (line  144)
49577* __floatunditf:                         Soft float library routines.
49578                                                             (line  146)
49579* __floatundixf:                         Soft float library routines.
49580                                                             (line  147)
49581* __floatunsidf:                         Soft float library routines.
49582                                                             (line  139)
49583* __floatunsisf:                         Soft float library routines.
49584                                                             (line  138)
49585* __floatunsitf:                         Soft float library routines.
49586                                                             (line  140)
49587* __floatunsixf:                         Soft float library routines.
49588                                                             (line  141)
49589* __floatuntidf:                         Soft float library routines.
49590                                                             (line  151)
49591* __floatuntisf:                         Soft float library routines.
49592                                                             (line  150)
49593* __floatuntitf:                         Soft float library routines.
49594                                                             (line  152)
49595* __floatuntixf:                         Soft float library routines.
49596                                                             (line  153)
49597* __fractdadf:                           Fixed-point fractional library routines.
49598                                                             (line  635)
49599* __fractdadi:                           Fixed-point fractional library routines.
49600                                                             (line  632)
49601* __fractdadq:                           Fixed-point fractional library routines.
49602                                                             (line  615)
49603* __fractdaha2:                          Fixed-point fractional library routines.
49604                                                             (line  616)
49605* __fractdahi:                           Fixed-point fractional library routines.
49606                                                             (line  630)
49607* __fractdahq:                           Fixed-point fractional library routines.
49608                                                             (line  613)
49609* __fractdaqi:                           Fixed-point fractional library routines.
49610                                                             (line  629)
49611* __fractdaqq:                           Fixed-point fractional library routines.
49612                                                             (line  612)
49613* __fractdasa2:                          Fixed-point fractional library routines.
49614                                                             (line  617)
49615* __fractdasf:                           Fixed-point fractional library routines.
49616                                                             (line  634)
49617* __fractdasi:                           Fixed-point fractional library routines.
49618                                                             (line  631)
49619* __fractdasq:                           Fixed-point fractional library routines.
49620                                                             (line  614)
49621* __fractdata2:                          Fixed-point fractional library routines.
49622                                                             (line  618)
49623* __fractdati:                           Fixed-point fractional library routines.
49624                                                             (line  633)
49625* __fractdauda:                          Fixed-point fractional library routines.
49626                                                             (line  626)
49627* __fractdaudq:                          Fixed-point fractional library routines.
49628                                                             (line  622)
49629* __fractdauha:                          Fixed-point fractional library routines.
49630                                                             (line  624)
49631* __fractdauhq:                          Fixed-point fractional library routines.
49632                                                             (line  620)
49633* __fractdauqq:                          Fixed-point fractional library routines.
49634                                                             (line  619)
49635* __fractdausa:                          Fixed-point fractional library routines.
49636                                                             (line  625)
49637* __fractdausq:                          Fixed-point fractional library routines.
49638                                                             (line  621)
49639* __fractdauta:                          Fixed-point fractional library routines.
49640                                                             (line  627)
49641* __fractdfda:                           Fixed-point fractional library routines.
49642                                                             (line 1024)
49643* __fractdfdq:                           Fixed-point fractional library routines.
49644                                                             (line 1021)
49645* __fractdfha:                           Fixed-point fractional library routines.
49646                                                             (line 1022)
49647* __fractdfhq:                           Fixed-point fractional library routines.
49648                                                             (line 1019)
49649* __fractdfqq:                           Fixed-point fractional library routines.
49650                                                             (line 1018)
49651* __fractdfsa:                           Fixed-point fractional library routines.
49652                                                             (line 1023)
49653* __fractdfsq:                           Fixed-point fractional library routines.
49654                                                             (line 1020)
49655* __fractdfta:                           Fixed-point fractional library routines.
49656                                                             (line 1025)
49657* __fractdfuda:                          Fixed-point fractional library routines.
49658                                                             (line 1032)
49659* __fractdfudq:                          Fixed-point fractional library routines.
49660                                                             (line 1029)
49661* __fractdfuha:                          Fixed-point fractional library routines.
49662                                                             (line 1030)
49663* __fractdfuhq:                          Fixed-point fractional library routines.
49664                                                             (line 1027)
49665* __fractdfuqq:                          Fixed-point fractional library routines.
49666                                                             (line 1026)
49667* __fractdfusa:                          Fixed-point fractional library routines.
49668                                                             (line 1031)
49669* __fractdfusq:                          Fixed-point fractional library routines.
49670                                                             (line 1028)
49671* __fractdfuta:                          Fixed-point fractional library routines.
49672                                                             (line 1033)
49673* __fractdida:                           Fixed-point fractional library routines.
49674                                                             (line  974)
49675* __fractdidq:                           Fixed-point fractional library routines.
49676                                                             (line  971)
49677* __fractdiha:                           Fixed-point fractional library routines.
49678                                                             (line  972)
49679* __fractdihq:                           Fixed-point fractional library routines.
49680                                                             (line  969)
49681* __fractdiqq:                           Fixed-point fractional library routines.
49682                                                             (line  968)
49683* __fractdisa:                           Fixed-point fractional library routines.
49684                                                             (line  973)
49685* __fractdisq:                           Fixed-point fractional library routines.
49686                                                             (line  970)
49687* __fractdita:                           Fixed-point fractional library routines.
49688                                                             (line  975)
49689* __fractdiuda:                          Fixed-point fractional library routines.
49690                                                             (line  982)
49691* __fractdiudq:                          Fixed-point fractional library routines.
49692                                                             (line  979)
49693* __fractdiuha:                          Fixed-point fractional library routines.
49694                                                             (line  980)
49695* __fractdiuhq:                          Fixed-point fractional library routines.
49696                                                             (line  977)
49697* __fractdiuqq:                          Fixed-point fractional library routines.
49698                                                             (line  976)
49699* __fractdiusa:                          Fixed-point fractional library routines.
49700                                                             (line  981)
49701* __fractdiusq:                          Fixed-point fractional library routines.
49702                                                             (line  978)
49703* __fractdiuta:                          Fixed-point fractional library routines.
49704                                                             (line  983)
49705* __fractdqda:                           Fixed-point fractional library routines.
49706                                                             (line  543)
49707* __fractdqdf:                           Fixed-point fractional library routines.
49708                                                             (line  565)
49709* __fractdqdi:                           Fixed-point fractional library routines.
49710                                                             (line  562)
49711* __fractdqha:                           Fixed-point fractional library routines.
49712                                                             (line  541)
49713* __fractdqhi:                           Fixed-point fractional library routines.
49714                                                             (line  560)
49715* __fractdqhq2:                          Fixed-point fractional library routines.
49716                                                             (line  539)
49717* __fractdqqi:                           Fixed-point fractional library routines.
49718                                                             (line  559)
49719* __fractdqqq2:                          Fixed-point fractional library routines.
49720                                                             (line  538)
49721* __fractdqsa:                           Fixed-point fractional library routines.
49722                                                             (line  542)
49723* __fractdqsf:                           Fixed-point fractional library routines.
49724                                                             (line  564)
49725* __fractdqsi:                           Fixed-point fractional library routines.
49726                                                             (line  561)
49727* __fractdqsq2:                          Fixed-point fractional library routines.
49728                                                             (line  540)
49729* __fractdqta:                           Fixed-point fractional library routines.
49730                                                             (line  544)
49731* __fractdqti:                           Fixed-point fractional library routines.
49732                                                             (line  563)
49733* __fractdquda:                          Fixed-point fractional library routines.
49734                                                             (line  555)
49735* __fractdqudq:                          Fixed-point fractional library routines.
49736                                                             (line  550)
49737* __fractdquha:                          Fixed-point fractional library routines.
49738                                                             (line  552)
49739* __fractdquhq:                          Fixed-point fractional library routines.
49740                                                             (line  547)
49741* __fractdquqq:                          Fixed-point fractional library routines.
49742                                                             (line  545)
49743* __fractdqusa:                          Fixed-point fractional library routines.
49744                                                             (line  554)
49745* __fractdqusq:                          Fixed-point fractional library routines.
49746                                                             (line  548)
49747* __fractdquta:                          Fixed-point fractional library routines.
49748                                                             (line  557)
49749* __fracthada2:                          Fixed-point fractional library routines.
49750                                                             (line  571)
49751* __fracthadf:                           Fixed-point fractional library routines.
49752                                                             (line  589)
49753* __fracthadi:                           Fixed-point fractional library routines.
49754                                                             (line  586)
49755* __fracthadq:                           Fixed-point fractional library routines.
49756                                                             (line  569)
49757* __fracthahi:                           Fixed-point fractional library routines.
49758                                                             (line  584)
49759* __fracthahq:                           Fixed-point fractional library routines.
49760                                                             (line  567)
49761* __fracthaqi:                           Fixed-point fractional library routines.
49762                                                             (line  583)
49763* __fracthaqq:                           Fixed-point fractional library routines.
49764                                                             (line  566)
49765* __fracthasa2:                          Fixed-point fractional library routines.
49766                                                             (line  570)
49767* __fracthasf:                           Fixed-point fractional library routines.
49768                                                             (line  588)
49769* __fracthasi:                           Fixed-point fractional library routines.
49770                                                             (line  585)
49771* __fracthasq:                           Fixed-point fractional library routines.
49772                                                             (line  568)
49773* __fracthata2:                          Fixed-point fractional library routines.
49774                                                             (line  572)
49775* __fracthati:                           Fixed-point fractional library routines.
49776                                                             (line  587)
49777* __fracthauda:                          Fixed-point fractional library routines.
49778                                                             (line  580)
49779* __fracthaudq:                          Fixed-point fractional library routines.
49780                                                             (line  576)
49781* __fracthauha:                          Fixed-point fractional library routines.
49782                                                             (line  578)
49783* __fracthauhq:                          Fixed-point fractional library routines.
49784                                                             (line  574)
49785* __fracthauqq:                          Fixed-point fractional library routines.
49786                                                             (line  573)
49787* __fracthausa:                          Fixed-point fractional library routines.
49788                                                             (line  579)
49789* __fracthausq:                          Fixed-point fractional library routines.
49790                                                             (line  575)
49791* __fracthauta:                          Fixed-point fractional library routines.
49792                                                             (line  581)
49793* __fracthida:                           Fixed-point fractional library routines.
49794                                                             (line  942)
49795* __fracthidq:                           Fixed-point fractional library routines.
49796                                                             (line  939)
49797* __fracthiha:                           Fixed-point fractional library routines.
49798                                                             (line  940)
49799* __fracthihq:                           Fixed-point fractional library routines.
49800                                                             (line  937)
49801* __fracthiqq:                           Fixed-point fractional library routines.
49802                                                             (line  936)
49803* __fracthisa:                           Fixed-point fractional library routines.
49804                                                             (line  941)
49805* __fracthisq:                           Fixed-point fractional library routines.
49806                                                             (line  938)
49807* __fracthita:                           Fixed-point fractional library routines.
49808                                                             (line  943)
49809* __fracthiuda:                          Fixed-point fractional library routines.
49810                                                             (line  950)
49811* __fracthiudq:                          Fixed-point fractional library routines.
49812                                                             (line  947)
49813* __fracthiuha:                          Fixed-point fractional library routines.
49814                                                             (line  948)
49815* __fracthiuhq:                          Fixed-point fractional library routines.
49816                                                             (line  945)
49817* __fracthiuqq:                          Fixed-point fractional library routines.
49818                                                             (line  944)
49819* __fracthiusa:                          Fixed-point fractional library routines.
49820                                                             (line  949)
49821* __fracthiusq:                          Fixed-point fractional library routines.
49822                                                             (line  946)
49823* __fracthiuta:                          Fixed-point fractional library routines.
49824                                                             (line  951)
49825* __fracthqda:                           Fixed-point fractional library routines.
49826                                                             (line  497)
49827* __fracthqdf:                           Fixed-point fractional library routines.
49828                                                             (line  513)
49829* __fracthqdi:                           Fixed-point fractional library routines.
49830                                                             (line  510)
49831* __fracthqdq2:                          Fixed-point fractional library routines.
49832                                                             (line  494)
49833* __fracthqha:                           Fixed-point fractional library routines.
49834                                                             (line  495)
49835* __fracthqhi:                           Fixed-point fractional library routines.
49836                                                             (line  508)
49837* __fracthqqi:                           Fixed-point fractional library routines.
49838                                                             (line  507)
49839* __fracthqqq2:                          Fixed-point fractional library routines.
49840                                                             (line  492)
49841* __fracthqsa:                           Fixed-point fractional library routines.
49842                                                             (line  496)
49843* __fracthqsf:                           Fixed-point fractional library routines.
49844                                                             (line  512)
49845* __fracthqsi:                           Fixed-point fractional library routines.
49846                                                             (line  509)
49847* __fracthqsq2:                          Fixed-point fractional library routines.
49848                                                             (line  493)
49849* __fracthqta:                           Fixed-point fractional library routines.
49850                                                             (line  498)
49851* __fracthqti:                           Fixed-point fractional library routines.
49852                                                             (line  511)
49853* __fracthquda:                          Fixed-point fractional library routines.
49854                                                             (line  505)
49855* __fracthqudq:                          Fixed-point fractional library routines.
49856                                                             (line  502)
49857* __fracthquha:                          Fixed-point fractional library routines.
49858                                                             (line  503)
49859* __fracthquhq:                          Fixed-point fractional library routines.
49860                                                             (line  500)
49861* __fracthquqq:                          Fixed-point fractional library routines.
49862                                                             (line  499)
49863* __fracthqusa:                          Fixed-point fractional library routines.
49864                                                             (line  504)
49865* __fracthqusq:                          Fixed-point fractional library routines.
49866                                                             (line  501)
49867* __fracthquta:                          Fixed-point fractional library routines.
49868                                                             (line  506)
49869* __fractqida:                           Fixed-point fractional library routines.
49870                                                             (line  924)
49871* __fractqidq:                           Fixed-point fractional library routines.
49872                                                             (line  921)
49873* __fractqiha:                           Fixed-point fractional library routines.
49874                                                             (line  922)
49875* __fractqihq:                           Fixed-point fractional library routines.
49876                                                             (line  919)
49877* __fractqiqq:                           Fixed-point fractional library routines.
49878                                                             (line  918)
49879* __fractqisa:                           Fixed-point fractional library routines.
49880                                                             (line  923)
49881* __fractqisq:                           Fixed-point fractional library routines.
49882                                                             (line  920)
49883* __fractqita:                           Fixed-point fractional library routines.
49884                                                             (line  925)
49885* __fractqiuda:                          Fixed-point fractional library routines.
49886                                                             (line  933)
49887* __fractqiudq:                          Fixed-point fractional library routines.
49888                                                             (line  929)
49889* __fractqiuha:                          Fixed-point fractional library routines.
49890                                                             (line  931)
49891* __fractqiuhq:                          Fixed-point fractional library routines.
49892                                                             (line  927)
49893* __fractqiuqq:                          Fixed-point fractional library routines.
49894                                                             (line  926)
49895* __fractqiusa:                          Fixed-point fractional library routines.
49896                                                             (line  932)
49897* __fractqiusq:                          Fixed-point fractional library routines.
49898                                                             (line  928)
49899* __fractqiuta:                          Fixed-point fractional library routines.
49900                                                             (line  934)
49901* __fractqqda:                           Fixed-point fractional library routines.
49902                                                             (line  473)
49903* __fractqqdf:                           Fixed-point fractional library routines.
49904                                                             (line  491)
49905* __fractqqdi:                           Fixed-point fractional library routines.
49906                                                             (line  488)
49907* __fractqqdq2:                          Fixed-point fractional library routines.
49908                                                             (line  470)
49909* __fractqqha:                           Fixed-point fractional library routines.
49910                                                             (line  471)
49911* __fractqqhi:                           Fixed-point fractional library routines.
49912                                                             (line  486)
49913* __fractqqhq2:                          Fixed-point fractional library routines.
49914                                                             (line  468)
49915* __fractqqqi:                           Fixed-point fractional library routines.
49916                                                             (line  485)
49917* __fractqqsa:                           Fixed-point fractional library routines.
49918                                                             (line  472)
49919* __fractqqsf:                           Fixed-point fractional library routines.
49920                                                             (line  490)
49921* __fractqqsi:                           Fixed-point fractional library routines.
49922                                                             (line  487)
49923* __fractqqsq2:                          Fixed-point fractional library routines.
49924                                                             (line  469)
49925* __fractqqta:                           Fixed-point fractional library routines.
49926                                                             (line  474)
49927* __fractqqti:                           Fixed-point fractional library routines.
49928                                                             (line  489)
49929* __fractqquda:                          Fixed-point fractional library routines.
49930                                                             (line  482)
49931* __fractqqudq:                          Fixed-point fractional library routines.
49932                                                             (line  478)
49933* __fractqquha:                          Fixed-point fractional library routines.
49934                                                             (line  480)
49935* __fractqquhq:                          Fixed-point fractional library routines.
49936                                                             (line  476)
49937* __fractqquqq:                          Fixed-point fractional library routines.
49938                                                             (line  475)
49939* __fractqqusa:                          Fixed-point fractional library routines.
49940                                                             (line  481)
49941* __fractqqusq:                          Fixed-point fractional library routines.
49942                                                             (line  477)
49943* __fractqquta:                          Fixed-point fractional library routines.
49944                                                             (line  483)
49945* __fractsada2:                          Fixed-point fractional library routines.
49946                                                             (line  595)
49947* __fractsadf:                           Fixed-point fractional library routines.
49948                                                             (line  611)
49949* __fractsadi:                           Fixed-point fractional library routines.
49950                                                             (line  608)
49951* __fractsadq:                           Fixed-point fractional library routines.
49952                                                             (line  593)
49953* __fractsaha2:                          Fixed-point fractional library routines.
49954                                                             (line  594)
49955* __fractsahi:                           Fixed-point fractional library routines.
49956                                                             (line  606)
49957* __fractsahq:                           Fixed-point fractional library routines.
49958                                                             (line  591)
49959* __fractsaqi:                           Fixed-point fractional library routines.
49960                                                             (line  605)
49961* __fractsaqq:                           Fixed-point fractional library routines.
49962                                                             (line  590)
49963* __fractsasf:                           Fixed-point fractional library routines.
49964                                                             (line  610)
49965* __fractsasi:                           Fixed-point fractional library routines.
49966                                                             (line  607)
49967* __fractsasq:                           Fixed-point fractional library routines.
49968                                                             (line  592)
49969* __fractsata2:                          Fixed-point fractional library routines.
49970                                                             (line  596)
49971* __fractsati:                           Fixed-point fractional library routines.
49972                                                             (line  609)
49973* __fractsauda:                          Fixed-point fractional library routines.
49974                                                             (line  603)
49975* __fractsaudq:                          Fixed-point fractional library routines.
49976                                                             (line  600)
49977* __fractsauha:                          Fixed-point fractional library routines.
49978                                                             (line  601)
49979* __fractsauhq:                          Fixed-point fractional library routines.
49980                                                             (line  598)
49981* __fractsauqq:                          Fixed-point fractional library routines.
49982                                                             (line  597)
49983* __fractsausa:                          Fixed-point fractional library routines.
49984                                                             (line  602)
49985* __fractsausq:                          Fixed-point fractional library routines.
49986                                                             (line  599)
49987* __fractsauta:                          Fixed-point fractional library routines.
49988                                                             (line  604)
49989* __fractsfda:                           Fixed-point fractional library routines.
49990                                                             (line 1008)
49991* __fractsfdq:                           Fixed-point fractional library routines.
49992                                                             (line 1005)
49993* __fractsfha:                           Fixed-point fractional library routines.
49994                                                             (line 1006)
49995* __fractsfhq:                           Fixed-point fractional library routines.
49996                                                             (line 1003)
49997* __fractsfqq:                           Fixed-point fractional library routines.
49998                                                             (line 1002)
49999* __fractsfsa:                           Fixed-point fractional library routines.
50000                                                             (line 1007)
50001* __fractsfsq:                           Fixed-point fractional library routines.
50002                                                             (line 1004)
50003* __fractsfta:                           Fixed-point fractional library routines.
50004                                                             (line 1009)
50005* __fractsfuda:                          Fixed-point fractional library routines.
50006                                                             (line 1016)
50007* __fractsfudq:                          Fixed-point fractional library routines.
50008                                                             (line 1013)
50009* __fractsfuha:                          Fixed-point fractional library routines.
50010                                                             (line 1014)
50011* __fractsfuhq:                          Fixed-point fractional library routines.
50012                                                             (line 1011)
50013* __fractsfuqq:                          Fixed-point fractional library routines.
50014                                                             (line 1010)
50015* __fractsfusa:                          Fixed-point fractional library routines.
50016                                                             (line 1015)
50017* __fractsfusq:                          Fixed-point fractional library routines.
50018                                                             (line 1012)
50019* __fractsfuta:                          Fixed-point fractional library routines.
50020                                                             (line 1017)
50021* __fractsida:                           Fixed-point fractional library routines.
50022                                                             (line  958)
50023* __fractsidq:                           Fixed-point fractional library routines.
50024                                                             (line  955)
50025* __fractsiha:                           Fixed-point fractional library routines.
50026                                                             (line  956)
50027* __fractsihq:                           Fixed-point fractional library routines.
50028                                                             (line  953)
50029* __fractsiqq:                           Fixed-point fractional library routines.
50030                                                             (line  952)
50031* __fractsisa:                           Fixed-point fractional library routines.
50032                                                             (line  957)
50033* __fractsisq:                           Fixed-point fractional library routines.
50034                                                             (line  954)
50035* __fractsita:                           Fixed-point fractional library routines.
50036                                                             (line  959)
50037* __fractsiuda:                          Fixed-point fractional library routines.
50038                                                             (line  966)
50039* __fractsiudq:                          Fixed-point fractional library routines.
50040                                                             (line  963)
50041* __fractsiuha:                          Fixed-point fractional library routines.
50042                                                             (line  964)
50043* __fractsiuhq:                          Fixed-point fractional library routines.
50044                                                             (line  961)
50045* __fractsiuqq:                          Fixed-point fractional library routines.
50046                                                             (line  960)
50047* __fractsiusa:                          Fixed-point fractional library routines.
50048                                                             (line  965)
50049* __fractsiusq:                          Fixed-point fractional library routines.
50050                                                             (line  962)
50051* __fractsiuta:                          Fixed-point fractional library routines.
50052                                                             (line  967)
50053* __fractsqda:                           Fixed-point fractional library routines.
50054                                                             (line  519)
50055* __fractsqdf:                           Fixed-point fractional library routines.
50056                                                             (line  537)
50057* __fractsqdi:                           Fixed-point fractional library routines.
50058                                                             (line  534)
50059* __fractsqdq2:                          Fixed-point fractional library routines.
50060                                                             (line  516)
50061* __fractsqha:                           Fixed-point fractional library routines.
50062                                                             (line  517)
50063* __fractsqhi:                           Fixed-point fractional library routines.
50064                                                             (line  532)
50065* __fractsqhq2:                          Fixed-point fractional library routines.
50066                                                             (line  515)
50067* __fractsqqi:                           Fixed-point fractional library routines.
50068                                                             (line  531)
50069* __fractsqqq2:                          Fixed-point fractional library routines.
50070                                                             (line  514)
50071* __fractsqsa:                           Fixed-point fractional library routines.
50072                                                             (line  518)
50073* __fractsqsf:                           Fixed-point fractional library routines.
50074                                                             (line  536)
50075* __fractsqsi:                           Fixed-point fractional library routines.
50076                                                             (line  533)
50077* __fractsqta:                           Fixed-point fractional library routines.
50078                                                             (line  520)
50079* __fractsqti:                           Fixed-point fractional library routines.
50080                                                             (line  535)
50081* __fractsquda:                          Fixed-point fractional library routines.
50082                                                             (line  528)
50083* __fractsqudq:                          Fixed-point fractional library routines.
50084                                                             (line  524)
50085* __fractsquha:                          Fixed-point fractional library routines.
50086                                                             (line  526)
50087* __fractsquhq:                          Fixed-point fractional library routines.
50088                                                             (line  522)
50089* __fractsquqq:                          Fixed-point fractional library routines.
50090                                                             (line  521)
50091* __fractsqusa:                          Fixed-point fractional library routines.
50092                                                             (line  527)
50093* __fractsqusq:                          Fixed-point fractional library routines.
50094                                                             (line  523)
50095* __fractsquta:                          Fixed-point fractional library routines.
50096                                                             (line  529)
50097* __fracttada2:                          Fixed-point fractional library routines.
50098                                                             (line  642)
50099* __fracttadf:                           Fixed-point fractional library routines.
50100                                                             (line  663)
50101* __fracttadi:                           Fixed-point fractional library routines.
50102                                                             (line  660)
50103* __fracttadq:                           Fixed-point fractional library routines.
50104                                                             (line  639)
50105* __fracttaha2:                          Fixed-point fractional library routines.
50106                                                             (line  640)
50107* __fracttahi:                           Fixed-point fractional library routines.
50108                                                             (line  658)
50109* __fracttahq:                           Fixed-point fractional library routines.
50110                                                             (line  637)
50111* __fracttaqi:                           Fixed-point fractional library routines.
50112                                                             (line  657)
50113* __fracttaqq:                           Fixed-point fractional library routines.
50114                                                             (line  636)
50115* __fracttasa2:                          Fixed-point fractional library routines.
50116                                                             (line  641)
50117* __fracttasf:                           Fixed-point fractional library routines.
50118                                                             (line  662)
50119* __fracttasi:                           Fixed-point fractional library routines.
50120                                                             (line  659)
50121* __fracttasq:                           Fixed-point fractional library routines.
50122                                                             (line  638)
50123* __fracttati:                           Fixed-point fractional library routines.
50124                                                             (line  661)
50125* __fracttauda:                          Fixed-point fractional library routines.
50126                                                             (line  653)
50127* __fracttaudq:                          Fixed-point fractional library routines.
50128                                                             (line  648)
50129* __fracttauha:                          Fixed-point fractional library routines.
50130                                                             (line  650)
50131* __fracttauhq:                          Fixed-point fractional library routines.
50132                                                             (line  645)
50133* __fracttauqq:                          Fixed-point fractional library routines.
50134                                                             (line  643)
50135* __fracttausa:                          Fixed-point fractional library routines.
50136                                                             (line  652)
50137* __fracttausq:                          Fixed-point fractional library routines.
50138                                                             (line  646)
50139* __fracttauta:                          Fixed-point fractional library routines.
50140                                                             (line  655)
50141* __fracttida:                           Fixed-point fractional library routines.
50142                                                             (line  990)
50143* __fracttidq:                           Fixed-point fractional library routines.
50144                                                             (line  987)
50145* __fracttiha:                           Fixed-point fractional library routines.
50146                                                             (line  988)
50147* __fracttihq:                           Fixed-point fractional library routines.
50148                                                             (line  985)
50149* __fracttiqq:                           Fixed-point fractional library routines.
50150                                                             (line  984)
50151* __fracttisa:                           Fixed-point fractional library routines.
50152                                                             (line  989)
50153* __fracttisq:                           Fixed-point fractional library routines.
50154                                                             (line  986)
50155* __fracttita:                           Fixed-point fractional library routines.
50156                                                             (line  991)
50157* __fracttiuda:                          Fixed-point fractional library routines.
50158                                                             (line  999)
50159* __fracttiudq:                          Fixed-point fractional library routines.
50160                                                             (line  995)
50161* __fracttiuha:                          Fixed-point fractional library routines.
50162                                                             (line  997)
50163* __fracttiuhq:                          Fixed-point fractional library routines.
50164                                                             (line  993)
50165* __fracttiuqq:                          Fixed-point fractional library routines.
50166                                                             (line  992)
50167* __fracttiusa:                          Fixed-point fractional library routines.
50168                                                             (line  998)
50169* __fracttiusq:                          Fixed-point fractional library routines.
50170                                                             (line  994)
50171* __fracttiuta:                          Fixed-point fractional library routines.
50172                                                             (line 1000)
50173* __fractudada:                          Fixed-point fractional library routines.
50174                                                             (line  857)
50175* __fractudadf:                          Fixed-point fractional library routines.
50176                                                             (line  880)
50177* __fractudadi:                          Fixed-point fractional library routines.
50178                                                             (line  877)
50179* __fractudadq:                          Fixed-point fractional library routines.
50180                                                             (line  853)
50181* __fractudaha:                          Fixed-point fractional library routines.
50182                                                             (line  855)
50183* __fractudahi:                          Fixed-point fractional library routines.
50184                                                             (line  875)
50185* __fractudahq:                          Fixed-point fractional library routines.
50186                                                             (line  851)
50187* __fractudaqi:                          Fixed-point fractional library routines.
50188                                                             (line  874)
50189* __fractudaqq:                          Fixed-point fractional library routines.
50190                                                             (line  850)
50191* __fractudasa:                          Fixed-point fractional library routines.
50192                                                             (line  856)
50193* __fractudasf:                          Fixed-point fractional library routines.
50194                                                             (line  879)
50195* __fractudasi:                          Fixed-point fractional library routines.
50196                                                             (line  876)
50197* __fractudasq:                          Fixed-point fractional library routines.
50198                                                             (line  852)
50199* __fractudata:                          Fixed-point fractional library routines.
50200                                                             (line  858)
50201* __fractudati:                          Fixed-point fractional library routines.
50202                                                             (line  878)
50203* __fractudaudq:                         Fixed-point fractional library routines.
50204                                                             (line  866)
50205* __fractudauha2:                        Fixed-point fractional library routines.
50206                                                             (line  868)
50207* __fractudauhq:                         Fixed-point fractional library routines.
50208                                                             (line  862)
50209* __fractudauqq:                         Fixed-point fractional library routines.
50210                                                             (line  860)
50211* __fractudausa2:                        Fixed-point fractional library routines.
50212                                                             (line  870)
50213* __fractudausq:                         Fixed-point fractional library routines.
50214                                                             (line  864)
50215* __fractudauta2:                        Fixed-point fractional library routines.
50216                                                             (line  872)
50217* __fractudqda:                          Fixed-point fractional library routines.
50218                                                             (line  764)
50219* __fractudqdf:                          Fixed-point fractional library routines.
50220                                                             (line  790)
50221* __fractudqdi:                          Fixed-point fractional library routines.
50222                                                             (line  786)
50223* __fractudqdq:                          Fixed-point fractional library routines.
50224                                                             (line  759)
50225* __fractudqha:                          Fixed-point fractional library routines.
50226                                                             (line  761)
50227* __fractudqhi:                          Fixed-point fractional library routines.
50228                                                             (line  784)
50229* __fractudqhq:                          Fixed-point fractional library routines.
50230                                                             (line  756)
50231* __fractudqqi:                          Fixed-point fractional library routines.
50232                                                             (line  782)
50233* __fractudqqq:                          Fixed-point fractional library routines.
50234                                                             (line  754)
50235* __fractudqsa:                          Fixed-point fractional library routines.
50236                                                             (line  763)
50237* __fractudqsf:                          Fixed-point fractional library routines.
50238                                                             (line  789)
50239* __fractudqsi:                          Fixed-point fractional library routines.
50240                                                             (line  785)
50241* __fractudqsq:                          Fixed-point fractional library routines.
50242                                                             (line  757)
50243* __fractudqta:                          Fixed-point fractional library routines.
50244                                                             (line  766)
50245* __fractudqti:                          Fixed-point fractional library routines.
50246                                                             (line  787)
50247* __fractudquda:                         Fixed-point fractional library routines.
50248                                                             (line  778)
50249* __fractudquha:                         Fixed-point fractional library routines.
50250                                                             (line  774)
50251* __fractudquhq2:                        Fixed-point fractional library routines.
50252                                                             (line  770)
50253* __fractudquqq2:                        Fixed-point fractional library routines.
50254                                                             (line  768)
50255* __fractudqusa:                         Fixed-point fractional library routines.
50256                                                             (line  776)
50257* __fractudqusq2:                        Fixed-point fractional library routines.
50258                                                             (line  772)
50259* __fractudquta:                         Fixed-point fractional library routines.
50260                                                             (line  780)
50261* __fractuhada:                          Fixed-point fractional library routines.
50262                                                             (line  798)
50263* __fractuhadf:                          Fixed-point fractional library routines.
50264                                                             (line  821)
50265* __fractuhadi:                          Fixed-point fractional library routines.
50266                                                             (line  818)
50267* __fractuhadq:                          Fixed-point fractional library routines.
50268                                                             (line  794)
50269* __fractuhaha:                          Fixed-point fractional library routines.
50270                                                             (line  796)
50271* __fractuhahi:                          Fixed-point fractional library routines.
50272                                                             (line  816)
50273* __fractuhahq:                          Fixed-point fractional library routines.
50274                                                             (line  792)
50275* __fractuhaqi:                          Fixed-point fractional library routines.
50276                                                             (line  815)
50277* __fractuhaqq:                          Fixed-point fractional library routines.
50278                                                             (line  791)
50279* __fractuhasa:                          Fixed-point fractional library routines.
50280                                                             (line  797)
50281* __fractuhasf:                          Fixed-point fractional library routines.
50282                                                             (line  820)
50283* __fractuhasi:                          Fixed-point fractional library routines.
50284                                                             (line  817)
50285* __fractuhasq:                          Fixed-point fractional library routines.
50286                                                             (line  793)
50287* __fractuhata:                          Fixed-point fractional library routines.
50288                                                             (line  799)
50289* __fractuhati:                          Fixed-point fractional library routines.
50290                                                             (line  819)
50291* __fractuhauda2:                        Fixed-point fractional library routines.
50292                                                             (line  811)
50293* __fractuhaudq:                         Fixed-point fractional library routines.
50294                                                             (line  807)
50295* __fractuhauhq:                         Fixed-point fractional library routines.
50296                                                             (line  803)
50297* __fractuhauqq:                         Fixed-point fractional library routines.
50298                                                             (line  801)
50299* __fractuhausa2:                        Fixed-point fractional library routines.
50300                                                             (line  809)
50301* __fractuhausq:                         Fixed-point fractional library routines.
50302                                                             (line  805)
50303* __fractuhauta2:                        Fixed-point fractional library routines.
50304                                                             (line  813)
50305* __fractuhqda:                          Fixed-point fractional library routines.
50306                                                             (line  701)
50307* __fractuhqdf:                          Fixed-point fractional library routines.
50308                                                             (line  722)
50309* __fractuhqdi:                          Fixed-point fractional library routines.
50310                                                             (line  719)
50311* __fractuhqdq:                          Fixed-point fractional library routines.
50312                                                             (line  698)
50313* __fractuhqha:                          Fixed-point fractional library routines.
50314                                                             (line  699)
50315* __fractuhqhi:                          Fixed-point fractional library routines.
50316                                                             (line  717)
50317* __fractuhqhq:                          Fixed-point fractional library routines.
50318                                                             (line  696)
50319* __fractuhqqi:                          Fixed-point fractional library routines.
50320                                                             (line  716)
50321* __fractuhqqq:                          Fixed-point fractional library routines.
50322                                                             (line  695)
50323* __fractuhqsa:                          Fixed-point fractional library routines.
50324                                                             (line  700)
50325* __fractuhqsf:                          Fixed-point fractional library routines.
50326                                                             (line  721)
50327* __fractuhqsi:                          Fixed-point fractional library routines.
50328                                                             (line  718)
50329* __fractuhqsq:                          Fixed-point fractional library routines.
50330                                                             (line  697)
50331* __fractuhqta:                          Fixed-point fractional library routines.
50332                                                             (line  702)
50333* __fractuhqti:                          Fixed-point fractional library routines.
50334                                                             (line  720)
50335* __fractuhquda:                         Fixed-point fractional library routines.
50336                                                             (line  712)
50337* __fractuhqudq2:                        Fixed-point fractional library routines.
50338                                                             (line  707)
50339* __fractuhquha:                         Fixed-point fractional library routines.
50340                                                             (line  709)
50341* __fractuhquqq2:                        Fixed-point fractional library routines.
50342                                                             (line  703)
50343* __fractuhqusa:                         Fixed-point fractional library routines.
50344                                                             (line  711)
50345* __fractuhqusq2:                        Fixed-point fractional library routines.
50346                                                             (line  705)
50347* __fractuhquta:                         Fixed-point fractional library routines.
50348                                                             (line  714)
50349* __fractunsdadi:                        Fixed-point fractional library routines.
50350                                                             (line 1554)
50351* __fractunsdahi:                        Fixed-point fractional library routines.
50352                                                             (line 1552)
50353* __fractunsdaqi:                        Fixed-point fractional library routines.
50354                                                             (line 1551)
50355* __fractunsdasi:                        Fixed-point fractional library routines.
50356                                                             (line 1553)
50357* __fractunsdati:                        Fixed-point fractional library routines.
50358                                                             (line 1555)
50359* __fractunsdida:                        Fixed-point fractional library routines.
50360                                                             (line 1706)
50361* __fractunsdidq:                        Fixed-point fractional library routines.
50362                                                             (line 1703)
50363* __fractunsdiha:                        Fixed-point fractional library routines.
50364                                                             (line 1704)
50365* __fractunsdihq:                        Fixed-point fractional library routines.
50366                                                             (line 1701)
50367* __fractunsdiqq:                        Fixed-point fractional library routines.
50368                                                             (line 1700)
50369* __fractunsdisa:                        Fixed-point fractional library routines.
50370                                                             (line 1705)
50371* __fractunsdisq:                        Fixed-point fractional library routines.
50372                                                             (line 1702)
50373* __fractunsdita:                        Fixed-point fractional library routines.
50374                                                             (line 1707)
50375* __fractunsdiuda:                       Fixed-point fractional library routines.
50376                                                             (line 1718)
50377* __fractunsdiudq:                       Fixed-point fractional library routines.
50378                                                             (line 1713)
50379* __fractunsdiuha:                       Fixed-point fractional library routines.
50380                                                             (line 1715)
50381* __fractunsdiuhq:                       Fixed-point fractional library routines.
50382                                                             (line 1710)
50383* __fractunsdiuqq:                       Fixed-point fractional library routines.
50384                                                             (line 1708)
50385* __fractunsdiusa:                       Fixed-point fractional library routines.
50386                                                             (line 1717)
50387* __fractunsdiusq:                       Fixed-point fractional library routines.
50388                                                             (line 1711)
50389* __fractunsdiuta:                       Fixed-point fractional library routines.
50390                                                             (line 1720)
50391* __fractunsdqdi:                        Fixed-point fractional library routines.
50392                                                             (line 1538)
50393* __fractunsdqhi:                        Fixed-point fractional library routines.
50394                                                             (line 1536)
50395* __fractunsdqqi:                        Fixed-point fractional library routines.
50396                                                             (line 1535)
50397* __fractunsdqsi:                        Fixed-point fractional library routines.
50398                                                             (line 1537)
50399* __fractunsdqti:                        Fixed-point fractional library routines.
50400                                                             (line 1539)
50401* __fractunshadi:                        Fixed-point fractional library routines.
50402                                                             (line 1544)
50403* __fractunshahi:                        Fixed-point fractional library routines.
50404                                                             (line 1542)
50405* __fractunshaqi:                        Fixed-point fractional library routines.
50406                                                             (line 1541)
50407* __fractunshasi:                        Fixed-point fractional library routines.
50408                                                             (line 1543)
50409* __fractunshati:                        Fixed-point fractional library routines.
50410                                                             (line 1545)
50411* __fractunshida:                        Fixed-point fractional library routines.
50412                                                             (line 1662)
50413* __fractunshidq:                        Fixed-point fractional library routines.
50414                                                             (line 1659)
50415* __fractunshiha:                        Fixed-point fractional library routines.
50416                                                             (line 1660)
50417* __fractunshihq:                        Fixed-point fractional library routines.
50418                                                             (line 1657)
50419* __fractunshiqq:                        Fixed-point fractional library routines.
50420                                                             (line 1656)
50421* __fractunshisa:                        Fixed-point fractional library routines.
50422                                                             (line 1661)
50423* __fractunshisq:                        Fixed-point fractional library routines.
50424                                                             (line 1658)
50425* __fractunshita:                        Fixed-point fractional library routines.
50426                                                             (line 1663)
50427* __fractunshiuda:                       Fixed-point fractional library routines.
50428                                                             (line 1674)
50429* __fractunshiudq:                       Fixed-point fractional library routines.
50430                                                             (line 1669)
50431* __fractunshiuha:                       Fixed-point fractional library routines.
50432                                                             (line 1671)
50433* __fractunshiuhq:                       Fixed-point fractional library routines.
50434                                                             (line 1666)
50435* __fractunshiuqq:                       Fixed-point fractional library routines.
50436                                                             (line 1664)
50437* __fractunshiusa:                       Fixed-point fractional library routines.
50438                                                             (line 1673)
50439* __fractunshiusq:                       Fixed-point fractional library routines.
50440                                                             (line 1667)
50441* __fractunshiuta:                       Fixed-point fractional library routines.
50442                                                             (line 1676)
50443* __fractunshqdi:                        Fixed-point fractional library routines.
50444                                                             (line 1528)
50445* __fractunshqhi:                        Fixed-point fractional library routines.
50446                                                             (line 1526)
50447* __fractunshqqi:                        Fixed-point fractional library routines.
50448                                                             (line 1525)
50449* __fractunshqsi:                        Fixed-point fractional library routines.
50450                                                             (line 1527)
50451* __fractunshqti:                        Fixed-point fractional library routines.
50452                                                             (line 1529)
50453* __fractunsqida:                        Fixed-point fractional library routines.
50454                                                             (line 1640)
50455* __fractunsqidq:                        Fixed-point fractional library routines.
50456                                                             (line 1637)
50457* __fractunsqiha:                        Fixed-point fractional library routines.
50458                                                             (line 1638)
50459* __fractunsqihq:                        Fixed-point fractional library routines.
50460                                                             (line 1635)
50461* __fractunsqiqq:                        Fixed-point fractional library routines.
50462                                                             (line 1634)
50463* __fractunsqisa:                        Fixed-point fractional library routines.
50464                                                             (line 1639)
50465* __fractunsqisq:                        Fixed-point fractional library routines.
50466                                                             (line 1636)
50467* __fractunsqita:                        Fixed-point fractional library routines.
50468                                                             (line 1641)
50469* __fractunsqiuda:                       Fixed-point fractional library routines.
50470                                                             (line 1652)
50471* __fractunsqiudq:                       Fixed-point fractional library routines.
50472                                                             (line 1647)
50473* __fractunsqiuha:                       Fixed-point fractional library routines.
50474                                                             (line 1649)
50475* __fractunsqiuhq:                       Fixed-point fractional library routines.
50476                                                             (line 1644)
50477* __fractunsqiuqq:                       Fixed-point fractional library routines.
50478                                                             (line 1642)
50479* __fractunsqiusa:                       Fixed-point fractional library routines.
50480                                                             (line 1651)
50481* __fractunsqiusq:                       Fixed-point fractional library routines.
50482                                                             (line 1645)
50483* __fractunsqiuta:                       Fixed-point fractional library routines.
50484                                                             (line 1654)
50485* __fractunsqqdi:                        Fixed-point fractional library routines.
50486                                                             (line 1523)
50487* __fractunsqqhi:                        Fixed-point fractional library routines.
50488                                                             (line 1521)
50489* __fractunsqqqi:                        Fixed-point fractional library routines.
50490                                                             (line 1520)
50491* __fractunsqqsi:                        Fixed-point fractional library routines.
50492                                                             (line 1522)
50493* __fractunsqqti:                        Fixed-point fractional library routines.
50494                                                             (line 1524)
50495* __fractunssadi:                        Fixed-point fractional library routines.
50496                                                             (line 1549)
50497* __fractunssahi:                        Fixed-point fractional library routines.
50498                                                             (line 1547)
50499* __fractunssaqi:                        Fixed-point fractional library routines.
50500                                                             (line 1546)
50501* __fractunssasi:                        Fixed-point fractional library routines.
50502                                                             (line 1548)
50503* __fractunssati:                        Fixed-point fractional library routines.
50504                                                             (line 1550)
50505* __fractunssida:                        Fixed-point fractional library routines.
50506                                                             (line 1684)
50507* __fractunssidq:                        Fixed-point fractional library routines.
50508                                                             (line 1681)
50509* __fractunssiha:                        Fixed-point fractional library routines.
50510                                                             (line 1682)
50511* __fractunssihq:                        Fixed-point fractional library routines.
50512                                                             (line 1679)
50513* __fractunssiqq:                        Fixed-point fractional library routines.
50514                                                             (line 1678)
50515* __fractunssisa:                        Fixed-point fractional library routines.
50516                                                             (line 1683)
50517* __fractunssisq:                        Fixed-point fractional library routines.
50518                                                             (line 1680)
50519* __fractunssita:                        Fixed-point fractional library routines.
50520                                                             (line 1685)
50521* __fractunssiuda:                       Fixed-point fractional library routines.
50522                                                             (line 1696)
50523* __fractunssiudq:                       Fixed-point fractional library routines.
50524                                                             (line 1691)
50525* __fractunssiuha:                       Fixed-point fractional library routines.
50526                                                             (line 1693)
50527* __fractunssiuhq:                       Fixed-point fractional library routines.
50528                                                             (line 1688)
50529* __fractunssiuqq:                       Fixed-point fractional library routines.
50530                                                             (line 1686)
50531* __fractunssiusa:                       Fixed-point fractional library routines.
50532                                                             (line 1695)
50533* __fractunssiusq:                       Fixed-point fractional library routines.
50534                                                             (line 1689)
50535* __fractunssiuta:                       Fixed-point fractional library routines.
50536                                                             (line 1698)
50537* __fractunssqdi:                        Fixed-point fractional library routines.
50538                                                             (line 1533)
50539* __fractunssqhi:                        Fixed-point fractional library routines.
50540                                                             (line 1531)
50541* __fractunssqqi:                        Fixed-point fractional library routines.
50542                                                             (line 1530)
50543* __fractunssqsi:                        Fixed-point fractional library routines.
50544                                                             (line 1532)
50545* __fractunssqti:                        Fixed-point fractional library routines.
50546                                                             (line 1534)
50547* __fractunstadi:                        Fixed-point fractional library routines.
50548                                                             (line 1559)
50549* __fractunstahi:                        Fixed-point fractional library routines.
50550                                                             (line 1557)
50551* __fractunstaqi:                        Fixed-point fractional library routines.
50552                                                             (line 1556)
50553* __fractunstasi:                        Fixed-point fractional library routines.
50554                                                             (line 1558)
50555* __fractunstati:                        Fixed-point fractional library routines.
50556                                                             (line 1560)
50557* __fractunstida:                        Fixed-point fractional library routines.
50558                                                             (line 1729)
50559* __fractunstidq:                        Fixed-point fractional library routines.
50560                                                             (line 1725)
50561* __fractunstiha:                        Fixed-point fractional library routines.
50562                                                             (line 1727)
50563* __fractunstihq:                        Fixed-point fractional library routines.
50564                                                             (line 1723)
50565* __fractunstiqq:                        Fixed-point fractional library routines.
50566                                                             (line 1722)
50567* __fractunstisa:                        Fixed-point fractional library routines.
50568                                                             (line 1728)
50569* __fractunstisq:                        Fixed-point fractional library routines.
50570                                                             (line 1724)
50571* __fractunstita:                        Fixed-point fractional library routines.
50572                                                             (line 1730)
50573* __fractunstiuda:                       Fixed-point fractional library routines.
50574                                                             (line 1744)
50575* __fractunstiudq:                       Fixed-point fractional library routines.
50576                                                             (line 1738)
50577* __fractunstiuha:                       Fixed-point fractional library routines.
50578                                                             (line 1740)
50579* __fractunstiuhq:                       Fixed-point fractional library routines.
50580                                                             (line 1734)
50581* __fractunstiuqq:                       Fixed-point fractional library routines.
50582                                                             (line 1732)
50583* __fractunstiusa:                       Fixed-point fractional library routines.
50584                                                             (line 1742)
50585* __fractunstiusq:                       Fixed-point fractional library routines.
50586                                                             (line 1736)
50587* __fractunstiuta:                       Fixed-point fractional library routines.
50588                                                             (line 1746)
50589* __fractunsudadi:                       Fixed-point fractional library routines.
50590                                                             (line 1620)
50591* __fractunsudahi:                       Fixed-point fractional library routines.
50592                                                             (line 1616)
50593* __fractunsudaqi:                       Fixed-point fractional library routines.
50594                                                             (line 1614)
50595* __fractunsudasi:                       Fixed-point fractional library routines.
50596                                                             (line 1618)
50597* __fractunsudati:                       Fixed-point fractional library routines.
50598                                                             (line 1622)
50599* __fractunsudqdi:                       Fixed-point fractional library routines.
50600                                                             (line 1594)
50601* __fractunsudqhi:                       Fixed-point fractional library routines.
50602                                                             (line 1590)
50603* __fractunsudqqi:                       Fixed-point fractional library routines.
50604                                                             (line 1588)
50605* __fractunsudqsi:                       Fixed-point fractional library routines.
50606                                                             (line 1592)
50607* __fractunsudqti:                       Fixed-point fractional library routines.
50608                                                             (line 1596)
50609* __fractunsuhadi:                       Fixed-point fractional library routines.
50610                                                             (line 1604)
50611* __fractunsuhahi:                       Fixed-point fractional library routines.
50612                                                             (line 1600)
50613* __fractunsuhaqi:                       Fixed-point fractional library routines.
50614                                                             (line 1598)
50615* __fractunsuhasi:                       Fixed-point fractional library routines.
50616                                                             (line 1602)
50617* __fractunsuhati:                       Fixed-point fractional library routines.
50618                                                             (line 1606)
50619* __fractunsuhqdi:                       Fixed-point fractional library routines.
50620                                                             (line 1575)
50621* __fractunsuhqhi:                       Fixed-point fractional library routines.
50622                                                             (line 1573)
50623* __fractunsuhqqi:                       Fixed-point fractional library routines.
50624                                                             (line 1572)
50625* __fractunsuhqsi:                       Fixed-point fractional library routines.
50626                                                             (line 1574)
50627* __fractunsuhqti:                       Fixed-point fractional library routines.
50628                                                             (line 1576)
50629* __fractunsuqqdi:                       Fixed-point fractional library routines.
50630                                                             (line 1568)
50631* __fractunsuqqhi:                       Fixed-point fractional library routines.
50632                                                             (line 1564)
50633* __fractunsuqqqi:                       Fixed-point fractional library routines.
50634                                                             (line 1562)
50635* __fractunsuqqsi:                       Fixed-point fractional library routines.
50636                                                             (line 1566)
50637* __fractunsuqqti:                       Fixed-point fractional library routines.
50638                                                             (line 1570)
50639* __fractunsusadi:                       Fixed-point fractional library routines.
50640                                                             (line 1611)
50641* __fractunsusahi:                       Fixed-point fractional library routines.
50642                                                             (line 1609)
50643* __fractunsusaqi:                       Fixed-point fractional library routines.
50644                                                             (line 1608)
50645* __fractunsusasi:                       Fixed-point fractional library routines.
50646                                                             (line 1610)
50647* __fractunsusati:                       Fixed-point fractional library routines.
50648                                                             (line 1612)
50649* __fractunsusqdi:                       Fixed-point fractional library routines.
50650                                                             (line 1584)
50651* __fractunsusqhi:                       Fixed-point fractional library routines.
50652                                                             (line 1580)
50653* __fractunsusqqi:                       Fixed-point fractional library routines.
50654                                                             (line 1578)
50655* __fractunsusqsi:                       Fixed-point fractional library routines.
50656                                                             (line 1582)
50657* __fractunsusqti:                       Fixed-point fractional library routines.
50658                                                             (line 1586)
50659* __fractunsutadi:                       Fixed-point fractional library routines.
50660                                                             (line 1630)
50661* __fractunsutahi:                       Fixed-point fractional library routines.
50662                                                             (line 1626)
50663* __fractunsutaqi:                       Fixed-point fractional library routines.
50664                                                             (line 1624)
50665* __fractunsutasi:                       Fixed-point fractional library routines.
50666                                                             (line 1628)
50667* __fractunsutati:                       Fixed-point fractional library routines.
50668                                                             (line 1632)
50669* __fractuqqda:                          Fixed-point fractional library routines.
50670                                                             (line  671)
50671* __fractuqqdf:                          Fixed-point fractional library routines.
50672                                                             (line  694)
50673* __fractuqqdi:                          Fixed-point fractional library routines.
50674                                                             (line  691)
50675* __fractuqqdq:                          Fixed-point fractional library routines.
50676                                                             (line  667)
50677* __fractuqqha:                          Fixed-point fractional library routines.
50678                                                             (line  669)
50679* __fractuqqhi:                          Fixed-point fractional library routines.
50680                                                             (line  689)
50681* __fractuqqhq:                          Fixed-point fractional library routines.
50682                                                             (line  665)
50683* __fractuqqqi:                          Fixed-point fractional library routines.
50684                                                             (line  688)
50685* __fractuqqqq:                          Fixed-point fractional library routines.
50686                                                             (line  664)
50687* __fractuqqsa:                          Fixed-point fractional library routines.
50688                                                             (line  670)
50689* __fractuqqsf:                          Fixed-point fractional library routines.
50690                                                             (line  693)
50691* __fractuqqsi:                          Fixed-point fractional library routines.
50692                                                             (line  690)
50693* __fractuqqsq:                          Fixed-point fractional library routines.
50694                                                             (line  666)
50695* __fractuqqta:                          Fixed-point fractional library routines.
50696                                                             (line  672)
50697* __fractuqqti:                          Fixed-point fractional library routines.
50698                                                             (line  692)
50699* __fractuqquda:                         Fixed-point fractional library routines.
50700                                                             (line  684)
50701* __fractuqqudq2:                        Fixed-point fractional library routines.
50702                                                             (line  678)
50703* __fractuqquha:                         Fixed-point fractional library routines.
50704                                                             (line  680)
50705* __fractuqquhq2:                        Fixed-point fractional library routines.
50706                                                             (line  674)
50707* __fractuqqusa:                         Fixed-point fractional library routines.
50708                                                             (line  682)
50709* __fractuqqusq2:                        Fixed-point fractional library routines.
50710                                                             (line  676)
50711* __fractuqquta:                         Fixed-point fractional library routines.
50712                                                             (line  686)
50713* __fractusada:                          Fixed-point fractional library routines.
50714                                                             (line  828)
50715* __fractusadf:                          Fixed-point fractional library routines.
50716                                                             (line  849)
50717* __fractusadi:                          Fixed-point fractional library routines.
50718                                                             (line  846)
50719* __fractusadq:                          Fixed-point fractional library routines.
50720                                                             (line  825)
50721* __fractusaha:                          Fixed-point fractional library routines.
50722                                                             (line  826)
50723* __fractusahi:                          Fixed-point fractional library routines.
50724                                                             (line  844)
50725* __fractusahq:                          Fixed-point fractional library routines.
50726                                                             (line  823)
50727* __fractusaqi:                          Fixed-point fractional library routines.
50728                                                             (line  843)
50729* __fractusaqq:                          Fixed-point fractional library routines.
50730                                                             (line  822)
50731* __fractusasa:                          Fixed-point fractional library routines.
50732                                                             (line  827)
50733* __fractusasf:                          Fixed-point fractional library routines.
50734                                                             (line  848)
50735* __fractusasi:                          Fixed-point fractional library routines.
50736                                                             (line  845)
50737* __fractusasq:                          Fixed-point fractional library routines.
50738                                                             (line  824)
50739* __fractusata:                          Fixed-point fractional library routines.
50740                                                             (line  829)
50741* __fractusati:                          Fixed-point fractional library routines.
50742                                                             (line  847)
50743* __fractusauda2:                        Fixed-point fractional library routines.
50744                                                             (line  839)
50745* __fractusaudq:                         Fixed-point fractional library routines.
50746                                                             (line  835)
50747* __fractusauha2:                        Fixed-point fractional library routines.
50748                                                             (line  837)
50749* __fractusauhq:                         Fixed-point fractional library routines.
50750                                                             (line  832)
50751* __fractusauqq:                         Fixed-point fractional library routines.
50752                                                             (line  830)
50753* __fractusausq:                         Fixed-point fractional library routines.
50754                                                             (line  833)
50755* __fractusauta2:                        Fixed-point fractional library routines.
50756                                                             (line  841)
50757* __fractusqda:                          Fixed-point fractional library routines.
50758                                                             (line  730)
50759* __fractusqdf:                          Fixed-point fractional library routines.
50760                                                             (line  753)
50761* __fractusqdi:                          Fixed-point fractional library routines.
50762                                                             (line  750)
50763* __fractusqdq:                          Fixed-point fractional library routines.
50764                                                             (line  726)
50765* __fractusqha:                          Fixed-point fractional library routines.
50766                                                             (line  728)
50767* __fractusqhi:                          Fixed-point fractional library routines.
50768                                                             (line  748)
50769* __fractusqhq:                          Fixed-point fractional library routines.
50770                                                             (line  724)
50771* __fractusqqi:                          Fixed-point fractional library routines.
50772                                                             (line  747)
50773* __fractusqqq:                          Fixed-point fractional library routines.
50774                                                             (line  723)
50775* __fractusqsa:                          Fixed-point fractional library routines.
50776                                                             (line  729)
50777* __fractusqsf:                          Fixed-point fractional library routines.
50778                                                             (line  752)
50779* __fractusqsi:                          Fixed-point fractional library routines.
50780                                                             (line  749)
50781* __fractusqsq:                          Fixed-point fractional library routines.
50782                                                             (line  725)
50783* __fractusqta:                          Fixed-point fractional library routines.
50784                                                             (line  731)
50785* __fractusqti:                          Fixed-point fractional library routines.
50786                                                             (line  751)
50787* __fractusquda:                         Fixed-point fractional library routines.
50788                                                             (line  743)
50789* __fractusqudq2:                        Fixed-point fractional library routines.
50790                                                             (line  737)
50791* __fractusquha:                         Fixed-point fractional library routines.
50792                                                             (line  739)
50793* __fractusquhq2:                        Fixed-point fractional library routines.
50794                                                             (line  735)
50795* __fractusquqq2:                        Fixed-point fractional library routines.
50796                                                             (line  733)
50797* __fractusqusa:                         Fixed-point fractional library routines.
50798                                                             (line  741)
50799* __fractusquta:                         Fixed-point fractional library routines.
50800                                                             (line  745)
50801* __fractutada:                          Fixed-point fractional library routines.
50802                                                             (line  891)
50803* __fractutadf:                          Fixed-point fractional library routines.
50804                                                             (line  917)
50805* __fractutadi:                          Fixed-point fractional library routines.
50806                                                             (line  913)
50807* __fractutadq:                          Fixed-point fractional library routines.
50808                                                             (line  886)
50809* __fractutaha:                          Fixed-point fractional library routines.
50810                                                             (line  888)
50811* __fractutahi:                          Fixed-point fractional library routines.
50812                                                             (line  911)
50813* __fractutahq:                          Fixed-point fractional library routines.
50814                                                             (line  883)
50815* __fractutaqi:                          Fixed-point fractional library routines.
50816                                                             (line  909)
50817* __fractutaqq:                          Fixed-point fractional library routines.
50818                                                             (line  881)
50819* __fractutasa:                          Fixed-point fractional library routines.
50820                                                             (line  890)
50821* __fractutasf:                          Fixed-point fractional library routines.
50822                                                             (line  916)
50823* __fractutasi:                          Fixed-point fractional library routines.
50824                                                             (line  912)
50825* __fractutasq:                          Fixed-point fractional library routines.
50826                                                             (line  884)
50827* __fractutata:                          Fixed-point fractional library routines.
50828                                                             (line  893)
50829* __fractutati:                          Fixed-point fractional library routines.
50830                                                             (line  914)
50831* __fractutauda2:                        Fixed-point fractional library routines.
50832                                                             (line  907)
50833* __fractutaudq:                         Fixed-point fractional library routines.
50834                                                             (line  901)
50835* __fractutauha2:                        Fixed-point fractional library routines.
50836                                                             (line  903)
50837* __fractutauhq:                         Fixed-point fractional library routines.
50838                                                             (line  897)
50839* __fractutauqq:                         Fixed-point fractional library routines.
50840                                                             (line  895)
50841* __fractutausa2:                        Fixed-point fractional library routines.
50842                                                             (line  905)
50843* __fractutausq:                         Fixed-point fractional library routines.
50844                                                             (line  899)
50845* __gedf2:                               Soft float library routines.
50846                                                             (line  205)
50847* __gesf2:                               Soft float library routines.
50848                                                             (line  204)
50849* __getf2:                               Soft float library routines.
50850                                                             (line  206)
50851* __gtdf2:                               Soft float library routines.
50852                                                             (line  223)
50853* __gtsf2:                               Soft float library routines.
50854                                                             (line  222)
50855* __gttf2:                               Soft float library routines.
50856                                                             (line  224)
50857* __ledf2:                               Soft float library routines.
50858                                                             (line  217)
50859* __lesf2:                               Soft float library routines.
50860                                                             (line  216)
50861* __letf2:                               Soft float library routines.
50862                                                             (line  218)
50863* __lshrdi3:                             Integer library routines.
50864                                                             (line   30)
50865* __lshrsi3:                             Integer library routines.
50866                                                             (line   29)
50867* __lshrti3:                             Integer library routines.
50868                                                             (line   31)
50869* __lshruda3:                            Fixed-point fractional library routines.
50870                                                             (line  388)
50871* __lshrudq3:                            Fixed-point fractional library routines.
50872                                                             (line  382)
50873* __lshruha3:                            Fixed-point fractional library routines.
50874                                                             (line  384)
50875* __lshruhq3:                            Fixed-point fractional library routines.
50876                                                             (line  378)
50877* __lshruqq3:                            Fixed-point fractional library routines.
50878                                                             (line  376)
50879* __lshrusa3:                            Fixed-point fractional library routines.
50880                                                             (line  386)
50881* __lshrusq3:                            Fixed-point fractional library routines.
50882                                                             (line  380)
50883* __lshruta3:                            Fixed-point fractional library routines.
50884                                                             (line  390)
50885* __ltdf2:                               Soft float library routines.
50886                                                             (line  211)
50887* __ltsf2:                               Soft float library routines.
50888                                                             (line  210)
50889* __lttf2:                               Soft float library routines.
50890                                                             (line  212)
50891* __main:                                Collect2.           (line   15)
50892* __moddi3:                              Integer library routines.
50893                                                             (line   36)
50894* __modsi3:                              Integer library routines.
50895                                                             (line   35)
50896* __modti3:                              Integer library routines.
50897                                                             (line   37)
50898* __morestack_current_segment:           Miscellaneous routines.
50899                                                             (line   45)
50900* __morestack_initial_sp:                Miscellaneous routines.
50901                                                             (line   46)
50902* __morestack_segments:                  Miscellaneous routines.
50903                                                             (line   44)
50904* __mulda3:                              Fixed-point fractional library routines.
50905                                                             (line  170)
50906* __muldc3:                              Soft float library routines.
50907                                                             (line  239)
50908* __muldf3:                              Soft float library routines.
50909                                                             (line   39)
50910* __muldi3:                              Integer library routines.
50911                                                             (line   42)
50912* __muldq3:                              Fixed-point fractional library routines.
50913                                                             (line  157)
50914* __mulha3:                              Fixed-point fractional library routines.
50915                                                             (line  167)
50916* __mulhq3:                              Fixed-point fractional library routines.
50917                                                             (line  155)
50918* __mulqq3:                              Fixed-point fractional library routines.
50919                                                             (line  153)
50920* __mulsa3:                              Fixed-point fractional library routines.
50921                                                             (line  169)
50922* __mulsc3:                              Soft float library routines.
50923                                                             (line  237)
50924* __mulsf3:                              Soft float library routines.
50925                                                             (line   38)
50926* __mulsi3:                              Integer library routines.
50927                                                             (line   41)
50928* __mulsq3:                              Fixed-point fractional library routines.
50929                                                             (line  156)
50930* __multa3:                              Fixed-point fractional library routines.
50931                                                             (line  171)
50932* __multc3:                              Soft float library routines.
50933                                                             (line  241)
50934* __multf3:                              Soft float library routines.
50935                                                             (line   40)
50936* __multi3:                              Integer library routines.
50937                                                             (line   43)
50938* __muluda3:                             Fixed-point fractional library routines.
50939                                                             (line  177)
50940* __muludq3:                             Fixed-point fractional library routines.
50941                                                             (line  165)
50942* __muluha3:                             Fixed-point fractional library routines.
50943                                                             (line  173)
50944* __muluhq3:                             Fixed-point fractional library routines.
50945                                                             (line  161)
50946* __muluqq3:                             Fixed-point fractional library routines.
50947                                                             (line  159)
50948* __mulusa3:                             Fixed-point fractional library routines.
50949                                                             (line  175)
50950* __mulusq3:                             Fixed-point fractional library routines.
50951                                                             (line  163)
50952* __muluta3:                             Fixed-point fractional library routines.
50953                                                             (line  179)
50954* __mulvdi3:                             Integer library routines.
50955                                                             (line  114)
50956* __mulvsi3:                             Integer library routines.
50957                                                             (line  113)
50958* __mulxc3:                              Soft float library routines.
50959                                                             (line  243)
50960* __mulxf3:                              Soft float library routines.
50961                                                             (line   42)
50962* __nedf2:                               Soft float library routines.
50963                                                             (line  199)
50964* __negda2:                              Fixed-point fractional library routines.
50965                                                             (line  298)
50966* __negdf2:                              Soft float library routines.
50967                                                             (line   55)
50968* __negdi2:                              Integer library routines.
50969                                                             (line   46)
50970* __negdq2:                              Fixed-point fractional library routines.
50971                                                             (line  288)
50972* __negha2:                              Fixed-point fractional library routines.
50973                                                             (line  296)
50974* __neghq2:                              Fixed-point fractional library routines.
50975                                                             (line  286)
50976* __negqq2:                              Fixed-point fractional library routines.
50977                                                             (line  285)
50978* __negsa2:                              Fixed-point fractional library routines.
50979                                                             (line  297)
50980* __negsf2:                              Soft float library routines.
50981                                                             (line   54)
50982* __negsq2:                              Fixed-point fractional library routines.
50983                                                             (line  287)
50984* __negta2:                              Fixed-point fractional library routines.
50985                                                             (line  299)
50986* __negtf2:                              Soft float library routines.
50987                                                             (line   56)
50988* __negti2:                              Integer library routines.
50989                                                             (line   47)
50990* __neguda2:                             Fixed-point fractional library routines.
50991                                                             (line  303)
50992* __negudq2:                             Fixed-point fractional library routines.
50993                                                             (line  294)
50994* __neguha2:                             Fixed-point fractional library routines.
50995                                                             (line  300)
50996* __neguhq2:                             Fixed-point fractional library routines.
50997                                                             (line  291)
50998* __neguqq2:                             Fixed-point fractional library routines.
50999                                                             (line  289)
51000* __negusa2:                             Fixed-point fractional library routines.
51001                                                             (line  302)
51002* __negusq2:                             Fixed-point fractional library routines.
51003                                                             (line  292)
51004* __neguta2:                             Fixed-point fractional library routines.
51005                                                             (line  305)
51006* __negvdi2:                             Integer library routines.
51007                                                             (line  118)
51008* __negvsi2:                             Integer library routines.
51009                                                             (line  117)
51010* __negxf2:                              Soft float library routines.
51011                                                             (line   57)
51012* __nesf2:                               Soft float library routines.
51013                                                             (line  198)
51014* __netf2:                               Soft float library routines.
51015                                                             (line  200)
51016* __paritydi2:                           Integer library routines.
51017                                                             (line  150)
51018* __paritysi2:                           Integer library routines.
51019                                                             (line  149)
51020* __parityti2:                           Integer library routines.
51021                                                             (line  151)
51022* __popcountdi2:                         Integer library routines.
51023                                                             (line  156)
51024* __popcountsi2:                         Integer library routines.
51025                                                             (line  155)
51026* __popcountti2:                         Integer library routines.
51027                                                             (line  157)
51028* __powidf2:                             Soft float library routines.
51029                                                             (line  232)
51030* __powisf2:                             Soft float library routines.
51031                                                             (line  231)
51032* __powitf2:                             Soft float library routines.
51033                                                             (line  233)
51034* __powixf2:                             Soft float library routines.
51035                                                             (line  234)
51036* __satfractdadq:                        Fixed-point fractional library routines.
51037                                                             (line 1152)
51038* __satfractdaha2:                       Fixed-point fractional library routines.
51039                                                             (line 1153)
51040* __satfractdahq:                        Fixed-point fractional library routines.
51041                                                             (line 1150)
51042* __satfractdaqq:                        Fixed-point fractional library routines.
51043                                                             (line 1149)
51044* __satfractdasa2:                       Fixed-point fractional library routines.
51045                                                             (line 1154)
51046* __satfractdasq:                        Fixed-point fractional library routines.
51047                                                             (line 1151)
51048* __satfractdata2:                       Fixed-point fractional library routines.
51049                                                             (line 1155)
51050* __satfractdauda:                       Fixed-point fractional library routines.
51051                                                             (line 1165)
51052* __satfractdaudq:                       Fixed-point fractional library routines.
51053                                                             (line 1160)
51054* __satfractdauha:                       Fixed-point fractional library routines.
51055                                                             (line 1162)
51056* __satfractdauhq:                       Fixed-point fractional library routines.
51057                                                             (line 1158)
51058* __satfractdauqq:                       Fixed-point fractional library routines.
51059                                                             (line 1156)
51060* __satfractdausa:                       Fixed-point fractional library routines.
51061                                                             (line 1164)
51062* __satfractdausq:                       Fixed-point fractional library routines.
51063                                                             (line 1159)
51064* __satfractdauta:                       Fixed-point fractional library routines.
51065                                                             (line 1166)
51066* __satfractdfda:                        Fixed-point fractional library routines.
51067                                                             (line 1505)
51068* __satfractdfdq:                        Fixed-point fractional library routines.
51069                                                             (line 1502)
51070* __satfractdfha:                        Fixed-point fractional library routines.
51071                                                             (line 1503)
51072* __satfractdfhq:                        Fixed-point fractional library routines.
51073                                                             (line 1500)
51074* __satfractdfqq:                        Fixed-point fractional library routines.
51075                                                             (line 1499)
51076* __satfractdfsa:                        Fixed-point fractional library routines.
51077                                                             (line 1504)
51078* __satfractdfsq:                        Fixed-point fractional library routines.
51079                                                             (line 1501)
51080* __satfractdfta:                        Fixed-point fractional library routines.
51081                                                             (line 1506)
51082* __satfractdfuda:                       Fixed-point fractional library routines.
51083                                                             (line 1514)
51084* __satfractdfudq:                       Fixed-point fractional library routines.
51085                                                             (line 1510)
51086* __satfractdfuha:                       Fixed-point fractional library routines.
51087                                                             (line 1512)
51088* __satfractdfuhq:                       Fixed-point fractional library routines.
51089                                                             (line 1508)
51090* __satfractdfuqq:                       Fixed-point fractional library routines.
51091                                                             (line 1507)
51092* __satfractdfusa:                       Fixed-point fractional library routines.
51093                                                             (line 1513)
51094* __satfractdfusq:                       Fixed-point fractional library routines.
51095                                                             (line 1509)
51096* __satfractdfuta:                       Fixed-point fractional library routines.
51097                                                             (line 1515)
51098* __satfractdida:                        Fixed-point fractional library routines.
51099                                                             (line 1455)
51100* __satfractdidq:                        Fixed-point fractional library routines.
51101                                                             (line 1452)
51102* __satfractdiha:                        Fixed-point fractional library routines.
51103                                                             (line 1453)
51104* __satfractdihq:                        Fixed-point fractional library routines.
51105                                                             (line 1450)
51106* __satfractdiqq:                        Fixed-point fractional library routines.
51107                                                             (line 1449)
51108* __satfractdisa:                        Fixed-point fractional library routines.
51109                                                             (line 1454)
51110* __satfractdisq:                        Fixed-point fractional library routines.
51111                                                             (line 1451)
51112* __satfractdita:                        Fixed-point fractional library routines.
51113                                                             (line 1456)
51114* __satfractdiuda:                       Fixed-point fractional library routines.
51115                                                             (line 1463)
51116* __satfractdiudq:                       Fixed-point fractional library routines.
51117                                                             (line 1460)
51118* __satfractdiuha:                       Fixed-point fractional library routines.
51119                                                             (line 1461)
51120* __satfractdiuhq:                       Fixed-point fractional library routines.
51121                                                             (line 1458)
51122* __satfractdiuqq:                       Fixed-point fractional library routines.
51123                                                             (line 1457)
51124* __satfractdiusa:                       Fixed-point fractional library routines.
51125                                                             (line 1462)
51126* __satfractdiusq:                       Fixed-point fractional library routines.
51127                                                             (line 1459)
51128* __satfractdiuta:                       Fixed-point fractional library routines.
51129                                                             (line 1464)
51130* __satfractdqda:                        Fixed-point fractional library routines.
51131                                                             (line 1097)
51132* __satfractdqha:                        Fixed-point fractional library routines.
51133                                                             (line 1095)
51134* __satfractdqhq2:                       Fixed-point fractional library routines.
51135                                                             (line 1093)
51136* __satfractdqqq2:                       Fixed-point fractional library routines.
51137                                                             (line 1092)
51138* __satfractdqsa:                        Fixed-point fractional library routines.
51139                                                             (line 1096)
51140* __satfractdqsq2:                       Fixed-point fractional library routines.
51141                                                             (line 1094)
51142* __satfractdqta:                        Fixed-point fractional library routines.
51143                                                             (line 1098)
51144* __satfractdquda:                       Fixed-point fractional library routines.
51145                                                             (line 1109)
51146* __satfractdqudq:                       Fixed-point fractional library routines.
51147                                                             (line 1104)
51148* __satfractdquha:                       Fixed-point fractional library routines.
51149                                                             (line 1106)
51150* __satfractdquhq:                       Fixed-point fractional library routines.
51151                                                             (line 1101)
51152* __satfractdquqq:                       Fixed-point fractional library routines.
51153                                                             (line 1099)
51154* __satfractdqusa:                       Fixed-point fractional library routines.
51155                                                             (line 1108)
51156* __satfractdqusq:                       Fixed-point fractional library routines.
51157                                                             (line 1102)
51158* __satfractdquta:                       Fixed-point fractional library routines.
51159                                                             (line 1111)
51160* __satfracthada2:                       Fixed-point fractional library routines.
51161                                                             (line 1118)
51162* __satfracthadq:                        Fixed-point fractional library routines.
51163                                                             (line 1116)
51164* __satfracthahq:                        Fixed-point fractional library routines.
51165                                                             (line 1114)
51166* __satfracthaqq:                        Fixed-point fractional library routines.
51167                                                             (line 1113)
51168* __satfracthasa2:                       Fixed-point fractional library routines.
51169                                                             (line 1117)
51170* __satfracthasq:                        Fixed-point fractional library routines.
51171                                                             (line 1115)
51172* __satfracthata2:                       Fixed-point fractional library routines.
51173                                                             (line 1119)
51174* __satfracthauda:                       Fixed-point fractional library routines.
51175                                                             (line 1130)
51176* __satfracthaudq:                       Fixed-point fractional library routines.
51177                                                             (line 1125)
51178* __satfracthauha:                       Fixed-point fractional library routines.
51179                                                             (line 1127)
51180* __satfracthauhq:                       Fixed-point fractional library routines.
51181                                                             (line 1122)
51182* __satfracthauqq:                       Fixed-point fractional library routines.
51183                                                             (line 1120)
51184* __satfracthausa:                       Fixed-point fractional library routines.
51185                                                             (line 1129)
51186* __satfracthausq:                       Fixed-point fractional library routines.
51187                                                             (line 1123)
51188* __satfracthauta:                       Fixed-point fractional library routines.
51189                                                             (line 1132)
51190* __satfracthida:                        Fixed-point fractional library routines.
51191                                                             (line 1423)
51192* __satfracthidq:                        Fixed-point fractional library routines.
51193                                                             (line 1420)
51194* __satfracthiha:                        Fixed-point fractional library routines.
51195                                                             (line 1421)
51196* __satfracthihq:                        Fixed-point fractional library routines.
51197                                                             (line 1418)
51198* __satfracthiqq:                        Fixed-point fractional library routines.
51199                                                             (line 1417)
51200* __satfracthisa:                        Fixed-point fractional library routines.
51201                                                             (line 1422)
51202* __satfracthisq:                        Fixed-point fractional library routines.
51203                                                             (line 1419)
51204* __satfracthita:                        Fixed-point fractional library routines.
51205                                                             (line 1424)
51206* __satfracthiuda:                       Fixed-point fractional library routines.
51207                                                             (line 1431)
51208* __satfracthiudq:                       Fixed-point fractional library routines.
51209                                                             (line 1428)
51210* __satfracthiuha:                       Fixed-point fractional library routines.
51211                                                             (line 1429)
51212* __satfracthiuhq:                       Fixed-point fractional library routines.
51213                                                             (line 1426)
51214* __satfracthiuqq:                       Fixed-point fractional library routines.
51215                                                             (line 1425)
51216* __satfracthiusa:                       Fixed-point fractional library routines.
51217                                                             (line 1430)
51218* __satfracthiusq:                       Fixed-point fractional library routines.
51219                                                             (line 1427)
51220* __satfracthiuta:                       Fixed-point fractional library routines.
51221                                                             (line 1432)
51222* __satfracthqda:                        Fixed-point fractional library routines.
51223                                                             (line 1063)
51224* __satfracthqdq2:                       Fixed-point fractional library routines.
51225                                                             (line 1060)
51226* __satfracthqha:                        Fixed-point fractional library routines.
51227                                                             (line 1061)
51228* __satfracthqqq2:                       Fixed-point fractional library routines.
51229                                                             (line 1058)
51230* __satfracthqsa:                        Fixed-point fractional library routines.
51231                                                             (line 1062)
51232* __satfracthqsq2:                       Fixed-point fractional library routines.
51233                                                             (line 1059)
51234* __satfracthqta:                        Fixed-point fractional library routines.
51235                                                             (line 1064)
51236* __satfracthquda:                       Fixed-point fractional library routines.
51237                                                             (line 1071)
51238* __satfracthqudq:                       Fixed-point fractional library routines.
51239                                                             (line 1068)
51240* __satfracthquha:                       Fixed-point fractional library routines.
51241                                                             (line 1069)
51242* __satfracthquhq:                       Fixed-point fractional library routines.
51243                                                             (line 1066)
51244* __satfracthquqq:                       Fixed-point fractional library routines.
51245                                                             (line 1065)
51246* __satfracthqusa:                       Fixed-point fractional library routines.
51247                                                             (line 1070)
51248* __satfracthqusq:                       Fixed-point fractional library routines.
51249                                                             (line 1067)
51250* __satfracthquta:                       Fixed-point fractional library routines.
51251                                                             (line 1072)
51252* __satfractqida:                        Fixed-point fractional library routines.
51253                                                             (line 1401)
51254* __satfractqidq:                        Fixed-point fractional library routines.
51255                                                             (line 1398)
51256* __satfractqiha:                        Fixed-point fractional library routines.
51257                                                             (line 1399)
51258* __satfractqihq:                        Fixed-point fractional library routines.
51259                                                             (line 1396)
51260* __satfractqiqq:                        Fixed-point fractional library routines.
51261                                                             (line 1395)
51262* __satfractqisa:                        Fixed-point fractional library routines.
51263                                                             (line 1400)
51264* __satfractqisq:                        Fixed-point fractional library routines.
51265                                                             (line 1397)
51266* __satfractqita:                        Fixed-point fractional library routines.
51267                                                             (line 1402)
51268* __satfractqiuda:                       Fixed-point fractional library routines.
51269                                                             (line 1413)
51270* __satfractqiudq:                       Fixed-point fractional library routines.
51271                                                             (line 1408)
51272* __satfractqiuha:                       Fixed-point fractional library routines.
51273                                                             (line 1410)
51274* __satfractqiuhq:                       Fixed-point fractional library routines.
51275                                                             (line 1405)
51276* __satfractqiuqq:                       Fixed-point fractional library routines.
51277                                                             (line 1403)
51278* __satfractqiusa:                       Fixed-point fractional library routines.
51279                                                             (line 1412)
51280* __satfractqiusq:                       Fixed-point fractional library routines.
51281                                                             (line 1406)
51282* __satfractqiuta:                       Fixed-point fractional library routines.
51283                                                             (line 1415)
51284* __satfractqqda:                        Fixed-point fractional library routines.
51285                                                             (line 1042)
51286* __satfractqqdq2:                       Fixed-point fractional library routines.
51287                                                             (line 1039)
51288* __satfractqqha:                        Fixed-point fractional library routines.
51289                                                             (line 1040)
51290* __satfractqqhq2:                       Fixed-point fractional library routines.
51291                                                             (line 1037)
51292* __satfractqqsa:                        Fixed-point fractional library routines.
51293                                                             (line 1041)
51294* __satfractqqsq2:                       Fixed-point fractional library routines.
51295                                                             (line 1038)
51296* __satfractqqta:                        Fixed-point fractional library routines.
51297                                                             (line 1043)
51298* __satfractqquda:                       Fixed-point fractional library routines.
51299                                                             (line 1054)
51300* __satfractqqudq:                       Fixed-point fractional library routines.
51301                                                             (line 1049)
51302* __satfractqquha:                       Fixed-point fractional library routines.
51303                                                             (line 1051)
51304* __satfractqquhq:                       Fixed-point fractional library routines.
51305                                                             (line 1046)
51306* __satfractqquqq:                       Fixed-point fractional library routines.
51307                                                             (line 1044)
51308* __satfractqqusa:                       Fixed-point fractional library routines.
51309                                                             (line 1053)
51310* __satfractqqusq:                       Fixed-point fractional library routines.
51311                                                             (line 1047)
51312* __satfractqquta:                       Fixed-point fractional library routines.
51313                                                             (line 1056)
51314* __satfractsada2:                       Fixed-point fractional library routines.
51315                                                             (line 1139)
51316* __satfractsadq:                        Fixed-point fractional library routines.
51317                                                             (line 1137)
51318* __satfractsaha2:                       Fixed-point fractional library routines.
51319                                                             (line 1138)
51320* __satfractsahq:                        Fixed-point fractional library routines.
51321                                                             (line 1135)
51322* __satfractsaqq:                        Fixed-point fractional library routines.
51323                                                             (line 1134)
51324* __satfractsasq:                        Fixed-point fractional library routines.
51325                                                             (line 1136)
51326* __satfractsata2:                       Fixed-point fractional library routines.
51327                                                             (line 1140)
51328* __satfractsauda:                       Fixed-point fractional library routines.
51329                                                             (line 1147)
51330* __satfractsaudq:                       Fixed-point fractional library routines.
51331                                                             (line 1144)
51332* __satfractsauha:                       Fixed-point fractional library routines.
51333                                                             (line 1145)
51334* __satfractsauhq:                       Fixed-point fractional library routines.
51335                                                             (line 1142)
51336* __satfractsauqq:                       Fixed-point fractional library routines.
51337                                                             (line 1141)
51338* __satfractsausa:                       Fixed-point fractional library routines.
51339                                                             (line 1146)
51340* __satfractsausq:                       Fixed-point fractional library routines.
51341                                                             (line 1143)
51342* __satfractsauta:                       Fixed-point fractional library routines.
51343                                                             (line 1148)
51344* __satfractsfda:                        Fixed-point fractional library routines.
51345                                                             (line 1489)
51346* __satfractsfdq:                        Fixed-point fractional library routines.
51347                                                             (line 1486)
51348* __satfractsfha:                        Fixed-point fractional library routines.
51349                                                             (line 1487)
51350* __satfractsfhq:                        Fixed-point fractional library routines.
51351                                                             (line 1484)
51352* __satfractsfqq:                        Fixed-point fractional library routines.
51353                                                             (line 1483)
51354* __satfractsfsa:                        Fixed-point fractional library routines.
51355                                                             (line 1488)
51356* __satfractsfsq:                        Fixed-point fractional library routines.
51357                                                             (line 1485)
51358* __satfractsfta:                        Fixed-point fractional library routines.
51359                                                             (line 1490)
51360* __satfractsfuda:                       Fixed-point fractional library routines.
51361                                                             (line 1497)
51362* __satfractsfudq:                       Fixed-point fractional library routines.
51363                                                             (line 1494)
51364* __satfractsfuha:                       Fixed-point fractional library routines.
51365                                                             (line 1495)
51366* __satfractsfuhq:                       Fixed-point fractional library routines.
51367                                                             (line 1492)
51368* __satfractsfuqq:                       Fixed-point fractional library routines.
51369                                                             (line 1491)
51370* __satfractsfusa:                       Fixed-point fractional library routines.
51371                                                             (line 1496)
51372* __satfractsfusq:                       Fixed-point fractional library routines.
51373                                                             (line 1493)
51374* __satfractsfuta:                       Fixed-point fractional library routines.
51375                                                             (line 1498)
51376* __satfractsida:                        Fixed-point fractional library routines.
51377                                                             (line 1439)
51378* __satfractsidq:                        Fixed-point fractional library routines.
51379                                                             (line 1436)
51380* __satfractsiha:                        Fixed-point fractional library routines.
51381                                                             (line 1437)
51382* __satfractsihq:                        Fixed-point fractional library routines.
51383                                                             (line 1434)
51384* __satfractsiqq:                        Fixed-point fractional library routines.
51385                                                             (line 1433)
51386* __satfractsisa:                        Fixed-point fractional library routines.
51387                                                             (line 1438)
51388* __satfractsisq:                        Fixed-point fractional library routines.
51389                                                             (line 1435)
51390* __satfractsita:                        Fixed-point fractional library routines.
51391                                                             (line 1440)
51392* __satfractsiuda:                       Fixed-point fractional library routines.
51393                                                             (line 1447)
51394* __satfractsiudq:                       Fixed-point fractional library routines.
51395                                                             (line 1444)
51396* __satfractsiuha:                       Fixed-point fractional library routines.
51397                                                             (line 1445)
51398* __satfractsiuhq:                       Fixed-point fractional library routines.
51399                                                             (line 1442)
51400* __satfractsiuqq:                       Fixed-point fractional library routines.
51401                                                             (line 1441)
51402* __satfractsiusa:                       Fixed-point fractional library routines.
51403                                                             (line 1446)
51404* __satfractsiusq:                       Fixed-point fractional library routines.
51405                                                             (line 1443)
51406* __satfractsiuta:                       Fixed-point fractional library routines.
51407                                                             (line 1448)
51408* __satfractsqda:                        Fixed-point fractional library routines.
51409                                                             (line 1078)
51410* __satfractsqdq2:                       Fixed-point fractional library routines.
51411                                                             (line 1075)
51412* __satfractsqha:                        Fixed-point fractional library routines.
51413                                                             (line 1076)
51414* __satfractsqhq2:                       Fixed-point fractional library routines.
51415                                                             (line 1074)
51416* __satfractsqqq2:                       Fixed-point fractional library routines.
51417                                                             (line 1073)
51418* __satfractsqsa:                        Fixed-point fractional library routines.
51419                                                             (line 1077)
51420* __satfractsqta:                        Fixed-point fractional library routines.
51421                                                             (line 1079)
51422* __satfractsquda:                       Fixed-point fractional library routines.
51423                                                             (line 1089)
51424* __satfractsqudq:                       Fixed-point fractional library routines.
51425                                                             (line 1084)
51426* __satfractsquha:                       Fixed-point fractional library routines.
51427                                                             (line 1086)
51428* __satfractsquhq:                       Fixed-point fractional library routines.
51429                                                             (line 1082)
51430* __satfractsquqq:                       Fixed-point fractional library routines.
51431                                                             (line 1080)
51432* __satfractsqusa:                       Fixed-point fractional library routines.
51433                                                             (line 1088)
51434* __satfractsqusq:                       Fixed-point fractional library routines.
51435                                                             (line 1083)
51436* __satfractsquta:                       Fixed-point fractional library routines.
51437                                                             (line 1090)
51438* __satfracttada2:                       Fixed-point fractional library routines.
51439                                                             (line 1174)
51440* __satfracttadq:                        Fixed-point fractional library routines.
51441                                                             (line 1171)
51442* __satfracttaha2:                       Fixed-point fractional library routines.
51443                                                             (line 1172)
51444* __satfracttahq:                        Fixed-point fractional library routines.
51445                                                             (line 1169)
51446* __satfracttaqq:                        Fixed-point fractional library routines.
51447                                                             (line 1168)
51448* __satfracttasa2:                       Fixed-point fractional library routines.
51449                                                             (line 1173)
51450* __satfracttasq:                        Fixed-point fractional library routines.
51451                                                             (line 1170)
51452* __satfracttauda:                       Fixed-point fractional library routines.
51453                                                             (line 1185)
51454* __satfracttaudq:                       Fixed-point fractional library routines.
51455                                                             (line 1180)
51456* __satfracttauha:                       Fixed-point fractional library routines.
51457                                                             (line 1182)
51458* __satfracttauhq:                       Fixed-point fractional library routines.
51459                                                             (line 1177)
51460* __satfracttauqq:                       Fixed-point fractional library routines.
51461                                                             (line 1175)
51462* __satfracttausa:                       Fixed-point fractional library routines.
51463                                                             (line 1184)
51464* __satfracttausq:                       Fixed-point fractional library routines.
51465                                                             (line 1178)
51466* __satfracttauta:                       Fixed-point fractional library routines.
51467                                                             (line 1187)
51468* __satfracttida:                        Fixed-point fractional library routines.
51469                                                             (line 1471)
51470* __satfracttidq:                        Fixed-point fractional library routines.
51471                                                             (line 1468)
51472* __satfracttiha:                        Fixed-point fractional library routines.
51473                                                             (line 1469)
51474* __satfracttihq:                        Fixed-point fractional library routines.
51475                                                             (line 1466)
51476* __satfracttiqq:                        Fixed-point fractional library routines.
51477                                                             (line 1465)
51478* __satfracttisa:                        Fixed-point fractional library routines.
51479                                                             (line 1470)
51480* __satfracttisq:                        Fixed-point fractional library routines.
51481                                                             (line 1467)
51482* __satfracttita:                        Fixed-point fractional library routines.
51483                                                             (line 1472)
51484* __satfracttiuda:                       Fixed-point fractional library routines.
51485                                                             (line 1480)
51486* __satfracttiudq:                       Fixed-point fractional library routines.
51487                                                             (line 1476)
51488* __satfracttiuha:                       Fixed-point fractional library routines.
51489                                                             (line 1478)
51490* __satfracttiuhq:                       Fixed-point fractional library routines.
51491                                                             (line 1474)
51492* __satfracttiuqq:                       Fixed-point fractional library routines.
51493                                                             (line 1473)
51494* __satfracttiusa:                       Fixed-point fractional library routines.
51495                                                             (line 1479)
51496* __satfracttiusq:                       Fixed-point fractional library routines.
51497                                                             (line 1475)
51498* __satfracttiuta:                       Fixed-point fractional library routines.
51499                                                             (line 1481)
51500* __satfractudada:                       Fixed-point fractional library routines.
51501                                                             (line 1350)
51502* __satfractudadq:                       Fixed-point fractional library routines.
51503                                                             (line 1345)
51504* __satfractudaha:                       Fixed-point fractional library routines.
51505                                                             (line 1347)
51506* __satfractudahq:                       Fixed-point fractional library routines.
51507                                                             (line 1343)
51508* __satfractudaqq:                       Fixed-point fractional library routines.
51509                                                             (line 1341)
51510* __satfractudasa:                       Fixed-point fractional library routines.
51511                                                             (line 1349)
51512* __satfractudasq:                       Fixed-point fractional library routines.
51513                                                             (line 1344)
51514* __satfractudata:                       Fixed-point fractional library routines.
51515                                                             (line 1351)
51516* __satfractudaudq:                      Fixed-point fractional library routines.
51517                                                             (line 1359)
51518* __satfractudauha2:                     Fixed-point fractional library routines.
51519                                                             (line 1361)
51520* __satfractudauhq:                      Fixed-point fractional library routines.
51521                                                             (line 1355)
51522* __satfractudauqq:                      Fixed-point fractional library routines.
51523                                                             (line 1353)
51524* __satfractudausa2:                     Fixed-point fractional library routines.
51525                                                             (line 1363)
51526* __satfractudausq:                      Fixed-point fractional library routines.
51527                                                             (line 1357)
51528* __satfractudauta2:                     Fixed-point fractional library routines.
51529                                                             (line 1365)
51530* __satfractudqda:                       Fixed-point fractional library routines.
51531                                                             (line 1274)
51532* __satfractudqdq:                       Fixed-point fractional library routines.
51533                                                             (line 1269)
51534* __satfractudqha:                       Fixed-point fractional library routines.
51535                                                             (line 1271)
51536* __satfractudqhq:                       Fixed-point fractional library routines.
51537                                                             (line 1266)
51538* __satfractudqqq:                       Fixed-point fractional library routines.
51539                                                             (line 1264)
51540* __satfractudqsa:                       Fixed-point fractional library routines.
51541                                                             (line 1273)
51542* __satfractudqsq:                       Fixed-point fractional library routines.
51543                                                             (line 1267)
51544* __satfractudqta:                       Fixed-point fractional library routines.
51545                                                             (line 1276)
51546* __satfractudquda:                      Fixed-point fractional library routines.
51547                                                             (line 1288)
51548* __satfractudquha:                      Fixed-point fractional library routines.
51549                                                             (line 1284)
51550* __satfractudquhq2:                     Fixed-point fractional library routines.
51551                                                             (line 1280)
51552* __satfractudquqq2:                     Fixed-point fractional library routines.
51553                                                             (line 1278)
51554* __satfractudqusa:                      Fixed-point fractional library routines.
51555                                                             (line 1286)
51556* __satfractudqusq2:                     Fixed-point fractional library routines.
51557                                                             (line 1282)
51558* __satfractudquta:                      Fixed-point fractional library routines.
51559                                                             (line 1290)
51560* __satfractuhada:                       Fixed-point fractional library routines.
51561                                                             (line 1302)
51562* __satfractuhadq:                       Fixed-point fractional library routines.
51563                                                             (line 1297)
51564* __satfractuhaha:                       Fixed-point fractional library routines.
51565                                                             (line 1299)
51566* __satfractuhahq:                       Fixed-point fractional library routines.
51567                                                             (line 1294)
51568* __satfractuhaqq:                       Fixed-point fractional library routines.
51569                                                             (line 1292)
51570* __satfractuhasa:                       Fixed-point fractional library routines.
51571                                                             (line 1301)
51572* __satfractuhasq:                       Fixed-point fractional library routines.
51573                                                             (line 1295)
51574* __satfractuhata:                       Fixed-point fractional library routines.
51575                                                             (line 1304)
51576* __satfractuhauda2:                     Fixed-point fractional library routines.
51577                                                             (line 1316)
51578* __satfractuhaudq:                      Fixed-point fractional library routines.
51579                                                             (line 1312)
51580* __satfractuhauhq:                      Fixed-point fractional library routines.
51581                                                             (line 1308)
51582* __satfractuhauqq:                      Fixed-point fractional library routines.
51583                                                             (line 1306)
51584* __satfractuhausa2:                     Fixed-point fractional library routines.
51585                                                             (line 1314)
51586* __satfractuhausq:                      Fixed-point fractional library routines.
51587                                                             (line 1310)
51588* __satfractuhauta2:                     Fixed-point fractional library routines.
51589                                                             (line 1318)
51590* __satfractuhqda:                       Fixed-point fractional library routines.
51591                                                             (line 1223)
51592* __satfractuhqdq:                       Fixed-point fractional library routines.
51593                                                             (line 1220)
51594* __satfractuhqha:                       Fixed-point fractional library routines.
51595                                                             (line 1221)
51596* __satfractuhqhq:                       Fixed-point fractional library routines.
51597                                                             (line 1218)
51598* __satfractuhqqq:                       Fixed-point fractional library routines.
51599                                                             (line 1217)
51600* __satfractuhqsa:                       Fixed-point fractional library routines.
51601                                                             (line 1222)
51602* __satfractuhqsq:                       Fixed-point fractional library routines.
51603                                                             (line 1219)
51604* __satfractuhqta:                       Fixed-point fractional library routines.
51605                                                             (line 1224)
51606* __satfractuhquda:                      Fixed-point fractional library routines.
51607                                                             (line 1234)
51608* __satfractuhqudq2:                     Fixed-point fractional library routines.
51609                                                             (line 1229)
51610* __satfractuhquha:                      Fixed-point fractional library routines.
51611                                                             (line 1231)
51612* __satfractuhquqq2:                     Fixed-point fractional library routines.
51613                                                             (line 1225)
51614* __satfractuhqusa:                      Fixed-point fractional library routines.
51615                                                             (line 1233)
51616* __satfractuhqusq2:                     Fixed-point fractional library routines.
51617                                                             (line 1227)
51618* __satfractuhquta:                      Fixed-point fractional library routines.
51619                                                             (line 1236)
51620* __satfractunsdida:                     Fixed-point fractional library routines.
51621                                                             (line 1833)
51622* __satfractunsdidq:                     Fixed-point fractional library routines.
51623                                                             (line 1829)
51624* __satfractunsdiha:                     Fixed-point fractional library routines.
51625                                                             (line 1831)
51626* __satfractunsdihq:                     Fixed-point fractional library routines.
51627                                                             (line 1827)
51628* __satfractunsdiqq:                     Fixed-point fractional library routines.
51629                                                             (line 1826)
51630* __satfractunsdisa:                     Fixed-point fractional library routines.
51631                                                             (line 1832)
51632* __satfractunsdisq:                     Fixed-point fractional library routines.
51633                                                             (line 1828)
51634* __satfractunsdita:                     Fixed-point fractional library routines.
51635                                                             (line 1834)
51636* __satfractunsdiuda:                    Fixed-point fractional library routines.
51637                                                             (line 1848)
51638* __satfractunsdiudq:                    Fixed-point fractional library routines.
51639                                                             (line 1842)
51640* __satfractunsdiuha:                    Fixed-point fractional library routines.
51641                                                             (line 1844)
51642* __satfractunsdiuhq:                    Fixed-point fractional library routines.
51643                                                             (line 1838)
51644* __satfractunsdiuqq:                    Fixed-point fractional library routines.
51645                                                             (line 1836)
51646* __satfractunsdiusa:                    Fixed-point fractional library routines.
51647                                                             (line 1846)
51648* __satfractunsdiusq:                    Fixed-point fractional library routines.
51649                                                             (line 1840)
51650* __satfractunsdiuta:                    Fixed-point fractional library routines.
51651                                                             (line 1850)
51652* __satfractunshida:                     Fixed-point fractional library routines.
51653                                                             (line 1785)
51654* __satfractunshidq:                     Fixed-point fractional library routines.
51655                                                             (line 1781)
51656* __satfractunshiha:                     Fixed-point fractional library routines.
51657                                                             (line 1783)
51658* __satfractunshihq:                     Fixed-point fractional library routines.
51659                                                             (line 1779)
51660* __satfractunshiqq:                     Fixed-point fractional library routines.
51661                                                             (line 1778)
51662* __satfractunshisa:                     Fixed-point fractional library routines.
51663                                                             (line 1784)
51664* __satfractunshisq:                     Fixed-point fractional library routines.
51665                                                             (line 1780)
51666* __satfractunshita:                     Fixed-point fractional library routines.
51667                                                             (line 1786)
51668* __satfractunshiuda:                    Fixed-point fractional library routines.
51669                                                             (line 1800)
51670* __satfractunshiudq:                    Fixed-point fractional library routines.
51671                                                             (line 1794)
51672* __satfractunshiuha:                    Fixed-point fractional library routines.
51673                                                             (line 1796)
51674* __satfractunshiuhq:                    Fixed-point fractional library routines.
51675                                                             (line 1790)
51676* __satfractunshiuqq:                    Fixed-point fractional library routines.
51677                                                             (line 1788)
51678* __satfractunshiusa:                    Fixed-point fractional library routines.
51679                                                             (line 1798)
51680* __satfractunshiusq:                    Fixed-point fractional library routines.
51681                                                             (line 1792)
51682* __satfractunshiuta:                    Fixed-point fractional library routines.
51683                                                             (line 1802)
51684* __satfractunsqida:                     Fixed-point fractional library routines.
51685                                                             (line 1759)
51686* __satfractunsqidq:                     Fixed-point fractional library routines.
51687                                                             (line 1755)
51688* __satfractunsqiha:                     Fixed-point fractional library routines.
51689                                                             (line 1757)
51690* __satfractunsqihq:                     Fixed-point fractional library routines.
51691                                                             (line 1753)
51692* __satfractunsqiqq:                     Fixed-point fractional library routines.
51693                                                             (line 1752)
51694* __satfractunsqisa:                     Fixed-point fractional library routines.
51695                                                             (line 1758)
51696* __satfractunsqisq:                     Fixed-point fractional library routines.
51697                                                             (line 1754)
51698* __satfractunsqita:                     Fixed-point fractional library routines.
51699                                                             (line 1760)
51700* __satfractunsqiuda:                    Fixed-point fractional library routines.
51701                                                             (line 1774)
51702* __satfractunsqiudq:                    Fixed-point fractional library routines.
51703                                                             (line 1768)
51704* __satfractunsqiuha:                    Fixed-point fractional library routines.
51705                                                             (line 1770)
51706* __satfractunsqiuhq:                    Fixed-point fractional library routines.
51707                                                             (line 1764)
51708* __satfractunsqiuqq:                    Fixed-point fractional library routines.
51709                                                             (line 1762)
51710* __satfractunsqiusa:                    Fixed-point fractional library routines.
51711                                                             (line 1772)
51712* __satfractunsqiusq:                    Fixed-point fractional library routines.
51713                                                             (line 1766)
51714* __satfractunsqiuta:                    Fixed-point fractional library routines.
51715                                                             (line 1776)
51716* __satfractunssida:                     Fixed-point fractional library routines.
51717                                                             (line 1810)
51718* __satfractunssidq:                     Fixed-point fractional library routines.
51719                                                             (line 1807)
51720* __satfractunssiha:                     Fixed-point fractional library routines.
51721                                                             (line 1808)
51722* __satfractunssihq:                     Fixed-point fractional library routines.
51723                                                             (line 1805)
51724* __satfractunssiqq:                     Fixed-point fractional library routines.
51725                                                             (line 1804)
51726* __satfractunssisa:                     Fixed-point fractional library routines.
51727                                                             (line 1809)
51728* __satfractunssisq:                     Fixed-point fractional library routines.
51729                                                             (line 1806)
51730* __satfractunssita:                     Fixed-point fractional library routines.
51731                                                             (line 1811)
51732* __satfractunssiuda:                    Fixed-point fractional library routines.
51733                                                             (line 1822)
51734* __satfractunssiudq:                    Fixed-point fractional library routines.
51735                                                             (line 1817)
51736* __satfractunssiuha:                    Fixed-point fractional library routines.
51737                                                             (line 1819)
51738* __satfractunssiuhq:                    Fixed-point fractional library routines.
51739                                                             (line 1814)
51740* __satfractunssiuqq:                    Fixed-point fractional library routines.
51741                                                             (line 1812)
51742* __satfractunssiusa:                    Fixed-point fractional library routines.
51743                                                             (line 1821)
51744* __satfractunssiusq:                    Fixed-point fractional library routines.
51745                                                             (line 1815)
51746* __satfractunssiuta:                    Fixed-point fractional library routines.
51747                                                             (line 1824)
51748* __satfractunstida:                     Fixed-point fractional library routines.
51749                                                             (line 1862)
51750* __satfractunstidq:                     Fixed-point fractional library routines.
51751                                                             (line 1857)
51752* __satfractunstiha:                     Fixed-point fractional library routines.
51753                                                             (line 1859)
51754* __satfractunstihq:                     Fixed-point fractional library routines.
51755                                                             (line 1854)
51756* __satfractunstiqq:                     Fixed-point fractional library routines.
51757                                                             (line 1852)
51758* __satfractunstisa:                     Fixed-point fractional library routines.
51759                                                             (line 1861)
51760* __satfractunstisq:                     Fixed-point fractional library routines.
51761                                                             (line 1855)
51762* __satfractunstita:                     Fixed-point fractional library routines.
51763                                                             (line 1864)
51764* __satfractunstiuda:                    Fixed-point fractional library routines.
51765                                                             (line 1878)
51766* __satfractunstiudq:                    Fixed-point fractional library routines.
51767                                                             (line 1872)
51768* __satfractunstiuha:                    Fixed-point fractional library routines.
51769                                                             (line 1874)
51770* __satfractunstiuhq:                    Fixed-point fractional library routines.
51771                                                             (line 1868)
51772* __satfractunstiuqq:                    Fixed-point fractional library routines.
51773                                                             (line 1866)
51774* __satfractunstiusa:                    Fixed-point fractional library routines.
51775                                                             (line 1876)
51776* __satfractunstiusq:                    Fixed-point fractional library routines.
51777                                                             (line 1870)
51778* __satfractunstiuta:                    Fixed-point fractional library routines.
51779                                                             (line 1880)
51780* __satfractuqqda:                       Fixed-point fractional library routines.
51781                                                             (line 1199)
51782* __satfractuqqdq:                       Fixed-point fractional library routines.
51783                                                             (line 1194)
51784* __satfractuqqha:                       Fixed-point fractional library routines.
51785                                                             (line 1196)
51786* __satfractuqqhq:                       Fixed-point fractional library routines.
51787                                                             (line 1191)
51788* __satfractuqqqq:                       Fixed-point fractional library routines.
51789                                                             (line 1189)
51790* __satfractuqqsa:                       Fixed-point fractional library routines.
51791                                                             (line 1198)
51792* __satfractuqqsq:                       Fixed-point fractional library routines.
51793                                                             (line 1192)
51794* __satfractuqqta:                       Fixed-point fractional library routines.
51795                                                             (line 1201)
51796* __satfractuqquda:                      Fixed-point fractional library routines.
51797                                                             (line 1213)
51798* __satfractuqqudq2:                     Fixed-point fractional library routines.
51799                                                             (line 1207)
51800* __satfractuqquha:                      Fixed-point fractional library routines.
51801                                                             (line 1209)
51802* __satfractuqquhq2:                     Fixed-point fractional library routines.
51803                                                             (line 1203)
51804* __satfractuqqusa:                      Fixed-point fractional library routines.
51805                                                             (line 1211)
51806* __satfractuqqusq2:                     Fixed-point fractional library routines.
51807                                                             (line 1205)
51808* __satfractuqquta:                      Fixed-point fractional library routines.
51809                                                             (line 1215)
51810* __satfractusada:                       Fixed-point fractional library routines.
51811                                                             (line 1326)
51812* __satfractusadq:                       Fixed-point fractional library routines.
51813                                                             (line 1323)
51814* __satfractusaha:                       Fixed-point fractional library routines.
51815                                                             (line 1324)
51816* __satfractusahq:                       Fixed-point fractional library routines.
51817                                                             (line 1321)
51818* __satfractusaqq:                       Fixed-point fractional library routines.
51819                                                             (line 1320)
51820* __satfractusasa:                       Fixed-point fractional library routines.
51821                                                             (line 1325)
51822* __satfractusasq:                       Fixed-point fractional library routines.
51823                                                             (line 1322)
51824* __satfractusata:                       Fixed-point fractional library routines.
51825                                                             (line 1327)
51826* __satfractusauda2:                     Fixed-point fractional library routines.
51827                                                             (line 1337)
51828* __satfractusaudq:                      Fixed-point fractional library routines.
51829                                                             (line 1333)
51830* __satfractusauha2:                     Fixed-point fractional library routines.
51831                                                             (line 1335)
51832* __satfractusauhq:                      Fixed-point fractional library routines.
51833                                                             (line 1330)
51834* __satfractusauqq:                      Fixed-point fractional library routines.
51835                                                             (line 1328)
51836* __satfractusausq:                      Fixed-point fractional library routines.
51837                                                             (line 1331)
51838* __satfractusauta2:                     Fixed-point fractional library routines.
51839                                                             (line 1339)
51840* __satfractusqda:                       Fixed-point fractional library routines.
51841                                                             (line 1247)
51842* __satfractusqdq:                       Fixed-point fractional library routines.
51843                                                             (line 1242)
51844* __satfractusqha:                       Fixed-point fractional library routines.
51845                                                             (line 1244)
51846* __satfractusqhq:                       Fixed-point fractional library routines.
51847                                                             (line 1240)
51848* __satfractusqqq:                       Fixed-point fractional library routines.
51849                                                             (line 1238)
51850* __satfractusqsa:                       Fixed-point fractional library routines.
51851                                                             (line 1246)
51852* __satfractusqsq:                       Fixed-point fractional library routines.
51853                                                             (line 1241)
51854* __satfractusqta:                       Fixed-point fractional library routines.
51855                                                             (line 1248)
51856* __satfractusquda:                      Fixed-point fractional library routines.
51857                                                             (line 1260)
51858* __satfractusqudq2:                     Fixed-point fractional library routines.
51859                                                             (line 1254)
51860* __satfractusquha:                      Fixed-point fractional library routines.
51861                                                             (line 1256)
51862* __satfractusquhq2:                     Fixed-point fractional library routines.
51863                                                             (line 1252)
51864* __satfractusquqq2:                     Fixed-point fractional library routines.
51865                                                             (line 1250)
51866* __satfractusqusa:                      Fixed-point fractional library routines.
51867                                                             (line 1258)
51868* __satfractusquta:                      Fixed-point fractional library routines.
51869                                                             (line 1262)
51870* __satfractutada:                       Fixed-point fractional library routines.
51871                                                             (line 1377)
51872* __satfractutadq:                       Fixed-point fractional library routines.
51873                                                             (line 1372)
51874* __satfractutaha:                       Fixed-point fractional library routines.
51875                                                             (line 1374)
51876* __satfractutahq:                       Fixed-point fractional library routines.
51877                                                             (line 1369)
51878* __satfractutaqq:                       Fixed-point fractional library routines.
51879                                                             (line 1367)
51880* __satfractutasa:                       Fixed-point fractional library routines.
51881                                                             (line 1376)
51882* __satfractutasq:                       Fixed-point fractional library routines.
51883                                                             (line 1370)
51884* __satfractutata:                       Fixed-point fractional library routines.
51885                                                             (line 1379)
51886* __satfractutauda2:                     Fixed-point fractional library routines.
51887                                                             (line 1393)
51888* __satfractutaudq:                      Fixed-point fractional library routines.
51889                                                             (line 1387)
51890* __satfractutauha2:                     Fixed-point fractional library routines.
51891                                                             (line 1389)
51892* __satfractutauhq:                      Fixed-point fractional library routines.
51893                                                             (line 1383)
51894* __satfractutauqq:                      Fixed-point fractional library routines.
51895                                                             (line 1381)
51896* __satfractutausa2:                     Fixed-point fractional library routines.
51897                                                             (line 1391)
51898* __satfractutausq:                      Fixed-point fractional library routines.
51899                                                             (line 1385)
51900* __splitstack_find:                     Miscellaneous routines.
51901                                                             (line   15)
51902* __ssaddda3:                            Fixed-point fractional library routines.
51903                                                             (line   66)
51904* __ssadddq3:                            Fixed-point fractional library routines.
51905                                                             (line   61)
51906* __ssaddha3:                            Fixed-point fractional library routines.
51907                                                             (line   63)
51908* __ssaddhq3:                            Fixed-point fractional library routines.
51909                                                             (line   59)
51910* __ssaddqq3:                            Fixed-point fractional library routines.
51911                                                             (line   57)
51912* __ssaddsa3:                            Fixed-point fractional library routines.
51913                                                             (line   65)
51914* __ssaddsq3:                            Fixed-point fractional library routines.
51915                                                             (line   60)
51916* __ssaddta3:                            Fixed-point fractional library routines.
51917                                                             (line   67)
51918* __ssashlda3:                           Fixed-point fractional library routines.
51919                                                             (line  401)
51920* __ssashldq3:                           Fixed-point fractional library routines.
51921                                                             (line  397)
51922* __ssashlha3:                           Fixed-point fractional library routines.
51923                                                             (line  399)
51924* __ssashlhq3:                           Fixed-point fractional library routines.
51925                                                             (line  395)
51926* __ssashlsa3:                           Fixed-point fractional library routines.
51927                                                             (line  400)
51928* __ssashlsq3:                           Fixed-point fractional library routines.
51929                                                             (line  396)
51930* __ssashlta3:                           Fixed-point fractional library routines.
51931                                                             (line  402)
51932* __ssdivda3:                            Fixed-point fractional library routines.
51933                                                             (line  260)
51934* __ssdivdq3:                            Fixed-point fractional library routines.
51935                                                             (line  255)
51936* __ssdivha3:                            Fixed-point fractional library routines.
51937                                                             (line  257)
51938* __ssdivhq3:                            Fixed-point fractional library routines.
51939                                                             (line  253)
51940* __ssdivqq3:                            Fixed-point fractional library routines.
51941                                                             (line  251)
51942* __ssdivsa3:                            Fixed-point fractional library routines.
51943                                                             (line  259)
51944* __ssdivsq3:                            Fixed-point fractional library routines.
51945                                                             (line  254)
51946* __ssdivta3:                            Fixed-point fractional library routines.
51947                                                             (line  261)
51948* __ssmulda3:                            Fixed-point fractional library routines.
51949                                                             (line  192)
51950* __ssmuldq3:                            Fixed-point fractional library routines.
51951                                                             (line  187)
51952* __ssmulha3:                            Fixed-point fractional library routines.
51953                                                             (line  189)
51954* __ssmulhq3:                            Fixed-point fractional library routines.
51955                                                             (line  185)
51956* __ssmulqq3:                            Fixed-point fractional library routines.
51957                                                             (line  183)
51958* __ssmulsa3:                            Fixed-point fractional library routines.
51959                                                             (line  191)
51960* __ssmulsq3:                            Fixed-point fractional library routines.
51961                                                             (line  186)
51962* __ssmulta3:                            Fixed-point fractional library routines.
51963                                                             (line  193)
51964* __ssnegda2:                            Fixed-point fractional library routines.
51965                                                             (line  315)
51966* __ssnegdq2:                            Fixed-point fractional library routines.
51967                                                             (line  312)
51968* __ssnegha2:                            Fixed-point fractional library routines.
51969                                                             (line  313)
51970* __ssneghq2:                            Fixed-point fractional library routines.
51971                                                             (line  310)
51972* __ssnegqq2:                            Fixed-point fractional library routines.
51973                                                             (line  309)
51974* __ssnegsa2:                            Fixed-point fractional library routines.
51975                                                             (line  314)
51976* __ssnegsq2:                            Fixed-point fractional library routines.
51977                                                             (line  311)
51978* __ssnegta2:                            Fixed-point fractional library routines.
51979                                                             (line  316)
51980* __sssubda3:                            Fixed-point fractional library routines.
51981                                                             (line  128)
51982* __sssubdq3:                            Fixed-point fractional library routines.
51983                                                             (line  123)
51984* __sssubha3:                            Fixed-point fractional library routines.
51985                                                             (line  125)
51986* __sssubhq3:                            Fixed-point fractional library routines.
51987                                                             (line  121)
51988* __sssubqq3:                            Fixed-point fractional library routines.
51989                                                             (line  119)
51990* __sssubsa3:                            Fixed-point fractional library routines.
51991                                                             (line  127)
51992* __sssubsq3:                            Fixed-point fractional library routines.
51993                                                             (line  122)
51994* __sssubta3:                            Fixed-point fractional library routines.
51995                                                             (line  129)
51996* __subda3:                              Fixed-point fractional library routines.
51997                                                             (line  106)
51998* __subdf3:                              Soft float library routines.
51999                                                             (line   30)
52000* __subdq3:                              Fixed-point fractional library routines.
52001                                                             (line   93)
52002* __subha3:                              Fixed-point fractional library routines.
52003                                                             (line  103)
52004* __subhq3:                              Fixed-point fractional library routines.
52005                                                             (line   91)
52006* __subqq3:                              Fixed-point fractional library routines.
52007                                                             (line   89)
52008* __subsa3:                              Fixed-point fractional library routines.
52009                                                             (line  105)
52010* __subsf3:                              Soft float library routines.
52011                                                             (line   29)
52012* __subsq3:                              Fixed-point fractional library routines.
52013                                                             (line   92)
52014* __subta3:                              Fixed-point fractional library routines.
52015                                                             (line  107)
52016* __subtf3:                              Soft float library routines.
52017                                                             (line   31)
52018* __subuda3:                             Fixed-point fractional library routines.
52019                                                             (line  113)
52020* __subudq3:                             Fixed-point fractional library routines.
52021                                                             (line  101)
52022* __subuha3:                             Fixed-point fractional library routines.
52023                                                             (line  109)
52024* __subuhq3:                             Fixed-point fractional library routines.
52025                                                             (line   97)
52026* __subuqq3:                             Fixed-point fractional library routines.
52027                                                             (line   95)
52028* __subusa3:                             Fixed-point fractional library routines.
52029                                                             (line  111)
52030* __subusq3:                             Fixed-point fractional library routines.
52031                                                             (line   99)
52032* __subuta3:                             Fixed-point fractional library routines.
52033                                                             (line  115)
52034* __subvdi3:                             Integer library routines.
52035                                                             (line  122)
52036* __subvsi3:                             Integer library routines.
52037                                                             (line  121)
52038* __subxf3:                              Soft float library routines.
52039                                                             (line   33)
52040* __truncdfsf2:                          Soft float library routines.
52041                                                             (line   75)
52042* __trunctfdf2:                          Soft float library routines.
52043                                                             (line   72)
52044* __trunctfsf2:                          Soft float library routines.
52045                                                             (line   74)
52046* __truncxfdf2:                          Soft float library routines.
52047                                                             (line   71)
52048* __truncxfsf2:                          Soft float library routines.
52049                                                             (line   73)
52050* __ucmpdi2:                             Integer library routines.
52051                                                             (line   92)
52052* __ucmpti2:                             Integer library routines.
52053                                                             (line   93)
52054* __udivdi3:                             Integer library routines.
52055                                                             (line   52)
52056* __udivmoddi4:                          Integer library routines.
52057                                                             (line   59)
52058* __udivmodti4:                          Integer library routines.
52059                                                             (line   61)
52060* __udivsi3:                             Integer library routines.
52061                                                             (line   50)
52062* __udivti3:                             Integer library routines.
52063                                                             (line   54)
52064* __udivuda3:                            Fixed-point fractional library routines.
52065                                                             (line  244)
52066* __udivudq3:                            Fixed-point fractional library routines.
52067                                                             (line  238)
52068* __udivuha3:                            Fixed-point fractional library routines.
52069                                                             (line  240)
52070* __udivuhq3:                            Fixed-point fractional library routines.
52071                                                             (line  234)
52072* __udivuqq3:                            Fixed-point fractional library routines.
52073                                                             (line  232)
52074* __udivusa3:                            Fixed-point fractional library routines.
52075                                                             (line  242)
52076* __udivusq3:                            Fixed-point fractional library routines.
52077                                                             (line  236)
52078* __udivuta3:                            Fixed-point fractional library routines.
52079                                                             (line  246)
52080* __umoddi3:                             Integer library routines.
52081                                                             (line   69)
52082* __umodsi3:                             Integer library routines.
52083                                                             (line   67)
52084* __umodti3:                             Integer library routines.
52085                                                             (line   71)
52086* __unorddf2:                            Soft float library routines.
52087                                                             (line  172)
52088* __unordsf2:                            Soft float library routines.
52089                                                             (line  171)
52090* __unordtf2:                            Soft float library routines.
52091                                                             (line  173)
52092* __usadduda3:                           Fixed-point fractional library routines.
52093                                                             (line   83)
52094* __usaddudq3:                           Fixed-point fractional library routines.
52095                                                             (line   77)
52096* __usadduha3:                           Fixed-point fractional library routines.
52097                                                             (line   79)
52098* __usadduhq3:                           Fixed-point fractional library routines.
52099                                                             (line   73)
52100* __usadduqq3:                           Fixed-point fractional library routines.
52101                                                             (line   71)
52102* __usaddusa3:                           Fixed-point fractional library routines.
52103                                                             (line   81)
52104* __usaddusq3:                           Fixed-point fractional library routines.
52105                                                             (line   75)
52106* __usadduta3:                           Fixed-point fractional library routines.
52107                                                             (line   85)
52108* __usashluda3:                          Fixed-point fractional library routines.
52109                                                             (line  419)
52110* __usashludq3:                          Fixed-point fractional library routines.
52111                                                             (line  413)
52112* __usashluha3:                          Fixed-point fractional library routines.
52113                                                             (line  415)
52114* __usashluhq3:                          Fixed-point fractional library routines.
52115                                                             (line  409)
52116* __usashluqq3:                          Fixed-point fractional library routines.
52117                                                             (line  407)
52118* __usashlusa3:                          Fixed-point fractional library routines.
52119                                                             (line  417)
52120* __usashlusq3:                          Fixed-point fractional library routines.
52121                                                             (line  411)
52122* __usashluta3:                          Fixed-point fractional library routines.
52123                                                             (line  421)
52124* __usdivuda3:                           Fixed-point fractional library routines.
52125                                                             (line  278)
52126* __usdivudq3:                           Fixed-point fractional library routines.
52127                                                             (line  272)
52128* __usdivuha3:                           Fixed-point fractional library routines.
52129                                                             (line  274)
52130* __usdivuhq3:                           Fixed-point fractional library routines.
52131                                                             (line  268)
52132* __usdivuqq3:                           Fixed-point fractional library routines.
52133                                                             (line  266)
52134* __usdivusa3:                           Fixed-point fractional library routines.
52135                                                             (line  276)
52136* __usdivusq3:                           Fixed-point fractional library routines.
52137                                                             (line  270)
52138* __usdivuta3:                           Fixed-point fractional library routines.
52139                                                             (line  280)
52140* __usmuluda3:                           Fixed-point fractional library routines.
52141                                                             (line  210)
52142* __usmuludq3:                           Fixed-point fractional library routines.
52143                                                             (line  204)
52144* __usmuluha3:                           Fixed-point fractional library routines.
52145                                                             (line  206)
52146* __usmuluhq3:                           Fixed-point fractional library routines.
52147                                                             (line  200)
52148* __usmuluqq3:                           Fixed-point fractional library routines.
52149                                                             (line  198)
52150* __usmulusa3:                           Fixed-point fractional library routines.
52151                                                             (line  208)
52152* __usmulusq3:                           Fixed-point fractional library routines.
52153                                                             (line  202)
52154* __usmuluta3:                           Fixed-point fractional library routines.
52155                                                             (line  212)
52156* __usneguda2:                           Fixed-point fractional library routines.
52157                                                             (line  329)
52158* __usnegudq2:                           Fixed-point fractional library routines.
52159                                                             (line  324)
52160* __usneguha2:                           Fixed-point fractional library routines.
52161                                                             (line  326)
52162* __usneguhq2:                           Fixed-point fractional library routines.
52163                                                             (line  321)
52164* __usneguqq2:                           Fixed-point fractional library routines.
52165                                                             (line  319)
52166* __usnegusa2:                           Fixed-point fractional library routines.
52167                                                             (line  328)
52168* __usnegusq2:                           Fixed-point fractional library routines.
52169                                                             (line  322)
52170* __usneguta2:                           Fixed-point fractional library routines.
52171                                                             (line  331)
52172* __ussubuda3:                           Fixed-point fractional library routines.
52173                                                             (line  146)
52174* __ussubudq3:                           Fixed-point fractional library routines.
52175                                                             (line  140)
52176* __ussubuha3:                           Fixed-point fractional library routines.
52177                                                             (line  142)
52178* __ussubuhq3:                           Fixed-point fractional library routines.
52179                                                             (line  136)
52180* __ussubuqq3:                           Fixed-point fractional library routines.
52181                                                             (line  134)
52182* __ussubusa3:                           Fixed-point fractional library routines.
52183                                                             (line  144)
52184* __ussubusq3:                           Fixed-point fractional library routines.
52185                                                             (line  138)
52186* __ussubuta3:                           Fixed-point fractional library routines.
52187                                                             (line  148)
52188* abort:                                 Portability.        (line   20)
52189* abs:                                   Arithmetic.         (line  200)
52190* 'abs' and attributes:                  Expressions.        (line   83)
52191* absence_set:                           Processor pipeline description.
52192                                                             (line  223)
52193* 'absM2' instruction pattern:           Standard Names.     (line  879)
52194* absolute value:                        Arithmetic.         (line  200)
52195* ABSU_EXPR:                             Unary and Binary Expressions.
52196                                                             (line    6)
52197* ABS_EXPR:                              Unary and Binary Expressions.
52198                                                             (line    6)
52199* access to operands:                    Accessors.          (line    6)
52200* access to special operands:            Special Accessors.  (line    6)
52201* accessors:                             Accessors.          (line    6)
52202* ACCUMULATE_OUTGOING_ARGS:              Stack Arguments.    (line   48)
52203* 'ACCUMULATE_OUTGOING_ARGS' and stack frames: Function Entry.
52204                                                             (line  140)
52205* ACCUM_TYPE_SIZE:                       Type Layout.        (line   87)
52206* 'acosM2' instruction pattern:          Standard Names.     (line  966)
52207* ADA_LONG_TYPE_SIZE:                    Type Layout.        (line   25)
52208* Adding a new GIMPLE statement code:    Adding a new GIMPLE statement code.
52209                                                             (line    6)
52210* ADDITIONAL_REGISTER_NAMES:             Instruction Output. (line   14)
52211* 'addM3' instruction pattern:           Standard Names.     (line  436)
52212* 'addMODEcc' instruction pattern:       Standard Names.     (line 1589)
52213* 'addptrM3' instruction pattern:        Standard Names.     (line  469)
52214* address constraints:                   Simple Constraints. (line  162)
52215* addressing modes:                      Addressing Modes.   (line    6)
52216* address_operand:                       Machine-Independent Predicates.
52217                                                             (line   62)
52218* address_operand <1>:                   Simple Constraints. (line  166)
52219* addr_diff_vec:                         Side Effects.       (line  313)
52220* 'addr_diff_vec', length of:            Insn Lengths.       (line   26)
52221* ADDR_EXPR:                             Storage References. (line    6)
52222* addr_vec:                              Side Effects.       (line  308)
52223* 'addr_vec', length of:                 Insn Lengths.       (line   26)
52224* 'addvM4' instruction pattern:          Standard Names.     (line  452)
52225* ADJUST_FIELD_ALIGN:                    Storage Layout.     (line  212)
52226* ADJUST_INSN_LENGTH:                    Insn Lengths.       (line   41)
52227* ADJUST_REG_ALLOC_ORDER:                Allocation Order.   (line   22)
52228* aggregates as return values:           Aggregate Return.   (line    6)
52229* alias:                                 Alias analysis.     (line    6)
52230* 'allocate_stack' instruction pattern:  Standard Names.     (line 1956)
52231* ALL_REGS:                              Register Classes.   (line   17)
52232* alternate entry points:                Insns.              (line  146)
52233* analyzer:                              Static Analyzer.    (line    6)
52234* analyzer, debugging:                   Debugging the Analyzer.
52235                                                             (line    6)
52236* analyzer, internals:                   Analyzer Internals. (line    6)
52237* anchored addresses:                    Anchored Addresses. (line    6)
52238* and:                                   Arithmetic.         (line  158)
52239* 'and' and attributes:                  Expressions.        (line   50)
52240* 'and', canonicalization of:            Insn Canonicalizations.
52241                                                             (line   67)
52242* 'andM3' instruction pattern:           Standard Names.     (line  442)
52243* ANNOTATE_EXPR:                         Unary and Binary Expressions.
52244                                                             (line    6)
52245* annotations:                           Annotations.        (line    6)
52246* APPLY_RESULT_SIZE:                     Scalar Return.      (line  112)
52247* ARGS_GROW_DOWNWARD:                    Frame Layout.       (line   30)
52248* argument passing:                      Interface.          (line   36)
52249* arguments in registers:                Register Arguments. (line    6)
52250* arguments on stack:                    Stack Arguments.    (line    6)
52251* ARG_POINTER_CFA_OFFSET:                Frame Layout.       (line  207)
52252* ARG_POINTER_REGNUM:                    Frame Registers.    (line   40)
52253* 'ARG_POINTER_REGNUM' and virtual registers: Regs and Memory.
52254                                                             (line   65)
52255* arg_pointer_rtx:                       Frame Registers.    (line  104)
52256* arithmetic library:                    Soft float library routines.
52257                                                             (line    6)
52258* arithmetic shift:                      Arithmetic.         (line  173)
52259* arithmetic shift with signed saturation: Arithmetic.       (line  173)
52260* arithmetic shift with unsigned saturation: Arithmetic.     (line  173)
52261* arithmetic, in RTL:                    Arithmetic.         (line    6)
52262* ARITHMETIC_TYPE_P:                     Types for C++.      (line   59)
52263* array:                                 Types.              (line    6)
52264* ARRAY_RANGE_REF:                       Storage References. (line    6)
52265* ARRAY_REF:                             Storage References. (line    6)
52266* ARRAY_TYPE:                            Types.              (line    6)
52267* ashift:                                Arithmetic.         (line  173)
52268* 'ashift' and attributes:               Expressions.        (line   83)
52269* ashiftrt:                              Arithmetic.         (line  190)
52270* 'ashiftrt' and attributes:             Expressions.        (line   83)
52271* 'ashlM3' instruction pattern:          Standard Names.     (line  828)
52272* 'ashrM3' instruction pattern:          Standard Names.     (line  840)
52273* 'asinM2' instruction pattern:          Standard Names.     (line  960)
52274* ASM_APP_OFF:                           File Framework.     (line   76)
52275* ASM_APP_ON:                            File Framework.     (line   69)
52276* ASM_COMMENT_START:                     File Framework.     (line   64)
52277* ASM_DECLARE_COLD_FUNCTION_NAME:        Label Output.       (line  136)
52278* ASM_DECLARE_COLD_FUNCTION_SIZE:        Label Output.       (line  151)
52279* ASM_DECLARE_FUNCTION_NAME:             Label Output.       (line  108)
52280* ASM_DECLARE_FUNCTION_SIZE:             Label Output.       (line  123)
52281* ASM_DECLARE_OBJECT_NAME:               Label Output.       (line  164)
52282* ASM_DECLARE_REGISTER_GLOBAL:           Label Output.       (line  192)
52283* ASM_FINAL_SPEC:                        Driver.             (line   81)
52284* ASM_FINISH_DECLARE_OBJECT:             Label Output.       (line  200)
52285* ASM_FORMAT_PRIVATE_NAME:               Label Output.       (line  426)
52286* asm_fprintf:                           Instruction Output. (line  150)
52287* ASM_FPRINTF_EXTENSIONS:                Instruction Output. (line  160)
52288* ASM_GENERATE_INTERNAL_LABEL:           Label Output.       (line  410)
52289* asm_input:                             Side Effects.       (line  295)
52290* 'asm_input' and '/v':                  Flags.              (line   65)
52291* ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX:     Exception Handling. (line   80)
52292* asm_noperands:                         Insns.              (line  327)
52293* ASM_NO_SKIP_IN_TEXT:                   Alignment Output.   (line   59)
52294* 'asm_operands' and '/v':               Flags.              (line   65)
52295* 'asm_operands', RTL sharing:           Sharing.            (line   48)
52296* 'asm_operands', usage:                 Assembler.          (line    6)
52297* ASM_OUTPUT_ADDR_DIFF_ELT:              Dispatch Tables.    (line    8)
52298* ASM_OUTPUT_ADDR_VEC_ELT:               Dispatch Tables.    (line   25)
52299* ASM_OUTPUT_ALIGN:                      Alignment Output.   (line   66)
52300* ASM_OUTPUT_ALIGNED_BSS:                Uninitialized Data. (line   45)
52301* ASM_OUTPUT_ALIGNED_COMMON:             Uninitialized Data. (line   29)
52302* ASM_OUTPUT_ALIGNED_DECL_COMMON:        Uninitialized Data. (line   36)
52303* ASM_OUTPUT_ALIGNED_DECL_LOCAL:         Uninitialized Data. (line   89)
52304* ASM_OUTPUT_ALIGNED_LOCAL:              Uninitialized Data. (line   82)
52305* ASM_OUTPUT_ALIGN_WITH_NOP:             Alignment Output.   (line   71)
52306* ASM_OUTPUT_ASCII:                      Data Output.        (line   60)
52307* ASM_OUTPUT_CASE_END:                   Dispatch Tables.    (line   50)
52308* ASM_OUTPUT_CASE_LABEL:                 Dispatch Tables.    (line   37)
52309* ASM_OUTPUT_COMMON:                     Uninitialized Data. (line    9)
52310* ASM_OUTPUT_DEBUG_LABEL:                Label Output.       (line  398)
52311* ASM_OUTPUT_DEF:                        Label Output.       (line  447)
52312* ASM_OUTPUT_DEF_FROM_DECLS:             Label Output.       (line  454)
52313* ASM_OUTPUT_DWARF_DATAREL:              DWARF.              (line  110)
52314* ASM_OUTPUT_DWARF_DELTA:                DWARF.              (line   89)
52315* ASM_OUTPUT_DWARF_OFFSET:               DWARF.              (line   98)
52316* ASM_OUTPUT_DWARF_PCREL:                DWARF.              (line  105)
52317* ASM_OUTPUT_DWARF_TABLE_REF:            DWARF.              (line  115)
52318* ASM_OUTPUT_DWARF_VMS_DELTA:            DWARF.              (line   93)
52319* ASM_OUTPUT_EXTERNAL:                   Label Output.       (line  327)
52320* ASM_OUTPUT_FDESC:                      Data Output.        (line   69)
52321* ASM_OUTPUT_FUNCTION_LABEL:             Label Output.       (line   16)
52322* ASM_OUTPUT_INTERNAL_LABEL:             Label Output.       (line   27)
52323* ASM_OUTPUT_LABEL:                      Label Output.       (line    8)
52324* ASM_OUTPUT_LABELREF:                   Label Output.       (line  349)
52325* ASM_OUTPUT_LABEL_REF:                  Label Output.       (line  371)
52326* ASM_OUTPUT_LOCAL:                      Uninitialized Data. (line   69)
52327* ASM_OUTPUT_MAX_SKIP_ALIGN:             Alignment Output.   (line   75)
52328* ASM_OUTPUT_MEASURED_SIZE:              Label Output.       (line   51)
52329* ASM_OUTPUT_OPCODE:                     Instruction Output. (line   35)
52330* ASM_OUTPUT_POOL_EPILOGUE:              Data Output.        (line  118)
52331* ASM_OUTPUT_POOL_PROLOGUE:              Data Output.        (line   82)
52332* ASM_OUTPUT_REG_POP:                    Instruction Output. (line  206)
52333* ASM_OUTPUT_REG_PUSH:                   Instruction Output. (line  201)
52334* ASM_OUTPUT_SIZE_DIRECTIVE:             Label Output.       (line   45)
52335* ASM_OUTPUT_SKIP:                       Alignment Output.   (line   53)
52336* ASM_OUTPUT_SOURCE_FILENAME:            File Framework.     (line   83)
52337* ASM_OUTPUT_SPECIAL_POOL_ENTRY:         Data Output.        (line   93)
52338* ASM_OUTPUT_SYMBOL_REF:                 Label Output.       (line  364)
52339* ASM_OUTPUT_TYPE_DIRECTIVE:             Label Output.       (line   98)
52340* ASM_OUTPUT_WEAKREF:                    Label Output.       (line  259)
52341* ASM_OUTPUT_WEAK_ALIAS:                 Label Output.       (line  473)
52342* ASM_PREFERRED_EH_DATA_FORMAT:          Exception Handling. (line   66)
52343* ASM_SPEC:                              Driver.             (line   73)
52344* ASM_STABD_OP:                          DBX Options.        (line   34)
52345* ASM_STABN_OP:                          DBX Options.        (line   41)
52346* ASM_STABS_OP:                          DBX Options.        (line   28)
52347* ASM_WEAKEN_DECL:                       Label Output.       (line  251)
52348* ASM_WEAKEN_LABEL:                      Label Output.       (line  238)
52349* assembler format:                      File Framework.     (line    6)
52350* assembler instructions in RTL:         Assembler.          (line    6)
52351* ASSEMBLER_DIALECT:                     Instruction Output. (line  172)
52352* assemble_name:                         Label Output.       (line    8)
52353* assemble_name_raw:                     Label Output.       (line   27)
52354* assigning attribute values to insns:   Tagging Insns.      (line    6)
52355* ASSUME_EXTENDED_UNWIND_CONTEXT:        Frame Registers.    (line  163)
52356* asterisk in template:                  Output Statement.   (line   29)
52357* AS_NEEDS_DASH_FOR_PIPED_INPUT:         Driver.             (line   88)
52358* 'atan2M3' instruction pattern:         Standard Names.     (line 1061)
52359* 'atanM2' instruction pattern:          Standard Names.     (line  972)
52360* atomic:                                GTY Options.        (line  196)
52361* 'atomic_addMODE' instruction pattern:  Standard Names.     (line 2380)
52362* 'atomic_add_fetchMODE' instruction pattern: Standard Names.
52363                                                             (line 2409)
52364* 'atomic_andMODE' instruction pattern:  Standard Names.     (line 2380)
52365* 'atomic_and_fetchMODE' instruction pattern: Standard Names.
52366                                                             (line 2409)
52367* 'atomic_bit_test_and_complementMODE' instruction pattern: Standard Names.
52368                                                             (line 2437)
52369* 'atomic_bit_test_and_resetMODE' instruction pattern: Standard Names.
52370                                                             (line 2437)
52371* 'atomic_bit_test_and_setMODE' instruction pattern: Standard Names.
52372                                                             (line 2437)
52373* 'atomic_compare_and_swapMODE' instruction pattern: Standard Names.
52374                                                             (line 2316)
52375* 'atomic_exchangeMODE' instruction pattern: Standard Names. (line 2368)
52376* 'atomic_fetch_addMODE' instruction pattern: Standard Names.
52377                                                             (line 2394)
52378* 'atomic_fetch_andMODE' instruction pattern: Standard Names.
52379                                                             (line 2394)
52380* 'atomic_fetch_nandMODE' instruction pattern: Standard Names.
52381                                                             (line 2394)
52382* 'atomic_fetch_orMODE' instruction pattern: Standard Names. (line 2394)
52383* 'atomic_fetch_subMODE' instruction pattern: Standard Names.
52384                                                             (line 2394)
52385* 'atomic_fetch_xorMODE' instruction pattern: Standard Names.
52386                                                             (line 2394)
52387* 'atomic_loadMODE' instruction pattern: Standard Names.     (line 2347)
52388* 'atomic_nandMODE' instruction pattern: Standard Names.     (line 2380)
52389* 'atomic_nand_fetchMODE' instruction pattern: Standard Names.
52390                                                             (line 2409)
52391* 'atomic_orMODE' instruction pattern:   Standard Names.     (line 2380)
52392* 'atomic_or_fetchMODE' instruction pattern: Standard Names. (line 2409)
52393* 'atomic_storeMODE' instruction pattern: Standard Names.    (line 2357)
52394* 'atomic_subMODE' instruction pattern:  Standard Names.     (line 2380)
52395* 'atomic_sub_fetchMODE' instruction pattern: Standard Names.
52396                                                             (line 2409)
52397* 'atomic_test_and_set' instruction pattern: Standard Names. (line 2426)
52398* 'atomic_xorMODE' instruction pattern:  Standard Names.     (line 2380)
52399* 'atomic_xor_fetchMODE' instruction pattern: Standard Names.
52400                                                             (line 2409)
52401* attr:                                  Expressions.        (line  163)
52402* attr <1>:                              Tagging Insns.      (line   54)
52403* attribute expressions:                 Expressions.        (line    6)
52404* attribute specifications:              Attr Example.       (line    6)
52405* attribute specifications example:      Attr Example.       (line    6)
52406* attributes:                            Attributes.         (line    6)
52407* attributes, defining:                  Defining Attributes.
52408                                                             (line    6)
52409* attributes, target-specific:           Target Attributes.  (line    6)
52410* ATTRIBUTE_ALIGNED_VALUE:               Storage Layout.     (line  194)
52411* attr_flag:                             Expressions.        (line  138)
52412* autoincrement addressing, availability: Portability.       (line   20)
52413* autoincrement/decrement addressing:    Simple Constraints. (line   30)
52414* automata_option:                       Processor pipeline description.
52415                                                             (line  304)
52416* automaton based pipeline description:  Processor pipeline description.
52417                                                             (line    6)
52418* automaton based pipeline description <1>: Processor pipeline description.
52419                                                             (line   49)
52420* automaton based scheduler:             Processor pipeline description.
52421                                                             (line    6)
52422* 'avgM3_ceil' instruction pattern:      Standard Names.     (line  860)
52423* 'avgM3_floor' instruction pattern:     Standard Names.     (line  848)
52424* AVOID_CCMODE_COPIES:                   Values in Registers.
52425                                                             (line  148)
52426* backslash:                             Output Template.    (line   46)
52427* barrier:                               Insns.              (line  176)
52428* 'barrier' and '/f':                    Flags.              (line  135)
52429* 'barrier' and '/v':                    Flags.              (line   33)
52430* BASE_REG_CLASS:                        Register Classes.   (line  111)
52431* basic block:                           Basic Blocks.       (line    6)
52432* Basic Statements:                      Basic Statements.   (line    6)
52433* basic-block.h:                         Control Flow.       (line    6)
52434* basic_block:                           Basic Blocks.       (line    6)
52435* BASIC_BLOCK:                           Basic Blocks.       (line   14)
52436* BB_HEAD, BB_END:                       Maintaining the CFG.
52437                                                             (line   76)
52438* bb_seq:                                GIMPLE sequences.   (line   72)
52439* BIGGEST_ALIGNMENT:                     Storage Layout.     (line  179)
52440* BIGGEST_FIELD_ALIGNMENT:               Storage Layout.     (line  205)
52441* BImode:                                Machine Modes.      (line   22)
52442* BIND_EXPR:                             Unary and Binary Expressions.
52443                                                             (line    6)
52444* BINFO_TYPE:                            Classes.            (line    6)
52445* bit-fields:                            Bit-Fields.         (line    6)
52446* BITFIELD_NBYTES_LIMITED:               Storage Layout.     (line  428)
52447* BITS_BIG_ENDIAN:                       Storage Layout.     (line   11)
52448* 'BITS_BIG_ENDIAN', effect on 'sign_extract': Bit-Fields.   (line    8)
52449* BITS_PER_UNIT:                         Machine Modes.      (line  440)
52450* BITS_PER_WORD:                         Storage Layout.     (line   50)
52451* bitwise complement:                    Arithmetic.         (line  154)
52452* bitwise exclusive-or:                  Arithmetic.         (line  168)
52453* bitwise inclusive-or:                  Arithmetic.         (line  163)
52454* bitwise logical-and:                   Arithmetic.         (line  158)
52455* BIT_AND_EXPR:                          Unary and Binary Expressions.
52456                                                             (line    6)
52457* BIT_IOR_EXPR:                          Unary and Binary Expressions.
52458                                                             (line    6)
52459* BIT_NOT_EXPR:                          Unary and Binary Expressions.
52460                                                             (line    6)
52461* BIT_XOR_EXPR:                          Unary and Binary Expressions.
52462                                                             (line    6)
52463* BLKmode:                               Machine Modes.      (line  185)
52464* 'BLKmode', and function return values: Calls.              (line   23)
52465* 'blockage' instruction pattern:        Standard Names.     (line 2156)
52466* Blocks:                                Blocks.             (line    6)
52467* BLOCK_FOR_INSN, gimple_bb:             Maintaining the CFG.
52468                                                             (line   28)
52469* BLOCK_REG_PADDING:                     Register Arguments. (line  238)
52470* BND32mode:                             Machine Modes.      (line  210)
52471* BND64mode:                             Machine Modes.      (line  210)
52472* bool:                                  Misc.               (line  958)
52473* BOOLEAN_TYPE:                          Types.              (line    6)
52474* BOOL_TYPE_SIZE:                        Type Layout.        (line   43)
52475* branch prediction:                     Profile information.
52476                                                             (line   24)
52477* BRANCH_COST:                           Costs.              (line  104)
52478* break_out_memory_refs:                 Addressing Modes.   (line  134)
52479* BREAK_STMT:                            Statements for C++. (line    6)
52480* BSS_SECTION_ASM_OP:                    Sections.           (line   67)
52481* bswap:                                 Arithmetic.         (line  246)
52482* 'bswapM2' instruction pattern:         Standard Names.     (line  868)
52483* 'btruncM2' instruction pattern:        Standard Names.     (line 1078)
52484* build0:                                Macros and Functions.
52485                                                             (line   16)
52486* build1:                                Macros and Functions.
52487                                                             (line   17)
52488* build2:                                Macros and Functions.
52489                                                             (line   18)
52490* build3:                                Macros and Functions.
52491                                                             (line   19)
52492* build4:                                Macros and Functions.
52493                                                             (line   20)
52494* build5:                                Macros and Functions.
52495                                                             (line   21)
52496* build6:                                Macros and Functions.
52497                                                             (line   22)
52498* 'builtin_longjmp' instruction pattern: Standard Names.     (line 2054)
52499* 'builtin_setjmp_receiver' instruction pattern: Standard Names.
52500                                                             (line 2044)
52501* 'builtin_setjmp_setup' instruction pattern: Standard Names.
52502                                                             (line 2033)
52503* BYTES_BIG_ENDIAN:                      Storage Layout.     (line   23)
52504* 'BYTES_BIG_ENDIAN', effect on 'subreg': Regs and Memory.   (line  229)
52505* byte_mode:                             Machine Modes.      (line  458)
52506* C statements for assembler output:     Output Statement.   (line    6)
52507* cache:                                 GTY Options.        (line  127)
52508* call:                                  Flags.              (line  230)
52509* call <1>:                              Side Effects.       (line   92)
52510* 'call' instruction pattern:            Standard Names.     (line 1709)
52511* 'call' usage:                          Calls.              (line   10)
52512* 'call', in 'call_insn':                Flags.              (line  129)
52513* 'call', in 'mem':                      Flags.              (line   70)
52514* call-clobbered register:               Register Basics.    (line   35)
52515* call-clobbered register <1>:           Register Basics.    (line   50)
52516* call-clobbered register <2>:           Register Basics.    (line   58)
52517* call-clobbered register <3>:           Register Basics.    (line   76)
52518* call-saved register:                   Register Basics.    (line   35)
52519* call-saved register <1>:               Register Basics.    (line   50)
52520* call-saved register <2>:               Register Basics.    (line   58)
52521* call-saved register <3>:               Register Basics.    (line   76)
52522* call-used register:                    Register Basics.    (line   35)
52523* call-used register <1>:                Register Basics.    (line   50)
52524* call-used register <2>:                Register Basics.    (line   58)
52525* call-used register <3>:                Register Basics.    (line   76)
52526* calling conventions:                   Stack and Calling.  (line    6)
52527* calling functions in RTL:              Calls.              (line    6)
52528* CALL_EXPR:                             Unary and Binary Expressions.
52529                                                             (line    6)
52530* call_insn:                             Insns.              (line   95)
52531* 'call_insn' and '/c':                  Flags.              (line  129)
52532* 'call_insn' and '/f':                  Flags.              (line  135)
52533* 'call_insn' and '/i':                  Flags.              (line  120)
52534* 'call_insn' and '/j':                  Flags.              (line  175)
52535* 'call_insn' and '/s':                  Flags.              (line   38)
52536* 'call_insn' and '/s' <1>:              Flags.              (line  162)
52537* 'call_insn' and '/u':                  Flags.              (line   28)
52538* 'call_insn' and '/u' <1>:              Flags.              (line  115)
52539* 'call_insn' and '/u' or '/i':          Flags.              (line  125)
52540* 'call_insn' and '/v':                  Flags.              (line   33)
52541* CALL_INSN_FUNCTION_USAGE:              Insns.              (line  101)
52542* 'call_pop' instruction pattern:        Standard Names.     (line 1737)
52543* CALL_POPS_ARGS:                        Stack Arguments.    (line  138)
52544* CALL_REALLY_USED_REGISTERS:            Register Basics.    (line   49)
52545* CALL_USED_REGISTERS:                   Register Basics.    (line   34)
52546* call_used_regs:                        Register Basics.    (line  102)
52547* 'call_value' instruction pattern:      Standard Names.     (line 1729)
52548* 'call_value_pop' instruction pattern:  Standard Names.     (line 1737)
52549* canadian:                              Configure Terms.    (line    6)
52550* canonicalization of instructions:      Insn Canonicalizations.
52551                                                             (line    6)
52552* 'canonicalize_funcptr_for_compare' instruction pattern: Standard Names.
52553                                                             (line 1888)
52554* can_create_pseudo_p:                   Standard Names.     (line   75)
52555* can_fallthru:                          Basic Blocks.       (line   67)
52556* caret:                                 Multi-Alternative.  (line   53)
52557* caret <1>:                             Guidelines for Diagnostics.
52558                                                             (line  159)
52559* 'casesi' instruction pattern:          Standard Names.     (line 1830)
52560* CASE_VECTOR_MODE:                      Misc.               (line   26)
52561* CASE_VECTOR_PC_RELATIVE:               Misc.               (line   39)
52562* CASE_VECTOR_SHORTEN_MODE:              Misc.               (line   30)
52563* 'cbranchMODE4' instruction pattern:    Standard Names.     (line 1698)
52564* cc0:                                   Regs and Memory.    (line  329)
52565* cc0 <1>:                               CC0 Condition Codes.
52566                                                             (line    6)
52567* 'cc0', RTL sharing:                    Sharing.            (line   30)
52568* cc0_rtx:                               Regs and Memory.    (line  355)
52569* CC1PLUS_SPEC:                          Driver.             (line   63)
52570* CC1_SPEC:                              Driver.             (line   55)
52571* CCmode:                                Machine Modes.      (line  178)
52572* CCmode <1>:                            MODE_CC Condition Codes.
52573                                                             (line    6)
52574* cc_status:                             CC0 Condition Codes.
52575                                                             (line    6)
52576* CC_STATUS_MDEP:                        CC0 Condition Codes.
52577                                                             (line   16)
52578* CC_STATUS_MDEP_INIT:                   CC0 Condition Codes.
52579                                                             (line   22)
52580* CDImode:                               Machine Modes.      (line  204)
52581* 'ceilM2' instruction pattern:          Standard Names.     (line 1097)
52582* CEIL_DIV_EXPR:                         Unary and Binary Expressions.
52583                                                             (line    6)
52584* CEIL_MOD_EXPR:                         Unary and Binary Expressions.
52585                                                             (line    6)
52586* CFA_FRAME_BASE_OFFSET:                 Frame Layout.       (line  239)
52587* CFG verification:                      Maintaining the CFG.
52588                                                             (line  116)
52589* CFG, Control Flow Graph:               Control Flow.       (line    6)
52590* cfghooks.h:                            Maintaining the CFG.
52591                                                             (line    6)
52592* cgraph_finalize_function:              Parsing pass.       (line   51)
52593* chain_circular:                        GTY Options.        (line  160)
52594* chain_next:                            GTY Options.        (line  160)
52595* chain_prev:                            GTY Options.        (line  160)
52596* change_address:                        Standard Names.     (line   47)
52597* CHAR_TYPE_SIZE:                        Type Layout.        (line   38)
52598* 'check_raw_ptrsM' instruction pattern: Standard Names.     (line  330)
52599* 'check_stack' instruction pattern:     Standard Names.     (line 1974)
52600* 'check_war_ptrsM' instruction pattern: Standard Names.     (line  349)
52601* CHImode:                               Machine Modes.      (line  204)
52602* class definitions, register:           Register Classes.   (line    6)
52603* class preference constraints:          Class Preferences.  (line    6)
52604* class, scope:                          Classes.            (line    6)
52605* classes of RTX codes:                  RTL Classes.        (line    6)
52606* CLASSTYPE_DECLARED_CLASS:              Classes.            (line    6)
52607* CLASSTYPE_HAS_MUTABLE:                 Classes.            (line   82)
52608* CLASSTYPE_NON_POD_P:                   Classes.            (line   87)
52609* CLASS_MAX_NREGS:                       Register Classes.   (line  531)
52610* CLASS_TYPE_P:                          Types for C++.      (line   63)
52611* Cleanups:                              Cleanups.           (line    6)
52612* CLEANUP_DECL:                          Statements for C++. (line    6)
52613* CLEANUP_EXPR:                          Statements for C++. (line    6)
52614* CLEANUP_POINT_EXPR:                    Unary and Binary Expressions.
52615                                                             (line    6)
52616* CLEANUP_STMT:                          Statements for C++. (line    6)
52617* 'clear_cache' instruction pattern:     Standard Names.     (line 2543)
52618* CLEAR_INSN_CACHE:                      Trampolines.        (line  151)
52619* CLEAR_RATIO:                           Costs.              (line  225)
52620* clobber:                               Side Effects.       (line  106)
52621* clrsb:                                 Arithmetic.         (line  215)
52622* 'clrsbM2' instruction pattern:         Standard Names.     (line 1170)
52623* clz:                                   Arithmetic.         (line  222)
52624* 'clzM2' instruction pattern:           Standard Names.     (line 1186)
52625* CLZ_DEFINED_VALUE_AT_ZERO:             Misc.               (line  338)
52626* 'cmpmemM' instruction pattern:         Standard Names.     (line 1389)
52627* 'cmpstrM' instruction pattern:         Standard Names.     (line 1368)
52628* 'cmpstrnM' instruction pattern:        Standard Names.     (line 1355)
52629* code generation RTL sequences:         Expander Definitions.
52630                                                             (line    6)
52631* code iterators in '.md' files:         Code Iterators.     (line    6)
52632* codes, RTL expression:                 RTL Objects.        (line   47)
52633* code_label:                            Insns.              (line  125)
52634* CODE_LABEL:                            Basic Blocks.       (line   50)
52635* 'code_label' and '/i':                 Flags.              (line   48)
52636* 'code_label' and '/v':                 Flags.              (line   33)
52637* CODE_LABEL_NUMBER:                     Insns.              (line  125)
52638* COImode:                               Machine Modes.      (line  204)
52639* COLLECT2_HOST_INITIALIZATION:          Host Misc.          (line   32)
52640* COLLECT_EXPORT_LIST:                   Misc.               (line  864)
52641* COLLECT_SHARED_FINI_FUNC:              Macros for Initialization.
52642                                                             (line   43)
52643* COLLECT_SHARED_INIT_FUNC:              Macros for Initialization.
52644                                                             (line   32)
52645* command-line options, guidelines for:  Guidelines for Options.
52646                                                             (line    6)
52647* commit_edge_insertions:                Maintaining the CFG.
52648                                                             (line  104)
52649* compare:                               Arithmetic.         (line   46)
52650* 'compare', canonicalization of:        Insn Canonicalizations.
52651                                                             (line   36)
52652* COMPARE_MAX_PIECES:                    Costs.              (line  220)
52653* comparison_operator:                   Machine-Independent Predicates.
52654                                                             (line  110)
52655* compiler passes and files:             Passes.             (line    6)
52656* complement, bitwise:                   Arithmetic.         (line  154)
52657* COMPLEX_CST:                           Constant expressions.
52658                                                             (line    6)
52659* COMPLEX_EXPR:                          Unary and Binary Expressions.
52660                                                             (line    6)
52661* complex_mode:                          Machine Modes.      (line  302)
52662* COMPLEX_TYPE:                          Types.              (line    6)
52663* COMPONENT_REF:                         Storage References. (line    6)
52664* Compound Expressions:                  Compound Expressions.
52665                                                             (line    6)
52666* Compound Lvalues:                      Compound Lvalues.   (line    6)
52667* COMPOUND_EXPR:                         Unary and Binary Expressions.
52668                                                             (line    6)
52669* COMPOUND_LITERAL_EXPR:                 Unary and Binary Expressions.
52670                                                             (line    6)
52671* COMPOUND_LITERAL_EXPR_DECL:            Unary and Binary Expressions.
52672                                                             (line  392)
52673* COMPOUND_LITERAL_EXPR_DECL_EXPR:       Unary and Binary Expressions.
52674                                                             (line  392)
52675* computed jump:                         Edges.              (line  127)
52676* computing the length of an insn:       Insn Lengths.       (line    6)
52677* concat:                                Regs and Memory.    (line  407)
52678* concatn:                               Regs and Memory.    (line  413)
52679* cond:                                  Comparisons.        (line   90)
52680* 'cond' and attributes:                 Expressions.        (line   37)
52681* condition code register:               Regs and Memory.    (line  329)
52682* condition code status:                 Condition Code.     (line    6)
52683* condition codes:                       Comparisons.        (line   20)
52684* conditional execution:                 Conditional Execution.
52685                                                             (line    6)
52686* Conditional Expressions:               Conditional Expressions.
52687                                                             (line    6)
52688* conditions, in patterns:               Patterns.           (line   55)
52689* 'cond_addMODE' instruction pattern:    Standard Names.     (line 1596)
52690* 'cond_andMODE' instruction pattern:    Standard Names.     (line 1596)
52691* 'cond_divMODE' instruction pattern:    Standard Names.     (line 1596)
52692* cond_exec:                             Side Effects.       (line  253)
52693* COND_EXPR:                             Unary and Binary Expressions.
52694                                                             (line    6)
52695* 'cond_fmaMODE' instruction pattern:    Standard Names.     (line 1634)
52696* 'cond_fmsMODE' instruction pattern:    Standard Names.     (line 1634)
52697* 'cond_fnmaMODE' instruction pattern:   Standard Names.     (line 1634)
52698* 'cond_fnmsMODE' instruction pattern:   Standard Names.     (line 1634)
52699* 'cond_iorMODE' instruction pattern:    Standard Names.     (line 1596)
52700* 'cond_modMODE' instruction pattern:    Standard Names.     (line 1596)
52701* 'cond_mulMODE' instruction pattern:    Standard Names.     (line 1596)
52702* 'cond_smaxMODE' instruction pattern:   Standard Names.     (line 1596)
52703* 'cond_sminMODE' instruction pattern:   Standard Names.     (line 1596)
52704* 'cond_subMODE' instruction pattern:    Standard Names.     (line 1596)
52705* 'cond_udivMODE' instruction pattern:   Standard Names.     (line 1596)
52706* 'cond_umaxMODE' instruction pattern:   Standard Names.     (line 1596)
52707* 'cond_uminMODE' instruction pattern:   Standard Names.     (line 1596)
52708* 'cond_umodMODE' instruction pattern:   Standard Names.     (line 1596)
52709* 'cond_xorMODE' instruction pattern:    Standard Names.     (line 1596)
52710* configuration file:                    Filesystem.         (line    6)
52711* configuration file <1>:                Host Misc.          (line    6)
52712* configure terms:                       Configure Terms.    (line    6)
52713* CONJ_EXPR:                             Unary and Binary Expressions.
52714                                                             (line    6)
52715* const:                                 Constants.          (line  212)
52716* const0_rtx:                            Constants.          (line   21)
52717* CONST0_RTX:                            Constants.          (line  230)
52718* const1_rtx:                            Constants.          (line   21)
52719* CONST1_RTX:                            Constants.          (line  230)
52720* const2_rtx:                            Constants.          (line   21)
52721* CONST2_RTX:                            Constants.          (line  230)
52722* constant attributes:                   Constant Attributes.
52723                                                             (line    6)
52724* constant definitions:                  Constant Definitions.
52725                                                             (line    6)
52726* constants in constraints:              Simple Constraints. (line   68)
52727* CONSTANT_ADDRESS_P:                    Addressing Modes.   (line   28)
52728* CONSTANT_P:                            Addressing Modes.   (line   35)
52729* CONSTANT_POOL_ADDRESS_P:               Flags.              (line   19)
52730* CONSTANT_POOL_BEFORE_FUNCTION:         Data Output.        (line   74)
52731* constm1_rtx:                           Constants.          (line   21)
52732* constraint modifier characters:        Modifiers.          (line    6)
52733* constraint, matching:                  Simple Constraints. (line  140)
52734* constraints:                           Constraints.        (line    6)
52735* constraints, defining:                 Define Constraints. (line    6)
52736* constraints, machine specific:         Machine Constraints.
52737                                                             (line    6)
52738* constraints, testing:                  C Constraint Interface.
52739                                                             (line    6)
52740* constraint_num:                        C Constraint Interface.
52741                                                             (line   30)
52742* constraint_satisfied_p:                C Constraint Interface.
52743                                                             (line   42)
52744* CONSTRUCTOR:                           Unary and Binary Expressions.
52745                                                             (line    6)
52746* constructors, automatic calls:         Collect2.           (line   15)
52747* constructors, output of:               Initialization.     (line    6)
52748* CONST_DECL:                            Declarations.       (line    6)
52749* const_double:                          Constants.          (line   37)
52750* 'const_double', RTL sharing:           Sharing.            (line   32)
52751* CONST_DOUBLE_LOW:                      Constants.          (line   54)
52752* const_double_operand:                  Machine-Independent Predicates.
52753                                                             (line   20)
52754* const_fixed:                           Constants.          (line   93)
52755* const_int:                             Constants.          (line    8)
52756* 'const_int' and attribute tests:       Expressions.        (line   47)
52757* 'const_int' and attributes:            Expressions.        (line   10)
52758* 'const_int', RTL sharing:              Sharing.            (line   23)
52759* const_int_operand:                     Machine-Independent Predicates.
52760                                                             (line   15)
52761* const_poly_int:                        Constants.          (line  100)
52762* 'const_poly_int', RTL sharing:         Sharing.            (line   25)
52763* const_string:                          Constants.          (line  184)
52764* 'const_string' and attributes:         Expressions.        (line   20)
52765* const_true_rtx:                        Constants.          (line   31)
52766* const_vector:                          Constants.          (line  107)
52767* 'const_vector', RTL sharing:           Sharing.            (line   35)
52768* CONST_WIDE_INT:                        Constants.          (line   67)
52769* CONST_WIDE_INT_ELT:                    Constants.          (line   89)
52770* CONST_WIDE_INT_NUNITS:                 Constants.          (line   84)
52771* CONST_WIDE_INT_VEC:                    Constants.          (line   80)
52772* container:                             Containers.         (line    6)
52773* CONTINUE_STMT:                         Statements for C++. (line    6)
52774* contributors:                          Contributors.       (line    6)
52775* controlling register usage:            Register Basics.    (line  116)
52776* controlling the compilation driver:    Driver.             (line    6)
52777* conventions, run-time:                 Interface.          (line    6)
52778* conversions:                           Conversions.        (line    6)
52779* CONVERT_EXPR:                          Unary and Binary Expressions.
52780                                                             (line    6)
52781* 'copysignM3' instruction pattern:      Standard Names.     (line 1142)
52782* copy_rtx:                              Addressing Modes.   (line  189)
52783* copy_rtx_if_shared:                    Sharing.            (line   67)
52784* 'cosM2' instruction pattern:           Standard Names.     (line  931)
52785* costs of instructions:                 Costs.              (line    6)
52786* CPLUSPLUS_CPP_SPEC:                    Driver.             (line   50)
52787* CPP_SPEC:                              Driver.             (line   43)
52788* CPSImode:                              Machine Modes.      (line  204)
52789* 'cpymemM' instruction pattern:         Standard Names.     (line 1244)
52790* CP_INTEGRAL_TYPE:                      Types for C++.      (line   55)
52791* cp_namespace_decls:                    Namespaces.         (line   49)
52792* CP_TYPE_CONST_NON_VOLATILE_P:          Types for C++.      (line   33)
52793* CP_TYPE_CONST_P:                       Types for C++.      (line   24)
52794* cp_type_quals:                         Types for C++.      (line    6)
52795* cp_type_quals <1>:                     Types for C++.      (line   16)
52796* CP_TYPE_RESTRICT_P:                    Types for C++.      (line   30)
52797* CP_TYPE_VOLATILE_P:                    Types for C++.      (line   27)
52798* CQImode:                               Machine Modes.      (line  204)
52799* cross compilation and floating point:  Floating Point.     (line    6)
52800* CROSSING_JUMP_P:                       Flags.              (line   10)
52801* crtl->args.pops_args:                  Function Entry.     (line  111)
52802* crtl->args.pretend_args_size:          Function Entry.     (line  117)
52803* crtl->outgoing_args_size:              Stack Arguments.    (line   48)
52804* CRTSTUFF_T_CFLAGS:                     Target Fragment.    (line   15)
52805* CRTSTUFF_T_CFLAGS_S:                   Target Fragment.    (line   19)
52806* CRT_CALL_STATIC_FUNCTION:              Sections.           (line  125)
52807* CSImode:                               Machine Modes.      (line  204)
52808* 'cstoreMODE4' instruction pattern:     Standard Names.     (line 1659)
52809* CTImode:                               Machine Modes.      (line  204)
52810* 'ctrapMM4' instruction pattern:        Standard Names.     (line 2125)
52811* ctz:                                   Arithmetic.         (line  230)
52812* 'ctzM2' instruction pattern:           Standard Names.     (line 1201)
52813* CTZ_DEFINED_VALUE_AT_ZERO:             Misc.               (line  339)
52814* CUMULATIVE_ARGS:                       Register Arguments. (line  137)
52815* current_function_is_leaf:              Leaf Functions.     (line   50)
52816* current_function_uses_only_leaf_regs:  Leaf Functions.     (line   50)
52817* current_insn_predicate:                Conditional Execution.
52818                                                             (line   27)
52819* C_COMMON_OVERRIDE_OPTIONS:             Run-time Target.    (line  136)
52820* c_register_pragma:                     Misc.               (line  440)
52821* c_register_pragma_with_expansion:      Misc.               (line  442)
52822* DAmode:                                Machine Modes.      (line  154)
52823* data bypass:                           Processor pipeline description.
52824                                                             (line  105)
52825* data bypass <1>:                       Processor pipeline description.
52826                                                             (line  196)
52827* data dependence delays:                Processor pipeline description.
52828                                                             (line    6)
52829* Data Dependency Analysis:              Dependency analysis.
52830                                                             (line    6)
52831* data structures:                       Per-Function Data.  (line    6)
52832* DATA_ABI_ALIGNMENT:                    Storage Layout.     (line  263)
52833* DATA_ALIGNMENT:                        Storage Layout.     (line  250)
52834* DATA_SECTION_ASM_OP:                   Sections.           (line   52)
52835* DBR_OUTPUT_SEQEND:                     Instruction Output. (line  133)
52836* dbr_sequence_length:                   Instruction Output. (line  133)
52837* DBX_BLOCKS_FUNCTION_RELATIVE:          DBX Options.        (line  100)
52838* DBX_CONTIN_CHAR:                       DBX Options.        (line   63)
52839* DBX_CONTIN_LENGTH:                     DBX Options.        (line   53)
52840* DBX_DEBUGGING_INFO:                    DBX Options.        (line    8)
52841* DBX_FUNCTION_FIRST:                    DBX Options.        (line   94)
52842* DBX_LINES_FUNCTION_RELATIVE:           DBX Options.        (line  106)
52843* DBX_NO_XREFS:                          DBX Options.        (line   47)
52844* DBX_OUTPUT_MAIN_SOURCE_FILENAME:       File Names and DBX. (line    8)
52845* DBX_OUTPUT_MAIN_SOURCE_FILE_END:       File Names and DBX. (line   33)
52846* DBX_OUTPUT_NULL_N_SO_AT_MAIN_SOURCE_FILE_END: File Names and DBX.
52847                                                             (line   41)
52848* DBX_OUTPUT_SOURCE_LINE:                DBX Hooks.          (line    8)
52849* DBX_REGISTER_NUMBER:                   All Debuggers.      (line    8)
52850* DBX_REGPARM_STABS_CODE:                DBX Options.        (line   84)
52851* DBX_REGPARM_STABS_LETTER:              DBX Options.        (line   89)
52852* DBX_STATIC_CONST_VAR_CODE:             DBX Options.        (line   79)
52853* DBX_STATIC_STAB_DATA_SECTION:          DBX Options.        (line   70)
52854* DBX_TYPE_DECL_STABS_CODE:              DBX Options.        (line   75)
52855* DBX_USE_BINCL:                         DBX Options.        (line  112)
52856* DCmode:                                Machine Modes.      (line  199)
52857* DDmode:                                Machine Modes.      (line   93)
52858* De Morgan's law:                       Insn Canonicalizations.
52859                                                             (line   67)
52860* dead_or_set_p:                         define_peephole.    (line   65)
52861* DEBUGGER_ARG_OFFSET:                   All Debuggers.      (line   35)
52862* DEBUGGER_AUTO_OFFSET:                  All Debuggers.      (line   27)
52863* debug_expr:                            Debug Information.  (line   22)
52864* DEBUG_EXPR_DECL:                       Declarations.       (line    6)
52865* debug_implicit_ptr:                    Debug Information.  (line   27)
52866* debug_insn:                            Insns.              (line  247)
52867* debug_marker:                          Debug Information.  (line   37)
52868* debug_parameter_ref:                   Debug Information.  (line   34)
52869* DEBUG_SYMS_TEXT:                       DBX Options.        (line   24)
52870* decimal float library:                 Decimal float library routines.
52871                                                             (line    6)
52872* declaration:                           Declarations.       (line    6)
52873* declarations, RTL:                     RTL Declarations.   (line    6)
52874* DECLARE_LIBRARY_RENAMES:               Library Calls.      (line    8)
52875* DECL_ALIGN:                            Declarations.       (line    6)
52876* DECL_ANTICIPATED:                      Functions for C++.  (line   42)
52877* DECL_ARGUMENTS:                        Function Basics.    (line   36)
52878* DECL_ARRAY_DELETE_OPERATOR_P:          Functions for C++.  (line  158)
52879* DECL_ARTIFICIAL:                       Working with declarations.
52880                                                             (line   24)
52881* DECL_ARTIFICIAL <1>:                   Function Basics.    (line    6)
52882* DECL_ARTIFICIAL <2>:                   Function Properties.
52883                                                             (line   47)
52884* DECL_ASSEMBLER_NAME:                   Function Basics.    (line    6)
52885* DECL_ASSEMBLER_NAME <1>:               Function Basics.    (line   19)
52886* DECL_ATTRIBUTES:                       Attributes.         (line   21)
52887* DECL_BASE_CONSTRUCTOR_P:               Functions for C++.  (line   88)
52888* DECL_COMPLETE_CONSTRUCTOR_P:           Functions for C++.  (line   84)
52889* DECL_COMPLETE_DESTRUCTOR_P:            Functions for C++.  (line   98)
52890* DECL_CONSTRUCTOR_P:                    Functions for C++.  (line   77)
52891* DECL_CONST_MEMFUNC_P:                  Functions for C++.  (line   71)
52892* DECL_CONTEXT:                          Namespaces.         (line   31)
52893* DECL_CONV_FN_P:                        Functions for C++.  (line  105)
52894* DECL_COPY_CONSTRUCTOR_P:               Functions for C++.  (line   92)
52895* DECL_DESTRUCTOR_P:                     Functions for C++.  (line   95)
52896* DECL_EXTERNAL:                         Declarations.       (line    6)
52897* DECL_EXTERNAL <1>:                     Function Properties.
52898                                                             (line   25)
52899* DECL_EXTERN_C_FUNCTION_P:              Functions for C++.  (line   46)
52900* DECL_FUNCTION_MEMBER_P:                Functions for C++.  (line   61)
52901* DECL_FUNCTION_SPECIFIC_OPTIMIZATION:   Function Basics.    (line    6)
52902* DECL_FUNCTION_SPECIFIC_OPTIMIZATION <1>: Function Properties.
52903                                                             (line   61)
52904* DECL_FUNCTION_SPECIFIC_TARGET:         Function Basics.    (line    6)
52905* DECL_FUNCTION_SPECIFIC_TARGET <1>:     Function Properties.
52906                                                             (line   55)
52907* DECL_GLOBAL_CTOR_P:                    Functions for C++.  (line  108)
52908* DECL_GLOBAL_DTOR_P:                    Functions for C++.  (line  112)
52909* DECL_INITIAL:                          Declarations.       (line    6)
52910* DECL_INITIAL <1>:                      Function Basics.    (line   51)
52911* DECL_LINKONCE_P:                       Functions for C++.  (line   50)
52912* DECL_LOCAL_FUNCTION_P:                 Functions for C++.  (line   38)
52913* DECL_MAIN_P:                           Functions for C++.  (line   34)
52914* DECL_NAME:                             Working with declarations.
52915                                                             (line    7)
52916* DECL_NAME <1>:                         Function Basics.    (line    6)
52917* DECL_NAME <2>:                         Function Basics.    (line    9)
52918* DECL_NAME <3>:                         Namespaces.         (line   20)
52919* DECL_NAMESPACE_ALIAS:                  Namespaces.         (line   35)
52920* DECL_NAMESPACE_STD_P:                  Namespaces.         (line   45)
52921* DECL_NONCONVERTING_P:                  Functions for C++.  (line   80)
52922* DECL_NONSTATIC_MEMBER_FUNCTION_P:      Functions for C++.  (line   68)
52923* DECL_NON_THUNK_FUNCTION_P:             Functions for C++.  (line  138)
52924* DECL_OVERLOADED_OPERATOR_P:            Functions for C++.  (line  102)
52925* DECL_PURE_P:                           Function Properties.
52926                                                             (line   40)
52927* DECL_RESULT:                           Function Basics.    (line   41)
52928* DECL_SAVED_TREE:                       Function Basics.    (line   44)
52929* DECL_SIZE:                             Declarations.       (line    6)
52930* DECL_STATIC_FUNCTION_P:                Functions for C++.  (line   65)
52931* DECL_STMT:                             Statements for C++. (line    6)
52932* DECL_STMT_DECL:                        Statements for C++. (line    6)
52933* DECL_THUNK_P:                          Functions for C++.  (line  116)
52934* DECL_VIRTUAL_P:                        Function Properties.
52935                                                             (line   44)
52936* DECL_VOLATILE_MEMFUNC_P:               Functions for C++.  (line   74)
52937* default:                               GTY Options.        (line   90)
52938* default_file_start:                    File Framework.     (line    8)
52939* DEFAULT_GDB_EXTENSIONS:                DBX Options.        (line   17)
52940* DEFAULT_INCOMING_FRAME_SP_OFFSET:      Frame Layout.       (line  199)
52941* DEFAULT_PCC_STRUCT_RETURN:             Aggregate Return.   (line   34)
52942* DEFAULT_SIGNED_CHAR:                   Type Layout.        (line  117)
52943* define_address_constraint:             Define Constraints. (line  113)
52944* define_asm_attributes:                 Tagging Insns.      (line   73)
52945* define_attr:                           Defining Attributes.
52946                                                             (line    6)
52947* define_automaton:                      Processor pipeline description.
52948                                                             (line   53)
52949* define_bypass:                         Processor pipeline description.
52950                                                             (line  196)
52951* define_code_attr:                      Code Iterators.     (line    6)
52952* define_code_iterator:                  Code Iterators.     (line    6)
52953* define_cond_exec:                      Conditional Execution.
52954                                                             (line   13)
52955* define_constants:                      Constant Definitions.
52956                                                             (line    6)
52957* define_constraint:                     Define Constraints. (line   45)
52958* define_cpu_unit:                       Processor pipeline description.
52959                                                             (line   68)
52960* define_c_enum:                         Constant Definitions.
52961                                                             (line   49)
52962* define_delay:                          Delay Slots.        (line   25)
52963* define_enum:                           Constant Definitions.
52964                                                             (line  118)
52965* define_enum_attr:                      Defining Attributes.
52966                                                             (line   83)
52967* define_enum_attr <1>:                  Constant Definitions.
52968                                                             (line  136)
52969* define_expand:                         Expander Definitions.
52970                                                             (line   11)
52971* define_insn:                           Patterns.           (line    6)
52972* 'define_insn' example:                 Example.            (line    6)
52973* define_insn_and_rewrite:               Insn Splitting.     (line  234)
52974* define_insn_and_split:                 Insn Splitting.     (line  190)
52975* define_insn_reservation:               Processor pipeline description.
52976                                                             (line  105)
52977* define_int_attr:                       Int Iterators.      (line    6)
52978* define_int_iterator:                   Int Iterators.      (line    6)
52979* define_memory_constraint:              Define Constraints. (line   80)
52980* define_mode_attr:                      Substitutions.      (line    6)
52981* define_mode_iterator:                  Defining Mode Iterators.
52982                                                             (line    6)
52983* define_peephole:                       define_peephole.    (line    6)
52984* define_peephole2:                      define_peephole2.   (line    6)
52985* define_predicate:                      Defining Predicates.
52986                                                             (line    6)
52987* define_query_cpu_unit:                 Processor pipeline description.
52988                                                             (line   90)
52989* define_register_constraint:            Define Constraints. (line   26)
52990* define_reservation:                    Processor pipeline description.
52991                                                             (line  185)
52992* define_special_memory_constraint:      Define Constraints. (line   99)
52993* define_special_predicate:              Defining Predicates.
52994                                                             (line    6)
52995* define_split:                          Insn Splitting.     (line   32)
52996* define_subst:                          Define Subst.       (line    6)
52997* define_subst <1>:                      Define Subst Example.
52998                                                             (line    6)
52999* define_subst <2>:                      Define Subst Pattern Matching.
53000                                                             (line    6)
53001* define_subst <3>:                      Define Subst Output Template.
53002                                                             (line    6)
53003* define_subst <4>:                      Define Subst.       (line   14)
53004* define_subst <5>:                      Subst Iterators.    (line    6)
53005* define_subst_attr:                     Subst Iterators.    (line    6)
53006* define_subst_attr <1>:                 Subst Iterators.    (line   26)
53007* defining attributes and their values:  Defining Attributes.
53008                                                             (line    6)
53009* defining constraints:                  Define Constraints. (line    6)
53010* defining jump instruction patterns:    Jump Patterns.      (line    6)
53011* defining looping instruction patterns: Looping Patterns.   (line    6)
53012* defining peephole optimizers:          Peephole Definitions.
53013                                                             (line    6)
53014* defining predicates:                   Defining Predicates.
53015                                                             (line    6)
53016* defining RTL sequences for code generation: Expander Definitions.
53017                                                             (line    6)
53018* delay slots, defining:                 Delay Slots.        (line    6)
53019* deletable:                             GTY Options.        (line  134)
53020* DELETE_IF_ORDINARY:                    Filesystem.         (line   79)
53021* Dependent Patterns:                    Dependent Patterns. (line    6)
53022* desc:                                  GTY Options.        (line   90)
53023* descriptors for nested functions:      Trampolines.        (line    6)
53024* destructors, output of:                Initialization.     (line    6)
53025* deterministic finite state automaton:  Processor pipeline description.
53026                                                             (line    6)
53027* deterministic finite state automaton <1>: Processor pipeline description.
53028                                                             (line  304)
53029* DFmode:                                Machine Modes.      (line   76)
53030* diagnostics guidelines, fix-it hints:  Guidelines for Diagnostics.
53031                                                             (line  320)
53032* diagnostics, actionable:               Guidelines for Diagnostics.
53033                                                             (line   15)
53034* diagnostics, false positive:           Guidelines for Diagnostics.
53035                                                             (line   39)
53036* diagnostics, guidelines for:           Guidelines for Diagnostics.
53037                                                             (line    5)
53038* diagnostics, locations:                Guidelines for Diagnostics.
53039                                                             (line  159)
53040* diagnostics, true positive:            Guidelines for Diagnostics.
53041                                                             (line   39)
53042* digits in constraint:                  Simple Constraints. (line  128)
53043* DImode:                                Machine Modes.      (line   45)
53044* directory options .md:                 Including Patterns. (line   45)
53045* DIR_SEPARATOR:                         Filesystem.         (line   18)
53046* DIR_SEPARATOR_2:                       Filesystem.         (line   19)
53047* disabling certain registers:           Register Basics.    (line  116)
53048* dispatch table:                        Dispatch Tables.    (line    8)
53049* div:                                   Arithmetic.         (line  116)
53050* 'div' and attributes:                  Expressions.        (line   83)
53051* division:                              Arithmetic.         (line  116)
53052* division <1>:                          Arithmetic.         (line  130)
53053* division <2>:                          Arithmetic.         (line  136)
53054* 'divM3' instruction pattern:           Standard Names.     (line  442)
53055* 'divmodM4' instruction pattern:        Standard Names.     (line  808)
53056* dollar sign:                           Multi-Alternative.  (line   57)
53057* DOLLARS_IN_IDENTIFIERS:                Misc.               (line  485)
53058* 'doloop_begin' instruction pattern:    Standard Names.     (line 1879)
53059* 'doloop_end' instruction pattern:      Standard Names.     (line 1867)
53060* DONE:                                  Expander Definitions.
53061                                                             (line   77)
53062* DONE <1>:                              Insn Splitting.     (line   61)
53063* DONE <2>:                              define_peephole2.   (line   76)
53064* DONT_USE_BUILTIN_SETJMP:               Exception Region Output.
53065                                                             (line   78)
53066* DOUBLE_TYPE_SIZE:                      Type Layout.        (line   52)
53067* DO_BODY:                               Statements for C++. (line    6)
53068* DO_COND:                               Statements for C++. (line    6)
53069* DO_STMT:                               Statements for C++. (line    6)
53070* DQmode:                                Machine Modes.      (line  118)
53071* driver:                                Driver.             (line    6)
53072* DRIVER_SELF_SPECS:                     Driver.             (line    8)
53073* dump examples:                         Dump examples.      (line    6)
53074* dump setup:                            Dump setup.         (line    6)
53075* dump types:                            Dump types.         (line    6)
53076* dump verbosity:                        Dump output verbosity.
53077                                                             (line    6)
53078* DUMPFILE_FORMAT:                       Filesystem.         (line   67)
53079* dump_basic_block:                      Dump types.         (line   29)
53080* dump_generic_expr:                     Dump types.         (line   31)
53081* dump_gimple_stmt:                      Dump types.         (line   33)
53082* dump_printf:                           Dump types.         (line    6)
53083* DWARF2_ASM_LINE_DEBUG_INFO:            DWARF.              (line   45)
53084* DWARF2_ASM_VIEW_DEBUG_INFO:            DWARF.              (line   51)
53085* DWARF2_DEBUGGING_INFO:                 DWARF.              (line    8)
53086* DWARF2_FRAME_INFO:                     DWARF.              (line   25)
53087* DWARF2_FRAME_REG_OUT:                  Frame Registers.    (line  149)
53088* DWARF2_UNWIND_INFO:                    Exception Region Output.
53089                                                             (line   39)
53090* DWARF_ALT_FRAME_RETURN_COLUMN:         Frame Layout.       (line  146)
53091* DWARF_CIE_DATA_ALIGNMENT:              Exception Region Output.
53092                                                             (line   90)
53093* DWARF_FRAME_REGISTERS:                 Frame Registers.    (line  109)
53094* DWARF_FRAME_REGNUM:                    Frame Registers.    (line  141)
53095* DWARF_LAZY_REGISTER_VALUE:             Frame Registers.    (line  170)
53096* DWARF_REG_TO_UNWIND_COLUMN:            Frame Registers.    (line  134)
53097* DWARF_ZERO_REG:                        Frame Layout.       (line  157)
53098* DYNAMIC_CHAIN_ADDRESS:                 Frame Layout.       (line   84)
53099* 'E' in constraint:                     Simple Constraints. (line   87)
53100* earlyclobber operand:                  Modifiers.          (line   25)
53101* edge:                                  Edges.              (line    6)
53102* edge in the flow graph:                Edges.              (line    6)
53103* edge iterators:                        Edges.              (line   15)
53104* edge splitting:                        Maintaining the CFG.
53105                                                             (line  104)
53106* EDGE_ABNORMAL:                         Edges.              (line  127)
53107* EDGE_ABNORMAL, EDGE_ABNORMAL_CALL:     Edges.              (line  171)
53108* EDGE_ABNORMAL, EDGE_EH:                Edges.              (line   95)
53109* EDGE_ABNORMAL, EDGE_SIBCALL:           Edges.              (line  121)
53110* EDGE_FALLTHRU, force_nonfallthru:      Edges.              (line   85)
53111* 'EDOM', implicit usage:                Library Calls.      (line   59)
53112* EH_FRAME_SECTION_NAME:                 Exception Region Output.
53113                                                             (line    9)
53114* EH_FRAME_THROUGH_COLLECT2:             Exception Region Output.
53115                                                             (line   19)
53116* 'eh_return' instruction pattern:       Standard Names.     (line 2060)
53117* EH_RETURN_DATA_REGNO:                  Exception Handling. (line    6)
53118* EH_RETURN_HANDLER_RTX:                 Exception Handling. (line   38)
53119* EH_RETURN_STACKADJ_RTX:                Exception Handling. (line   21)
53120* EH_TABLES_CAN_BE_READ_ONLY:            Exception Region Output.
53121                                                             (line   29)
53122* EH_USES:                               Function Entry.     (line  162)
53123* ei_edge:                               Edges.              (line   43)
53124* ei_end_p:                              Edges.              (line   27)
53125* ei_last:                               Edges.              (line   23)
53126* ei_next:                               Edges.              (line   35)
53127* ei_one_before_end_p:                   Edges.              (line   31)
53128* ei_prev:                               Edges.              (line   39)
53129* ei_safe_safe:                          Edges.              (line   47)
53130* ei_start:                              Edges.              (line   19)
53131* ELIMINABLE_REGS:                       Elimination.        (line   34)
53132* ELSE_CLAUSE:                           Statements for C++. (line    6)
53133* Embedded C:                            Fixed-point fractional library routines.
53134                                                             (line    6)
53135* Empty Statements:                      Empty Statements.   (line    6)
53136* EMPTY_CLASS_EXPR:                      Statements for C++. (line    6)
53137* EMPTY_FIELD_BOUNDARY:                  Storage Layout.     (line  341)
53138* Emulated TLS:                          Emulated TLS.       (line    6)
53139* enabled:                               Disable Insn Alternatives.
53140                                                             (line    6)
53141* ENDFILE_SPEC:                          Driver.             (line  155)
53142* endianness:                            Portability.        (line   20)
53143* ENTRY_BLOCK_PTR, EXIT_BLOCK_PTR:       Basic Blocks.       (line   10)
53144* entry_value:                           Debug Information.  (line   30)
53145* enum reg_class:                        Register Classes.   (line   70)
53146* ENUMERAL_TYPE:                         Types.              (line    6)
53147* enumerations:                          Constant Definitions.
53148                                                             (line   49)
53149* epilogue:                              Function Entry.     (line    6)
53150* 'epilogue' instruction pattern:        Standard Names.     (line 2098)
53151* EPILOGUE_USES:                         Function Entry.     (line  156)
53152* eq:                                    Comparisons.        (line   52)
53153* 'eq' and attributes:                   Expressions.        (line   83)
53154* equal:                                 Comparisons.        (line   52)
53155* eq_attr:                               Expressions.        (line  104)
53156* EQ_EXPR:                               Unary and Binary Expressions.
53157                                                             (line    6)
53158* 'errno', implicit usage:               Library Calls.      (line   71)
53159* EXACT_DIV_EXPR:                        Unary and Binary Expressions.
53160                                                             (line    6)
53161* examining SSA_NAMEs:                   SSA.                (line  182)
53162* exception handling:                    Edges.              (line   95)
53163* exception handling <1>:                Exception Handling. (line    6)
53164* 'exception_receiver' instruction pattern: Standard Names.  (line 2025)
53165* exclamation point:                     Multi-Alternative.  (line   48)
53166* exclusion_set:                         Processor pipeline description.
53167                                                             (line  223)
53168* exclusive-or, bitwise:                 Arithmetic.         (line  168)
53169* EXIT_EXPR:                             Unary and Binary Expressions.
53170                                                             (line    6)
53171* EXIT_IGNORE_STACK:                     Function Entry.     (line  144)
53172* 'exp10M2' instruction pattern:         Standard Names.     (line  995)
53173* 'exp2M2' instruction pattern:          Standard Names.     (line 1002)
53174* expander definitions:                  Expander Definitions.
53175                                                             (line    6)
53176* 'expm1M2' instruction pattern:         Standard Names.     (line  985)
53177* 'expM2' instruction pattern:           Standard Names.     (line  978)
53178* expression:                            Expression trees.   (line    6)
53179* expression codes:                      RTL Objects.        (line   47)
53180* EXPR_FILENAME:                         Working with declarations.
53181                                                             (line   14)
53182* EXPR_LINENO:                           Working with declarations.
53183                                                             (line   20)
53184* expr_list:                             Insns.              (line  568)
53185* EXPR_STMT:                             Statements for C++. (line    6)
53186* EXPR_STMT_EXPR:                        Statements for C++. (line    6)
53187* 'extendMN2' instruction pattern:       Standard Names.     (line 1447)
53188* extensible constraints:                Simple Constraints. (line  171)
53189* 'extract_last_M' instruction pattern:  Standard Names.     (line  543)
53190* EXTRA_SPECS:                           Driver.             (line  182)
53191* 'extv' instruction pattern:            Standard Names.     (line 1538)
53192* 'extvM' instruction pattern:           Standard Names.     (line 1483)
53193* 'extvmisalignM' instruction pattern:   Standard Names.     (line 1493)
53194* 'extzv' instruction pattern:           Standard Names.     (line 1556)
53195* 'extzvM' instruction pattern:          Standard Names.     (line 1507)
53196* 'extzvmisalignM' instruction pattern:  Standard Names.     (line 1510)
53197* 'F' in constraint:                     Simple Constraints. (line   92)
53198* FAIL:                                  Expander Definitions.
53199                                                             (line   83)
53200* FAIL <1>:                              Insn Splitting.     (line   68)
53201* FAIL <2>:                              define_peephole2.   (line   83)
53202* fall-thru:                             Edges.              (line   68)
53203* false positive:                        Guidelines for Diagnostics.
53204                                                             (line   39)
53205* FATAL_EXIT_CODE:                       Host Misc.          (line    6)
53206* FDL, GNU Free Documentation License:   GNU Free Documentation License.
53207                                                             (line    6)
53208* features, optional, in system conventions: Run-time Target.
53209                                                             (line   59)
53210* ffs:                                   Arithmetic.         (line  210)
53211* 'ffsM2' instruction pattern:           Standard Names.     (line 1157)
53212* FIELD_DECL:                            Declarations.       (line    6)
53213* files and passes of the compiler:      Passes.             (line    6)
53214* files, generated:                      Files.              (line    6)
53215* file_end_indicate_exec_stack:          File Framework.     (line   39)
53216* final_absence_set:                     Processor pipeline description.
53217                                                             (line  223)
53218* FINAL_PRESCAN_INSN:                    Instruction Output. (line   60)
53219* final_presence_set:                    Processor pipeline description.
53220                                                             (line  223)
53221* final_sequence:                        Instruction Output. (line  144)
53222* FIND_BASE_TERM:                        Addressing Modes.   (line  117)
53223* finite state automaton minimization:   Processor pipeline description.
53224                                                             (line  304)
53225* FINI_ARRAY_SECTION_ASM_OP:             Sections.           (line  113)
53226* FINI_SECTION_ASM_OP:                   Sections.           (line   98)
53227* FIRST_PARM_OFFSET:                     Frame Layout.       (line   59)
53228* 'FIRST_PARM_OFFSET' and virtual registers: Regs and Memory.
53229                                                             (line   65)
53230* FIRST_PSEUDO_REGISTER:                 Register Basics.    (line    8)
53231* FIRST_STACK_REG:                       Stack Registers.    (line   26)
53232* FIRST_VIRTUAL_REGISTER:                Regs and Memory.    (line   51)
53233* fix:                                   Conversions.        (line   66)
53234* fix-it hints:                          Guidelines for Diagnostics.
53235                                                             (line  320)
53236* fixed register:                        Register Basics.    (line   15)
53237* fixed-point fractional library:        Fixed-point fractional library routines.
53238                                                             (line    6)
53239* FIXED_CONVERT_EXPR:                    Unary and Binary Expressions.
53240                                                             (line    6)
53241* FIXED_CST:                             Constant expressions.
53242                                                             (line    6)
53243* FIXED_POINT_TYPE:                      Types.              (line    6)
53244* FIXED_REGISTERS:                       Register Basics.    (line   14)
53245* fixed_regs:                            Register Basics.    (line  102)
53246* fixed_size_mode:                       Machine Modes.      (line  305)
53247* 'fixMN2' instruction pattern:          Standard Names.     (line 1414)
53248* 'fixunsMN2' instruction pattern:       Standard Names.     (line 1423)
53249* 'fixuns_truncMN2' instruction pattern: Standard Names.     (line 1438)
53250* 'fix_truncMN2' instruction pattern:    Standard Names.     (line 1434)
53251* FIX_TRUNC_EXPR:                        Unary and Binary Expressions.
53252                                                             (line    6)
53253* flags in RTL expression:               Flags.              (line    6)
53254* float:                                 Conversions.        (line   58)
53255* floating point and cross compilation:  Floating Point.     (line    6)
53256* 'floatMN2' instruction pattern:        Standard Names.     (line 1406)
53257* 'floatunsMN2' instruction pattern:     Standard Names.     (line 1410)
53258* FLOAT_EXPR:                            Unary and Binary Expressions.
53259                                                             (line    6)
53260* float_extend:                          Conversions.        (line   33)
53261* FLOAT_LIB_COMPARE_RETURNS_BOOL:        Library Calls.      (line   32)
53262* FLOAT_STORE_FLAG_VALUE:                Misc.               (line  320)
53263* float_truncate:                        Conversions.        (line   53)
53264* FLOAT_TYPE_SIZE:                       Type Layout.        (line   48)
53265* FLOAT_WORDS_BIG_ENDIAN:                Storage Layout.     (line   41)
53266* 'FLOAT_WORDS_BIG_ENDIAN', (lack of) effect on 'subreg': Regs and Memory.
53267                                                             (line  234)
53268* 'floorM2' instruction pattern:         Standard Names.     (line 1069)
53269* FLOOR_DIV_EXPR:                        Unary and Binary Expressions.
53270                                                             (line    6)
53271* FLOOR_MOD_EXPR:                        Unary and Binary Expressions.
53272                                                             (line    6)
53273* flow-insensitive alias analysis:       Alias analysis.     (line    6)
53274* flow-sensitive alias analysis:         Alias analysis.     (line    6)
53275* fma:                                   Arithmetic.         (line  112)
53276* 'fmaM4' instruction pattern:           Standard Names.     (line  478)
53277* 'fmaxM3' instruction pattern:          Standard Names.     (line  509)
53278* 'fminM3' instruction pattern:          Standard Names.     (line  509)
53279* 'fmodM3' instruction pattern:          Standard Names.     (line  901)
53280* 'fmsM4' instruction pattern:           Standard Names.     (line  485)
53281* 'fnmaM4' instruction pattern:          Standard Names.     (line  491)
53282* 'fnmsM4' instruction pattern:          Standard Names.     (line  497)
53283* 'fold_extract_last_M' instruction pattern: Standard Names. (line  550)
53284* 'fold_left_plus_M' instruction pattern: Standard Names.    (line  558)
53285* FORCE_CODE_SECTION_ALIGN:              Sections.           (line  149)
53286* force_reg:                             Standard Names.     (line   36)
53287* FOR_BODY:                              Statements for C++. (line    6)
53288* FOR_COND:                              Statements for C++. (line    6)
53289* FOR_EXPR:                              Statements for C++. (line    6)
53290* FOR_INIT_STMT:                         Statements for C++. (line    6)
53291* FOR_STMT:                              Statements for C++. (line    6)
53292* for_user:                              GTY Options.        (line   82)
53293* fractional types:                      Fixed-point fractional library routines.
53294                                                             (line    6)
53295* 'fractMN2' instruction pattern:        Standard Names.     (line 1456)
53296* 'fractunsMN2' instruction pattern:     Standard Names.     (line 1471)
53297* fract_convert:                         Conversions.        (line   82)
53298* FRACT_TYPE_SIZE:                       Type Layout.        (line   67)
53299* frame layout:                          Frame Layout.       (line    6)
53300* FRAME_ADDR_RTX:                        Frame Layout.       (line  108)
53301* FRAME_GROWS_DOWNWARD:                  Frame Layout.       (line   26)
53302* 'FRAME_GROWS_DOWNWARD' and virtual registers: Regs and Memory.
53303                                                             (line   69)
53304* FRAME_POINTER_CFA_OFFSET:              Frame Layout.       (line  225)
53305* frame_pointer_needed:                  Function Entry.     (line   42)
53306* FRAME_POINTER_REGNUM:                  Frame Registers.    (line   13)
53307* 'FRAME_POINTER_REGNUM' and virtual registers: Regs and Memory.
53308                                                             (line   74)
53309* frame_pointer_rtx:                     Frame Registers.    (line  104)
53310* frame_related:                         Flags.              (line  238)
53311* 'frame_related', in 'insn', 'call_insn', 'jump_insn', 'barrier', and 'set': Flags.
53312                                                             (line  135)
53313* 'frame_related', in 'mem':             Flags.              (line   74)
53314* 'frame_related', in 'reg':             Flags.              (line  102)
53315* 'frame_related', in 'symbol_ref':      Flags.              (line  179)
53316* frequency, count, BB_FREQ_BASE:        Profile information.
53317                                                             (line   30)
53318* 'ftruncM2' instruction pattern:        Standard Names.     (line 1429)
53319* function:                              Functions.          (line    6)
53320* function <1>:                          Functions for C++.  (line    6)
53321* function call conventions:             Interface.          (line    6)
53322* function entry and exit:               Function Entry.     (line    6)
53323* function entry point, alternate function entry point: Edges.
53324                                                             (line  180)
53325* function properties:                   Function Properties.
53326                                                             (line    6)
53327* function-call insns:                   Calls.              (line    6)
53328* functions, leaf:                       Leaf Functions.     (line    6)
53329* FUNCTION_ARG_REGNO_P:                  Register Arguments. (line  261)
53330* FUNCTION_BOUNDARY:                     Storage Layout.     (line  176)
53331* FUNCTION_DECL:                         Functions.          (line    6)
53332* FUNCTION_DECL <1>:                     Functions for C++.  (line    6)
53333* FUNCTION_MODE:                         Misc.               (line  375)
53334* FUNCTION_PROFILER:                     Profiling.          (line    8)
53335* FUNCTION_TYPE:                         Types.              (line    6)
53336* FUNCTION_VALUE:                        Scalar Return.      (line   52)
53337* FUNCTION_VALUE_REGNO_P:                Scalar Return.      (line   78)
53338* fundamental type:                      Types.              (line    6)
53339* 'G' in constraint:                     Simple Constraints. (line   96)
53340* 'g' in constraint:                     Simple Constraints. (line  118)
53341* garbage collector, invocation:         Invoking the garbage collector.
53342                                                             (line    6)
53343* garbage collector, troubleshooting:    Troubleshooting.    (line    6)
53344* 'gather_loadMN' instruction pattern:   Standard Names.     (line  232)
53345* GCC and portability:                   Portability.        (line    6)
53346* GCC_DRIVER_HOST_INITIALIZATION:        Host Misc.          (line   36)
53347* gcov_type:                             Profile information.
53348                                                             (line   41)
53349* ge:                                    Comparisons.        (line   72)
53350* 'ge' and attributes:                   Expressions.        (line   83)
53351* gencodes:                              RTL passes.         (line   18)
53352* general_operand:                       Machine-Independent Predicates.
53353                                                             (line  104)
53354* GENERAL_REGS:                          Register Classes.   (line   22)
53355* generated files:                       Files.              (line    6)
53356* generating assembler output:           Output Statement.   (line    6)
53357* generating insns:                      RTL Template.       (line    6)
53358* GENERIC:                               Parsing pass.       (line    6)
53359* GENERIC <1>:                           GENERIC.            (line    6)
53360* generic predicates:                    Machine-Independent Predicates.
53361                                                             (line    6)
53362* genflags:                              RTL passes.         (line   18)
53363* GEN_ERRNO_RTX:                         Library Calls.      (line   71)
53364* get_attr:                              Expressions.        (line   99)
53365* get_attr_length:                       Insn Lengths.       (line   52)
53366* GET_CLASS_NARROWEST_MODE:              Machine Modes.      (line  430)
53367* GET_CODE:                              RTL Objects.        (line   47)
53368* get_insns:                             Insns.              (line   34)
53369* get_last_insn:                         Insns.              (line   34)
53370* GET_MODE:                              Machine Modes.      (line  377)
53371* GET_MODE_ALIGNMENT:                    Machine Modes.      (line  417)
53372* GET_MODE_BITSIZE:                      Machine Modes.      (line  401)
53373* GET_MODE_CLASS:                        Machine Modes.      (line  391)
53374* GET_MODE_FBIT:                         Machine Modes.      (line  408)
53375* GET_MODE_IBIT:                         Machine Modes.      (line  404)
53376* GET_MODE_MASK:                         Machine Modes.      (line  412)
53377* GET_MODE_NAME:                         Machine Modes.      (line  388)
53378* GET_MODE_NUNITS:                       Machine Modes.      (line  426)
53379* GET_MODE_SIZE:                         Machine Modes.      (line  398)
53380* GET_MODE_UNIT_SIZE:                    Machine Modes.      (line  420)
53381* GET_MODE_WIDER_MODE:                   Machine Modes.      (line  394)
53382* GET_RTX_CLASS:                         RTL Classes.        (line    6)
53383* GET_RTX_FORMAT:                        RTL Classes.        (line  136)
53384* GET_RTX_LENGTH:                        RTL Classes.        (line  133)
53385* 'get_thread_pointerMODE' instruction pattern: Standard Names.
53386                                                             (line 2477)
53387* geu:                                   Comparisons.        (line   72)
53388* 'geu' and attributes:                  Expressions.        (line   83)
53389* GE_EXPR:                               Unary and Binary Expressions.
53390                                                             (line    6)
53391* GGC:                                   Type Information.   (line    6)
53392* ggc_collect:                           Invoking the garbage collector.
53393                                                             (line    6)
53394* GIMPLE:                                Parsing pass.       (line   13)
53395* GIMPLE <1>:                            Gimplification pass.
53396                                                             (line    6)
53397* GIMPLE <2>:                            GIMPLE.             (line    6)
53398* gimple:                                Tuple representation.
53399                                                             (line   14)
53400* GIMPLE API:                            GIMPLE API.         (line    6)
53401* GIMPLE class hierarchy:                Class hierarchy of GIMPLE statements.
53402                                                             (line    6)
53403* GIMPLE Exception Handling:             GIMPLE Exception Handling.
53404                                                             (line    6)
53405* GIMPLE instruction set:                GIMPLE instruction set.
53406                                                             (line    6)
53407* GIMPLE sequences:                      GIMPLE sequences.   (line    6)
53408* GIMPLE statement iterators:            Basic Blocks.       (line   78)
53409* GIMPLE statement iterators <1>:        Maintaining the CFG.
53410                                                             (line   33)
53411* gimple_addresses_taken:                Manipulating GIMPLE statements.
53412                                                             (line   89)
53413* 'GIMPLE_ASM':                          'GIMPLE_ASM'.       (line    6)
53414* gimple_asm_clobber_op:                 'GIMPLE_ASM'.       (line   39)
53415* gimple_asm_input_op:                   'GIMPLE_ASM'.       (line   23)
53416* gimple_asm_nclobbers:                  'GIMPLE_ASM'.       (line   20)
53417* gimple_asm_ninputs:                    'GIMPLE_ASM'.       (line   14)
53418* gimple_asm_noutputs:                   'GIMPLE_ASM'.       (line   17)
53419* gimple_asm_output_op:                  'GIMPLE_ASM'.       (line   31)
53420* gimple_asm_set_clobber_op:             'GIMPLE_ASM'.       (line   43)
53421* gimple_asm_set_input_op:               'GIMPLE_ASM'.       (line   27)
53422* gimple_asm_set_output_op:              'GIMPLE_ASM'.       (line   35)
53423* gimple_asm_set_volatile:               'GIMPLE_ASM'.       (line   54)
53424* gimple_asm_string:                     'GIMPLE_ASM'.       (line   47)
53425* gimple_asm_volatile_p:                 'GIMPLE_ASM'.       (line   51)
53426* 'GIMPLE_ASSIGN':                       'GIMPLE_ASSIGN'.    (line    6)
53427* gimple_assign_cast_p:                  Logical Operators.  (line  158)
53428* gimple_assign_cast_p <1>:              'GIMPLE_ASSIGN'.    (line  104)
53429* gimple_assign_lhs:                     'GIMPLE_ASSIGN'.    (line   62)
53430* gimple_assign_lhs_ptr:                 'GIMPLE_ASSIGN'.    (line   65)
53431* gimple_assign_rhs1:                    'GIMPLE_ASSIGN'.    (line   68)
53432* gimple_assign_rhs1_ptr:                'GIMPLE_ASSIGN'.    (line   71)
53433* gimple_assign_rhs2:                    'GIMPLE_ASSIGN'.    (line   75)
53434* gimple_assign_rhs2_ptr:                'GIMPLE_ASSIGN'.    (line   78)
53435* gimple_assign_rhs3:                    'GIMPLE_ASSIGN'.    (line   82)
53436* gimple_assign_rhs3_ptr:                'GIMPLE_ASSIGN'.    (line   85)
53437* gimple_assign_rhs_class:               'GIMPLE_ASSIGN'.    (line   56)
53438* gimple_assign_rhs_code:                'GIMPLE_ASSIGN'.    (line   52)
53439* gimple_assign_set_lhs:                 'GIMPLE_ASSIGN'.    (line   89)
53440* gimple_assign_set_rhs1:                'GIMPLE_ASSIGN'.    (line   92)
53441* gimple_assign_set_rhs2:                'GIMPLE_ASSIGN'.    (line   96)
53442* gimple_assign_set_rhs3:                'GIMPLE_ASSIGN'.    (line  100)
53443* gimple_bb:                             Manipulating GIMPLE statements.
53444                                                             (line   17)
53445* 'GIMPLE_BIND':                         'GIMPLE_BIND'.      (line    6)
53446* gimple_bind_add_seq:                   'GIMPLE_BIND'.      (line   34)
53447* gimple_bind_add_stmt:                  'GIMPLE_BIND'.      (line   31)
53448* gimple_bind_append_vars:               'GIMPLE_BIND'.      (line   18)
53449* gimple_bind_block:                     'GIMPLE_BIND'.      (line   39)
53450* gimple_bind_body:                      'GIMPLE_BIND'.      (line   22)
53451* gimple_bind_set_block:                 'GIMPLE_BIND'.      (line   44)
53452* gimple_bind_set_body:                  'GIMPLE_BIND'.      (line   26)
53453* gimple_bind_set_vars:                  'GIMPLE_BIND'.      (line   14)
53454* gimple_bind_vars:                      'GIMPLE_BIND'.      (line   11)
53455* gimple_block:                          Manipulating GIMPLE statements.
53456                                                             (line   20)
53457* gimple_build:                          GIMPLE API.         (line   34)
53458* gimple_build <1>:                      GIMPLE API.         (line   36)
53459* gimple_build <2>:                      GIMPLE API.         (line   38)
53460* gimple_build <3>:                      GIMPLE API.         (line   41)
53461* gimple_build <4>:                      GIMPLE API.         (line   44)
53462* gimple_build <5>:                      GIMPLE API.         (line   47)
53463* gimple_build_debug_begin_stmt:         'GIMPLE_DEBUG'.     (line   72)
53464* gimple_build_debug_inline_entry:       'GIMPLE_DEBUG'.     (line   82)
53465* gimple_build_nop:                      'GIMPLE_NOP'.       (line    6)
53466* gimple_build_omp_master:               'GIMPLE_OMP_MASTER'.
53467                                                             (line    6)
53468* gimple_build_omp_ordered:              'GIMPLE_OMP_ORDERED'.
53469                                                             (line    6)
53470* gimple_build_omp_return:               'GIMPLE_OMP_RETURN'.
53471                                                             (line    6)
53472* gimple_build_omp_section:              'GIMPLE_OMP_SECTION'.
53473                                                             (line    6)
53474* gimple_build_omp_sections_switch:      'GIMPLE_OMP_SECTIONS'.
53475                                                             (line   13)
53476* gimple_build_wce:                      'GIMPLE_WITH_CLEANUP_EXPR'.
53477                                                             (line    6)
53478* 'GIMPLE_CALL':                         'GIMPLE_CALL'.      (line    6)
53479* gimple_call_arg:                       'GIMPLE_CALL'.      (line   67)
53480* gimple_call_arg_ptr:                   'GIMPLE_CALL'.      (line   71)
53481* gimple_call_chain:                     'GIMPLE_CALL'.      (line   58)
53482* gimple_call_copy_skip_args:            'GIMPLE_CALL'.      (line   92)
53483* gimple_call_fn:                        'GIMPLE_CALL'.      (line   39)
53484* gimple_call_fndecl:                    'GIMPLE_CALL'.      (line   47)
53485* gimple_call_lhs:                       'GIMPLE_CALL'.      (line   30)
53486* gimple_call_lhs_ptr:                   'GIMPLE_CALL'.      (line   33)
53487* gimple_call_noreturn_p:                'GIMPLE_CALL'.      (line   89)
53488* gimple_call_num_args:                  'GIMPLE_CALL'.      (line   64)
53489* gimple_call_return_type:               'GIMPLE_CALL'.      (line   55)
53490* gimple_call_set_arg:                   'GIMPLE_CALL'.      (line   76)
53491* gimple_call_set_chain:                 'GIMPLE_CALL'.      (line   61)
53492* gimple_call_set_fn:                    'GIMPLE_CALL'.      (line   43)
53493* gimple_call_set_fndecl:                'GIMPLE_CALL'.      (line   52)
53494* gimple_call_set_lhs:                   'GIMPLE_CALL'.      (line   36)
53495* gimple_call_set_tail:                  'GIMPLE_CALL'.      (line   81)
53496* gimple_call_tail_p:                    'GIMPLE_CALL'.      (line   86)
53497* 'GIMPLE_CATCH':                        'GIMPLE_CATCH'.     (line    6)
53498* gimple_catch_handler:                  'GIMPLE_CATCH'.     (line   19)
53499* gimple_catch_set_handler:              'GIMPLE_CATCH'.     (line   26)
53500* gimple_catch_set_types:                'GIMPLE_CATCH'.     (line   23)
53501* gimple_catch_types:                    'GIMPLE_CATCH'.     (line   12)
53502* gimple_catch_types_ptr:                'GIMPLE_CATCH'.     (line   15)
53503* gimple_code:                           Manipulating GIMPLE statements.
53504                                                             (line   14)
53505* 'GIMPLE_COND':                         'GIMPLE_COND'.      (line    6)
53506* gimple_cond_code:                      'GIMPLE_COND'.      (line   20)
53507* gimple_cond_false_label:               'GIMPLE_COND'.      (line   59)
53508* gimple_cond_lhs:                       'GIMPLE_COND'.      (line   29)
53509* gimple_cond_make_false:                'GIMPLE_COND'.      (line   63)
53510* gimple_cond_make_true:                 'GIMPLE_COND'.      (line   66)
53511* gimple_cond_rhs:                       'GIMPLE_COND'.      (line   37)
53512* gimple_cond_set_code:                  'GIMPLE_COND'.      (line   24)
53513* gimple_cond_set_false_label:           'GIMPLE_COND'.      (line   54)
53514* gimple_cond_set_lhs:                   'GIMPLE_COND'.      (line   33)
53515* gimple_cond_set_rhs:                   'GIMPLE_COND'.      (line   41)
53516* gimple_cond_set_true_label:            'GIMPLE_COND'.      (line   49)
53517* gimple_cond_true_label:                'GIMPLE_COND'.      (line   45)
53518* gimple_convert:                        GIMPLE API.         (line   50)
53519* gimple_copy:                           Manipulating GIMPLE statements.
53520                                                             (line  146)
53521* 'GIMPLE_DEBUG':                        'GIMPLE_DEBUG'.     (line    6)
53522* 'GIMPLE_DEBUG_BEGIN_STMT':             'GIMPLE_DEBUG'.     (line    6)
53523* 'GIMPLE_DEBUG_BIND':                   'GIMPLE_DEBUG'.     (line    6)
53524* gimple_debug_bind_get_value:           'GIMPLE_DEBUG'.     (line   46)
53525* gimple_debug_bind_get_value_ptr:       'GIMPLE_DEBUG'.     (line   50)
53526* gimple_debug_bind_get_var:             'GIMPLE_DEBUG'.     (line   43)
53527* gimple_debug_bind_has_value_p:         'GIMPLE_DEBUG'.     (line   68)
53528* gimple_debug_bind_p:                   Logical Operators.  (line  162)
53529* gimple_debug_bind_reset_value:         'GIMPLE_DEBUG'.     (line   64)
53530* gimple_debug_bind_set_value:           'GIMPLE_DEBUG'.     (line   59)
53531* gimple_debug_bind_set_var:             'GIMPLE_DEBUG'.     (line   55)
53532* 'GIMPLE_DEBUG_INLINE_ENTRY':           'GIMPLE_DEBUG'.     (line    6)
53533* gimple_def_ops:                        Manipulating GIMPLE statements.
53534                                                             (line   93)
53535* 'GIMPLE_EH_FILTER':                    'GIMPLE_EH_FILTER'. (line    6)
53536* gimple_eh_filter_failure:              'GIMPLE_EH_FILTER'. (line   18)
53537* gimple_eh_filter_set_failure:          'GIMPLE_EH_FILTER'. (line   27)
53538* gimple_eh_filter_set_types:            'GIMPLE_EH_FILTER'. (line   22)
53539* gimple_eh_filter_types:                'GIMPLE_EH_FILTER'. (line   11)
53540* gimple_eh_filter_types_ptr:            'GIMPLE_EH_FILTER'. (line   14)
53541* gimple_eh_must_not_throw_fndecl:       'GIMPLE_EH_FILTER'. (line   32)
53542* gimple_eh_must_not_throw_set_fndecl:   'GIMPLE_EH_FILTER'. (line   36)
53543* gimple_expr_code:                      Manipulating GIMPLE statements.
53544                                                             (line   30)
53545* gimple_expr_type:                      Manipulating GIMPLE statements.
53546                                                             (line   23)
53547* 'GIMPLE_GOTO':                         'GIMPLE_GOTO'.      (line    6)
53548* gimple_goto_dest:                      'GIMPLE_GOTO'.      (line    9)
53549* gimple_goto_set_dest:                  'GIMPLE_GOTO'.      (line   12)
53550* gimple_has_mem_ops:                    Manipulating GIMPLE statements.
53551                                                             (line   71)
53552* gimple_has_ops:                        Manipulating GIMPLE statements.
53553                                                             (line   68)
53554* gimple_has_volatile_ops:               Manipulating GIMPLE statements.
53555                                                             (line  133)
53556* 'GIMPLE_LABEL':                        'GIMPLE_LABEL'.     (line    6)
53557* gimple_label_label:                    'GIMPLE_LABEL'.     (line   10)
53558* gimple_label_set_label:                'GIMPLE_LABEL'.     (line   13)
53559* gimple_loaded_syms:                    Manipulating GIMPLE statements.
53560                                                             (line  121)
53561* gimple_locus:                          Manipulating GIMPLE statements.
53562                                                             (line   41)
53563* gimple_locus_empty_p:                  Manipulating GIMPLE statements.
53564                                                             (line   47)
53565* gimple_modified_p:                     Manipulating GIMPLE statements.
53566                                                             (line  129)
53567* 'GIMPLE_NOP':                          'GIMPLE_NOP'.       (line    6)
53568* gimple_nop_p:                          'GIMPLE_NOP'.       (line    9)
53569* gimple_no_warning_p:                   Manipulating GIMPLE statements.
53570                                                             (line   50)
53571* gimple_num_ops:                        Logical Operators.  (line   76)
53572* gimple_num_ops <1>:                    Manipulating GIMPLE statements.
53573                                                             (line   74)
53574* 'GIMPLE_OMP_ATOMIC_LOAD':              'GIMPLE_OMP_ATOMIC_LOAD'.
53575                                                             (line    6)
53576* gimple_omp_atomic_load_lhs:            'GIMPLE_OMP_ATOMIC_LOAD'.
53577                                                             (line   16)
53578* gimple_omp_atomic_load_rhs:            'GIMPLE_OMP_ATOMIC_LOAD'.
53579                                                             (line   24)
53580* gimple_omp_atomic_load_set_lhs:        'GIMPLE_OMP_ATOMIC_LOAD'.
53581                                                             (line   12)
53582* gimple_omp_atomic_load_set_rhs:        'GIMPLE_OMP_ATOMIC_LOAD'.
53583                                                             (line   20)
53584* 'GIMPLE_OMP_ATOMIC_STORE':             'GIMPLE_OMP_ATOMIC_STORE'.
53585                                                             (line    6)
53586* gimple_omp_atomic_store_set_val:       'GIMPLE_OMP_ATOMIC_STORE'.
53587                                                             (line   11)
53588* gimple_omp_atomic_store_val:           'GIMPLE_OMP_ATOMIC_STORE'.
53589                                                             (line   15)
53590* gimple_omp_body:                       'GIMPLE_OMP_PARALLEL'.
53591                                                             (line   23)
53592* 'GIMPLE_OMP_CONTINUE':                 'GIMPLE_OMP_CONTINUE'.
53593                                                             (line    6)
53594* gimple_omp_continue_control_def:       'GIMPLE_OMP_CONTINUE'.
53595                                                             (line   12)
53596* gimple_omp_continue_control_def_ptr:   'GIMPLE_OMP_CONTINUE'.
53597                                                             (line   17)
53598* gimple_omp_continue_control_use:       'GIMPLE_OMP_CONTINUE'.
53599                                                             (line   26)
53600* gimple_omp_continue_control_use_ptr:   'GIMPLE_OMP_CONTINUE'.
53601                                                             (line   31)
53602* gimple_omp_continue_set_control_def:   'GIMPLE_OMP_CONTINUE'.
53603                                                             (line   21)
53604* gimple_omp_continue_set_control_use:   'GIMPLE_OMP_CONTINUE'.
53605                                                             (line   35)
53606* 'GIMPLE_OMP_CRITICAL':                 'GIMPLE_OMP_CRITICAL'.
53607                                                             (line    6)
53608* gimple_omp_critical_name:              'GIMPLE_OMP_CRITICAL'.
53609                                                             (line   12)
53610* gimple_omp_critical_name_ptr:          'GIMPLE_OMP_CRITICAL'.
53611                                                             (line   16)
53612* gimple_omp_critical_set_name:          'GIMPLE_OMP_CRITICAL'.
53613                                                             (line   21)
53614* 'GIMPLE_OMP_FOR':                      'GIMPLE_OMP_FOR'.   (line    6)
53615* gimple_omp_for_clauses:                'GIMPLE_OMP_FOR'.   (line   17)
53616* gimple_omp_for_clauses_ptr:            'GIMPLE_OMP_FOR'.   (line   20)
53617* gimple_omp_for_cond:                   'GIMPLE_OMP_FOR'.   (line   80)
53618* gimple_omp_for_final:                  'GIMPLE_OMP_FOR'.   (line   48)
53619* gimple_omp_for_final_ptr:              'GIMPLE_OMP_FOR'.   (line   51)
53620* gimple_omp_for_incr:                   'GIMPLE_OMP_FOR'.   (line   58)
53621* gimple_omp_for_incr_ptr:               'GIMPLE_OMP_FOR'.   (line   61)
53622* gimple_omp_for_index:                  'GIMPLE_OMP_FOR'.   (line   28)
53623* gimple_omp_for_index_ptr:              'GIMPLE_OMP_FOR'.   (line   31)
53624* gimple_omp_for_initial:                'GIMPLE_OMP_FOR'.   (line   38)
53625* gimple_omp_for_initial_ptr:            'GIMPLE_OMP_FOR'.   (line   41)
53626* gimple_omp_for_pre_body:               'GIMPLE_OMP_FOR'.   (line   67)
53627* gimple_omp_for_set_clauses:            'GIMPLE_OMP_FOR'.   (line   23)
53628* gimple_omp_for_set_cond:               'GIMPLE_OMP_FOR'.   (line   76)
53629* gimple_omp_for_set_final:              'GIMPLE_OMP_FOR'.   (line   54)
53630* gimple_omp_for_set_incr:               'GIMPLE_OMP_FOR'.   (line   64)
53631* gimple_omp_for_set_index:              'GIMPLE_OMP_FOR'.   (line   34)
53632* gimple_omp_for_set_initial:            'GIMPLE_OMP_FOR'.   (line   44)
53633* gimple_omp_for_set_pre_body:           'GIMPLE_OMP_FOR'.   (line   71)
53634* 'GIMPLE_OMP_MASTER':                   'GIMPLE_OMP_MASTER'.
53635                                                             (line    6)
53636* 'GIMPLE_OMP_ORDERED':                  'GIMPLE_OMP_ORDERED'.
53637                                                             (line    6)
53638* 'GIMPLE_OMP_PARALLEL':                 'GIMPLE_OMP_PARALLEL'.
53639                                                             (line    6)
53640* gimple_omp_parallel_child_fn:          'GIMPLE_OMP_PARALLEL'.
53641                                                             (line   42)
53642* gimple_omp_parallel_child_fn_ptr:      'GIMPLE_OMP_PARALLEL'.
53643                                                             (line   47)
53644* gimple_omp_parallel_clauses:           'GIMPLE_OMP_PARALLEL'.
53645                                                             (line   30)
53646* gimple_omp_parallel_clauses_ptr:       'GIMPLE_OMP_PARALLEL'.
53647                                                             (line   33)
53648* gimple_omp_parallel_combined_p:        'GIMPLE_OMP_PARALLEL'.
53649                                                             (line   15)
53650* gimple_omp_parallel_data_arg:          'GIMPLE_OMP_PARALLEL'.
53651                                                             (line   56)
53652* gimple_omp_parallel_data_arg_ptr:      'GIMPLE_OMP_PARALLEL'.
53653                                                             (line   61)
53654* gimple_omp_parallel_set_child_fn:      'GIMPLE_OMP_PARALLEL'.
53655                                                             (line   52)
53656* gimple_omp_parallel_set_clauses:       'GIMPLE_OMP_PARALLEL'.
53657                                                             (line   37)
53658* gimple_omp_parallel_set_combined_p:    'GIMPLE_OMP_PARALLEL'.
53659                                                             (line   19)
53660* gimple_omp_parallel_set_data_arg:      'GIMPLE_OMP_PARALLEL'.
53661                                                             (line   65)
53662* 'GIMPLE_OMP_RETURN':                   'GIMPLE_OMP_RETURN'.
53663                                                             (line    6)
53664* gimple_omp_return_nowait_p:            'GIMPLE_OMP_RETURN'.
53665                                                             (line   13)
53666* gimple_omp_return_set_nowait:          'GIMPLE_OMP_RETURN'.
53667                                                             (line   10)
53668* 'GIMPLE_OMP_SECTION':                  'GIMPLE_OMP_SECTION'.
53669                                                             (line    6)
53670* 'GIMPLE_OMP_SECTIONS':                 'GIMPLE_OMP_SECTIONS'.
53671                                                             (line    6)
53672* gimple_omp_sections_clauses:           'GIMPLE_OMP_SECTIONS'.
53673                                                             (line   29)
53674* gimple_omp_sections_clauses_ptr:       'GIMPLE_OMP_SECTIONS'.
53675                                                             (line   32)
53676* gimple_omp_sections_control:           'GIMPLE_OMP_SECTIONS'.
53677                                                             (line   16)
53678* gimple_omp_sections_control_ptr:       'GIMPLE_OMP_SECTIONS'.
53679                                                             (line   20)
53680* gimple_omp_sections_set_clauses:       'GIMPLE_OMP_SECTIONS'.
53681                                                             (line   35)
53682* gimple_omp_sections_set_control:       'GIMPLE_OMP_SECTIONS'.
53683                                                             (line   24)
53684* gimple_omp_section_last_p:             'GIMPLE_OMP_SECTION'.
53685                                                             (line   11)
53686* gimple_omp_section_set_last:           'GIMPLE_OMP_SECTION'.
53687                                                             (line   15)
53688* gimple_omp_set_body:                   'GIMPLE_OMP_PARALLEL'.
53689                                                             (line   26)
53690* 'GIMPLE_OMP_SINGLE':                   'GIMPLE_OMP_SINGLE'.
53691                                                             (line    6)
53692* gimple_omp_single_clauses:             'GIMPLE_OMP_SINGLE'.
53693                                                             (line   13)
53694* gimple_omp_single_clauses_ptr:         'GIMPLE_OMP_SINGLE'.
53695                                                             (line   16)
53696* gimple_omp_single_set_clauses:         'GIMPLE_OMP_SINGLE'.
53697                                                             (line   19)
53698* gimple_op:                             Logical Operators.  (line   79)
53699* gimple_op <1>:                         Manipulating GIMPLE statements.
53700                                                             (line   80)
53701* gimple_ops:                            Logical Operators.  (line   82)
53702* gimple_ops <1>:                        Manipulating GIMPLE statements.
53703                                                             (line   77)
53704* gimple_op_ptr:                         Manipulating GIMPLE statements.
53705                                                             (line   83)
53706* 'GIMPLE_PHI':                          'GIMPLE_PHI'.       (line    6)
53707* gimple_phi_arg:                        'GIMPLE_PHI'.       (line   24)
53708* gimple_phi_arg <1>:                    SSA.                (line   62)
53709* gimple_phi_arg_def:                    SSA.                (line   68)
53710* gimple_phi_arg_edge:                   SSA.                (line   65)
53711* gimple_phi_capacity:                   'GIMPLE_PHI'.       (line    6)
53712* gimple_phi_num_args:                   'GIMPLE_PHI'.       (line   10)
53713* gimple_phi_num_args <1>:               SSA.                (line   58)
53714* gimple_phi_result:                     'GIMPLE_PHI'.       (line   15)
53715* gimple_phi_result <1>:                 SSA.                (line   55)
53716* gimple_phi_result_ptr:                 'GIMPLE_PHI'.       (line   18)
53717* gimple_phi_set_arg:                    'GIMPLE_PHI'.       (line   28)
53718* gimple_phi_set_result:                 'GIMPLE_PHI'.       (line   21)
53719* gimple_plf:                            Manipulating GIMPLE statements.
53720                                                             (line   64)
53721* 'GIMPLE_RESX':                         'GIMPLE_RESX'.      (line    6)
53722* gimple_resx_region:                    'GIMPLE_RESX'.      (line   12)
53723* gimple_resx_set_region:                'GIMPLE_RESX'.      (line   15)
53724* 'GIMPLE_RETURN':                       'GIMPLE_RETURN'.    (line    6)
53725* gimple_return_retval:                  'GIMPLE_RETURN'.    (line    9)
53726* gimple_return_set_retval:              'GIMPLE_RETURN'.    (line   12)
53727* gimple_seq_add_seq:                    GIMPLE sequences.   (line   30)
53728* gimple_seq_add_stmt:                   GIMPLE sequences.   (line   24)
53729* gimple_seq_alloc:                      GIMPLE sequences.   (line   61)
53730* gimple_seq_copy:                       GIMPLE sequences.   (line   65)
53731* gimple_seq_deep_copy:                  GIMPLE sequences.   (line   36)
53732* gimple_seq_empty_p:                    GIMPLE sequences.   (line   69)
53733* gimple_seq_first:                      GIMPLE sequences.   (line   43)
53734* gimple_seq_init:                       GIMPLE sequences.   (line   58)
53735* gimple_seq_last:                       GIMPLE sequences.   (line   46)
53736* gimple_seq_reverse:                    GIMPLE sequences.   (line   39)
53737* gimple_seq_set_first:                  GIMPLE sequences.   (line   53)
53738* gimple_seq_set_last:                   GIMPLE sequences.   (line   49)
53739* gimple_seq_singleton_p:                GIMPLE sequences.   (line   78)
53740* gimple_set_block:                      Manipulating GIMPLE statements.
53741                                                             (line   38)
53742* gimple_set_def_ops:                    Manipulating GIMPLE statements.
53743                                                             (line   96)
53744* gimple_set_has_volatile_ops:           Manipulating GIMPLE statements.
53745                                                             (line  136)
53746* gimple_set_locus:                      Manipulating GIMPLE statements.
53747                                                             (line   44)
53748* gimple_set_op:                         Manipulating GIMPLE statements.
53749                                                             (line   86)
53750* gimple_set_plf:                        Manipulating GIMPLE statements.
53751                                                             (line   60)
53752* gimple_set_use_ops:                    Manipulating GIMPLE statements.
53753                                                             (line  103)
53754* gimple_set_vdef_ops:                   Manipulating GIMPLE statements.
53755                                                             (line  117)
53756* gimple_set_visited:                    Manipulating GIMPLE statements.
53757                                                             (line   53)
53758* gimple_set_vuse_ops:                   Manipulating GIMPLE statements.
53759                                                             (line  110)
53760* gimple_simplify:                       GIMPLE API.         (line    6)
53761* gimple_simplify <1>:                   GIMPLE API.         (line    8)
53762* gimple_simplify <2>:                   GIMPLE API.         (line   10)
53763* gimple_simplify <3>:                   GIMPLE API.         (line   12)
53764* gimple_simplify <4>:                   GIMPLE API.         (line   14)
53765* gimple_simplify <5>:                   GIMPLE API.         (line   16)
53766* gimple_statement_with_ops:             Tuple representation.
53767                                                             (line   96)
53768* gimple_stored_syms:                    Manipulating GIMPLE statements.
53769                                                             (line  125)
53770* 'GIMPLE_SWITCH':                       'GIMPLE_SWITCH'.    (line    6)
53771* gimple_switch_default_label:           'GIMPLE_SWITCH'.    (line   41)
53772* gimple_switch_index:                   'GIMPLE_SWITCH'.    (line   24)
53773* gimple_switch_label:                   'GIMPLE_SWITCH'.    (line   31)
53774* gimple_switch_num_labels:              'GIMPLE_SWITCH'.    (line   14)
53775* gimple_switch_set_default_label:       'GIMPLE_SWITCH'.    (line   45)
53776* gimple_switch_set_index:               'GIMPLE_SWITCH'.    (line   27)
53777* gimple_switch_set_label:               'GIMPLE_SWITCH'.    (line   36)
53778* gimple_switch_set_num_labels:          'GIMPLE_SWITCH'.    (line   19)
53779* 'GIMPLE_TRY':                          'GIMPLE_TRY'.       (line    6)
53780* gimple_try_catch_is_cleanup:           'GIMPLE_TRY'.       (line   19)
53781* gimple_try_cleanup:                    'GIMPLE_TRY'.       (line   26)
53782* gimple_try_eval:                       'GIMPLE_TRY'.       (line   22)
53783* gimple_try_kind:                       'GIMPLE_TRY'.       (line   15)
53784* gimple_try_set_catch_is_cleanup:       'GIMPLE_TRY'.       (line   30)
53785* gimple_try_set_cleanup:                'GIMPLE_TRY'.       (line   38)
53786* gimple_try_set_eval:                   'GIMPLE_TRY'.       (line   34)
53787* gimple_use_ops:                        Manipulating GIMPLE statements.
53788                                                             (line  100)
53789* gimple_vdef_ops:                       Manipulating GIMPLE statements.
53790                                                             (line  114)
53791* gimple_visited_p:                      Manipulating GIMPLE statements.
53792                                                             (line   57)
53793* gimple_vuse_ops:                       Manipulating GIMPLE statements.
53794                                                             (line  107)
53795* gimple_wce_cleanup:                    'GIMPLE_WITH_CLEANUP_EXPR'.
53796                                                             (line   10)
53797* gimple_wce_cleanup_eh_only:            'GIMPLE_WITH_CLEANUP_EXPR'.
53798                                                             (line   17)
53799* gimple_wce_set_cleanup:                'GIMPLE_WITH_CLEANUP_EXPR'.
53800                                                             (line   13)
53801* gimple_wce_set_cleanup_eh_only:        'GIMPLE_WITH_CLEANUP_EXPR'.
53802                                                             (line   20)
53803* 'GIMPLE_WITH_CLEANUP_EXPR':            'GIMPLE_WITH_CLEANUP_EXPR'.
53804                                                             (line    6)
53805* gimplification:                        Parsing pass.       (line   13)
53806* gimplification <1>:                    Gimplification pass.
53807                                                             (line    6)
53808* gimplifier:                            Parsing pass.       (line   13)
53809* gimplify_assign:                       'GIMPLE_ASSIGN'.    (line   41)
53810* gimplify_expr:                         Gimplification pass.
53811                                                             (line   18)
53812* gimplify_function_tree:                Gimplification pass.
53813                                                             (line   18)
53814* GLOBAL_INIT_PRIORITY:                  Functions for C++.  (line  141)
53815* global_regs:                           Register Basics.    (line  102)
53816* 'GO_IF_LEGITIMATE_ADDRESS':            Addressing Modes.   (line   90)
53817* greater than:                          Comparisons.        (line   60)
53818* greater than <1>:                      Comparisons.        (line   64)
53819* greater than <2>:                      Comparisons.        (line   72)
53820* gsi_after_labels:                      Sequence iterators. (line   74)
53821* gsi_bb:                                Sequence iterators. (line   82)
53822* gsi_commit_edge_inserts:               Sequence iterators. (line  193)
53823* gsi_commit_edge_inserts <1>:           Maintaining the CFG.
53824                                                             (line  104)
53825* gsi_commit_one_edge_insert:            Sequence iterators. (line  188)
53826* gsi_end_p:                             Sequence iterators. (line   59)
53827* gsi_end_p <1>:                         Maintaining the CFG.
53828                                                             (line   48)
53829* gsi_for_stmt:                          Sequence iterators. (line  156)
53830* gsi_insert_after:                      Sequence iterators. (line  145)
53831* gsi_insert_after <1>:                  Maintaining the CFG.
53832                                                             (line   60)
53833* gsi_insert_before:                     Sequence iterators. (line  134)
53834* gsi_insert_before <1>:                 Maintaining the CFG.
53835                                                             (line   66)
53836* gsi_insert_on_edge:                    Sequence iterators. (line  173)
53837* gsi_insert_on_edge <1>:                Maintaining the CFG.
53838                                                             (line  104)
53839* gsi_insert_on_edge_immediate:          Sequence iterators. (line  183)
53840* gsi_insert_seq_after:                  Sequence iterators. (line  152)
53841* gsi_insert_seq_before:                 Sequence iterators. (line  141)
53842* gsi_insert_seq_on_edge:                Sequence iterators. (line  177)
53843* gsi_last:                              Sequence iterators. (line   49)
53844* gsi_last <1>:                          Maintaining the CFG.
53845                                                             (line   44)
53846* gsi_last_bb:                           Sequence iterators. (line   55)
53847* gsi_link_after:                        Sequence iterators. (line  113)
53848* gsi_link_before:                       Sequence iterators. (line  103)
53849* gsi_link_seq_after:                    Sequence iterators. (line  108)
53850* gsi_link_seq_before:                   Sequence iterators. (line   97)
53851* gsi_move_after:                        Sequence iterators. (line  159)
53852* gsi_move_before:                       Sequence iterators. (line  164)
53853* gsi_move_to_bb_end:                    Sequence iterators. (line  169)
53854* gsi_next:                              Sequence iterators. (line   65)
53855* gsi_next <1>:                          Maintaining the CFG.
53856                                                             (line   52)
53857* gsi_one_before_end_p:                  Sequence iterators. (line   62)
53858* gsi_prev:                              Sequence iterators. (line   68)
53859* gsi_prev <1>:                          Maintaining the CFG.
53860                                                             (line   56)
53861* gsi_remove:                            Sequence iterators. (line   88)
53862* gsi_remove <1>:                        Maintaining the CFG.
53863                                                             (line   72)
53864* gsi_replace:                           Sequence iterators. (line  128)
53865* gsi_seq:                               Sequence iterators. (line   85)
53866* gsi_split_seq_after:                   Sequence iterators. (line  118)
53867* gsi_split_seq_before:                  Sequence iterators. (line  123)
53868* gsi_start:                             Sequence iterators. (line   39)
53869* gsi_start <1>:                         Maintaining the CFG.
53870                                                             (line   40)
53871* gsi_start_bb:                          Sequence iterators. (line   45)
53872* gsi_stmt:                              Sequence iterators. (line   71)
53873* gsi_stmt_ptr:                          Sequence iterators. (line   79)
53874* gt:                                    Comparisons.        (line   60)
53875* 'gt' and attributes:                   Expressions.        (line   83)
53876* gtu:                                   Comparisons.        (line   64)
53877* 'gtu' and attributes:                  Expressions.        (line   83)
53878* GTY:                                   Type Information.   (line    6)
53879* GT_EXPR:                               Unary and Binary Expressions.
53880                                                             (line    6)
53881* guidelines for diagnostics:            Guidelines for Diagnostics.
53882                                                             (line    6)
53883* guidelines for options:                Guidelines for Options.
53884                                                             (line    6)
53885* guidelines, user experience:           User Experience Guidelines.
53886                                                             (line    6)
53887* 'H' in constraint:                     Simple Constraints. (line   96)
53888* HAmode:                                Machine Modes.      (line  146)
53889* HANDLER:                               Statements for C++. (line    6)
53890* HANDLER_BODY:                          Statements for C++. (line    6)
53891* HANDLER_PARMS:                         Statements for C++. (line    6)
53892* HANDLE_PRAGMA_PACK_WITH_EXPANSION:     Misc.               (line  475)
53893* hard registers:                        Regs and Memory.    (line    9)
53894* HARD_FRAME_POINTER_IS_ARG_POINTER:     Frame Registers.    (line   57)
53895* HARD_FRAME_POINTER_IS_FRAME_POINTER:   Frame Registers.    (line   50)
53896* HARD_FRAME_POINTER_REGNUM:             Frame Registers.    (line   19)
53897* HARD_REGNO_CALLER_SAVE_MODE:           Caller Saves.       (line   10)
53898* HARD_REGNO_NREGS_HAS_PADDING:          Values in Registers.
53899                                                             (line   21)
53900* HARD_REGNO_NREGS_WITH_PADDING:         Values in Registers.
53901                                                             (line   39)
53902* HARD_REGNO_RENAME_OK:                  Values in Registers.
53903                                                             (line  113)
53904* HAS_INIT_SECTION:                      Macros for Initialization.
53905                                                             (line   18)
53906* HAS_LONG_COND_BRANCH:                  Misc.               (line    8)
53907* HAS_LONG_UNCOND_BRANCH:                Misc.               (line   17)
53908* HAVE_DOS_BASED_FILE_SYSTEM:            Filesystem.         (line   11)
53909* HAVE_POST_DECREMENT:                   Addressing Modes.   (line   11)
53910* HAVE_POST_INCREMENT:                   Addressing Modes.   (line   10)
53911* HAVE_POST_MODIFY_DISP:                 Addressing Modes.   (line   17)
53912* HAVE_POST_MODIFY_REG:                  Addressing Modes.   (line   23)
53913* HAVE_PRE_DECREMENT:                    Addressing Modes.   (line    9)
53914* HAVE_PRE_INCREMENT:                    Addressing Modes.   (line    8)
53915* HAVE_PRE_MODIFY_DISP:                  Addressing Modes.   (line   16)
53916* HAVE_PRE_MODIFY_REG:                   Addressing Modes.   (line   22)
53917* HCmode:                                Machine Modes.      (line  199)
53918* HFmode:                                Machine Modes.      (line   61)
53919* high:                                  Constants.          (line  220)
53920* HImode:                                Machine Modes.      (line   29)
53921* 'HImode', in 'insn':                   Insns.              (line  291)
53922* HONOR_REG_ALLOC_ORDER:                 Allocation Order.   (line   36)
53923* host configuration:                    Host Config.        (line    6)
53924* host functions:                        Host Common.        (line    6)
53925* host hooks:                            Host Common.        (line    6)
53926* host makefile fragment:                Host Fragment.      (line    6)
53927* HOST_BIT_BUCKET:                       Filesystem.         (line   51)
53928* HOST_EXECUTABLE_SUFFIX:                Filesystem.         (line   45)
53929* HOST_HOOKS_EXTRA_SIGNALS:              Host Common.        (line   11)
53930* HOST_HOOKS_GT_PCH_ALLOC_GRANULARITY:   Host Common.        (line   43)
53931* HOST_HOOKS_GT_PCH_GET_ADDRESS:         Host Common.        (line   15)
53932* HOST_HOOKS_GT_PCH_USE_ADDRESS:         Host Common.        (line   24)
53933* HOST_LACKS_INODE_NUMBERS:              Filesystem.         (line   89)
53934* HOST_LONG_FORMAT:                      Host Misc.          (line   45)
53935* HOST_LONG_LONG_FORMAT:                 Host Misc.          (line   41)
53936* HOST_OBJECT_SUFFIX:                    Filesystem.         (line   40)
53937* HOST_PTR_PRINTF:                       Host Misc.          (line   49)
53938* HOT_TEXT_SECTION_NAME:                 Sections.           (line   42)
53939* HQmode:                                Machine Modes.      (line  110)
53940* 'i' in constraint:                     Simple Constraints. (line   68)
53941* 'I' in constraint:                     Simple Constraints. (line   79)
53942* identifier:                            Identifiers.        (line    6)
53943* IDENTIFIER_LENGTH:                     Identifiers.        (line   22)
53944* IDENTIFIER_NODE:                       Identifiers.        (line    6)
53945* IDENTIFIER_OPNAME_P:                   Identifiers.        (line   27)
53946* IDENTIFIER_POINTER:                    Identifiers.        (line   17)
53947* IDENTIFIER_TYPENAME_P:                 Identifiers.        (line   33)
53948* IEEE 754-2008:                         Decimal float library routines.
53949                                                             (line    6)
53950* IFCVT_MACHDEP_INIT:                    Misc.               (line  601)
53951* IFCVT_MODIFY_CANCEL:                   Misc.               (line  595)
53952* IFCVT_MODIFY_FINAL:                    Misc.               (line  589)
53953* IFCVT_MODIFY_INSN:                     Misc.               (line  583)
53954* IFCVT_MODIFY_MULTIPLE_TESTS:           Misc.               (line  575)
53955* IFCVT_MODIFY_TESTS:                    Misc.               (line  565)
53956* IF_COND:                               Statements for C++. (line    6)
53957* IF_STMT:                               Statements for C++. (line    6)
53958* if_then_else:                          Comparisons.        (line   80)
53959* 'if_then_else' and attributes:         Expressions.        (line   32)
53960* 'if_then_else' usage:                  Side Effects.       (line   56)
53961* IMAGPART_EXPR:                         Unary and Binary Expressions.
53962                                                             (line    6)
53963* Immediate Uses:                        SSA Operands.       (line  258)
53964* immediate_operand:                     Machine-Independent Predicates.
53965                                                             (line   10)
53966* IMMEDIATE_PREFIX:                      Instruction Output. (line  153)
53967* include:                               Including Patterns. (line    6)
53968* INCLUDE_DEFAULTS:                      Driver.             (line  331)
53969* inclusive-or, bitwise:                 Arithmetic.         (line  163)
53970* INCOMING_FRAME_SP_OFFSET:              Frame Layout.       (line  188)
53971* INCOMING_REGNO:                        Register Basics.    (line  129)
53972* INCOMING_REG_PARM_STACK_SPACE:         Stack Arguments.    (line   73)
53973* INCOMING_RETURN_ADDR_RTX:              Frame Layout.       (line  133)
53974* INCOMING_STACK_BOUNDARY:               Storage Layout.     (line  171)
53975* INDEX_REG_CLASS:                       Register Classes.   (line  140)
53976* 'indirect_jump' instruction pattern:   Standard Names.     (line 1826)
53977* indirect_operand:                      Machine-Independent Predicates.
53978                                                             (line   70)
53979* INDIRECT_REF:                          Storage References. (line    6)
53980* initialization routines:               Initialization.     (line    6)
53981* INITIAL_ELIMINATION_OFFSET:            Elimination.        (line   68)
53982* INITIAL_FRAME_ADDRESS_RTX:             Frame Layout.       (line   75)
53983* INIT_ARRAY_SECTION_ASM_OP:             Sections.           (line  106)
53984* INIT_CUMULATIVE_ARGS:                  Register Arguments. (line  158)
53985* INIT_CUMULATIVE_INCOMING_ARGS:         Register Arguments. (line  186)
53986* INIT_CUMULATIVE_LIBCALL_ARGS:          Register Arguments. (line  180)
53987* INIT_ENVIRONMENT:                      Driver.             (line  309)
53988* INIT_EXPANDERS:                        Per-Function Data.  (line   36)
53989* INIT_EXPR:                             Unary and Binary Expressions.
53990                                                             (line    6)
53991* init_machine_status:                   Per-Function Data.  (line   42)
53992* init_one_libfunc:                      Library Calls.      (line   15)
53993* INIT_SECTION_ASM_OP:                   Sections.           (line   90)
53994* INIT_SECTION_ASM_OP <1>:               Macros for Initialization.
53995                                                             (line    9)
53996* inlining:                              Target Attributes.  (line  103)
53997* insert_insn_on_edge:                   Maintaining the CFG.
53998                                                             (line  104)
53999* insn:                                  Insns.              (line   63)
54000* 'insn' and '/f':                       Flags.              (line  135)
54001* 'insn' and '/j':                       Flags.              (line  171)
54002* 'insn' and '/s':                       Flags.              (line   38)
54003* 'insn' and '/s' <1>:                   Flags.              (line  162)
54004* 'insn' and '/u':                       Flags.              (line   28)
54005* 'insn' and '/v':                       Flags.              (line   33)
54006* insn attributes:                       Insn Attributes.    (line    6)
54007* insn canonicalization:                 Insn Canonicalizations.
54008                                                             (line    6)
54009* insn includes:                         Including Patterns. (line    6)
54010* insn lengths, computing:               Insn Lengths.       (line    6)
54011* insn notes, notes:                     Basic Blocks.       (line   52)
54012* insn splitting:                        Insn Splitting.     (line    6)
54013* insn-attr.h:                           Defining Attributes.
54014                                                             (line   34)
54015* insns:                                 Insns.              (line    6)
54016* insns, generating:                     RTL Template.       (line    6)
54017* insns, recognizing:                    RTL Template.       (line    6)
54018* INSN_ANNULLED_BRANCH_P:                Flags.              (line   28)
54019* INSN_CODE:                             Insns.              (line  318)
54020* INSN_DELETED_P:                        Flags.              (line   33)
54021* INSN_FROM_TARGET_P:                    Flags.              (line   38)
54022* insn_list:                             Insns.              (line  568)
54023* INSN_REFERENCES_ARE_DELAYED:           Misc.               (line  502)
54024* INSN_SETS_ARE_DELAYED:                 Misc.               (line  491)
54025* INSN_UID:                              Insns.              (line   23)
54026* INSN_VAR_LOCATION:                     Insns.              (line  247)
54027* instruction attributes:                Insn Attributes.    (line    6)
54028* instruction latency time:              Processor pipeline description.
54029                                                             (line    6)
54030* instruction latency time <1>:          Processor pipeline description.
54031                                                             (line  105)
54032* instruction latency time <2>:          Processor pipeline description.
54033                                                             (line  196)
54034* instruction patterns:                  Patterns.           (line    6)
54035* instruction splitting:                 Insn Splitting.     (line    6)
54036* 'insv' instruction pattern:            Standard Names.     (line 1562)
54037* 'insvM' instruction pattern:           Standard Names.     (line 1514)
54038* 'insvmisalignM' instruction pattern:   Standard Names.     (line 1524)
54039* int iterators in '.md' files:          Int Iterators.      (line    6)
54040* INT16_TYPE:                            Type Layout.        (line  210)
54041* INT32_TYPE:                            Type Layout.        (line  211)
54042* INT64_TYPE:                            Type Layout.        (line  212)
54043* INT8_TYPE:                             Type Layout.        (line  209)
54044* INTEGER_CST:                           Constant expressions.
54045                                                             (line    6)
54046* INTEGER_TYPE:                          Types.              (line    6)
54047* inter-procedural optimization passes:  IPA passes.         (line    6)
54048* Interdependence of Patterns:           Dependent Patterns. (line    6)
54049* interfacing to GCC output:             Interface.          (line    6)
54050* interlock delays:                      Processor pipeline description.
54051                                                             (line    6)
54052* intermediate representation lowering:  Parsing pass.       (line   13)
54053* INTMAX_TYPE:                           Type Layout.        (line  186)
54054* INTPTR_TYPE:                           Type Layout.        (line  233)
54055* introduction:                          Top.                (line    6)
54056* INT_FAST16_TYPE:                       Type Layout.        (line  226)
54057* INT_FAST32_TYPE:                       Type Layout.        (line  227)
54058* INT_FAST64_TYPE:                       Type Layout.        (line  228)
54059* INT_FAST8_TYPE:                        Type Layout.        (line  225)
54060* INT_LEAST16_TYPE:                      Type Layout.        (line  218)
54061* INT_LEAST32_TYPE:                      Type Layout.        (line  219)
54062* INT_LEAST64_TYPE:                      Type Layout.        (line  220)
54063* INT_LEAST8_TYPE:                       Type Layout.        (line  217)
54064* INT_TYPE_SIZE:                         Type Layout.        (line   11)
54065* INVOKE__main:                          Macros for Initialization.
54066                                                             (line   50)
54067* in_struct:                             Flags.              (line  254)
54068* 'in_struct', in 'code_label' and 'note': Flags.            (line   48)
54069* 'in_struct', in 'insn' and 'jump_insn' and 'call_insn': Flags.
54070                                                             (line   38)
54071* 'in_struct', in 'insn', 'call_insn', 'jump_insn' and 'jump_table_data': Flags.
54072                                                             (line  162)
54073* 'in_struct', in 'subreg':              Flags.              (line  201)
54074* ior:                                   Arithmetic.         (line  163)
54075* 'ior' and attributes:                  Expressions.        (line   50)
54076* 'ior', canonicalization of:            Insn Canonicalizations.
54077                                                             (line   67)
54078* 'iorM3' instruction pattern:           Standard Names.     (line  442)
54079* IPA passes:                            IPA passes.         (line    6)
54080* IRA_HARD_REGNO_ADD_COST_MULTIPLIER:    Allocation Order.   (line   44)
54081* is_a:                                  Machine Modes.      (line  347)
54082* IS_ASM_LOGICAL_LINE_SEPARATOR:         Data Output.        (line  129)
54083* is_gimple_addressable:                 Logical Operators.  (line  113)
54084* is_gimple_asm_val:                     Logical Operators.  (line  117)
54085* is_gimple_assign:                      Logical Operators.  (line  149)
54086* is_gimple_call:                        Logical Operators.  (line  152)
54087* is_gimple_call_addr:                   Logical Operators.  (line  120)
54088* is_gimple_constant:                    Logical Operators.  (line  128)
54089* is_gimple_debug:                       Logical Operators.  (line  155)
54090* is_gimple_ip_invariant:                Logical Operators.  (line  137)
54091* is_gimple_ip_invariant_address:        Logical Operators.  (line  142)
54092* is_gimple_mem_ref_addr:                Logical Operators.  (line  124)
54093* is_gimple_min_invariant:               Logical Operators.  (line  131)
54094* is_gimple_omp:                         Logical Operators.  (line  166)
54095* is_gimple_val:                         Logical Operators.  (line  107)
54096* iterators in '.md' files:              Iterators.          (line    6)
54097* IV analysis on GIMPLE:                 Scalar evolutions.  (line    6)
54098* IV analysis on RTL:                    loop-iv.            (line    6)
54099* JMP_BUF_SIZE:                          Exception Region Output.
54100                                                             (line   83)
54101* jump:                                  Flags.              (line  295)
54102* 'jump' instruction pattern:            Standard Names.     (line 1704)
54103* jump instruction patterns:             Jump Patterns.      (line    6)
54104* jump instructions and 'set':           Side Effects.       (line   56)
54105* 'jump', in 'call_insn':                Flags.              (line  175)
54106* 'jump', in 'insn':                     Flags.              (line  171)
54107* 'jump', in 'mem':                      Flags.              (line   59)
54108* Jumps:                                 Jumps.              (line    6)
54109* JUMP_ALIGN:                            Alignment Output.   (line    8)
54110* jump_insn:                             Insns.              (line   73)
54111* 'jump_insn' and '/f':                  Flags.              (line  135)
54112* 'jump_insn' and '/j':                  Flags.              (line   10)
54113* 'jump_insn' and '/s':                  Flags.              (line   38)
54114* 'jump_insn' and '/s' <1>:              Flags.              (line  162)
54115* 'jump_insn' and '/u':                  Flags.              (line   28)
54116* 'jump_insn' and '/v':                  Flags.              (line   33)
54117* JUMP_LABEL:                            Insns.              (line   80)
54118* JUMP_TABLES_IN_TEXT_SECTION:           Sections.           (line  155)
54119* jump_table_data:                       Insns.              (line  166)
54120* 'jump_table_data' and '/s':            Flags.              (line  162)
54121* 'jump_table_data' and '/v':            Flags.              (line   33)
54122* LABEL_ALIGN:                           Alignment Output.   (line   42)
54123* LABEL_ALIGN_AFTER_BARRIER:             Alignment Output.   (line   21)
54124* LABEL_ALTERNATE_NAME:                  Edges.              (line  180)
54125* LABEL_ALT_ENTRY_P:                     Insns.              (line  146)
54126* LABEL_DECL:                            Declarations.       (line    6)
54127* LABEL_KIND:                            Insns.              (line  146)
54128* LABEL_NUSES:                           Insns.              (line  142)
54129* LABEL_PRESERVE_P:                      Flags.              (line   48)
54130* label_ref:                             Constants.          (line  199)
54131* 'label_ref' and '/v':                  Flags.              (line   54)
54132* 'label_ref', RTL sharing:              Sharing.            (line   38)
54133* LABEL_REF_NONLOCAL_P:                  Flags.              (line   54)
54134* language-dependent trees:              Language-dependent trees.
54135                                                             (line    6)
54136* language-independent intermediate representation: Parsing pass.
54137                                                             (line   13)
54138* lang_hooks.gimplify_expr:              Gimplification pass.
54139                                                             (line   18)
54140* lang_hooks.parse_file:                 Parsing pass.       (line    6)
54141* large return values:                   Aggregate Return.   (line    6)
54142* LAST_STACK_REG:                        Stack Registers.    (line   30)
54143* LAST_VIRTUAL_REGISTER:                 Regs and Memory.    (line   51)
54144* late IPA passes:                       Late IPA passes.    (line    6)
54145* 'lceilMN2':                            Standard Names.     (line 1137)
54146* LCSSA:                                 LCSSA.              (line    6)
54147* LDD_SUFFIX:                            Macros for Initialization.
54148                                                             (line  121)
54149* 'ldexpM3' instruction pattern:         Standard Names.     (line  922)
54150* LD_FINI_SWITCH:                        Macros for Initialization.
54151                                                             (line   28)
54152* LD_INIT_SWITCH:                        Macros for Initialization.
54153                                                             (line   24)
54154* le:                                    Comparisons.        (line   76)
54155* 'le' and attributes:                   Expressions.        (line   83)
54156* leaf functions:                        Leaf Functions.     (line    6)
54157* leaf_function_p:                       Standard Names.     (line 1788)
54158* LEAF_REGISTERS:                        Leaf Functions.     (line   23)
54159* LEAF_REG_REMAP:                        Leaf Functions.     (line   37)
54160* left rotate:                           Arithmetic.         (line  195)
54161* left shift:                            Arithmetic.         (line  173)
54162* LEGITIMATE_PIC_OPERAND_P:              PIC.                (line   31)
54163* LEGITIMIZE_RELOAD_ADDRESS:             Addressing Modes.   (line  150)
54164* length:                                GTY Options.        (line   47)
54165* less than:                             Comparisons.        (line   68)
54166* less than or equal:                    Comparisons.        (line   76)
54167* leu:                                   Comparisons.        (line   76)
54168* 'leu' and attributes:                  Expressions.        (line   83)
54169* LE_EXPR:                               Unary and Binary Expressions.
54170                                                             (line    6)
54171* 'lfloorMN2':                           Standard Names.     (line 1132)
54172* LIB2FUNCS_EXTRA:                       Target Fragment.    (line   11)
54173* LIBCALL_VALUE:                         Scalar Return.      (line   56)
54174* 'libgcc.a':                            Library Calls.      (line    6)
54175* LIBGCC2_CFLAGS:                        Target Fragment.    (line    8)
54176* LIBGCC2_GNU_PREFIX:                    Type Layout.        (line  102)
54177* LIBGCC2_UNWIND_ATTRIBUTE:              Misc.               (line 1047)
54178* LIBGCC_SPEC:                           Driver.             (line  115)
54179* library subroutine names:              Library Calls.      (line    6)
54180* LIBRARY_PATH_ENV:                      Misc.               (line  543)
54181* LIB_SPEC:                              Driver.             (line  107)
54182* LIMIT_RELOAD_CLASS:                    Register Classes.   (line  296)
54183* LINK_COMMAND_SPEC:                     Driver.             (line  240)
54184* LINK_EH_SPEC:                          Driver.             (line  142)
54185* LINK_GCC_C_SEQUENCE_SPEC:              Driver.             (line  232)
54186* LINK_LIBGCC_SPECIAL_1:                 Driver.             (line  227)
54187* LINK_SPEC:                             Driver.             (line  100)
54188* list:                                  Containers.         (line    6)
54189* Liveness representation:               Liveness information.
54190                                                             (line    6)
54191* load address instruction:              Simple Constraints. (line  162)
54192* LOAD_EXTEND_OP:                        Misc.               (line   80)
54193* 'load_multiple' instruction pattern:   Standard Names.     (line  136)
54194* Local Register Allocator (LRA):        RTL passes.         (line  187)
54195* LOCAL_ALIGNMENT:                       Storage Layout.     (line  284)
54196* LOCAL_CLASS_P:                         Classes.            (line   70)
54197* LOCAL_DECL_ALIGNMENT:                  Storage Layout.     (line  321)
54198* LOCAL_INCLUDE_DIR:                     Driver.             (line  316)
54199* LOCAL_LABEL_PREFIX:                    Instruction Output. (line  151)
54200* LOCAL_REGNO:                           Register Basics.    (line  143)
54201* location information:                  Guidelines for Diagnostics.
54202                                                             (line  159)
54203* 'log10M2' instruction pattern:         Standard Names.     (line 1026)
54204* 'log1pM2' instruction pattern:         Standard Names.     (line 1016)
54205* 'log2M2' instruction pattern:          Standard Names.     (line 1033)
54206* 'logbM2' instruction pattern:          Standard Names.     (line 1040)
54207* Logical Operators:                     Logical Operators.  (line    6)
54208* logical-and, bitwise:                  Arithmetic.         (line  158)
54209* LOGICAL_OP_NON_SHORT_CIRCUIT:          Costs.              (line  294)
54210* 'logM2' instruction pattern:           Standard Names.     (line 1009)
54211* LOG_LINKS:                             Insns.              (line  337)
54212* 'longjmp' and automatic variables:     Interface.          (line   52)
54213* LONG_ACCUM_TYPE_SIZE:                  Type Layout.        (line   92)
54214* LONG_DOUBLE_TYPE_SIZE:                 Type Layout.        (line   57)
54215* LONG_FRACT_TYPE_SIZE:                  Type Layout.        (line   72)
54216* LONG_LONG_ACCUM_TYPE_SIZE:             Type Layout.        (line   97)
54217* LONG_LONG_FRACT_TYPE_SIZE:             Type Layout.        (line   77)
54218* LONG_LONG_TYPE_SIZE:                   Type Layout.        (line   32)
54219* LONG_TYPE_SIZE:                        Type Layout.        (line   21)
54220* Loop analysis:                         Loop representation.
54221                                                             (line    6)
54222* Loop manipulation:                     Loop manipulation.  (line    6)
54223* Loop querying:                         Loop querying.      (line    6)
54224* Loop representation:                   Loop representation.
54225                                                             (line    6)
54226* Loop-closed SSA form:                  LCSSA.              (line    6)
54227* looping instruction patterns:          Looping Patterns.   (line    6)
54228* LOOP_ALIGN:                            Alignment Output.   (line   29)
54229* LOOP_EXPR:                             Unary and Binary Expressions.
54230                                                             (line    6)
54231* lowering, language-dependent intermediate representation: Parsing pass.
54232                                                             (line   13)
54233* lo_sum:                                Arithmetic.         (line   25)
54234* 'lrintMN2':                            Standard Names.     (line 1122)
54235* 'lroundMN2':                           Standard Names.     (line 1127)
54236* lshiftrt:                              Arithmetic.         (line  190)
54237* 'lshiftrt' and attributes:             Expressions.        (line   83)
54238* LSHIFT_EXPR:                           Unary and Binary Expressions.
54239                                                             (line    6)
54240* 'lshrM3' instruction pattern:          Standard Names.     (line  840)
54241* lt:                                    Comparisons.        (line   68)
54242* 'lt' and attributes:                   Expressions.        (line   83)
54243* LTGT_EXPR:                             Unary and Binary Expressions.
54244                                                             (line    6)
54245* lto:                                   LTO.                (line    6)
54246* ltrans:                                LTO.                (line    6)
54247* ltu:                                   Comparisons.        (line   68)
54248* LT_EXPR:                               Unary and Binary Expressions.
54249                                                             (line    6)
54250* 'm' in constraint:                     Simple Constraints. (line   17)
54251* machine attributes:                    Target Attributes.  (line    6)
54252* machine description macros:            Target Macros.      (line    6)
54253* machine descriptions:                  Machine Desc.       (line    6)
54254* machine mode conversions:              Conversions.        (line    6)
54255* machine mode wrapper classes:          Machine Modes.      (line  286)
54256* machine modes:                         Machine Modes.      (line    6)
54257* machine specific constraints:          Machine Constraints.
54258                                                             (line    6)
54259* machine-independent predicates:        Machine-Independent Predicates.
54260                                                             (line    6)
54261* machine_mode:                          Machine Modes.      (line    6)
54262* MACH_DEP_SECTION_ASM_FLAG:             Sections.           (line  120)
54263* macros, target description:            Target Macros.      (line    6)
54264* 'maddMN4' instruction pattern:         Standard Names.     (line  761)
54265* makefile fragment:                     Fragments.          (line    6)
54266* makefile targets:                      Makefile.           (line    6)
54267* MAKE_DECL_ONE_ONLY:                    Label Output.       (line  281)
54268* make_safe_from:                        Expander Definitions.
54269                                                             (line  151)
54270* MALLOC_ABI_ALIGNMENT:                  Storage Layout.     (line  190)
54271* Manipulating GIMPLE statements:        Manipulating GIMPLE statements.
54272                                                             (line    6)
54273* marking roots:                         GGC Roots.          (line    6)
54274* 'maskloadMN' instruction pattern:      Standard Names.     (line  396)
54275* 'maskstoreMN' instruction pattern:     Standard Names.     (line  403)
54276* 'mask_fold_left_plus_M' instruction pattern: Standard Names.
54277                                                             (line  564)
54278* 'mask_gather_loadMN' instruction pattern: Standard Names.  (line  249)
54279* MASK_RETURN_ADDR:                      Exception Region Output.
54280                                                             (line   35)
54281* 'mask_scatter_storeMN' instruction pattern: Standard Names.
54282                                                             (line  272)
54283* Match and Simplify:                    Match and Simplify. (line    6)
54284* matching constraint:                   Simple Constraints. (line  140)
54285* matching operands:                     Output Template.    (line   49)
54286* match_dup:                             RTL Template.       (line   73)
54287* match_dup <1>:                         define_peephole2.   (line   28)
54288* 'match_dup' and attributes:            Insn Lengths.       (line   16)
54289* match_operand:                         RTL Template.       (line   16)
54290* 'match_operand' and attributes:        Expressions.        (line   55)
54291* match_operator:                        RTL Template.       (line   95)
54292* match_op_dup:                          RTL Template.       (line  163)
54293* match_parallel:                        RTL Template.       (line  172)
54294* match_par_dup:                         RTL Template.       (line  219)
54295* match_scratch:                         RTL Template.       (line   58)
54296* match_scratch <1>:                     define_peephole2.   (line   28)
54297* 'match_test' and attributes:           Expressions.        (line   64)
54298* math library:                          Soft float library routines.
54299                                                             (line    6)
54300* math, in RTL:                          Arithmetic.         (line    6)
54301* matherr:                               Library Calls.      (line   59)
54302* MATH_LIBRARY:                          Misc.               (line  536)
54303* 'maxM3' instruction pattern:           Standard Names.     (line  503)
54304* MAX_BITSIZE_MODE_ANY_INT:              Machine Modes.      (line  444)
54305* MAX_BITSIZE_MODE_ANY_MODE:             Machine Modes.      (line  450)
54306* MAX_BITS_PER_WORD:                     Storage Layout.     (line   54)
54307* MAX_CONDITIONAL_EXECUTE:               Misc.               (line  558)
54308* MAX_FIXED_MODE_SIZE:                   Storage Layout.     (line  466)
54309* MAX_MOVE_MAX:                          Misc.               (line  127)
54310* MAX_OFILE_ALIGNMENT:                   Storage Layout.     (line  228)
54311* MAX_REGS_PER_ADDRESS:                  Addressing Modes.   (line   42)
54312* MAX_STACK_ALIGNMENT:                   Storage Layout.     (line  222)
54313* maybe_undef:                           GTY Options.        (line  141)
54314* may_trap_p, tree_could_trap_p:         Edges.              (line  114)
54315* mcount:                                Profiling.          (line   12)
54316* MD_EXEC_PREFIX:                        Driver.             (line  271)
54317* MD_FALLBACK_FRAME_STATE_FOR:           Exception Handling. (line   93)
54318* MD_HANDLE_UNWABI:                      Exception Handling. (line  112)
54319* MD_STARTFILE_PREFIX:                   Driver.             (line  299)
54320* MD_STARTFILE_PREFIX_1:                 Driver.             (line  304)
54321* mem:                                   Regs and Memory.    (line  396)
54322* 'mem' and '/c':                        Flags.              (line   70)
54323* 'mem' and '/f':                        Flags.              (line   74)
54324* 'mem' and '/j':                        Flags.              (line   59)
54325* 'mem' and '/u':                        Flags.              (line   78)
54326* 'mem' and '/v':                        Flags.              (line   65)
54327* 'mem', RTL sharing:                    Sharing.            (line   43)
54328* memory model:                          Memory model.       (line    6)
54329* memory reference, nonoffsettable:      Simple Constraints. (line  254)
54330* memory references in constraints:      Simple Constraints. (line   17)
54331* 'memory_barrier' instruction pattern:  Standard Names.     (line 2172)
54332* 'memory_blockage' instruction pattern: Standard Names.     (line 2163)
54333* MEMORY_MOVE_COST:                      Costs.              (line   53)
54334* memory_operand:                        Machine-Independent Predicates.
54335                                                             (line   57)
54336* MEM_ADDR_SPACE:                        Special Accessors.  (line   48)
54337* MEM_ALIAS_SET:                         Special Accessors.  (line    9)
54338* MEM_ALIGN:                             Special Accessors.  (line   45)
54339* MEM_EXPR:                              Special Accessors.  (line   19)
54340* MEM_KEEP_ALIAS_SET_P:                  Flags.              (line   59)
54341* MEM_NOTRAP_P:                          Flags.              (line   70)
54342* MEM_OFFSET:                            Special Accessors.  (line   31)
54343* MEM_OFFSET_KNOWN_P:                    Special Accessors.  (line   27)
54344* MEM_POINTER:                           Flags.              (line   74)
54345* MEM_READONLY_P:                        Flags.              (line   78)
54346* MEM_REF:                               Storage References. (line    6)
54347* MEM_SIZE:                              Special Accessors.  (line   39)
54348* MEM_SIZE_KNOWN_P:                      Special Accessors.  (line   35)
54349* 'mem_thread_fence' instruction pattern: Standard Names.    (line 2462)
54350* MEM_VOLATILE_P:                        Flags.              (line   65)
54351* METHOD_TYPE:                           Types.              (line    6)
54352* MINIMUM_ALIGNMENT:                     Storage Layout.     (line  334)
54353* MINIMUM_ATOMIC_ALIGNMENT:              Storage Layout.     (line  198)
54354* 'minM3' instruction pattern:           Standard Names.     (line  503)
54355* minus:                                 Arithmetic.         (line   38)
54356* 'minus' and attributes:                Expressions.        (line   83)
54357* 'minus', canonicalization of:          Insn Canonicalizations.
54358                                                             (line   27)
54359* MINUS_EXPR:                            Unary and Binary Expressions.
54360                                                             (line    6)
54361* MIN_UNITS_PER_WORD:                    Storage Layout.     (line   64)
54362* MIPS coprocessor-definition macros:    MIPS Coprocessors.  (line    6)
54363* miscellaneous register hooks:          Miscellaneous Register Hooks.
54364                                                             (line    6)
54365* mnemonic attribute:                    Mnemonic Attribute. (line    6)
54366* mod:                                   Arithmetic.         (line  136)
54367* 'mod' and attributes:                  Expressions.        (line   83)
54368* mode classes:                          Machine Modes.      (line  226)
54369* mode iterators in '.md' files:         Mode Iterators.     (line    6)
54370* mode switching:                        Mode Switching.     (line    6)
54371* MODE_ACCUM:                            Machine Modes.      (line  256)
54372* MODE_BASE_REG_CLASS:                   Register Classes.   (line  116)
54373* MODE_BASE_REG_REG_CLASS:               Register Classes.   (line  122)
54374* MODE_CC:                               Machine Modes.      (line  271)
54375* MODE_CC <1>:                           MODE_CC Condition Codes.
54376                                                             (line    6)
54377* MODE_CODE_BASE_REG_CLASS:              Register Classes.   (line  129)
54378* MODE_COMPLEX_FLOAT:                    Machine Modes.      (line  267)
54379* MODE_COMPLEX_INT:                      Machine Modes.      (line  264)
54380* MODE_DECIMAL_FLOAT:                    Machine Modes.      (line  244)
54381* MODE_FLOAT:                            Machine Modes.      (line  240)
54382* MODE_FRACT:                            Machine Modes.      (line  248)
54383* MODE_INT:                              Machine Modes.      (line  232)
54384* MODE_PARTIAL_INT:                      Machine Modes.      (line  236)
54385* MODE_POINTER_BOUNDS:                   Machine Modes.      (line  276)
54386* MODE_RANDOM:                           Machine Modes.      (line  281)
54387* MODE_UACCUM:                           Machine Modes.      (line  260)
54388* MODE_UFRACT:                           Machine Modes.      (line  252)
54389* modifiers in constraints:              Modifiers.          (line    6)
54390* MODIFY_EXPR:                           Unary and Binary Expressions.
54391                                                             (line    6)
54392* 'modM3' instruction pattern:           Standard Names.     (line  442)
54393* modulo scheduling:                     RTL passes.         (line  123)
54394* MOVE_MAX:                              Misc.               (line  122)
54395* MOVE_MAX_PIECES:                       Costs.              (line  210)
54396* MOVE_RATIO:                            Costs.              (line  149)
54397* 'movM' instruction pattern:            Standard Names.     (line   11)
54398* 'movmemM' instruction pattern:         Standard Names.     (line 1281)
54399* 'movmisalignM' instruction pattern:    Standard Names.     (line  125)
54400* 'movMODEcc' instruction pattern:       Standard Names.     (line 1576)
54401* 'movstr' instruction pattern:          Standard Names.     (line 1317)
54402* 'movstrictM' instruction pattern:      Standard Names.     (line  119)
54403* 'msubMN4' instruction pattern:         Standard Names.     (line  784)
54404* 'mulhisi3' instruction pattern:        Standard Names.     (line  737)
54405* 'mulM3' instruction pattern:           Standard Names.     (line  442)
54406* 'mulqihi3' instruction pattern:        Standard Names.     (line  741)
54407* 'mulsidi3' instruction pattern:        Standard Names.     (line  741)
54408* mult:                                  Arithmetic.         (line   93)
54409* 'mult' and attributes:                 Expressions.        (line   83)
54410* 'mult', canonicalization of:           Insn Canonicalizations.
54411                                                             (line   27)
54412* 'mult', canonicalization of <1>:       Insn Canonicalizations.
54413                                                             (line  107)
54414* MULTIARCH_DIRNAME:                     Target Fragment.    (line  173)
54415* MULTILIB_DEFAULTS:                     Driver.             (line  256)
54416* MULTILIB_DIRNAMES:                     Target Fragment.    (line   44)
54417* MULTILIB_EXCEPTIONS:                   Target Fragment.    (line   70)
54418* MULTILIB_EXTRA_OPTS:                   Target Fragment.    (line  135)
54419* MULTILIB_MATCHES:                      Target Fragment.    (line   63)
54420* MULTILIB_OPTIONS:                      Target Fragment.    (line   24)
54421* MULTILIB_OSDIRNAMES:                   Target Fragment.    (line  142)
54422* MULTILIB_REQUIRED:                     Target Fragment.    (line   82)
54423* MULTILIB_REUSE:                        Target Fragment.    (line  103)
54424* multiple alternative constraints:      Multi-Alternative.  (line    6)
54425* MULTIPLE_SYMBOL_SPACES:                Misc.               (line  515)
54426* multiplication:                        Arithmetic.         (line   93)
54427* multiplication with signed saturation: Arithmetic.         (line   93)
54428* multiplication with unsigned saturation: Arithmetic.       (line   93)
54429* MULT_EXPR:                             Unary and Binary Expressions.
54430                                                             (line    6)
54431* MULT_HIGHPART_EXPR:                    Unary and Binary Expressions.
54432                                                             (line    6)
54433* 'mulvM4' instruction pattern:          Standard Names.     (line  458)
54434* 'n' in constraint:                     Simple Constraints. (line   73)
54435* name:                                  Identifiers.        (line    6)
54436* named address spaces:                  Named Address Spaces.
54437                                                             (line    6)
54438* named patterns and conditions:         Patterns.           (line   61)
54439* names, pattern:                        Standard Names.     (line    6)
54440* namespace, scope:                      Namespaces.         (line    6)
54441* NAMESPACE_DECL:                        Declarations.       (line    6)
54442* NAMESPACE_DECL <1>:                    Namespaces.         (line    6)
54443* NATIVE_SYSTEM_HEADER_COMPONENT:        Driver.             (line  326)
54444* ne:                                    Comparisons.        (line   56)
54445* 'ne' and attributes:                   Expressions.        (line   83)
54446* 'nearbyintM2' instruction pattern:     Standard Names.     (line 1106)
54447* neg:                                   Arithmetic.         (line   82)
54448* 'neg' and attributes:                  Expressions.        (line   83)
54449* 'neg', canonicalization of:            Insn Canonicalizations.
54450                                                             (line   27)
54451* NEGATE_EXPR:                           Unary and Binary Expressions.
54452                                                             (line    6)
54453* negation:                              Arithmetic.         (line   82)
54454* negation with signed saturation:       Arithmetic.         (line   82)
54455* negation with unsigned saturation:     Arithmetic.         (line   82)
54456* 'negM2' instruction pattern:           Standard Names.     (line  872)
54457* 'negMODEcc' instruction pattern:       Standard Names.     (line 1645)
54458* 'negvM3' instruction pattern:          Standard Names.     (line  875)
54459* nested functions, support for:         Trampolines.        (line    6)
54460* nested_ptr:                            GTY Options.        (line  149)
54461* next_bb, prev_bb, FOR_EACH_BB, FOR_ALL_BB: Basic Blocks.   (line   25)
54462* NEXT_INSN:                             Insns.              (line   30)
54463* NEXT_OBJC_RUNTIME:                     Library Calls.      (line   86)
54464* NE_EXPR:                               Unary and Binary Expressions.
54465                                                             (line    6)
54466* nil:                                   RTL Objects.        (line   73)
54467* NM_FLAGS:                              Macros for Initialization.
54468                                                             (line  110)
54469* nondeterministic finite state automaton: Processor pipeline description.
54470                                                             (line  304)
54471* nonimmediate_operand:                  Machine-Independent Predicates.
54472                                                             (line  100)
54473* nonlocal goto handler:                 Edges.              (line  171)
54474* 'nonlocal_goto' instruction pattern:   Standard Names.     (line 1998)
54475* 'nonlocal_goto_receiver' instruction pattern: Standard Names.
54476                                                             (line 2015)
54477* nonmemory_operand:                     Machine-Independent Predicates.
54478                                                             (line   96)
54479* nonoffsettable memory reference:       Simple Constraints. (line  254)
54480* NON_LVALUE_EXPR:                       Unary and Binary Expressions.
54481                                                             (line    6)
54482* 'nop' instruction pattern:             Standard Names.     (line 1821)
54483* NOP_EXPR:                              Unary and Binary Expressions.
54484                                                             (line    6)
54485* normal predicates:                     Predicates.         (line   31)
54486* not:                                   Arithmetic.         (line  154)
54487* 'not' and attributes:                  Expressions.        (line   50)
54488* not equal:                             Comparisons.        (line   56)
54489* 'not', canonicalization of:            Insn Canonicalizations.
54490                                                             (line   27)
54491* note:                                  Insns.              (line  183)
54492* 'note' and '/i':                       Flags.              (line   48)
54493* 'note' and '/v':                       Flags.              (line   33)
54494* NOTE_INSN_BASIC_BLOCK:                 Basic Blocks.       (line   50)
54495* NOTE_INSN_BASIC_BLOCK <1>:             Basic Blocks.       (line   52)
54496* NOTE_INSN_BEGIN_STMT:                  Insns.              (line  233)
54497* NOTE_INSN_BLOCK_BEG:                   Insns.              (line  208)
54498* NOTE_INSN_BLOCK_END:                   Insns.              (line  208)
54499* NOTE_INSN_DELETED:                     Insns.              (line  198)
54500* NOTE_INSN_DELETED_LABEL:               Insns.              (line  203)
54501* NOTE_INSN_EH_REGION_BEG:               Insns.              (line  214)
54502* NOTE_INSN_EH_REGION_END:               Insns.              (line  214)
54503* NOTE_INSN_FUNCTION_BEG:                Insns.              (line  221)
54504* NOTE_INSN_INLINE_ENTRY:                Insns.              (line  238)
54505* NOTE_INSN_VAR_LOCATION:                Insns.              (line  225)
54506* NOTE_LINE_NUMBER:                      Insns.              (line  183)
54507* NOTE_SOURCE_FILE:                      Insns.              (line  183)
54508* NOTE_VAR_LOCATION:                     Insns.              (line  225)
54509* NOTICE_UPDATE_CC:                      CC0 Condition Codes.
54510                                                             (line   30)
54511* 'notMODEcc' instruction pattern:       Standard Names.     (line 1652)
54512* NO_DBX_BNSYM_ENSYM:                    DBX Hooks.          (line   25)
54513* NO_DBX_FUNCTION_END:                   DBX Hooks.          (line   19)
54514* NO_DBX_GCC_MARKER:                     File Names and DBX. (line   27)
54515* NO_DBX_MAIN_SOURCE_DIRECTORY:          File Names and DBX. (line   22)
54516* NO_DOLLAR_IN_LABEL:                    Label Output.       (line   64)
54517* NO_DOT_IN_LABEL:                       Label Output.       (line   70)
54518* NO_FUNCTION_CSE:                       Costs.              (line  289)
54519* NO_PROFILE_COUNTERS:                   Profiling.          (line   27)
54520* NO_REGS:                               Register Classes.   (line   17)
54521* Number of iterations analysis:         Number of iterations.
54522                                                             (line    6)
54523* NUM_MACHINE_MODES:                     Machine Modes.      (line  383)
54524* NUM_MODES_FOR_MODE_SWITCHING:          Mode Switching.     (line   30)
54525* NUM_POLY_INT_COEFFS:                   Overview of 'poly_int'.
54526                                                             (line   24)
54527* N_REG_CLASSES:                         Register Classes.   (line   81)
54528* 'o' in constraint:                     Simple Constraints. (line   23)
54529* OACC_CACHE:                            OpenACC.            (line    6)
54530* OACC_DATA:                             OpenACC.            (line    6)
54531* OACC_DECLARE:                          OpenACC.            (line    6)
54532* OACC_ENTER_DATA:                       OpenACC.            (line    6)
54533* OACC_EXIT_DATA:                        OpenACC.            (line    6)
54534* OACC_HOST_DATA:                        OpenACC.            (line    6)
54535* OACC_KERNELS:                          OpenACC.            (line    6)
54536* OACC_LOOP:                             OpenACC.            (line    6)
54537* OACC_PARALLEL:                         OpenACC.            (line    6)
54538* OACC_SERIAL:                           OpenACC.            (line    6)
54539* OACC_UPDATE:                           OpenACC.            (line    6)
54540* OBJC_GEN_METHOD_LABEL:                 Label Output.       (line  482)
54541* OBJC_JBLEN:                            Misc.               (line 1042)
54542* OBJECT_FORMAT_COFF:                    Macros for Initialization.
54543                                                             (line   96)
54544* offsettable address:                   Simple Constraints. (line   23)
54545* OFFSET_TYPE:                           Types.              (line    6)
54546* OImode:                                Machine Modes.      (line   51)
54547* OMP_ATOMIC:                            OpenMP.             (line    6)
54548* OMP_CLAUSE:                            OpenMP.             (line    6)
54549* OMP_CONTINUE:                          OpenMP.             (line    6)
54550* OMP_CRITICAL:                          OpenMP.             (line    6)
54551* OMP_FOR:                               OpenMP.             (line    6)
54552* OMP_MASTER:                            OpenMP.             (line    6)
54553* OMP_ORDERED:                           OpenMP.             (line    6)
54554* OMP_PARALLEL:                          OpenMP.             (line    6)
54555* OMP_RETURN:                            OpenMP.             (line    6)
54556* OMP_SECTION:                           OpenMP.             (line    6)
54557* OMP_SECTIONS:                          OpenMP.             (line    6)
54558* OMP_SINGLE:                            OpenMP.             (line    6)
54559* 'one_cmplM2' instruction pattern:      Standard Names.     (line 1241)
54560* operand access:                        Accessors.          (line    6)
54561* Operand Access Routines:               SSA Operands.       (line  116)
54562* operand constraints:                   Constraints.        (line    6)
54563* Operand Iterators:                     SSA Operands.       (line  116)
54564* operand predicates:                    Predicates.         (line    6)
54565* operand substitution:                  Output Template.    (line    6)
54566* Operands:                              Operands.           (line    6)
54567* operands:                              SSA Operands.       (line    6)
54568* operands <1>:                          Patterns.           (line   67)
54569* operator predicates:                   Predicates.         (line    6)
54570* 'optc-gen.awk':                        Options.            (line    6)
54571* OPTGROUP_ALL:                          Optimization groups.
54572                                                             (line   28)
54573* OPTGROUP_INLINE:                       Optimization groups.
54574                                                             (line   15)
54575* OPTGROUP_IPA:                          Optimization groups.
54576                                                             (line    9)
54577* OPTGROUP_LOOP:                         Optimization groups.
54578                                                             (line   12)
54579* OPTGROUP_OMP:                          Optimization groups.
54580                                                             (line   18)
54581* OPTGROUP_OTHER:                        Optimization groups.
54582                                                             (line   24)
54583* OPTGROUP_VEC:                          Optimization groups.
54584                                                             (line   21)
54585* optimization dumps:                    Optimization info.  (line    6)
54586* optimization groups:                   Optimization groups.
54587                                                             (line    6)
54588* optimization info file names:          Dump files and streams.
54589                                                             (line    6)
54590* Optimization infrastructure for GIMPLE: Tree SSA.          (line    6)
54591* OPTIMIZE_MODE_SWITCHING:               Mode Switching.     (line    8)
54592* option specification files:            Options.            (line    6)
54593* optional hardware or system features:  Run-time Target.    (line   59)
54594* options, directory search:             Including Patterns. (line   45)
54595* options, guidelines for:               Guidelines for Options.
54596                                                             (line    6)
54597* OPTION_DEFAULT_SPECS:                  Driver.             (line   25)
54598* opt_mode:                              Machine Modes.      (line  322)
54599* order of register allocation:          Allocation Order.   (line    6)
54600* ordered_comparison_operator:           Machine-Independent Predicates.
54601                                                             (line  115)
54602* ORDERED_EXPR:                          Unary and Binary Expressions.
54603                                                             (line    6)
54604* Ordering of Patterns:                  Pattern Ordering.   (line    6)
54605* ORIGINAL_REGNO:                        Special Accessors.  (line   53)
54606* other register constraints:            Simple Constraints. (line  171)
54607* outgoing_args_size:                    Stack Arguments.    (line   48)
54608* OUTGOING_REGNO:                        Register Basics.    (line  136)
54609* OUTGOING_REG_PARM_STACK_SPACE:         Stack Arguments.    (line   79)
54610* output of assembler code:              File Framework.     (line    6)
54611* output statements:                     Output Statement.   (line    6)
54612* output templates:                      Output Template.    (line    6)
54613* output_asm_insn:                       Output Statement.   (line   52)
54614* OUTPUT_QUOTED_STRING:                  File Framework.     (line  105)
54615* OVERLAPPING_REGISTER_NAMES:            Instruction Output. (line   20)
54616* OVERLOAD:                              Functions for C++.  (line    6)
54617* OVERRIDE_ABI_FORMAT:                   Register Arguments. (line  150)
54618* OVL_CURRENT:                           Functions for C++.  (line    6)
54619* OVL_NEXT:                              Functions for C++.  (line    6)
54620* 'p' in constraint:                     Simple Constraints. (line  162)
54621* PAD_VARARGS_DOWN:                      Register Arguments. (line  230)
54622* parallel:                              Side Effects.       (line  209)
54623* parameters, c++ abi:                   C++ ABI.            (line    6)
54624* parameters, d abi:                     D Language and ABI. (line    6)
54625* parameters, miscellaneous:             Misc.               (line    6)
54626* parameters, precompiled headers:       PCH Target.         (line    6)
54627* parity:                                Arithmetic.         (line  242)
54628* 'parityM2' instruction pattern:        Standard Names.     (line 1228)
54629* PARM_BOUNDARY:                         Storage Layout.     (line  150)
54630* PARM_DECL:                             Declarations.       (line    6)
54631* PARSE_LDD_OUTPUT:                      Macros for Initialization.
54632                                                             (line  125)
54633* pass dumps:                            Passes.             (line    6)
54634* passes and files of the compiler:      Passes.             (line    6)
54635* passing arguments:                     Interface.          (line   36)
54636* pass_duplicate_computed_gotos:         Edges.              (line  161)
54637* PATH_SEPARATOR:                        Filesystem.         (line   31)
54638* PATTERN:                               Insns.              (line  307)
54639* pattern conditions:                    Patterns.           (line   55)
54640* pattern names:                         Standard Names.     (line    6)
54641* Pattern Ordering:                      Pattern Ordering.   (line    6)
54642* patterns:                              Patterns.           (line    6)
54643* pc:                                    Regs and Memory.    (line  383)
54644* 'pc' and attributes:                   Insn Lengths.       (line   20)
54645* 'pc', RTL sharing:                     Sharing.            (line   28)
54646* PCC_BITFIELD_TYPE_MATTERS:             Storage Layout.     (line  360)
54647* PCC_STATIC_STRUCT_RETURN:              Aggregate Return.   (line   64)
54648* PC_REGNUM:                             Register Basics.    (line  150)
54649* pc_rtx:                                Regs and Memory.    (line  388)
54650* PDImode:                               Machine Modes.      (line   40)
54651* peephole optimization, RTL representation: Side Effects.   (line  243)
54652* peephole optimizer definitions:        Peephole Definitions.
54653                                                             (line    6)
54654* per-function data:                     Per-Function Data.  (line    6)
54655* percent sign:                          Output Template.    (line    6)
54656* PHI nodes:                             SSA.                (line   31)
54657* PIC:                                   PIC.                (line    6)
54658* PIC_OFFSET_TABLE_REGNUM:               PIC.                (line   15)
54659* PIC_OFFSET_TABLE_REG_CALL_CLOBBERED:   PIC.                (line   25)
54660* pipeline hazard recognizer:            Processor pipeline description.
54661                                                             (line    6)
54662* pipeline hazard recognizer <1>:        Processor pipeline description.
54663                                                             (line   53)
54664* Plugins:                               Plugins.            (line    6)
54665* plus:                                  Arithmetic.         (line   14)
54666* 'plus' and attributes:                 Expressions.        (line   83)
54667* 'plus', canonicalization of:           Insn Canonicalizations.
54668                                                             (line   27)
54669* PLUS_EXPR:                             Unary and Binary Expressions.
54670                                                             (line    6)
54671* Pmode:                                 Misc.               (line  363)
54672* pmode_register_operand:                Machine-Independent Predicates.
54673                                                             (line   34)
54674* pointer:                               Types.              (line    6)
54675* POINTERS_EXTEND_UNSIGNED:              Storage Layout.     (line   76)
54676* POINTER_DIFF_EXPR:                     Unary and Binary Expressions.
54677                                                             (line    6)
54678* POINTER_PLUS_EXPR:                     Unary and Binary Expressions.
54679                                                             (line    6)
54680* POINTER_SIZE:                          Storage Layout.     (line   70)
54681* POINTER_TYPE:                          Types.              (line    6)
54682* polynomial integers:                   poly_int.           (line    6)
54683* poly_int:                              poly_int.           (line    6)
54684* 'poly_int', invariant range:           Overview of 'poly_int'.
54685                                                             (line   31)
54686* 'poly_int', main typedefs:             Overview of 'poly_int'.
54687                                                             (line   46)
54688* 'poly_int', runtime value:             Overview of 'poly_int'.
54689                                                             (line    6)
54690* 'poly_int', template parameters:       Overview of 'poly_int'.
54691                                                             (line   24)
54692* 'poly_int', use in target-independent code: Consequences of using 'poly_int'.
54693                                                             (line   32)
54694* 'poly_int', use in target-specific code: Consequences of using 'poly_int'.
54695                                                             (line   40)
54696* POLY_INT_CST:                          Constant expressions.
54697                                                             (line    6)
54698* popcount:                              Arithmetic.         (line  238)
54699* 'popcountM2' instruction pattern:      Standard Names.     (line 1216)
54700* pops_args:                             Function Entry.     (line  111)
54701* pop_operand:                           Machine-Independent Predicates.
54702                                                             (line   87)
54703* portability:                           Portability.        (line    6)
54704* position independent code:             PIC.                (line    6)
54705* POSTDECREMENT_EXPR:                    Unary and Binary Expressions.
54706                                                             (line    6)
54707* POSTINCREMENT_EXPR:                    Unary and Binary Expressions.
54708                                                             (line    6)
54709* post_dec:                              Incdec.             (line   25)
54710* post_inc:                              Incdec.             (line   30)
54711* POST_LINK_SPEC:                        Driver.             (line  236)
54712* post_modify:                           Incdec.             (line   33)
54713* post_order_compute, inverted_post_order_compute, walk_dominator_tree: Basic Blocks.
54714                                                             (line   34)
54715* POWI_MAX_MULTS:                        Misc.               (line  927)
54716* 'powM3' instruction pattern:           Standard Names.     (line 1054)
54717* pragma:                                Misc.               (line  420)
54718* PREDECREMENT_EXPR:                     Unary and Binary Expressions.
54719                                                             (line    6)
54720* predefined macros:                     Run-time Target.    (line    6)
54721* predicates:                            Predicates.         (line    6)
54722* predicates and machine modes:          Predicates.         (line   31)
54723* predication:                           Conditional Execution.
54724                                                             (line    6)
54725* predict.def:                           Profile information.
54726                                                             (line   24)
54727* PREFERRED_DEBUGGING_TYPE:              All Debuggers.      (line   40)
54728* PREFERRED_RELOAD_CLASS:                Register Classes.   (line  249)
54729* PREFERRED_STACK_BOUNDARY:              Storage Layout.     (line  164)
54730* prefetch:                              Side Effects.       (line  323)
54731* 'prefetch' and '/v':                   Flags.              (line   92)
54732* 'prefetch' instruction pattern:        Standard Names.     (line 2140)
54733* PREFETCH_SCHEDULE_BARRIER_P:           Flags.              (line   92)
54734* PREINCREMENT_EXPR:                     Unary and Binary Expressions.
54735                                                             (line    6)
54736* presence_set:                          Processor pipeline description.
54737                                                             (line  223)
54738* preserving SSA form:                   SSA.                (line   74)
54739* pretend_args_size:                     Function Entry.     (line  117)
54740* prev_active_insn:                      define_peephole.    (line   60)
54741* PREV_INSN:                             Insns.              (line   26)
54742* pre_dec:                               Incdec.             (line    8)
54743* PRE_GCC3_DWARF_FRAME_REGISTERS:        Frame Registers.    (line  126)
54744* pre_inc:                               Incdec.             (line   22)
54745* pre_modify:                            Incdec.             (line   52)
54746* PRINT_OPERAND:                         Instruction Output. (line   95)
54747* PRINT_OPERAND_ADDRESS:                 Instruction Output. (line  122)
54748* PRINT_OPERAND_PUNCT_VALID_P:           Instruction Output. (line  115)
54749* 'probe_stack' instruction pattern:     Standard Names.     (line 1990)
54750* 'probe_stack_address' instruction pattern: Standard Names. (line 1983)
54751* processor functional units:            Processor pipeline description.
54752                                                             (line    6)
54753* processor functional units <1>:        Processor pipeline description.
54754                                                             (line   68)
54755* processor pipeline description:        Processor pipeline description.
54756                                                             (line    6)
54757* product:                               Arithmetic.         (line   93)
54758* profile feedback:                      Profile information.
54759                                                             (line   14)
54760* profile representation:                Profile information.
54761                                                             (line    6)
54762* PROFILE_BEFORE_PROLOGUE:               Profiling.          (line   34)
54763* PROFILE_HOOK:                          Profiling.          (line   22)
54764* profiling, code generation:            Profiling.          (line    6)
54765* program counter:                       Regs and Memory.    (line  384)
54766* prologue:                              Function Entry.     (line    6)
54767* 'prologue' instruction pattern:        Standard Names.     (line 2079)
54768* PROMOTE_MODE:                          Storage Layout.     (line   87)
54769* pseudo registers:                      Regs and Memory.    (line    9)
54770* PSImode:                               Machine Modes.      (line   32)
54771* PTRDIFF_TYPE:                          Type Layout.        (line  157)
54772* purge_dead_edges:                      Edges.              (line  103)
54773* purge_dead_edges <1>:                  Maintaining the CFG.
54774                                                             (line   81)
54775* push address instruction:              Simple Constraints. (line  162)
54776* 'pushM1' instruction pattern:          Standard Names.     (line  429)
54777* PUSH_ARGS:                             Stack Arguments.    (line   17)
54778* PUSH_ARGS_REVERSED:                    Stack Arguments.    (line   25)
54779* push_operand:                          Machine-Independent Predicates.
54780                                                             (line   80)
54781* push_reload:                           Addressing Modes.   (line  176)
54782* PUSH_ROUNDING:                         Stack Arguments.    (line   31)
54783* PUT_CODE:                              RTL Objects.        (line   47)
54784* PUT_MODE:                              Machine Modes.      (line  380)
54785* PUT_REG_NOTE_KIND:                     Insns.              (line  369)
54786* QCmode:                                Machine Modes.      (line  199)
54787* QFmode:                                Machine Modes.      (line   57)
54788* QImode:                                Machine Modes.      (line   25)
54789* 'QImode', in 'insn':                   Insns.              (line  291)
54790* QQmode:                                Machine Modes.      (line  106)
54791* qualified type:                        Types.              (line    6)
54792* qualified type <1>:                    Types for C++.      (line    6)
54793* querying function unit reservations:   Processor pipeline description.
54794                                                             (line   90)
54795* question mark:                         Multi-Alternative.  (line   42)
54796* quotient:                              Arithmetic.         (line  116)
54797* 'r' in constraint:                     Simple Constraints. (line   64)
54798* RDIV_EXPR:                             Unary and Binary Expressions.
54799                                                             (line    6)
54800* READONLY_DATA_SECTION_ASM_OP:          Sections.           (line   62)
54801* real operands:                         SSA Operands.       (line    6)
54802* REALPART_EXPR:                         Unary and Binary Expressions.
54803                                                             (line    6)
54804* REAL_CST:                              Constant expressions.
54805                                                             (line    6)
54806* REAL_LIBGCC_SPEC:                      Driver.             (line  124)
54807* REAL_NM_FILE_NAME:                     Macros for Initialization.
54808                                                             (line  105)
54809* REAL_TYPE:                             Types.              (line    6)
54810* REAL_VALUE_ABS:                        Floating Point.     (line   58)
54811* REAL_VALUE_ATOF:                       Floating Point.     (line   39)
54812* REAL_VALUE_FIX:                        Floating Point.     (line   31)
54813* REAL_VALUE_ISINF:                      Floating Point.     (line   49)
54814* REAL_VALUE_ISNAN:                      Floating Point.     (line   52)
54815* REAL_VALUE_NEGATE:                     Floating Point.     (line   55)
54816* REAL_VALUE_NEGATIVE:                   Floating Point.     (line   46)
54817* REAL_VALUE_TO_TARGET_DECIMAL128:       Data Output.        (line  153)
54818* REAL_VALUE_TO_TARGET_DECIMAL32:        Data Output.        (line  151)
54819* REAL_VALUE_TO_TARGET_DECIMAL64:        Data Output.        (line  152)
54820* REAL_VALUE_TO_TARGET_DOUBLE:           Data Output.        (line  149)
54821* REAL_VALUE_TO_TARGET_LONG_DOUBLE:      Data Output.        (line  150)
54822* REAL_VALUE_TO_TARGET_SINGLE:           Data Output.        (line  148)
54823* REAL_VALUE_TYPE:                       Floating Point.     (line   25)
54824* REAL_VALUE_UNSIGNED_FIX:               Floating Point.     (line   34)
54825* recognizing insns:                     RTL Template.       (line    6)
54826* recog_data.operand:                    Instruction Output. (line   54)
54827* RECORD_TYPE:                           Types.              (line    6)
54828* RECORD_TYPE <1>:                       Classes.            (line    6)
54829* redirect_edge_and_branch:              Profile information.
54830                                                             (line   71)
54831* redirect_edge_and_branch, redirect_jump: Maintaining the CFG.
54832                                                             (line   89)
54833* 'reduc_and_scal_M' instruction pattern: Standard Names.    (line  535)
54834* 'reduc_ior_scal_M' instruction pattern: Standard Names.    (line  536)
54835* 'reduc_plus_scal_M' instruction pattern: Standard Names.   (line  530)
54836* 'reduc_smax_scal_M' instruction pattern: Standard Names.   (line  520)
54837* 'reduc_smin_scal_M' instruction pattern: Standard Names.   (line  520)
54838* 'reduc_umax_scal_M' instruction pattern: Standard Names.   (line  525)
54839* 'reduc_umin_scal_M' instruction pattern: Standard Names.   (line  525)
54840* 'reduc_xor_scal_M' instruction pattern: Standard Names.    (line  537)
54841* reference:                             Types.              (line    6)
54842* REFERENCE_TYPE:                        Types.              (line    6)
54843* reg:                                   Regs and Memory.    (line    9)
54844* 'reg' and '/f':                        Flags.              (line  102)
54845* 'reg' and '/i':                        Flags.              (line   97)
54846* 'reg' and '/v':                        Flags.              (line  106)
54847* 'reg', RTL sharing:                    Sharing.            (line   17)
54848* register allocation order:             Allocation Order.   (line    6)
54849* register class definitions:            Register Classes.   (line    6)
54850* register class preference constraints: Class Preferences.  (line    6)
54851* register pairs:                        Values in Registers.
54852                                                             (line   65)
54853* Register Transfer Language (RTL):      RTL.                (line    6)
54854* register usage:                        Registers.          (line    6)
54855* registers arguments:                   Register Arguments. (line    6)
54856* registers in constraints:              Simple Constraints. (line   64)
54857* REGISTER_MOVE_COST:                    Costs.              (line    9)
54858* REGISTER_NAMES:                        Instruction Output. (line    8)
54859* register_operand:                      Machine-Independent Predicates.
54860                                                             (line   29)
54861* REGISTER_PREFIX:                       Instruction Output. (line  150)
54862* REGISTER_TARGET_PRAGMAS:               Misc.               (line  420)
54863* REGMODE_NATURAL_SIZE:                  Regs and Memory.    (line  191)
54864* REGMODE_NATURAL_SIZE <1>:              Regs and Memory.    (line  268)
54865* REGMODE_NATURAL_SIZE <2>:              Values in Registers.
54866                                                             (line   46)
54867* REGNO_MODE_CODE_OK_FOR_BASE_P:         Register Classes.   (line  172)
54868* REGNO_MODE_OK_FOR_BASE_P:              Register Classes.   (line  150)
54869* REGNO_MODE_OK_FOR_REG_BASE_P:          Register Classes.   (line  160)
54870* REGNO_OK_FOR_BASE_P:                   Register Classes.   (line  146)
54871* REGNO_OK_FOR_INDEX_P:                  Register Classes.   (line  186)
54872* REGNO_REG_CLASS:                       Register Classes.   (line  105)
54873* regs_ever_live:                        Function Entry.     (line   29)
54874* regular expressions:                   Processor pipeline description.
54875                                                             (line    6)
54876* regular expressions <1>:               Processor pipeline description.
54877                                                             (line  105)
54878* regular IPA passes:                    Regular IPA passes. (line    6)
54879* REG_ALLOC_ORDER:                       Allocation Order.   (line    8)
54880* REG_BR_PRED:                           Insns.              (line  541)
54881* REG_BR_PROB:                           Insns.              (line  533)
54882* REG_BR_PROB_BASE, BB_FREQ_BASE, count: Profile information.
54883                                                             (line   82)
54884* REG_BR_PROB_BASE, EDGE_FREQUENCY:      Profile information.
54885                                                             (line   52)
54886* REG_CALL_NOCF_CHECK:                   Insns.              (line  557)
54887* REG_CC_SETTER:                         Insns.              (line  505)
54888* REG_CC_USER:                           Insns.              (line  505)
54889* reg_class_contents:                    Register Basics.    (line  102)
54890* REG_CLASS_CONTENTS:                    Register Classes.   (line   91)
54891* reg_class_for_constraint:              C Constraint Interface.
54892                                                             (line   48)
54893* REG_CLASS_NAMES:                       Register Classes.   (line   86)
54894* REG_DEAD:                              Insns.              (line  380)
54895* REG_DEAD, REG_UNUSED:                  Liveness information.
54896                                                             (line   32)
54897* REG_DEP_ANTI:                          Insns.              (line  527)
54898* REG_DEP_OUTPUT:                        Insns.              (line  523)
54899* REG_DEP_TRUE:                          Insns.              (line  520)
54900* REG_EH_REGION, EDGE_ABNORMAL_CALL:     Edges.              (line  109)
54901* REG_EQUAL:                             Insns.              (line  434)
54902* REG_EQUIV:                             Insns.              (line  434)
54903* REG_EXPR:                              Special Accessors.  (line   58)
54904* REG_FRAME_RELATED_EXPR:                Insns.              (line  547)
54905* REG_FUNCTION_VALUE_P:                  Flags.              (line   97)
54906* REG_INC:                               Insns.              (line  396)
54907* 'reg_label' and '/v':                  Flags.              (line   54)
54908* REG_LABEL_OPERAND:                     Insns.              (line  410)
54909* REG_LABEL_TARGET:                      Insns.              (line  419)
54910* reg_names:                             Register Basics.    (line  102)
54911* reg_names <1>:                         Instruction Output. (line  107)
54912* REG_NONNEG:                            Insns.              (line  402)
54913* REG_NOTES:                             Insns.              (line  344)
54914* REG_NOTE_KIND:                         Insns.              (line  369)
54915* REG_OFFSET:                            Special Accessors.  (line   62)
54916* REG_OK_STRICT:                         Addressing Modes.   (line   99)
54917* REG_PARM_STACK_SPACE:                  Stack Arguments.    (line   58)
54918* 'REG_PARM_STACK_SPACE', and 'TARGET_FUNCTION_ARG': Register Arguments.
54919                                                             (line   49)
54920* REG_POINTER:                           Flags.              (line  102)
54921* REG_SETJMP:                            Insns.              (line  428)
54922* REG_UNUSED:                            Insns.              (line  389)
54923* REG_USERVAR_P:                         Flags.              (line  106)
54924* REG_VALUE_IN_UNWIND_CONTEXT:           Frame Registers.    (line  156)
54925* REG_WORDS_BIG_ENDIAN:                  Storage Layout.     (line   35)
54926* relative costs:                        Costs.              (line    6)
54927* RELATIVE_PREFIX_NOT_LINKDIR:           Driver.             (line  266)
54928* reloading:                             RTL passes.         (line  170)
54929* reload_completed:                      Standard Names.     (line 1788)
54930* 'reload_in' instruction pattern:       Standard Names.     (line   98)
54931* reload_in_progress:                    Standard Names.     (line   57)
54932* 'reload_out' instruction pattern:      Standard Names.     (line   98)
54933* remainder:                             Arithmetic.         (line  136)
54934* 'remainderM3' instruction pattern:     Standard Names.     (line  908)
54935* reorder:                               GTY Options.        (line  175)
54936* representation of RTL:                 RTL.                (line    6)
54937* reservation delays:                    Processor pipeline description.
54938                                                             (line    6)
54939* 'restore_stack_block' instruction pattern: Standard Names. (line 1904)
54940* 'restore_stack_function' instruction pattern: Standard Names.
54941                                                             (line 1904)
54942* 'restore_stack_nonlocal' instruction pattern: Standard Names.
54943                                                             (line 1904)
54944* rest_of_decl_compilation:              Parsing pass.       (line   51)
54945* rest_of_type_compilation:              Parsing pass.       (line   51)
54946* RESULT_DECL:                           Declarations.       (line    6)
54947* return:                                Side Effects.       (line   72)
54948* 'return' instruction pattern:          Standard Names.     (line 1762)
54949* return values in registers:            Scalar Return.      (line    6)
54950* returning aggregate values:            Aggregate Return.   (line    6)
54951* returning structures and unions:       Interface.          (line   10)
54952* RETURN_ADDRESS_POINTER_REGNUM:         Frame Registers.    (line   64)
54953* RETURN_ADDR_IN_PREVIOUS_FRAME:         Frame Layout.       (line  127)
54954* RETURN_ADDR_OFFSET:                    Exception Handling. (line   59)
54955* RETURN_ADDR_RTX:                       Frame Layout.       (line  116)
54956* RETURN_EXPR:                           Statements for C++. (line    6)
54957* RETURN_STMT:                           Statements for C++. (line    6)
54958* return_val:                            Flags.              (line  283)
54959* 'return_val', in 'call_insn':          Flags.              (line  120)
54960* 'return_val', in 'reg':                Flags.              (line   97)
54961* 'return_val', in 'symbol_ref':         Flags.              (line  216)
54962* reverse probability:                   Profile information.
54963                                                             (line   66)
54964* REVERSE_CONDITION:                     MODE_CC Condition Codes.
54965                                                             (line   92)
54966* REVERSIBLE_CC_MODE:                    MODE_CC Condition Codes.
54967                                                             (line   77)
54968* right rotate:                          Arithmetic.         (line  195)
54969* right shift:                           Arithmetic.         (line  190)
54970* 'rintM2' instruction pattern:          Standard Names.     (line 1114)
54971* RISC:                                  Processor pipeline description.
54972                                                             (line    6)
54973* RISC <1>:                              Processor pipeline description.
54974                                                             (line  223)
54975* roots, marking:                        GGC Roots.          (line    6)
54976* rotate:                                Arithmetic.         (line  195)
54977* rotate <1>:                            Arithmetic.         (line  195)
54978* rotatert:                              Arithmetic.         (line  195)
54979* 'rotlM3' instruction pattern:          Standard Names.     (line  840)
54980* 'rotrM3' instruction pattern:          Standard Names.     (line  840)
54981* 'roundM2' instruction pattern:         Standard Names.     (line 1087)
54982* ROUND_DIV_EXPR:                        Unary and Binary Expressions.
54983                                                             (line    6)
54984* ROUND_MOD_EXPR:                        Unary and Binary Expressions.
54985                                                             (line    6)
54986* ROUND_TYPE_ALIGN:                      Storage Layout.     (line  457)
54987* RSHIFT_EXPR:                           Unary and Binary Expressions.
54988                                                             (line    6)
54989* 'rsqrtM2' instruction pattern:         Standard Names.     (line  888)
54990* RTL addition:                          Arithmetic.         (line   14)
54991* RTL addition with signed saturation:   Arithmetic.         (line   14)
54992* RTL addition with unsigned saturation: Arithmetic.         (line   14)
54993* RTL classes:                           RTL Classes.        (line    6)
54994* RTL comparison:                        Arithmetic.         (line   46)
54995* RTL comparison operations:             Comparisons.        (line    6)
54996* RTL constant expression types:         Constants.          (line    6)
54997* RTL constants:                         Constants.          (line    6)
54998* RTL declarations:                      RTL Declarations.   (line    6)
54999* RTL difference:                        Arithmetic.         (line   38)
55000* RTL expression:                        RTL Objects.        (line    6)
55001* RTL expressions for arithmetic:        Arithmetic.         (line    6)
55002* RTL format:                            RTL Classes.        (line   73)
55003* RTL format characters:                 RTL Classes.        (line   78)
55004* RTL function-call insns:               Calls.              (line    6)
55005* RTL insn template:                     RTL Template.       (line    6)
55006* RTL integers:                          RTL Objects.        (line    6)
55007* RTL memory expressions:                Regs and Memory.    (line    6)
55008* RTL object types:                      RTL Objects.        (line    6)
55009* RTL postdecrement:                     Incdec.             (line    6)
55010* RTL postincrement:                     Incdec.             (line    6)
55011* RTL predecrement:                      Incdec.             (line    6)
55012* RTL preincrement:                      Incdec.             (line    6)
55013* RTL register expressions:              Regs and Memory.    (line    6)
55014* RTL representation:                    RTL.                (line    6)
55015* RTL side effect expressions:           Side Effects.       (line    6)
55016* RTL strings:                           RTL Objects.        (line    6)
55017* RTL structure sharing assumptions:     Sharing.            (line    6)
55018* RTL subtraction:                       Arithmetic.         (line   38)
55019* RTL subtraction with signed saturation: Arithmetic.        (line   38)
55020* RTL subtraction with unsigned saturation: Arithmetic.      (line   38)
55021* RTL sum:                               Arithmetic.         (line   14)
55022* RTL vectors:                           RTL Objects.        (line    6)
55023* RTL_CONST_CALL_P:                      Flags.              (line  115)
55024* RTL_CONST_OR_PURE_CALL_P:              Flags.              (line  125)
55025* RTL_LOOPING_CONST_OR_PURE_CALL_P:      Flags.              (line  129)
55026* RTL_PURE_CALL_P:                       Flags.              (line  120)
55027* RTX (See RTL):                         RTL Objects.        (line    6)
55028* RTX codes, classes of:                 RTL Classes.        (line    6)
55029* RTX_FRAME_RELATED_P:                   Flags.              (line  135)
55030* run-time conventions:                  Interface.          (line    6)
55031* run-time target specification:         Run-time Target.    (line    6)
55032* 's' in constraint:                     Simple Constraints. (line  100)
55033* SAD_EXPR:                              Vectors.            (line    6)
55034* same_type_p:                           Types.              (line   86)
55035* SAmode:                                Machine Modes.      (line  150)
55036* 'satfractMN2' instruction pattern:     Standard Names.     (line 1464)
55037* 'satfractunsMN2' instruction pattern:  Standard Names.     (line 1477)
55038* satisfies_constraint_:                 C Constraint Interface.
55039                                                             (line   36)
55040* sat_fract:                             Conversions.        (line   90)
55041* SAVE_EXPR:                             Unary and Binary Expressions.
55042                                                             (line    6)
55043* 'save_stack_block' instruction pattern: Standard Names.    (line 1904)
55044* 'save_stack_function' instruction pattern: Standard Names. (line 1904)
55045* 'save_stack_nonlocal' instruction pattern: Standard Names. (line 1904)
55046* SBSS_SECTION_ASM_OP:                   Sections.           (line   75)
55047* Scalar evolutions:                     Scalar evolutions.  (line    6)
55048* scalars, returned as values:           Scalar Return.      (line    6)
55049* scalar_float_mode:                     Machine Modes.      (line  293)
55050* scalar_int_mode:                       Machine Modes.      (line  290)
55051* scalar_mode:                           Machine Modes.      (line  296)
55052* 'scalbM3' instruction pattern:         Standard Names.     (line  915)
55053* 'scatter_storeMN' instruction pattern: Standard Names.     (line  255)
55054* SCHED_GROUP_P:                         Flags.              (line  162)
55055* SCmode:                                Machine Modes.      (line  199)
55056* scratch:                               Regs and Memory.    (line  320)
55057* scratch operands:                      Regs and Memory.    (line  320)
55058* 'scratch', RTL sharing:                Sharing.            (line   38)
55059* scratch_operand:                       Machine-Independent Predicates.
55060                                                             (line   49)
55061* SDATA_SECTION_ASM_OP:                  Sections.           (line   57)
55062* 'sdiv_pow2M3' instruction pattern:     Standard Names.     (line  614)
55063* 'sdiv_pow2M3' instruction pattern <1>: Standard Names.     (line  615)
55064* SDmode:                                Machine Modes.      (line   88)
55065* 'sdot_prodM' instruction pattern:      Standard Names.     (line  569)
55066* search options:                        Including Patterns. (line   45)
55067* SECONDARY_INPUT_RELOAD_CLASS:          Register Classes.   (line  391)
55068* SECONDARY_MEMORY_NEEDED_RTX:           Register Classes.   (line  457)
55069* SECONDARY_OUTPUT_RELOAD_CLASS:         Register Classes.   (line  392)
55070* SECONDARY_RELOAD_CLASS:                Register Classes.   (line  390)
55071* SELECT_CC_MODE:                        MODE_CC Condition Codes.
55072                                                             (line    6)
55073* sequence:                              Side Effects.       (line  258)
55074* Sequence iterators:                    Sequence iterators. (line    6)
55075* set:                                   Side Effects.       (line   15)
55076* 'set' and '/f':                        Flags.              (line  135)
55077* 'setmemM' instruction pattern:         Standard Names.     (line 1328)
55078* SETUP_FRAME_ADDRESSES:                 Frame Layout.       (line   94)
55079* SET_ASM_OP:                            Label Output.       (line  451)
55080* SET_ASM_OP <1>:                        Label Output.       (line  462)
55081* set_attr:                              Tagging Insns.      (line   31)
55082* set_attr_alternative:                  Tagging Insns.      (line   49)
55083* set_bb_seq:                            GIMPLE sequences.   (line   75)
55084* SET_DEST:                              Side Effects.       (line   69)
55085* SET_IS_RETURN_P:                       Flags.              (line  171)
55086* SET_LABEL_KIND:                        Insns.              (line  146)
55087* set_optab_libfunc:                     Library Calls.      (line   15)
55088* SET_RATIO:                             Costs.              (line  237)
55089* SET_SRC:                               Side Effects.       (line   69)
55090* 'set_thread_pointerMODE' instruction pattern: Standard Names.
55091                                                             (line 2477)
55092* SET_TYPE_STRUCTURAL_EQUALITY:          Types.              (line    6)
55093* SET_TYPE_STRUCTURAL_EQUALITY <1>:      Types.              (line   81)
55094* SFmode:                                Machine Modes.      (line   69)
55095* sharing of RTL components:             Sharing.            (line    6)
55096* shift:                                 Arithmetic.         (line  173)
55097* SHIFT_COUNT_TRUNCATED:                 Misc.               (line  134)
55098* SHLIB_SUFFIX:                          Macros for Initialization.
55099                                                             (line  133)
55100* SHORT_ACCUM_TYPE_SIZE:                 Type Layout.        (line   82)
55101* SHORT_FRACT_TYPE_SIZE:                 Type Layout.        (line   62)
55102* SHORT_IMMEDIATES_SIGN_EXTEND:          Misc.               (line  108)
55103* SHORT_TYPE_SIZE:                       Type Layout.        (line   15)
55104* shrink-wrapping separate components:   Shrink-wrapping separate components.
55105                                                             (line    6)
55106* 'sibcall_epilogue' instruction pattern: Standard Names.    (line 2111)
55107* sibling call:                          Edges.              (line  121)
55108* SIBLING_CALL_P:                        Flags.              (line  175)
55109* signal-to-noise ratio (metaphorical usage for diagnostics): Guidelines for Diagnostics.
55110                                                             (line   39)
55111* signed division:                       Arithmetic.         (line  116)
55112* signed division with signed saturation: Arithmetic.        (line  116)
55113* signed maximum:                        Arithmetic.         (line  141)
55114* signed minimum:                        Arithmetic.         (line  141)
55115* 'significandM2' instruction pattern:   Standard Names.     (line 1047)
55116* sign_extend:                           Conversions.        (line   23)
55117* sign_extract:                          Bit-Fields.         (line    8)
55118* 'sign_extract', canonicalization of:   Insn Canonicalizations.
55119                                                             (line  103)
55120* SIG_ATOMIC_TYPE:                       Type Layout.        (line  208)
55121* SImode:                                Machine Modes.      (line   37)
55122* simple constraints:                    Simple Constraints. (line    6)
55123* simple_return:                         Side Effects.       (line   86)
55124* 'simple_return' instruction pattern:   Standard Names.     (line 1777)
55125* 'sincosM3' instruction pattern:        Standard Names.     (line  943)
55126* 'sinM2' instruction pattern:           Standard Names.     (line  937)
55127* SIZETYPE:                              Type Layout.        (line  147)
55128* SIZE_ASM_OP:                           Label Output.       (line   33)
55129* SIZE_TYPE:                             Type Layout.        (line  131)
55130* skip:                                  GTY Options.        (line   76)
55131* SLOW_BYTE_ACCESS:                      Costs.              (line  117)
55132* small IPA passes:                      Small IPA passes.   (line    6)
55133* smax:                                  Arithmetic.         (line  141)
55134* smin:                                  Arithmetic.         (line  141)
55135* sms, swing, software pipelining:       RTL passes.         (line  123)
55136* 'smulhrsM3' instruction pattern:       Standard Names.     (line  604)
55137* 'smulhsM3' instruction pattern:        Standard Names.     (line  594)
55138* 'smulM3_highpart' instruction pattern: Standard Names.     (line  753)
55139* soft float library:                    Soft float library routines.
55140                                                             (line    6)
55141* source code, location information:     Guidelines for Diagnostics.
55142                                                             (line  159)
55143* special:                               GTY Options.        (line  237)
55144* special predicates:                    Predicates.         (line   31)
55145* SPECS:                                 Target Fragment.    (line  194)
55146* 'speculation_barrier' instruction pattern: Standard Names. (line 2178)
55147* speed of instructions:                 Costs.              (line    6)
55148* splitting instructions:                Insn Splitting.     (line    6)
55149* split_block:                           Maintaining the CFG.
55150                                                             (line   96)
55151* SQmode:                                Machine Modes.      (line  114)
55152* sqrt:                                  Arithmetic.         (line  206)
55153* 'sqrtM2' instruction pattern:          Standard Names.     (line  882)
55154* square root:                           Arithmetic.         (line  206)
55155* SSA:                                   SSA.                (line    6)
55156* 'ssaddM3' instruction pattern:         Standard Names.     (line  442)
55157* 'ssadM' instruction pattern:           Standard Names.     (line  578)
55158* 'ssashlM3' instruction pattern:        Standard Names.     (line  828)
55159* SSA_NAME_DEF_STMT:                     SSA.                (line  184)
55160* SSA_NAME_VERSION:                      SSA.                (line  189)
55161* 'ssdivM3' instruction pattern:         Standard Names.     (line  442)
55162* 'ssmaddMN4' instruction pattern:       Standard Names.     (line  776)
55163* 'ssmsubMN4' instruction pattern:       Standard Names.     (line  800)
55164* 'ssmulM3' instruction pattern:         Standard Names.     (line  442)
55165* 'ssnegM2' instruction pattern:         Standard Names.     (line  872)
55166* 'sssubM3' instruction pattern:         Standard Names.     (line  442)
55167* ss_abs:                                Arithmetic.         (line  200)
55168* ss_ashift:                             Arithmetic.         (line  173)
55169* ss_div:                                Arithmetic.         (line  116)
55170* ss_minus:                              Arithmetic.         (line   38)
55171* ss_mult:                               Arithmetic.         (line   93)
55172* ss_neg:                                Arithmetic.         (line   82)
55173* ss_plus:                               Arithmetic.         (line   14)
55174* ss_truncate:                           Conversions.        (line   43)
55175* stack arguments:                       Stack Arguments.    (line    6)
55176* stack frame layout:                    Frame Layout.       (line    6)
55177* stack smashing protection:             Stack Smashing Protection.
55178                                                             (line    6)
55179* STACK_ALIGNMENT_NEEDED:                Frame Layout.       (line   41)
55180* STACK_BOUNDARY:                        Storage Layout.     (line  156)
55181* STACK_CHECK_BUILTIN:                   Stack Checking.     (line   31)
55182* STACK_CHECK_FIXED_FRAME_SIZE:          Stack Checking.     (line   83)
55183* STACK_CHECK_MAX_FRAME_SIZE:            Stack Checking.     (line   74)
55184* STACK_CHECK_MAX_VAR_SIZE:              Stack Checking.     (line   90)
55185* STACK_CHECK_MOVING_SP:                 Stack Checking.     (line   53)
55186* STACK_CHECK_PROBE_INTERVAL_EXP:        Stack Checking.     (line   45)
55187* STACK_CHECK_PROTECT:                   Stack Checking.     (line   62)
55188* STACK_CHECK_STATIC_BUILTIN:            Stack Checking.     (line   38)
55189* STACK_DYNAMIC_OFFSET:                  Frame Layout.       (line   67)
55190* 'STACK_DYNAMIC_OFFSET' and virtual registers: Regs and Memory.
55191                                                             (line   83)
55192* STACK_GROWS_DOWNWARD:                  Frame Layout.       (line    8)
55193* STACK_PARMS_IN_REG_PARM_AREA:          Stack Arguments.    (line   89)
55194* STACK_POINTER_OFFSET:                  Frame Layout.       (line   51)
55195* 'STACK_POINTER_OFFSET' and virtual registers: Regs and Memory.
55196                                                             (line   93)
55197* STACK_POINTER_REGNUM:                  Frame Registers.    (line    8)
55198* 'STACK_POINTER_REGNUM' and virtual registers: Regs and Memory.
55199                                                             (line   83)
55200* stack_pointer_rtx:                     Frame Registers.    (line  104)
55201* 'stack_protect_combined_set' instruction pattern: Standard Names.
55202                                                             (line 2487)
55203* 'stack_protect_combined_test' instruction pattern: Standard Names.
55204                                                             (line 2517)
55205* 'stack_protect_set' instruction pattern: Standard Names.   (line 2503)
55206* 'stack_protect_test' instruction pattern: Standard Names.  (line 2534)
55207* STACK_PUSH_CODE:                       Frame Layout.       (line   12)
55208* STACK_REGS:                            Stack Registers.    (line   19)
55209* STACK_REG_COVER_CLASS:                 Stack Registers.    (line   22)
55210* STACK_SAVEAREA_MODE:                   Storage Layout.     (line  473)
55211* STACK_SIZE_MODE:                       Storage Layout.     (line  484)
55212* STACK_SLOT_ALIGNMENT:                  Storage Layout.     (line  305)
55213* standard pattern names:                Standard Names.     (line    6)
55214* STANDARD_STARTFILE_PREFIX:             Driver.             (line  278)
55215* STANDARD_STARTFILE_PREFIX_1:           Driver.             (line  285)
55216* STANDARD_STARTFILE_PREFIX_2:           Driver.             (line  292)
55217* STARTFILE_SPEC:                        Driver.             (line  147)
55218* Statement and operand traversals:      Statement and operand traversals.
55219                                                             (line    6)
55220* Statement Sequences:                   Statement Sequences.
55221                                                             (line    6)
55222* Statements:                            Statements.         (line    6)
55223* statements:                            Function Properties.
55224                                                             (line    6)
55225* statements <1>:                        Statements for C++. (line    6)
55226* static analysis:                       Static Analyzer.    (line    6)
55227* static analyzer:                       Static Analyzer.    (line    6)
55228* static analyzer, debugging:            Debugging the Analyzer.
55229                                                             (line    5)
55230* static analyzer, internals:            Analyzer Internals. (line    5)
55231* Static profile estimation:             Profile information.
55232                                                             (line   24)
55233* static single assignment:              SSA.                (line    6)
55234* STATIC_CHAIN_INCOMING_REGNUM:          Frame Registers.    (line   77)
55235* STATIC_CHAIN_REGNUM:                   Frame Registers.    (line   76)
55236* 'stdarg.h' and register arguments:     Register Arguments. (line   44)
55237* STDC_0_IN_SYSTEM_HEADERS:              Misc.               (line  384)
55238* STMT_EXPR:                             Unary and Binary Expressions.
55239                                                             (line    6)
55240* STMT_IS_FULL_EXPR_P:                   Statements for C++. (line   22)
55241* storage layout:                        Storage Layout.     (line    6)
55242* STORE_FLAG_VALUE:                      Misc.               (line  235)
55243* STORE_MAX_PIECES:                      Costs.              (line  215)
55244* 'store_multiple' instruction pattern:  Standard Names.     (line  159)
55245* strcpy:                                Storage Layout.     (line  258)
55246* STRICT_ALIGNMENT:                      Storage Layout.     (line  355)
55247* strict_low_part:                       RTL Declarations.   (line    9)
55248* strict_memory_address_p:               Addressing Modes.   (line  186)
55249* STRING_CST:                            Constant expressions.
55250                                                             (line    6)
55251* STRING_POOL_ADDRESS_P:                 Flags.              (line  179)
55252* 'strlenM' instruction pattern:         Standard Names.     (line 1399)
55253* structure value address:               Aggregate Return.   (line    6)
55254* structures, returning:                 Interface.          (line   10)
55255* STRUCTURE_SIZE_BOUNDARY:               Storage Layout.     (line  347)
55256* 'subM3' instruction pattern:           Standard Names.     (line  442)
55257* SUBOBJECT:                             Statements for C++. (line    6)
55258* SUBOBJECT_CLEANUP:                     Statements for C++. (line    6)
55259* subreg:                                Regs and Memory.    (line   97)
55260* 'subreg' and '/s':                     Flags.              (line  201)
55261* 'subreg' and '/u':                     Flags.              (line  194)
55262* 'subreg' and '/u' and '/v':            Flags.              (line  184)
55263* 'subreg', in 'strict_low_part':        RTL Declarations.   (line    9)
55264* SUBREG_BYTE:                           Regs and Memory.    (line  311)
55265* SUBREG_PROMOTED_UNSIGNED_P:            Flags.              (line  184)
55266* SUBREG_PROMOTED_UNSIGNED_SET:          Flags.              (line  194)
55267* SUBREG_PROMOTED_VAR_P:                 Flags.              (line  201)
55268* SUBREG_REG:                            Regs and Memory.    (line  311)
55269* subst iterators in '.md' files:        Subst Iterators.    (line    6)
55270* 'subvM4' instruction pattern:          Standard Names.     (line  458)
55271* SUCCESS_EXIT_CODE:                     Host Misc.          (line   12)
55272* support for nested functions:          Trampolines.        (line    6)
55273* SUPPORTS_INIT_PRIORITY:                Macros for Initialization.
55274                                                             (line   57)
55275* SUPPORTS_ONE_ONLY:                     Label Output.       (line  290)
55276* SUPPORTS_WEAK:                         Label Output.       (line  264)
55277* SWITCHABLE_TARGET:                     Run-time Target.    (line  160)
55278* SWITCH_BODY:                           Statements for C++. (line    6)
55279* SWITCH_COND:                           Statements for C++. (line    6)
55280* SWITCH_STMT:                           Statements for C++. (line    6)
55281* symbolic label:                        Sharing.            (line   20)
55282* SYMBOL_FLAG_ANCHOR:                    Special Accessors.  (line  117)
55283* SYMBOL_FLAG_EXTERNAL:                  Special Accessors.  (line   99)
55284* SYMBOL_FLAG_FUNCTION:                  Special Accessors.  (line   92)
55285* SYMBOL_FLAG_HAS_BLOCK_INFO:            Special Accessors.  (line  113)
55286* SYMBOL_FLAG_LOCAL:                     Special Accessors.  (line   95)
55287* SYMBOL_FLAG_SMALL:                     Special Accessors.  (line  104)
55288* SYMBOL_FLAG_TLS_SHIFT:                 Special Accessors.  (line  108)
55289* symbol_ref:                            Constants.          (line  189)
55290* 'symbol_ref' and '/f':                 Flags.              (line  179)
55291* 'symbol_ref' and '/i':                 Flags.              (line  216)
55292* 'symbol_ref' and '/u':                 Flags.              (line   19)
55293* 'symbol_ref' and '/v':                 Flags.              (line  220)
55294* 'symbol_ref', RTL sharing:             Sharing.            (line   20)
55295* SYMBOL_REF_ANCHOR_P:                   Special Accessors.  (line  117)
55296* SYMBOL_REF_BLOCK:                      Special Accessors.  (line  130)
55297* SYMBOL_REF_BLOCK_OFFSET:               Special Accessors.  (line  135)
55298* SYMBOL_REF_CONSTANT:                   Special Accessors.  (line   78)
55299* SYMBOL_REF_DATA:                       Special Accessors.  (line   82)
55300* SYMBOL_REF_DECL:                       Special Accessors.  (line   67)
55301* SYMBOL_REF_EXTERNAL_P:                 Special Accessors.  (line   99)
55302* SYMBOL_REF_FLAG:                       Flags.              (line  220)
55303* 'SYMBOL_REF_FLAG', in 'TARGET_ENCODE_SECTION_INFO': Sections.
55304                                                             (line  289)
55305* SYMBOL_REF_FLAGS:                      Special Accessors.  (line   86)
55306* SYMBOL_REF_FUNCTION_P:                 Special Accessors.  (line   92)
55307* SYMBOL_REF_HAS_BLOCK_INFO_P:           Special Accessors.  (line  113)
55308* SYMBOL_REF_LOCAL_P:                    Special Accessors.  (line   95)
55309* SYMBOL_REF_SMALL_P:                    Special Accessors.  (line  104)
55310* SYMBOL_REF_TLS_MODEL:                  Special Accessors.  (line  108)
55311* SYMBOL_REF_USED:                       Flags.              (line  211)
55312* SYMBOL_REF_WEAK:                       Flags.              (line  216)
55313* 'sync_addMODE' instruction pattern:    Standard Names.     (line 2232)
55314* 'sync_andMODE' instruction pattern:    Standard Names.     (line 2232)
55315* 'sync_compare_and_swapMODE' instruction pattern: Standard Names.
55316                                                             (line 2192)
55317* 'sync_iorMODE' instruction pattern:    Standard Names.     (line 2232)
55318* 'sync_lock_releaseMODE' instruction pattern: Standard Names.
55319                                                             (line 2297)
55320* 'sync_lock_test_and_setMODE' instruction pattern: Standard Names.
55321                                                             (line 2271)
55322* 'sync_nandMODE' instruction pattern:   Standard Names.     (line 2232)
55323* 'sync_new_addMODE' instruction pattern: Standard Names.    (line 2264)
55324* 'sync_new_andMODE' instruction pattern: Standard Names.    (line 2264)
55325* 'sync_new_iorMODE' instruction pattern: Standard Names.    (line 2264)
55326* 'sync_new_nandMODE' instruction pattern: Standard Names.   (line 2264)
55327* 'sync_new_subMODE' instruction pattern: Standard Names.    (line 2264)
55328* 'sync_new_xorMODE' instruction pattern: Standard Names.    (line 2264)
55329* 'sync_old_addMODE' instruction pattern: Standard Names.    (line 2247)
55330* 'sync_old_andMODE' instruction pattern: Standard Names.    (line 2247)
55331* 'sync_old_iorMODE' instruction pattern: Standard Names.    (line 2247)
55332* 'sync_old_nandMODE' instruction pattern: Standard Names.   (line 2247)
55333* 'sync_old_subMODE' instruction pattern: Standard Names.    (line 2247)
55334* 'sync_old_xorMODE' instruction pattern: Standard Names.    (line 2247)
55335* 'sync_subMODE' instruction pattern:    Standard Names.     (line 2232)
55336* 'sync_xorMODE' instruction pattern:    Standard Names.     (line 2232)
55337* SYSROOT_HEADERS_SUFFIX_SPEC:           Driver.             (line  176)
55338* SYSROOT_SUFFIX_SPEC:                   Driver.             (line  171)
55339* SYSTEM_IMPLICIT_EXTERN_C:              Misc.               (line  415)
55340* 't-TARGET':                            Target Fragment.    (line    6)
55341* table jump:                            Basic Blocks.       (line   67)
55342* 'tablejump' instruction pattern:       Standard Names.     (line 1850)
55343* tag:                                   GTY Options.        (line   90)
55344* tagging insns:                         Tagging Insns.      (line    6)
55345* tail calls:                            Tail Calls.         (line    6)
55346* TAmode:                                Machine Modes.      (line  158)
55347* 'tanM2' instruction pattern:           Standard Names.     (line  954)
55348* target attributes:                     Target Attributes.  (line    6)
55349* target description macros:             Target Macros.      (line    6)
55350* target functions:                      Target Structure.   (line    6)
55351* target hooks:                          Target Structure.   (line    6)
55352* target makefile fragment:              Target Fragment.    (line    6)
55353* target specifications:                 Run-time Target.    (line    6)
55354* targetm:                               Target Structure.   (line    6)
55355* targets, makefile:                     Makefile.           (line    6)
55356* TARGET_ABSOLUTE_BIGGEST_ALIGNMENT:     Storage Layout.     (line  185)
55357* TARGET_ADDITIONAL_ALLOCNO_CLASS_P:     Register Classes.   (line  639)
55358* TARGET_ADDRESS_COST:                   Costs.              (line  344)
55359* TARGET_ADDR_SPACE_ADDRESS_MODE:        Named Address Spaces.
55360                                                             (line   42)
55361* TARGET_ADDR_SPACE_CONVERT:             Named Address Spaces.
55362                                                             (line   89)
55363* TARGET_ADDR_SPACE_DEBUG:               Named Address Spaces.
55364                                                             (line   99)
55365* TARGET_ADDR_SPACE_DIAGNOSE_USAGE:      Named Address Spaces.
55366                                                             (line  103)
55367* TARGET_ADDR_SPACE_LEGITIMATE_ADDRESS_P: Named Address Spaces.
55368                                                             (line   59)
55369* TARGET_ADDR_SPACE_LEGITIMIZE_ADDRESS:  Named Address Spaces.
55370                                                             (line   67)
55371* TARGET_ADDR_SPACE_POINTER_MODE:        Named Address Spaces.
55372                                                             (line   36)
55373* TARGET_ADDR_SPACE_SUBSET_P:            Named Address Spaces.
55374                                                             (line   74)
55375* TARGET_ADDR_SPACE_VALID_POINTER_MODE:  Named Address Spaces.
55376                                                             (line   48)
55377* TARGET_ADDR_SPACE_ZERO_ADDRESS_VALID:  Named Address Spaces.
55378                                                             (line   83)
55379* TARGET_ALIGN_ANON_BITFIELD:            Storage Layout.     (line  432)
55380* TARGET_ALLOCATE_INITIAL_VALUE:         Misc.               (line  807)
55381* TARGET_ALLOCATE_STACK_SLOTS_FOR_ARGS:  Misc.               (line 1064)
55382* TARGET_ALWAYS_STRIP_DOTDOT:            Driver.             (line  250)
55383* TARGET_ARG_PARTIAL_BYTES:              Register Arguments. (line   92)
55384* TARGET_ARM_EABI_UNWINDER:              Exception Region Output.
55385                                                             (line  133)
55386* TARGET_ARRAY_MODE:                     Register Arguments. (line  373)
55387* TARGET_ARRAY_MODE_SUPPORTED_P:         Register Arguments. (line  388)
55388* TARGET_ASAN_SHADOW_OFFSET:             Misc.               (line 1092)
55389* TARGET_ASM_ALIGNED_DI_OP:              Data Output.        (line   11)
55390* TARGET_ASM_ALIGNED_HI_OP:              Data Output.        (line    7)
55391* TARGET_ASM_ALIGNED_PDI_OP:             Data Output.        (line   10)
55392* TARGET_ASM_ALIGNED_PSI_OP:             Data Output.        (line    8)
55393* TARGET_ASM_ALIGNED_PTI_OP:             Data Output.        (line   12)
55394* TARGET_ASM_ALIGNED_SI_OP:              Data Output.        (line    9)
55395* TARGET_ASM_ALIGNED_TI_OP:              Data Output.        (line   13)
55396* TARGET_ASM_ASSEMBLE_UNDEFINED_DECL:    Label Output.       (line  231)
55397* TARGET_ASM_ASSEMBLE_VISIBILITY:        Label Output.       (line  301)
55398* TARGET_ASM_BYTE_OP:                    Data Output.        (line    6)
55399* TARGET_ASM_CAN_OUTPUT_MI_THUNK:        Function Entry.     (line  209)
55400* TARGET_ASM_CLOSE_PAREN:                Data Output.        (line  139)
55401* TARGET_ASM_CODE_END:                   File Framework.     (line   57)
55402* TARGET_ASM_CONSTRUCTOR:                Macros for Initialization.
55403                                                             (line   68)
55404* TARGET_ASM_DECLARE_CONSTANT_NAME:      Label Output.       (line  177)
55405* TARGET_ASM_DECL_END:                   Data Output.        (line   44)
55406* TARGET_ASM_DESTRUCTOR:                 Macros for Initialization.
55407                                                             (line   82)
55408* TARGET_ASM_ELF_FLAGS_NUMERIC:          File Framework.     (line  120)
55409* TARGET_ASM_EMIT_EXCEPT_PERSONALITY:    Dispatch Tables.    (line   89)
55410* TARGET_ASM_EMIT_EXCEPT_TABLE_LABEL:    Dispatch Tables.    (line   82)
55411* TARGET_ASM_EMIT_UNWIND_LABEL:          Dispatch Tables.    (line   70)
55412* TARGET_ASM_EXTERNAL_LIBCALL:           Label Output.       (line  337)
55413* TARGET_ASM_FILE_END:                   File Framework.     (line   35)
55414* TARGET_ASM_FILE_START:                 File Framework.     (line    8)
55415* TARGET_ASM_FILE_START_APP_OFF:         File Framework.     (line   16)
55416* TARGET_ASM_FILE_START_FILE_DIRECTIVE:  File Framework.     (line   29)
55417* TARGET_ASM_FINAL_POSTSCAN_INSN:        Instruction Output. (line   82)
55418* TARGET_ASM_FUNCTION_BEGIN_EPILOGUE:    Function Entry.     (line   67)
55419* TARGET_ASM_FUNCTION_END_PROLOGUE:      Function Entry.     (line   61)
55420* TARGET_ASM_FUNCTION_EPILOGUE:          Function Entry.     (line   73)
55421* TARGET_ASM_FUNCTION_PROLOGUE:          Function Entry.     (line   18)
55422* TARGET_ASM_FUNCTION_RODATA_SECTION:    Sections.           (line  225)
55423* TARGET_ASM_FUNCTION_SECTION:           File Framework.     (line  132)
55424* TARGET_ASM_FUNCTION_SWITCHED_TEXT_SECTIONS: File Framework.
55425                                                             (line  142)
55426* TARGET_ASM_GENERATE_PIC_ADDR_DIFF_VEC: Sections.           (line  184)
55427* TARGET_ASM_GLOBALIZE_DECL_NAME:        Label Output.       (line  222)
55428* TARGET_ASM_GLOBALIZE_LABEL:            Label Output.       (line  213)
55429* TARGET_ASM_INIT_SECTIONS:              Sections.           (line  164)
55430* TARGET_ASM_INTEGER:                    Data Output.        (line   31)
55431* TARGET_ASM_INTERNAL_LABEL:             Label Output.       (line  380)
55432* TARGET_ASM_LTO_END:                    File Framework.     (line   52)
55433* TARGET_ASM_LTO_START:                  File Framework.     (line   47)
55434* TARGET_ASM_MARK_DECL_PRESERVED:        Label Output.       (line  343)
55435* TARGET_ASM_MERGEABLE_RODATA_PREFIX:    Sections.           (line  233)
55436* TARGET_ASM_NAMED_SECTION:              File Framework.     (line  112)
55437* TARGET_ASM_OPEN_PAREN:                 Data Output.        (line  138)
55438* TARGET_ASM_OUTPUT_ADDR_CONST_EXTRA:    Data Output.        (line   48)
55439* TARGET_ASM_OUTPUT_ANCHOR:              Anchored Addresses. (line   42)
55440* TARGET_ASM_OUTPUT_DWARF_DTPREL:        DWARF.              (line  121)
55441* TARGET_ASM_OUTPUT_IDENT:               File Framework.     (line   99)
55442* TARGET_ASM_OUTPUT_MI_THUNK:            Function Entry.     (line  167)
55443* TARGET_ASM_OUTPUT_SOURCE_FILENAME:     File Framework.     (line   91)
55444* TARGET_ASM_POST_CFI_STARTPROC:         Dispatch Tables.    (line   61)
55445* TARGET_ASM_PRINT_PATCHABLE_FUNCTION_ENTRY: Function Entry. (line    9)
55446* TARGET_ASM_RECORD_GCC_SWITCHES:        File Framework.     (line  173)
55447* TARGET_ASM_RECORD_GCC_SWITCHES_SECTION: File Framework.    (line  218)
55448* TARGET_ASM_RELOC_RW_MASK:              Sections.           (line  173)
55449* TARGET_ASM_SELECT_RTX_SECTION:         Sections.           (line  242)
55450* TARGET_ASM_SELECT_SECTION:             Sections.           (line  191)
55451* TARGET_ASM_SHOULD_RESTORE_CFA_STATE:   Dispatch Tables.    (line  107)
55452* TARGET_ASM_TM_CLONE_TABLE_SECTION:     Sections.           (line  238)
55453* TARGET_ASM_TRAMPOLINE_TEMPLATE:        Trampolines.        (line   81)
55454* TARGET_ASM_TTYPE:                      Exception Region Output.
55455                                                             (line  127)
55456* TARGET_ASM_UNALIGNED_DI_OP:            Data Output.        (line   18)
55457* TARGET_ASM_UNALIGNED_HI_OP:            Data Output.        (line   14)
55458* TARGET_ASM_UNALIGNED_PDI_OP:           Data Output.        (line   17)
55459* TARGET_ASM_UNALIGNED_PSI_OP:           Data Output.        (line   15)
55460* TARGET_ASM_UNALIGNED_PTI_OP:           Data Output.        (line   19)
55461* TARGET_ASM_UNALIGNED_SI_OP:            Data Output.        (line   16)
55462* TARGET_ASM_UNALIGNED_TI_OP:            Data Output.        (line   20)
55463* TARGET_ASM_UNIQUE_SECTION:             Sections.           (line  213)
55464* TARGET_ASM_UNWIND_EMIT:                Dispatch Tables.    (line   96)
55465* TARGET_ASM_UNWIND_EMIT_BEFORE_INSN:    Dispatch Tables.    (line  102)
55466* TARGET_ATOMIC_ALIGN_FOR_MODE:          Misc.               (line 1111)
55467* TARGET_ATOMIC_ASSIGN_EXPAND_FENV:      Misc.               (line 1117)
55468* TARGET_ATOMIC_TEST_AND_SET_TRUEVAL:    Misc.               (line 1102)
55469* TARGET_ATTRIBUTE_TABLE:                Target Attributes.  (line   10)
55470* TARGET_ATTRIBUTE_TAKES_IDENTIFIER_P:   Target Attributes.  (line   17)
55471* TARGET_BINDS_LOCAL_P:                  Sections.           (line  320)
55472* TARGET_BUILD_BUILTIN_VA_LIST:          Register Arguments. (line  281)
55473* TARGET_BUILTIN_DECL:                   Misc.               (line  637)
55474* TARGET_BUILTIN_RECIPROCAL:             Addressing Modes.   (line  261)
55475* TARGET_BUILTIN_SETJMP_FRAME_VALUE:     Frame Layout.       (line  101)
55476* TARGET_CALLEE_COPIES:                  Register Arguments. (line  124)
55477* TARGET_CALL_ARGS:                      Varargs.            (line  123)
55478* TARGET_CALL_FUSAGE_CONTAINS_NON_CALLEE_CLOBBERS: Miscellaneous Register Hooks.
55479                                                             (line    6)
55480* TARGET_CANNOT_FORCE_CONST_MEM:         Addressing Modes.   (line  234)
55481* TARGET_CANNOT_MODIFY_JUMPS_P:          Misc.               (line  871)
55482* TARGET_CANNOT_SUBSTITUTE_MEM_EQUIV_P:  Register Classes.   (line  610)
55483* TARGET_CANONICALIZE_COMPARISON:        MODE_CC Condition Codes.
55484                                                             (line   55)
55485* TARGET_CANONICAL_VA_LIST_TYPE:         Register Arguments. (line  302)
55486* TARGET_CAN_CHANGE_MODE_CLASS:          Register Classes.   (line  543)
55487* 'TARGET_CAN_CHANGE_MODE_CLASS' and subreg semantics: Regs and Memory.
55488                                                             (line  294)
55489* TARGET_CAN_ELIMINATE:                  Elimination.        (line   58)
55490* TARGET_CAN_FOLLOW_JUMP:                Misc.               (line  793)
55491* TARGET_CAN_INLINE_P:                   Target Attributes.  (line  173)
55492* TARGET_CAN_USE_DOLOOP_P:               Misc.               (line  757)
55493* TARGET_CASE_VALUES_THRESHOLD:          Misc.               (line   46)
55494* TARGET_CC_MODES_COMPATIBLE:            MODE_CC Condition Codes.
55495                                                             (line  120)
55496* TARGET_CHECK_BUILTIN_CALL:             Misc.               (line  669)
55497* TARGET_CHECK_PCH_TARGET_FLAGS:         PCH Target.         (line   26)
55498* TARGET_CHECK_STRING_OBJECT_FORMAT_ARG: Run-time Target.    (line  119)
55499* TARGET_CLASS_LIKELY_SPILLED_P:         Register Classes.   (line  499)
55500* TARGET_CLASS_MAX_NREGS:                Register Classes.   (line  515)
55501* TARGET_COMMUTATIVE_P:                  Misc.               (line  800)
55502* TARGET_COMPARE_BY_PIECES_BRANCH_RATIO: Costs.              (line  200)
55503* TARGET_COMPARE_VERSION_PRIORITY:       Misc.               (line  701)
55504* TARGET_COMPATIBLE_VECTOR_TYPES_P:      Register Arguments. (line  350)
55505* TARGET_COMPUTE_FRAME_LAYOUT:           Elimination.        (line   74)
55506* TARGET_COMPUTE_PRESSURE_CLASSES:       Register Classes.   (line  655)
55507* TARGET_COMP_TYPE_ATTRIBUTES:           Target Attributes.  (line   25)
55508* TARGET_CONDITIONAL_REGISTER_USAGE:     Register Basics.    (line  102)
55509* TARGET_CONSTANT_ALIGNMENT:             Storage Layout.     (line  271)
55510* TARGET_CONST_ANCHOR:                   Misc.               (line 1075)
55511* TARGET_CONST_NOT_OK_FOR_DEBUG_P:       Addressing Modes.   (line  230)
55512* TARGET_CONVERT_TO_TYPE:                Misc.               (line 1022)
55513* TARGET_CPU_CPP_BUILTINS:               Run-time Target.    (line    8)
55514* TARGET_CSTORE_MODE:                    Register Classes.   (line  647)
55515* TARGET_CUSTOM_FUNCTION_DESCRIPTORS:    Trampolines.        (line   39)
55516* TARGET_CXX_ADJUST_CLASS_AT_DEFINITION: C++ ABI.            (line   86)
55517* TARGET_CXX_CDTOR_RETURNS_THIS:         C++ ABI.            (line   37)
55518* TARGET_CXX_CLASS_DATA_ALWAYS_COMDAT:   C++ ABI.            (line   61)
55519* TARGET_CXX_COOKIE_HAS_SIZE:            C++ ABI.            (line   24)
55520* TARGET_CXX_DECL_MANGLING_CONTEXT:      C++ ABI.            (line   92)
55521* TARGET_CXX_DETERMINE_CLASS_DATA_VISIBILITY: C++ ABI.       (line   52)
55522* TARGET_CXX_GET_COOKIE_SIZE:            C++ ABI.            (line   17)
55523* TARGET_CXX_GUARD_MASK_BIT:             C++ ABI.            (line   11)
55524* TARGET_CXX_GUARD_TYPE:                 C++ ABI.            (line    6)
55525* TARGET_CXX_IMPLICIT_EXTERN_C:          Misc.               (line  407)
55526* TARGET_CXX_IMPORT_EXPORT_CLASS:        C++ ABI.            (line   28)
55527* TARGET_CXX_KEY_METHOD_MAY_BE_INLINE:   C++ ABI.            (line   42)
55528* TARGET_CXX_LIBRARY_RTTI_COMDAT:        C++ ABI.            (line   68)
55529* TARGET_CXX_USE_AEABI_ATEXIT:           C++ ABI.            (line   73)
55530* TARGET_CXX_USE_ATEXIT_FOR_CXA_ATEXIT:  C++ ABI.            (line   79)
55531* TARGET_C_EXCESS_PRECISION:             Storage Layout.     (line  109)
55532* TARGET_C_PREINCLUDE:                   Misc.               (line  395)
55533* TARGET_DEBUG_UNWIND_INFO:              DWARF.              (line   32)
55534* TARGET_DECIMAL_FLOAT_SUPPORTED_P:      Storage Layout.     (line  537)
55535* TARGET_DECLSPEC:                       Target Attributes.  (line   72)
55536* TARGET_DEFAULT_PACK_STRUCT:            Misc.               (line  479)
55537* TARGET_DEFAULT_SHORT_ENUMS:            Type Layout.        (line  123)
55538* TARGET_DEFAULT_TARGET_FLAGS:           Run-time Target.    (line   55)
55539* TARGET_DEFERRED_OUTPUT_DEFS:           Label Output.       (line  465)
55540* TARGET_DELAY_SCHED2:                   DWARF.              (line   77)
55541* TARGET_DELAY_VARTRACK:                 DWARF.              (line   81)
55542* TARGET_DELEGITIMIZE_ADDRESS:           Addressing Modes.   (line  221)
55543* TARGET_DIFFERENT_ADDR_DISPLACEMENT_P:  Register Classes.   (line  603)
55544* TARGET_DLLIMPORT_DECL_ATTRIBUTES:      Target Attributes.  (line   55)
55545* TARGET_DOLOOP_COST_FOR_ADDRESS:        Misc.               (line  746)
55546* TARGET_DOLOOP_COST_FOR_GENERIC:        Misc.               (line  735)
55547* TARGET_DWARF_CALLING_CONVENTION:       DWARF.              (line   12)
55548* TARGET_DWARF_FRAME_REG_MODE:           Exception Region Output.
55549                                                             (line  113)
55550* TARGET_DWARF_HANDLE_FRAME_UNSPEC:      Frame Layout.       (line  165)
55551* TARGET_DWARF_POLY_INDETERMINATE_VALUE: Frame Layout.       (line  177)
55552* TARGET_DWARF_REGISTER_SPAN:            Exception Region Output.
55553                                                             (line  104)
55554* TARGET_D_CPU_VERSIONS:                 D Language and ABI. (line    6)
55555* TARGET_D_CRITSEC_SIZE:                 D Language and ABI. (line   17)
55556* TARGET_D_OS_VERSIONS:                  D Language and ABI. (line   13)
55557* TARGET_EDOM:                           Library Calls.      (line   59)
55558* TARGET_EMPTY_RECORD_P:                 Aggregate Return.   (line   86)
55559* TARGET_EMUTLS_DEBUG_FORM_TLS_ADDRESS:  Emulated TLS.       (line   67)
55560* TARGET_EMUTLS_GET_ADDRESS:             Emulated TLS.       (line   18)
55561* TARGET_EMUTLS_REGISTER_COMMON:         Emulated TLS.       (line   23)
55562* TARGET_EMUTLS_TMPL_PREFIX:             Emulated TLS.       (line   44)
55563* TARGET_EMUTLS_TMPL_SECTION:            Emulated TLS.       (line   35)
55564* TARGET_EMUTLS_VAR_ALIGN_FIXED:         Emulated TLS.       (line   62)
55565* TARGET_EMUTLS_VAR_FIELDS:              Emulated TLS.       (line   48)
55566* TARGET_EMUTLS_VAR_INIT:                Emulated TLS.       (line   55)
55567* TARGET_EMUTLS_VAR_PREFIX:              Emulated TLS.       (line   40)
55568* TARGET_EMUTLS_VAR_SECTION:             Emulated TLS.       (line   30)
55569* TARGET_ENCODE_SECTION_INFO:            Sections.           (line  263)
55570* 'TARGET_ENCODE_SECTION_INFO' and address validation: Addressing Modes.
55571                                                             (line   82)
55572* 'TARGET_ENCODE_SECTION_INFO' usage:    Instruction Output. (line  127)
55573* TARGET_END_CALL_ARGS:                  Varargs.            (line  137)
55574* TARGET_ENUM_VA_LIST_P:                 Register Arguments. (line  285)
55575* TARGET_ESTIMATED_POLY_VALUE:           Costs.              (line  425)
55576* TARGET_EXCEPT_UNWIND_INFO:             Exception Region Output.
55577                                                             (line   46)
55578* TARGET_EXECUTABLE_SUFFIX:              Misc.               (line  858)
55579* TARGET_EXPAND_BUILTIN:                 Misc.               (line  647)
55580* TARGET_EXPAND_BUILTIN_SAVEREGS:        Varargs.            (line   64)
55581* TARGET_EXPAND_DIVMOD_LIBFUNC:          Scheduling.         (line  461)
55582* TARGET_EXPAND_TO_RTL_HOOK:             Storage Layout.     (line  543)
55583* TARGET_EXPR:                           Unary and Binary Expressions.
55584                                                             (line    6)
55585* TARGET_EXTRA_INCLUDES:                 Misc.               (line  937)
55586* TARGET_EXTRA_LIVE_ON_ENTRY:            Tail Calls.         (line   20)
55587* TARGET_EXTRA_PRE_INCLUDES:             Misc.               (line  944)
55588* TARGET_FIXED_CONDITION_CODE_REGS:      MODE_CC Condition Codes.
55589                                                             (line  105)
55590* TARGET_FIXED_POINT_SUPPORTED_P:        Storage Layout.     (line  540)
55591* target_flags:                          Run-time Target.    (line   51)
55592* TARGET_FLAGS_REGNUM:                   MODE_CC Condition Codes.
55593                                                             (line  133)
55594* TARGET_FLOATN_BUILTIN_P:               Register Arguments. (line  438)
55595* TARGET_FLOATN_MODE:                    Register Arguments. (line  420)
55596* TARGET_FLOAT_EXCEPTIONS_ROUNDING_SUPPORTED_P: Run-time Target.
55597                                                             (line  179)
55598* TARGET_FNTYPE_ABI:                     Register Basics.    (line   58)
55599* TARGET_FN_ABI_VA_LIST:                 Register Arguments. (line  297)
55600* TARGET_FOLD_BUILTIN:                   Misc.               (line  684)
55601* TARGET_FORMAT_TYPES:                   Misc.               (line  965)
55602* TARGET_FRAME_POINTER_REQUIRED:         Elimination.        (line    8)
55603* TARGET_FUNCTION_ARG:                   Register Arguments. (line   10)
55604* TARGET_FUNCTION_ARG_ADVANCE:           Register Arguments. (line  195)
55605* TARGET_FUNCTION_ARG_BOUNDARY:          Register Arguments. (line  248)
55606* TARGET_FUNCTION_ARG_OFFSET:            Register Arguments. (line  206)
55607* TARGET_FUNCTION_ARG_PADDING:           Register Arguments. (line  214)
55608* TARGET_FUNCTION_ARG_ROUND_BOUNDARY:    Register Arguments. (line  254)
55609* TARGET_FUNCTION_ATTRIBUTE_INLINABLE_P: Target Attributes.  (line  101)
55610* TARGET_FUNCTION_INCOMING_ARG:          Register Arguments. (line   64)
55611* TARGET_FUNCTION_OK_FOR_SIBCALL:        Tail Calls.         (line    6)
55612* TARGET_FUNCTION_VALUE:                 Scalar Return.      (line    9)
55613* TARGET_FUNCTION_VALUE_REGNO_P:         Scalar Return.      (line   96)
55614* TARGET_GENERATE_VERSION_DISPATCHER_BODY: Misc.             (line  717)
55615* TARGET_GEN_CCMP_FIRST:                 Misc.               (line  890)
55616* TARGET_GEN_CCMP_NEXT:                  Misc.               (line  901)
55617* TARGET_GET_DRAP_RTX:                   Misc.               (line 1058)
55618* TARGET_GET_FUNCTION_VERSIONS_DISPATCHER: Misc.             (line  710)
55619* TARGET_GET_MULTILIB_ABI_NAME:          Register Basics.    (line   99)
55620* TARGET_GET_PCH_VALIDITY:               PCH Target.         (line    6)
55621* TARGET_GET_RAW_ARG_MODE:               Aggregate Return.   (line   81)
55622* TARGET_GET_RAW_RESULT_MODE:            Aggregate Return.   (line   76)
55623* TARGET_GET_VALID_OPTION_VALUES:        Stack Smashing Protection.
55624                                                             (line   39)
55625* TARGET_GIMPLE_FOLD_BUILTIN:            Misc.               (line  694)
55626* TARGET_GIMPLIFY_VA_ARG_EXPR:           Register Arguments. (line  307)
55627* TARGET_GOACC_DIM_LIMIT:                Addressing Modes.   (line  540)
55628* TARGET_GOACC_FORK_JOIN:                Addressing Modes.   (line  544)
55629* TARGET_GOACC_REDUCTION:                Addressing Modes.   (line  555)
55630* TARGET_GOACC_VALIDATE_DIMS:            Addressing Modes.   (line  527)
55631* TARGET_HANDLE_C_OPTION:                Run-time Target.    (line   73)
55632* TARGET_HANDLE_GENERIC_ATTRIBUTE:       Target Attributes.  (line   93)
55633* TARGET_HANDLE_OPTION:                  Run-time Target.    (line   59)
55634* TARGET_HARD_REGNO_CALL_PART_CLOBBERED: Register Basics.    (line   76)
55635* TARGET_HARD_REGNO_MODE_OK:             Values in Registers.
55636                                                             (line   54)
55637* TARGET_HARD_REGNO_NREGS:               Values in Registers.
55638                                                             (line   10)
55639* TARGET_HARD_REGNO_SCRATCH_OK:          Values in Registers.
55640                                                             (line  139)
55641* TARGET_HAS_IFUNC_P:                    Misc.               (line 1106)
55642* TARGET_HAS_NO_HW_DIVIDE:               Library Calls.      (line   52)
55643* TARGET_HAVE_CONDITIONAL_EXECUTION:     Misc.               (line  884)
55644* TARGET_HAVE_COUNT_REG_DECR_P:          Misc.               (line  731)
55645* TARGET_HAVE_CTORS_DTORS:               Macros for Initialization.
55646                                                             (line   63)
55647* TARGET_HAVE_NAMED_SECTIONS:            File Framework.     (line  150)
55648* TARGET_HAVE_SPECULATION_SAFE_VALUE:    Misc.               (line 1189)
55649* TARGET_HAVE_SRODATA_SECTION:           Sections.           (line  309)
55650* TARGET_HAVE_SWITCHABLE_BSS_SECTIONS:   File Framework.     (line  155)
55651* TARGET_HAVE_TLS:                       Sections.           (line  329)
55652* TARGET_INIT_BUILTINS:                  Misc.               (line  621)
55653* TARGET_INIT_DWARF_REG_SIZES_EXTRA:     Exception Region Output.
55654                                                             (line  119)
55655* TARGET_INIT_LIBFUNCS:                  Library Calls.      (line   15)
55656* TARGET_INIT_PIC_REG:                   Register Arguments. (line   88)
55657* TARGET_INSERT_ATTRIBUTES:              Target Attributes.  (line   80)
55658* TARGET_INSN_CALLEE_ABI:                Register Basics.    (line   65)
55659* TARGET_INSN_COST:                      Costs.              (line  380)
55660* TARGET_INSTANTIATE_DECLS:              Storage Layout.     (line  551)
55661* TARGET_INVALID_ARG_FOR_UNPROTOTYPED_FN: Misc.              (line  989)
55662* TARGET_INVALID_BINARY_OP:              Misc.               (line 1008)
55663* TARGET_INVALID_CONVERSION:             Misc.               (line  995)
55664* TARGET_INVALID_UNARY_OP:               Misc.               (line 1001)
55665* TARGET_INVALID_WITHIN_DOLOOP:          Misc.               (line  774)
55666* TARGET_IN_SMALL_DATA_P:                Sections.           (line  305)
55667* TARGET_IRA_CHANGE_PSEUDO_ALLOCNO_CLASS: Register Classes.  (line  570)
55668* TARGET_KEEP_LEAF_WHEN_PROFILED:        Profiling.          (line   39)
55669* TARGET_LEGITIMATE_ADDRESS_P:           Addressing Modes.   (line   48)
55670* TARGET_LEGITIMATE_COMBINED_INSN:       Misc.               (line  788)
55671* TARGET_LEGITIMATE_CONSTANT_P:          Addressing Modes.   (line  213)
55672* TARGET_LEGITIMIZE_ADDRESS:             Addressing Modes.   (line  129)
55673* TARGET_LEGITIMIZE_ADDRESS_DISPLACEMENT: Register Classes.  (line  618)
55674* TARGET_LIBCALL_VALUE:                  Scalar Return.      (line   65)
55675* TARGET_LIBC_HAS_FAST_FUNCTION:         Library Calls.      (line   82)
55676* TARGET_LIBC_HAS_FUNCTION:              Library Calls.      (line   77)
55677* TARGET_LIBFUNC_GNU_PREFIX:             Library Calls.      (line   24)
55678* TARGET_LIBGCC_CMP_RETURN_MODE:         Storage Layout.     (line  493)
55679* TARGET_LIBGCC_FLOATING_MODE_SUPPORTED_P: Register Arguments.
55680                                                             (line  412)
55681* TARGET_LIBGCC_SDATA_SECTION:           Sections.           (line  136)
55682* TARGET_LIBGCC_SHIFT_COUNT_MODE:        Storage Layout.     (line  499)
55683* TARGET_LIB_INT_CMP_BIASED:             Library Calls.      (line   42)
55684* TARGET_LOAD_BOUNDS_FOR_ARG:            Varargs.            (line  153)
55685* TARGET_LOAD_RETURNED_BOUNDS:           Varargs.            (line  172)
55686* TARGET_LOOP_UNROLL_ADJUST:             Misc.               (line  918)
55687* TARGET_LRA_P:                          Register Classes.   (line  577)
55688* TARGET_MACHINE_DEPENDENT_REORG:        Misc.               (line  606)
55689* TARGET_MANGLE_ASSEMBLER_NAME:          Label Output.       (line  356)
55690* TARGET_MANGLE_DECL_ASSEMBLER_NAME:     Sections.           (line  253)
55691* TARGET_MANGLE_TYPE:                    Storage Layout.     (line  555)
55692* TARGET_MAX_ANCHOR_OFFSET:              Anchored Addresses. (line   38)
55693* TARGET_MAX_NOCE_IFCVT_SEQ_COST:        Costs.              (line  390)
55694* TARGET_MD_ASM_ADJUST:                  Misc.               (line  524)
55695* TARGET_MEMBER_TYPE_FORCES_BLK:         Storage Layout.     (line  445)
55696* TARGET_MEMMODEL_CHECK:                 Misc.               (line 1097)
55697* TARGET_MEMORY_MOVE_COST:               Costs.              (line   79)
55698* TARGET_MEM_CONSTRAINT:                 Addressing Modes.   (line  107)
55699* TARGET_MEM_REF:                        Storage References. (line    6)
55700* TARGET_MERGE_DECL_ATTRIBUTES:          Target Attributes.  (line   45)
55701* TARGET_MERGE_TYPE_ATTRIBUTES:          Target Attributes.  (line   37)
55702* TARGET_MIN_ANCHOR_OFFSET:              Anchored Addresses. (line   32)
55703* TARGET_MIN_ARITHMETIC_PRECISION:       Misc.               (line   63)
55704* TARGET_MIN_DIVISIONS_FOR_RECIP_MUL:    Misc.               (line  112)
55705* TARGET_MODES_TIEABLE_P:                Values in Registers.
55706                                                             (line  123)
55707* TARGET_MODE_AFTER:                     Mode Switching.     (line   57)
55708* TARGET_MODE_DEPENDENT_ADDRESS_P:       Addressing Modes.   (line  196)
55709* TARGET_MODE_EMIT:                      Mode Switching.     (line   42)
55710* TARGET_MODE_ENTRY:                     Mode Switching.     (line   64)
55711* TARGET_MODE_EXIT:                      Mode Switching.     (line   71)
55712* TARGET_MODE_NEEDED:                    Mode Switching.     (line   50)
55713* TARGET_MODE_PRIORITY:                  Mode Switching.     (line   78)
55714* TARGET_MODE_REP_EXTENDED:              Misc.               (line  197)
55715* TARGET_MS_BITFIELD_LAYOUT_P:           Storage Layout.     (line  509)
55716* TARGET_MUST_PASS_IN_STACK:             Register Arguments. (line   57)
55717* 'TARGET_MUST_PASS_IN_STACK', and 'TARGET_FUNCTION_ARG': Register Arguments.
55718                                                             (line   49)
55719* TARGET_NARROW_VOLATILE_BITFIELD:       Storage Layout.     (line  438)
55720* TARGET_NOCE_CONVERSION_PROFITABLE_P:   Costs.              (line  409)
55721* TARGET_NO_REGISTER_ALLOCATION:         DWARF.              (line   85)
55722* TARGET_NO_SPECULATION_IN_DELAY_SLOTS_P: Costs.             (line  415)
55723* TARGET_N_FORMAT_TYPES:                 Misc.               (line  970)
55724* TARGET_OBJC_CONSTRUCT_STRING_OBJECT:   Run-time Target.    (line   88)
55725* TARGET_OBJC_DECLARE_CLASS_DEFINITION:  Run-time Target.    (line  109)
55726* TARGET_OBJC_DECLARE_UNRESOLVED_CLASS_REFERENCE: Run-time Target.
55727                                                             (line  104)
55728* TARGET_OBJECT_SUFFIX:                  Misc.               (line  853)
55729* TARGET_OBJFMT_CPP_BUILTINS:            Run-time Target.    (line   45)
55730* TARGET_OFFLOAD_OPTIONS:                Misc.               (line 1140)
55731* TARGET_OMIT_STRUCT_RETURN_REG:         Scalar Return.      (line  117)
55732* TARGET_OMP_DEVICE_KIND_ARCH_ISA:       Addressing Modes.   (line  519)
55733* TARGET_OPTAB_SUPPORTED_P:              Costs.              (line  299)
55734* TARGET_OPTF:                           Misc.               (line  952)
55735* TARGET_OPTION_FUNCTION_VERSIONS:       Target Attributes.  (line  165)
55736* TARGET_OPTION_INIT_STRUCT:             Run-time Target.    (line  156)
55737* TARGET_OPTION_OPTIMIZATION_TABLE:      Run-time Target.    (line  142)
55738* TARGET_OPTION_OVERRIDE:                Target Attributes.  (line  152)
55739* TARGET_OPTION_POST_STREAM_IN:          Target Attributes.  (line  133)
55740* TARGET_OPTION_PRAGMA_PARSE:            Target Attributes.  (line  145)
55741* TARGET_OPTION_PRINT:                   Target Attributes.  (line  139)
55742* TARGET_OPTION_RESTORE:                 Target Attributes.  (line  127)
55743* TARGET_OPTION_SAVE:                    Target Attributes.  (line  120)
55744* TARGET_OPTION_VALID_ATTRIBUTE_P:       Target Attributes.  (line  108)
55745* TARGET_OS_CPP_BUILTINS:                Run-time Target.    (line   41)
55746* TARGET_OVERRIDES_FORMAT_ATTRIBUTES:    Misc.               (line  974)
55747* TARGET_OVERRIDES_FORMAT_ATTRIBUTES_COUNT: Misc.            (line  980)
55748* TARGET_OVERRIDES_FORMAT_INIT:          Misc.               (line  984)
55749* TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE:  Run-time Target.    (line  126)
55750* TARGET_PASS_BY_REFERENCE:              Register Arguments. (line  112)
55751* TARGET_PCH_VALID_P:                    PCH Target.         (line   11)
55752* TARGET_POSIX_IO:                       Misc.               (line  550)
55753* TARGET_PREDICT_DOLOOP_P:               Misc.               (line  724)
55754* TARGET_PREFERRED_ELSE_VALUE:           Addressing Modes.   (line  563)
55755* TARGET_PREFERRED_OUTPUT_RELOAD_CLASS:  Register Classes.   (line  284)
55756* TARGET_PREFERRED_RELOAD_CLASS:         Register Classes.   (line  213)
55757* TARGET_PREFERRED_RENAME_CLASS:         Register Classes.   (line  201)
55758* TARGET_PREPARE_PCH_SAVE:               PCH Target.         (line   34)
55759* TARGET_PRETEND_OUTGOING_VARARGS_NAMED: Varargs.            (line  144)
55760* TARGET_PROFILE_BEFORE_PROLOGUE:        Sections.           (line  313)
55761* TARGET_PROMOTED_TYPE:                  Misc.               (line 1014)
55762* TARGET_PROMOTE_FUNCTION_MODE:          Storage Layout.     (line  126)
55763* TARGET_PROMOTE_PROTOTYPES:             Stack Arguments.    (line   10)
55764* TARGET_PTRMEMFUNC_VBIT_LOCATION:       Type Layout.        (line  250)
55765* TARGET_RECORD_OFFLOAD_SYMBOL:          Misc.               (line 1135)
55766* TARGET_REF_MAY_ALIAS_ERRNO:            Register Arguments. (line  318)
55767* TARGET_REGISTER_MOVE_COST:             Costs.              (line   31)
55768* TARGET_REGISTER_PRIORITY:              Register Classes.   (line  582)
55769* TARGET_REGISTER_USAGE_LEVELING_P:      Register Classes.   (line  593)
55770* TARGET_RELAYOUT_FUNCTION:              Target Attributes.  (line  180)
55771* TARGET_RESET_LOCATION_VIEW:            DWARF.              (line   57)
55772* TARGET_RESOLVE_OVERLOADED_BUILTIN:     Misc.               (line  658)
55773* TARGET_RETURN_IN_MEMORY:               Aggregate Return.   (line   15)
55774* TARGET_RETURN_IN_MSB:                  Scalar Return.      (line  124)
55775* TARGET_RETURN_POPS_ARGS:               Stack Arguments.    (line   98)
55776* TARGET_RTX_COSTS:                      Costs.              (line  313)
55777* TARGET_RUN_TARGET_SELFTESTS:           Misc.               (line 1226)
55778* TARGET_SCALAR_MODE_SUPPORTED_P:        Register Arguments. (line  334)
55779* TARGET_SCHED_ADJUST_COST:              Scheduling.         (line   35)
55780* TARGET_SCHED_ADJUST_PRIORITY:          Scheduling.         (line   50)
55781* TARGET_SCHED_ALLOC_SCHED_CONTEXT:      Scheduling.         (line  294)
55782* TARGET_SCHED_CAN_SPECULATE_INSN:       Scheduling.         (line  354)
55783* TARGET_SCHED_CLEAR_SCHED_CONTEXT:      Scheduling.         (line  309)
55784* TARGET_SCHED_DEPENDENCIES_EVALUATION_HOOK: Scheduling.     (line  101)
55785* TARGET_SCHED_DFA_NEW_CYCLE:            Scheduling.         (line  255)
55786* TARGET_SCHED_DFA_POST_ADVANCE_CYCLE:   Scheduling.         (line  172)
55787* TARGET_SCHED_DFA_POST_CYCLE_INSN:      Scheduling.         (line  156)
55788* TARGET_SCHED_DFA_PRE_ADVANCE_CYCLE:    Scheduling.         (line  165)
55789* TARGET_SCHED_DFA_PRE_CYCLE_INSN:       Scheduling.         (line  144)
55790* TARGET_SCHED_DISPATCH:                 Scheduling.         (line  370)
55791* TARGET_SCHED_DISPATCH_DO:              Scheduling.         (line  375)
55792* TARGET_SCHED_EXPOSED_PIPELINE:         Scheduling.         (line  379)
55793* TARGET_SCHED_FINISH:                   Scheduling.         (line  122)
55794* TARGET_SCHED_FINISH_GLOBAL:            Scheduling.         (line  137)
55795* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_BACKTRACK: Scheduling.  (line  235)
55796* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_BEGIN: Scheduling.      (line  223)
55797* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD: Scheduling.
55798                                                             (line  179)
55799* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD: Scheduling.
55800                                                             (line  207)
55801* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_END: Scheduling.        (line  240)
55802* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_FINI: Scheduling.       (line  250)
55803* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_INIT: Scheduling.       (line  245)
55804* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_ISSUE: Scheduling.      (line  229)
55805* TARGET_SCHED_FREE_SCHED_CONTEXT:       Scheduling.         (line  313)
55806* TARGET_SCHED_FUSION_PRIORITY:          Scheduling.         (line  389)
55807* TARGET_SCHED_GEN_SPEC_CHECK:           Scheduling.         (line  335)
55808* TARGET_SCHED_H_I_D_EXTENDED:           Scheduling.         (line  289)
55809* TARGET_SCHED_INIT:                     Scheduling.         (line  111)
55810* TARGET_SCHED_INIT_DFA_POST_CYCLE_INSN: Scheduling.         (line  161)
55811* TARGET_SCHED_INIT_DFA_PRE_CYCLE_INSN:  Scheduling.         (line  153)
55812* TARGET_SCHED_INIT_GLOBAL:              Scheduling.         (line  129)
55813* TARGET_SCHED_INIT_SCHED_CONTEXT:       Scheduling.         (line  298)
55814* TARGET_SCHED_ISSUE_RATE:               Scheduling.         (line   11)
55815* TARGET_SCHED_IS_COSTLY_DEPENDENCE:     Scheduling.         (line  267)
55816* TARGET_SCHED_MACRO_FUSION_P:           Scheduling.         (line   87)
55817* TARGET_SCHED_MACRO_FUSION_PAIR_P:      Scheduling.         (line   91)
55818* TARGET_SCHED_NEEDS_BLOCK_P:            Scheduling.         (line  328)
55819* TARGET_SCHED_REASSOCIATION_WIDTH:      Scheduling.         (line  384)
55820* TARGET_SCHED_REORDER:                  Scheduling.         (line   58)
55821* TARGET_SCHED_REORDER2:                 Scheduling.         (line   75)
55822* TARGET_SCHED_SET_SCHED_CONTEXT:        Scheduling.         (line  305)
55823* TARGET_SCHED_SET_SCHED_FLAGS:          Scheduling.         (line  347)
55824* TARGET_SCHED_SMS_RES_MII:              Scheduling.         (line  361)
55825* TARGET_SCHED_SPECULATE_INSN:           Scheduling.         (line  316)
55826* TARGET_SCHED_VARIABLE_ISSUE:           Scheduling.         (line   22)
55827* TARGET_SECONDARY_MEMORY_NEEDED:        Register Classes.   (line  447)
55828* TARGET_SECONDARY_MEMORY_NEEDED_MODE:   Register Classes.   (line  466)
55829* TARGET_SECONDARY_RELOAD:               Register Classes.   (line  312)
55830* TARGET_SECTION_TYPE_FLAGS:             File Framework.     (line  160)
55831* TARGET_SELECT_EARLY_REMAT_MODES:       Register Classes.   (line  488)
55832* TARGET_SETJMP_PRESERVES_NONVOLATILE_REGS_P: Misc.          (line  223)
55833* TARGET_SETUP_INCOMING_VARARGS:         Varargs.            (line   71)
55834* TARGET_SET_CURRENT_FUNCTION:           Misc.               (line  835)
55835* TARGET_SET_DEFAULT_TYPE_ATTRIBUTES:    Target Attributes.  (line   33)
55836* TARGET_SET_UP_BY_PROLOGUE:             Tail Calls.         (line   29)
55837* TARGET_SHIFT_TRUNCATION_MASK:          Misc.               (line  160)
55838* TARGET_SHRINK_WRAP_COMPONENTS_FOR_BB:  Shrink-wrapping separate components.
55839                                                             (line   36)
55840* TARGET_SHRINK_WRAP_DISQUALIFY_COMPONENTS: Shrink-wrapping separate components.
55841                                                             (line   43)
55842* TARGET_SHRINK_WRAP_EMIT_EPILOGUE_COMPONENTS: Shrink-wrapping separate components.
55843                                                             (line   54)
55844* TARGET_SHRINK_WRAP_EMIT_PROLOGUE_COMPONENTS: Shrink-wrapping separate components.
55845                                                             (line   50)
55846* TARGET_SHRINK_WRAP_GET_SEPARATE_COMPONENTS: Shrink-wrapping separate components.
55847                                                             (line   27)
55848* TARGET_SHRINK_WRAP_SET_HANDLED_COMPONENTS: Shrink-wrapping separate components.
55849                                                             (line   58)
55850* TARGET_SIMD_CLONE_ADJUST:              Addressing Modes.   (line  506)
55851* TARGET_SIMD_CLONE_COMPUTE_VECSIZE_AND_SIMDLEN: Addressing Modes.
55852                                                             (line  498)
55853* TARGET_SIMD_CLONE_USABLE:              Addressing Modes.   (line  510)
55854* TARGET_SIMT_VF:                        Addressing Modes.   (line  516)
55855* TARGET_SLOW_UNALIGNED_ACCESS:          Costs.              (line  132)
55856* TARGET_SMALL_REGISTER_CLASSES_FOR_MODE_P: Register Arguments.
55857                                                             (line  448)
55858* TARGET_SPECULATION_SAFE_VALUE:         Misc.               (line 1208)
55859* TARGET_SPILL_CLASS:                    Register Classes.   (line  632)
55860* TARGET_SPLIT_COMPLEX_ARG:              Register Arguments. (line  269)
55861* TARGET_STACK_CLASH_PROTECTION_ALLOCA_PROBE_RANGE: Stack Checking.
55862                                                             (line   97)
55863* TARGET_STACK_PROTECT_FAIL:             Stack Smashing Protection.
55864                                                             (line   16)
55865* TARGET_STACK_PROTECT_GUARD:            Stack Smashing Protection.
55866                                                             (line    6)
55867* TARGET_STACK_PROTECT_RUNTIME_ENABLED_P: Stack Smashing Protection.
55868                                                             (line   25)
55869* TARGET_STARTING_FRAME_OFFSET:          Frame Layout.       (line   34)
55870* 'TARGET_STARTING_FRAME_OFFSET' and virtual registers: Regs and Memory.
55871                                                             (line   74)
55872* TARGET_STATIC_CHAIN:                   Frame Registers.    (line   90)
55873* TARGET_STATIC_RTX_ALIGNMENT:           Storage Layout.     (line  243)
55874* TARGET_STORE_BOUNDS_FOR_ARG:           Varargs.            (line  163)
55875* TARGET_STORE_RETURNED_BOUNDS:          Varargs.            (line  177)
55876* TARGET_STRICT_ARGUMENT_NAMING:         Varargs.            (line  107)
55877* TARGET_STRING_OBJECT_REF_TYPE_P:       Run-time Target.    (line  114)
55878* TARGET_STRIP_NAME_ENCODING:            Sections.           (line  300)
55879* TARGET_STRUCT_VALUE_RTX:               Aggregate Return.   (line   44)
55880* TARGET_SUPPORTS_SPLIT_STACK:           Stack Smashing Protection.
55881                                                             (line   30)
55882* TARGET_SUPPORTS_WEAK:                  Label Output.       (line  272)
55883* TARGET_SUPPORTS_WIDE_INT:              Misc.               (line 1148)
55884* TARGET_TERMINATE_DW2_EH_FRAME_INFO:    Exception Region Output.
55885                                                             (line   98)
55886* TARGET_TRAMPOLINE_ADJUST_ADDRESS:      Trampolines.        (line  127)
55887* TARGET_TRAMPOLINE_INIT:                Trampolines.        (line  107)
55888* TARGET_TRANSLATE_MODE_ATTRIBUTE:       Register Arguments. (line  325)
55889* TARGET_TRULY_NOOP_TRUNCATION:          Misc.               (line  184)
55890* TARGET_UNSPEC_MAY_TRAP_P:              Misc.               (line  826)
55891* TARGET_UNWIND_TABLES_DEFAULT:          Exception Region Output.
55892                                                             (line   73)
55893* TARGET_UNWIND_WORD_MODE:               Storage Layout.     (line  505)
55894* TARGET_UPDATE_STACK_BOUNDARY:          Misc.               (line 1054)
55895* TARGET_USES_WEAK_UNWIND_INFO:          Exception Handling. (line  123)
55896* TARGET_USE_ANCHORS_FOR_SYMBOL_P:       Anchored Addresses. (line   53)
55897* TARGET_USE_BLOCKS_FOR_CONSTANT_P:      Addressing Modes.   (line  248)
55898* TARGET_USE_BLOCKS_FOR_DECL_P:          Addressing Modes.   (line  255)
55899* TARGET_USE_BY_PIECES_INFRASTRUCTURE_P: Costs.              (line  165)
55900* TARGET_USE_PSEUDO_PIC_REG:             Register Arguments. (line   84)
55901* TARGET_VALID_DLLIMPORT_ATTRIBUTE_P:    Target Attributes.  (line   66)
55902* TARGET_VALID_POINTER_MODE:             Register Arguments. (line  313)
55903* TARGET_VECTORIZE_ADD_STMT_COST:        Addressing Modes.   (line  461)
55904* TARGET_VECTORIZE_AUTOVECTORIZE_VECTOR_MODES: Addressing Modes.
55905                                                             (line  376)
55906* TARGET_VECTORIZE_BUILTIN_GATHER:       Addressing Modes.   (line  484)
55907* TARGET_VECTORIZE_BUILTIN_MASK_FOR_LOAD: Addressing Modes.  (line  266)
55908* TARGET_VECTORIZE_BUILTIN_MD_VECTORIZED_FUNCTION: Addressing Modes.
55909                                                             (line  344)
55910* TARGET_VECTORIZE_BUILTIN_SCATTER:      Addressing Modes.   (line  491)
55911* TARGET_VECTORIZE_BUILTIN_VECTORIZATION_COST: Addressing Modes.
55912                                                             (line  292)
55913* TARGET_VECTORIZE_BUILTIN_VECTORIZED_FUNCTION: Addressing Modes.
55914                                                             (line  336)
55915* TARGET_VECTORIZE_DESTROY_COST_DATA:    Addressing Modes.   (line  479)
55916* TARGET_VECTORIZE_EMPTY_MASK_IS_EXPENSIVE: Addressing Modes.
55917                                                             (line  445)
55918* TARGET_VECTORIZE_FINISH_COST:          Addressing Modes.   (line  472)
55919* TARGET_VECTORIZE_GET_MASK_MODE:        Addressing Modes.   (line  433)
55920* TARGET_VECTORIZE_INIT_COST:            Addressing Modes.   (line  452)
55921* TARGET_VECTORIZE_PREFERRED_SIMD_MODE:  Addressing Modes.   (line  361)
55922* TARGET_VECTORIZE_PREFERRED_VECTOR_ALIGNMENT: Addressing Modes.
55923                                                             (line  298)
55924* TARGET_VECTORIZE_RELATED_MODE:         Addressing Modes.   (line  407)
55925* TARGET_VECTORIZE_SPLIT_REDUCTION:      Addressing Modes.   (line  368)
55926* TARGET_VECTORIZE_SUPPORT_VECTOR_MISALIGNMENT: Addressing Modes.
55927                                                             (line  351)
55928* TARGET_VECTORIZE_VECTOR_ALIGNMENT_REACHABLE: Addressing Modes.
55929                                                             (line  310)
55930* TARGET_VECTORIZE_VEC_PERM_CONST:       Addressing Modes.   (line  316)
55931* TARGET_VECTOR_ALIGNMENT:               Storage Layout.     (line  298)
55932* TARGET_VECTOR_MODE_SUPPORTED_P:        Register Arguments. (line  345)
55933* TARGET_VERIFY_TYPE_CONTEXT:            Misc.               (line 1029)
55934* TARGET_VTABLE_DATA_ENTRY_DISTANCE:     Type Layout.        (line  303)
55935* TARGET_VTABLE_ENTRY_ALIGN:             Type Layout.        (line  297)
55936* TARGET_VTABLE_USES_DESCRIPTORS:        Type Layout.        (line  286)
55937* TARGET_WANT_DEBUG_PUB_SECTIONS:        DWARF.              (line   72)
55938* TARGET_WARN_FUNC_RETURN:               Tail Calls.         (line   35)
55939* TARGET_WARN_PARAMETER_PASSING_ABI:     Aggregate Return.   (line   90)
55940* TARGET_WEAK_NOT_IN_ARCHIVE_TOC:        Label Output.       (line  308)
55941* TCmode:                                Machine Modes.      (line  199)
55942* TDmode:                                Machine Modes.      (line   97)
55943* TEMPLATE_DECL:                         Declarations.       (line    6)
55944* Temporaries:                           Temporaries.        (line    6)
55945* termination routines:                  Initialization.     (line    6)
55946* testing constraints:                   C Constraint Interface.
55947                                                             (line    6)
55948* TEXT_SECTION_ASM_OP:                   Sections.           (line   37)
55949* TFmode:                                Machine Modes.      (line  101)
55950* The Language:                          The Language.       (line    6)
55951* THEN_CLAUSE:                           Statements for C++. (line    6)
55952* THREAD_MODEL_SPEC:                     Driver.             (line  162)
55953* THROW_EXPR:                            Unary and Binary Expressions.
55954                                                             (line    6)
55955* THUNK_DECL:                            Declarations.       (line    6)
55956* THUNK_DELTA:                           Declarations.       (line    6)
55957* TImode:                                Machine Modes.      (line   48)
55958* 'TImode', in 'insn':                   Insns.              (line  291)
55959* TLS_COMMON_ASM_OP:                     Sections.           (line   80)
55960* TLS_SECTION_ASM_FLAG:                  Sections.           (line   85)
55961* 'tm.h' macros:                         Target Macros.      (line    6)
55962* TQFmode:                               Machine Modes.      (line   65)
55963* TQmode:                                Machine Modes.      (line  122)
55964* trampolines for nested functions:      Trampolines.        (line    6)
55965* TRAMPOLINE_ALIGNMENT:                  Trampolines.        (line  101)
55966* TRAMPOLINE_SECTION:                    Trampolines.        (line   92)
55967* TRAMPOLINE_SIZE:                       Trampolines.        (line   97)
55968* TRANSFER_FROM_TRAMPOLINE:              Trampolines.        (line  163)
55969* 'trap' instruction pattern:            Standard Names.     (line 2121)
55970* tree:                                  Tree overview.      (line    6)
55971* tree <1>:                              Macros and Functions.
55972                                                             (line    6)
55973* Tree SSA:                              Tree SSA.           (line    6)
55974* TREE_CHAIN:                            Macros and Functions.
55975                                                             (line    6)
55976* TREE_CODE:                             Tree overview.      (line    6)
55977* tree_fits_shwi_p:                      Constant expressions.
55978                                                             (line    6)
55979* tree_fits_uhwi_p:                      Constant expressions.
55980                                                             (line    6)
55981* TREE_INT_CST_ELT:                      Constant expressions.
55982                                                             (line    6)
55983* tree_int_cst_equal:                    Constant expressions.
55984                                                             (line    6)
55985* TREE_INT_CST_LOW:                      Constant expressions.
55986                                                             (line    6)
55987* tree_int_cst_lt:                       Constant expressions.
55988                                                             (line    6)
55989* TREE_INT_CST_NUNITS:                   Constant expressions.
55990                                                             (line    6)
55991* TREE_LIST:                             Containers.         (line    6)
55992* TREE_OPERAND:                          Expression trees.   (line    6)
55993* TREE_PUBLIC:                           Function Basics.    (line    6)
55994* TREE_PUBLIC <1>:                       Function Properties.
55995                                                             (line   28)
55996* TREE_PURPOSE:                          Containers.         (line    6)
55997* TREE_READONLY:                         Function Properties.
55998                                                             (line   37)
55999* tree_size:                             Macros and Functions.
56000                                                             (line   13)
56001* TREE_STATIC:                           Function Properties.
56002                                                             (line   31)
56003* TREE_STRING_LENGTH:                    Constant expressions.
56004                                                             (line    6)
56005* TREE_STRING_POINTER:                   Constant expressions.
56006                                                             (line    6)
56007* TREE_THIS_VOLATILE:                    Function Properties.
56008                                                             (line   34)
56009* tree_to_shwi:                          Constant expressions.
56010                                                             (line    6)
56011* tree_to_uhwi:                          Constant expressions.
56012                                                             (line    6)
56013* TREE_TYPE:                             Macros and Functions.
56014                                                             (line    6)
56015* TREE_TYPE <1>:                         Types.              (line    6)
56016* TREE_TYPE <2>:                         Working with declarations.
56017                                                             (line   11)
56018* TREE_TYPE <3>:                         Expression trees.   (line    6)
56019* TREE_TYPE <4>:                         Expression trees.   (line   17)
56020* TREE_TYPE <5>:                         Function Basics.    (line   47)
56021* TREE_TYPE <6>:                         Types for C++.      (line    6)
56022* TREE_VALUE:                            Containers.         (line    6)
56023* TREE_VEC:                              Containers.         (line    6)
56024* TREE_VEC_ELT:                          Containers.         (line    6)
56025* TREE_VEC_LENGTH:                       Containers.         (line    6)
56026* true positive:                         Guidelines for Diagnostics.
56027                                                             (line   39)
56028* truncate:                              Conversions.        (line   38)
56029* 'truncMN2' instruction pattern:        Standard Names.     (line 1442)
56030* TRUNC_DIV_EXPR:                        Unary and Binary Expressions.
56031                                                             (line    6)
56032* TRUNC_MOD_EXPR:                        Unary and Binary Expressions.
56033                                                             (line    6)
56034* TRUTH_ANDIF_EXPR:                      Unary and Binary Expressions.
56035                                                             (line    6)
56036* TRUTH_AND_EXPR:                        Unary and Binary Expressions.
56037                                                             (line    6)
56038* TRUTH_NOT_EXPR:                        Unary and Binary Expressions.
56039                                                             (line    6)
56040* TRUTH_ORIF_EXPR:                       Unary and Binary Expressions.
56041                                                             (line    6)
56042* TRUTH_OR_EXPR:                         Unary and Binary Expressions.
56043                                                             (line    6)
56044* TRUTH_XOR_EXPR:                        Unary and Binary Expressions.
56045                                                             (line    6)
56046* TRY_BLOCK:                             Statements for C++. (line    6)
56047* TRY_HANDLERS:                          Statements for C++. (line    6)
56048* TRY_STMTS:                             Statements for C++. (line    6)
56049* Tuple specific accessors:              Tuple specific accessors.
56050                                                             (line    6)
56051* tuples:                                Tuple representation.
56052                                                             (line    6)
56053* type:                                  Types.              (line    6)
56054* type declaration:                      Declarations.       (line    6)
56055* TYPENAME_TYPE:                         Types for C++.      (line    6)
56056* TYPENAME_TYPE_FULLNAME:                Types.              (line    6)
56057* TYPENAME_TYPE_FULLNAME <1>:            Types for C++.      (line    6)
56058* TYPEOF_TYPE:                           Types for C++.      (line    6)
56059* TYPE_ALIGN:                            Types.              (line    6)
56060* TYPE_ALIGN <1>:                        Types.              (line   30)
56061* TYPE_ALIGN <2>:                        Types for C++.      (line    6)
56062* TYPE_ALIGN <3>:                        Types for C++.      (line   44)
56063* TYPE_ARG_TYPES:                        Types.              (line    6)
56064* TYPE_ARG_TYPES <1>:                    Types for C++.      (line    6)
56065* TYPE_ASM_OP:                           Label Output.       (line   76)
56066* TYPE_ATTRIBUTES:                       Attributes.         (line   24)
56067* TYPE_BINFO:                            Classes.            (line    6)
56068* TYPE_BUILT_IN:                         Types for C++.      (line   66)
56069* TYPE_CANONICAL:                        Types.              (line    6)
56070* TYPE_CANONICAL <1>:                    Types.              (line   41)
56071* TYPE_CONTEXT:                          Types.              (line    6)
56072* TYPE_CONTEXT <1>:                      Types for C++.      (line    6)
56073* TYPE_DECL:                             Declarations.       (line    6)
56074* TYPE_FIELDS:                           Types.              (line    6)
56075* TYPE_FIELDS <1>:                       Types for C++.      (line    6)
56076* TYPE_FIELDS <2>:                       Classes.            (line    6)
56077* TYPE_HAS_ARRAY_NEW_OPERATOR:           Classes.            (line   93)
56078* TYPE_HAS_DEFAULT_CONSTRUCTOR:          Classes.            (line   78)
56079* TYPE_HAS_MUTABLE_P:                    Classes.            (line   83)
56080* TYPE_HAS_NEW_OPERATOR:                 Classes.            (line   90)
56081* TYPE_MAIN_VARIANT:                     Types.              (line    6)
56082* TYPE_MAIN_VARIANT <1>:                 Types.              (line   19)
56083* TYPE_MAIN_VARIANT <2>:                 Types for C++.      (line    6)
56084* TYPE_MAX_VALUE:                        Types.              (line    6)
56085* TYPE_METHOD_BASETYPE:                  Types.              (line    6)
56086* TYPE_METHOD_BASETYPE <1>:              Types for C++.      (line    6)
56087* TYPE_MIN_VALUE:                        Types.              (line    6)
56088* TYPE_NAME:                             Types.              (line    6)
56089* TYPE_NAME <1>:                         Types.              (line   33)
56090* TYPE_NAME <2>:                         Types for C++.      (line    6)
56091* TYPE_NAME <3>:                         Types for C++.      (line   47)
56092* TYPE_NOTHROW_P:                        Functions for C++.  (line  154)
56093* TYPE_OFFSET_BASETYPE:                  Types.              (line    6)
56094* TYPE_OFFSET_BASETYPE <1>:              Types for C++.      (line    6)
56095* TYPE_OPERAND_FMT:                      Label Output.       (line   87)
56096* TYPE_OVERLOADS_ARRAY_REF:              Classes.            (line  101)
56097* TYPE_OVERLOADS_ARROW:                  Classes.            (line  104)
56098* TYPE_OVERLOADS_CALL_EXPR:              Classes.            (line   97)
56099* TYPE_POLYMORPHIC_P:                    Classes.            (line   74)
56100* TYPE_PRECISION:                        Types.              (line    6)
56101* TYPE_PRECISION <1>:                    Types for C++.      (line    6)
56102* TYPE_PTRDATAMEM_P:                     Types for C++.      (line    6)
56103* TYPE_PTRDATAMEM_P <1>:                 Types for C++.      (line   69)
56104* TYPE_PTRFN_P:                          Types for C++.      (line   76)
56105* TYPE_PTROBV_P:                         Types for C++.      (line    6)
56106* TYPE_PTROB_P:                          Types for C++.      (line   79)
56107* TYPE_PTR_P:                            Types for C++.      (line   72)
56108* TYPE_QUAL_CONST:                       Types.              (line    6)
56109* TYPE_QUAL_CONST <1>:                   Types for C++.      (line    6)
56110* TYPE_QUAL_RESTRICT:                    Types.              (line    6)
56111* TYPE_QUAL_RESTRICT <1>:                Types for C++.      (line    6)
56112* TYPE_QUAL_VOLATILE:                    Types.              (line    6)
56113* TYPE_QUAL_VOLATILE <1>:                Types for C++.      (line    6)
56114* TYPE_RAISES_EXCEPTIONS:                Functions for C++.  (line  149)
56115* TYPE_SIZE:                             Types.              (line    6)
56116* TYPE_SIZE <1>:                         Types.              (line   25)
56117* TYPE_SIZE <2>:                         Types for C++.      (line    6)
56118* TYPE_SIZE <3>:                         Types for C++.      (line   39)
56119* TYPE_STRUCTURAL_EQUALITY_P:            Types.              (line    6)
56120* TYPE_STRUCTURAL_EQUALITY_P <1>:        Types.              (line   77)
56121* TYPE_UNQUALIFIED:                      Types.              (line    6)
56122* TYPE_UNQUALIFIED <1>:                  Types for C++.      (line    6)
56123* TYPE_VFIELD:                           Classes.            (line    6)
56124* 'uaddvM4' instruction pattern:         Standard Names.     (line  461)
56125* 'uavgM3_ceil' instruction pattern:     Standard Names.     (line  860)
56126* 'uavgM3_floor' instruction pattern:    Standard Names.     (line  848)
56127* UDAmode:                               Machine Modes.      (line  170)
56128* udiv:                                  Arithmetic.         (line  130)
56129* 'udivM3' instruction pattern:          Standard Names.     (line  442)
56130* 'udivmodM4' instruction pattern:       Standard Names.     (line  825)
56131* 'udot_prodM' instruction pattern:      Standard Names.     (line  570)
56132* UDQmode:                               Machine Modes.      (line  138)
56133* UHAmode:                               Machine Modes.      (line  162)
56134* UHQmode:                               Machine Modes.      (line  130)
56135* UINT16_TYPE:                           Type Layout.        (line  214)
56136* UINT32_TYPE:                           Type Layout.        (line  215)
56137* UINT64_TYPE:                           Type Layout.        (line  216)
56138* UINT8_TYPE:                            Type Layout.        (line  213)
56139* UINTMAX_TYPE:                          Type Layout.        (line  197)
56140* UINTPTR_TYPE:                          Type Layout.        (line  234)
56141* UINT_FAST16_TYPE:                      Type Layout.        (line  230)
56142* UINT_FAST32_TYPE:                      Type Layout.        (line  231)
56143* UINT_FAST64_TYPE:                      Type Layout.        (line  232)
56144* UINT_FAST8_TYPE:                       Type Layout.        (line  229)
56145* UINT_LEAST16_TYPE:                     Type Layout.        (line  222)
56146* UINT_LEAST32_TYPE:                     Type Layout.        (line  223)
56147* UINT_LEAST64_TYPE:                     Type Layout.        (line  224)
56148* UINT_LEAST8_TYPE:                      Type Layout.        (line  221)
56149* 'umaddMN4' instruction pattern:        Standard Names.     (line  772)
56150* umax:                                  Arithmetic.         (line  149)
56151* 'umaxM3' instruction pattern:          Standard Names.     (line  442)
56152* umin:                                  Arithmetic.         (line  149)
56153* 'uminM3' instruction pattern:          Standard Names.     (line  442)
56154* umod:                                  Arithmetic.         (line  136)
56155* 'umodM3' instruction pattern:          Standard Names.     (line  442)
56156* 'umsubMN4' instruction pattern:        Standard Names.     (line  796)
56157* 'umulhisi3' instruction pattern:       Standard Names.     (line  744)
56158* 'umulhrsM3' instruction pattern:       Standard Names.     (line  605)
56159* 'umulhsM3' instruction pattern:        Standard Names.     (line  595)
56160* 'umulM3_highpart' instruction pattern: Standard Names.     (line  758)
56161* 'umulqihi3' instruction pattern:       Standard Names.     (line  744)
56162* 'umulsidi3' instruction pattern:       Standard Names.     (line  744)
56163* 'umulvM4' instruction pattern:         Standard Names.     (line  466)
56164* unchanging:                            Flags.              (line  307)
56165* 'unchanging', in 'call_insn':          Flags.              (line  115)
56166* 'unchanging', in 'jump_insn', 'call_insn' and 'insn': Flags.
56167                                                             (line   28)
56168* 'unchanging', in 'mem':                Flags.              (line   78)
56169* 'unchanging', in 'subreg':             Flags.              (line  184)
56170* 'unchanging', in 'subreg' <1>:         Flags.              (line  194)
56171* 'unchanging', in 'symbol_ref':         Flags.              (line   19)
56172* UNEQ_EXPR:                             Unary and Binary Expressions.
56173                                                             (line    6)
56174* UNGE_EXPR:                             Unary and Binary Expressions.
56175                                                             (line    6)
56176* UNGT_EXPR:                             Unary and Binary Expressions.
56177                                                             (line    6)
56178* unions, returning:                     Interface.          (line   10)
56179* UNION_TYPE:                            Types.              (line    6)
56180* UNION_TYPE <1>:                        Classes.            (line    6)
56181* UNITS_PER_WORD:                        Storage Layout.     (line   60)
56182* UNKNOWN_TYPE:                          Types.              (line    6)
56183* UNKNOWN_TYPE <1>:                      Types for C++.      (line    6)
56184* UNLE_EXPR:                             Unary and Binary Expressions.
56185                                                             (line    6)
56186* UNLIKELY_EXECUTED_TEXT_SECTION_NAME:   Sections.           (line   48)
56187* UNLT_EXPR:                             Unary and Binary Expressions.
56188                                                             (line    6)
56189* UNORDERED_EXPR:                        Unary and Binary Expressions.
56190                                                             (line    6)
56191* unshare_all_rtl:                       Sharing.            (line   61)
56192* unsigned division:                     Arithmetic.         (line  130)
56193* unsigned division with unsigned saturation: Arithmetic.    (line  130)
56194* unsigned greater than:                 Comparisons.        (line   64)
56195* unsigned greater than <1>:             Comparisons.        (line   72)
56196* unsigned less than:                    Comparisons.        (line   68)
56197* unsigned less than <1>:                Comparisons.        (line   76)
56198* unsigned minimum and maximum:          Arithmetic.         (line  149)
56199* unsigned_fix:                          Conversions.        (line   77)
56200* unsigned_float:                        Conversions.        (line   62)
56201* unsigned_fract_convert:                Conversions.        (line   97)
56202* unsigned_sat_fract:                    Conversions.        (line  103)
56203* unspec:                                Side Effects.       (line  298)
56204* unspec <1>:                            Constant Definitions.
56205                                                             (line  111)
56206* unspec_volatile:                       Side Effects.       (line  298)
56207* unspec_volatile <1>:                   Constant Definitions.
56208                                                             (line   99)
56209* 'untyped_call' instruction pattern:    Standard Names.     (line 1747)
56210* 'untyped_return' instruction pattern:  Standard Names.     (line 1810)
56211* UPDATE_PATH_HOST_CANONICALIZE (PATH):  Filesystem.         (line   59)
56212* update_ssa:                            SSA.                (line   74)
56213* update_stmt:                           Manipulating GIMPLE statements.
56214                                                             (line  140)
56215* update_stmt <1>:                       SSA Operands.       (line    6)
56216* update_stmt_if_modified:               Manipulating GIMPLE statements.
56217                                                             (line  143)
56218* UQQmode:                               Machine Modes.      (line  126)
56219* 'usaddM3' instruction pattern:         Standard Names.     (line  442)
56220* 'usadM' instruction pattern:           Standard Names.     (line  579)
56221* USAmode:                               Machine Modes.      (line  166)
56222* 'usashlM3' instruction pattern:        Standard Names.     (line  828)
56223* 'usdivM3' instruction pattern:         Standard Names.     (line  442)
56224* use:                                   Side Effects.       (line  168)
56225* used:                                  Flags.              (line  325)
56226* 'used', in 'symbol_ref':               Flags.              (line  211)
56227* user:                                  GTY Options.        (line  244)
56228* user experience guidelines:            User Experience Guidelines.
56229                                                             (line    6)
56230* user gc:                               User GC.            (line    6)
56231* USER_LABEL_PREFIX:                     Instruction Output. (line  152)
56232* USE_C_ALLOCA:                          Host Misc.          (line   19)
56233* USE_LD_AS_NEEDED:                      Driver.             (line  135)
56234* USE_LOAD_POST_DECREMENT:               Costs.              (line  254)
56235* USE_LOAD_POST_INCREMENT:               Costs.              (line  249)
56236* USE_LOAD_PRE_DECREMENT:                Costs.              (line  264)
56237* USE_LOAD_PRE_INCREMENT:                Costs.              (line  259)
56238* USE_SELECT_SECTION_FOR_FUNCTIONS:      Sections.           (line  205)
56239* USE_STORE_POST_DECREMENT:              Costs.              (line  274)
56240* USE_STORE_POST_INCREMENT:              Costs.              (line  269)
56241* USE_STORE_PRE_DECREMENT:               Costs.              (line  284)
56242* USE_STORE_PRE_INCREMENT:               Costs.              (line  279)
56243* USING_STMT:                            Statements for C++. (line    6)
56244* 'usmaddMN4' instruction pattern:       Standard Names.     (line  780)
56245* 'usmsubMN4' instruction pattern:       Standard Names.     (line  804)
56246* 'usmulhisi3' instruction pattern:      Standard Names.     (line  748)
56247* 'usmulM3' instruction pattern:         Standard Names.     (line  442)
56248* 'usmulqihi3' instruction pattern:      Standard Names.     (line  748)
56249* 'usmulsidi3' instruction pattern:      Standard Names.     (line  748)
56250* 'usnegM2' instruction pattern:         Standard Names.     (line  872)
56251* USQmode:                               Machine Modes.      (line  134)
56252* 'ussubM3' instruction pattern:         Standard Names.     (line  442)
56253* 'usubvM4' instruction pattern:         Standard Names.     (line  466)
56254* us_ashift:                             Arithmetic.         (line  173)
56255* us_minus:                              Arithmetic.         (line   38)
56256* us_mult:                               Arithmetic.         (line   93)
56257* us_neg:                                Arithmetic.         (line   82)
56258* us_plus:                               Arithmetic.         (line   14)
56259* us_truncate:                           Conversions.        (line   48)
56260* UTAmode:                               Machine Modes.      (line  174)
56261* UTQmode:                               Machine Modes.      (line  142)
56262* 'V' in constraint:                     Simple Constraints. (line   43)
56263* values, returned by functions:         Scalar Return.      (line    6)
56264* varargs implementation:                Varargs.            (line    6)
56265* variable:                              Declarations.       (line    6)
56266* Variable Location Debug Information in RTL: Debug Information.
56267                                                             (line    6)
56268* VAR_DECL:                              Declarations.       (line    6)
56269* var_location:                          Debug Information.  (line   14)
56270* 'vashlM3' instruction pattern:         Standard Names.     (line  844)
56271* 'vashrM3' instruction pattern:         Standard Names.     (line  844)
56272* VA_ARG_EXPR:                           Unary and Binary Expressions.
56273                                                             (line    6)
56274* 'vcondeqMN' instruction pattern:       Standard Names.     (line  385)
56275* 'vcondMN' instruction pattern:         Standard Names.     (line  372)
56276* 'vconduMN' instruction pattern:        Standard Names.     (line  382)
56277* 'vcond_mask_MN' instruction pattern:   Standard Names.     (line  392)
56278* vector:                                Containers.         (line    6)
56279* vector operations:                     Vector Operations.  (line    6)
56280* VECTOR_CST:                            Constant expressions.
56281                                                             (line    6)
56282* VECTOR_STORE_FLAG_VALUE:               Misc.               (line  327)
56283* 'vec_cmpeqMN' instruction pattern:     Standard Names.     (line  365)
56284* 'vec_cmpMN' instruction pattern:       Standard Names.     (line  355)
56285* 'vec_cmpuMN' instruction pattern:      Standard Names.     (line  362)
56286* vec_concat:                            Vector Operations.  (line   29)
56287* VEC_COND_EXPR:                         Vectors.            (line    6)
56288* vec_duplicate:                         Vector Operations.  (line   34)
56289* 'vec_duplicateM' instruction pattern:  Standard Names.     (line  298)
56290* VEC_DUPLICATE_EXPR:                    Vectors.            (line    6)
56291* 'vec_extractMN' instruction pattern:   Standard Names.     (line  282)
56292* 'vec_initMN' instruction pattern:      Standard Names.     (line  291)
56293* 'vec_load_lanesMN' instruction pattern: Standard Names.    (line  165)
56294* VEC_LSHIFT_EXPR:                       Vectors.            (line    6)
56295* 'vec_mask_load_lanesMN' instruction pattern: Standard Names.
56296                                                             (line  189)
56297* 'vec_mask_store_lanesMN' instruction pattern: Standard Names.
56298                                                             (line  219)
56299* vec_merge:                             Vector Operations.  (line   11)
56300* 'vec_packs_float_M' instruction pattern: Standard Names.   (line  670)
56301* 'vec_packu_float_M' instruction pattern: Standard Names.   (line  670)
56302* VEC_PACK_FIX_TRUNC_EXPR:               Vectors.            (line    6)
56303* VEC_PACK_FLOAT_EXPR:                   Vectors.            (line    6)
56304* VEC_PACK_SAT_EXPR:                     Vectors.            (line    6)
56305* 'vec_pack_sbool_trunc_M' instruction pattern: Standard Names.
56306                                                             (line  647)
56307* 'vec_pack_sfix_trunc_M' instruction pattern: Standard Names.
56308                                                             (line  663)
56309* 'vec_pack_ssat_M' instruction pattern: Standard Names.     (line  656)
56310* VEC_PACK_TRUNC_EXPR:                   Vectors.            (line    6)
56311* 'vec_pack_trunc_M' instruction pattern: Standard Names.    (line  640)
56312* 'vec_pack_ufix_trunc_M' instruction pattern: Standard Names.
56313                                                             (line  663)
56314* 'vec_pack_usat_M' instruction pattern: Standard Names.     (line  656)
56315* 'vec_permM' instruction pattern:       Standard Names.     (line  410)
56316* 'vec_permM' instruction pattern <1>:   Addressing Modes.   (line  330)
56317* VEC_RSHIFT_EXPR:                       Vectors.            (line    6)
56318* vec_select:                            Vector Operations.  (line   19)
56319* vec_series:                            Vector Operations.  (line   41)
56320* 'vec_seriesM' instruction pattern:     Standard Names.     (line  308)
56321* VEC_SERIES_EXPR:                       Vectors.            (line    6)
56322* 'vec_setM' instruction pattern:        Standard Names.     (line  277)
56323* 'vec_shl_insert_M' instruction pattern: Standard Names.    (line  621)
56324* 'vec_shl_M' instruction pattern:       Standard Names.     (line  628)
56325* 'vec_shr_M' instruction pattern:       Standard Names.     (line  634)
56326* 'vec_store_lanesMN' instruction pattern: Standard Names.   (line  206)
56327* 'vec_unpacks_float_hi_M' instruction pattern: Standard Names.
56328                                                             (line  700)
56329* 'vec_unpacks_float_lo_M' instruction pattern: Standard Names.
56330                                                             (line  700)
56331* 'vec_unpacks_hi_M' instruction pattern: Standard Names.    (line  677)
56332* 'vec_unpacks_lo_M' instruction pattern: Standard Names.    (line  677)
56333* 'vec_unpacks_sbool_hi_M' instruction pattern: Standard Names.
56334                                                             (line  691)
56335* 'vec_unpacks_sbool_lo_M' instruction pattern: Standard Names.
56336                                                             (line  691)
56337* 'vec_unpacku_float_hi_M' instruction pattern: Standard Names.
56338                                                             (line  700)
56339* 'vec_unpacku_float_lo_M' instruction pattern: Standard Names.
56340                                                             (line  700)
56341* 'vec_unpacku_hi_M' instruction pattern: Standard Names.    (line  684)
56342* 'vec_unpacku_lo_M' instruction pattern: Standard Names.    (line  684)
56343* VEC_UNPACK_FIX_TRUNC_HI_EXPR:          Vectors.            (line    6)
56344* VEC_UNPACK_FIX_TRUNC_LO_EXPR:          Vectors.            (line    6)
56345* VEC_UNPACK_FLOAT_HI_EXPR:              Vectors.            (line    6)
56346* VEC_UNPACK_FLOAT_LO_EXPR:              Vectors.            (line    6)
56347* VEC_UNPACK_HI_EXPR:                    Vectors.            (line    6)
56348* VEC_UNPACK_LO_EXPR:                    Vectors.            (line    6)
56349* 'vec_unpack_sfix_trunc_hi_M' instruction pattern: Standard Names.
56350                                                             (line  709)
56351* 'vec_unpack_sfix_trunc_lo_M' instruction pattern: Standard Names.
56352                                                             (line  709)
56353* 'vec_unpack_ufix_trunc_hi_M' instruction pattern: Standard Names.
56354                                                             (line  709)
56355* 'vec_unpack_ufix_trunc_lo_M' instruction pattern: Standard Names.
56356                                                             (line  709)
56357* VEC_WIDEN_MULT_HI_EXPR:                Vectors.            (line    6)
56358* VEC_WIDEN_MULT_LO_EXPR:                Vectors.            (line    6)
56359* 'vec_widen_smult_even_M' instruction pattern: Standard Names.
56360                                                             (line  719)
56361* 'vec_widen_smult_hi_M' instruction pattern: Standard Names.
56362                                                             (line  719)
56363* 'vec_widen_smult_lo_M' instruction pattern: Standard Names.
56364                                                             (line  719)
56365* 'vec_widen_smult_odd_M' instruction pattern: Standard Names.
56366                                                             (line  719)
56367* 'vec_widen_sshiftl_hi_M' instruction pattern: Standard Names.
56368                                                             (line  730)
56369* 'vec_widen_sshiftl_lo_M' instruction pattern: Standard Names.
56370                                                             (line  730)
56371* 'vec_widen_umult_even_M' instruction pattern: Standard Names.
56372                                                             (line  719)
56373* 'vec_widen_umult_hi_M' instruction pattern: Standard Names.
56374                                                             (line  719)
56375* 'vec_widen_umult_lo_M' instruction pattern: Standard Names.
56376                                                             (line  719)
56377* 'vec_widen_umult_odd_M' instruction pattern: Standard Names.
56378                                                             (line  719)
56379* 'vec_widen_ushiftl_hi_M' instruction pattern: Standard Names.
56380                                                             (line  730)
56381* 'vec_widen_ushiftl_lo_M' instruction pattern: Standard Names.
56382                                                             (line  730)
56383* verify_flow_info:                      Maintaining the CFG.
56384                                                             (line  116)
56385* virtual operands:                      SSA Operands.       (line    6)
56386* VIRTUAL_INCOMING_ARGS_REGNUM:          Regs and Memory.    (line   59)
56387* VIRTUAL_OUTGOING_ARGS_REGNUM:          Regs and Memory.    (line   87)
56388* VIRTUAL_STACK_DYNAMIC_REGNUM:          Regs and Memory.    (line   78)
56389* VIRTUAL_STACK_VARS_REGNUM:             Regs and Memory.    (line   69)
56390* VLIW:                                  Processor pipeline description.
56391                                                             (line    6)
56392* VLIW <1>:                              Processor pipeline description.
56393                                                             (line  223)
56394* 'vlshrM3' instruction pattern:         Standard Names.     (line  844)
56395* VMS:                                   Filesystem.         (line   37)
56396* VMS_DEBUGGING_INFO:                    VMS Debug.          (line    8)
56397* VOIDmode:                              Machine Modes.      (line  192)
56398* VOID_TYPE:                             Types.              (line    6)
56399* volatil:                               Flags.              (line  339)
56400* 'volatil', in 'insn', 'call_insn', 'jump_insn', 'code_label', 'jump_table_data', 'barrier', and 'note': Flags.
56401                                                             (line   33)
56402* 'volatil', in 'label_ref' and 'reg_label': Flags.          (line   54)
56403* 'volatil', in 'mem', 'asm_operands', and 'asm_input': Flags.
56404                                                             (line   65)
56405* 'volatil', in 'reg':                   Flags.              (line  106)
56406* 'volatil', in 'subreg':                Flags.              (line  184)
56407* 'volatil', in 'subreg' <1>:            Flags.              (line  194)
56408* 'volatil', in 'symbol_ref':            Flags.              (line  220)
56409* volatile memory references:            Flags.              (line  340)
56410* 'volatile', in 'prefetch':             Flags.              (line   92)
56411* voting between constraint alternatives: Class Preferences. (line    6)
56412* 'vrotlM3' instruction pattern:         Standard Names.     (line  844)
56413* 'vrotrM3' instruction pattern:         Standard Names.     (line  844)
56414* walk_dominator_tree:                   SSA.                (line  195)
56415* walk_gimple_op:                        Statement and operand traversals.
56416                                                             (line   30)
56417* walk_gimple_seq:                       Statement and operand traversals.
56418                                                             (line   47)
56419* walk_gimple_stmt:                      Statement and operand traversals.
56420                                                             (line   10)
56421* WCHAR_TYPE:                            Type Layout.        (line  165)
56422* WCHAR_TYPE_SIZE:                       Type Layout.        (line  173)
56423* which_alternative:                     Output Statement.   (line   58)
56424* WHILE_BODY:                            Statements for C++. (line    6)
56425* WHILE_COND:                            Statements for C++. (line    6)
56426* WHILE_STMT:                            Statements for C++. (line    6)
56427* 'while_ultMN' instruction pattern:     Standard Names.     (line  320)
56428* whopr:                                 LTO.                (line    6)
56429* 'widen_ssumM3' instruction pattern:    Standard Names.     (line  587)
56430* 'widen_usumM3' instruction pattern:    Standard Names.     (line  588)
56431* WIDEST_HARDWARE_FP_SIZE:               Type Layout.        (line  110)
56432* 'window_save' instruction pattern:     Standard Names.     (line 2092)
56433* WINT_TYPE:                             Type Layout.        (line  178)
56434* WORDS_BIG_ENDIAN:                      Storage Layout.     (line   28)
56435* 'WORDS_BIG_ENDIAN', effect on 'subreg': Regs and Memory.   (line  225)
56436* word_mode:                             Machine Modes.      (line  458)
56437* WORD_REGISTER_OPERATIONS:              Misc.               (line   53)
56438* wpa:                                   LTO.                (line    6)
56439* 'X' in constraint:                     Simple Constraints. (line  122)
56440* 'x-HOST':                              Host Fragment.      (line    6)
56441* XCmode:                                Machine Modes.      (line  199)
56442* XCOFF_DEBUGGING_INFO:                  DBX Options.        (line   12)
56443* XEXP:                                  Accessors.          (line    6)
56444* XFmode:                                Machine Modes.      (line   82)
56445* XImode:                                Machine Modes.      (line   54)
56446* XINT:                                  Accessors.          (line    6)
56447* 'xm-MACHINE.h':                        Filesystem.         (line    6)
56448* 'xm-MACHINE.h' <1>:                    Host Misc.          (line    6)
56449* xor:                                   Arithmetic.         (line  168)
56450* 'xor', canonicalization of:            Insn Canonicalizations.
56451                                                             (line   94)
56452* 'xorM3' instruction pattern:           Standard Names.     (line  442)
56453* 'xorsignM3' instruction pattern:       Standard Names.     (line 1149)
56454* XSTR:                                  Accessors.          (line    6)
56455* XVEC:                                  Accessors.          (line   38)
56456* XVECEXP:                               Accessors.          (line   45)
56457* XVECLEN:                               Accessors.          (line   41)
56458* XWINT:                                 Accessors.          (line    6)
56459* zero_extend:                           Conversions.        (line   28)
56460* 'zero_extendMN2' instruction pattern:  Standard Names.     (line 1452)
56461* zero_extract:                          Bit-Fields.         (line   30)
56462* 'zero_extract', canonicalization of:   Insn Canonicalizations.
56463                                                             (line  103)
56464
56465
56466
56467Tag Table:
56468Node: Top1789
56469Node: Contributing5229
56470Node: Portability5959
56471Node: Interface7747
56472Node: Libgcc10788
56473Node: Integer library routines12615
56474Node: Soft float library routines19583
56475Node: Decimal float library routines31521
56476Node: Fixed-point fractional library routines47279
56477Node: Exception handling routines147675
56478Node: Miscellaneous routines148782
56479Node: Languages150902
56480Node: Source Tree152449
56481Node: Configure Terms153031
56482Node: Top Level155987
56483Node: gcc Directory159572
56484Node: Subdirectories160524
56485Node: Configuration162692
56486Node: Config Fragments163412
56487Node: System Config164637
56488Node: Configuration Files165573
56489Node: Build168189
56490Node: Makefile168601
56491Ref: Makefile-Footnote-1175376
56492Ref: Makefile-Footnote-2175523
56493Node: Library Files175597
56494Node: Headers176159
56495Node: Documentation178242
56496Node: Texinfo Manuals179101
56497Node: Man Page Generation181430
56498Node: Miscellaneous Docs183343
56499Node: Front End184730
56500Node: Front End Directory188409
56501Node: Front End Config189725
56502Node: Front End Makefile192561
56503Node: Back End196329
56504Node: Testsuites201215
56505Node: Test Idioms202204
56506Node: Test Directives205602
56507Node: Directives206129
56508Node: Selectors217502
56509Node: Effective-Target Keywords218858
56510Ref: arm_fp_ok230809
56511Ref: arm_fp_dp_ok230976
56512Ref: arm_neon_ok232088
56513Ref: arm_neon_ok_no_float_abi232257
56514Ref: arm_neonv2_ok232424
56515Ref: arm_fp16_ok232591
56516Ref: arm_neon_fp16_ok232933
56517Ref: arm_vfp3_ok233865
56518Ref: arm_arch_v8a_hard_ok234008
56519Ref: arm_v8_1a_neon_ok234758
56520Ref: arm_v8_2a_fp16_scalar_ok235186
56521Ref: arm_v8_2a_fp16_neon_ok235637
56522Ref: arm_v8_2a_dotprod_neon_ok236112
56523Ref: arm_fp16fml_neon_ok236532
56524Ref: arm_coproc1_ok239032
56525Ref: arm_coproc2_ok239158
56526Ref: arm_coproc3_ok239386
56527Ref: arm_simd32_ok239753
56528Ref: arm_qbit_ok239931
56529Ref: arm_softfp_ok240123
56530Ref: arm_hard_ok240196
56531Ref: stack_size_et252104
56532Node: Add Options254497
56533Ref: arm_fp16_ieee255735
56534Ref: arm_fp16_alternative255990
56535Ref: stack_size_ao258385
56536Node: Require Support258747
56537Node: Final Actions261649
56538Node: Ada Tests270489
56539Node: C Tests271652
56540Node: LTO Testing276024
56541Node: gcov Testing277667
56542Node: profopt Testing280637
56543Node: compat Testing282352
56544Node: Torture Tests286592
56545Node: GIMPLE Tests288226
56546Node: RTL Tests289468
56547Node: Options290774
56548Node: Option file format291215
56549Node: Option properties298204
56550Node: Passes314367
56551Node: Parsing pass315240
56552Node: Gimplification pass318768
56553Node: Pass manager320601
56554Node: IPA passes322442
56555Node: Small IPA passes323335
56556Node: Regular IPA passes326772
56557Node: Late IPA passes331834
56558Node: Tree SSA passes332793
56559Node: RTL passes354333
56560Node: Optimization info366597
56561Node: Dump setup367416
56562Node: Optimization groups368545
56563Node: Dump files and streams369524
56564Node: Dump output verbosity370722
56565Node: Dump types371778
56566Node: Dump examples374120
56567Node: poly_int375601
56568Node: Overview of 'poly_int'377099
56569Node: Consequences of using 'poly_int'379707
56570Node: Comparisons involving 'poly_int'381348
56571Node: Comparison functions for 'poly_int'383006
56572Node: Properties of the 'poly_int' comparisons384219
56573Node: Comparing potentially-unordered 'poly_int's386669
56574Node: Comparing ordered 'poly_int's387590
56575Node: Checking for a 'poly_int' marker value389622
56576Node: Range checks on 'poly_int's390479
56577Node: Sorting 'poly_int's393143
56578Node: Arithmetic on 'poly_int's393922
56579Node: Using 'poly_int' with C++ arithmetic operators394739
56580Node: 'wi' arithmetic on 'poly_int's396278
56581Node: Division of 'poly_int's397140
56582Node: Other 'poly_int' arithmetic398657
56583Node: Alignment of 'poly_int's400071
56584Node: Computing bounds on 'poly_int's403354
56585Node: Converting 'poly_int's404749
56586Node: Miscellaneous 'poly_int' routines408302
56587Node: Guidelines for using 'poly_int'408948
56588Node: GENERIC413884
56589Node: Deficiencies415706
56590Node: Tree overview415947
56591Node: Macros and Functions420071
56592Node: Identifiers420896
56593Node: Containers422505
56594Node: Types423662
56595Node: Declarations435736
56596Node: Working with declarations436231
56597Node: Internal structure441835
56598Node: Current structure hierarchy442219
56599Node: Adding new DECL node types444312
56600Node: Attributes448596
56601Node: Expression trees449840
56602Node: Constant expressions451594
56603Node: Storage References457686
56604Node: Unary and Binary Expressions461205
56605Node: Vectors482107
56606Node: Statements489011
56607Node: Basic Statements489543
56608Node: Blocks494170
56609Node: Statement Sequences495871
56610Node: Empty Statements496204
56611Node: Jumps496778
56612Node: Cleanups497431
56613Node: OpenMP499472
56614Node: OpenACC505317
56615Node: Functions506434
56616Node: Function Basics506905
56617Node: Function Properties510589
56618Node: Language-dependent trees513370
56619Node: C and C++ Trees514257
56620Node: Types for C++517142
56621Node: Namespaces522112
56622Node: Classes525218
56623Node: Functions for C++530126
56624Node: Statements for C++536377
56625Node: C++ Expressions544430
56626Node: GIMPLE545935
56627Node: Tuple representation549600
56628Node: Class hierarchy of GIMPLE statements556560
56629Node: GIMPLE instruction set561548
56630Node: GIMPLE Exception Handling563180
56631Node: Temporaries565092
56632Ref: Temporaries-Footnote-1566410
56633Node: Operands566475
56634Node: Compound Expressions567236
56635Node: Compound Lvalues567470
56636Node: Conditional Expressions568232
56637Node: Logical Operators568891
56638Node: Manipulating GIMPLE statements576238
56639Node: Tuple specific accessors582174
56640Node: 'GIMPLE_ASM'583011
56641Node: 'GIMPLE_ASSIGN'585398
56642Node: 'GIMPLE_BIND'590108
56643Node: 'GIMPLE_CALL'591928
56644Node: 'GIMPLE_CATCH'596077
56645Node: 'GIMPLE_COND'597233
56646Node: 'GIMPLE_DEBUG'600034
56647Node: 'GIMPLE_EH_FILTER'604638
56648Node: 'GIMPLE_LABEL'606207
56649Node: 'GIMPLE_GOTO'606826
56650Node: 'GIMPLE_NOP'607355
56651Node: 'GIMPLE_OMP_ATOMIC_LOAD'607723
56652Node: 'GIMPLE_OMP_ATOMIC_STORE'608725
56653Node: 'GIMPLE_OMP_CONTINUE'609430
56654Node: 'GIMPLE_OMP_CRITICAL'610915
56655Node: 'GIMPLE_OMP_FOR'611915
56656Node: 'GIMPLE_OMP_MASTER'615337
56657Node: 'GIMPLE_OMP_ORDERED'615721
56658Node: 'GIMPLE_OMP_PARALLEL'616121
56659Node: 'GIMPLE_OMP_RETURN'618896
56660Node: 'GIMPLE_OMP_SECTION'619547
56661Node: 'GIMPLE_OMP_SECTIONS'620213
56662Node: 'GIMPLE_OMP_SINGLE'621829
56663Node: 'GIMPLE_PHI'622781
56664Node: 'GIMPLE_RESX'624066
56665Node: 'GIMPLE_RETURN'624791
56666Node: 'GIMPLE_SWITCH'625371
56667Node: 'GIMPLE_TRY'627252
56668Node: 'GIMPLE_WITH_CLEANUP_EXPR'629030
56669Node: GIMPLE sequences629913
56670Node: Sequence iterators633119
56671Node: Adding a new GIMPLE statement code641576
56672Node: Statement and operand traversals642921
56673Node: Tree SSA645513
56674Node: Annotations647301
56675Node: SSA Operands647706
56676Node: SSA661785
56677Node: Alias analysis671491
56678Node: Memory model675265
56679Node: RTL676624
56680Node: RTL Objects678812
56681Node: RTL Classes682696
56682Node: Accessors687995
56683Node: Special Accessors690168
56684Node: Flags695955
56685Node: Machine Modes711218
56686Node: Constants728624
56687Node: Regs and Memory740013
56688Node: Arithmetic759265
56689Node: Comparisons769440
56690Node: Bit-Fields773732
56691Node: Vector Operations775283
56692Node: Conversions777387
56693Node: RTL Declarations781885
56694Node: Side Effects782729
56695Node: Incdec799737
56696Node: Assembler803073
56697Node: Debug Information804618
56698Node: Insns806545
56699Node: Calls834403
56700Node: Sharing836996
56701Node: Reading RTL840191
56702Node: Control Flow841182
56703Node: Basic Blocks842950
56704Node: Edges848404
56705Node: Profile information857023
56706Node: Maintaining the CFG861707
56707Node: Liveness information867475
56708Node: Loop Analysis and Representation869601
56709Node: Loop representation870637
56710Node: Loop querying878003
56711Node: Loop manipulation880824
56712Node: LCSSA883160
56713Node: Scalar evolutions885229
56714Node: loop-iv888473
56715Node: Number of iterations890395
56716Node: Dependency analysis894476
56717Node: Machine Desc900827
56718Node: Overview903390
56719Node: Patterns905430
56720Node: Example910397
56721Node: RTL Template911858
56722Node: Output Template922514
56723Node: Output Statement926695
56724Node: Predicates931034
56725Node: Machine-Independent Predicates933952
56726Node: Defining Predicates938896
56727Node: Constraints944859
56728Node: Simple Constraints946328
56729Node: Multi-Alternative959168
56730Node: Class Preferences962377
56731Node: Modifiers963269
56732Node: Machine Constraints968002
56733Node: Disable Insn Alternatives1030106
56734Node: Define Constraints1033595
56735Node: C Constraint Interface1040989
56736Node: Standard Names1044139
56737Ref: shift patterns1080383
56738Ref: prologue instruction pattern1135163
56739Ref: window_save instruction pattern1135656
56740Ref: epilogue instruction pattern1135933
56741Node: Pattern Ordering1157909
56742Node: Dependent Patterns1159145
56743Node: Jump Patterns1160765
56744Ref: Jump Patterns-Footnote-11162910
56745Node: Looping Patterns1162958
56746Node: Insn Canonicalizations1168597
56747Node: Expander Definitions1173804
56748Node: Insn Splitting1182018
56749Node: Including Patterns1197046
56750Node: Peephole Definitions1198827
56751Node: define_peephole1200080
56752Node: define_peephole21206410
56753Node: Insn Attributes1210499
56754Node: Defining Attributes1211681
56755Ref: define_enum_attr1215173
56756Node: Expressions1216209
56757Node: Tagging Insns1222959
56758Node: Attr Example1227312
56759Node: Insn Lengths1229685
56760Node: Constant Attributes1233093
56761Node: Mnemonic Attribute1234269
56762Node: Delay Slots1235788
56763Node: Processor pipeline description1239011
56764Ref: Processor pipeline description-Footnote-11257823
56765Node: Conditional Execution1258147
56766Node: Define Subst1261630
56767Node: Define Subst Example1263665
56768Node: Define Subst Pattern Matching1266660
56769Node: Define Subst Output Template1267886
56770Node: Constant Definitions1270209
56771Ref: define_enum1273991
56772Node: Iterators1274479
56773Node: Mode Iterators1275124
56774Node: Defining Mode Iterators1276102
56775Node: Substitutions1277596
56776Node: Examples1279838
56777Node: Code Iterators1281286
56778Node: Int Iterators1284416
56779Node: Subst Iterators1286860
56780Node: Parameterized Names1288580
56781Node: Target Macros1292598
56782Node: Target Structure1295661
56783Node: Driver1298153
56784Node: Run-time Target1317123
56785Node: Per-Function Data1326656
56786Node: Storage Layout1329420
56787Node: Type Layout1356919
56788Node: Registers1370260
56789Node: Register Basics1371234
56790Node: Allocation Order1378796
56791Node: Values in Registers1381280
56792Node: Leaf Functions1388756
56793Node: Stack Registers1391615
56794Node: Register Classes1392887
56795Node: Stack and Calling1427669
56796Node: Frame Layout1428275
56797Node: Exception Handling1440110
56798Node: Stack Checking1446320
56799Node: Frame Registers1451945
56800Node: Elimination1460496
56801Node: Stack Arguments1464352
56802Node: Register Arguments1471548
56803Node: Scalar Return1496409
56804Node: Aggregate Return1502865
56805Node: Caller Saves1507419
56806Node: Function Entry1508161
56807Node: Profiling1519713
56808Node: Tail Calls1521823
56809Node: Shrink-wrapping separate components1523733
56810Node: Stack Smashing Protection1526774
56811Node: Miscellaneous Register Hooks1529263
56812Node: Varargs1530128
56813Node: Trampolines1539528
56814Node: Library Calls1548351
56815Node: Addressing Modes1553241
56816Node: Anchored Addresses1582248
56817Node: Condition Code1584891
56818Node: CC0 Condition Codes1587218
56819Node: MODE_CC Condition Codes1590464
56820Node: Costs1597290
56821Node: Scheduling1618661
56822Node: Sections1642583
56823Node: PIC1658802
56824Node: Assembler Format1660861
56825Node: File Framework1661999
56826Ref: TARGET_HAVE_SWITCHABLE_BSS_SECTIONS1669598
56827Node: Data Output1672868
56828Node: Uninitialized Data1681156
56829Node: Label Output1686170
56830Node: Initialization1710781
56831Node: Macros for Initialization1716742
56832Node: Instruction Output1723461
56833Node: Dispatch Tables1734090
56834Node: Exception Region Output1739551
56835Node: Alignment Output1746633
56836Node: Debugging Info1750320
56837Node: All Debuggers1750974
56838Node: DBX Options1753746
56839Node: DBX Hooks1759184
56840Node: File Names and DBX1760493
56841Node: DWARF1762597
56842Node: VMS Debug1768412
56843Node: Floating Point1768991
56844Node: Mode Switching1771746
56845Node: Target Attributes1776183
56846Node: Emulated TLS1785599
56847Node: MIPS Coprocessors1788989
56848Node: PCH Target1790148
56849Node: C++ ABI1791990
56850Node: D Language and ABI1796782
56851Node: Named Address Spaces1797827
56852Node: Misc1803754
56853Ref: TARGET_SHIFT_TRUNCATION_MASK1811625
56854Node: Host Config1866959
56855Node: Host Common1868028
56856Node: Filesystem1870402
56857Node: Host Misc1874517
56858Node: Fragments1876966
56859Node: Target Fragment1878161
56860Node: Host Fragment1888973
56861Node: Collect21889213
56862Node: Header Dirs1891849
56863Node: Type Information1893272
56864Node: GTY Options1896548
56865Node: Inheritance and GTY1907806
56866Ref: Inheritance and GTY-Footnote-11909371
56867Node: User GC1909641
56868Node: GGC Roots1913380
56869Node: Files1914093
56870Node: Invoking the garbage collector1916800
56871Node: Troubleshooting1918305
56872Node: Plugins1919380
56873Node: Plugins loading1920509
56874Node: Plugin API1921608
56875Node: Plugins pass1929334
56876Node: Plugins GC1931305
56877Node: Plugins description1933022
56878Node: Plugins attr1933558
56879Node: Plugins recording1935837
56880Node: Plugins gate1936687
56881Node: Plugins tracking1937278
56882Node: Plugins building1937866
56883Node: LTO1941367
56884Node: LTO Overview1942239
56885Node: LTO object file layout1948066
56886Node: IPA1952696
56887Node: WHOPR1961746
56888Node: Internal flags1966306
56889Node: Match and Simplify1967717
56890Node: GIMPLE API1968679
56891Node: The Language1971474
56892Node: Static Analyzer1983449
56893Node: Analyzer Internals1983714
56894Node: Debugging the Analyzer1999356
56895Node: User Experience Guidelines2001967
56896Node: Guidelines for Diagnostics2002902
56897Ref: input_location_example2009963
56898Node: Guidelines for Options2019646
56899Node: Funding2019823
56900Node: GNU Project2022330
56901Node: Copying2022979
56902Node: GNU Free Documentation License2060489
56903Node: Contributors2085609
56904Node: Option Index2126585
56905Node: Concept Index2127462
56906
56907End Tag Table
56908