xref: /netbsd-src/external/gpl3/gcc.old/dist/gcc/doc/gccint.info (revision d909946ca08dceb44d7d0f22ec9488679695d976)
1This is doc/gccint.info, produced by makeinfo version 4.12 from
2/space/rguenther/gcc-4.8.5/gcc-4.8.5/gcc/doc/gccint.texi.
3
4Copyright (C) 1988-2015 Free Software Foundation, Inc.
5
6 Permission is granted to copy, distribute and/or modify this document
7under the terms of the GNU Free Documentation License, Version 1.3 or
8any later version published by the Free Software Foundation; with the
9Invariant Sections being "Funding Free Software", the Front-Cover Texts
10being (a) (see below), and with the Back-Cover Texts being (b) (see
11below).  A copy of the license is included in the section entitled "GNU
12Free Documentation License".
13
14 (a) The FSF's Front-Cover Text is:
15
16 A GNU Manual
17
18 (b) The FSF's Back-Cover Text is:
19
20 You have freedom to copy and modify this GNU Manual, like GNU
21software.  Copies published by the Free Software Foundation raise
22funds for GNU development.
23
24INFO-DIR-SECTION Software development
25START-INFO-DIR-ENTRY
26* gccint: (gccint).            Internals of the GNU Compiler Collection.
27END-INFO-DIR-ENTRY
28 This file documents the internals of the GNU compilers.
29
30 Copyright (C) 1988-2015 Free Software Foundation, Inc.
31
32 Permission is granted to copy, distribute and/or modify this document
33under the terms of the GNU Free Documentation License, Version 1.3 or
34any later version published by the Free Software Foundation; with the
35Invariant Sections being "Funding Free Software", the Front-Cover Texts
36being (a) (see below), and with the Back-Cover Texts being (b) (see
37below).  A copy of the license is included in the section entitled "GNU
38Free Documentation License".
39
40 (a) The FSF's Front-Cover Text is:
41
42 A GNU Manual
43
44 (b) The FSF's Back-Cover Text is:
45
46 You have freedom to copy and modify this GNU Manual, like GNU
47software.  Copies published by the Free Software Foundation raise
48funds for GNU development.
49
50
51
52File: gccint.info,  Node: Top,  Next: Contributing,  Up: (DIR)
53
54Introduction
55************
56
57This manual documents the internals of the GNU compilers, including how
58to port them to new targets and some information about how to write
59front ends for new languages.  It corresponds to the compilers
60(GCC) version 4.8.5.  The use of the GNU compilers is documented in a
61separate manual.  *Note Introduction: (gcc)Top.
62
63 This manual is mainly a reference manual rather than a tutorial.  It
64discusses how to contribute to GCC (*note Contributing::), the
65characteristics of the machines supported by GCC as hosts and targets
66(*note Portability::), how GCC relates to the ABIs on such systems
67(*note Interface::), and the characteristics of the languages for which
68GCC front ends are written (*note Languages::).  It then describes the
69GCC source tree structure and build system, some of the interfaces to
70GCC front ends, and how support for a target system is implemented in
71GCC.
72
73 Additional tutorial information is linked to from
74`http://gcc.gnu.org/readings.html'.
75
76* Menu:
77
78* Contributing::    How to contribute to testing and developing GCC.
79* Portability::     Goals of GCC's portability features.
80* Interface::       Function-call interface of GCC output.
81* Libgcc::          Low-level runtime library used by GCC.
82* Languages::       Languages for which GCC front ends are written.
83* Source Tree::     GCC source tree structure and build system.
84* Testsuites::      GCC testsuites.
85* Options::         Option specification files.
86* Passes::          Order of passes, what they do, and what each file is for.
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* Funding::         How to help assure funding for free software.
104* GNU Project::     The GNU Project and GNU/Linux.
105
106* Copying::         GNU General Public License says
107                    how you can copy and share GCC.
108* GNU Free Documentation License:: How you can copy and share this manual.
109* Contributors::    People who have contributed to GCC.
110
111* Option Index::    Index to command line options.
112* Concept Index::   Index of concepts and symbol names.
113
114
115File: gccint.info,  Node: Contributing,  Next: Portability,  Prev: Top,  Up: Top
116
1171 Contributing to GCC Development
118*********************************
119
120If you would like to help pretest GCC releases to assure they work well,
121current development sources are available by SVN (see
122`http://gcc.gnu.org/svn.html').  Source and binary snapshots are also
123available for FTP; see `http://gcc.gnu.org/snapshots.html'.
124
125 If you would like to work on improvements to GCC, please read the
126advice at these URLs:
127
128     `http://gcc.gnu.org/contribute.html'
129     `http://gcc.gnu.org/contributewhy.html'
130
131for information on how to make useful contributions and avoid
132duplication of effort.  Suggested projects are listed at
133`http://gcc.gnu.org/projects/'.
134
135
136File: gccint.info,  Node: Portability,  Next: Interface,  Prev: Contributing,  Up: Top
137
1382 GCC and Portability
139*********************
140
141GCC itself aims to be portable to any machine where `int' is at least a
14232-bit type.  It aims to target machines with a flat (non-segmented)
143byte addressed data address space (the code address space can be
144separate).  Target ABIs may have 8, 16, 32 or 64-bit `int' type.  `char'
145can be wider than 8 bits.
146
147 GCC gets most of the information about the target machine from a
148machine description which gives an algebraic formula for each of the
149machine's instructions.  This is a very clean way to describe the
150target.  But when the compiler needs information that is difficult to
151express in this fashion, ad-hoc parameters have been defined for
152machine descriptions.  The purpose of portability is to reduce the
153total work needed on the compiler; it was not of interest for its own
154sake.
155
156 GCC does not contain machine dependent code, but it does contain code
157that depends on machine parameters such as endianness (whether the most
158significant byte has the highest or lowest address of the bytes in a
159word) and the availability of autoincrement addressing.  In the
160RTL-generation pass, it is often necessary to have multiple strategies
161for generating code for a particular kind of syntax tree, strategies
162that are usable for different combinations of parameters.  Often, not
163all possible cases have been addressed, but only the common ones or
164only the ones that have been encountered.  As a result, a new target
165may require additional strategies.  You will know if this happens
166because the compiler will call `abort'.  Fortunately, the new
167strategies can be added in a machine-independent fashion, and will
168affect only the target machines that need them.
169
170
171File: gccint.info,  Node: Interface,  Next: Libgcc,  Prev: Portability,  Up: Top
172
1733 Interfacing to GCC Output
174***************************
175
176GCC is normally configured to use the same function calling convention
177normally in use on the target system.  This is done with the
178machine-description macros described (*note Target Macros::).
179
180 However, returning of structure and union values is done differently on
181some target machines.  As a result, functions compiled with PCC
182returning such types cannot be called from code compiled with GCC, and
183vice versa.  This does not cause trouble often because few Unix library
184routines return structures or unions.
185
186 GCC code returns structures and unions that are 1, 2, 4 or 8 bytes
187long in the same registers used for `int' or `double' return values.
188(GCC typically allocates variables of such types in registers also.)
189Structures and unions of other sizes are returned by storing them into
190an address passed by the caller (usually in a register).  The target
191hook `TARGET_STRUCT_VALUE_RTX' tells GCC where to pass this address.
192
193 By contrast, PCC on most target machines returns structures and unions
194of any size by copying the data into an area of static storage, and then
195returning the address of that storage as if it were a pointer value.
196The caller must copy the data from that memory area to the place where
197the value is wanted.  This is slower than the method used by GCC, and
198fails to be reentrant.
199
200 On some target machines, such as RISC machines and the 80386, the
201standard system convention is to pass to the subroutine the address of
202where to return the value.  On these machines, GCC has been configured
203to be compatible with the standard compiler, when this method is used.
204It may not be compatible for structures of 1, 2, 4 or 8 bytes.
205
206 GCC uses the system's standard convention for passing arguments.  On
207some machines, the first few arguments are passed in registers; in
208others, all are passed on the stack.  It would be possible to use
209registers for argument passing on any machine, and this would probably
210result in a significant speedup.  But the result would be complete
211incompatibility with code that follows the standard convention.  So this
212change is practical only if you are switching to GCC as the sole C
213compiler for the system.  We may implement register argument passing on
214certain machines once we have a complete GNU system so that we can
215compile the libraries with GCC.
216
217 On some machines (particularly the SPARC), certain types of arguments
218are passed "by invisible reference".  This means that the value is
219stored in memory, and the address of the memory location is passed to
220the subroutine.
221
222 If you use `longjmp', beware of automatic variables.  ISO C says that
223automatic variables that are not declared `volatile' have undefined
224values after a `longjmp'.  And this is all GCC promises to do, because
225it is very difficult to restore register variables correctly, and one
226of GCC's features is that it can put variables in registers without
227your asking it to.
228
229
230File: gccint.info,  Node: Libgcc,  Next: Languages,  Prev: Interface,  Up: Top
231
2324 The GCC low-level runtime library
233***********************************
234
235GCC provides a low-level runtime library, `libgcc.a' or `libgcc_s.so.1'
236on some platforms.  GCC generates calls to routines in this library
237automatically, whenever it needs to perform some operation that is too
238complicated to emit inline code for.
239
240 Most of the routines in `libgcc' handle arithmetic operations that the
241target processor cannot perform directly.  This includes integer
242multiply and divide on some machines, and all floating-point and
243fixed-point operations on other machines.  `libgcc' also includes
244routines for exception handling, and a handful of miscellaneous
245operations.
246
247 Some of these routines can be defined in mostly machine-independent C.
248Others must be hand-written in assembly language for each processor
249that needs them.
250
251 GCC will also generate calls to C library routines, such as `memcpy'
252and `memset', in some cases.  The set of routines that GCC may possibly
253use is documented in *note Other Builtins: (gcc)Other Builtins.
254
255 These routines take arguments and return values of a specific machine
256mode, not a specific C type.  *Note Machine Modes::, for an explanation
257of this concept.  For illustrative purposes, in this chapter the
258floating point type `float' is assumed to correspond to `SFmode';
259`double' to `DFmode'; and `long double' to both `TFmode' and `XFmode'.
260Similarly, the integer types `int' and `unsigned int' correspond to
261`SImode'; `long' and `unsigned long' to `DImode'; and `long long' and
262`unsigned long long' to `TImode'.
263
264* Menu:
265
266* Integer library routines::
267* Soft float library routines::
268* Decimal float library routines::
269* Fixed-point fractional library routines::
270* Exception handling routines::
271* Miscellaneous routines::
272
273
274File: gccint.info,  Node: Integer library routines,  Next: Soft float library routines,  Up: Libgcc
275
2764.1 Routines for integer arithmetic
277===================================
278
279The integer arithmetic routines are used on platforms that don't provide
280hardware support for arithmetic operations on some modes.
281
2824.1.1 Arithmetic functions
283--------------------------
284
285 -- Runtime Function: int __ashlsi3 (int A, int B)
286 -- Runtime Function: long __ashldi3 (long A, int B)
287 -- Runtime Function: long long __ashlti3 (long long A, int B)
288     These functions return the result of shifting A left by B bits.
289
290 -- Runtime Function: int __ashrsi3 (int A, int B)
291 -- Runtime Function: long __ashrdi3 (long A, int B)
292 -- Runtime Function: long long __ashrti3 (long long A, int B)
293     These functions return the result of arithmetically shifting A
294     right by B bits.
295
296 -- Runtime Function: int __divsi3 (int A, int B)
297 -- Runtime Function: long __divdi3 (long A, long B)
298 -- Runtime Function: long long __divti3 (long long A, long long B)
299     These functions return the quotient of the signed division of A and
300     B.
301
302 -- Runtime Function: int __lshrsi3 (int A, int B)
303 -- Runtime Function: long __lshrdi3 (long A, int B)
304 -- Runtime Function: long long __lshrti3 (long long A, int B)
305     These functions return the result of logically shifting A right by
306     B bits.
307
308 -- Runtime Function: int __modsi3 (int A, int B)
309 -- Runtime Function: long __moddi3 (long A, long B)
310 -- Runtime Function: long long __modti3 (long long A, long long B)
311     These functions return the remainder of the signed division of A
312     and B.
313
314 -- Runtime Function: int __mulsi3 (int A, int B)
315 -- Runtime Function: long __muldi3 (long A, long B)
316 -- Runtime Function: long long __multi3 (long long A, long long B)
317     These functions return the product of A and B.
318
319 -- Runtime Function: long __negdi2 (long A)
320 -- Runtime Function: long long __negti2 (long long A)
321     These functions return the negation of A.
322
323 -- Runtime Function: unsigned int __udivsi3 (unsigned int A, unsigned
324          int B)
325 -- Runtime Function: unsigned long __udivdi3 (unsigned long A,
326          unsigned long B)
327 -- Runtime Function: unsigned long long __udivti3 (unsigned long long
328          A, unsigned long long B)
329     These functions return the quotient of the unsigned division of A
330     and B.
331
332 -- Runtime Function: unsigned long __udivmoddi4 (unsigned long A,
333          unsigned long B, unsigned long *C)
334 -- Runtime Function: unsigned long long __udivmodti4 (unsigned long
335          long A, unsigned long long B, unsigned long long *C)
336     These functions calculate both the quotient and remainder of the
337     unsigned division of A and B.  The return value is the quotient,
338     and the remainder is placed in variable pointed to by C.
339
340 -- Runtime Function: unsigned int __umodsi3 (unsigned int A, unsigned
341          int B)
342 -- Runtime Function: unsigned long __umoddi3 (unsigned long A,
343          unsigned long B)
344 -- Runtime Function: unsigned long long __umodti3 (unsigned long long
345          A, unsigned long long B)
346     These functions return the remainder of the unsigned division of A
347     and B.
348
3494.1.2 Comparison functions
350--------------------------
351
352The following functions implement integral comparisons.  These functions
353implement a low-level compare, upon which the higher level comparison
354operators (such as less than and greater than or equal to) can be
355constructed.  The returned values lie in the range zero to two, to allow
356the high-level operators to be implemented by testing the returned
357result using either signed or unsigned comparison.
358
359 -- Runtime Function: int __cmpdi2 (long A, long B)
360 -- Runtime Function: int __cmpti2 (long long A, long long B)
361     These functions perform a signed comparison of A and B.  If A is
362     less than B, they return 0; if A is greater than B, they return 2;
363     and if A and B are equal they return 1.
364
365 -- Runtime Function: int __ucmpdi2 (unsigned long A, unsigned long B)
366 -- Runtime Function: int __ucmpti2 (unsigned long long A, unsigned
367          long long B)
368     These functions perform an unsigned comparison of A and B.  If A
369     is less than B, they return 0; if A is greater than B, they return
370     2; and if A and B are equal they return 1.
371
3724.1.3 Trapping arithmetic functions
373-----------------------------------
374
375The following functions implement trapping arithmetic.  These functions
376call the libc function `abort' upon signed arithmetic overflow.
377
378 -- Runtime Function: int __absvsi2 (int A)
379 -- Runtime Function: long __absvdi2 (long A)
380     These functions return the absolute value of A.
381
382 -- Runtime Function: int __addvsi3 (int A, int B)
383 -- Runtime Function: long __addvdi3 (long A, long B)
384     These functions return the sum of A and B; that is `A + B'.
385
386 -- Runtime Function: int __mulvsi3 (int A, int B)
387 -- Runtime Function: long __mulvdi3 (long A, long B)
388     The functions return the product of A and B; that is `A * B'.
389
390 -- Runtime Function: int __negvsi2 (int A)
391 -- Runtime Function: long __negvdi2 (long A)
392     These functions return the negation of A; that is `-A'.
393
394 -- Runtime Function: int __subvsi3 (int A, int B)
395 -- Runtime Function: long __subvdi3 (long A, long B)
396     These functions return the difference between B and A; that is `A
397     - B'.
398
3994.1.4 Bit operations
400--------------------
401
402 -- Runtime Function: int __clzsi2 (int A)
403 -- Runtime Function: int __clzdi2 (long A)
404 -- Runtime Function: int __clzti2 (long long A)
405     These functions return the number of leading 0-bits in A, starting
406     at the most significant bit position.  If A is zero, the result is
407     undefined.
408
409 -- Runtime Function: int __ctzsi2 (int A)
410 -- Runtime Function: int __ctzdi2 (long A)
411 -- Runtime Function: int __ctzti2 (long long A)
412     These functions return the number of trailing 0-bits in A, starting
413     at the least significant bit position.  If A is zero, the result is
414     undefined.
415
416 -- Runtime Function: int __ffsdi2 (long A)
417 -- Runtime Function: int __ffsti2 (long long A)
418     These functions return the index of the least significant 1-bit in
419     A, or the value zero if A is zero.  The least significant bit is
420     index one.
421
422 -- Runtime Function: int __paritysi2 (int A)
423 -- Runtime Function: int __paritydi2 (long A)
424 -- Runtime Function: int __parityti2 (long long A)
425     These functions return the value zero if the number of bits set in
426     A is even, and the value one otherwise.
427
428 -- Runtime Function: int __popcountsi2 (int A)
429 -- Runtime Function: int __popcountdi2 (long A)
430 -- Runtime Function: int __popcountti2 (long long A)
431     These functions return the number of bits set in A.
432
433 -- Runtime Function: int32_t __bswapsi2 (int32_t A)
434 -- Runtime Function: int64_t __bswapdi2 (int64_t A)
435     These functions return the A byteswapped.
436
437
438File: gccint.info,  Node: Soft float library routines,  Next: Decimal float library routines,  Prev: Integer library routines,  Up: Libgcc
439
4404.2 Routines for floating point emulation
441=========================================
442
443The software floating point library is used on machines which do not
444have hardware support for floating point.  It is also used whenever
445`-msoft-float' is used to disable generation of floating point
446instructions.  (Not all targets support this switch.)
447
448 For compatibility with other compilers, the floating point emulation
449routines can be renamed with the `DECLARE_LIBRARY_RENAMES' macro (*note
450Library Calls::).  In this section, the default names are used.
451
452 Presently the library does not support `XFmode', which is used for
453`long double' on some architectures.
454
4554.2.1 Arithmetic functions
456--------------------------
457
458 -- Runtime Function: float __addsf3 (float A, float B)
459 -- Runtime Function: double __adddf3 (double A, double B)
460 -- Runtime Function: long double __addtf3 (long double A, long double
461          B)
462 -- Runtime Function: long double __addxf3 (long double A, long double
463          B)
464     These functions return the sum of A and B.
465
466 -- Runtime Function: float __subsf3 (float A, float B)
467 -- Runtime Function: double __subdf3 (double A, double B)
468 -- Runtime Function: long double __subtf3 (long double A, long double
469          B)
470 -- Runtime Function: long double __subxf3 (long double A, long double
471          B)
472     These functions return the difference between B and A; that is,
473     A - B.
474
475 -- Runtime Function: float __mulsf3 (float A, float B)
476 -- Runtime Function: double __muldf3 (double A, double B)
477 -- Runtime Function: long double __multf3 (long double A, long double
478          B)
479 -- Runtime Function: long double __mulxf3 (long double A, long double
480          B)
481     These functions return the product of A and B.
482
483 -- Runtime Function: float __divsf3 (float A, float B)
484 -- Runtime Function: double __divdf3 (double A, double B)
485 -- Runtime Function: long double __divtf3 (long double A, long double
486          B)
487 -- Runtime Function: long double __divxf3 (long double A, long double
488          B)
489     These functions return the quotient of A and B; that is, A / B.
490
491 -- Runtime Function: float __negsf2 (float A)
492 -- Runtime Function: double __negdf2 (double A)
493 -- Runtime Function: long double __negtf2 (long double A)
494 -- Runtime Function: long double __negxf2 (long double A)
495     These functions return the negation of A.  They simply flip the
496     sign bit, so they can produce negative zero and negative NaN.
497
4984.2.2 Conversion functions
499--------------------------
500
501 -- Runtime Function: double __extendsfdf2 (float A)
502 -- Runtime Function: long double __extendsftf2 (float A)
503 -- Runtime Function: long double __extendsfxf2 (float A)
504 -- Runtime Function: long double __extenddftf2 (double A)
505 -- Runtime Function: long double __extenddfxf2 (double A)
506     These functions extend A to the wider mode of their return type.
507
508 -- Runtime Function: double __truncxfdf2 (long double A)
509 -- Runtime Function: double __trunctfdf2 (long double A)
510 -- Runtime Function: float __truncxfsf2 (long double A)
511 -- Runtime Function: float __trunctfsf2 (long double A)
512 -- Runtime Function: float __truncdfsf2 (double A)
513     These functions truncate A to the narrower mode of their return
514     type, rounding toward zero.
515
516 -- Runtime Function: int __fixsfsi (float A)
517 -- Runtime Function: int __fixdfsi (double A)
518 -- Runtime Function: int __fixtfsi (long double A)
519 -- Runtime Function: int __fixxfsi (long double A)
520     These functions convert A to a signed integer, rounding toward
521     zero.
522
523 -- Runtime Function: long __fixsfdi (float A)
524 -- Runtime Function: long __fixdfdi (double A)
525 -- Runtime Function: long __fixtfdi (long double A)
526 -- Runtime Function: long __fixxfdi (long double A)
527     These functions convert A to a signed long, rounding toward zero.
528
529 -- Runtime Function: long long __fixsfti (float A)
530 -- Runtime Function: long long __fixdfti (double A)
531 -- Runtime Function: long long __fixtfti (long double A)
532 -- Runtime Function: long long __fixxfti (long double A)
533     These functions convert A to a signed long long, rounding toward
534     zero.
535
536 -- Runtime Function: unsigned int __fixunssfsi (float A)
537 -- Runtime Function: unsigned int __fixunsdfsi (double A)
538 -- Runtime Function: unsigned int __fixunstfsi (long double A)
539 -- Runtime Function: unsigned int __fixunsxfsi (long double A)
540     These functions convert A to an unsigned integer, rounding toward
541     zero.  Negative values all become zero.
542
543 -- Runtime Function: unsigned long __fixunssfdi (float A)
544 -- Runtime Function: unsigned long __fixunsdfdi (double A)
545 -- Runtime Function: unsigned long __fixunstfdi (long double A)
546 -- Runtime Function: unsigned long __fixunsxfdi (long double A)
547     These functions convert A to an unsigned long, rounding toward
548     zero.  Negative values all become zero.
549
550 -- Runtime Function: unsigned long long __fixunssfti (float A)
551 -- Runtime Function: unsigned long long __fixunsdfti (double A)
552 -- Runtime Function: unsigned long long __fixunstfti (long double A)
553 -- Runtime Function: unsigned long long __fixunsxfti (long double A)
554     These functions convert A to an unsigned long long, rounding
555     toward zero.  Negative values all become zero.
556
557 -- Runtime Function: float __floatsisf (int I)
558 -- Runtime Function: double __floatsidf (int I)
559 -- Runtime Function: long double __floatsitf (int I)
560 -- Runtime Function: long double __floatsixf (int I)
561     These functions convert I, a signed integer, to floating point.
562
563 -- Runtime Function: float __floatdisf (long I)
564 -- Runtime Function: double __floatdidf (long I)
565 -- Runtime Function: long double __floatditf (long I)
566 -- Runtime Function: long double __floatdixf (long I)
567     These functions convert I, a signed long, to floating point.
568
569 -- Runtime Function: float __floattisf (long long I)
570 -- Runtime Function: double __floattidf (long long I)
571 -- Runtime Function: long double __floattitf (long long I)
572 -- Runtime Function: long double __floattixf (long long I)
573     These functions convert I, a signed long long, to floating point.
574
575 -- Runtime Function: float __floatunsisf (unsigned int I)
576 -- Runtime Function: double __floatunsidf (unsigned int I)
577 -- Runtime Function: long double __floatunsitf (unsigned int I)
578 -- Runtime Function: long double __floatunsixf (unsigned int I)
579     These functions convert I, an unsigned integer, to floating point.
580
581 -- Runtime Function: float __floatundisf (unsigned long I)
582 -- Runtime Function: double __floatundidf (unsigned long I)
583 -- Runtime Function: long double __floatunditf (unsigned long I)
584 -- Runtime Function: long double __floatundixf (unsigned long I)
585     These functions convert I, an unsigned long, to floating point.
586
587 -- Runtime Function: float __floatuntisf (unsigned long long I)
588 -- Runtime Function: double __floatuntidf (unsigned long long I)
589 -- Runtime Function: long double __floatuntitf (unsigned long long I)
590 -- Runtime Function: long double __floatuntixf (unsigned long long I)
591     These functions convert I, an unsigned long long, to floating
592     point.
593
5944.2.3 Comparison functions
595--------------------------
596
597There are two sets of basic comparison functions.
598
599 -- Runtime Function: int __cmpsf2 (float A, float B)
600 -- Runtime Function: int __cmpdf2 (double A, double B)
601 -- Runtime Function: int __cmptf2 (long double A, long double B)
602     These functions calculate a <=> b.  That is, if A is less than B,
603     they return -1; if A is greater than B, they return 1; and if A
604     and B are equal they return 0.  If either argument is NaN they
605     return 1, but you should not rely on this; if NaN is a
606     possibility, use one of the higher-level comparison functions.
607
608 -- Runtime Function: int __unordsf2 (float A, float B)
609 -- Runtime Function: int __unorddf2 (double A, double B)
610 -- Runtime Function: int __unordtf2 (long double A, long double B)
611     These functions return a nonzero value if either argument is NaN,
612     otherwise 0.
613
614 There is also a complete group of higher level functions which
615correspond directly to comparison operators.  They implement the ISO C
616semantics for floating-point comparisons, taking NaN into account.  Pay
617careful attention to the return values defined for each set.  Under the
618hood, all of these routines are implemented as
619
620       if (__unordXf2 (a, b))
621         return E;
622       return __cmpXf2 (a, b);
623
624where E is a constant chosen to give the proper behavior for NaN.
625Thus, the meaning of the return value is different for each set.  Do
626not rely on this implementation; only the semantics documented below
627are guaranteed.
628
629 -- Runtime Function: int __eqsf2 (float A, float B)
630 -- Runtime Function: int __eqdf2 (double A, double B)
631 -- Runtime Function: int __eqtf2 (long double A, long double B)
632     These functions return zero if neither argument is NaN, and A and
633     B are equal.
634
635 -- Runtime Function: int __nesf2 (float A, float B)
636 -- Runtime Function: int __nedf2 (double A, double B)
637 -- Runtime Function: int __netf2 (long double A, long double B)
638     These functions return a nonzero value if either argument is NaN,
639     or if A and B are unequal.
640
641 -- Runtime Function: int __gesf2 (float A, float B)
642 -- Runtime Function: int __gedf2 (double A, double B)
643 -- Runtime Function: int __getf2 (long double A, long double B)
644     These functions return a value greater than or equal to zero if
645     neither argument is NaN, and A is greater than or equal to B.
646
647 -- Runtime Function: int __ltsf2 (float A, float B)
648 -- Runtime Function: int __ltdf2 (double A, double B)
649 -- Runtime Function: int __lttf2 (long double A, long double B)
650     These functions return a value less than zero if neither argument
651     is NaN, and A is strictly less than B.
652
653 -- Runtime Function: int __lesf2 (float A, float B)
654 -- Runtime Function: int __ledf2 (double A, double B)
655 -- Runtime Function: int __letf2 (long double A, long double B)
656     These functions return a value less than or equal to zero if
657     neither argument is NaN, and A is less than or equal to B.
658
659 -- Runtime Function: int __gtsf2 (float A, float B)
660 -- Runtime Function: int __gtdf2 (double A, double B)
661 -- Runtime Function: int __gttf2 (long double A, long double B)
662     These functions return a value greater than zero if neither
663     argument is NaN, and A is strictly greater than B.
664
6654.2.4 Other floating-point functions
666------------------------------------
667
668 -- Runtime Function: float __powisf2 (float A, int B)
669 -- Runtime Function: double __powidf2 (double A, int B)
670 -- Runtime Function: long double __powitf2 (long double A, int B)
671 -- Runtime Function: long double __powixf2 (long double A, int B)
672     These functions convert raise A to the power B.
673
674 -- Runtime Function: complex float __mulsc3 (float A, float B, float
675          C, float D)
676 -- Runtime Function: complex double __muldc3 (double A, double B,
677          double C, double D)
678 -- Runtime Function: complex long double __multc3 (long double A, long
679          double B, long double C, long double D)
680 -- Runtime Function: complex long double __mulxc3 (long double A, long
681          double B, long double C, long double D)
682     These functions return the product of A + iB and C + iD, following
683     the rules of C99 Annex G.
684
685 -- Runtime Function: complex float __divsc3 (float A, float B, float
686          C, float D)
687 -- Runtime Function: complex double __divdc3 (double A, double B,
688          double C, double D)
689 -- Runtime Function: complex long double __divtc3 (long double A, long
690          double B, long double C, long double D)
691 -- Runtime Function: complex long double __divxc3 (long double A, long
692          double B, long double C, long double D)
693     These functions return the quotient of A + iB and C + iD (i.e., (A
694     + iB) / (C + iD)), following the rules of C99 Annex G.
695
696
697File: gccint.info,  Node: Decimal float library routines,  Next: Fixed-point fractional library routines,  Prev: Soft float library routines,  Up: Libgcc
698
6994.3 Routines for decimal floating point emulation
700=================================================
701
702The software decimal floating point library implements IEEE 754-2008
703decimal floating point arithmetic and is only activated on selected
704targets.
705
706 The software decimal floating point library supports either DPD
707(Densely Packed Decimal) or BID (Binary Integer Decimal) encoding as
708selected at configure time.
709
7104.3.1 Arithmetic functions
711--------------------------
712
713 -- Runtime Function: _Decimal32 __dpd_addsd3 (_Decimal32 A, _Decimal32
714          B)
715 -- Runtime Function: _Decimal32 __bid_addsd3 (_Decimal32 A, _Decimal32
716          B)
717 -- Runtime Function: _Decimal64 __dpd_adddd3 (_Decimal64 A, _Decimal64
718          B)
719 -- Runtime Function: _Decimal64 __bid_adddd3 (_Decimal64 A, _Decimal64
720          B)
721 -- Runtime Function: _Decimal128 __dpd_addtd3 (_Decimal128 A,
722          _Decimal128 B)
723 -- Runtime Function: _Decimal128 __bid_addtd3 (_Decimal128 A,
724          _Decimal128 B)
725     These functions return the sum of A and B.
726
727 -- Runtime Function: _Decimal32 __dpd_subsd3 (_Decimal32 A, _Decimal32
728          B)
729 -- Runtime Function: _Decimal32 __bid_subsd3 (_Decimal32 A, _Decimal32
730          B)
731 -- Runtime Function: _Decimal64 __dpd_subdd3 (_Decimal64 A, _Decimal64
732          B)
733 -- Runtime Function: _Decimal64 __bid_subdd3 (_Decimal64 A, _Decimal64
734          B)
735 -- Runtime Function: _Decimal128 __dpd_subtd3 (_Decimal128 A,
736          _Decimal128 B)
737 -- Runtime Function: _Decimal128 __bid_subtd3 (_Decimal128 A,
738          _Decimal128 B)
739     These functions return the difference between B and A; that is,
740     A - B.
741
742 -- Runtime Function: _Decimal32 __dpd_mulsd3 (_Decimal32 A, _Decimal32
743          B)
744 -- Runtime Function: _Decimal32 __bid_mulsd3 (_Decimal32 A, _Decimal32
745          B)
746 -- Runtime Function: _Decimal64 __dpd_muldd3 (_Decimal64 A, _Decimal64
747          B)
748 -- Runtime Function: _Decimal64 __bid_muldd3 (_Decimal64 A, _Decimal64
749          B)
750 -- Runtime Function: _Decimal128 __dpd_multd3 (_Decimal128 A,
751          _Decimal128 B)
752 -- Runtime Function: _Decimal128 __bid_multd3 (_Decimal128 A,
753          _Decimal128 B)
754     These functions return the product of A and B.
755
756 -- Runtime Function: _Decimal32 __dpd_divsd3 (_Decimal32 A, _Decimal32
757          B)
758 -- Runtime Function: _Decimal32 __bid_divsd3 (_Decimal32 A, _Decimal32
759          B)
760 -- Runtime Function: _Decimal64 __dpd_divdd3 (_Decimal64 A, _Decimal64
761          B)
762 -- Runtime Function: _Decimal64 __bid_divdd3 (_Decimal64 A, _Decimal64
763          B)
764 -- Runtime Function: _Decimal128 __dpd_divtd3 (_Decimal128 A,
765          _Decimal128 B)
766 -- Runtime Function: _Decimal128 __bid_divtd3 (_Decimal128 A,
767          _Decimal128 B)
768     These functions return the quotient of A and B; that is, A / B.
769
770 -- Runtime Function: _Decimal32 __dpd_negsd2 (_Decimal32 A)
771 -- Runtime Function: _Decimal32 __bid_negsd2 (_Decimal32 A)
772 -- Runtime Function: _Decimal64 __dpd_negdd2 (_Decimal64 A)
773 -- Runtime Function: _Decimal64 __bid_negdd2 (_Decimal64 A)
774 -- Runtime Function: _Decimal128 __dpd_negtd2 (_Decimal128 A)
775 -- Runtime Function: _Decimal128 __bid_negtd2 (_Decimal128 A)
776     These functions return the negation of A.  They simply flip the
777     sign bit, so they can produce negative zero and negative NaN.
778
7794.3.2 Conversion functions
780--------------------------
781
782 -- Runtime Function: _Decimal64 __dpd_extendsddd2 (_Decimal32 A)
783 -- Runtime Function: _Decimal64 __bid_extendsddd2 (_Decimal32 A)
784 -- Runtime Function: _Decimal128 __dpd_extendsdtd2 (_Decimal32 A)
785 -- Runtime Function: _Decimal128 __bid_extendsdtd2 (_Decimal32 A)
786 -- Runtime Function: _Decimal128 __dpd_extendddtd2 (_Decimal64 A)
787 -- Runtime Function: _Decimal128 __bid_extendddtd2 (_Decimal64 A)
788 -- Runtime Function: _Decimal32 __dpd_truncddsd2 (_Decimal64 A)
789 -- Runtime Function: _Decimal32 __bid_truncddsd2 (_Decimal64 A)
790 -- Runtime Function: _Decimal32 __dpd_trunctdsd2 (_Decimal128 A)
791 -- Runtime Function: _Decimal32 __bid_trunctdsd2 (_Decimal128 A)
792 -- Runtime Function: _Decimal64 __dpd_trunctddd2 (_Decimal128 A)
793 -- Runtime Function: _Decimal64 __bid_trunctddd2 (_Decimal128 A)
794     These functions convert the value A from one decimal floating type
795     to another.
796
797 -- Runtime Function: _Decimal64 __dpd_extendsfdd (float A)
798 -- Runtime Function: _Decimal64 __bid_extendsfdd (float A)
799 -- Runtime Function: _Decimal128 __dpd_extendsftd (float A)
800 -- Runtime Function: _Decimal128 __bid_extendsftd (float A)
801 -- Runtime Function: _Decimal128 __dpd_extenddftd (double A)
802 -- Runtime Function: _Decimal128 __bid_extenddftd (double A)
803 -- Runtime Function: _Decimal128 __dpd_extendxftd (long double A)
804 -- Runtime Function: _Decimal128 __bid_extendxftd (long double A)
805 -- Runtime Function: _Decimal32 __dpd_truncdfsd (double A)
806 -- Runtime Function: _Decimal32 __bid_truncdfsd (double A)
807 -- Runtime Function: _Decimal32 __dpd_truncxfsd (long double A)
808 -- Runtime Function: _Decimal32 __bid_truncxfsd (long double A)
809 -- Runtime Function: _Decimal32 __dpd_trunctfsd (long double A)
810 -- Runtime Function: _Decimal32 __bid_trunctfsd (long double A)
811 -- Runtime Function: _Decimal64 __dpd_truncxfdd (long double A)
812 -- Runtime Function: _Decimal64 __bid_truncxfdd (long double A)
813 -- Runtime Function: _Decimal64 __dpd_trunctfdd (long double A)
814 -- Runtime Function: _Decimal64 __bid_trunctfdd (long double A)
815     These functions convert the value of A from a binary floating type
816     to a decimal floating type of a different size.
817
818 -- Runtime Function: float __dpd_truncddsf (_Decimal64 A)
819 -- Runtime Function: float __bid_truncddsf (_Decimal64 A)
820 -- Runtime Function: float __dpd_trunctdsf (_Decimal128 A)
821 -- Runtime Function: float __bid_trunctdsf (_Decimal128 A)
822 -- Runtime Function: double __dpd_extendsddf (_Decimal32 A)
823 -- Runtime Function: double __bid_extendsddf (_Decimal32 A)
824 -- Runtime Function: double __dpd_trunctddf (_Decimal128 A)
825 -- Runtime Function: double __bid_trunctddf (_Decimal128 A)
826 -- Runtime Function: long double __dpd_extendsdxf (_Decimal32 A)
827 -- Runtime Function: long double __bid_extendsdxf (_Decimal32 A)
828 -- Runtime Function: long double __dpd_extendddxf (_Decimal64 A)
829 -- Runtime Function: long double __bid_extendddxf (_Decimal64 A)
830 -- Runtime Function: long double __dpd_trunctdxf (_Decimal128 A)
831 -- Runtime Function: long double __bid_trunctdxf (_Decimal128 A)
832 -- Runtime Function: long double __dpd_extendsdtf (_Decimal32 A)
833 -- Runtime Function: long double __bid_extendsdtf (_Decimal32 A)
834 -- Runtime Function: long double __dpd_extendddtf (_Decimal64 A)
835 -- Runtime Function: long double __bid_extendddtf (_Decimal64 A)
836     These functions convert the value of A from a decimal floating type
837     to a binary floating type of a different size.
838
839 -- Runtime Function: _Decimal32 __dpd_extendsfsd (float A)
840 -- Runtime Function: _Decimal32 __bid_extendsfsd (float A)
841 -- Runtime Function: _Decimal64 __dpd_extenddfdd (double A)
842 -- Runtime Function: _Decimal64 __bid_extenddfdd (double A)
843 -- Runtime Function: _Decimal128 __dpd_extendtftd (long double A)
844 -- Runtime Function: _Decimal128 __bid_extendtftd (long double A)
845 -- Runtime Function: float __dpd_truncsdsf (_Decimal32 A)
846 -- Runtime Function: float __bid_truncsdsf (_Decimal32 A)
847 -- Runtime Function: double __dpd_truncdddf (_Decimal64 A)
848 -- Runtime Function: double __bid_truncdddf (_Decimal64 A)
849 -- Runtime Function: long double __dpd_trunctdtf (_Decimal128 A)
850 -- Runtime Function: long double __bid_trunctdtf (_Decimal128 A)
851     These functions convert the value of A between decimal and binary
852     floating types of the same size.
853
854 -- Runtime Function: int __dpd_fixsdsi (_Decimal32 A)
855 -- Runtime Function: int __bid_fixsdsi (_Decimal32 A)
856 -- Runtime Function: int __dpd_fixddsi (_Decimal64 A)
857 -- Runtime Function: int __bid_fixddsi (_Decimal64 A)
858 -- Runtime Function: int __dpd_fixtdsi (_Decimal128 A)
859 -- Runtime Function: int __bid_fixtdsi (_Decimal128 A)
860     These functions convert A to a signed integer.
861
862 -- Runtime Function: long __dpd_fixsddi (_Decimal32 A)
863 -- Runtime Function: long __bid_fixsddi (_Decimal32 A)
864 -- Runtime Function: long __dpd_fixdddi (_Decimal64 A)
865 -- Runtime Function: long __bid_fixdddi (_Decimal64 A)
866 -- Runtime Function: long __dpd_fixtddi (_Decimal128 A)
867 -- Runtime Function: long __bid_fixtddi (_Decimal128 A)
868     These functions convert A to a signed long.
869
870 -- Runtime Function: unsigned int __dpd_fixunssdsi (_Decimal32 A)
871 -- Runtime Function: unsigned int __bid_fixunssdsi (_Decimal32 A)
872 -- Runtime Function: unsigned int __dpd_fixunsddsi (_Decimal64 A)
873 -- Runtime Function: unsigned int __bid_fixunsddsi (_Decimal64 A)
874 -- Runtime Function: unsigned int __dpd_fixunstdsi (_Decimal128 A)
875 -- Runtime Function: unsigned int __bid_fixunstdsi (_Decimal128 A)
876     These functions convert A to an unsigned integer.  Negative values
877     all become zero.
878
879 -- Runtime Function: unsigned long __dpd_fixunssddi (_Decimal32 A)
880 -- Runtime Function: unsigned long __bid_fixunssddi (_Decimal32 A)
881 -- Runtime Function: unsigned long __dpd_fixunsdddi (_Decimal64 A)
882 -- Runtime Function: unsigned long __bid_fixunsdddi (_Decimal64 A)
883 -- Runtime Function: unsigned long __dpd_fixunstddi (_Decimal128 A)
884 -- Runtime Function: unsigned long __bid_fixunstddi (_Decimal128 A)
885     These functions convert A to an unsigned long.  Negative values
886     all become zero.
887
888 -- Runtime Function: _Decimal32 __dpd_floatsisd (int I)
889 -- Runtime Function: _Decimal32 __bid_floatsisd (int I)
890 -- Runtime Function: _Decimal64 __dpd_floatsidd (int I)
891 -- Runtime Function: _Decimal64 __bid_floatsidd (int I)
892 -- Runtime Function: _Decimal128 __dpd_floatsitd (int I)
893 -- Runtime Function: _Decimal128 __bid_floatsitd (int I)
894     These functions convert I, a signed integer, to decimal floating
895     point.
896
897 -- Runtime Function: _Decimal32 __dpd_floatdisd (long I)
898 -- Runtime Function: _Decimal32 __bid_floatdisd (long I)
899 -- Runtime Function: _Decimal64 __dpd_floatdidd (long I)
900 -- Runtime Function: _Decimal64 __bid_floatdidd (long I)
901 -- Runtime Function: _Decimal128 __dpd_floatditd (long I)
902 -- Runtime Function: _Decimal128 __bid_floatditd (long I)
903     These functions convert I, a signed long, to decimal floating
904     point.
905
906 -- Runtime Function: _Decimal32 __dpd_floatunssisd (unsigned int I)
907 -- Runtime Function: _Decimal32 __bid_floatunssisd (unsigned int I)
908 -- Runtime Function: _Decimal64 __dpd_floatunssidd (unsigned int I)
909 -- Runtime Function: _Decimal64 __bid_floatunssidd (unsigned int I)
910 -- Runtime Function: _Decimal128 __dpd_floatunssitd (unsigned int I)
911 -- Runtime Function: _Decimal128 __bid_floatunssitd (unsigned int I)
912     These functions convert I, an unsigned integer, to decimal
913     floating point.
914
915 -- Runtime Function: _Decimal32 __dpd_floatunsdisd (unsigned long I)
916 -- Runtime Function: _Decimal32 __bid_floatunsdisd (unsigned long I)
917 -- Runtime Function: _Decimal64 __dpd_floatunsdidd (unsigned long I)
918 -- Runtime Function: _Decimal64 __bid_floatunsdidd (unsigned long I)
919 -- Runtime Function: _Decimal128 __dpd_floatunsditd (unsigned long I)
920 -- Runtime Function: _Decimal128 __bid_floatunsditd (unsigned long I)
921     These functions convert I, an unsigned long, to decimal floating
922     point.
923
9244.3.3 Comparison functions
925--------------------------
926
927 -- Runtime Function: int __dpd_unordsd2 (_Decimal32 A, _Decimal32 B)
928 -- Runtime Function: int __bid_unordsd2 (_Decimal32 A, _Decimal32 B)
929 -- Runtime Function: int __dpd_unorddd2 (_Decimal64 A, _Decimal64 B)
930 -- Runtime Function: int __bid_unorddd2 (_Decimal64 A, _Decimal64 B)
931 -- Runtime Function: int __dpd_unordtd2 (_Decimal128 A, _Decimal128 B)
932 -- Runtime Function: int __bid_unordtd2 (_Decimal128 A, _Decimal128 B)
933     These functions return a nonzero value if either argument is NaN,
934     otherwise 0.
935
936 There is also a complete group of higher level functions which
937correspond directly to comparison operators.  They implement the ISO C
938semantics for floating-point comparisons, taking NaN into account.  Pay
939careful attention to the return values defined for each set.  Under the
940hood, all of these routines are implemented as
941
942       if (__bid_unordXd2 (a, b))
943         return E;
944       return __bid_cmpXd2 (a, b);
945
946where E is a constant chosen to give the proper behavior for NaN.
947Thus, the meaning of the return value is different for each set.  Do
948not rely on this implementation; only the semantics documented below
949are guaranteed.
950
951 -- Runtime Function: int __dpd_eqsd2 (_Decimal32 A, _Decimal32 B)
952 -- Runtime Function: int __bid_eqsd2 (_Decimal32 A, _Decimal32 B)
953 -- Runtime Function: int __dpd_eqdd2 (_Decimal64 A, _Decimal64 B)
954 -- Runtime Function: int __bid_eqdd2 (_Decimal64 A, _Decimal64 B)
955 -- Runtime Function: int __dpd_eqtd2 (_Decimal128 A, _Decimal128 B)
956 -- Runtime Function: int __bid_eqtd2 (_Decimal128 A, _Decimal128 B)
957     These functions return zero if neither argument is NaN, and A and
958     B are equal.
959
960 -- Runtime Function: int __dpd_nesd2 (_Decimal32 A, _Decimal32 B)
961 -- Runtime Function: int __bid_nesd2 (_Decimal32 A, _Decimal32 B)
962 -- Runtime Function: int __dpd_nedd2 (_Decimal64 A, _Decimal64 B)
963 -- Runtime Function: int __bid_nedd2 (_Decimal64 A, _Decimal64 B)
964 -- Runtime Function: int __dpd_netd2 (_Decimal128 A, _Decimal128 B)
965 -- Runtime Function: int __bid_netd2 (_Decimal128 A, _Decimal128 B)
966     These functions return a nonzero value if either argument is NaN,
967     or if A and B are unequal.
968
969 -- Runtime Function: int __dpd_gesd2 (_Decimal32 A, _Decimal32 B)
970 -- Runtime Function: int __bid_gesd2 (_Decimal32 A, _Decimal32 B)
971 -- Runtime Function: int __dpd_gedd2 (_Decimal64 A, _Decimal64 B)
972 -- Runtime Function: int __bid_gedd2 (_Decimal64 A, _Decimal64 B)
973 -- Runtime Function: int __dpd_getd2 (_Decimal128 A, _Decimal128 B)
974 -- Runtime Function: int __bid_getd2 (_Decimal128 A, _Decimal128 B)
975     These functions return a value greater than or equal to zero if
976     neither argument is NaN, and A is greater than or equal to B.
977
978 -- Runtime Function: int __dpd_ltsd2 (_Decimal32 A, _Decimal32 B)
979 -- Runtime Function: int __bid_ltsd2 (_Decimal32 A, _Decimal32 B)
980 -- Runtime Function: int __dpd_ltdd2 (_Decimal64 A, _Decimal64 B)
981 -- Runtime Function: int __bid_ltdd2 (_Decimal64 A, _Decimal64 B)
982 -- Runtime Function: int __dpd_lttd2 (_Decimal128 A, _Decimal128 B)
983 -- Runtime Function: int __bid_lttd2 (_Decimal128 A, _Decimal128 B)
984     These functions return a value less than zero if neither argument
985     is NaN, and A is strictly less than B.
986
987 -- Runtime Function: int __dpd_lesd2 (_Decimal32 A, _Decimal32 B)
988 -- Runtime Function: int __bid_lesd2 (_Decimal32 A, _Decimal32 B)
989 -- Runtime Function: int __dpd_ledd2 (_Decimal64 A, _Decimal64 B)
990 -- Runtime Function: int __bid_ledd2 (_Decimal64 A, _Decimal64 B)
991 -- Runtime Function: int __dpd_letd2 (_Decimal128 A, _Decimal128 B)
992 -- Runtime Function: int __bid_letd2 (_Decimal128 A, _Decimal128 B)
993     These functions return a value less than or equal to zero if
994     neither argument is NaN, and A is less than or equal to B.
995
996 -- Runtime Function: int __dpd_gtsd2 (_Decimal32 A, _Decimal32 B)
997 -- Runtime Function: int __bid_gtsd2 (_Decimal32 A, _Decimal32 B)
998 -- Runtime Function: int __dpd_gtdd2 (_Decimal64 A, _Decimal64 B)
999 -- Runtime Function: int __bid_gtdd2 (_Decimal64 A, _Decimal64 B)
1000 -- Runtime Function: int __dpd_gttd2 (_Decimal128 A, _Decimal128 B)
1001 -- Runtime Function: int __bid_gttd2 (_Decimal128 A, _Decimal128 B)
1002     These functions return a value greater than zero if neither
1003     argument is NaN, and A is strictly greater than B.
1004
1005
1006File: gccint.info,  Node: Fixed-point fractional library routines,  Next: Exception handling routines,  Prev: Decimal float library routines,  Up: Libgcc
1007
10084.4 Routines for fixed-point fractional emulation
1009=================================================
1010
1011The software fixed-point library implements fixed-point fractional
1012arithmetic, and is only activated on selected targets.
1013
1014 For ease of comprehension `fract' is an alias for the `_Fract' type,
1015`accum' an alias for `_Accum', and `sat' an alias for `_Sat'.
1016
1017 For illustrative purposes, in this section the fixed-point fractional
1018type `short fract' is assumed to correspond to machine mode `QQmode';
1019`unsigned short fract' to `UQQmode'; `fract' to `HQmode';
1020`unsigned fract' to `UHQmode'; `long fract' to `SQmode';
1021`unsigned long fract' to `USQmode'; `long long fract' to `DQmode'; and
1022`unsigned long long fract' to `UDQmode'.  Similarly the fixed-point
1023accumulator type `short accum' corresponds to `HAmode';
1024`unsigned short accum' to `UHAmode'; `accum' to `SAmode';
1025`unsigned accum' to `USAmode'; `long accum' to `DAmode';
1026`unsigned long accum' to `UDAmode'; `long long accum' to `TAmode'; and
1027`unsigned long long accum' to `UTAmode'.
1028
10294.4.1 Arithmetic functions
1030--------------------------
1031
1032 -- Runtime Function: short fract __addqq3 (short fract A, short fract
1033          B)
1034 -- Runtime Function: fract __addhq3 (fract A, fract B)
1035 -- Runtime Function: long fract __addsq3 (long fract A, long fract B)
1036 -- Runtime Function: long long fract __adddq3 (long long fract A, long
1037          long fract B)
1038 -- Runtime Function: unsigned short fract __adduqq3 (unsigned short
1039          fract A, unsigned short fract B)
1040 -- Runtime Function: unsigned fract __adduhq3 (unsigned fract A,
1041          unsigned fract B)
1042 -- Runtime Function: unsigned long fract __addusq3 (unsigned long
1043          fract A, unsigned long fract B)
1044 -- Runtime Function: unsigned long long fract __addudq3 (unsigned long
1045          long fract A, unsigned long long fract B)
1046 -- Runtime Function: short accum __addha3 (short accum A, short accum
1047          B)
1048 -- Runtime Function: accum __addsa3 (accum A, accum B)
1049 -- Runtime Function: long accum __addda3 (long accum A, long accum B)
1050 -- Runtime Function: long long accum __addta3 (long long accum A, long
1051          long accum B)
1052 -- Runtime Function: unsigned short accum __adduha3 (unsigned short
1053          accum A, unsigned short accum B)
1054 -- Runtime Function: unsigned accum __addusa3 (unsigned accum A,
1055          unsigned accum B)
1056 -- Runtime Function: unsigned long accum __adduda3 (unsigned long
1057          accum A, unsigned long accum B)
1058 -- Runtime Function: unsigned long long accum __adduta3 (unsigned long
1059          long accum A, unsigned long long accum B)
1060     These functions return the sum of A and B.
1061
1062 -- Runtime Function: short fract __ssaddqq3 (short fract A, short
1063          fract B)
1064 -- Runtime Function: fract __ssaddhq3 (fract A, fract B)
1065 -- Runtime Function: long fract __ssaddsq3 (long fract A, long fract B)
1066 -- Runtime Function: long long fract __ssadddq3 (long long fract A,
1067          long long fract B)
1068 -- Runtime Function: short accum __ssaddha3 (short accum A, short
1069          accum B)
1070 -- Runtime Function: accum __ssaddsa3 (accum A, accum B)
1071 -- Runtime Function: long accum __ssaddda3 (long accum A, long accum B)
1072 -- Runtime Function: long long accum __ssaddta3 (long long accum A,
1073          long long accum B)
1074     These functions return the sum of A and B with signed saturation.
1075
1076 -- Runtime Function: unsigned short fract __usadduqq3 (unsigned short
1077          fract A, unsigned short fract B)
1078 -- Runtime Function: unsigned fract __usadduhq3 (unsigned fract A,
1079          unsigned fract B)
1080 -- Runtime Function: unsigned long fract __usaddusq3 (unsigned long
1081          fract A, unsigned long fract B)
1082 -- Runtime Function: unsigned long long fract __usaddudq3 (unsigned
1083          long long fract A, unsigned long long fract B)
1084 -- Runtime Function: unsigned short accum __usadduha3 (unsigned short
1085          accum A, unsigned short accum B)
1086 -- Runtime Function: unsigned accum __usaddusa3 (unsigned accum A,
1087          unsigned accum B)
1088 -- Runtime Function: unsigned long accum __usadduda3 (unsigned long
1089          accum A, unsigned long accum B)
1090 -- Runtime Function: unsigned long long accum __usadduta3 (unsigned
1091          long long accum A, unsigned long long accum B)
1092     These functions return the sum of A and B with unsigned saturation.
1093
1094 -- Runtime Function: short fract __subqq3 (short fract A, short fract
1095          B)
1096 -- Runtime Function: fract __subhq3 (fract A, fract B)
1097 -- Runtime Function: long fract __subsq3 (long fract A, long fract B)
1098 -- Runtime Function: long long fract __subdq3 (long long fract A, long
1099          long fract B)
1100 -- Runtime Function: unsigned short fract __subuqq3 (unsigned short
1101          fract A, unsigned short fract B)
1102 -- Runtime Function: unsigned fract __subuhq3 (unsigned fract A,
1103          unsigned fract B)
1104 -- Runtime Function: unsigned long fract __subusq3 (unsigned long
1105          fract A, unsigned long fract B)
1106 -- Runtime Function: unsigned long long fract __subudq3 (unsigned long
1107          long fract A, unsigned long long fract B)
1108 -- Runtime Function: short accum __subha3 (short accum A, short accum
1109          B)
1110 -- Runtime Function: accum __subsa3 (accum A, accum B)
1111 -- Runtime Function: long accum __subda3 (long accum A, long accum B)
1112 -- Runtime Function: long long accum __subta3 (long long accum A, long
1113          long accum B)
1114 -- Runtime Function: unsigned short accum __subuha3 (unsigned short
1115          accum A, unsigned short accum B)
1116 -- Runtime Function: unsigned accum __subusa3 (unsigned accum A,
1117          unsigned accum B)
1118 -- Runtime Function: unsigned long accum __subuda3 (unsigned long
1119          accum A, unsigned long accum B)
1120 -- Runtime Function: unsigned long long accum __subuta3 (unsigned long
1121          long accum A, unsigned long long accum B)
1122     These functions return the difference of A and B; that is, `A - B'.
1123
1124 -- Runtime Function: short fract __sssubqq3 (short fract A, short
1125          fract B)
1126 -- Runtime Function: fract __sssubhq3 (fract A, fract B)
1127 -- Runtime Function: long fract __sssubsq3 (long fract A, long fract B)
1128 -- Runtime Function: long long fract __sssubdq3 (long long fract A,
1129          long long fract B)
1130 -- Runtime Function: short accum __sssubha3 (short accum A, short
1131          accum B)
1132 -- Runtime Function: accum __sssubsa3 (accum A, accum B)
1133 -- Runtime Function: long accum __sssubda3 (long accum A, long accum B)
1134 -- Runtime Function: long long accum __sssubta3 (long long accum A,
1135          long long accum B)
1136     These functions return the difference of A and B with signed
1137     saturation;  that is, `A - B'.
1138
1139 -- Runtime Function: unsigned short fract __ussubuqq3 (unsigned short
1140          fract A, unsigned short fract B)
1141 -- Runtime Function: unsigned fract __ussubuhq3 (unsigned fract A,
1142          unsigned fract B)
1143 -- Runtime Function: unsigned long fract __ussubusq3 (unsigned long
1144          fract A, unsigned long fract B)
1145 -- Runtime Function: unsigned long long fract __ussubudq3 (unsigned
1146          long long fract A, unsigned long long fract B)
1147 -- Runtime Function: unsigned short accum __ussubuha3 (unsigned short
1148          accum A, unsigned short accum B)
1149 -- Runtime Function: unsigned accum __ussubusa3 (unsigned accum A,
1150          unsigned accum B)
1151 -- Runtime Function: unsigned long accum __ussubuda3 (unsigned long
1152          accum A, unsigned long accum B)
1153 -- Runtime Function: unsigned long long accum __ussubuta3 (unsigned
1154          long long accum A, unsigned long long accum B)
1155     These functions return the difference of A and B with unsigned
1156     saturation;  that is, `A - B'.
1157
1158 -- Runtime Function: short fract __mulqq3 (short fract A, short fract
1159          B)
1160 -- Runtime Function: fract __mulhq3 (fract A, fract B)
1161 -- Runtime Function: long fract __mulsq3 (long fract A, long fract B)
1162 -- Runtime Function: long long fract __muldq3 (long long fract A, long
1163          long fract B)
1164 -- Runtime Function: unsigned short fract __muluqq3 (unsigned short
1165          fract A, unsigned short fract B)
1166 -- Runtime Function: unsigned fract __muluhq3 (unsigned fract A,
1167          unsigned fract B)
1168 -- Runtime Function: unsigned long fract __mulusq3 (unsigned long
1169          fract A, unsigned long fract B)
1170 -- Runtime Function: unsigned long long fract __muludq3 (unsigned long
1171          long fract A, unsigned long long fract B)
1172 -- Runtime Function: short accum __mulha3 (short accum A, short accum
1173          B)
1174 -- Runtime Function: accum __mulsa3 (accum A, accum B)
1175 -- Runtime Function: long accum __mulda3 (long accum A, long accum B)
1176 -- Runtime Function: long long accum __multa3 (long long accum A, long
1177          long accum B)
1178 -- Runtime Function: unsigned short accum __muluha3 (unsigned short
1179          accum A, unsigned short accum B)
1180 -- Runtime Function: unsigned accum __mulusa3 (unsigned accum A,
1181          unsigned accum B)
1182 -- Runtime Function: unsigned long accum __muluda3 (unsigned long
1183          accum A, unsigned long accum B)
1184 -- Runtime Function: unsigned long long accum __muluta3 (unsigned long
1185          long accum A, unsigned long long accum B)
1186     These functions return the product of A and B.
1187
1188 -- Runtime Function: short fract __ssmulqq3 (short fract A, short
1189          fract B)
1190 -- Runtime Function: fract __ssmulhq3 (fract A, fract B)
1191 -- Runtime Function: long fract __ssmulsq3 (long fract A, long fract B)
1192 -- Runtime Function: long long fract __ssmuldq3 (long long fract A,
1193          long long fract B)
1194 -- Runtime Function: short accum __ssmulha3 (short accum A, short
1195          accum B)
1196 -- Runtime Function: accum __ssmulsa3 (accum A, accum B)
1197 -- Runtime Function: long accum __ssmulda3 (long accum A, long accum B)
1198 -- Runtime Function: long long accum __ssmulta3 (long long accum A,
1199          long long accum B)
1200     These functions return the product of A and B with signed
1201     saturation.
1202
1203 -- Runtime Function: unsigned short fract __usmuluqq3 (unsigned short
1204          fract A, unsigned short fract B)
1205 -- Runtime Function: unsigned fract __usmuluhq3 (unsigned fract A,
1206          unsigned fract B)
1207 -- Runtime Function: unsigned long fract __usmulusq3 (unsigned long
1208          fract A, unsigned long fract B)
1209 -- Runtime Function: unsigned long long fract __usmuludq3 (unsigned
1210          long long fract A, unsigned long long fract B)
1211 -- Runtime Function: unsigned short accum __usmuluha3 (unsigned short
1212          accum A, unsigned short accum B)
1213 -- Runtime Function: unsigned accum __usmulusa3 (unsigned accum A,
1214          unsigned accum B)
1215 -- Runtime Function: unsigned long accum __usmuluda3 (unsigned long
1216          accum A, unsigned long accum B)
1217 -- Runtime Function: unsigned long long accum __usmuluta3 (unsigned
1218          long long accum A, unsigned long long accum B)
1219     These functions return the product of A and B with unsigned
1220     saturation.
1221
1222 -- Runtime Function: short fract __divqq3 (short fract A, short fract
1223          B)
1224 -- Runtime Function: fract __divhq3 (fract A, fract B)
1225 -- Runtime Function: long fract __divsq3 (long fract A, long fract B)
1226 -- Runtime Function: long long fract __divdq3 (long long fract A, long
1227          long fract B)
1228 -- Runtime Function: short accum __divha3 (short accum A, short accum
1229          B)
1230 -- Runtime Function: accum __divsa3 (accum A, accum B)
1231 -- Runtime Function: long accum __divda3 (long accum A, long accum B)
1232 -- Runtime Function: long long accum __divta3 (long long accum A, long
1233          long accum B)
1234     These functions return the quotient of the signed division of A
1235     and B.
1236
1237 -- Runtime Function: unsigned short fract __udivuqq3 (unsigned short
1238          fract A, unsigned short fract B)
1239 -- Runtime Function: unsigned fract __udivuhq3 (unsigned fract A,
1240          unsigned fract B)
1241 -- Runtime Function: unsigned long fract __udivusq3 (unsigned long
1242          fract A, unsigned long fract B)
1243 -- Runtime Function: unsigned long long fract __udivudq3 (unsigned
1244          long long fract A, unsigned long long fract B)
1245 -- Runtime Function: unsigned short accum __udivuha3 (unsigned short
1246          accum A, unsigned short accum B)
1247 -- Runtime Function: unsigned accum __udivusa3 (unsigned accum A,
1248          unsigned accum B)
1249 -- Runtime Function: unsigned long accum __udivuda3 (unsigned long
1250          accum A, unsigned long accum B)
1251 -- Runtime Function: unsigned long long accum __udivuta3 (unsigned
1252          long long accum A, unsigned long long accum B)
1253     These functions return the quotient of the unsigned division of A
1254     and B.
1255
1256 -- Runtime Function: short fract __ssdivqq3 (short fract A, short
1257          fract B)
1258 -- Runtime Function: fract __ssdivhq3 (fract A, fract B)
1259 -- Runtime Function: long fract __ssdivsq3 (long fract A, long fract B)
1260 -- Runtime Function: long long fract __ssdivdq3 (long long fract A,
1261          long long fract B)
1262 -- Runtime Function: short accum __ssdivha3 (short accum A, short
1263          accum B)
1264 -- Runtime Function: accum __ssdivsa3 (accum A, accum B)
1265 -- Runtime Function: long accum __ssdivda3 (long accum A, long accum B)
1266 -- Runtime Function: long long accum __ssdivta3 (long long accum A,
1267          long long accum B)
1268     These functions return the quotient of the signed division of A
1269     and B with signed saturation.
1270
1271 -- Runtime Function: unsigned short fract __usdivuqq3 (unsigned short
1272          fract A, unsigned short fract B)
1273 -- Runtime Function: unsigned fract __usdivuhq3 (unsigned fract A,
1274          unsigned fract B)
1275 -- Runtime Function: unsigned long fract __usdivusq3 (unsigned long
1276          fract A, unsigned long fract B)
1277 -- Runtime Function: unsigned long long fract __usdivudq3 (unsigned
1278          long long fract A, unsigned long long fract B)
1279 -- Runtime Function: unsigned short accum __usdivuha3 (unsigned short
1280          accum A, unsigned short accum B)
1281 -- Runtime Function: unsigned accum __usdivusa3 (unsigned accum A,
1282          unsigned accum B)
1283 -- Runtime Function: unsigned long accum __usdivuda3 (unsigned long
1284          accum A, unsigned long accum B)
1285 -- Runtime Function: unsigned long long accum __usdivuta3 (unsigned
1286          long long accum A, unsigned long long accum B)
1287     These functions return the quotient of the unsigned division of A
1288     and B with unsigned saturation.
1289
1290 -- Runtime Function: short fract __negqq2 (short fract A)
1291 -- Runtime Function: fract __neghq2 (fract A)
1292 -- Runtime Function: long fract __negsq2 (long fract A)
1293 -- Runtime Function: long long fract __negdq2 (long long fract A)
1294 -- Runtime Function: unsigned short fract __neguqq2 (unsigned short
1295          fract A)
1296 -- Runtime Function: unsigned fract __neguhq2 (unsigned fract A)
1297 -- Runtime Function: unsigned long fract __negusq2 (unsigned long
1298          fract A)
1299 -- Runtime Function: unsigned long long fract __negudq2 (unsigned long
1300          long fract A)
1301 -- Runtime Function: short accum __negha2 (short accum A)
1302 -- Runtime Function: accum __negsa2 (accum A)
1303 -- Runtime Function: long accum __negda2 (long accum A)
1304 -- Runtime Function: long long accum __negta2 (long long accum A)
1305 -- Runtime Function: unsigned short accum __neguha2 (unsigned short
1306          accum A)
1307 -- Runtime Function: unsigned accum __negusa2 (unsigned accum A)
1308 -- Runtime Function: unsigned long accum __neguda2 (unsigned long
1309          accum A)
1310 -- Runtime Function: unsigned long long accum __neguta2 (unsigned long
1311          long accum A)
1312     These functions return the negation of A.
1313
1314 -- Runtime Function: short fract __ssnegqq2 (short fract A)
1315 -- Runtime Function: fract __ssneghq2 (fract A)
1316 -- Runtime Function: long fract __ssnegsq2 (long fract A)
1317 -- Runtime Function: long long fract __ssnegdq2 (long long fract A)
1318 -- Runtime Function: short accum __ssnegha2 (short accum A)
1319 -- Runtime Function: accum __ssnegsa2 (accum A)
1320 -- Runtime Function: long accum __ssnegda2 (long accum A)
1321 -- Runtime Function: long long accum __ssnegta2 (long long accum A)
1322     These functions return the negation of A with signed saturation.
1323
1324 -- Runtime Function: unsigned short fract __usneguqq2 (unsigned short
1325          fract A)
1326 -- Runtime Function: unsigned fract __usneguhq2 (unsigned fract A)
1327 -- Runtime Function: unsigned long fract __usnegusq2 (unsigned long
1328          fract A)
1329 -- Runtime Function: unsigned long long fract __usnegudq2 (unsigned
1330          long long fract A)
1331 -- Runtime Function: unsigned short accum __usneguha2 (unsigned short
1332          accum A)
1333 -- Runtime Function: unsigned accum __usnegusa2 (unsigned accum A)
1334 -- Runtime Function: unsigned long accum __usneguda2 (unsigned long
1335          accum A)
1336 -- Runtime Function: unsigned long long accum __usneguta2 (unsigned
1337          long long accum A)
1338     These functions return the negation of A with unsigned saturation.
1339
1340 -- Runtime Function: short fract __ashlqq3 (short fract A, int B)
1341 -- Runtime Function: fract __ashlhq3 (fract A, int B)
1342 -- Runtime Function: long fract __ashlsq3 (long fract A, int B)
1343 -- Runtime Function: long long fract __ashldq3 (long long fract A, int
1344          B)
1345 -- Runtime Function: unsigned short fract __ashluqq3 (unsigned short
1346          fract A, int B)
1347 -- Runtime Function: unsigned fract __ashluhq3 (unsigned fract A, int
1348          B)
1349 -- Runtime Function: unsigned long fract __ashlusq3 (unsigned long
1350          fract A, int B)
1351 -- Runtime Function: unsigned long long fract __ashludq3 (unsigned
1352          long long fract A, int B)
1353 -- Runtime Function: short accum __ashlha3 (short accum A, int B)
1354 -- Runtime Function: accum __ashlsa3 (accum A, int B)
1355 -- Runtime Function: long accum __ashlda3 (long accum A, int B)
1356 -- Runtime Function: long long accum __ashlta3 (long long accum A, int
1357          B)
1358 -- Runtime Function: unsigned short accum __ashluha3 (unsigned short
1359          accum A, int B)
1360 -- Runtime Function: unsigned accum __ashlusa3 (unsigned accum A, int
1361          B)
1362 -- Runtime Function: unsigned long accum __ashluda3 (unsigned long
1363          accum A, int B)
1364 -- Runtime Function: unsigned long long accum __ashluta3 (unsigned
1365          long long accum A, int B)
1366     These functions return the result of shifting A left by B bits.
1367
1368 -- Runtime Function: short fract __ashrqq3 (short fract A, int B)
1369 -- Runtime Function: fract __ashrhq3 (fract A, int B)
1370 -- Runtime Function: long fract __ashrsq3 (long fract A, int B)
1371 -- Runtime Function: long long fract __ashrdq3 (long long fract A, int
1372          B)
1373 -- Runtime Function: short accum __ashrha3 (short accum A, int B)
1374 -- Runtime Function: accum __ashrsa3 (accum A, int B)
1375 -- Runtime Function: long accum __ashrda3 (long accum A, int B)
1376 -- Runtime Function: long long accum __ashrta3 (long long accum A, int
1377          B)
1378     These functions return the result of arithmetically shifting A
1379     right by B bits.
1380
1381 -- Runtime Function: unsigned short fract __lshruqq3 (unsigned short
1382          fract A, int B)
1383 -- Runtime Function: unsigned fract __lshruhq3 (unsigned fract A, int
1384          B)
1385 -- Runtime Function: unsigned long fract __lshrusq3 (unsigned long
1386          fract A, int B)
1387 -- Runtime Function: unsigned long long fract __lshrudq3 (unsigned
1388          long long fract A, int B)
1389 -- Runtime Function: unsigned short accum __lshruha3 (unsigned short
1390          accum A, int B)
1391 -- Runtime Function: unsigned accum __lshrusa3 (unsigned accum A, int
1392          B)
1393 -- Runtime Function: unsigned long accum __lshruda3 (unsigned long
1394          accum A, int B)
1395 -- Runtime Function: unsigned long long accum __lshruta3 (unsigned
1396          long long accum A, int B)
1397     These functions return the result of logically shifting A right by
1398     B bits.
1399
1400 -- Runtime Function: fract __ssashlhq3 (fract A, int B)
1401 -- Runtime Function: long fract __ssashlsq3 (long fract A, int B)
1402 -- Runtime Function: long long fract __ssashldq3 (long long fract A,
1403          int B)
1404 -- Runtime Function: short accum __ssashlha3 (short accum A, int B)
1405 -- Runtime Function: accum __ssashlsa3 (accum A, int B)
1406 -- Runtime Function: long accum __ssashlda3 (long accum A, int B)
1407 -- Runtime Function: long long accum __ssashlta3 (long long accum A,
1408          int B)
1409     These functions return the result of shifting A left by B bits
1410     with signed saturation.
1411
1412 -- Runtime Function: unsigned short fract __usashluqq3 (unsigned short
1413          fract A, int B)
1414 -- Runtime Function: unsigned fract __usashluhq3 (unsigned fract A,
1415          int B)
1416 -- Runtime Function: unsigned long fract __usashlusq3 (unsigned long
1417          fract A, int B)
1418 -- Runtime Function: unsigned long long fract __usashludq3 (unsigned
1419          long long fract A, int B)
1420 -- Runtime Function: unsigned short accum __usashluha3 (unsigned short
1421          accum A, int B)
1422 -- Runtime Function: unsigned accum __usashlusa3 (unsigned accum A,
1423          int B)
1424 -- Runtime Function: unsigned long accum __usashluda3 (unsigned long
1425          accum A, int B)
1426 -- Runtime Function: unsigned long long accum __usashluta3 (unsigned
1427          long long accum A, int B)
1428     These functions return the result of shifting A left by B bits
1429     with unsigned saturation.
1430
14314.4.2 Comparison functions
1432--------------------------
1433
1434The following functions implement fixed-point comparisons.  These
1435functions implement a low-level compare, upon which the higher level
1436comparison operators (such as less than and greater than or equal to)
1437can be constructed.  The returned values lie in the range zero to two,
1438to allow the high-level operators to be implemented by testing the
1439returned result using either signed or unsigned comparison.
1440
1441 -- Runtime Function: int __cmpqq2 (short fract A, short fract B)
1442 -- Runtime Function: int __cmphq2 (fract A, fract B)
1443 -- Runtime Function: int __cmpsq2 (long fract A, long fract B)
1444 -- Runtime Function: int __cmpdq2 (long long fract A, long long fract
1445          B)
1446 -- Runtime Function: int __cmpuqq2 (unsigned short fract A, unsigned
1447          short fract B)
1448 -- Runtime Function: int __cmpuhq2 (unsigned fract A, unsigned fract B)
1449 -- Runtime Function: int __cmpusq2 (unsigned long fract A, unsigned
1450          long fract B)
1451 -- Runtime Function: int __cmpudq2 (unsigned long long fract A,
1452          unsigned long long fract B)
1453 -- Runtime Function: int __cmpha2 (short accum A, short accum B)
1454 -- Runtime Function: int __cmpsa2 (accum A, accum B)
1455 -- Runtime Function: int __cmpda2 (long accum A, long accum B)
1456 -- Runtime Function: int __cmpta2 (long long accum A, long long accum
1457          B)
1458 -- Runtime Function: int __cmpuha2 (unsigned short accum A, unsigned
1459          short accum B)
1460 -- Runtime Function: int __cmpusa2 (unsigned accum A, unsigned accum B)
1461 -- Runtime Function: int __cmpuda2 (unsigned long accum A, unsigned
1462          long accum B)
1463 -- Runtime Function: int __cmputa2 (unsigned long long accum A,
1464          unsigned long long accum B)
1465     These functions perform a signed or unsigned comparison of A and B
1466     (depending on the selected machine mode).  If A is less than B,
1467     they return 0; if A is greater than B, they return 2; and if A and
1468     B are equal they return 1.
1469
14704.4.3 Conversion functions
1471--------------------------
1472
1473 -- Runtime Function: fract __fractqqhq2 (short fract A)
1474 -- Runtime Function: long fract __fractqqsq2 (short fract A)
1475 -- Runtime Function: long long fract __fractqqdq2 (short fract A)
1476 -- Runtime Function: short accum __fractqqha (short fract A)
1477 -- Runtime Function: accum __fractqqsa (short fract A)
1478 -- Runtime Function: long accum __fractqqda (short fract A)
1479 -- Runtime Function: long long accum __fractqqta (short fract A)
1480 -- Runtime Function: unsigned short fract __fractqquqq (short fract A)
1481 -- Runtime Function: unsigned fract __fractqquhq (short fract A)
1482 -- Runtime Function: unsigned long fract __fractqqusq (short fract A)
1483 -- Runtime Function: unsigned long long fract __fractqqudq (short
1484          fract A)
1485 -- Runtime Function: unsigned short accum __fractqquha (short fract A)
1486 -- Runtime Function: unsigned accum __fractqqusa (short fract A)
1487 -- Runtime Function: unsigned long accum __fractqquda (short fract A)
1488 -- Runtime Function: unsigned long long accum __fractqquta (short
1489          fract A)
1490 -- Runtime Function: signed char __fractqqqi (short fract A)
1491 -- Runtime Function: short __fractqqhi (short fract A)
1492 -- Runtime Function: int __fractqqsi (short fract A)
1493 -- Runtime Function: long __fractqqdi (short fract A)
1494 -- Runtime Function: long long __fractqqti (short fract A)
1495 -- Runtime Function: float __fractqqsf (short fract A)
1496 -- Runtime Function: double __fractqqdf (short fract A)
1497 -- Runtime Function: short fract __fracthqqq2 (fract A)
1498 -- Runtime Function: long fract __fracthqsq2 (fract A)
1499 -- Runtime Function: long long fract __fracthqdq2 (fract A)
1500 -- Runtime Function: short accum __fracthqha (fract A)
1501 -- Runtime Function: accum __fracthqsa (fract A)
1502 -- Runtime Function: long accum __fracthqda (fract A)
1503 -- Runtime Function: long long accum __fracthqta (fract A)
1504 -- Runtime Function: unsigned short fract __fracthquqq (fract A)
1505 -- Runtime Function: unsigned fract __fracthquhq (fract A)
1506 -- Runtime Function: unsigned long fract __fracthqusq (fract A)
1507 -- Runtime Function: unsigned long long fract __fracthqudq (fract A)
1508 -- Runtime Function: unsigned short accum __fracthquha (fract A)
1509 -- Runtime Function: unsigned accum __fracthqusa (fract A)
1510 -- Runtime Function: unsigned long accum __fracthquda (fract A)
1511 -- Runtime Function: unsigned long long accum __fracthquta (fract A)
1512 -- Runtime Function: signed char __fracthqqi (fract A)
1513 -- Runtime Function: short __fracthqhi (fract A)
1514 -- Runtime Function: int __fracthqsi (fract A)
1515 -- Runtime Function: long __fracthqdi (fract A)
1516 -- Runtime Function: long long __fracthqti (fract A)
1517 -- Runtime Function: float __fracthqsf (fract A)
1518 -- Runtime Function: double __fracthqdf (fract A)
1519 -- Runtime Function: short fract __fractsqqq2 (long fract A)
1520 -- Runtime Function: fract __fractsqhq2 (long fract A)
1521 -- Runtime Function: long long fract __fractsqdq2 (long fract A)
1522 -- Runtime Function: short accum __fractsqha (long fract A)
1523 -- Runtime Function: accum __fractsqsa (long fract A)
1524 -- Runtime Function: long accum __fractsqda (long fract A)
1525 -- Runtime Function: long long accum __fractsqta (long fract A)
1526 -- Runtime Function: unsigned short fract __fractsquqq (long fract A)
1527 -- Runtime Function: unsigned fract __fractsquhq (long fract A)
1528 -- Runtime Function: unsigned long fract __fractsqusq (long fract A)
1529 -- Runtime Function: unsigned long long fract __fractsqudq (long fract
1530          A)
1531 -- Runtime Function: unsigned short accum __fractsquha (long fract A)
1532 -- Runtime Function: unsigned accum __fractsqusa (long fract A)
1533 -- Runtime Function: unsigned long accum __fractsquda (long fract A)
1534 -- Runtime Function: unsigned long long accum __fractsquta (long fract
1535          A)
1536 -- Runtime Function: signed char __fractsqqi (long fract A)
1537 -- Runtime Function: short __fractsqhi (long fract A)
1538 -- Runtime Function: int __fractsqsi (long fract A)
1539 -- Runtime Function: long __fractsqdi (long fract A)
1540 -- Runtime Function: long long __fractsqti (long fract A)
1541 -- Runtime Function: float __fractsqsf (long fract A)
1542 -- Runtime Function: double __fractsqdf (long fract A)
1543 -- Runtime Function: short fract __fractdqqq2 (long long fract A)
1544 -- Runtime Function: fract __fractdqhq2 (long long fract A)
1545 -- Runtime Function: long fract __fractdqsq2 (long long fract A)
1546 -- Runtime Function: short accum __fractdqha (long long fract A)
1547 -- Runtime Function: accum __fractdqsa (long long fract A)
1548 -- Runtime Function: long accum __fractdqda (long long fract A)
1549 -- Runtime Function: long long accum __fractdqta (long long fract A)
1550 -- Runtime Function: unsigned short fract __fractdquqq (long long
1551          fract A)
1552 -- Runtime Function: unsigned fract __fractdquhq (long long fract A)
1553 -- Runtime Function: unsigned long fract __fractdqusq (long long fract
1554          A)
1555 -- Runtime Function: unsigned long long fract __fractdqudq (long long
1556          fract A)
1557 -- Runtime Function: unsigned short accum __fractdquha (long long
1558          fract A)
1559 -- Runtime Function: unsigned accum __fractdqusa (long long fract A)
1560 -- Runtime Function: unsigned long accum __fractdquda (long long fract
1561          A)
1562 -- Runtime Function: unsigned long long accum __fractdquta (long long
1563          fract A)
1564 -- Runtime Function: signed char __fractdqqi (long long fract A)
1565 -- Runtime Function: short __fractdqhi (long long fract A)
1566 -- Runtime Function: int __fractdqsi (long long fract A)
1567 -- Runtime Function: long __fractdqdi (long long fract A)
1568 -- Runtime Function: long long __fractdqti (long long fract A)
1569 -- Runtime Function: float __fractdqsf (long long fract A)
1570 -- Runtime Function: double __fractdqdf (long long fract A)
1571 -- Runtime Function: short fract __fracthaqq (short accum A)
1572 -- Runtime Function: fract __fracthahq (short accum A)
1573 -- Runtime Function: long fract __fracthasq (short accum A)
1574 -- Runtime Function: long long fract __fracthadq (short accum A)
1575 -- Runtime Function: accum __fracthasa2 (short accum A)
1576 -- Runtime Function: long accum __fracthada2 (short accum A)
1577 -- Runtime Function: long long accum __fracthata2 (short accum A)
1578 -- Runtime Function: unsigned short fract __fracthauqq (short accum A)
1579 -- Runtime Function: unsigned fract __fracthauhq (short accum A)
1580 -- Runtime Function: unsigned long fract __fracthausq (short accum A)
1581 -- Runtime Function: unsigned long long fract __fracthaudq (short
1582          accum A)
1583 -- Runtime Function: unsigned short accum __fracthauha (short accum A)
1584 -- Runtime Function: unsigned accum __fracthausa (short accum A)
1585 -- Runtime Function: unsigned long accum __fracthauda (short accum A)
1586 -- Runtime Function: unsigned long long accum __fracthauta (short
1587          accum A)
1588 -- Runtime Function: signed char __fracthaqi (short accum A)
1589 -- Runtime Function: short __fracthahi (short accum A)
1590 -- Runtime Function: int __fracthasi (short accum A)
1591 -- Runtime Function: long __fracthadi (short accum A)
1592 -- Runtime Function: long long __fracthati (short accum A)
1593 -- Runtime Function: float __fracthasf (short accum A)
1594 -- Runtime Function: double __fracthadf (short accum A)
1595 -- Runtime Function: short fract __fractsaqq (accum A)
1596 -- Runtime Function: fract __fractsahq (accum A)
1597 -- Runtime Function: long fract __fractsasq (accum A)
1598 -- Runtime Function: long long fract __fractsadq (accum A)
1599 -- Runtime Function: short accum __fractsaha2 (accum A)
1600 -- Runtime Function: long accum __fractsada2 (accum A)
1601 -- Runtime Function: long long accum __fractsata2 (accum A)
1602 -- Runtime Function: unsigned short fract __fractsauqq (accum A)
1603 -- Runtime Function: unsigned fract __fractsauhq (accum A)
1604 -- Runtime Function: unsigned long fract __fractsausq (accum A)
1605 -- Runtime Function: unsigned long long fract __fractsaudq (accum A)
1606 -- Runtime Function: unsigned short accum __fractsauha (accum A)
1607 -- Runtime Function: unsigned accum __fractsausa (accum A)
1608 -- Runtime Function: unsigned long accum __fractsauda (accum A)
1609 -- Runtime Function: unsigned long long accum __fractsauta (accum A)
1610 -- Runtime Function: signed char __fractsaqi (accum A)
1611 -- Runtime Function: short __fractsahi (accum A)
1612 -- Runtime Function: int __fractsasi (accum A)
1613 -- Runtime Function: long __fractsadi (accum A)
1614 -- Runtime Function: long long __fractsati (accum A)
1615 -- Runtime Function: float __fractsasf (accum A)
1616 -- Runtime Function: double __fractsadf (accum A)
1617 -- Runtime Function: short fract __fractdaqq (long accum A)
1618 -- Runtime Function: fract __fractdahq (long accum A)
1619 -- Runtime Function: long fract __fractdasq (long accum A)
1620 -- Runtime Function: long long fract __fractdadq (long accum A)
1621 -- Runtime Function: short accum __fractdaha2 (long accum A)
1622 -- Runtime Function: accum __fractdasa2 (long accum A)
1623 -- Runtime Function: long long accum __fractdata2 (long accum A)
1624 -- Runtime Function: unsigned short fract __fractdauqq (long accum A)
1625 -- Runtime Function: unsigned fract __fractdauhq (long accum A)
1626 -- Runtime Function: unsigned long fract __fractdausq (long accum A)
1627 -- Runtime Function: unsigned long long fract __fractdaudq (long accum
1628          A)
1629 -- Runtime Function: unsigned short accum __fractdauha (long accum A)
1630 -- Runtime Function: unsigned accum __fractdausa (long accum A)
1631 -- Runtime Function: unsigned long accum __fractdauda (long accum A)
1632 -- Runtime Function: unsigned long long accum __fractdauta (long accum
1633          A)
1634 -- Runtime Function: signed char __fractdaqi (long accum A)
1635 -- Runtime Function: short __fractdahi (long accum A)
1636 -- Runtime Function: int __fractdasi (long accum A)
1637 -- Runtime Function: long __fractdadi (long accum A)
1638 -- Runtime Function: long long __fractdati (long accum A)
1639 -- Runtime Function: float __fractdasf (long accum A)
1640 -- Runtime Function: double __fractdadf (long accum A)
1641 -- Runtime Function: short fract __fracttaqq (long long accum A)
1642 -- Runtime Function: fract __fracttahq (long long accum A)
1643 -- Runtime Function: long fract __fracttasq (long long accum A)
1644 -- Runtime Function: long long fract __fracttadq (long long accum A)
1645 -- Runtime Function: short accum __fracttaha2 (long long accum A)
1646 -- Runtime Function: accum __fracttasa2 (long long accum A)
1647 -- Runtime Function: long accum __fracttada2 (long long accum A)
1648 -- Runtime Function: unsigned short fract __fracttauqq (long long
1649          accum A)
1650 -- Runtime Function: unsigned fract __fracttauhq (long long accum A)
1651 -- Runtime Function: unsigned long fract __fracttausq (long long accum
1652          A)
1653 -- Runtime Function: unsigned long long fract __fracttaudq (long long
1654          accum A)
1655 -- Runtime Function: unsigned short accum __fracttauha (long long
1656          accum A)
1657 -- Runtime Function: unsigned accum __fracttausa (long long accum A)
1658 -- Runtime Function: unsigned long accum __fracttauda (long long accum
1659          A)
1660 -- Runtime Function: unsigned long long accum __fracttauta (long long
1661          accum A)
1662 -- Runtime Function: signed char __fracttaqi (long long accum A)
1663 -- Runtime Function: short __fracttahi (long long accum A)
1664 -- Runtime Function: int __fracttasi (long long accum A)
1665 -- Runtime Function: long __fracttadi (long long accum A)
1666 -- Runtime Function: long long __fracttati (long long accum A)
1667 -- Runtime Function: float __fracttasf (long long accum A)
1668 -- Runtime Function: double __fracttadf (long long accum A)
1669 -- Runtime Function: short fract __fractuqqqq (unsigned short fract A)
1670 -- Runtime Function: fract __fractuqqhq (unsigned short fract A)
1671 -- Runtime Function: long fract __fractuqqsq (unsigned short fract A)
1672 -- Runtime Function: long long fract __fractuqqdq (unsigned short
1673          fract A)
1674 -- Runtime Function: short accum __fractuqqha (unsigned short fract A)
1675 -- Runtime Function: accum __fractuqqsa (unsigned short fract A)
1676 -- Runtime Function: long accum __fractuqqda (unsigned short fract A)
1677 -- Runtime Function: long long accum __fractuqqta (unsigned short
1678          fract A)
1679 -- Runtime Function: unsigned fract __fractuqquhq2 (unsigned short
1680          fract A)
1681 -- Runtime Function: unsigned long fract __fractuqqusq2 (unsigned
1682          short fract A)
1683 -- Runtime Function: unsigned long long fract __fractuqqudq2 (unsigned
1684          short fract A)
1685 -- Runtime Function: unsigned short accum __fractuqquha (unsigned
1686          short fract A)
1687 -- Runtime Function: unsigned accum __fractuqqusa (unsigned short
1688          fract A)
1689 -- Runtime Function: unsigned long accum __fractuqquda (unsigned short
1690          fract A)
1691 -- Runtime Function: unsigned long long accum __fractuqquta (unsigned
1692          short fract A)
1693 -- Runtime Function: signed char __fractuqqqi (unsigned short fract A)
1694 -- Runtime Function: short __fractuqqhi (unsigned short fract A)
1695 -- Runtime Function: int __fractuqqsi (unsigned short fract A)
1696 -- Runtime Function: long __fractuqqdi (unsigned short fract A)
1697 -- Runtime Function: long long __fractuqqti (unsigned short fract A)
1698 -- Runtime Function: float __fractuqqsf (unsigned short fract A)
1699 -- Runtime Function: double __fractuqqdf (unsigned short fract A)
1700 -- Runtime Function: short fract __fractuhqqq (unsigned fract A)
1701 -- Runtime Function: fract __fractuhqhq (unsigned fract A)
1702 -- Runtime Function: long fract __fractuhqsq (unsigned fract A)
1703 -- Runtime Function: long long fract __fractuhqdq (unsigned fract A)
1704 -- Runtime Function: short accum __fractuhqha (unsigned fract A)
1705 -- Runtime Function: accum __fractuhqsa (unsigned fract A)
1706 -- Runtime Function: long accum __fractuhqda (unsigned fract A)
1707 -- Runtime Function: long long accum __fractuhqta (unsigned fract A)
1708 -- Runtime Function: unsigned short fract __fractuhquqq2 (unsigned
1709          fract A)
1710 -- Runtime Function: unsigned long fract __fractuhqusq2 (unsigned
1711          fract A)
1712 -- Runtime Function: unsigned long long fract __fractuhqudq2 (unsigned
1713          fract A)
1714 -- Runtime Function: unsigned short accum __fractuhquha (unsigned
1715          fract A)
1716 -- Runtime Function: unsigned accum __fractuhqusa (unsigned fract A)
1717 -- Runtime Function: unsigned long accum __fractuhquda (unsigned fract
1718          A)
1719 -- Runtime Function: unsigned long long accum __fractuhquta (unsigned
1720          fract A)
1721 -- Runtime Function: signed char __fractuhqqi (unsigned fract A)
1722 -- Runtime Function: short __fractuhqhi (unsigned fract A)
1723 -- Runtime Function: int __fractuhqsi (unsigned fract A)
1724 -- Runtime Function: long __fractuhqdi (unsigned fract A)
1725 -- Runtime Function: long long __fractuhqti (unsigned fract A)
1726 -- Runtime Function: float __fractuhqsf (unsigned fract A)
1727 -- Runtime Function: double __fractuhqdf (unsigned fract A)
1728 -- Runtime Function: short fract __fractusqqq (unsigned long fract A)
1729 -- Runtime Function: fract __fractusqhq (unsigned long fract A)
1730 -- Runtime Function: long fract __fractusqsq (unsigned long fract A)
1731 -- Runtime Function: long long fract __fractusqdq (unsigned long fract
1732          A)
1733 -- Runtime Function: short accum __fractusqha (unsigned long fract A)
1734 -- Runtime Function: accum __fractusqsa (unsigned long fract A)
1735 -- Runtime Function: long accum __fractusqda (unsigned long fract A)
1736 -- Runtime Function: long long accum __fractusqta (unsigned long fract
1737          A)
1738 -- Runtime Function: unsigned short fract __fractusquqq2 (unsigned
1739          long fract A)
1740 -- Runtime Function: unsigned fract __fractusquhq2 (unsigned long
1741          fract A)
1742 -- Runtime Function: unsigned long long fract __fractusqudq2 (unsigned
1743          long fract A)
1744 -- Runtime Function: unsigned short accum __fractusquha (unsigned long
1745          fract A)
1746 -- Runtime Function: unsigned accum __fractusqusa (unsigned long fract
1747          A)
1748 -- Runtime Function: unsigned long accum __fractusquda (unsigned long
1749          fract A)
1750 -- Runtime Function: unsigned long long accum __fractusquta (unsigned
1751          long fract A)
1752 -- Runtime Function: signed char __fractusqqi (unsigned long fract A)
1753 -- Runtime Function: short __fractusqhi (unsigned long fract A)
1754 -- Runtime Function: int __fractusqsi (unsigned long fract A)
1755 -- Runtime Function: long __fractusqdi (unsigned long fract A)
1756 -- Runtime Function: long long __fractusqti (unsigned long fract A)
1757 -- Runtime Function: float __fractusqsf (unsigned long fract A)
1758 -- Runtime Function: double __fractusqdf (unsigned long fract A)
1759 -- Runtime Function: short fract __fractudqqq (unsigned long long
1760          fract A)
1761 -- Runtime Function: fract __fractudqhq (unsigned long long fract A)
1762 -- Runtime Function: long fract __fractudqsq (unsigned long long fract
1763          A)
1764 -- Runtime Function: long long fract __fractudqdq (unsigned long long
1765          fract A)
1766 -- Runtime Function: short accum __fractudqha (unsigned long long
1767          fract A)
1768 -- Runtime Function: accum __fractudqsa (unsigned long long fract A)
1769 -- Runtime Function: long accum __fractudqda (unsigned long long fract
1770          A)
1771 -- Runtime Function: long long accum __fractudqta (unsigned long long
1772          fract A)
1773 -- Runtime Function: unsigned short fract __fractudquqq2 (unsigned
1774          long long fract A)
1775 -- Runtime Function: unsigned fract __fractudquhq2 (unsigned long long
1776          fract A)
1777 -- Runtime Function: unsigned long fract __fractudqusq2 (unsigned long
1778          long fract A)
1779 -- Runtime Function: unsigned short accum __fractudquha (unsigned long
1780          long fract A)
1781 -- Runtime Function: unsigned accum __fractudqusa (unsigned long long
1782          fract A)
1783 -- Runtime Function: unsigned long accum __fractudquda (unsigned long
1784          long fract A)
1785 -- Runtime Function: unsigned long long accum __fractudquta (unsigned
1786          long long fract A)
1787 -- Runtime Function: signed char __fractudqqi (unsigned long long
1788          fract A)
1789 -- Runtime Function: short __fractudqhi (unsigned long long fract A)
1790 -- Runtime Function: int __fractudqsi (unsigned long long fract A)
1791 -- Runtime Function: long __fractudqdi (unsigned long long fract A)
1792 -- Runtime Function: long long __fractudqti (unsigned long long fract
1793          A)
1794 -- Runtime Function: float __fractudqsf (unsigned long long fract A)
1795 -- Runtime Function: double __fractudqdf (unsigned long long fract A)
1796 -- Runtime Function: short fract __fractuhaqq (unsigned short accum A)
1797 -- Runtime Function: fract __fractuhahq (unsigned short accum A)
1798 -- Runtime Function: long fract __fractuhasq (unsigned short accum A)
1799 -- Runtime Function: long long fract __fractuhadq (unsigned short
1800          accum A)
1801 -- Runtime Function: short accum __fractuhaha (unsigned short accum A)
1802 -- Runtime Function: accum __fractuhasa (unsigned short accum A)
1803 -- Runtime Function: long accum __fractuhada (unsigned short accum A)
1804 -- Runtime Function: long long accum __fractuhata (unsigned short
1805          accum A)
1806 -- Runtime Function: unsigned short fract __fractuhauqq (unsigned
1807          short accum A)
1808 -- Runtime Function: unsigned fract __fractuhauhq (unsigned short
1809          accum A)
1810 -- Runtime Function: unsigned long fract __fractuhausq (unsigned short
1811          accum A)
1812 -- Runtime Function: unsigned long long fract __fractuhaudq (unsigned
1813          short accum A)
1814 -- Runtime Function: unsigned accum __fractuhausa2 (unsigned short
1815          accum A)
1816 -- Runtime Function: unsigned long accum __fractuhauda2 (unsigned
1817          short accum A)
1818 -- Runtime Function: unsigned long long accum __fractuhauta2 (unsigned
1819          short accum A)
1820 -- Runtime Function: signed char __fractuhaqi (unsigned short accum A)
1821 -- Runtime Function: short __fractuhahi (unsigned short accum A)
1822 -- Runtime Function: int __fractuhasi (unsigned short accum A)
1823 -- Runtime Function: long __fractuhadi (unsigned short accum A)
1824 -- Runtime Function: long long __fractuhati (unsigned short accum A)
1825 -- Runtime Function: float __fractuhasf (unsigned short accum A)
1826 -- Runtime Function: double __fractuhadf (unsigned short accum A)
1827 -- Runtime Function: short fract __fractusaqq (unsigned accum A)
1828 -- Runtime Function: fract __fractusahq (unsigned accum A)
1829 -- Runtime Function: long fract __fractusasq (unsigned accum A)
1830 -- Runtime Function: long long fract __fractusadq (unsigned accum A)
1831 -- Runtime Function: short accum __fractusaha (unsigned accum A)
1832 -- Runtime Function: accum __fractusasa (unsigned accum A)
1833 -- Runtime Function: long accum __fractusada (unsigned accum A)
1834 -- Runtime Function: long long accum __fractusata (unsigned accum A)
1835 -- Runtime Function: unsigned short fract __fractusauqq (unsigned
1836          accum A)
1837 -- Runtime Function: unsigned fract __fractusauhq (unsigned accum A)
1838 -- Runtime Function: unsigned long fract __fractusausq (unsigned accum
1839          A)
1840 -- Runtime Function: unsigned long long fract __fractusaudq (unsigned
1841          accum A)
1842 -- Runtime Function: unsigned short accum __fractusauha2 (unsigned
1843          accum A)
1844 -- Runtime Function: unsigned long accum __fractusauda2 (unsigned
1845          accum A)
1846 -- Runtime Function: unsigned long long accum __fractusauta2 (unsigned
1847          accum A)
1848 -- Runtime Function: signed char __fractusaqi (unsigned accum A)
1849 -- Runtime Function: short __fractusahi (unsigned accum A)
1850 -- Runtime Function: int __fractusasi (unsigned accum A)
1851 -- Runtime Function: long __fractusadi (unsigned accum A)
1852 -- Runtime Function: long long __fractusati (unsigned accum A)
1853 -- Runtime Function: float __fractusasf (unsigned accum A)
1854 -- Runtime Function: double __fractusadf (unsigned accum A)
1855 -- Runtime Function: short fract __fractudaqq (unsigned long accum A)
1856 -- Runtime Function: fract __fractudahq (unsigned long accum A)
1857 -- Runtime Function: long fract __fractudasq (unsigned long accum A)
1858 -- Runtime Function: long long fract __fractudadq (unsigned long accum
1859          A)
1860 -- Runtime Function: short accum __fractudaha (unsigned long accum A)
1861 -- Runtime Function: accum __fractudasa (unsigned long accum A)
1862 -- Runtime Function: long accum __fractudada (unsigned long accum A)
1863 -- Runtime Function: long long accum __fractudata (unsigned long accum
1864          A)
1865 -- Runtime Function: unsigned short fract __fractudauqq (unsigned long
1866          accum A)
1867 -- Runtime Function: unsigned fract __fractudauhq (unsigned long accum
1868          A)
1869 -- Runtime Function: unsigned long fract __fractudausq (unsigned long
1870          accum A)
1871 -- Runtime Function: unsigned long long fract __fractudaudq (unsigned
1872          long accum A)
1873 -- Runtime Function: unsigned short accum __fractudauha2 (unsigned
1874          long accum A)
1875 -- Runtime Function: unsigned accum __fractudausa2 (unsigned long
1876          accum A)
1877 -- Runtime Function: unsigned long long accum __fractudauta2 (unsigned
1878          long accum A)
1879 -- Runtime Function: signed char __fractudaqi (unsigned long accum A)
1880 -- Runtime Function: short __fractudahi (unsigned long accum A)
1881 -- Runtime Function: int __fractudasi (unsigned long accum A)
1882 -- Runtime Function: long __fractudadi (unsigned long accum A)
1883 -- Runtime Function: long long __fractudati (unsigned long accum A)
1884 -- Runtime Function: float __fractudasf (unsigned long accum A)
1885 -- Runtime Function: double __fractudadf (unsigned long accum A)
1886 -- Runtime Function: short fract __fractutaqq (unsigned long long
1887          accum A)
1888 -- Runtime Function: fract __fractutahq (unsigned long long accum A)
1889 -- Runtime Function: long fract __fractutasq (unsigned long long accum
1890          A)
1891 -- Runtime Function: long long fract __fractutadq (unsigned long long
1892          accum A)
1893 -- Runtime Function: short accum __fractutaha (unsigned long long
1894          accum A)
1895 -- Runtime Function: accum __fractutasa (unsigned long long accum A)
1896 -- Runtime Function: long accum __fractutada (unsigned long long accum
1897          A)
1898 -- Runtime Function: long long accum __fractutata (unsigned long long
1899          accum A)
1900 -- Runtime Function: unsigned short fract __fractutauqq (unsigned long
1901          long accum A)
1902 -- Runtime Function: unsigned fract __fractutauhq (unsigned long long
1903          accum A)
1904 -- Runtime Function: unsigned long fract __fractutausq (unsigned long
1905          long accum A)
1906 -- Runtime Function: unsigned long long fract __fractutaudq (unsigned
1907          long long accum A)
1908 -- Runtime Function: unsigned short accum __fractutauha2 (unsigned
1909          long long accum A)
1910 -- Runtime Function: unsigned accum __fractutausa2 (unsigned long long
1911          accum A)
1912 -- Runtime Function: unsigned long accum __fractutauda2 (unsigned long
1913          long accum A)
1914 -- Runtime Function: signed char __fractutaqi (unsigned long long
1915          accum A)
1916 -- Runtime Function: short __fractutahi (unsigned long long accum A)
1917 -- Runtime Function: int __fractutasi (unsigned long long accum A)
1918 -- Runtime Function: long __fractutadi (unsigned long long accum A)
1919 -- Runtime Function: long long __fractutati (unsigned long long accum
1920          A)
1921 -- Runtime Function: float __fractutasf (unsigned long long accum A)
1922 -- Runtime Function: double __fractutadf (unsigned long long accum A)
1923 -- Runtime Function: short fract __fractqiqq (signed char A)
1924 -- Runtime Function: fract __fractqihq (signed char A)
1925 -- Runtime Function: long fract __fractqisq (signed char A)
1926 -- Runtime Function: long long fract __fractqidq (signed char A)
1927 -- Runtime Function: short accum __fractqiha (signed char A)
1928 -- Runtime Function: accum __fractqisa (signed char A)
1929 -- Runtime Function: long accum __fractqida (signed char A)
1930 -- Runtime Function: long long accum __fractqita (signed char A)
1931 -- Runtime Function: unsigned short fract __fractqiuqq (signed char A)
1932 -- Runtime Function: unsigned fract __fractqiuhq (signed char A)
1933 -- Runtime Function: unsigned long fract __fractqiusq (signed char A)
1934 -- Runtime Function: unsigned long long fract __fractqiudq (signed
1935          char A)
1936 -- Runtime Function: unsigned short accum __fractqiuha (signed char A)
1937 -- Runtime Function: unsigned accum __fractqiusa (signed char A)
1938 -- Runtime Function: unsigned long accum __fractqiuda (signed char A)
1939 -- Runtime Function: unsigned long long accum __fractqiuta (signed
1940          char A)
1941 -- Runtime Function: short fract __fracthiqq (short A)
1942 -- Runtime Function: fract __fracthihq (short A)
1943 -- Runtime Function: long fract __fracthisq (short A)
1944 -- Runtime Function: long long fract __fracthidq (short A)
1945 -- Runtime Function: short accum __fracthiha (short A)
1946 -- Runtime Function: accum __fracthisa (short A)
1947 -- Runtime Function: long accum __fracthida (short A)
1948 -- Runtime Function: long long accum __fracthita (short A)
1949 -- Runtime Function: unsigned short fract __fracthiuqq (short A)
1950 -- Runtime Function: unsigned fract __fracthiuhq (short A)
1951 -- Runtime Function: unsigned long fract __fracthiusq (short A)
1952 -- Runtime Function: unsigned long long fract __fracthiudq (short A)
1953 -- Runtime Function: unsigned short accum __fracthiuha (short A)
1954 -- Runtime Function: unsigned accum __fracthiusa (short A)
1955 -- Runtime Function: unsigned long accum __fracthiuda (short A)
1956 -- Runtime Function: unsigned long long accum __fracthiuta (short A)
1957 -- Runtime Function: short fract __fractsiqq (int A)
1958 -- Runtime Function: fract __fractsihq (int A)
1959 -- Runtime Function: long fract __fractsisq (int A)
1960 -- Runtime Function: long long fract __fractsidq (int A)
1961 -- Runtime Function: short accum __fractsiha (int A)
1962 -- Runtime Function: accum __fractsisa (int A)
1963 -- Runtime Function: long accum __fractsida (int A)
1964 -- Runtime Function: long long accum __fractsita (int A)
1965 -- Runtime Function: unsigned short fract __fractsiuqq (int A)
1966 -- Runtime Function: unsigned fract __fractsiuhq (int A)
1967 -- Runtime Function: unsigned long fract __fractsiusq (int A)
1968 -- Runtime Function: unsigned long long fract __fractsiudq (int A)
1969 -- Runtime Function: unsigned short accum __fractsiuha (int A)
1970 -- Runtime Function: unsigned accum __fractsiusa (int A)
1971 -- Runtime Function: unsigned long accum __fractsiuda (int A)
1972 -- Runtime Function: unsigned long long accum __fractsiuta (int A)
1973 -- Runtime Function: short fract __fractdiqq (long A)
1974 -- Runtime Function: fract __fractdihq (long A)
1975 -- Runtime Function: long fract __fractdisq (long A)
1976 -- Runtime Function: long long fract __fractdidq (long A)
1977 -- Runtime Function: short accum __fractdiha (long A)
1978 -- Runtime Function: accum __fractdisa (long A)
1979 -- Runtime Function: long accum __fractdida (long A)
1980 -- Runtime Function: long long accum __fractdita (long A)
1981 -- Runtime Function: unsigned short fract __fractdiuqq (long A)
1982 -- Runtime Function: unsigned fract __fractdiuhq (long A)
1983 -- Runtime Function: unsigned long fract __fractdiusq (long A)
1984 -- Runtime Function: unsigned long long fract __fractdiudq (long A)
1985 -- Runtime Function: unsigned short accum __fractdiuha (long A)
1986 -- Runtime Function: unsigned accum __fractdiusa (long A)
1987 -- Runtime Function: unsigned long accum __fractdiuda (long A)
1988 -- Runtime Function: unsigned long long accum __fractdiuta (long A)
1989 -- Runtime Function: short fract __fracttiqq (long long A)
1990 -- Runtime Function: fract __fracttihq (long long A)
1991 -- Runtime Function: long fract __fracttisq (long long A)
1992 -- Runtime Function: long long fract __fracttidq (long long A)
1993 -- Runtime Function: short accum __fracttiha (long long A)
1994 -- Runtime Function: accum __fracttisa (long long A)
1995 -- Runtime Function: long accum __fracttida (long long A)
1996 -- Runtime Function: long long accum __fracttita (long long A)
1997 -- Runtime Function: unsigned short fract __fracttiuqq (long long A)
1998 -- Runtime Function: unsigned fract __fracttiuhq (long long A)
1999 -- Runtime Function: unsigned long fract __fracttiusq (long long A)
2000 -- Runtime Function: unsigned long long fract __fracttiudq (long long
2001          A)
2002 -- Runtime Function: unsigned short accum __fracttiuha (long long A)
2003 -- Runtime Function: unsigned accum __fracttiusa (long long A)
2004 -- Runtime Function: unsigned long accum __fracttiuda (long long A)
2005 -- Runtime Function: unsigned long long accum __fracttiuta (long long
2006          A)
2007 -- Runtime Function: short fract __fractsfqq (float A)
2008 -- Runtime Function: fract __fractsfhq (float A)
2009 -- Runtime Function: long fract __fractsfsq (float A)
2010 -- Runtime Function: long long fract __fractsfdq (float A)
2011 -- Runtime Function: short accum __fractsfha (float A)
2012 -- Runtime Function: accum __fractsfsa (float A)
2013 -- Runtime Function: long accum __fractsfda (float A)
2014 -- Runtime Function: long long accum __fractsfta (float A)
2015 -- Runtime Function: unsigned short fract __fractsfuqq (float A)
2016 -- Runtime Function: unsigned fract __fractsfuhq (float A)
2017 -- Runtime Function: unsigned long fract __fractsfusq (float A)
2018 -- Runtime Function: unsigned long long fract __fractsfudq (float A)
2019 -- Runtime Function: unsigned short accum __fractsfuha (float A)
2020 -- Runtime Function: unsigned accum __fractsfusa (float A)
2021 -- Runtime Function: unsigned long accum __fractsfuda (float A)
2022 -- Runtime Function: unsigned long long accum __fractsfuta (float A)
2023 -- Runtime Function: short fract __fractdfqq (double A)
2024 -- Runtime Function: fract __fractdfhq (double A)
2025 -- Runtime Function: long fract __fractdfsq (double A)
2026 -- Runtime Function: long long fract __fractdfdq (double A)
2027 -- Runtime Function: short accum __fractdfha (double A)
2028 -- Runtime Function: accum __fractdfsa (double A)
2029 -- Runtime Function: long accum __fractdfda (double A)
2030 -- Runtime Function: long long accum __fractdfta (double A)
2031 -- Runtime Function: unsigned short fract __fractdfuqq (double A)
2032 -- Runtime Function: unsigned fract __fractdfuhq (double A)
2033 -- Runtime Function: unsigned long fract __fractdfusq (double A)
2034 -- Runtime Function: unsigned long long fract __fractdfudq (double A)
2035 -- Runtime Function: unsigned short accum __fractdfuha (double A)
2036 -- Runtime Function: unsigned accum __fractdfusa (double A)
2037 -- Runtime Function: unsigned long accum __fractdfuda (double A)
2038 -- Runtime Function: unsigned long long accum __fractdfuta (double A)
2039     These functions convert from fractional and signed non-fractionals
2040     to fractionals and signed non-fractionals, without saturation.
2041
2042 -- Runtime Function: fract __satfractqqhq2 (short fract A)
2043 -- Runtime Function: long fract __satfractqqsq2 (short fract A)
2044 -- Runtime Function: long long fract __satfractqqdq2 (short fract A)
2045 -- Runtime Function: short accum __satfractqqha (short fract A)
2046 -- Runtime Function: accum __satfractqqsa (short fract A)
2047 -- Runtime Function: long accum __satfractqqda (short fract A)
2048 -- Runtime Function: long long accum __satfractqqta (short fract A)
2049 -- Runtime Function: unsigned short fract __satfractqquqq (short fract
2050          A)
2051 -- Runtime Function: unsigned fract __satfractqquhq (short fract A)
2052 -- Runtime Function: unsigned long fract __satfractqqusq (short fract
2053          A)
2054 -- Runtime Function: unsigned long long fract __satfractqqudq (short
2055          fract A)
2056 -- Runtime Function: unsigned short accum __satfractqquha (short fract
2057          A)
2058 -- Runtime Function: unsigned accum __satfractqqusa (short fract A)
2059 -- Runtime Function: unsigned long accum __satfractqquda (short fract
2060          A)
2061 -- Runtime Function: unsigned long long accum __satfractqquta (short
2062          fract A)
2063 -- Runtime Function: short fract __satfracthqqq2 (fract A)
2064 -- Runtime Function: long fract __satfracthqsq2 (fract A)
2065 -- Runtime Function: long long fract __satfracthqdq2 (fract A)
2066 -- Runtime Function: short accum __satfracthqha (fract A)
2067 -- Runtime Function: accum __satfracthqsa (fract A)
2068 -- Runtime Function: long accum __satfracthqda (fract A)
2069 -- Runtime Function: long long accum __satfracthqta (fract A)
2070 -- Runtime Function: unsigned short fract __satfracthquqq (fract A)
2071 -- Runtime Function: unsigned fract __satfracthquhq (fract A)
2072 -- Runtime Function: unsigned long fract __satfracthqusq (fract A)
2073 -- Runtime Function: unsigned long long fract __satfracthqudq (fract A)
2074 -- Runtime Function: unsigned short accum __satfracthquha (fract A)
2075 -- Runtime Function: unsigned accum __satfracthqusa (fract A)
2076 -- Runtime Function: unsigned long accum __satfracthquda (fract A)
2077 -- Runtime Function: unsigned long long accum __satfracthquta (fract A)
2078 -- Runtime Function: short fract __satfractsqqq2 (long fract A)
2079 -- Runtime Function: fract __satfractsqhq2 (long fract A)
2080 -- Runtime Function: long long fract __satfractsqdq2 (long fract A)
2081 -- Runtime Function: short accum __satfractsqha (long fract A)
2082 -- Runtime Function: accum __satfractsqsa (long fract A)
2083 -- Runtime Function: long accum __satfractsqda (long fract A)
2084 -- Runtime Function: long long accum __satfractsqta (long fract A)
2085 -- Runtime Function: unsigned short fract __satfractsquqq (long fract
2086          A)
2087 -- Runtime Function: unsigned fract __satfractsquhq (long fract A)
2088 -- Runtime Function: unsigned long fract __satfractsqusq (long fract A)
2089 -- Runtime Function: unsigned long long fract __satfractsqudq (long
2090          fract A)
2091 -- Runtime Function: unsigned short accum __satfractsquha (long fract
2092          A)
2093 -- Runtime Function: unsigned accum __satfractsqusa (long fract A)
2094 -- Runtime Function: unsigned long accum __satfractsquda (long fract A)
2095 -- Runtime Function: unsigned long long accum __satfractsquta (long
2096          fract A)
2097 -- Runtime Function: short fract __satfractdqqq2 (long long fract A)
2098 -- Runtime Function: fract __satfractdqhq2 (long long fract A)
2099 -- Runtime Function: long fract __satfractdqsq2 (long long fract A)
2100 -- Runtime Function: short accum __satfractdqha (long long fract A)
2101 -- Runtime Function: accum __satfractdqsa (long long fract A)
2102 -- Runtime Function: long accum __satfractdqda (long long fract A)
2103 -- Runtime Function: long long accum __satfractdqta (long long fract A)
2104 -- Runtime Function: unsigned short fract __satfractdquqq (long long
2105          fract A)
2106 -- Runtime Function: unsigned fract __satfractdquhq (long long fract A)
2107 -- Runtime Function: unsigned long fract __satfractdqusq (long long
2108          fract A)
2109 -- Runtime Function: unsigned long long fract __satfractdqudq (long
2110          long fract A)
2111 -- Runtime Function: unsigned short accum __satfractdquha (long long
2112          fract A)
2113 -- Runtime Function: unsigned accum __satfractdqusa (long long fract A)
2114 -- Runtime Function: unsigned long accum __satfractdquda (long long
2115          fract A)
2116 -- Runtime Function: unsigned long long accum __satfractdquta (long
2117          long fract A)
2118 -- Runtime Function: short fract __satfracthaqq (short accum A)
2119 -- Runtime Function: fract __satfracthahq (short accum A)
2120 -- Runtime Function: long fract __satfracthasq (short accum A)
2121 -- Runtime Function: long long fract __satfracthadq (short accum A)
2122 -- Runtime Function: accum __satfracthasa2 (short accum A)
2123 -- Runtime Function: long accum __satfracthada2 (short accum A)
2124 -- Runtime Function: long long accum __satfracthata2 (short accum A)
2125 -- Runtime Function: unsigned short fract __satfracthauqq (short accum
2126          A)
2127 -- Runtime Function: unsigned fract __satfracthauhq (short accum A)
2128 -- Runtime Function: unsigned long fract __satfracthausq (short accum
2129          A)
2130 -- Runtime Function: unsigned long long fract __satfracthaudq (short
2131          accum A)
2132 -- Runtime Function: unsigned short accum __satfracthauha (short accum
2133          A)
2134 -- Runtime Function: unsigned accum __satfracthausa (short accum A)
2135 -- Runtime Function: unsigned long accum __satfracthauda (short accum
2136          A)
2137 -- Runtime Function: unsigned long long accum __satfracthauta (short
2138          accum A)
2139 -- Runtime Function: short fract __satfractsaqq (accum A)
2140 -- Runtime Function: fract __satfractsahq (accum A)
2141 -- Runtime Function: long fract __satfractsasq (accum A)
2142 -- Runtime Function: long long fract __satfractsadq (accum A)
2143 -- Runtime Function: short accum __satfractsaha2 (accum A)
2144 -- Runtime Function: long accum __satfractsada2 (accum A)
2145 -- Runtime Function: long long accum __satfractsata2 (accum A)
2146 -- Runtime Function: unsigned short fract __satfractsauqq (accum A)
2147 -- Runtime Function: unsigned fract __satfractsauhq (accum A)
2148 -- Runtime Function: unsigned long fract __satfractsausq (accum A)
2149 -- Runtime Function: unsigned long long fract __satfractsaudq (accum A)
2150 -- Runtime Function: unsigned short accum __satfractsauha (accum A)
2151 -- Runtime Function: unsigned accum __satfractsausa (accum A)
2152 -- Runtime Function: unsigned long accum __satfractsauda (accum A)
2153 -- Runtime Function: unsigned long long accum __satfractsauta (accum A)
2154 -- Runtime Function: short fract __satfractdaqq (long accum A)
2155 -- Runtime Function: fract __satfractdahq (long accum A)
2156 -- Runtime Function: long fract __satfractdasq (long accum A)
2157 -- Runtime Function: long long fract __satfractdadq (long accum A)
2158 -- Runtime Function: short accum __satfractdaha2 (long accum A)
2159 -- Runtime Function: accum __satfractdasa2 (long accum A)
2160 -- Runtime Function: long long accum __satfractdata2 (long accum A)
2161 -- Runtime Function: unsigned short fract __satfractdauqq (long accum
2162          A)
2163 -- Runtime Function: unsigned fract __satfractdauhq (long accum A)
2164 -- Runtime Function: unsigned long fract __satfractdausq (long accum A)
2165 -- Runtime Function: unsigned long long fract __satfractdaudq (long
2166          accum A)
2167 -- Runtime Function: unsigned short accum __satfractdauha (long accum
2168          A)
2169 -- Runtime Function: unsigned accum __satfractdausa (long accum A)
2170 -- Runtime Function: unsigned long accum __satfractdauda (long accum A)
2171 -- Runtime Function: unsigned long long accum __satfractdauta (long
2172          accum A)
2173 -- Runtime Function: short fract __satfracttaqq (long long accum A)
2174 -- Runtime Function: fract __satfracttahq (long long accum A)
2175 -- Runtime Function: long fract __satfracttasq (long long accum A)
2176 -- Runtime Function: long long fract __satfracttadq (long long accum A)
2177 -- Runtime Function: short accum __satfracttaha2 (long long accum A)
2178 -- Runtime Function: accum __satfracttasa2 (long long accum A)
2179 -- Runtime Function: long accum __satfracttada2 (long long accum A)
2180 -- Runtime Function: unsigned short fract __satfracttauqq (long long
2181          accum A)
2182 -- Runtime Function: unsigned fract __satfracttauhq (long long accum A)
2183 -- Runtime Function: unsigned long fract __satfracttausq (long long
2184          accum A)
2185 -- Runtime Function: unsigned long long fract __satfracttaudq (long
2186          long accum A)
2187 -- Runtime Function: unsigned short accum __satfracttauha (long long
2188          accum A)
2189 -- Runtime Function: unsigned accum __satfracttausa (long long accum A)
2190 -- Runtime Function: unsigned long accum __satfracttauda (long long
2191          accum A)
2192 -- Runtime Function: unsigned long long accum __satfracttauta (long
2193          long accum A)
2194 -- Runtime Function: short fract __satfractuqqqq (unsigned short fract
2195          A)
2196 -- Runtime Function: fract __satfractuqqhq (unsigned short fract A)
2197 -- Runtime Function: long fract __satfractuqqsq (unsigned short fract
2198          A)
2199 -- Runtime Function: long long fract __satfractuqqdq (unsigned short
2200          fract A)
2201 -- Runtime Function: short accum __satfractuqqha (unsigned short fract
2202          A)
2203 -- Runtime Function: accum __satfractuqqsa (unsigned short fract A)
2204 -- Runtime Function: long accum __satfractuqqda (unsigned short fract
2205          A)
2206 -- Runtime Function: long long accum __satfractuqqta (unsigned short
2207          fract A)
2208 -- Runtime Function: unsigned fract __satfractuqquhq2 (unsigned short
2209          fract A)
2210 -- Runtime Function: unsigned long fract __satfractuqqusq2 (unsigned
2211          short fract A)
2212 -- Runtime Function: unsigned long long fract __satfractuqqudq2
2213          (unsigned short fract A)
2214 -- Runtime Function: unsigned short accum __satfractuqquha (unsigned
2215          short fract A)
2216 -- Runtime Function: unsigned accum __satfractuqqusa (unsigned short
2217          fract A)
2218 -- Runtime Function: unsigned long accum __satfractuqquda (unsigned
2219          short fract A)
2220 -- Runtime Function: unsigned long long accum __satfractuqquta
2221          (unsigned short fract A)
2222 -- Runtime Function: short fract __satfractuhqqq (unsigned fract A)
2223 -- Runtime Function: fract __satfractuhqhq (unsigned fract A)
2224 -- Runtime Function: long fract __satfractuhqsq (unsigned fract A)
2225 -- Runtime Function: long long fract __satfractuhqdq (unsigned fract A)
2226 -- Runtime Function: short accum __satfractuhqha (unsigned fract A)
2227 -- Runtime Function: accum __satfractuhqsa (unsigned fract A)
2228 -- Runtime Function: long accum __satfractuhqda (unsigned fract A)
2229 -- Runtime Function: long long accum __satfractuhqta (unsigned fract A)
2230 -- Runtime Function: unsigned short fract __satfractuhquqq2 (unsigned
2231          fract A)
2232 -- Runtime Function: unsigned long fract __satfractuhqusq2 (unsigned
2233          fract A)
2234 -- Runtime Function: unsigned long long fract __satfractuhqudq2
2235          (unsigned fract A)
2236 -- Runtime Function: unsigned short accum __satfractuhquha (unsigned
2237          fract A)
2238 -- Runtime Function: unsigned accum __satfractuhqusa (unsigned fract A)
2239 -- Runtime Function: unsigned long accum __satfractuhquda (unsigned
2240          fract A)
2241 -- Runtime Function: unsigned long long accum __satfractuhquta
2242          (unsigned fract A)
2243 -- Runtime Function: short fract __satfractusqqq (unsigned long fract
2244          A)
2245 -- Runtime Function: fract __satfractusqhq (unsigned long fract A)
2246 -- Runtime Function: long fract __satfractusqsq (unsigned long fract A)
2247 -- Runtime Function: long long fract __satfractusqdq (unsigned long
2248          fract A)
2249 -- Runtime Function: short accum __satfractusqha (unsigned long fract
2250          A)
2251 -- Runtime Function: accum __satfractusqsa (unsigned long fract A)
2252 -- Runtime Function: long accum __satfractusqda (unsigned long fract A)
2253 -- Runtime Function: long long accum __satfractusqta (unsigned long
2254          fract A)
2255 -- Runtime Function: unsigned short fract __satfractusquqq2 (unsigned
2256          long fract A)
2257 -- Runtime Function: unsigned fract __satfractusquhq2 (unsigned long
2258          fract A)
2259 -- Runtime Function: unsigned long long fract __satfractusqudq2
2260          (unsigned long fract A)
2261 -- Runtime Function: unsigned short accum __satfractusquha (unsigned
2262          long fract A)
2263 -- Runtime Function: unsigned accum __satfractusqusa (unsigned long
2264          fract A)
2265 -- Runtime Function: unsigned long accum __satfractusquda (unsigned
2266          long fract A)
2267 -- Runtime Function: unsigned long long accum __satfractusquta
2268          (unsigned long fract A)
2269 -- Runtime Function: short fract __satfractudqqq (unsigned long long
2270          fract A)
2271 -- Runtime Function: fract __satfractudqhq (unsigned long long fract A)
2272 -- Runtime Function: long fract __satfractudqsq (unsigned long long
2273          fract A)
2274 -- Runtime Function: long long fract __satfractudqdq (unsigned long
2275          long fract A)
2276 -- Runtime Function: short accum __satfractudqha (unsigned long long
2277          fract A)
2278 -- Runtime Function: accum __satfractudqsa (unsigned long long fract A)
2279 -- Runtime Function: long accum __satfractudqda (unsigned long long
2280          fract A)
2281 -- Runtime Function: long long accum __satfractudqta (unsigned long
2282          long fract A)
2283 -- Runtime Function: unsigned short fract __satfractudquqq2 (unsigned
2284          long long fract A)
2285 -- Runtime Function: unsigned fract __satfractudquhq2 (unsigned long
2286          long fract A)
2287 -- Runtime Function: unsigned long fract __satfractudqusq2 (unsigned
2288          long long fract A)
2289 -- Runtime Function: unsigned short accum __satfractudquha (unsigned
2290          long long fract A)
2291 -- Runtime Function: unsigned accum __satfractudqusa (unsigned long
2292          long fract A)
2293 -- Runtime Function: unsigned long accum __satfractudquda (unsigned
2294          long long fract A)
2295 -- Runtime Function: unsigned long long accum __satfractudquta
2296          (unsigned long long fract A)
2297 -- Runtime Function: short fract __satfractuhaqq (unsigned short accum
2298          A)
2299 -- Runtime Function: fract __satfractuhahq (unsigned short accum A)
2300 -- Runtime Function: long fract __satfractuhasq (unsigned short accum
2301          A)
2302 -- Runtime Function: long long fract __satfractuhadq (unsigned short
2303          accum A)
2304 -- Runtime Function: short accum __satfractuhaha (unsigned short accum
2305          A)
2306 -- Runtime Function: accum __satfractuhasa (unsigned short accum A)
2307 -- Runtime Function: long accum __satfractuhada (unsigned short accum
2308          A)
2309 -- Runtime Function: long long accum __satfractuhata (unsigned short
2310          accum A)
2311 -- Runtime Function: unsigned short fract __satfractuhauqq (unsigned
2312          short accum A)
2313 -- Runtime Function: unsigned fract __satfractuhauhq (unsigned short
2314          accum A)
2315 -- Runtime Function: unsigned long fract __satfractuhausq (unsigned
2316          short accum A)
2317 -- Runtime Function: unsigned long long fract __satfractuhaudq
2318          (unsigned short accum A)
2319 -- Runtime Function: unsigned accum __satfractuhausa2 (unsigned short
2320          accum A)
2321 -- Runtime Function: unsigned long accum __satfractuhauda2 (unsigned
2322          short accum A)
2323 -- Runtime Function: unsigned long long accum __satfractuhauta2
2324          (unsigned short accum A)
2325 -- Runtime Function: short fract __satfractusaqq (unsigned accum A)
2326 -- Runtime Function: fract __satfractusahq (unsigned accum A)
2327 -- Runtime Function: long fract __satfractusasq (unsigned accum A)
2328 -- Runtime Function: long long fract __satfractusadq (unsigned accum A)
2329 -- Runtime Function: short accum __satfractusaha (unsigned accum A)
2330 -- Runtime Function: accum __satfractusasa (unsigned accum A)
2331 -- Runtime Function: long accum __satfractusada (unsigned accum A)
2332 -- Runtime Function: long long accum __satfractusata (unsigned accum A)
2333 -- Runtime Function: unsigned short fract __satfractusauqq (unsigned
2334          accum A)
2335 -- Runtime Function: unsigned fract __satfractusauhq (unsigned accum A)
2336 -- Runtime Function: unsigned long fract __satfractusausq (unsigned
2337          accum A)
2338 -- Runtime Function: unsigned long long fract __satfractusaudq
2339          (unsigned accum A)
2340 -- Runtime Function: unsigned short accum __satfractusauha2 (unsigned
2341          accum A)
2342 -- Runtime Function: unsigned long accum __satfractusauda2 (unsigned
2343          accum A)
2344 -- Runtime Function: unsigned long long accum __satfractusauta2
2345          (unsigned accum A)
2346 -- Runtime Function: short fract __satfractudaqq (unsigned long accum
2347          A)
2348 -- Runtime Function: fract __satfractudahq (unsigned long accum A)
2349 -- Runtime Function: long fract __satfractudasq (unsigned long accum A)
2350 -- Runtime Function: long long fract __satfractudadq (unsigned long
2351          accum A)
2352 -- Runtime Function: short accum __satfractudaha (unsigned long accum
2353          A)
2354 -- Runtime Function: accum __satfractudasa (unsigned long accum A)
2355 -- Runtime Function: long accum __satfractudada (unsigned long accum A)
2356 -- Runtime Function: long long accum __satfractudata (unsigned long
2357          accum A)
2358 -- Runtime Function: unsigned short fract __satfractudauqq (unsigned
2359          long accum A)
2360 -- Runtime Function: unsigned fract __satfractudauhq (unsigned long
2361          accum A)
2362 -- Runtime Function: unsigned long fract __satfractudausq (unsigned
2363          long accum A)
2364 -- Runtime Function: unsigned long long fract __satfractudaudq
2365          (unsigned long accum A)
2366 -- Runtime Function: unsigned short accum __satfractudauha2 (unsigned
2367          long accum A)
2368 -- Runtime Function: unsigned accum __satfractudausa2 (unsigned long
2369          accum A)
2370 -- Runtime Function: unsigned long long accum __satfractudauta2
2371          (unsigned long accum A)
2372 -- Runtime Function: short fract __satfractutaqq (unsigned long long
2373          accum A)
2374 -- Runtime Function: fract __satfractutahq (unsigned long long accum A)
2375 -- Runtime Function: long fract __satfractutasq (unsigned long long
2376          accum A)
2377 -- Runtime Function: long long fract __satfractutadq (unsigned long
2378          long accum A)
2379 -- Runtime Function: short accum __satfractutaha (unsigned long long
2380          accum A)
2381 -- Runtime Function: accum __satfractutasa (unsigned long long accum A)
2382 -- Runtime Function: long accum __satfractutada (unsigned long long
2383          accum A)
2384 -- Runtime Function: long long accum __satfractutata (unsigned long
2385          long accum A)
2386 -- Runtime Function: unsigned short fract __satfractutauqq (unsigned
2387          long long accum A)
2388 -- Runtime Function: unsigned fract __satfractutauhq (unsigned long
2389          long accum A)
2390 -- Runtime Function: unsigned long fract __satfractutausq (unsigned
2391          long long accum A)
2392 -- Runtime Function: unsigned long long fract __satfractutaudq
2393          (unsigned long long accum A)
2394 -- Runtime Function: unsigned short accum __satfractutauha2 (unsigned
2395          long long accum A)
2396 -- Runtime Function: unsigned accum __satfractutausa2 (unsigned long
2397          long accum A)
2398 -- Runtime Function: unsigned long accum __satfractutauda2 (unsigned
2399          long long accum A)
2400 -- Runtime Function: short fract __satfractqiqq (signed char A)
2401 -- Runtime Function: fract __satfractqihq (signed char A)
2402 -- Runtime Function: long fract __satfractqisq (signed char A)
2403 -- Runtime Function: long long fract __satfractqidq (signed char A)
2404 -- Runtime Function: short accum __satfractqiha (signed char A)
2405 -- Runtime Function: accum __satfractqisa (signed char A)
2406 -- Runtime Function: long accum __satfractqida (signed char A)
2407 -- Runtime Function: long long accum __satfractqita (signed char A)
2408 -- Runtime Function: unsigned short fract __satfractqiuqq (signed char
2409          A)
2410 -- Runtime Function: unsigned fract __satfractqiuhq (signed char A)
2411 -- Runtime Function: unsigned long fract __satfractqiusq (signed char
2412          A)
2413 -- Runtime Function: unsigned long long fract __satfractqiudq (signed
2414          char A)
2415 -- Runtime Function: unsigned short accum __satfractqiuha (signed char
2416          A)
2417 -- Runtime Function: unsigned accum __satfractqiusa (signed char A)
2418 -- Runtime Function: unsigned long accum __satfractqiuda (signed char
2419          A)
2420 -- Runtime Function: unsigned long long accum __satfractqiuta (signed
2421          char A)
2422 -- Runtime Function: short fract __satfracthiqq (short A)
2423 -- Runtime Function: fract __satfracthihq (short A)
2424 -- Runtime Function: long fract __satfracthisq (short A)
2425 -- Runtime Function: long long fract __satfracthidq (short A)
2426 -- Runtime Function: short accum __satfracthiha (short A)
2427 -- Runtime Function: accum __satfracthisa (short A)
2428 -- Runtime Function: long accum __satfracthida (short A)
2429 -- Runtime Function: long long accum __satfracthita (short A)
2430 -- Runtime Function: unsigned short fract __satfracthiuqq (short A)
2431 -- Runtime Function: unsigned fract __satfracthiuhq (short A)
2432 -- Runtime Function: unsigned long fract __satfracthiusq (short A)
2433 -- Runtime Function: unsigned long long fract __satfracthiudq (short A)
2434 -- Runtime Function: unsigned short accum __satfracthiuha (short A)
2435 -- Runtime Function: unsigned accum __satfracthiusa (short A)
2436 -- Runtime Function: unsigned long accum __satfracthiuda (short A)
2437 -- Runtime Function: unsigned long long accum __satfracthiuta (short A)
2438 -- Runtime Function: short fract __satfractsiqq (int A)
2439 -- Runtime Function: fract __satfractsihq (int A)
2440 -- Runtime Function: long fract __satfractsisq (int A)
2441 -- Runtime Function: long long fract __satfractsidq (int A)
2442 -- Runtime Function: short accum __satfractsiha (int A)
2443 -- Runtime Function: accum __satfractsisa (int A)
2444 -- Runtime Function: long accum __satfractsida (int A)
2445 -- Runtime Function: long long accum __satfractsita (int A)
2446 -- Runtime Function: unsigned short fract __satfractsiuqq (int A)
2447 -- Runtime Function: unsigned fract __satfractsiuhq (int A)
2448 -- Runtime Function: unsigned long fract __satfractsiusq (int A)
2449 -- Runtime Function: unsigned long long fract __satfractsiudq (int A)
2450 -- Runtime Function: unsigned short accum __satfractsiuha (int A)
2451 -- Runtime Function: unsigned accum __satfractsiusa (int A)
2452 -- Runtime Function: unsigned long accum __satfractsiuda (int A)
2453 -- Runtime Function: unsigned long long accum __satfractsiuta (int A)
2454 -- Runtime Function: short fract __satfractdiqq (long A)
2455 -- Runtime Function: fract __satfractdihq (long A)
2456 -- Runtime Function: long fract __satfractdisq (long A)
2457 -- Runtime Function: long long fract __satfractdidq (long A)
2458 -- Runtime Function: short accum __satfractdiha (long A)
2459 -- Runtime Function: accum __satfractdisa (long A)
2460 -- Runtime Function: long accum __satfractdida (long A)
2461 -- Runtime Function: long long accum __satfractdita (long A)
2462 -- Runtime Function: unsigned short fract __satfractdiuqq (long A)
2463 -- Runtime Function: unsigned fract __satfractdiuhq (long A)
2464 -- Runtime Function: unsigned long fract __satfractdiusq (long A)
2465 -- Runtime Function: unsigned long long fract __satfractdiudq (long A)
2466 -- Runtime Function: unsigned short accum __satfractdiuha (long A)
2467 -- Runtime Function: unsigned accum __satfractdiusa (long A)
2468 -- Runtime Function: unsigned long accum __satfractdiuda (long A)
2469 -- Runtime Function: unsigned long long accum __satfractdiuta (long A)
2470 -- Runtime Function: short fract __satfracttiqq (long long A)
2471 -- Runtime Function: fract __satfracttihq (long long A)
2472 -- Runtime Function: long fract __satfracttisq (long long A)
2473 -- Runtime Function: long long fract __satfracttidq (long long A)
2474 -- Runtime Function: short accum __satfracttiha (long long A)
2475 -- Runtime Function: accum __satfracttisa (long long A)
2476 -- Runtime Function: long accum __satfracttida (long long A)
2477 -- Runtime Function: long long accum __satfracttita (long long A)
2478 -- Runtime Function: unsigned short fract __satfracttiuqq (long long A)
2479 -- Runtime Function: unsigned fract __satfracttiuhq (long long A)
2480 -- Runtime Function: unsigned long fract __satfracttiusq (long long A)
2481 -- Runtime Function: unsigned long long fract __satfracttiudq (long
2482          long A)
2483 -- Runtime Function: unsigned short accum __satfracttiuha (long long A)
2484 -- Runtime Function: unsigned accum __satfracttiusa (long long A)
2485 -- Runtime Function: unsigned long accum __satfracttiuda (long long A)
2486 -- Runtime Function: unsigned long long accum __satfracttiuta (long
2487          long A)
2488 -- Runtime Function: short fract __satfractsfqq (float A)
2489 -- Runtime Function: fract __satfractsfhq (float A)
2490 -- Runtime Function: long fract __satfractsfsq (float A)
2491 -- Runtime Function: long long fract __satfractsfdq (float A)
2492 -- Runtime Function: short accum __satfractsfha (float A)
2493 -- Runtime Function: accum __satfractsfsa (float A)
2494 -- Runtime Function: long accum __satfractsfda (float A)
2495 -- Runtime Function: long long accum __satfractsfta (float A)
2496 -- Runtime Function: unsigned short fract __satfractsfuqq (float A)
2497 -- Runtime Function: unsigned fract __satfractsfuhq (float A)
2498 -- Runtime Function: unsigned long fract __satfractsfusq (float A)
2499 -- Runtime Function: unsigned long long fract __satfractsfudq (float A)
2500 -- Runtime Function: unsigned short accum __satfractsfuha (float A)
2501 -- Runtime Function: unsigned accum __satfractsfusa (float A)
2502 -- Runtime Function: unsigned long accum __satfractsfuda (float A)
2503 -- Runtime Function: unsigned long long accum __satfractsfuta (float A)
2504 -- Runtime Function: short fract __satfractdfqq (double A)
2505 -- Runtime Function: fract __satfractdfhq (double A)
2506 -- Runtime Function: long fract __satfractdfsq (double A)
2507 -- Runtime Function: long long fract __satfractdfdq (double A)
2508 -- Runtime Function: short accum __satfractdfha (double A)
2509 -- Runtime Function: accum __satfractdfsa (double A)
2510 -- Runtime Function: long accum __satfractdfda (double A)
2511 -- Runtime Function: long long accum __satfractdfta (double A)
2512 -- Runtime Function: unsigned short fract __satfractdfuqq (double A)
2513 -- Runtime Function: unsigned fract __satfractdfuhq (double A)
2514 -- Runtime Function: unsigned long fract __satfractdfusq (double A)
2515 -- Runtime Function: unsigned long long fract __satfractdfudq (double
2516          A)
2517 -- Runtime Function: unsigned short accum __satfractdfuha (double A)
2518 -- Runtime Function: unsigned accum __satfractdfusa (double A)
2519 -- Runtime Function: unsigned long accum __satfractdfuda (double A)
2520 -- Runtime Function: unsigned long long accum __satfractdfuta (double
2521          A)
2522     The functions convert from fractional and signed non-fractionals to
2523     fractionals, with saturation.
2524
2525 -- Runtime Function: unsigned char __fractunsqqqi (short fract A)
2526 -- Runtime Function: unsigned short __fractunsqqhi (short fract A)
2527 -- Runtime Function: unsigned int __fractunsqqsi (short fract A)
2528 -- Runtime Function: unsigned long __fractunsqqdi (short fract A)
2529 -- Runtime Function: unsigned long long __fractunsqqti (short fract A)
2530 -- Runtime Function: unsigned char __fractunshqqi (fract A)
2531 -- Runtime Function: unsigned short __fractunshqhi (fract A)
2532 -- Runtime Function: unsigned int __fractunshqsi (fract A)
2533 -- Runtime Function: unsigned long __fractunshqdi (fract A)
2534 -- Runtime Function: unsigned long long __fractunshqti (fract A)
2535 -- Runtime Function: unsigned char __fractunssqqi (long fract A)
2536 -- Runtime Function: unsigned short __fractunssqhi (long fract A)
2537 -- Runtime Function: unsigned int __fractunssqsi (long fract A)
2538 -- Runtime Function: unsigned long __fractunssqdi (long fract A)
2539 -- Runtime Function: unsigned long long __fractunssqti (long fract A)
2540 -- Runtime Function: unsigned char __fractunsdqqi (long long fract A)
2541 -- Runtime Function: unsigned short __fractunsdqhi (long long fract A)
2542 -- Runtime Function: unsigned int __fractunsdqsi (long long fract A)
2543 -- Runtime Function: unsigned long __fractunsdqdi (long long fract A)
2544 -- Runtime Function: unsigned long long __fractunsdqti (long long
2545          fract A)
2546 -- Runtime Function: unsigned char __fractunshaqi (short accum A)
2547 -- Runtime Function: unsigned short __fractunshahi (short accum A)
2548 -- Runtime Function: unsigned int __fractunshasi (short accum A)
2549 -- Runtime Function: unsigned long __fractunshadi (short accum A)
2550 -- Runtime Function: unsigned long long __fractunshati (short accum A)
2551 -- Runtime Function: unsigned char __fractunssaqi (accum A)
2552 -- Runtime Function: unsigned short __fractunssahi (accum A)
2553 -- Runtime Function: unsigned int __fractunssasi (accum A)
2554 -- Runtime Function: unsigned long __fractunssadi (accum A)
2555 -- Runtime Function: unsigned long long __fractunssati (accum A)
2556 -- Runtime Function: unsigned char __fractunsdaqi (long accum A)
2557 -- Runtime Function: unsigned short __fractunsdahi (long accum A)
2558 -- Runtime Function: unsigned int __fractunsdasi (long accum A)
2559 -- Runtime Function: unsigned long __fractunsdadi (long accum A)
2560 -- Runtime Function: unsigned long long __fractunsdati (long accum A)
2561 -- Runtime Function: unsigned char __fractunstaqi (long long accum A)
2562 -- Runtime Function: unsigned short __fractunstahi (long long accum A)
2563 -- Runtime Function: unsigned int __fractunstasi (long long accum A)
2564 -- Runtime Function: unsigned long __fractunstadi (long long accum A)
2565 -- Runtime Function: unsigned long long __fractunstati (long long
2566          accum A)
2567 -- Runtime Function: unsigned char __fractunsuqqqi (unsigned short
2568          fract A)
2569 -- Runtime Function: unsigned short __fractunsuqqhi (unsigned short
2570          fract A)
2571 -- Runtime Function: unsigned int __fractunsuqqsi (unsigned short
2572          fract A)
2573 -- Runtime Function: unsigned long __fractunsuqqdi (unsigned short
2574          fract A)
2575 -- Runtime Function: unsigned long long __fractunsuqqti (unsigned
2576          short fract A)
2577 -- Runtime Function: unsigned char __fractunsuhqqi (unsigned fract A)
2578 -- Runtime Function: unsigned short __fractunsuhqhi (unsigned fract A)
2579 -- Runtime Function: unsigned int __fractunsuhqsi (unsigned fract A)
2580 -- Runtime Function: unsigned long __fractunsuhqdi (unsigned fract A)
2581 -- Runtime Function: unsigned long long __fractunsuhqti (unsigned
2582          fract A)
2583 -- Runtime Function: unsigned char __fractunsusqqi (unsigned long
2584          fract A)
2585 -- Runtime Function: unsigned short __fractunsusqhi (unsigned long
2586          fract A)
2587 -- Runtime Function: unsigned int __fractunsusqsi (unsigned long fract
2588          A)
2589 -- Runtime Function: unsigned long __fractunsusqdi (unsigned long
2590          fract A)
2591 -- Runtime Function: unsigned long long __fractunsusqti (unsigned long
2592          fract A)
2593 -- Runtime Function: unsigned char __fractunsudqqi (unsigned long long
2594          fract A)
2595 -- Runtime Function: unsigned short __fractunsudqhi (unsigned long
2596          long fract A)
2597 -- Runtime Function: unsigned int __fractunsudqsi (unsigned long long
2598          fract A)
2599 -- Runtime Function: unsigned long __fractunsudqdi (unsigned long long
2600          fract A)
2601 -- Runtime Function: unsigned long long __fractunsudqti (unsigned long
2602          long fract A)
2603 -- Runtime Function: unsigned char __fractunsuhaqi (unsigned short
2604          accum A)
2605 -- Runtime Function: unsigned short __fractunsuhahi (unsigned short
2606          accum A)
2607 -- Runtime Function: unsigned int __fractunsuhasi (unsigned short
2608          accum A)
2609 -- Runtime Function: unsigned long __fractunsuhadi (unsigned short
2610          accum A)
2611 -- Runtime Function: unsigned long long __fractunsuhati (unsigned
2612          short accum A)
2613 -- Runtime Function: unsigned char __fractunsusaqi (unsigned accum A)
2614 -- Runtime Function: unsigned short __fractunsusahi (unsigned accum A)
2615 -- Runtime Function: unsigned int __fractunsusasi (unsigned accum A)
2616 -- Runtime Function: unsigned long __fractunsusadi (unsigned accum A)
2617 -- Runtime Function: unsigned long long __fractunsusati (unsigned
2618          accum A)
2619 -- Runtime Function: unsigned char __fractunsudaqi (unsigned long
2620          accum A)
2621 -- Runtime Function: unsigned short __fractunsudahi (unsigned long
2622          accum A)
2623 -- Runtime Function: unsigned int __fractunsudasi (unsigned long accum
2624          A)
2625 -- Runtime Function: unsigned long __fractunsudadi (unsigned long
2626          accum A)
2627 -- Runtime Function: unsigned long long __fractunsudati (unsigned long
2628          accum A)
2629 -- Runtime Function: unsigned char __fractunsutaqi (unsigned long long
2630          accum A)
2631 -- Runtime Function: unsigned short __fractunsutahi (unsigned long
2632          long accum A)
2633 -- Runtime Function: unsigned int __fractunsutasi (unsigned long long
2634          accum A)
2635 -- Runtime Function: unsigned long __fractunsutadi (unsigned long long
2636          accum A)
2637 -- Runtime Function: unsigned long long __fractunsutati (unsigned long
2638          long accum A)
2639 -- Runtime Function: short fract __fractunsqiqq (unsigned char A)
2640 -- Runtime Function: fract __fractunsqihq (unsigned char A)
2641 -- Runtime Function: long fract __fractunsqisq (unsigned char A)
2642 -- Runtime Function: long long fract __fractunsqidq (unsigned char A)
2643 -- Runtime Function: short accum __fractunsqiha (unsigned char A)
2644 -- Runtime Function: accum __fractunsqisa (unsigned char A)
2645 -- Runtime Function: long accum __fractunsqida (unsigned char A)
2646 -- Runtime Function: long long accum __fractunsqita (unsigned char A)
2647 -- Runtime Function: unsigned short fract __fractunsqiuqq (unsigned
2648          char A)
2649 -- Runtime Function: unsigned fract __fractunsqiuhq (unsigned char A)
2650 -- Runtime Function: unsigned long fract __fractunsqiusq (unsigned
2651          char A)
2652 -- Runtime Function: unsigned long long fract __fractunsqiudq
2653          (unsigned char A)
2654 -- Runtime Function: unsigned short accum __fractunsqiuha (unsigned
2655          char A)
2656 -- Runtime Function: unsigned accum __fractunsqiusa (unsigned char A)
2657 -- Runtime Function: unsigned long accum __fractunsqiuda (unsigned
2658          char A)
2659 -- Runtime Function: unsigned long long accum __fractunsqiuta
2660          (unsigned char A)
2661 -- Runtime Function: short fract __fractunshiqq (unsigned short A)
2662 -- Runtime Function: fract __fractunshihq (unsigned short A)
2663 -- Runtime Function: long fract __fractunshisq (unsigned short A)
2664 -- Runtime Function: long long fract __fractunshidq (unsigned short A)
2665 -- Runtime Function: short accum __fractunshiha (unsigned short A)
2666 -- Runtime Function: accum __fractunshisa (unsigned short A)
2667 -- Runtime Function: long accum __fractunshida (unsigned short A)
2668 -- Runtime Function: long long accum __fractunshita (unsigned short A)
2669 -- Runtime Function: unsigned short fract __fractunshiuqq (unsigned
2670          short A)
2671 -- Runtime Function: unsigned fract __fractunshiuhq (unsigned short A)
2672 -- Runtime Function: unsigned long fract __fractunshiusq (unsigned
2673          short A)
2674 -- Runtime Function: unsigned long long fract __fractunshiudq
2675          (unsigned short A)
2676 -- Runtime Function: unsigned short accum __fractunshiuha (unsigned
2677          short A)
2678 -- Runtime Function: unsigned accum __fractunshiusa (unsigned short A)
2679 -- Runtime Function: unsigned long accum __fractunshiuda (unsigned
2680          short A)
2681 -- Runtime Function: unsigned long long accum __fractunshiuta
2682          (unsigned short A)
2683 -- Runtime Function: short fract __fractunssiqq (unsigned int A)
2684 -- Runtime Function: fract __fractunssihq (unsigned int A)
2685 -- Runtime Function: long fract __fractunssisq (unsigned int A)
2686 -- Runtime Function: long long fract __fractunssidq (unsigned int A)
2687 -- Runtime Function: short accum __fractunssiha (unsigned int A)
2688 -- Runtime Function: accum __fractunssisa (unsigned int A)
2689 -- Runtime Function: long accum __fractunssida (unsigned int A)
2690 -- Runtime Function: long long accum __fractunssita (unsigned int A)
2691 -- Runtime Function: unsigned short fract __fractunssiuqq (unsigned
2692          int A)
2693 -- Runtime Function: unsigned fract __fractunssiuhq (unsigned int A)
2694 -- Runtime Function: unsigned long fract __fractunssiusq (unsigned int
2695          A)
2696 -- Runtime Function: unsigned long long fract __fractunssiudq
2697          (unsigned int A)
2698 -- Runtime Function: unsigned short accum __fractunssiuha (unsigned
2699          int A)
2700 -- Runtime Function: unsigned accum __fractunssiusa (unsigned int A)
2701 -- Runtime Function: unsigned long accum __fractunssiuda (unsigned int
2702          A)
2703 -- Runtime Function: unsigned long long accum __fractunssiuta
2704          (unsigned int A)
2705 -- Runtime Function: short fract __fractunsdiqq (unsigned long A)
2706 -- Runtime Function: fract __fractunsdihq (unsigned long A)
2707 -- Runtime Function: long fract __fractunsdisq (unsigned long A)
2708 -- Runtime Function: long long fract __fractunsdidq (unsigned long A)
2709 -- Runtime Function: short accum __fractunsdiha (unsigned long A)
2710 -- Runtime Function: accum __fractunsdisa (unsigned long A)
2711 -- Runtime Function: long accum __fractunsdida (unsigned long A)
2712 -- Runtime Function: long long accum __fractunsdita (unsigned long A)
2713 -- Runtime Function: unsigned short fract __fractunsdiuqq (unsigned
2714          long A)
2715 -- Runtime Function: unsigned fract __fractunsdiuhq (unsigned long A)
2716 -- Runtime Function: unsigned long fract __fractunsdiusq (unsigned
2717          long A)
2718 -- Runtime Function: unsigned long long fract __fractunsdiudq
2719          (unsigned long A)
2720 -- Runtime Function: unsigned short accum __fractunsdiuha (unsigned
2721          long A)
2722 -- Runtime Function: unsigned accum __fractunsdiusa (unsigned long A)
2723 -- Runtime Function: unsigned long accum __fractunsdiuda (unsigned
2724          long A)
2725 -- Runtime Function: unsigned long long accum __fractunsdiuta
2726          (unsigned long A)
2727 -- Runtime Function: short fract __fractunstiqq (unsigned long long A)
2728 -- Runtime Function: fract __fractunstihq (unsigned long long A)
2729 -- Runtime Function: long fract __fractunstisq (unsigned long long A)
2730 -- Runtime Function: long long fract __fractunstidq (unsigned long
2731          long A)
2732 -- Runtime Function: short accum __fractunstiha (unsigned long long A)
2733 -- Runtime Function: accum __fractunstisa (unsigned long long A)
2734 -- Runtime Function: long accum __fractunstida (unsigned long long A)
2735 -- Runtime Function: long long accum __fractunstita (unsigned long
2736          long A)
2737 -- Runtime Function: unsigned short fract __fractunstiuqq (unsigned
2738          long long A)
2739 -- Runtime Function: unsigned fract __fractunstiuhq (unsigned long
2740          long A)
2741 -- Runtime Function: unsigned long fract __fractunstiusq (unsigned
2742          long long A)
2743 -- Runtime Function: unsigned long long fract __fractunstiudq
2744          (unsigned long long A)
2745 -- Runtime Function: unsigned short accum __fractunstiuha (unsigned
2746          long long A)
2747 -- Runtime Function: unsigned accum __fractunstiusa (unsigned long
2748          long A)
2749 -- Runtime Function: unsigned long accum __fractunstiuda (unsigned
2750          long long A)
2751 -- Runtime Function: unsigned long long accum __fractunstiuta
2752          (unsigned long long A)
2753     These functions convert from fractionals to unsigned
2754     non-fractionals; and from unsigned non-fractionals to fractionals,
2755     without saturation.
2756
2757 -- Runtime Function: short fract __satfractunsqiqq (unsigned char A)
2758 -- Runtime Function: fract __satfractunsqihq (unsigned char A)
2759 -- Runtime Function: long fract __satfractunsqisq (unsigned char A)
2760 -- Runtime Function: long long fract __satfractunsqidq (unsigned char
2761          A)
2762 -- Runtime Function: short accum __satfractunsqiha (unsigned char A)
2763 -- Runtime Function: accum __satfractunsqisa (unsigned char A)
2764 -- Runtime Function: long accum __satfractunsqida (unsigned char A)
2765 -- Runtime Function: long long accum __satfractunsqita (unsigned char
2766          A)
2767 -- Runtime Function: unsigned short fract __satfractunsqiuqq (unsigned
2768          char A)
2769 -- Runtime Function: unsigned fract __satfractunsqiuhq (unsigned char
2770          A)
2771 -- Runtime Function: unsigned long fract __satfractunsqiusq (unsigned
2772          char A)
2773 -- Runtime Function: unsigned long long fract __satfractunsqiudq
2774          (unsigned char A)
2775 -- Runtime Function: unsigned short accum __satfractunsqiuha (unsigned
2776          char A)
2777 -- Runtime Function: unsigned accum __satfractunsqiusa (unsigned char
2778          A)
2779 -- Runtime Function: unsigned long accum __satfractunsqiuda (unsigned
2780          char A)
2781 -- Runtime Function: unsigned long long accum __satfractunsqiuta
2782          (unsigned char A)
2783 -- Runtime Function: short fract __satfractunshiqq (unsigned short A)
2784 -- Runtime Function: fract __satfractunshihq (unsigned short A)
2785 -- Runtime Function: long fract __satfractunshisq (unsigned short A)
2786 -- Runtime Function: long long fract __satfractunshidq (unsigned short
2787          A)
2788 -- Runtime Function: short accum __satfractunshiha (unsigned short A)
2789 -- Runtime Function: accum __satfractunshisa (unsigned short A)
2790 -- Runtime Function: long accum __satfractunshida (unsigned short A)
2791 -- Runtime Function: long long accum __satfractunshita (unsigned short
2792          A)
2793 -- Runtime Function: unsigned short fract __satfractunshiuqq (unsigned
2794          short A)
2795 -- Runtime Function: unsigned fract __satfractunshiuhq (unsigned short
2796          A)
2797 -- Runtime Function: unsigned long fract __satfractunshiusq (unsigned
2798          short A)
2799 -- Runtime Function: unsigned long long fract __satfractunshiudq
2800          (unsigned short A)
2801 -- Runtime Function: unsigned short accum __satfractunshiuha (unsigned
2802          short A)
2803 -- Runtime Function: unsigned accum __satfractunshiusa (unsigned short
2804          A)
2805 -- Runtime Function: unsigned long accum __satfractunshiuda (unsigned
2806          short A)
2807 -- Runtime Function: unsigned long long accum __satfractunshiuta
2808          (unsigned short A)
2809 -- Runtime Function: short fract __satfractunssiqq (unsigned int A)
2810 -- Runtime Function: fract __satfractunssihq (unsigned int A)
2811 -- Runtime Function: long fract __satfractunssisq (unsigned int A)
2812 -- Runtime Function: long long fract __satfractunssidq (unsigned int A)
2813 -- Runtime Function: short accum __satfractunssiha (unsigned int A)
2814 -- Runtime Function: accum __satfractunssisa (unsigned int A)
2815 -- Runtime Function: long accum __satfractunssida (unsigned int A)
2816 -- Runtime Function: long long accum __satfractunssita (unsigned int A)
2817 -- Runtime Function: unsigned short fract __satfractunssiuqq (unsigned
2818          int A)
2819 -- Runtime Function: unsigned fract __satfractunssiuhq (unsigned int A)
2820 -- Runtime Function: unsigned long fract __satfractunssiusq (unsigned
2821          int A)
2822 -- Runtime Function: unsigned long long fract __satfractunssiudq
2823          (unsigned int A)
2824 -- Runtime Function: unsigned short accum __satfractunssiuha (unsigned
2825          int A)
2826 -- Runtime Function: unsigned accum __satfractunssiusa (unsigned int A)
2827 -- Runtime Function: unsigned long accum __satfractunssiuda (unsigned
2828          int A)
2829 -- Runtime Function: unsigned long long accum __satfractunssiuta
2830          (unsigned int A)
2831 -- Runtime Function: short fract __satfractunsdiqq (unsigned long A)
2832 -- Runtime Function: fract __satfractunsdihq (unsigned long A)
2833 -- Runtime Function: long fract __satfractunsdisq (unsigned long A)
2834 -- Runtime Function: long long fract __satfractunsdidq (unsigned long
2835          A)
2836 -- Runtime Function: short accum __satfractunsdiha (unsigned long A)
2837 -- Runtime Function: accum __satfractunsdisa (unsigned long A)
2838 -- Runtime Function: long accum __satfractunsdida (unsigned long A)
2839 -- Runtime Function: long long accum __satfractunsdita (unsigned long
2840          A)
2841 -- Runtime Function: unsigned short fract __satfractunsdiuqq (unsigned
2842          long A)
2843 -- Runtime Function: unsigned fract __satfractunsdiuhq (unsigned long
2844          A)
2845 -- Runtime Function: unsigned long fract __satfractunsdiusq (unsigned
2846          long A)
2847 -- Runtime Function: unsigned long long fract __satfractunsdiudq
2848          (unsigned long A)
2849 -- Runtime Function: unsigned short accum __satfractunsdiuha (unsigned
2850          long A)
2851 -- Runtime Function: unsigned accum __satfractunsdiusa (unsigned long
2852          A)
2853 -- Runtime Function: unsigned long accum __satfractunsdiuda (unsigned
2854          long A)
2855 -- Runtime Function: unsigned long long accum __satfractunsdiuta
2856          (unsigned long A)
2857 -- Runtime Function: short fract __satfractunstiqq (unsigned long long
2858          A)
2859 -- Runtime Function: fract __satfractunstihq (unsigned long long A)
2860 -- Runtime Function: long fract __satfractunstisq (unsigned long long
2861          A)
2862 -- Runtime Function: long long fract __satfractunstidq (unsigned long
2863          long A)
2864 -- Runtime Function: short accum __satfractunstiha (unsigned long long
2865          A)
2866 -- Runtime Function: accum __satfractunstisa (unsigned long long A)
2867 -- Runtime Function: long accum __satfractunstida (unsigned long long
2868          A)
2869 -- Runtime Function: long long accum __satfractunstita (unsigned long
2870          long A)
2871 -- Runtime Function: unsigned short fract __satfractunstiuqq (unsigned
2872          long long A)
2873 -- Runtime Function: unsigned fract __satfractunstiuhq (unsigned long
2874          long A)
2875 -- Runtime Function: unsigned long fract __satfractunstiusq (unsigned
2876          long long A)
2877 -- Runtime Function: unsigned long long fract __satfractunstiudq
2878          (unsigned long long A)
2879 -- Runtime Function: unsigned short accum __satfractunstiuha (unsigned
2880          long long A)
2881 -- Runtime Function: unsigned accum __satfractunstiusa (unsigned long
2882          long A)
2883 -- Runtime Function: unsigned long accum __satfractunstiuda (unsigned
2884          long long A)
2885 -- Runtime Function: unsigned long long accum __satfractunstiuta
2886          (unsigned long long A)
2887     These functions convert from unsigned non-fractionals to
2888     fractionals, with saturation.
2889
2890
2891File: gccint.info,  Node: Exception handling routines,  Next: Miscellaneous routines,  Prev: Fixed-point fractional library routines,  Up: Libgcc
2892
28934.5 Language-independent routines for exception handling
2894========================================================
2895
2896document me!
2897
2898       _Unwind_DeleteException
2899       _Unwind_Find_FDE
2900       _Unwind_ForcedUnwind
2901       _Unwind_GetGR
2902       _Unwind_GetIP
2903       _Unwind_GetLanguageSpecificData
2904       _Unwind_GetRegionStart
2905       _Unwind_GetTextRelBase
2906       _Unwind_GetDataRelBase
2907       _Unwind_RaiseException
2908       _Unwind_Resume
2909       _Unwind_SetGR
2910       _Unwind_SetIP
2911       _Unwind_FindEnclosingFunction
2912       _Unwind_SjLj_Register
2913       _Unwind_SjLj_Unregister
2914       _Unwind_SjLj_RaiseException
2915       _Unwind_SjLj_ForcedUnwind
2916       _Unwind_SjLj_Resume
2917       __deregister_frame
2918       __deregister_frame_info
2919       __deregister_frame_info_bases
2920       __register_frame
2921       __register_frame_info
2922       __register_frame_info_bases
2923       __register_frame_info_table
2924       __register_frame_info_table_bases
2925       __register_frame_table
2926
2927
2928File: gccint.info,  Node: Miscellaneous routines,  Prev: Exception handling routines,  Up: Libgcc
2929
29304.6 Miscellaneous runtime library routines
2931==========================================
2932
29334.6.1 Cache control functions
2934-----------------------------
2935
2936 -- Runtime Function: void __clear_cache (char *BEG, char *END)
2937     This function clears the instruction cache between BEG and END.
2938
29394.6.2 Split stack functions and variables
2940-----------------------------------------
2941
2942 -- Runtime Function: void * __splitstack_find (void *SEGMENT_ARG, void
2943          *SP, size_t LEN, void **NEXT_SEGMENT, void **NEXT_SP, void
2944          **INITIAL_SP)
2945     When using `-fsplit-stack', this call may be used to iterate over
2946     the stack segments.  It may be called like this:
2947            void *next_segment = NULL;
2948            void *next_sp = NULL;
2949            void *initial_sp = NULL;
2950            void *stack;
2951            size_t stack_size;
2952            while ((stack = __splitstack_find (next_segment, next_sp,
2953                                               &stack_size, &next_segment,
2954                                               &next_sp, &initial_sp))
2955                   != NULL)
2956              {
2957                /* Stack segment starts at stack and is
2958                   stack_size bytes long.  */
2959              }
2960
2961     There is no way to iterate over the stack segments of a different
2962     thread.  However, what is permitted is for one thread to call this
2963     with the SEGMENT_ARG and SP arguments NULL, to pass NEXT_SEGMENT,
2964     NEXT_SP, and INITIAL_SP to a different thread, and then to suspend
2965     one way or another.  A different thread may run the subsequent
2966     `__splitstack_find' iterations.  Of course, this will only work if
2967     the first thread is suspended while the second thread is calling
2968     `__splitstack_find'.  If not, the second thread could be looking
2969     at the stack while it is changing, and anything could happen.
2970
2971 -- Variable: __morestack_segments
2972 -- Variable: __morestack_current_segment
2973 -- Variable: __morestack_initial_sp
2974     Internal variables used by the `-fsplit-stack' implementation.
2975
2976
2977File: gccint.info,  Node: Languages,  Next: Source Tree,  Prev: Libgcc,  Up: Top
2978
29795 Language Front Ends in GCC
2980****************************
2981
2982The interface to front ends for languages in GCC, and in particular the
2983`tree' structure (*note GENERIC::), was initially designed for C, and
2984many aspects of it are still somewhat biased towards C and C-like
2985languages.  It is, however, reasonably well suited to other procedural
2986languages, and front ends for many such languages have been written for
2987GCC.
2988
2989 Writing a compiler as a front end for GCC, rather than compiling
2990directly to assembler or generating C code which is then compiled by
2991GCC, has several advantages:
2992
2993   * GCC front ends benefit from the support for many different target
2994     machines already present in GCC.
2995
2996   * GCC front ends benefit from all the optimizations in GCC.  Some of
2997     these, such as alias analysis, may work better when GCC is
2998     compiling directly from source code then when it is compiling from
2999     generated C code.
3000
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,
3005GCC front 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
3018GCC is built.  The user documentation for building and installing GCC
3019is in a separate manual (`http://gcc.gnu.org/install/'), with which it
3020is presumed 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
3051"native".  If build and host are the same but target is different, this
3052is called a "cross".  If build, host, and target are all different this
3053is called a "canadian" (for obscure reasons dealing with Canada's
3054political party and the background of the person working on the build
3055at that time).  If host and target are the same, but build is
3056different, you are using a cross-compiler to build a native for a
3057different system.  Some people call this a "host-x-host", "crossed
3058native", or "cross-built native".  If build and target are the same,
3059but host is different, you are using a cross compiler to build a cross
3060compiler that produces code for the machine you're building on.  This
3061is rare, so there is no common way of describing it.  There is a
3062proposal to call this a "crossback".
3063
3064 If build and host are the same, the GCC you are building will also be
3065used to build the target libraries (like `libstdc++').  If build and
3066host are different, you must have already built and installed a cross
3067compiler that will be used to build the target libraries (if you
3068configured with `--target=foo-bar', this compiler will be called
3069`foo-bar-gcc').
3070
3071 In the case of target libraries, the machine you're building for is the
3072machine you specified with `--target'.  So, build is the machine you're
3073building on (no change there), host is the machine you're building for
3074(the target libraries are built for the target, so host is the target
3075you specified), and target doesn't apply (because you're not building a
3076compiler, you're building libraries).  The configure/make process will
3077adjust these variables as needed.  It also sets `$with_cross_host' to
3078the original `--host' value in case you need it.
3079
3080 The `libiberty' support library is built up to three times: once for
3081the host, once for the target (even if they are the same), and once for
3082the build if build and host are different.  This allows it to be used
3083by all programs which are generated in the course of the build process.
3084
3085
3086File: gccint.info,  Node: Top Level,  Next: gcc Directory,  Prev: Configure Terms,  Up: Source Tree
3087
30886.2 Top Level Source Directory
3089==============================
3090
3091The top level source directory in a GCC distribution contains several
3092files and directories that are shared with other software distributions
3093such as that of GNU Binutils.  It also contains several subdirectories
3094that contain parts of GCC and its runtime libraries:
3095
3096`boehm-gc'
3097     The Boehm conservative garbage collector, used as part of the Java
3098     runtime library.
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'
3119     Subdirectory: 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
3129     include 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 Java 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 (http://code.google.com/p/go/).
3156
3157`libgomp'
3158     The GNU OpenMP 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`libjava'
3170     The Java runtime library.
3171
3172`libmudflap'
3173     The `libmudflap' library, used for instrumenting pointer and array
3174     dereferencing operations.
3175
3176`libobjc'
3177     The Objective-C and Objective-C++ runtime library.
3178
3179`libquadmath'
3180     The runtime support library for quad-precision math operations.
3181
3182`libssp'
3183     The Stack protector runtime library.
3184
3185`libstdc++-v3'
3186     The C++ runtime library.
3187
3188`lto-plugin'
3189     Plugin used by `gold' if link-time optimizations are enabled.
3190
3191`maintainer-scripts'
3192     Scripts used by the `gccadmin' account on `gcc.gnu.org'.
3193
3194`zlib'
3195     The `zlib' compression library, used by the Java front end, as
3196     part of the Java runtime library, and for compressing and
3197     uncompressing GCC's intermediate language in LTO object files.
3198
3199 The build system in the top level directory, including how recursion
3200into subdirectories works and how building runtime libraries for
3201multilibs is handled, is documented in a separate manual, included with
3202GNU Binutils.  *Note GNU configure and build system: (configure)Top,
3203for details.
3204
3205
3206File: gccint.info,  Node: gcc Directory,  Prev: Top Level,  Up: Source Tree
3207
32086.3 The `gcc' Subdirectory
3209==========================
3210
3211The `gcc' directory contains many files that are part of the C sources
3212of GCC, other files used as part of the configuration and build
3213process, and subdirectories including documentation and a testsuite.
3214The files that are sources of GCC are documented in a separate chapter.
3215*Note Passes and Files of the Compiler: Passes.
3216
3217* Menu:
3218
3219* Subdirectories:: Subdirectories of `gcc'.
3220* Configuration::  The configuration process, and the files it uses.
3221* Build::          The build system in the `gcc' directory.
3222* Makefile::       Targets in `gcc/Makefile'.
3223* Library Files::  Library source files and headers under `gcc/'.
3224* Headers::        Headers installed by GCC.
3225* Documentation::  Building documentation in GCC.
3226* Front End::      Anatomy of a language front end.
3227* Back End::       Anatomy of a target back end.
3228
3229
3230File: gccint.info,  Node: Subdirectories,  Next: Configuration,  Up: gcc Directory
3231
32326.3.1 Subdirectories of `gcc'
3233-----------------------------
3234
3235The `gcc' directory contains the following subdirectories:
3236
3237`LANGUAGE'
3238     Subdirectories for various languages.  Directories containing a
3239     file `config-lang.in' are language subdirectories.  The contents of
3240     the subdirectories `c' (for C), `cp' (for C++), `objc' (for
3241     Objective-C), `objcp' (for Objective-C++), and `lto' (for LTO) are
3242     documented in this manual (*note Passes and Files of the Compiler:
3243     Passes.); those for other languages are not.  *Note Anatomy of a
3244     Language Front End: Front End, for details of the files in these
3245     directories.
3246
3247`common'
3248     Source files shared between the compiler drivers (such as `gcc')
3249     and the compilers proper (such as `cc1').  If an architecture
3250     defines target hooks shared between those places, it also has a
3251     subdirectory in `common/config'.  *Note Target Structure::.
3252
3253`config'
3254     Configuration files for supported architectures and operating
3255     systems.  *Note Anatomy of a Target Back End: Back End, for
3256     details of the files in this directory.
3257
3258`doc'
3259     Texinfo documentation for GCC, together with automatically
3260     generated man pages and support for converting the installation
3261     manual to HTML.  *Note Documentation::.
3262
3263`ginclude'
3264     System headers installed by GCC, mainly those required by the C
3265     standard of freestanding implementations.  *Note Headers Installed
3266     by GCC: Headers, for details of when these and other headers are
3267     installed.
3268
3269`po'
3270     Message catalogs with translations of messages produced by GCC into
3271     various languages, `LANGUAGE.po'.  This directory also contains
3272     `gcc.pot', the template for these message catalogues, `exgettext',
3273     a wrapper around `gettext' to extract the messages from the GCC
3274     sources and create `gcc.pot', which is run by `make gcc.pot', and
3275     `EXCLUDES', a list of files from which messages should not be
3276     extracted.
3277
3278`testsuite'
3279     The GCC testsuites (except for those for runtime libraries).
3280     *Note Testsuites::.
3281
3282
3283File: gccint.info,  Node: Configuration,  Next: Build,  Prev: Subdirectories,  Up: gcc Directory
3284
32856.3.2 Configuration in the `gcc' Directory
3286------------------------------------------
3287
3288The `gcc' directory is configured with an Autoconf-generated script
3289`configure'.  The `configure' script is generated from `configure.ac'
3290and `aclocal.m4'.  From the files `configure.ac' and `acconfig.h',
3291Autoheader generates the file `config.in'.  The file `cstamp-h.in' is
3292used as a timestamp.
3293
3294* Menu:
3295
3296* Config Fragments::     Scripts used by `configure'.
3297* System Config::        The `config.build', `config.host', and
3298                         `config.gcc' files.
3299* Configuration Files::  Files created by running `configure'.
3300
3301
3302File: gccint.info,  Node: Config Fragments,  Next: System Config,  Up: Configuration
3303
33046.3.2.1 Scripts Used by `configure'
3305...................................
3306
3307`configure' uses some other scripts to help in its work:
3308
3309   * The standard GNU `config.sub' and `config.guess' files, kept in
3310     the top level directory, are used.
3311
3312   * The file `config.gcc' is used to handle configuration specific to
3313     the particular target machine.  The file `config.build' is used to
3314     handle configuration specific to the particular build machine.
3315     The file `config.host' is used to handle configuration specific to
3316     the particular host machine.  (In general, these should only be
3317     used for features that cannot reasonably be tested in Autoconf
3318     feature tests.)  *Note The `config.build'; `config.host'; and
3319     `config.gcc' Files: System Config, for details of the contents of
3320     these files.
3321
3322   * Each language subdirectory has a file `LANGUAGE/config-lang.in'
3323     that is used for front-end-specific configuration.  *Note The
3324     Front End `config-lang.in' File: Front End Config, for details of
3325     this file.
3326
3327   * A helper script `configure.frag' is used as part of creating the
3328     output of `configure'.
3329
3330
3331File: gccint.info,  Node: System Config,  Next: Configuration Files,  Prev: Config Fragments,  Up: Configuration
3332
33336.3.2.2 The `config.build'; `config.host'; and `config.gcc' Files
3334.................................................................
3335
3336The `config.build' file contains specific rules for particular systems
3337which GCC is built on.  This should be used as rarely as possible, as
3338the behavior of the build system can always be detected by autoconf.
3339
3340 The `config.host' file contains specific rules for particular systems
3341which GCC will run on.  This is rarely needed.
3342
3343 The `config.gcc' file contains specific rules for particular systems
3344which GCC will generate code for.  This is usually needed.
3345
3346 Each file has a list of the shell variables it sets, with
3347descriptions, at the top of the file.
3348
3349 FIXME: document the contents of these files, and what variables should
3350be set to control build, host and target configuration.
3351
3352
3353File: gccint.info,  Node: Configuration Files,  Prev: System Config,  Up: Configuration
3354
33556.3.2.3 Files Created by `configure'
3356....................................
3357
3358Here we spell out what files will be set up by `configure' in the `gcc'
3359directory.  Some other files are created as temporary files in the
3360configuration process, and are not used in the subsequent build; these
3361are not documented.
3362
3363   * `Makefile' is constructed from `Makefile.in', together with the
3364     host and target fragments (*note Makefile Fragments: Fragments.)
3365     `t-TARGET' and `x-HOST' from `config', if any, and language
3366     Makefile fragments `LANGUAGE/Make-lang.in'.
3367
3368   * `auto-host.h' contains information about the host machine
3369     determined by `configure'.  If the host machine is different from
3370     the build machine, then `auto-build.h' is also created, containing
3371     such information about the build machine.
3372
3373   * `config.status' is a script that may be run to recreate the
3374     current configuration.
3375
3376   * `configargs.h' is a header containing details of the arguments
3377     passed to `configure' to configure GCC, and of the thread model
3378     used.
3379
3380   * `cstamp-h' is used as a timestamp.
3381
3382   * If a language `config-lang.in' file (*note The Front End
3383     `config-lang.in' File: Front End Config.) sets `outputs', then the
3384     files listed in `outputs' there are also generated.
3385
3386 The following configuration headers are created from the Makefile,
3387using `mkconfig.sh', rather than directly by `configure'.  `config.h',
3388`bconfig.h' and `tconfig.h' all contain the `xm-MACHINE.h' header, if
3389any, appropriate to the host, build and target machines respectively,
3390the configuration headers for the target, and some definitions; for the
3391host and build machines, these include the autoconfigured headers
3392generated by `configure'.  The other configuration headers are
3393determined by `config.gcc'.  They also contain the typedefs for `rtx',
3394`rtvec' and `tree'.
3395
3396   * `config.h', for use in programs that run on the host machine.
3397
3398   * `bconfig.h', for use in programs that run on the build machine.
3399
3400   * `tconfig.h', for use in programs and libraries for the target
3401     machine.
3402
3403   * `tm_p.h', which includes the header `MACHINE-protos.h' that
3404     contains prototypes for functions in the target `MACHINE.c' file.
3405     The header `MACHINE-protos.h' can include prototypes of functions
3406     that use rtl and tree data structures inside appropriate `#ifdef
3407     RTX_CODE' and `#ifdef TREE_CODE' conditional code segements.  The
3408     `MACHINE-protos.h' is included after the `rtl.h' and/or `tree.h'
3409     would have been included.  The `tm_p.h' also includes the header
3410     `tm-preds.h' which is generated by `genpreds' program during the
3411     build to define the declarations and inline functions for the
3412     predicate functions.
3413
3414
3415File: gccint.info,  Node: Build,  Next: Makefile,  Prev: Configuration,  Up: gcc Directory
3416
34176.3.3 Build System in the `gcc' Directory
3418-----------------------------------------
3419
3420FIXME: describe the build system, including what is built in what
3421stages.  Also list the various source files that are used in the build
3422process but aren't source files of GCC itself and so aren't documented
3423below (*note Passes::).
3424
3425
3426File: gccint.info,  Node: Makefile,  Next: Library Files,  Prev: Build,  Up: gcc Directory
3427
34286.3.4 Makefile Targets
3429----------------------
3430
3431These targets are available from the `gcc' directory:
3432
3433`all'
3434     This is the default target.  Depending on what your
3435     build/host/target configuration is, it coordinates all the things
3436     that need to be built.
3437
3438`doc'
3439     Produce info-formatted documentation and man pages.  Essentially it
3440     calls `make man' and `make info'.
3441
3442`dvi'
3443     Produce DVI-formatted documentation.
3444
3445`pdf'
3446     Produce PDF-formatted documentation.
3447
3448`html'
3449     Produce HTML-formatted documentation.
3450
3451`man'
3452     Generate man pages.
3453
3454`info'
3455     Generate info-formatted pages.
3456
3457`mostlyclean'
3458     Delete the files made while building the compiler.
3459
3460`clean'
3461     That, and all the other files built by `make all'.
3462
3463`distclean'
3464     That, and all the files created by `configure'.
3465
3466`maintainer-clean'
3467     Distclean plus any file that can be generated from other files.
3468     Note that additional tools may be required beyond what is normally
3469     needed to build GCC.
3470
3471`srcextra'
3472     Generates files in the source directory that are not
3473     version-controlled but should go into a release tarball.
3474
3475`srcinfo'
3476`srcman'
3477     Copies the info-formatted and manpage documentation into the source
3478     directory usually for the purpose of generating a release tarball.
3479
3480`install'
3481     Installs GCC.
3482
3483`uninstall'
3484     Deletes installed files, though this is not supported.
3485
3486`check'
3487     Run the testsuite.  This creates a `testsuite' subdirectory that
3488     has various `.sum' and `.log' files containing the results of the
3489     testing.  You can run subsets with, for example, `make check-gcc'.
3490     You can specify specific tests by setting `RUNTESTFLAGS' to be the
3491     name of the `.exp' file, optionally followed by (for some tests)
3492     an equals and a file wildcard, like:
3493
3494          make check-gcc RUNTESTFLAGS="execute.exp=19980413-*"
3495
3496     Note that running the testsuite may require additional tools be
3497     installed, such as Tcl or DejaGnu.
3498
3499 The toplevel tree from which you start GCC compilation is not the GCC
3500directory, but rather a complex Makefile that coordinates the various
3501steps of the build, including bootstrapping the compiler and using the
3502new compiler to build target libraries.
3503
3504 When GCC is configured for a native configuration, the default action
3505for `make' is to do a full three-stage bootstrap.  This means that GCC
3506is built three times--once with the native compiler, once with the
3507native-built compiler it just built, and once with the compiler it
3508built the second time.  In theory, the last two should produce the same
3509results, which `make compare' can check.  Each stage is configured
3510separately and compiled into a separate directory, to minimize problems
3511due to ABI incompatibilities between the native compiler and GCC.
3512
3513 If you do a change, rebuilding will also start from the first stage
3514and "bubble" up the change through the three stages.  Each stage is
3515taken from its build directory (if it had been built previously),
3516rebuilt, and copied to its subdirectory.  This will allow you to, for
3517example, continue a bootstrap after fixing a bug which causes the
3518stage2 build to crash.  It does not provide as good coverage of the
3519compiler as bootstrapping from scratch, but it ensures that the new
3520code is syntactically correct (e.g., that you did not use GCC extensions
3521by mistake), and avoids spurious bootstrap comparison failures(1).
3522
3523 Other targets available from the top level include:
3524
3525`bootstrap-lean'
3526     Like `bootstrap', except that the various stages are removed once
3527     they're no longer needed.  This saves disk space.
3528
3529`bootstrap2'
3530`bootstrap2-lean'
3531     Performs only the first two stages of bootstrap.  Unlike a
3532     three-stage bootstrap, this does not perform a comparison to test
3533     that the compiler is running properly.  Note that the disk space
3534     required by a "lean" bootstrap is approximately independent of the
3535     number of stages.
3536
3537`stageN-bubble (N = 1...4, profile, feedback)'
3538     Rebuild all the stages up to N, with the appropriate flags,
3539     "bubbling" the changes as described above.
3540
3541`all-stageN (N = 1...4, profile, feedback)'
3542     Assuming that stage N has already been built, rebuild it with the
3543     appropriate flags.  This is rarely needed.
3544
3545`cleanstrap'
3546     Remove everything (`make clean') and rebuilds (`make bootstrap').
3547
3548`compare'
3549     Compares the results of stages 2 and 3.  This ensures that the
3550     compiler is running properly, since it should produce the same
3551     object files regardless of how it itself was compiled.
3552
3553`profiledbootstrap'
3554     Builds a compiler with profiling feedback information.  In this
3555     case, the second and third stages are named `profile' and
3556     `feedback', respectively.  For more information, see *note
3557     Building with profile feedback: (gccinstall)Building.
3558
3559`restrap'
3560     Restart a bootstrap, so that everything that was not built with
3561     the system compiler is rebuilt.
3562
3563`stageN-start (N = 1...4, profile, feedback)'
3564     For each package that is bootstrapped, rename directories so that,
3565     for example, `gcc' points to the stageN GCC, compiled with the
3566     stageN-1 GCC(2).
3567
3568     You will invoke this target if you need to test or debug the
3569     stageN GCC.  If you only need to execute GCC (but you need not run
3570     `make' either to rebuild it or to run test suites), you should be
3571     able to work directly in the `stageN-gcc' directory.  This makes
3572     it easier to debug multiple stages in parallel.
3573
3574`stage'
3575     For each package that is bootstrapped, relocate its build directory
3576     to indicate its stage.  For example, if the `gcc' directory points
3577     to the stage2 GCC, after invoking this target it will be renamed
3578     to `stage2-gcc'.
3579
3580
3581 If you wish to use non-default GCC flags when compiling the stage2 and
3582stage3 compilers, set `BOOT_CFLAGS' on the command line when doing
3583`make'.
3584
3585 Usually, the first stage only builds the languages that the compiler
3586is written in: typically, C and maybe Ada.  If you are debugging a
3587miscompilation of a different stage2 front-end (for example, of the
3588Fortran front-end), you may want to have front-ends for other languages
3589in the first stage as well.  To do so, set `STAGE1_LANGUAGES' on the
3590command line when doing `make'.
3591
3592 For example, in the aforementioned scenario of debugging a Fortran
3593front-end miscompilation caused by the stage1 compiler, you may need a
3594command like
3595
3596     make stage2-bubble STAGE1_LANGUAGES=c,fortran
3597
3598 Alternatively, you can use per-language targets to build and test
3599languages that are not enabled by default in stage1.  For example,
3600`make f951' will build a Fortran compiler even in the stage1 build
3601directory.
3602
3603 ---------- Footnotes ----------
3604
3605 (1) Except if the compiler was buggy and miscompiled some of the files
3606that were not modified.  In this case, it's best to use `make restrap'.
3607
3608 (2) Customarily, the system compiler is also termed the `stage0' GCC.
3609
3610
3611File: gccint.info,  Node: Library Files,  Next: Headers,  Prev: Makefile,  Up: gcc Directory
3612
36136.3.5 Library Source Files and Headers under the `gcc' Directory
3614----------------------------------------------------------------
3615
3616FIXME: list here, with explanation, all the C source files and headers
3617under the `gcc' directory that aren't built into the GCC executable but
3618rather are part of runtime libraries and object files, such as
3619`crtstuff.c' and `unwind-dw2.c'.  *Note Headers Installed by GCC:
3620Headers, for more information about the `ginclude' directory.
3621
3622
3623File: gccint.info,  Node: Headers,  Next: Documentation,  Prev: Library Files,  Up: gcc Directory
3624
36256.3.6 Headers Installed by GCC
3626------------------------------
3627
3628In general, GCC expects the system C library to provide most of the
3629headers to be used with it.  However, GCC will fix those headers if
3630necessary to make them work with GCC, and will install some headers
3631required of freestanding implementations.  These headers are installed
3632in `LIBSUBDIR/include'.  Headers for non-C runtime libraries are also
3633installed by GCC; these are not documented here.  (FIXME: document them
3634somewhere.)
3635
3636 Several of the headers GCC installs are in the `ginclude' directory.
3637These headers, `iso646.h', `stdarg.h', `stdbool.h', and `stddef.h', are
3638installed in `LIBSUBDIR/include', unless the target Makefile fragment
3639(*note Target Fragment::) overrides this by setting `USER_H'.
3640
3641 In addition to these headers and those generated by fixing system
3642headers to work with GCC, some other headers may also be installed in
3643`LIBSUBDIR/include'.  `config.gcc' may set `extra_headers'; this
3644specifies additional headers under `config' to be installed on some
3645systems.
3646
3647 GCC installs its own version of `<float.h>', from `ginclude/float.h'.
3648This is done to cope with command-line options that change the
3649representation of floating point numbers.
3650
3651 GCC also installs its own version of `<limits.h>'; this is generated
3652from `glimits.h', together with `limitx.h' and `limity.h' if the system
3653also has its own version of `<limits.h>'.  (GCC provides its own header
3654because it is required of ISO C freestanding implementations, but needs
3655to include the system header from its own header as well because other
3656standards such as POSIX specify additional values to be defined in
3657`<limits.h>'.)  The system's `<limits.h>' header is used via
3658`LIBSUBDIR/include/syslimits.h', which is copied from `gsyslimits.h' if
3659it does not need fixing to work with GCC; if it needs fixing,
3660`syslimits.h' is the fixed copy.
3661
3662 GCC can also install `<tgmath.h>'.  It will do this when `config.gcc'
3663sets `use_gcc_tgmath' to `yes'.
3664
3665
3666File: gccint.info,  Node: Documentation,  Next: Front End,  Prev: Headers,  Up: gcc Directory
3667
36686.3.7 Building Documentation
3669----------------------------
3670
3671The main GCC documentation is in the form of manuals in Texinfo format.
3672These are installed in Info format; DVI versions may be generated by
3673`make dvi', PDF versions by `make pdf', and HTML versions by `make
3674html'.  In addition, some man pages are generated from the Texinfo
3675manuals, there are some other text files with miscellaneous
3676documentation, and runtime libraries have their own documentation
3677outside the `gcc' directory.  FIXME: document the documentation for
3678runtime libraries somewhere.
3679
3680* Menu:
3681
3682* Texinfo Manuals::      GCC manuals in Texinfo format.
3683* Man Page Generation::  Generating man pages from Texinfo manuals.
3684* Miscellaneous Docs::   Miscellaneous text files with documentation.
3685
3686
3687File: gccint.info,  Node: Texinfo Manuals,  Next: Man Page Generation,  Up: Documentation
3688
36896.3.7.1 Texinfo Manuals
3690.......................
3691
3692The manuals for GCC as a whole, and the C and C++ front ends, are in
3693files `doc/*.texi'.  Other front ends have their own manuals in files
3694`LANGUAGE/*.texi'.  Common files `doc/include/*.texi' are provided
3695which may be included in multiple manuals; the following files are in
3696`doc/include':
3697
3698`fdl.texi'
3699     The GNU Free Documentation License.
3700
3701`funding.texi'
3702     The section "Funding Free Software".
3703
3704`gcc-common.texi'
3705     Common definitions for manuals.
3706
3707`gpl_v3.texi'
3708     The GNU General Public License.
3709
3710`texinfo.tex'
3711     A copy of `texinfo.tex' known to work with the GCC manuals.
3712
3713 DVI-formatted manuals are generated by `make dvi', which uses
3714`texi2dvi' (via the Makefile macro `$(TEXI2DVI)').  PDF-formatted
3715manuals are generated by `make pdf', which uses `texi2pdf' (via the
3716Makefile macro `$(TEXI2PDF)').  HTML formatted manuals are generated by
3717`make html'.  Info manuals are generated by `make info' (which is run
3718as part of a bootstrap); this generates the manuals in the source
3719directory, using `makeinfo' via the Makefile macro `$(MAKEINFO)', and
3720they are included in release distributions.
3721
3722 Manuals are also provided on the GCC web site, in both HTML and
3723PostScript forms.  This is done via the script
3724`maintainer-scripts/update_web_docs_svn'.  Each manual to be provided
3725online must be listed in the definition of `MANUALS' in that file; a
3726file `NAME.texi' must only appear once in the source tree, and the
3727output manual must have the same name as the source file.  (However,
3728other Texinfo files, included in manuals but not themselves the root
3729files of manuals, may have names that appear more than once in the
3730source tree.)  The manual file `NAME.texi' should only include other
3731files in its own directory or in `doc/include'.  HTML manuals will be
3732generated by `makeinfo --html', PostScript manuals by `texi2dvi' and
3733`dvips', and PDF manuals by `texi2pdf'.  All Texinfo files that are
3734parts of manuals must be version-controlled, even if they are generated
3735files, for the generation of online manuals to work.
3736
3737 The installation manual, `doc/install.texi', is also provided on the
3738GCC web site.  The HTML version is generated by the script
3739`doc/install.texi2html'.
3740
3741
3742File: gccint.info,  Node: Man Page Generation,  Next: Miscellaneous Docs,  Prev: Texinfo Manuals,  Up: Documentation
3743
37446.3.7.2 Man Page Generation
3745...........................
3746
3747Because of user demand, in addition to full Texinfo manuals, man pages
3748are provided which contain extracts from those manuals.  These man
3749pages are generated from the Texinfo manuals using
3750`contrib/texi2pod.pl' and `pod2man'.  (The man page for `g++',
3751`cp/g++.1', just contains a `.so' reference to `gcc.1', but all the
3752other man pages are generated from Texinfo manuals.)
3753
3754 Because many systems may not have the necessary tools installed to
3755generate the man pages, they are only generated if the `configure'
3756script detects that recent enough tools are installed, and the
3757Makefiles allow generating man pages to fail without aborting the
3758build.  Man pages are also included in release distributions.  They are
3759generated in the source directory.
3760
3761 Magic comments in Texinfo files starting `@c man' control what parts
3762of a Texinfo file go into a man page.  Only a subset of Texinfo is
3763supported by `texi2pod.pl', and it may be necessary to add support for
3764more Texinfo features to this script when generating new man pages.  To
3765improve the man page output, some special Texinfo macros are provided
3766in `doc/include/gcc-common.texi' which `texi2pod.pl' understands:
3767
3768`@gcctabopt'
3769     Use in the form `@table @gcctabopt' for tables of options, where
3770     for printed output the effect of `@code' is better than that of
3771     `@option' but for man page output a different effect is wanted.
3772
3773`@gccoptlist'
3774     Use for summary lists of options in manuals.
3775
3776`@gol'
3777     Use at the end of each line inside `@gccoptlist'.  This is
3778     necessary to avoid problems with differences in how the
3779     `@gccoptlist' macro is handled by different Texinfo formatters.
3780
3781 FIXME: describe the `texi2pod.pl' input language and magic comments in
3782more detail.
3783
3784
3785File: gccint.info,  Node: Miscellaneous Docs,  Prev: Man Page Generation,  Up: Documentation
3786
37876.3.7.3 Miscellaneous Documentation
3788...................................
3789
3790In addition to the formal documentation that is installed by GCC, there
3791are several other text files in the `gcc' subdirectory with
3792miscellaneous documentation:
3793
3794`ABOUT-GCC-NLS'
3795     Notes on GCC's Native Language Support.  FIXME: this should be
3796     part of this manual rather than a separate file.
3797
3798`ABOUT-NLS'
3799     Notes on the Free Translation Project.
3800
3801`COPYING'
3802`COPYING3'
3803     The GNU General Public License, Versions 2 and 3.
3804
3805`COPYING.LIB'
3806`COPYING3.LIB'
3807     The GNU Lesser General Public License, Versions 2.1 and 3.
3808
3809`*ChangeLog*'
3810`*/ChangeLog*'
3811     Change log files for various parts of GCC.
3812
3813`LANGUAGES'
3814     Details of a few changes to the GCC front-end interface.  FIXME:
3815     the information in this file should be part of general
3816     documentation of the front-end interface in this manual.
3817
3818`ONEWS'
3819     Information about new features in old versions of GCC.  (For recent
3820     versions, the information is on the GCC web site.)
3821
3822`README.Portability'
3823     Information about portability issues when writing code in GCC.
3824     FIXME: why isn't this part of this manual or of the GCC Coding
3825     Conventions?
3826
3827 FIXME: document such files in subdirectories, at least `config', `c',
3828`cp', `objc', `testsuite'.
3829
3830
3831File: gccint.info,  Node: Front End,  Next: Back End,  Prev: Documentation,  Up: gcc Directory
3832
38336.3.8 Anatomy of a Language Front End
3834-------------------------------------
3835
3836A front end for a language in GCC has the following parts:
3837
3838   * A directory `LANGUAGE' under `gcc' containing source files for
3839     that front end.  *Note The Front End `LANGUAGE' Directory: Front
3840     End Directory, for details.
3841
3842   * A mention of the language in the list of supported languages in
3843     `gcc/doc/install.texi'.
3844
3845   * A mention of the name under which the language's runtime library is
3846     recognized by `--enable-shared=PACKAGE' in the documentation of
3847     that option in `gcc/doc/install.texi'.
3848
3849   * A mention of any special prerequisites for building the front end
3850     in the documentation of prerequisites in `gcc/doc/install.texi'.
3851
3852   * Details of contributors to that front end in
3853     `gcc/doc/contrib.texi'.  If the details are in that front end's
3854     own manual then there should be a link to that manual's list in
3855     `contrib.texi'.
3856
3857   * Information about support for that language in
3858     `gcc/doc/frontends.texi'.
3859
3860   * Information about standards for that language, and the front end's
3861     support for them, in `gcc/doc/standards.texi'.  This may be a link
3862     to such information in the front end's own manual.
3863
3864   * Details of source file suffixes for that language and `-x LANG'
3865     options supported, in `gcc/doc/invoke.texi'.
3866
3867   * Entries in `default_compilers' in `gcc.c' for source file suffixes
3868     for that language.
3869
3870   * Preferably testsuites, which may be under `gcc/testsuite' or
3871     runtime library directories.  FIXME: document somewhere how to
3872     write testsuite harnesses.
3873
3874   * Probably a runtime library for the language, outside the `gcc'
3875     directory.  FIXME: document this further.
3876
3877   * Details of the directories of any runtime libraries in
3878     `gcc/doc/sourcebuild.texi'.
3879
3880   * Check targets in `Makefile.def' for the top-level `Makefile' to
3881     check just the compiler or the compiler and runtime library for the
3882     language.
3883
3884 If the front end is added to the official GCC source repository, the
3885following are also necessary:
3886
3887   * At least one Bugzilla component for bugs in that front end and
3888     runtime libraries.  This category needs to be added to the
3889     Bugzilla database.
3890
3891   * Normally, one or more maintainers of that front end listed in
3892     `MAINTAINERS'.
3893
3894   * Mentions on the GCC web site in `index.html' and `frontends.html',
3895     with any relevant links on `readings.html'.  (Front ends that are
3896     not an official part of GCC may also be listed on
3897     `frontends.html', with relevant links.)
3898
3899   * A news item on `index.html', and possibly an announcement on the
3900     <gcc-announce@gcc.gnu.org> mailing list.
3901
3902   * The front end's manuals should be mentioned in
3903     `maintainer-scripts/update_web_docs_svn' (*note Texinfo Manuals::)
3904     and the online manuals should be linked to from
3905     `onlinedocs/index.html'.
3906
3907   * Any old releases or CVS repositories of the front end, before its
3908     inclusion in GCC, should be made available on the GCC FTP site
3909     `ftp://gcc.gnu.org/pub/gcc/old-releases/'.
3910
3911   * The release and snapshot script `maintainer-scripts/gcc_release'
3912     should be updated to generate appropriate tarballs for this front
3913     end.
3914
3915   * If this front end includes its own version files that include the
3916     current date, `maintainer-scripts/update_version' should be
3917     updated accordingly.
3918
3919* Menu:
3920
3921* Front End Directory::  The front end `LANGUAGE' directory.
3922* Front End Config::     The front end `config-lang.in' file.
3923* Front End Makefile::   The front end `Make-lang.in' file.
3924
3925
3926File: gccint.info,  Node: Front End Directory,  Next: Front End Config,  Up: Front End
3927
39286.3.8.1 The Front End `LANGUAGE' Directory
3929..........................................
3930
3931A front end `LANGUAGE' directory contains the source files of that
3932front end (but not of any runtime libraries, which should be outside
3933the `gcc' directory).  This includes documentation, and possibly some
3934subsidiary programs built alongside the front end.  Certain files are
3935special and other parts of the compiler depend on their names:
3936
3937`config-lang.in'
3938     This file is required in all language subdirectories.  *Note The
3939     Front End `config-lang.in' File: Front End Config, for details of
3940     its contents
3941
3942`Make-lang.in'
3943     This file is required in all language subdirectories.  *Note The
3944     Front End `Make-lang.in' File: Front End Makefile, for details of
3945     its contents.
3946
3947`lang.opt'
3948     This file registers the set of switches that the front end accepts
3949     on the command line, and their `--help' text.  *Note Options::.
3950
3951`lang-specs.h'
3952     This file provides entries for `default_compilers' in `gcc.c'
3953     which override the default of giving an error that a compiler for
3954     that language is not installed.
3955
3956`LANGUAGE-tree.def'
3957     This file, which need not exist, defines any language-specific tree
3958     codes.
3959
3960
3961File: gccint.info,  Node: Front End Config,  Next: Front End Makefile,  Prev: Front End Directory,  Up: Front End
3962
39636.3.8.2 The Front End `config-lang.in' File
3964...........................................
3965
3966Each language subdirectory contains a `config-lang.in' file.  This file
3967is a shell script that may define some variables describing the
3968language:
3969
3970`language'
3971     This definition must be present, and gives the name of the language
3972     for some purposes such as arguments to `--enable-languages'.
3973
3974`lang_requires'
3975     If defined, this variable lists (space-separated) language front
3976     ends other than C that this front end requires to be enabled (with
3977     the names given being their `language' settings).  For example, the
3978     Java front end depends on the C++ front end, so sets
3979     `lang_requires=c++'.
3980
3981`subdir_requires'
3982     If defined, this variable lists (space-separated) front end
3983     directories other than C that this front end requires to be
3984     present.  For example, the Objective-C++ front end uses source
3985     files from the C++ and Objective-C front ends, so sets
3986     `subdir_requires="cp objc"'.
3987
3988`target_libs'
3989     If defined, this variable lists (space-separated) targets in the
3990     top level `Makefile' to build the runtime libraries for this
3991     language, such as `target-libobjc'.
3992
3993`lang_dirs'
3994     If defined, this variable lists (space-separated) top level
3995     directories (parallel to `gcc'), apart from the runtime libraries,
3996     that should not be configured if this front end is not built.
3997
3998`build_by_default'
3999     If defined to `no', this language front end is not built unless
4000     enabled in a `--enable-languages' argument.  Otherwise, front ends
4001     are built by default, subject to any special logic in
4002     `configure.ac' (as is present to disable the Ada front end if the
4003     Ada compiler is not already installed).
4004
4005`boot_language'
4006     If defined to `yes', this front end is built in stage1 of the
4007     bootstrap.  This is only relevant to front ends written in their
4008     own languages.
4009
4010`compilers'
4011     If defined, a space-separated list of compiler executables that
4012     will be run by the driver.  The names here will each end with
4013     `\$(exeext)'.
4014
4015`outputs'
4016     If defined, a space-separated list of files that should be
4017     generated by `configure' substituting values in them.  This
4018     mechanism can be used to create a file `LANGUAGE/Makefile' from
4019     `LANGUAGE/Makefile.in', but this is deprecated, building
4020     everything from the single `gcc/Makefile' is preferred.
4021
4022`gtfiles'
4023     If defined, a space-separated list of files that should be scanned
4024     by `gengtype.c' to generate the garbage collection tables and
4025     routines for this language.  This excludes the files that are
4026     common to all front ends.  *Note Type Information::.
4027
4028
4029
4030File: gccint.info,  Node: Front End Makefile,  Prev: Front End Config,  Up: Front End
4031
40326.3.8.3 The Front End `Make-lang.in' File
4033.........................................
4034
4035Each language subdirectory contains a `Make-lang.in' file.  It contains
4036targets `LANG.HOOK' (where `LANG' is the setting of `language' in
4037`config-lang.in') for the following values of `HOOK', and any other
4038Makefile rules required to build those targets (which may if necessary
4039use other Makefiles specified in `outputs' in `config-lang.in',
4040although this is deprecated).  It also adds any testsuite targets that
4041can use the standard rule in `gcc/Makefile.in' to the variable
4042`lang_checks'.
4043
4044`all.cross'
4045`start.encap'
4046`rest.encap'
4047     FIXME: exactly what goes in each of these targets?
4048
4049`tags'
4050     Build an `etags' `TAGS' file in the language subdirectory in the
4051     source tree.
4052
4053`info'
4054     Build info documentation for the front end, in the build directory.
4055     This target is only called by `make bootstrap' if a suitable
4056     version of `makeinfo' is available, so does not need to check for
4057     this, and should fail if an error occurs.
4058
4059`dvi'
4060     Build DVI documentation for the front end, in the build directory.
4061     This should be done using `$(TEXI2DVI)', with appropriate `-I'
4062     arguments pointing to directories of included files.
4063
4064`pdf'
4065     Build PDF documentation for the front end, in the build directory.
4066     This should be done using `$(TEXI2PDF)', with appropriate `-I'
4067     arguments pointing to directories of included files.
4068
4069`html'
4070     Build HTML documentation for the front end, in the build directory.
4071
4072`man'
4073     Build generated man pages for the front end from Texinfo manuals
4074     (*note Man Page Generation::), in the build directory.  This target
4075     is only called if the necessary tools are available, but should
4076     ignore errors so as not to stop the build if errors occur; man
4077     pages are optional and the tools involved may be installed in a
4078     broken way.
4079
4080`install-common'
4081     Install everything that is part of the front end, apart from the
4082     compiler executables listed in `compilers' in `config-lang.in'.
4083
4084`install-info'
4085     Install info documentation for the front end, if it is present in
4086     the source directory.  This target should have dependencies on
4087     info files that should be installed.
4088
4089`install-man'
4090     Install man pages for the front end.  This target should ignore
4091     errors.
4092
4093`install-plugin'
4094     Install headers needed for plugins.
4095
4096`srcextra'
4097     Copies its dependencies into the source directory.  This generally
4098     should be used for generated files such as Bison output files
4099     which are not version-controlled, but should be included in any
4100     release tarballs.  This target will be executed during a bootstrap
4101     if `--enable-generated-files-in-srcdir' was specified as a
4102     `configure' option.
4103
4104`srcinfo'
4105`srcman'
4106     Copies its dependencies into the source directory.  These targets
4107     will be executed during a bootstrap if
4108     `--enable-generated-files-in-srcdir' was specified as a
4109     `configure' option.
4110
4111`uninstall'
4112     Uninstall files installed by installing the compiler.  This is
4113     currently documented not to be supported, so the hook need not do
4114     anything.
4115
4116`mostlyclean'
4117`clean'
4118`distclean'
4119`maintainer-clean'
4120     The language parts of the standard GNU `*clean' targets.  *Note
4121     Standard Targets for Users: (standards)Standard Targets, for
4122     details of the standard targets.  For GCC, `maintainer-clean'
4123     should delete all generated files in the source directory that are
4124     not version-controlled, but should not delete anything that is.
4125
4126 `Make-lang.in' must also define a variable `LANG_OBJS' to a list of
4127host object files that are used by that language.
4128
4129
4130File: gccint.info,  Node: Back End,  Prev: Front End,  Up: gcc Directory
4131
41326.3.9 Anatomy of a Target Back End
4133----------------------------------
4134
4135A back end for a target architecture in GCC has the following parts:
4136
4137   * A directory `MACHINE' under `gcc/config', containing a machine
4138     description `MACHINE.md' file (*note Machine Descriptions: Machine
4139     Desc.), header files `MACHINE.h' and `MACHINE-protos.h' and a
4140     source file `MACHINE.c' (*note Target Description Macros and
4141     Functions: Target Macros.), possibly a target Makefile fragment
4142     `t-MACHINE' (*note The Target Makefile Fragment: Target
4143     Fragment.), and maybe some other files.  The names of these files
4144     may be changed from the defaults given by explicit specifications
4145     in `config.gcc'.
4146
4147   * If necessary, a file `MACHINE-modes.def' in the `MACHINE'
4148     directory, containing additional machine modes to represent
4149     condition codes.  *Note Condition Code::, for further details.
4150
4151   * An optional `MACHINE.opt' file in the `MACHINE' directory,
4152     containing a list of target-specific options.  You can also add
4153     other option files using the `extra_options' variable in
4154     `config.gcc'.  *Note Options::.
4155
4156   * Entries in `config.gcc' (*note The `config.gcc' File: System
4157     Config.) for the systems with this target architecture.
4158
4159   * Documentation in `gcc/doc/invoke.texi' for any command-line
4160     options supported by this target (*note Run-time Target
4161     Specification: Run-time Target.).  This means both entries in the
4162     summary table of options and details of the individual options.
4163
4164   * Documentation in `gcc/doc/extend.texi' for any target-specific
4165     attributes supported (*note Defining target-specific uses of
4166     `__attribute__': Target Attributes.), including where the same
4167     attribute is already supported on some targets, which are
4168     enumerated in the manual.
4169
4170   * Documentation in `gcc/doc/extend.texi' for any target-specific
4171     pragmas supported.
4172
4173   * Documentation in `gcc/doc/extend.texi' of any target-specific
4174     built-in functions supported.
4175
4176   * Documentation in `gcc/doc/extend.texi' of any target-specific
4177     format checking styles supported.
4178
4179   * Documentation in `gcc/doc/md.texi' of any target-specific
4180     constraint letters (*note Constraints for Particular Machines:
4181     Machine Constraints.).
4182
4183   * A note in `gcc/doc/contrib.texi' under the person or people who
4184     contributed the target support.
4185
4186   * Entries in `gcc/doc/install.texi' for all target triplets
4187     supported with this target architecture, giving details of any
4188     special notes about installation for this target, or saying that
4189     there are no special notes if there are none.
4190
4191   * Possibly other support outside the `gcc' directory for runtime
4192     libraries.  FIXME: reference docs for this.  The `libstdc++'
4193     porting manual needs to be installed as info for this to work, or
4194     to be a chapter of this manual.
4195
4196 If the back end is added to the official GCC source repository, the
4197following are also necessary:
4198
4199   * An entry for the target architecture in `readings.html' on the GCC
4200     web site, with any relevant links.
4201
4202   * Details of the properties of the back end and target architecture
4203     in `backends.html' on the GCC web site.
4204
4205   * A news item about the contribution of support for that target
4206     architecture, in `index.html' on the GCC web site.
4207
4208   * Normally, one or more maintainers of that target listed in
4209     `MAINTAINERS'.  Some existing architectures may be unmaintained,
4210     but it would be unusual to add support for a target that does not
4211     have a maintainer when support is added.
4212
4213   * Target triplets covering all `config.gcc' stanzas for the target,
4214     in the list in `contrib/config-list.mk'.
4215
4216
4217File: gccint.info,  Node: Testsuites,  Next: Options,  Prev: Source Tree,  Up: Top
4218
42197 Testsuites
4220************
4221
4222GCC contains several testsuites to help maintain compiler quality.
4223Most of the runtime libraries and language front ends in GCC have
4224testsuites.  Currently only the C language testsuites are documented
4225here; FIXME: document the others.
4226
4227* Menu:
4228
4229* Test Idioms::     Idioms used in testsuite code.
4230* Test Directives:: Directives used within DejaGnu tests.
4231* Ada Tests::       The Ada language testsuites.
4232* C Tests::         The C language testsuites.
4233* libgcj Tests::    The Java library testsuites.
4234* LTO Testing::     Support for testing link-time optimizations.
4235* gcov Testing::    Support for testing gcov.
4236* profopt Testing:: Support for testing profile-directed optimizations.
4237* compat Testing::  Support for testing binary compatibility.
4238* Torture Tests::   Support for torture testing using multiple options.
4239
4240
4241File: gccint.info,  Node: Test Idioms,  Next: Test Directives,  Up: Testsuites
4242
42437.1 Idioms Used in Testsuite Code
4244=================================
4245
4246In general, C testcases have a trailing `-N.c', starting with `-1.c',
4247in case other testcases with similar names are added later.  If the
4248test is a test of some well-defined feature, it should have a name
4249referring to that feature such as `FEATURE-1.c'.  If it does not test a
4250well-defined feature but just happens to exercise a bug somewhere in
4251the compiler, and a bug report has been filed for this bug in the GCC
4252bug database, `prBUG-NUMBER-1.c' is the appropriate form of name.
4253Otherwise (for miscellaneous bugs not filed in the GCC bug database),
4254and previously more generally, test cases are named after the date on
4255which they were added.  This allows people to tell at a glance whether
4256a test failure is because of a recently found bug that has not yet been
4257fixed, or whether it may be a regression, but does not give any other
4258information about the bug or where discussion of it may be found.  Some
4259other language testsuites follow similar conventions.
4260
4261 In the `gcc.dg' testsuite, it is often necessary to test that an error
4262is indeed a hard error and not just a warning--for example, where it is
4263a constraint violation in the C standard, which must become an error
4264with `-pedantic-errors'.  The following idiom, where the first line
4265shown is line LINE of the file and the line that generates the error,
4266is used for this:
4267
4268     /* { dg-bogus "warning" "warning in place of error" } */
4269     /* { dg-error "REGEXP" "MESSAGE" { target *-*-* } LINE } */
4270
4271 It may be necessary to check that an expression is an integer constant
4272expression and has a certain value.  To check that `E' has value `V',
4273an idiom similar to the following is used:
4274
4275     char x[((E) == (V) ? 1 : -1)];
4276
4277 In `gcc.dg' tests, `__typeof__' is sometimes used to make assertions
4278about the types of expressions.  See, for example,
4279`gcc.dg/c99-condexpr-1.c'.  The more subtle uses depend on the exact
4280rules for the types of conditional expressions in the C standard; see,
4281for example, `gcc.dg/c99-intconst-1.c'.
4282
4283 It is useful to be able to test that optimizations are being made
4284properly.  This cannot be done in all cases, but it can be done where
4285the optimization will lead to code being optimized away (for example,
4286where flow analysis or alias analysis should show that certain code
4287cannot be called) or to functions not being called because they have
4288been expanded as built-in functions.  Such tests go in
4289`gcc.c-torture/execute'.  Where code should be optimized away, a call
4290to a nonexistent function such as `link_failure ()' may be inserted; a
4291definition
4292
4293     #ifndef __OPTIMIZE__
4294     void
4295     link_failure (void)
4296     {
4297       abort ();
4298     }
4299     #endif
4300
4301will also be needed so that linking still succeeds when the test is run
4302without optimization.  When all calls to a built-in function should
4303have been optimized and no calls to the non-built-in version of the
4304function should remain, that function may be defined as `static' to
4305call `abort ()' (although redeclaring a function as static may not work
4306on all targets).
4307
4308 All testcases must be portable.  Target-specific testcases must have
4309appropriate code to avoid causing failures on unsupported systems;
4310unfortunately, the mechanisms for this differ by directory.
4311
4312 FIXME: discuss non-C testsuites here.
4313
4314
4315File: gccint.info,  Node: Test Directives,  Next: Ada Tests,  Prev: Test Idioms,  Up: Testsuites
4316
43177.2 Directives used within DejaGnu tests
4318========================================
4319
4320* Menu:
4321
4322* Directives::  Syntax and descriptions of test directives.
4323* Selectors:: Selecting targets to which a test applies.
4324* Effective-Target Keywords:: Keywords describing target attributes.
4325* Add Options:: Features for `dg-add-options'
4326* Require Support:: Variants of `dg-require-SUPPORT'
4327* Final Actions:: Commands for use in `dg-final'
4328
4329
4330File: gccint.info,  Node: Directives,  Next: Selectors,  Up: Test Directives
4331
43327.2.1 Syntax and Descriptions of test directives
4333------------------------------------------------
4334
4335Test directives appear within comments in a test source file and begin
4336with `dg-'.  Some of these are defined within DejaGnu and others are
4337local to the GCC testsuite.
4338
4339 The order in which test directives appear in a test can be important:
4340directives local to GCC sometimes override information used by the
4341DejaGnu directives, which know nothing about the GCC directives, so the
4342DejaGnu directives must precede GCC directives.
4343
4344 Several test directives include selectors (*note Selectors::) which
4345are usually preceded by the keyword `target' or `xfail'.
4346
43477.2.1.1 Specify how to build the test
4348.....................................
4349
4350`{ dg-do DO-WHAT-KEYWORD [{ target/xfail SELECTOR }] }'
4351     DO-WHAT-KEYWORD specifies how the test is compiled and whether it
4352     is executed.  It is one of:
4353
4354    `preprocess'
4355          Compile with `-E' to run only the preprocessor.
4356
4357    `compile'
4358          Compile with `-S' to produce an assembly code file.
4359
4360    `assemble'
4361          Compile with `-c' to produce a relocatable object file.
4362
4363    `link'
4364          Compile, assemble, and link to produce an executable file.
4365
4366    `run'
4367          Produce and run an executable file, which is expected to
4368          return an exit code of 0.
4369
4370     The default is `compile'.  That can be overridden for a set of
4371     tests by redefining `dg-do-what-default' within the `.exp' file
4372     for those tests.
4373
4374     If the directive includes the optional `{ target SELECTOR }' then
4375     the test is skipped unless the target system matches the SELECTOR.
4376
4377     If DO-WHAT-KEYWORD is `run' and the directive includes the
4378     optional `{ xfail SELECTOR }' and the selector is met then the
4379     test is expected to fail.  The `xfail' clause is ignored for other
4380     values of DO-WHAT-KEYWORD; those tests can use directive
4381     `dg-xfail-if'.
4382
43837.2.1.2 Specify additional compiler options
4384...........................................
4385
4386`{ dg-options OPTIONS [{ target SELECTOR }] }'
4387     This DejaGnu directive provides a list of compiler options, to be
4388     used if the target system matches SELECTOR, that replace the
4389     default options used for this set of tests.
4390
4391`{ dg-add-options FEATURE ... }'
4392     Add any compiler options that are needed to access certain
4393     features.  This directive does nothing on targets that enable the
4394     features by default, or that don't provide them at all.  It must
4395     come after all `dg-options' directives.  For supported values of
4396     FEATURE see *note Add Options::.
4397
4398`{ dg-additional-options OPTIONS [{ target SELECTOR }] }'
4399     This directive provides a list of compiler options, to be used if
4400     the target system matches SELECTOR, that are added to the default
4401     options used for this set of tests.
4402
44037.2.1.3 Modify the test timeout value
4404.....................................
4405
4406The normal timeout limit, in seconds, is found by searching the
4407following in order:
4408
4409   * the value defined by an earlier `dg-timeout' directive in the test
4410
4411   * variable TOOL_TIMEOUT defined by the set of tests
4412
4413   * GCC,TIMEOUT set in the target board
4414
4415   * 300
4416
4417`{ dg-timeout N [{target SELECTOR }] }'
4418     Set the time limit for the compilation and for the execution of
4419     the test to the specified number of seconds.
4420
4421`{ dg-timeout-factor X [{ target SELECTOR }] }'
4422     Multiply the normal time limit for compilation and execution of
4423     the test by the specified floating-point factor.
4424
44257.2.1.4 Skip a test for some targets
4426....................................
4427
4428`{ dg-skip-if COMMENT { SELECTOR } [{ INCLUDE-OPTS } [{ EXCLUDE-OPTS }]] }'
4429     Arguments INCLUDE-OPTS and EXCLUDE-OPTS are lists in which each
4430     element is a string of zero or more GCC options.  Skip the test if
4431     all of the following conditions are met:
4432        * the test system is included in SELECTOR
4433
4434        * for at least one of the option strings in INCLUDE-OPTS, every
4435          option from that string is in the set of options with which
4436          the test would be compiled; use `"*"' for an INCLUDE-OPTS list
4437          that matches any options; that is the default if INCLUDE-OPTS
4438          is not specified
4439
4440        * for each of the option strings in EXCLUDE-OPTS, at least one
4441          option from that string is not in the set of options with
4442          which the test would be compiled; use `""' for an empty
4443          EXCLUDE-OPTS list; that is the default if EXCLUDE-OPTS is not
4444          specified
4445
4446     For example, to skip a test if option `-Os' is present:
4447
4448          /* { dg-skip-if "" { *-*-* }  { "-Os" } { "" } } */
4449
4450     To skip a test if both options `-O2' and `-g' are present:
4451
4452          /* { dg-skip-if "" { *-*-* }  { "-O2 -g" } { "" } } */
4453
4454     To skip a test if either `-O2' or `-O3' is present:
4455
4456          /* { dg-skip-if "" { *-*-* }  { "-O2" "-O3" } { "" } } */
4457
4458     To skip a test unless option `-Os' is present:
4459
4460          /* { dg-skip-if "" { *-*-* }  { "*" } { "-Os" } } */
4461
4462     To skip a test if either `-O2' or `-O3' is used with `-g' but not
4463     if `-fpic' is also present:
4464
4465          /* { dg-skip-if "" { *-*-* }  { "-O2 -g" "-O3 -g" } { "-fpic" } } */
4466
4467`{ dg-require-effective-target KEYWORD [{ SELECTOR }] }'
4468     Skip the test if the test target, including current multilib flags,
4469     is not covered by the effective-target keyword.  If the directive
4470     includes the optional `{ SELECTOR }' then the effective-target
4471     test is only performed if the target system matches the SELECTOR.
4472     This directive must appear after any `dg-do' directive in the test
4473     and before any `dg-additional-sources' directive.  *Note
4474     Effective-Target Keywords::.
4475
4476`{ dg-require-SUPPORT args }'
4477     Skip the test if the target does not provide the required support.
4478     These directives must appear after any `dg-do' directive in the
4479     test and before any `dg-additional-sources' directive.  They
4480     require at least one argument, which can be an empty string if the
4481     specific procedure does not examine the argument.  *Note Require
4482     Support::, for a complete list of these directives.
4483
44847.2.1.5 Expect a test to fail for some targets
4485..............................................
4486
4487`{ dg-xfail-if COMMENT { SELECTOR } [{ INCLUDE-OPTS } [{ EXCLUDE-OPTS }]] }'
4488     Expect the test to fail if the conditions (which are the same as
4489     for `dg-skip-if') are met.  This does not affect the execute step.
4490
4491`{ dg-xfail-run-if COMMENT { SELECTOR } [{ INCLUDE-OPTS } [{ EXCLUDE-OPTS }]] }'
4492     Expect the execute step of a test to fail if the conditions (which
4493     are the same as for `dg-skip-if') are met.
4494
44957.2.1.6 Expect the test executable to fail
4496..........................................
4497
4498`{ dg-shouldfail COMMENT [{ SELECTOR } [{ INCLUDE-OPTS } [{ EXCLUDE-OPTS }]]] }'
4499     Expect the test executable to return a nonzero exit status if the
4500     conditions (which are the same as for `dg-skip-if') are met.
4501
45027.2.1.7 Verify compiler messages
4503................................
4504
4505`{ dg-error REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] }]] }'
4506     This DejaGnu directive appears on a source line that is expected
4507     to get an error message, or else specifies the source line
4508     associated with the message.  If there is no message for that line
4509     or if the text of that message is not matched by REGEXP then the
4510     check fails and COMMENT is included in the `FAIL' message.  The
4511     check does not look for the string `error' unless it is part of
4512     REGEXP.
4513
4514`{ dg-warning REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] }]] }'
4515     This DejaGnu directive appears on a source line that is expected
4516     to get a warning message, or else specifies the source line
4517     associated with the message.  If there is no message for that line
4518     or if the text of that message is not matched by REGEXP then the
4519     check fails and COMMENT is included in the `FAIL' message.  The
4520     check does not look for the string `warning' unless it is part of
4521     REGEXP.
4522
4523`{ dg-message REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] }]] }'
4524     The line is expected to get a message other than an error or
4525     warning.  If there is no message for that line or if the text of
4526     that message is not matched by REGEXP then the check fails and
4527     COMMENT is included in the `FAIL' message.
4528
4529`{ dg-bogus REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] }]] }'
4530     This DejaGnu directive appears on a source line that should not
4531     get a message matching REGEXP, or else specifies the source line
4532     associated with the bogus message.  It is usually used with `xfail'
4533     to indicate that the message is a known problem for a particular
4534     set of targets.
4535
4536`{ dg-excess-errors COMMENT [{ target/xfail SELECTOR }] }'
4537     This DejaGnu directive indicates that the test is expected to fail
4538     due to compiler messages that are not handled by `dg-error',
4539     `dg-warning' or `dg-bogus'.  For this directive `xfail' has the
4540     same effect as `target'.
4541
4542`{ dg-prune-output REGEXP }'
4543     Prune messages matching REGEXP from the test output.
4544
45457.2.1.8 Verify output of the test executable
4546............................................
4547
4548`{ dg-output REGEXP [{ target/xfail SELECTOR }] }'
4549     This DejaGnu directive compares REGEXP to the combined output that
4550     the test executable writes to `stdout' and `stderr'.
4551
45527.2.1.9 Specify additional files for a test
4553...........................................
4554
4555`{ dg-additional-files "FILELIST" }'
4556     Specify additional files, other than source files, that must be
4557     copied to the system where the compiler runs.
4558
4559`{ dg-additional-sources "FILELIST" }'
4560     Specify additional source files to appear in the compile line
4561     following the main test file.
4562
45637.2.1.10 Add checks at the end of a test
4564........................................
4565
4566`{ dg-final { LOCAL-DIRECTIVE } }'
4567     This DejaGnu directive is placed within a comment anywhere in the
4568     source file and is processed after the test has been compiled and
4569     run.  Multiple `dg-final' commands are processed in the order in
4570     which they appear in the source file.  *Note Final Actions::, for
4571     a list of directives that can be used within `dg-final'.
4572
4573
4574File: gccint.info,  Node: Selectors,  Next: Effective-Target Keywords,  Prev: Directives,  Up: Test Directives
4575
45767.2.2 Selecting targets to which a test applies
4577-----------------------------------------------
4578
4579Several test directives include SELECTORs to limit the targets for
4580which a test is run or to declare that a test is expected to fail on
4581particular targets.
4582
4583 A selector is:
4584   * one or more target triplets, possibly including wildcard
4585     characters; use `*-*-*' to match any target
4586
4587   * a single effective-target keyword (*note Effective-Target
4588     Keywords::)
4589
4590   * a logical expression
4591
4592 Depending on the context, the selector specifies whether a test is
4593skipped and reported as unsupported or is expected to fail.  A context
4594that allows either `target' or `xfail' also allows `{ target SELECTOR1
4595xfail SELECTOR2 }' to skip the test for targets that don't match
4596SELECTOR1 and the test to fail for targets that match SELECTOR2.
4597
4598 A selector expression appears within curly braces and uses a single
4599logical operator: one of `!', `&&', or `||'.  An operand is another
4600selector expression, an effective-target keyword, a single target
4601triplet, or a list of target triplets within quotes or curly braces.
4602For example:
4603
4604     { target { ! "hppa*-*-* ia64*-*-*" } }
4605     { target { powerpc*-*-* && lp64 } }
4606     { xfail { lp64 || vect_no_align } }
4607
4608
4609File: gccint.info,  Node: Effective-Target Keywords,  Next: Add Options,  Prev: Selectors,  Up: Test Directives
4610
46117.2.3 Keywords describing target attributes
4612-------------------------------------------
4613
4614Effective-target keywords identify sets of targets that support
4615particular functionality.  They are used to limit tests to be run only
4616for particular targets, or to specify that particular sets of targets
4617are expected to fail some tests.
4618
4619 Effective-target keywords are defined in `lib/target-supports.exp' in
4620the GCC testsuite, with the exception of those that are documented as
4621being local to a particular test directory.
4622
4623 The `effective target' takes into account all of the compiler options
4624with which the test will be compiled, including the multilib options.
4625By convention, keywords ending in `_nocache' can also include options
4626specified for the particular test in an earlier `dg-options' or
4627`dg-add-options' directive.
4628
46297.2.3.1 Data type sizes
4630.......................
4631
4632`ilp32'
4633     Target has 32-bit `int', `long', and pointers.
4634
4635`lp64'
4636     Target has 32-bit `int', 64-bit `long' and pointers.
4637
4638`llp64'
4639     Target has 32-bit `int' and `long', 64-bit `long long' and
4640     pointers.
4641
4642`double64'
4643     Target has 64-bit `double'.
4644
4645`double64plus'
4646     Target has `double' that is 64 bits or longer.
4647
4648`longdouble128'
4649     Target has 128-bit `long double'.
4650
4651`int32plus'
4652     Target has `int' that is at 32 bits or longer.
4653
4654`int16'
4655     Target has `int' that is 16 bits or shorter.
4656
4657`long_neq_int'
4658     Target has `int' and `long' with different sizes.
4659
4660`large_double'
4661     Target supports `double' that is longer than `float'.
4662
4663`large_long_double'
4664     Target supports `long double' that is longer than `double'.
4665
4666`ptr32plus'
4667     Target has pointers that are 32 bits or longer.
4668
4669`size32plus'
4670     Target supports array and structure sizes that are 32 bits or
4671     longer.
4672
4673`4byte_wchar_t'
4674     Target has `wchar_t' that is at least 4 bytes.
4675
46767.2.3.2 Fortran-specific attributes
4677...................................
4678
4679`fortran_integer_16'
4680     Target supports Fortran `integer' that is 16 bytes or longer.
4681
4682`fortran_large_int'
4683     Target supports Fortran `integer' kinds larger than `integer(8)'.
4684
4685`fortran_large_real'
4686     Target supports Fortran `real' kinds larger than `real(8)'.
4687
46887.2.3.3 Vector-specific attributes
4689..................................
4690
4691`vect_condition'
4692     Target supports vector conditional operations.
4693
4694`vect_double'
4695     Target supports hardware vectors of `double'.
4696
4697`vect_float'
4698     Target supports hardware vectors of `float'.
4699
4700`vect_int'
4701     Target supports hardware vectors of `int'.
4702
4703`vect_long'
4704     Target supports hardware vectors of `long'.
4705
4706`vect_long_long'
4707     Target supports hardware vectors of `long long'.
4708
4709`vect_aligned_arrays'
4710     Target aligns arrays to vector alignment boundary.
4711
4712`vect_hw_misalign'
4713     Target supports a vector misalign access.
4714
4715`vect_no_align'
4716     Target does not support a vector alignment mechanism.
4717
4718`vect_no_int_max'
4719     Target does not support a vector max instruction on `int'.
4720
4721`vect_no_int_add'
4722     Target does not support a vector add instruction on `int'.
4723
4724`vect_no_bitwise'
4725     Target does not support vector bitwise instructions.
4726
4727`vect_char_mult'
4728     Target supports `vector char' multiplication.
4729
4730`vect_short_mult'
4731     Target supports `vector short' multiplication.
4732
4733`vect_int_mult'
4734     Target supports `vector int' multiplication.
4735
4736`vect_extract_even_odd'
4737     Target supports vector even/odd element extraction.
4738
4739`vect_extract_even_odd_wide'
4740     Target supports vector even/odd element extraction of vectors with
4741     elements `SImode' or larger.
4742
4743`vect_interleave'
4744     Target supports vector interleaving.
4745
4746`vect_strided'
4747     Target supports vector interleaving and extract even/odd.
4748
4749`vect_strided_wide'
4750     Target supports vector interleaving and extract even/odd for wide
4751     element types.
4752
4753`vect_perm'
4754     Target supports vector permutation.
4755
4756`vect_shift'
4757     Target supports a hardware vector shift operation.
4758
4759`vect_widen_sum_hi_to_si'
4760     Target supports a vector widening summation of `short' operands
4761     into `int' results, or can promote (unpack) from `short' to `int'.
4762
4763`vect_widen_sum_qi_to_hi'
4764     Target supports a vector widening summation of `char' operands
4765     into `short' results, or can promote (unpack) from `char' to
4766     `short'.
4767
4768`vect_widen_sum_qi_to_si'
4769     Target supports a vector widening summation of `char' operands
4770     into `int' results.
4771
4772`vect_widen_mult_qi_to_hi'
4773     Target supports a vector widening multiplication of `char' operands
4774     into `short' results, or can promote (unpack) from `char' to
4775     `short' and perform non-widening multiplication of `short'.
4776
4777`vect_widen_mult_hi_to_si'
4778     Target supports a vector widening multiplication of `short'
4779     operands into `int' results, or can promote (unpack) from `short'
4780     to `int' and perform non-widening multiplication of `int'.
4781
4782`vect_sdot_qi'
4783     Target supports a vector dot-product of `signed char'.
4784
4785`vect_udot_qi'
4786     Target supports a vector dot-product of `unsigned char'.
4787
4788`vect_sdot_hi'
4789     Target supports a vector dot-product of `signed short'.
4790
4791`vect_udot_hi'
4792     Target supports a vector dot-product of `unsigned short'.
4793
4794`vect_pack_trunc'
4795     Target supports a vector demotion (packing) of `short' to `char'
4796     and from `int' to `short' using modulo arithmetic.
4797
4798`vect_unpack'
4799     Target supports a vector promotion (unpacking) of `char' to `short'
4800     and from `char' to `int'.
4801
4802`vect_intfloat_cvt'
4803     Target supports conversion from `signed int' to `float'.
4804
4805`vect_uintfloat_cvt'
4806     Target supports conversion from `unsigned int' to `float'.
4807
4808`vect_floatint_cvt'
4809     Target supports conversion from `float' to `signed int'.
4810
4811`vect_floatuint_cvt'
4812     Target supports conversion from `float' to `unsigned int'.
4813
48147.2.3.4 Thread Local Storage attributes
4815.......................................
4816
4817`tls'
4818     Target supports thread-local storage.
4819
4820`tls_native'
4821     Target supports native (rather than emulated) thread-local storage.
4822
4823`tls_runtime'
4824     Test system supports executing TLS executables.
4825
48267.2.3.5 Decimal floating point attributes
4827.........................................
4828
4829`dfp'
4830     Targets supports compiling decimal floating point extension to C.
4831
4832`dfp_nocache'
4833     Including the options used to compile this particular test, the
4834     target supports compiling decimal floating point extension to C.
4835
4836`dfprt'
4837     Test system can execute decimal floating point tests.
4838
4839`dfprt_nocache'
4840     Including the options used to compile this particular test, the
4841     test system can execute decimal floating point tests.
4842
4843`hard_dfp'
4844     Target generates decimal floating point instructions with current
4845     options.
4846
48477.2.3.6 ARM-specific attributes
4848...............................
4849
4850`arm32'
4851     ARM target generates 32-bit code.
4852
4853`arm_eabi'
4854     ARM target adheres to the ABI for the ARM Architecture.
4855
4856`arm_hf_eabi'
4857     ARM target adheres to the VFP and Advanced SIMD Register Arguments
4858     variant of the ABI for the ARM Architecture (as selected with
4859     `-mfloat-abi=hard').
4860
4861`arm_hard_vfp_ok'
4862     ARM target supports `-mfpu=vfp -mfloat-abi=hard'.  Some multilibs
4863     may be incompatible with these options.
4864
4865`arm_iwmmxt_ok'
4866     ARM target supports `-mcpu=iwmmxt'.  Some multilibs may be
4867     incompatible with this option.
4868
4869`arm_neon'
4870     ARM target supports generating NEON instructions.
4871
4872`arm_neon_hw'
4873     Test system supports executing NEON instructions.
4874
4875`arm_neonv2_hw'
4876     Test system supports executing NEON v2 instructions.
4877
4878`arm_neon_ok'
4879     ARM Target supports `-mfpu=neon -mfloat-abi=softfp' or compatible
4880     options.  Some multilibs may be incompatible with these options.
4881
4882`arm_neonv2_ok'
4883     ARM Target supports `-mfpu=neon-vfpv4 -mfloat-abi=softfp' or
4884     compatible options.  Some multilibs may be incompatible with these
4885     options.
4886
4887`arm_neon_fp16_ok'
4888     ARM Target supports `-mfpu=neon-fp16 -mfloat-abi=softfp' or
4889     compatible options.  Some multilibs may be incompatible with these
4890     options.
4891
4892`arm_thumb1_ok'
4893     ARM target generates Thumb-1 code for `-mthumb'.
4894
4895`arm_thumb2_ok'
4896     ARM target generates Thumb-2 code for `-mthumb'.
4897
4898`arm_vfp_ok'
4899     ARM target supports `-mfpu=vfp -mfloat-abi=softfp'.  Some
4900     multilibs may be incompatible with these options.
4901
4902`arm_v8_vfp_ok'
4903     ARM target supports `-mfpu=fp-armv8 -mfloat-abi=softfp'.  Some
4904     multilibs may be incompatible with these options.
4905
4906`arm_v8_neon_ok'
4907     ARM target supports `-mfpu=neon-fp-armv8 -mfloat-abi=softfp'.
4908     Some multilibs may be incompatible with these options.
4909
4910`arm_prefer_ldrd_strd'
4911     ARM target prefers `LDRD' and `STRD' instructions over `LDM' and
4912     `STM' instructions.
4913
4914
49157.2.3.7 MIPS-specific attributes
4916................................
4917
4918`mips64'
4919     MIPS target supports 64-bit instructions.
4920
4921`nomips16'
4922     MIPS target does not produce MIPS16 code.
4923
4924`mips16_attribute'
4925     MIPS target can generate MIPS16 code.
4926
4927`mips_loongson'
4928     MIPS target is a Loongson-2E or -2F target using an ABI that
4929     supports the Loongson vector modes.
4930
4931`mips_newabi_large_long_double'
4932     MIPS target supports `long double' larger than `double' when using
4933     the new ABI.
4934
4935`mpaired_single'
4936     MIPS target supports `-mpaired-single'.
4937
49387.2.3.8 PowerPC-specific attributes
4939...................................
4940
4941`dfp_hw'
4942     PowerPC target supports executing hardware DFP instructions.
4943
4944`p8vector_hw'
4945     PowerPC target supports executing VSX instructions (ISA 2.07).
4946
4947`powerpc64'
4948     Test system supports executing 64-bit instructions.
4949
4950`powerpc_altivec'
4951     PowerPC target supports AltiVec.
4952
4953`powerpc_altivec_ok'
4954     PowerPC target supports `-maltivec'.
4955
4956`powerpc_eabi_ok'
4957     PowerPC target supports `-meabi'.
4958
4959`powerpc_elfv2'
4960     PowerPC target supports `-mabi=elfv2'.
4961
4962`powerpc_fprs'
4963     PowerPC target supports floating-point registers.
4964
4965`powerpc_hard_double'
4966     PowerPC target supports hardware double-precision floating-point.
4967
4968`powerpc_htm_ok'
4969     PowerPC target supports `-mhtm'
4970
4971`powerpc_p8vector_ok'
4972     PowerPC target supports `-mpower8-vector'
4973
4974`powerpc_ppu_ok'
4975     PowerPC target supports `-mcpu=cell'.
4976
4977`powerpc_spe'
4978     PowerPC target supports PowerPC SPE.
4979
4980`powerpc_spe_nocache'
4981     Including the options used to compile this particular test, the
4982     PowerPC target supports PowerPC SPE.
4983
4984`powerpc_spu'
4985     PowerPC target supports PowerPC SPU.
4986
4987`powerpc_vsx_ok'
4988     PowerPC target supports `-mvsx'.
4989
4990`powerpc_405_nocache'
4991     Including the options used to compile this particular test, the
4992     PowerPC target supports PowerPC 405.
4993
4994`ppc_recip_hw'
4995     PowerPC target supports executing reciprocal estimate instructions.
4996
4997`spu_auto_overlay'
4998     SPU target has toolchain that supports automatic overlay
4999     generation.
5000
5001`vmx_hw'
5002     PowerPC target supports executing AltiVec instructions.
5003
5004`vsx_hw'
5005     PowerPC target supports executing VSX instructions (ISA 2.06).
5006
50077.2.3.9 Other hardware attributes
5008.................................
5009
5010`avx'
5011     Target supports compiling `avx' instructions.
5012
5013`avx_runtime'
5014     Target supports the execution of `avx' instructions.
5015
5016`cell_hw'
5017     Test system can execute AltiVec and Cell PPU instructions.
5018
5019`coldfire_fpu'
5020     Target uses a ColdFire FPU.
5021
5022`hard_float'
5023     Target supports FPU instructions.
5024
5025`sse'
5026     Target supports compiling `sse' instructions.
5027
5028`sse_runtime'
5029     Target supports the execution of `sse' instructions.
5030
5031`sse2'
5032     Target supports compiling `sse2' instructions.
5033
5034`sse2_runtime'
5035     Target supports the execution of `sse2' instructions.
5036
5037`sync_char_short'
5038     Target supports atomic operations on `char' and `short'.
5039
5040`sync_int_long'
5041     Target supports atomic operations on `int' and `long'.
5042
5043`ultrasparc_hw'
5044     Test environment appears to run executables on a simulator that
5045     accepts only `EM_SPARC' executables and chokes on `EM_SPARC32PLUS'
5046     or `EM_SPARCV9' executables.
5047
5048`vect_cmdline_needed'
5049     Target requires a command line argument to enable a SIMD
5050     instruction set.
5051
50527.2.3.10 Environment attributes
5053...............................
5054
5055`c'
5056     The language for the compiler under test is C.
5057
5058`c++'
5059     The language for the compiler under test is C++.
5060
5061`c99_runtime'
5062     Target provides a full C99 runtime.
5063
5064`correct_iso_cpp_string_wchar_protos'
5065     Target `string.h' and `wchar.h' headers provide C++ required
5066     overloads for `strchr' etc. functions.
5067
5068`dummy_wcsftime'
5069     Target uses a dummy `wcsftime' function that always returns zero.
5070
5071`fd_truncate'
5072     Target can truncate a file from a file descriptor, as used by
5073     `libgfortran/io/unix.c:fd_truncate'; i.e. `ftruncate' or `chsize'.
5074
5075`freestanding'
5076     Target is `freestanding' as defined in section 4 of the C99
5077     standard.  Effectively, it is a target which supports no extra
5078     headers or libraries other than what is considered essential.
5079
5080`init_priority'
5081     Target supports constructors with initialization priority
5082     arguments.
5083
5084`inttypes_types'
5085     Target has the basic signed and unsigned types in `inttypes.h'.
5086     This is for tests that GCC's notions of these types agree with
5087     those in the header, as some systems have only `inttypes.h'.
5088
5089`lax_strtofp'
5090     Target might have errors of a few ULP in string to floating-point
5091     conversion functions and overflow is not always detected correctly
5092     by those functions.
5093
5094`mmap'
5095     Target supports `mmap'.
5096
5097`newlib'
5098     Target supports Newlib.
5099
5100`pow10'
5101     Target provides `pow10' function.
5102
5103`pthread'
5104     Target can compile using `pthread.h' with no errors or warnings.
5105
5106`pthread_h'
5107     Target has `pthread.h'.
5108
5109`run_expensive_tests'
5110     Expensive testcases (usually those that consume excessive amounts
5111     of CPU time) should be run on this target.  This can be enabled by
5112     setting the `GCC_TEST_RUN_EXPENSIVE' environment variable to a
5113     non-empty string.
5114
5115`simulator'
5116     Test system runs executables on a simulator (i.e. slowly) rather
5117     than hardware (i.e. fast).
5118
5119`stdint_types'
5120     Target has the basic signed and unsigned C types in `stdint.h'.
5121     This will be obsolete when GCC ensures a working `stdint.h' for
5122     all targets.
5123
5124`trampolines'
5125     Target supports trampolines.
5126
5127`uclibc'
5128     Target supports uClibc.
5129
5130`unwrapped'
5131     Target does not use a status wrapper.
5132
5133`vxworks_kernel'
5134     Target is a VxWorks kernel.
5135
5136`vxworks_rtp'
5137     Target is a VxWorks RTP.
5138
5139`wchar'
5140     Target supports wide characters.
5141
51427.2.3.11 Other attributes
5143.........................
5144
5145`automatic_stack_alignment'
5146     Target supports automatic stack alignment.
5147
5148`cxa_atexit'
5149     Target uses `__cxa_atexit'.
5150
5151`default_packed'
5152     Target has packed layout of structure members by default.
5153
5154`fgraphite'
5155     Target supports Graphite optimizations.
5156
5157`fixed_point'
5158     Target supports fixed-point extension to C.
5159
5160`fopenmp'
5161     Target supports OpenMP via `-fopenmp'.
5162
5163`fpic'
5164     Target supports `-fpic' and `-fPIC'.
5165
5166`freorder'
5167     Target supports `-freorder-blocks-and-partition'.
5168
5169`fstack_protector'
5170     Target supports `-fstack-protector'.
5171
5172`gas'
5173     Target uses GNU `as'.
5174
5175`gc_sections'
5176     Target supports `--gc-sections'.
5177
5178`gld'
5179     Target uses GNU `ld'.
5180
5181`keeps_null_pointer_checks'
5182     Target keeps null pointer checks, either due to the use of
5183     `-fno-delete-null-pointer-checks' or hardwired into the target.
5184
5185`lto'
5186     Compiler has been configured to support link-time optimization
5187     (LTO).
5188
5189`naked_functions'
5190     Target supports the `naked' function attribute.
5191
5192`named_sections'
5193     Target supports named sections.
5194
5195`natural_alignment_32'
5196     Target uses natural alignment (aligned to type size) for types of
5197     32 bits or less.
5198
5199`target_natural_alignment_64'
5200     Target uses natural alignment (aligned to type size) for types of
5201     64 bits or less.
5202
5203`nonpic'
5204     Target does not generate PIC by default.
5205
5206`pcc_bitfield_type_matters'
5207     Target defines `PCC_BITFIELD_TYPE_MATTERS'.
5208
5209`pe_aligned_commons'
5210     Target supports `-mpe-aligned-commons'.
5211
5212`pie'
5213     Target supports `-pie', `-fpie' and `-fPIE'.
5214
5215`section_anchors'
5216     Target supports section anchors.
5217
5218`short_enums'
5219     Target defaults to short enums.
5220
5221`static'
5222     Target supports `-static'.
5223
5224`static_libgfortran'
5225     Target supports statically linking `libgfortran'.
5226
5227`string_merging'
5228     Target supports merging string constants at link time.
5229
5230`ucn'
5231     Target supports compiling and assembling UCN.
5232
5233`ucn_nocache'
5234     Including the options used to compile this particular test, the
5235     target supports compiling and assembling UCN.
5236
5237`unaligned_stack'
5238     Target does not guarantee that its `STACK_BOUNDARY' is greater than
5239     or equal to the required vector alignment.
5240
5241`vector_alignment_reachable'
5242     Vector alignment is reachable for types of 32 bits or less.
5243
5244`vector_alignment_reachable_for_64bit'
5245     Vector alignment is reachable for types of 64 bits or less.
5246
5247`wchar_t_char16_t_compatible'
5248     Target supports `wchar_t' that is compatible with `char16_t'.
5249
5250`wchar_t_char32_t_compatible'
5251     Target supports `wchar_t' that is compatible with `char32_t'.
5252
52537.2.3.12 Local to tests in `gcc.target/i386'
5254............................................
5255
5256`3dnow'
5257     Target supports compiling `3dnow' instructions.
5258
5259`aes'
5260     Target supports compiling `aes' instructions.
5261
5262`fma4'
5263     Target supports compiling `fma4' instructions.
5264
5265`ms_hook_prologue'
5266     Target supports attribute `ms_hook_prologue'.
5267
5268`pclmul'
5269     Target supports compiling `pclmul' instructions.
5270
5271`sse3'
5272     Target supports compiling `sse3' instructions.
5273
5274`sse4'
5275     Target supports compiling `sse4' instructions.
5276
5277`sse4a'
5278     Target supports compiling `sse4a' instructions.
5279
5280`ssse3'
5281     Target supports compiling `ssse3' instructions.
5282
5283`vaes'
5284     Target supports compiling `vaes' instructions.
5285
5286`vpclmul'
5287     Target supports compiling `vpclmul' instructions.
5288
5289`xop'
5290     Target supports compiling `xop' instructions.
5291
52927.2.3.13 Local to tests in `gcc.target/spu/ea'
5293..............................................
5294
5295`ealib'
5296     Target `__ea' library functions are available.
5297
52987.2.3.14 Local to tests in `gcc.test-framework'
5299...............................................
5300
5301`no'
5302     Always returns 0.
5303
5304`yes'
5305     Always returns 1.
5306
5307
5308File: gccint.info,  Node: Add Options,  Next: Require Support,  Prev: Effective-Target Keywords,  Up: Test Directives
5309
53107.2.4 Features for `dg-add-options'
5311-----------------------------------
5312
5313The supported values of FEATURE for directive `dg-add-options' are:
5314
5315`arm_neon'
5316     NEON support.  Only ARM targets support this feature, and only then
5317     in certain modes; see the *note arm_neon_ok effective target
5318     keyword: arm_neon_ok.
5319
5320`arm_neon_fp16'
5321     NEON and half-precision floating point support.  Only ARM targets
5322     support this feature, and only then in certain modes; see the
5323     *note arm_neon_fp16_ok effective target keyword: arm_neon_ok.
5324
5325`bind_pic_locally'
5326     Add the target-specific flags needed to enable functions to bind
5327     locally when using pic/PIC passes in the testsuite.
5328
5329`c99_runtime'
5330     Add the target-specific flags needed to access the C99 runtime.
5331
5332`ieee'
5333     Add the target-specific flags needed to enable full IEEE
5334     compliance mode.
5335
5336`mips16_attribute'
5337     `mips16' function attributes.  Only MIPS targets support this
5338     feature, and only then in certain modes.
5339
5340`tls'
5341     Add the target-specific flags needed to use thread-local storage.
5342
5343
5344File: gccint.info,  Node: Require Support,  Next: Final Actions,  Prev: Add Options,  Up: Test Directives
5345
53467.2.5 Variants of `dg-require-SUPPORT'
5347--------------------------------------
5348
5349A few of the `dg-require' directives take arguments.
5350
5351`dg-require-iconv CODESET'
5352     Skip the test if the target does not support iconv.  CODESET is
5353     the codeset to convert to.
5354
5355`dg-require-profiling PROFOPT'
5356     Skip the test if the target does not support profiling with option
5357     PROFOPT.
5358
5359`dg-require-visibility VIS'
5360     Skip the test if the target does not support the `visibility'
5361     attribute.  If VIS is `""', support for `visibility("hidden")' is
5362     checked, for `visibility("VIS")' otherwise.
5363
5364 The original `dg-require' directives were defined before there was
5365support for effective-target keywords.  The directives that do not take
5366arguments could be replaced with effective-target keywords.
5367
5368`dg-require-alias ""'
5369     Skip the test if the target does not support the `alias' attribute.
5370
5371`dg-require-ascii-locale ""'
5372     Skip the test if the host does not support an ASCII locale.
5373
5374`dg-require-compat-dfp ""'
5375     Skip this test unless both compilers in a `compat' testsuite
5376     support decimal floating point.
5377
5378`dg-require-cxa-atexit ""'
5379     Skip the test if the target does not support `__cxa_atexit'.  This
5380     is equivalent to `dg-require-effective-target cxa_atexit'.
5381
5382`dg-require-dll ""'
5383     Skip the test if the target does not support DLL attributes.
5384
5385`dg-require-fork ""'
5386     Skip the test if the target does not support `fork'.
5387
5388`dg-require-gc-sections ""'
5389     Skip the test if the target's linker does not support the
5390     `--gc-sections' flags.  This is equivalent to
5391     `dg-require-effective-target gc-sections'.
5392
5393`dg-require-host-local ""'
5394     Skip the test if the host is remote, rather than the same as the
5395     build system.  Some tests are incompatible with DejaGnu's handling
5396     of remote hosts, which involves copying the source file to the
5397     host and compiling it with a relative path and "`-o a.out'".
5398
5399`dg-require-mkfifo ""'
5400     Skip the test if the target does not support `mkfifo'.
5401
5402`dg-require-named-sections ""'
5403     Skip the test is the target does not support named sections.  This
5404     is equivalent to `dg-require-effective-target named_sections'.
5405
5406`dg-require-weak ""'
5407     Skip the test if the target does not support weak symbols.
5408
5409`dg-require-weak-override ""'
5410     Skip the test if the target does not support overriding weak
5411     symbols.
5412
5413
5414File: gccint.info,  Node: Final Actions,  Prev: Require Support,  Up: Test Directives
5415
54167.2.6 Commands for use in `dg-final'
5417------------------------------------
5418
5419The GCC testsuite defines the following directives to be used within
5420`dg-final'.
5421
54227.2.6.1 Scan a particular file
5423..............................
5424
5425`scan-file FILENAME REGEXP [{ target/xfail SELECTOR }]'
5426     Passes if REGEXP matches text in FILENAME.
5427
5428`scan-file-not FILENAME REGEXP [{ target/xfail SELECTOR }]'
5429     Passes if REGEXP does not match text in FILENAME.
5430
5431`scan-module MODULE REGEXP [{ target/xfail SELECTOR }]'
5432     Passes if REGEXP matches in Fortran module MODULE.
5433
54347.2.6.2 Scan the assembly output
5435................................
5436
5437`scan-assembler REGEX [{ target/xfail SELECTOR }]'
5438     Passes if REGEX matches text in the test's assembler output.
5439
5440`scan-assembler-not REGEX [{ target/xfail SELECTOR }]'
5441     Passes if REGEX does not match text in the test's assembler output.
5442
5443`scan-assembler-times REGEX NUM [{ target/xfail SELECTOR }]'
5444     Passes if REGEX is matched exactly NUM times in the test's
5445     assembler output.
5446
5447`scan-assembler-dem REGEX [{ target/xfail SELECTOR }]'
5448     Passes if REGEX matches text in the test's demangled assembler
5449     output.
5450
5451`scan-assembler-dem-not REGEX [{ target/xfail SELECTOR }]'
5452     Passes if REGEX does not match text in the test's demangled
5453     assembler output.
5454
5455`scan-hidden SYMBOL [{ target/xfail SELECTOR }]'
5456     Passes if SYMBOL is defined as a hidden symbol in the test's
5457     assembly output.
5458
5459`scan-not-hidden SYMBOL [{ target/xfail SELECTOR }]'
5460     Passes if SYMBOL is not defined as a hidden symbol in the test's
5461     assembly output.
5462
54637.2.6.3 Scan optimization dump files
5464....................................
5465
5466These commands are available for KIND of `tree', `rtl', and `ipa'.
5467
5468`scan-KIND-dump REGEX SUFFIX [{ target/xfail SELECTOR }]'
5469     Passes if REGEX matches text in the dump file with suffix SUFFIX.
5470
5471`scan-KIND-dump-not REGEX SUFFIX [{ target/xfail SELECTOR }]'
5472     Passes if REGEX does not match text in the dump file with suffix
5473     SUFFIX.
5474
5475`scan-KIND-dump-times REGEX NUM SUFFIX [{ target/xfail SELECTOR }]'
5476     Passes if REGEX is found exactly NUM times in the dump file with
5477     suffix SUFFIX.
5478
5479`scan-KIND-dump-dem REGEX SUFFIX [{ target/xfail SELECTOR }]'
5480     Passes if REGEX matches demangled text in the dump file with
5481     suffix SUFFIX.
5482
5483`scan-KIND-dump-dem-not REGEX SUFFIX [{ target/xfail SELECTOR }]'
5484     Passes if REGEX does not match demangled text in the dump file with
5485     suffix SUFFIX.
5486
54877.2.6.4 Verify that an output files exists or not
5488.................................................
5489
5490`output-exists [{ target/xfail SELECTOR }]'
5491     Passes if compiler output file exists.
5492
5493`output-exists-not [{ target/xfail SELECTOR }]'
5494     Passes if compiler output file does not exist.
5495
54967.2.6.5 Check for LTO tests
5497...........................
5498
5499`scan-symbol REGEXP [{ target/xfail SELECTOR }]'
5500     Passes if the pattern is present in the final executable.
5501
55027.2.6.6 Checks for `gcov' tests
5503...............................
5504
5505`run-gcov SOURCEFILE'
5506     Check line counts in `gcov' tests.
5507
5508`run-gcov [branches] [calls] { OPTS SOURCEFILE }'
5509     Check branch and/or call counts, in addition to line counts, in
5510     `gcov' tests.
5511
55127.2.6.7 Clean up generated test files
5513.....................................
5514
5515`cleanup-coverage-files'
5516     Removes coverage data files generated for this test.
5517
5518`cleanup-ipa-dump SUFFIX'
5519     Removes IPA dump files generated for this test.
5520
5521`cleanup-modules "LIST-OF-EXTRA-MODULES"'
5522     Removes Fortran module files generated for this test, excluding the
5523     module names listed in keep-modules.  Cleaning up module files is
5524     usually done automatically by the testsuite by looking at the
5525     source files and removing the modules after the test has been
5526     executed.
5527          module MoD1
5528          end module MoD1
5529          module Mod2
5530          end module Mod2
5531          module moD3
5532          end module moD3
5533          module mod4
5534          end module mod4
5535          ! { dg-final { cleanup-modules "mod1 mod2" } } ! redundant
5536          ! { dg-final { keep-modules "mod3 mod4" } }
5537
5538`keep-modules "LIST-OF-MODULES-NOT-TO-DELETE"'
5539     Whitespace separated list of module names that should not be
5540     deleted by cleanup-modules.  If the list of modules is empty, all
5541     modules defined in this file are kept.
5542          module maybe_unneeded
5543          end module maybe_unneeded
5544          module keep1
5545          end module keep1
5546          module keep2
5547          end module keep2
5548          ! { dg-final { keep-modules "keep1 keep2" } } ! just keep these two
5549          ! { dg-final { keep-modules "" } } ! keep all
5550
5551`cleanup-profile-file'
5552     Removes profiling files generated for this test.
5553
5554`cleanup-repo-files'
5555     Removes files generated for this test for `-frepo'.
5556
5557`cleanup-rtl-dump SUFFIX'
5558     Removes RTL dump files generated for this test.
5559
5560`cleanup-saved-temps'
5561     Removes files for the current test which were kept for
5562     `-save-temps'.
5563
5564`cleanup-tree-dump SUFFIX'
5565     Removes tree dump files matching SUFFIX which were generated for
5566     this test.
5567
5568
5569File: gccint.info,  Node: Ada Tests,  Next: C Tests,  Prev: Test Directives,  Up: Testsuites
5570
55717.3 Ada Language Testsuites
5572===========================
5573
5574The Ada testsuite includes executable tests from the ACATS testsuite,
5575publicly available at `http://www.ada-auth.org/acats.html'.
5576
5577 These tests are integrated in the GCC testsuite in the `ada/acats'
5578directory, and enabled automatically when running `make check', assuming
5579the Ada language has been enabled when configuring GCC.
5580
5581 You can also run the Ada testsuite independently, using `make
5582check-ada', or run a subset of the tests by specifying which chapter to
5583run, e.g.:
5584
5585     $ make check-ada CHAPTERS="c3 c9"
5586
5587 The tests are organized by directory, each directory corresponding to
5588a chapter of the Ada Reference Manual.  So for example, `c9' corresponds
5589to chapter 9, which deals with tasking features of the language.
5590
5591 There is also an extra chapter called `gcc' containing a template for
5592creating new executable tests, although this is deprecated in favor of
5593the `gnat.dg' testsuite.
5594
5595 The tests are run using two `sh' scripts: `run_acats' and
5596`run_all.sh'.  To run the tests using a simulator or a cross target,
5597see the small customization section at the top of `run_all.sh'.
5598
5599 These tests are run using the build tree: they can be run without doing
5600a `make install'.
5601
5602
5603File: gccint.info,  Node: C Tests,  Next: libgcj Tests,  Prev: Ada Tests,  Up: Testsuites
5604
56057.4 C Language Testsuites
5606=========================
5607
5608GCC contains the following C language testsuites, in the
5609`gcc/testsuite' directory:
5610
5611`gcc.dg'
5612     This contains tests of particular features of the C compiler,
5613     using the more modern `dg' harness.  Correctness tests for various
5614     compiler features should go here if possible.
5615
5616     Magic comments determine whether the file is preprocessed,
5617     compiled, linked or run.  In these tests, error and warning
5618     message texts are compared against expected texts or regular
5619     expressions given in comments.  These tests are run with the
5620     options `-ansi -pedantic' unless other options are given in the
5621     test.  Except as noted below they are not run with multiple
5622     optimization options.
5623
5624`gcc.dg/compat'
5625     This subdirectory contains tests for binary compatibility using
5626     `lib/compat.exp', which in turn uses the language-independent
5627     support (*note Support for testing binary compatibility: compat
5628     Testing.).
5629
5630`gcc.dg/cpp'
5631     This subdirectory contains tests of the preprocessor.
5632
5633`gcc.dg/debug'
5634     This subdirectory contains tests for debug formats.  Tests in this
5635     subdirectory are run for each debug format that the compiler
5636     supports.
5637
5638`gcc.dg/format'
5639     This subdirectory contains tests of the `-Wformat' format
5640     checking.  Tests in this directory are run with and without
5641     `-DWIDE'.
5642
5643`gcc.dg/noncompile'
5644     This subdirectory contains tests of code that should not compile
5645     and does not need any special compilation options.  They are run
5646     with multiple optimization options, since sometimes invalid code
5647     crashes the compiler with optimization.
5648
5649`gcc.dg/special'
5650     FIXME: describe this.
5651
5652`gcc.c-torture'
5653     This contains particular code fragments which have historically
5654     broken easily.  These tests are run with multiple optimization
5655     options, so tests for features which only break at some
5656     optimization levels belong here.  This also contains tests to
5657     check that certain optimizations occur.  It might be worthwhile to
5658     separate the correctness tests cleanly from the code quality
5659     tests, but it hasn't been done yet.
5660
5661`gcc.c-torture/compat'
5662     FIXME: describe this.
5663
5664     This directory should probably not be used for new tests.
5665
5666`gcc.c-torture/compile'
5667     This testsuite contains test cases that should compile, but do not
5668     need to link or run.  These test cases are compiled with several
5669     different combinations of optimization options.  All warnings are
5670     disabled for these test cases, so this directory is not suitable if
5671     you wish to test for the presence or absence of compiler warnings.
5672     While special options can be set, and tests disabled on specific
5673     platforms, by the use of `.x' files, mostly these test cases
5674     should not contain platform dependencies.  FIXME: discuss how
5675     defines such as `NO_LABEL_VALUES' and `STACK_SIZE' are used.
5676
5677`gcc.c-torture/execute'
5678     This testsuite contains test cases that should compile, link and
5679     run; otherwise the same comments as for `gcc.c-torture/compile'
5680     apply.
5681
5682`gcc.c-torture/execute/ieee'
5683     This contains tests which are specific to IEEE floating point.
5684
5685`gcc.c-torture/unsorted'
5686     FIXME: describe this.
5687
5688     This directory should probably not be used for new tests.
5689
5690`gcc.misc-tests'
5691     This directory contains C tests that require special handling.
5692     Some of these tests have individual expect files, and others share
5693     special-purpose expect files:
5694
5695    ``bprob*.c''
5696          Test `-fbranch-probabilities' using
5697          `gcc.misc-tests/bprob.exp', which in turn uses the generic,
5698          language-independent framework (*note Support for testing
5699          profile-directed optimizations: profopt Testing.).
5700
5701    ``gcov*.c''
5702          Test `gcov' output using `gcov.exp', which in turn uses the
5703          language-independent support (*note Support for testing gcov:
5704          gcov Testing.).
5705
5706    ``i386-pf-*.c''
5707          Test i386-specific support for data prefetch using
5708          `i386-prefetch.exp'.
5709
5710`gcc.test-framework'
5711
5712    ``dg-*.c''
5713          Test the testsuite itself using
5714          `gcc.test-framework/test-framework.exp'.
5715
5716
5717 FIXME: merge in `testsuite/README.gcc' and discuss the format of test
5718cases and magic comments more.
5719
5720
5721File: gccint.info,  Node: libgcj Tests,  Next: LTO Testing,  Prev: C Tests,  Up: Testsuites
5722
57237.5 The Java library testsuites.
5724================================
5725
5726Runtime tests are executed via `make check' in the
5727`TARGET/libjava/testsuite' directory in the build tree.  Additional
5728runtime tests can be checked into this testsuite.
5729
5730 Regression testing of the core packages in libgcj is also covered by
5731the Mauve testsuite.  The Mauve Project develops tests for the Java
5732Class Libraries.  These tests are run as part of libgcj testing by
5733placing the Mauve tree within the libjava testsuite sources at
5734`libjava/testsuite/libjava.mauve/mauve', or by specifying the location
5735of that tree when invoking `make', as in `make MAUVEDIR=~/mauve check'.
5736
5737 To detect regressions, a mechanism in `mauve.exp' compares the
5738failures for a test run against the list of expected failures in
5739`libjava/testsuite/libjava.mauve/xfails' from the source hierarchy.
5740Update this file when adding new failing tests to Mauve, or when fixing
5741bugs in libgcj that had caused Mauve test failures.
5742
5743 We encourage developers to contribute test cases to Mauve.
5744
5745
5746File: gccint.info,  Node: LTO Testing,  Next: gcov Testing,  Prev: libgcj Tests,  Up: Testsuites
5747
57487.6 Support for testing link-time optimizations
5749===============================================
5750
5751Tests for link-time optimizations usually require multiple source files
5752that are compiled separately, perhaps with different sets of options.
5753There are several special-purpose test directives used for these tests.
5754
5755`{ dg-lto-do DO-WHAT-KEYWORD }'
5756     DO-WHAT-KEYWORD specifies how the test is compiled and whether it
5757     is executed.  It is one of:
5758
5759    `assemble'
5760          Compile with `-c' to produce a relocatable object file.
5761
5762    `link'
5763          Compile, assemble, and link to produce an executable file.
5764
5765    `run'
5766          Produce and run an executable file, which is expected to
5767          return an exit code of 0.
5768
5769     The default is `assemble'.  That can be overridden for a set of
5770     tests by redefining `dg-do-what-default' within the `.exp' file
5771     for those tests.
5772
5773     Unlike `dg-do', `dg-lto-do' does not support an optional `target'
5774     or `xfail' list.  Use `dg-skip-if', `dg-xfail-if', or
5775     `dg-xfail-run-if'.
5776
5777`{ dg-lto-options { { OPTIONS } [{ OPTIONS }] } [{ target SELECTOR }]}'
5778     This directive provides a list of one or more sets of compiler
5779     options to override LTO_OPTIONS.  Each test will be compiled and
5780     run with each of these sets of options.
5781
5782`{ dg-extra-ld-options OPTIONS [{ target SELECTOR }]}'
5783     This directive adds OPTIONS to the linker options used.
5784
5785`{ dg-suppress-ld-options OPTIONS [{ target SELECTOR }]}'
5786     This directive removes OPTIONS from the set of linker options used.
5787
5788
5789File: gccint.info,  Node: gcov Testing,  Next: profopt Testing,  Prev: LTO Testing,  Up: Testsuites
5790
57917.7 Support for testing `gcov'
5792==============================
5793
5794Language-independent support for testing `gcov', and for checking that
5795branch profiling produces expected values, is provided by the expect
5796file `lib/gcov.exp'.  `gcov' tests also rely on procedures in
5797`lib/gcc-dg.exp' to compile and run the test program.  A typical `gcov'
5798test contains the following DejaGnu commands within comments:
5799
5800     { dg-options "-fprofile-arcs -ftest-coverage" }
5801     { dg-do run { target native } }
5802     { dg-final { run-gcov sourcefile } }
5803
5804 Checks of `gcov' output can include line counts, branch percentages,
5805and call return percentages.  All of these checks are requested via
5806commands that appear in comments in the test's source file.  Commands
5807to check line counts are processed by default.  Commands to check
5808branch percentages and call return percentages are processed if the
5809`run-gcov' command has arguments `branches' or `calls', respectively.
5810For example, the following specifies checking both, as well as passing
5811`-b' to `gcov':
5812
5813     { dg-final { run-gcov branches calls { -b sourcefile } } }
5814
5815 A line count command appears within a comment on the source line that
5816is expected to get the specified count and has the form `count(CNT)'.
5817A test should only check line counts for lines that will get the same
5818count for any architecture.
5819
5820 Commands to check branch percentages (`branch') and call return
5821percentages (`returns') are very similar to each other.  A beginning
5822command appears on or before the first of a range of lines that will
5823report the percentage, and the ending command follows that range of
5824lines.  The beginning command can include a list of percentages, all of
5825which are expected to be found within the range.  A range is terminated
5826by the next command of the same kind.  A command `branch(end)' or
5827`returns(end)' marks the end of a range without starting a new one.
5828For example:
5829
5830     if (i > 10 && j > i && j < 20)  /* branch(27 50 75) */
5831                                     /* branch(end) */
5832       foo (i, j);
5833
5834 For a call return percentage, the value specified is the percentage of
5835calls reported to return.  For a branch percentage, the value is either
5836the expected percentage or 100 minus that value, since the direction of
5837a branch can differ depending on the target or the optimization level.
5838
5839 Not all branches and calls need to be checked.  A test should not
5840check for branches that might be optimized away or replaced with
5841predicated instructions.  Don't check for calls inserted by the
5842compiler or ones that might be inlined or optimized away.
5843
5844 A single test can check for combinations of line counts, branch
5845percentages, and call return percentages.  The command to check a line
5846count must appear on the line that will report that count, but commands
5847to check branch percentages and call return percentages can bracket the
5848lines that report them.
5849
5850
5851File: gccint.info,  Node: profopt Testing,  Next: compat Testing,  Prev: gcov Testing,  Up: Testsuites
5852
58537.8 Support for testing profile-directed optimizations
5854======================================================
5855
5856The file `profopt.exp' provides language-independent support for
5857checking correct execution of a test built with profile-directed
5858optimization.  This testing requires that a test program be built and
5859executed twice.  The first time it is compiled to generate profile
5860data, and the second time it is compiled to use the data that was
5861generated during the first execution.  The second execution is to
5862verify that the test produces the expected results.
5863
5864 To check that the optimization actually generated better code, a test
5865can be built and run a third time with normal optimizations to verify
5866that the performance is better with the profile-directed optimizations.
5867`profopt.exp' has the beginnings of this kind of support.
5868
5869 `profopt.exp' provides generic support for profile-directed
5870optimizations.  Each set of tests that uses it provides information
5871about a specific optimization:
5872
5873`tool'
5874     tool being tested, e.g., `gcc'
5875
5876`profile_option'
5877     options used to generate profile data
5878
5879`feedback_option'
5880     options used to optimize using that profile data
5881
5882`prof_ext'
5883     suffix of profile data files
5884
5885`PROFOPT_OPTIONS'
5886     list of options with which to run each test, similar to the lists
5887     for torture tests
5888
5889`{ dg-final-generate { LOCAL-DIRECTIVE } }'
5890     This directive is similar to `dg-final', but the LOCAL-DIRECTIVE
5891     is run after the generation of profile data.
5892
5893`{ dg-final-use { LOCAL-DIRECTIVE } }'
5894     The LOCAL-DIRECTIVE is run after the profile data have been used.
5895
5896
5897File: gccint.info,  Node: compat Testing,  Next: Torture Tests,  Prev: profopt Testing,  Up: Testsuites
5898
58997.9 Support for testing binary compatibility
5900============================================
5901
5902The file `compat.exp' provides language-independent support for binary
5903compatibility testing.  It supports testing interoperability of two
5904compilers that follow the same ABI, or of multiple sets of compiler
5905options that should not affect binary compatibility.  It is intended to
5906be used for testsuites that complement ABI testsuites.
5907
5908 A test supported by this framework has three parts, each in a separate
5909source file: a main program and two pieces that interact with each
5910other to split up the functionality being tested.
5911
5912`TESTNAME_main.SUFFIX'
5913     Contains the main program, which calls a function in file
5914     `TESTNAME_x.SUFFIX'.
5915
5916`TESTNAME_x.SUFFIX'
5917     Contains at least one call to a function in `TESTNAME_y.SUFFIX'.
5918
5919`TESTNAME_y.SUFFIX'
5920     Shares data with, or gets arguments from, `TESTNAME_x.SUFFIX'.
5921
5922 Within each test, the main program and one functional piece are
5923compiled by the GCC under test.  The other piece can be compiled by an
5924alternate compiler.  If no alternate compiler is specified, then all
5925three source files are all compiled by the GCC under test.  You can
5926specify pairs of sets of compiler options.  The first element of such a
5927pair specifies options used with the GCC under test, and the second
5928element of the pair specifies options used with the alternate compiler.
5929Each test is compiled with each pair of options.
5930
5931 `compat.exp' defines default pairs of compiler options.  These can be
5932overridden by defining the environment variable `COMPAT_OPTIONS' as:
5933
5934     COMPAT_OPTIONS="[list [list {TST1} {ALT1}]
5935       ...[list {TSTN} {ALTN}]]"
5936
5937 where TSTI and ALTI are lists of options, with TSTI used by the
5938compiler under test and ALTI used by the alternate compiler.  For
5939example, with `[list [list {-g -O0} {-O3}] [list {-fpic} {-fPIC -O2}]]',
5940the test is first built with `-g -O0' by the compiler under test and
5941with `-O3' by the alternate compiler.  The test is built a second time
5942using `-fpic' by the compiler under test and `-fPIC -O2' by the
5943alternate compiler.
5944
5945 An alternate compiler is specified by defining an environment variable
5946to be the full pathname of an installed compiler; for C define
5947`ALT_CC_UNDER_TEST', and for C++ define `ALT_CXX_UNDER_TEST'.  These
5948will be written to the `site.exp' file used by DejaGnu.  The default is
5949to build each test with the compiler under test using the first of each
5950pair of compiler options from `COMPAT_OPTIONS'.  When
5951`ALT_CC_UNDER_TEST' or `ALT_CXX_UNDER_TEST' is `same', each test is
5952built using the compiler under test but with combinations of the
5953options from `COMPAT_OPTIONS'.
5954
5955 To run only the C++ compatibility suite using the compiler under test
5956and another version of GCC using specific compiler options, do the
5957following from `OBJDIR/gcc':
5958
5959     rm site.exp
5960     make -k \
5961       ALT_CXX_UNDER_TEST=${alt_prefix}/bin/g++ \
5962       COMPAT_OPTIONS="LISTS AS SHOWN ABOVE" \
5963       check-c++ \
5964       RUNTESTFLAGS="compat.exp"
5965
5966 A test that fails when the source files are compiled with different
5967compilers, but passes when the files are compiled with the same
5968compiler, demonstrates incompatibility of the generated code or runtime
5969support.  A test that fails for the alternate compiler but passes for
5970the compiler under test probably tests for a bug that was fixed in the
5971compiler under test but is present in the alternate compiler.
5972
5973 The binary compatibility tests support a small number of test framework
5974commands that appear within comments in a test file.
5975
5976`dg-require-*'
5977     These commands can be used in `TESTNAME_main.SUFFIX' to skip the
5978     test if specific support is not available on the target.
5979
5980`dg-options'
5981     The specified options are used for compiling this particular source
5982     file, appended to the options from `COMPAT_OPTIONS'.  When this
5983     command appears in `TESTNAME_main.SUFFIX' the options are also
5984     used to link the test program.
5985
5986`dg-xfail-if'
5987     This command can be used in a secondary source file to specify that
5988     compilation is expected to fail for particular options on
5989     particular targets.
5990
5991
5992File: gccint.info,  Node: Torture Tests,  Prev: compat Testing,  Up: Testsuites
5993
59947.10 Support for torture testing using multiple options
5995=======================================================
5996
5997Throughout the compiler testsuite there are several directories whose
5998tests are run multiple times, each with a different set of options.
5999These are known as torture tests.  `lib/torture-options.exp' defines
6000procedures to set up these lists:
6001
6002`torture-init'
6003     Initialize use of torture lists.
6004
6005`set-torture-options'
6006     Set lists of torture options to use for tests with and without
6007     loops.  Optionally combine a set of torture options with a set of
6008     other options, as is done with Objective-C runtime options.
6009
6010`torture-finish'
6011     Finalize use of torture lists.
6012
6013 The `.exp' file for a set of tests that use torture options must
6014include calls to these three procedures if:
6015
6016   * It calls `gcc-dg-runtest' and overrides DG_TORTURE_OPTIONS.
6017
6018   * It calls ${TOOL}`-torture' or ${TOOL}`-torture-execute', where
6019     TOOL is `c', `fortran', or `objc'.
6020
6021   * It calls `dg-pch'.
6022
6023 It is not necessary for a `.exp' file that calls `gcc-dg-runtest' to
6024call the torture procedures if the tests should use the list in
6025DG_TORTURE_OPTIONS defined in `gcc-dg.exp'.
6026
6027 Most uses of torture options can override the default lists by defining
6028TORTURE_OPTIONS or add to the default list by defining
6029ADDITIONAL_TORTURE_OPTIONS.  Define these in a `.dejagnurc' file or add
6030them to the `site.exp' file; for example
6031
6032     set ADDITIONAL_TORTURE_OPTIONS  [list \
6033       { -O2 -ftree-loop-linear } \
6034       { -O2 -fpeel-loops } ]
6035
6036
6037File: gccint.info,  Node: Options,  Next: Passes,  Prev: Testsuites,  Up: Top
6038
60398 Option specification files
6040****************************
6041
6042Most GCC command-line options are described by special option
6043definition files, the names of which conventionally end in `.opt'.
6044This chapter describes the format of these files.
6045
6046* Menu:
6047
6048* Option file format::   The general layout of the files
6049* Option properties::    Supported option properties
6050
6051
6052File: gccint.info,  Node: Option file format,  Next: Option properties,  Up: Options
6053
60548.1 Option file format
6055======================
6056
6057Option files are a simple list of records in which each field occupies
6058its own line and in which the records themselves are separated by blank
6059lines.  Comments may appear on their own line anywhere within the file
6060and are preceded by semicolons.  Whitespace is allowed before the
6061semicolon.
6062
6063 The files can contain the following types of record:
6064
6065   * A language definition record.  These records have two fields: the
6066     string `Language' and the name of the language.  Once a language
6067     has been declared in this way, it can be used as an option
6068     property.  *Note Option properties::.
6069
6070   * A target specific save record to save additional information. These
6071     records have two fields: the string `TargetSave', and a
6072     declaration type to go in the `cl_target_option' structure.
6073
6074   * A variable record to define a variable used to store option
6075     information.  These records have two fields: the string
6076     `Variable', and a declaration of the type and name of the
6077     variable, optionally with an initializer (but without any trailing
6078     `;').  These records may be used for variables used for many
6079     options where declaring the initializer in a single option
6080     definition record, or duplicating it in many records, would be
6081     inappropriate, or for variables set in option handlers rather than
6082     referenced by `Var' properties.
6083
6084   * A variable record to define a variable used to store option
6085     information.  These records have two fields: the string
6086     `TargetVariable', and a declaration of the type and name of the
6087     variable, optionally with an initializer (but without any trailing
6088     `;').  `TargetVariable' is a combination of `Variable' and
6089     `TargetSave' records in that the variable is defined in the
6090     `gcc_options' structure, but these variables are also stored in
6091     the `cl_target_option' structure.  The variables are saved in the
6092     target save code and restored in the target restore code.
6093
6094   * A variable record to record any additional files that the
6095     `options.h' file should include.  This is useful to provide
6096     enumeration or structure definitions needed for target variables.
6097     These records have two fields: the string `HeaderInclude' and the
6098     name of the include file.
6099
6100   * A variable record to record any additional files that the
6101     `options.c' or `options-save.c' file should include.  This is
6102     useful to provide inline functions needed for target variables
6103     and/or `#ifdef' sequences to properly set up the initialization.
6104     These records have two fields: the string `SourceInclude' and the
6105     name of the include file.
6106
6107   * An enumeration record to define a set of strings that may be used
6108     as arguments to an option or options.  These records have three
6109     fields: the string `Enum', a space-separated list of properties
6110     and help text used to describe the set of strings in `--help'
6111     output.  Properties use the same format as option properties; the
6112     following are valid:
6113    `Name(NAME)'
6114          This property is required; NAME must be a name (suitable for
6115          use in C identifiers) used to identify the set of strings in
6116          `Enum' option properties.
6117
6118    `Type(TYPE)'
6119          This property is required; TYPE is the C type for variables
6120          set by options using this enumeration together with `Var'.
6121
6122    `UnknownError(MESSAGE)'
6123          The message MESSAGE will be used as an error message if the
6124          argument is invalid; for enumerations without `UnknownError',
6125          a generic error message is used.  MESSAGE should contain a
6126          single `%qs' format, which will be used to format the invalid
6127          argument.
6128
6129   * An enumeration value record to define one of the strings in a set
6130     given in an `Enum' record.  These records have two fields: the
6131     string `EnumValue' and a space-separated list of properties.
6132     Properties use the same format as option properties; the following
6133     are valid:
6134    `Enum(NAME)'
6135          This property is required; NAME says which `Enum' record this
6136          `EnumValue' record corresponds to.
6137
6138    `String(STRING)'
6139          This property is required; STRING is the string option
6140          argument being described by this record.
6141
6142    `Value(VALUE)'
6143          This property is required; it says what value (representable
6144          as `int') should be used for the given string.
6145
6146    `Canonical'
6147          This property is optional.  If present, it says the present
6148          string is the canonical one among all those with the given
6149          value.  Other strings yielding that value will be mapped to
6150          this one so specs do not need to handle them.
6151
6152    `DriverOnly'
6153          This property is optional.  If present, the present string
6154          will only be accepted by the driver.  This is used for cases
6155          such as `-march=native' that are processed by the driver so
6156          that `gcc -v' shows how the options chosen depended on the
6157          system on which the compiler was run.
6158
6159   * An option definition record.  These records have the following
6160     fields:
6161       1. the name of the option, with the leading "-" removed
6162
6163       2. a space-separated list of option properties (*note Option
6164          properties::)
6165
6166       3. the help text to use for `--help' (omitted if the second field
6167          contains the `Undocumented' property).
6168
6169     By default, all options beginning with "f", "W" or "m" are
6170     implicitly assumed to take a "no-" form.  This form should not be
6171     listed separately.  If an option beginning with one of these
6172     letters does not have a "no-" form, you can use the
6173     `RejectNegative' property to reject it.
6174
6175     The help text is automatically line-wrapped before being displayed.
6176     Normally the name of the option is printed on the left-hand side of
6177     the output and the help text is printed on the right.  However, if
6178     the help text contains a tab character, the text to the left of
6179     the tab is used instead of the option's name and the text to the
6180     right of the tab forms the help text.  This allows you to
6181     elaborate on what type of argument the option takes.
6182
6183   * A target mask record.  These records have one field of the form
6184     `Mask(X)'.  The options-processing script will automatically
6185     allocate a bit in `target_flags' (*note Run-time Target::) for
6186     each mask name X and set the macro `MASK_X' to the appropriate
6187     bitmask.  It will also declare a `TARGET_X' macro that has the
6188     value 1 when bit `MASK_X' is set and 0 otherwise.
6189
6190     They are primarily intended to declare target masks that are not
6191     associated with user options, either because these masks represent
6192     internal switches or because the options are not available on all
6193     configurations and yet the masks always need to be defined.
6194
6195
6196File: gccint.info,  Node: Option properties,  Prev: Option file format,  Up: Options
6197
61988.2 Option properties
6199=====================
6200
6201The second field of an option record can specify any of the following
6202properties.  When an option takes an argument, it is enclosed in
6203parentheses following the option property name.  The parser that
6204handles option files is quite simplistic, and will be tricked by any
6205nested parentheses within the argument text itself; in this case, the
6206entire option argument can be wrapped in curly braces within the
6207parentheses to demarcate it, e.g.:
6208
6209     Condition({defined (USE_CYGWIN_LIBSTDCXX_WRAPPERS)})
6210
6211`Common'
6212     The option is available for all languages and targets.
6213
6214`Target'
6215     The option is available for all languages but is target-specific.
6216
6217`Driver'
6218     The option is handled by the compiler driver using code not shared
6219     with the compilers proper (`cc1' etc.).
6220
6221`LANGUAGE'
6222     The option is available when compiling for the given language.
6223
6224     It is possible to specify several different languages for the same
6225     option.  Each LANGUAGE must have been declared by an earlier
6226     `Language' record.  *Note Option file format::.
6227
6228`RejectDriver'
6229     The option is only handled by the compilers proper (`cc1' etc.)
6230     and should not be accepted by the driver.
6231
6232`RejectNegative'
6233     The option does not have a "no-" form.  All options beginning with
6234     "f", "W" or "m" are assumed to have a "no-" form unless this
6235     property is used.
6236
6237`Negative(OTHERNAME)'
6238     The option will turn off another option OTHERNAME, which is the
6239     option name with the leading "-" removed.  This chain action will
6240     propagate through the `Negative' property of the option to be
6241     turned off.
6242
6243     As a consequence, if you have a group of mutually-exclusive
6244     options, their `Negative' properties should form a circular chain.
6245     For example, if options `-A', `-B' and `-C' are mutually
6246     exclusive, their respective `Negative' properties should be
6247     `Negative(B)', `Negative(C)' and `Negative(A)'.
6248
6249`Joined'
6250`Separate'
6251     The option takes a mandatory argument.  `Joined' indicates that
6252     the option and argument can be included in the same `argv' entry
6253     (as with `-mflush-func=NAME', for example).  `Separate' indicates
6254     that the option and argument can be separate `argv' entries (as
6255     with `-o').  An option is allowed to have both of these properties.
6256
6257`JoinedOrMissing'
6258     The option takes an optional argument.  If the argument is given,
6259     it will be part of the same `argv' entry as the option itself.
6260
6261     This property cannot be used alongside `Joined' or `Separate'.
6262
6263`MissingArgError(MESSAGE)'
6264     For an option marked `Joined' or `Separate', the message MESSAGE
6265     will be used as an error message if the mandatory argument is
6266     missing; for options without `MissingArgError', a generic error
6267     message is used.  MESSAGE should contain a single `%qs' format,
6268     which will be used to format the name of the option passed.
6269
6270`Args(N)'
6271     For an option marked `Separate', indicate that it takes N
6272     arguments.  The default is 1.
6273
6274`UInteger'
6275     The option's argument is a non-negative integer.  The option parser
6276     will check and convert the argument before passing it to the
6277     relevant option handler.  `UInteger' should also be used on
6278     options like `-falign-loops' where both `-falign-loops' and
6279     `-falign-loops'=N are supported to make sure the saved options are
6280     given a full integer.
6281
6282`ToLower'
6283     The option's argument should be converted to lowercase as part of
6284     putting it in canonical form, and before comparing with the strings
6285     indicated by any `Enum' property.
6286
6287`NoDriverArg'
6288     For an option marked `Separate', the option only takes an argument
6289     in the compiler proper, not in the driver.  This is for
6290     compatibility with existing options that are used both directly and
6291     via `-Wp,'; new options should not have this property.
6292
6293`Var(VAR)'
6294     The state of this option should be stored in variable VAR
6295     (actually a macro for `global_options.x_VAR').  The way that the
6296     state is stored depends on the type of option:
6297
6298        * If the option uses the `Mask' or `InverseMask' properties,
6299          VAR is the integer variable that contains the mask.
6300
6301        * If the option is a normal on/off switch, VAR is an integer
6302          variable that is nonzero when the option is enabled.  The
6303          options parser will set the variable to 1 when the positive
6304          form of the option is used and 0 when the "no-" form is used.
6305
6306        * If the option takes an argument and has the `UInteger'
6307          property, VAR is an integer variable that stores the value of
6308          the argument.
6309
6310        * If the option takes an argument and has the `Enum' property,
6311          VAR is a variable (type given in the `Type' property of the
6312          `Enum' record whose `Name' property has the same argument as
6313          the `Enum' property of this option) that stores the value of
6314          the argument.
6315
6316        * If the option has the `Defer' property, VAR is a pointer to a
6317          `VEC(cl_deferred_option,heap)' that stores the option for
6318          later processing.  (VAR is declared with type `void *' and
6319          needs to be cast to `VEC(cl_deferred_option,heap)' before
6320          use.)
6321
6322        * Otherwise, if the option takes an argument, VAR is a pointer
6323          to the argument string.  The pointer will be null if the
6324          argument is optional and wasn't given.
6325
6326     The option-processing script will usually zero-initialize VAR.
6327     You can modify this behavior using `Init'.
6328
6329`Var(VAR, SET)'
6330     The option controls an integer variable VAR and is active when VAR
6331     equals SET.  The option parser will set VAR to SET when the
6332     positive form of the option is used and `!SET' when the "no-" form
6333     is used.
6334
6335     VAR is declared in the same way as for the single-argument form
6336     described above.
6337
6338`Init(VALUE)'
6339     The variable specified by the `Var' property should be statically
6340     initialized to VALUE.  If more than one option using the same
6341     variable specifies `Init', all must specify the same initializer.
6342
6343`Mask(NAME)'
6344     The option is associated with a bit in the `target_flags' variable
6345     (*note Run-time Target::) and is active when that bit is set.  You
6346     may also specify `Var' to select a variable other than
6347     `target_flags'.
6348
6349     The options-processing script will automatically allocate a unique
6350     bit for the option.  If the option is attached to `target_flags',
6351     the script will set the macro `MASK_NAME' to the appropriate
6352     bitmask.  It will also declare a `TARGET_NAME' macro that has the
6353     value 1 when the option is active and 0 otherwise.  If you use
6354     `Var' to attach the option to a different variable, the bitmask
6355     macro with be called `OPTION_MASK_NAME'.
6356
6357`InverseMask(OTHERNAME)'
6358`InverseMask(OTHERNAME, THISNAME)'
6359     The option is the inverse of another option that has the
6360     `Mask(OTHERNAME)' property.  If THISNAME is given, the
6361     options-processing script will declare a `TARGET_THISNAME' macro
6362     that is 1 when the option is active and 0 otherwise.
6363
6364`Enum(NAME)'
6365     The option's argument is a string from the set of strings
6366     associated with the corresponding `Enum' record.  The string is
6367     checked and converted to the integer specified in the corresponding
6368     `EnumValue' record before being passed to option handlers.
6369
6370`Defer'
6371     The option should be stored in a vector, specified with `Var', for
6372     later processing.
6373
6374`Alias(OPT)'
6375`Alias(OPT, ARG)'
6376`Alias(OPT, POSARG, NEGARG)'
6377     The option is an alias for `-OPT' (or the negative form of that
6378     option, depending on `NegativeAlias').  In the first form, any
6379     argument passed to the alias is considered to be passed to `-OPT',
6380     and `-OPT' is considered to be negated if the alias is used in
6381     negated form.  In the second form, the alias may not be negated or
6382     have an argument, and POSARG is considered to be passed as an
6383     argument to `-OPT'.  In the third form, the alias may not have an
6384     argument, if the alias is used in the positive form then POSARG is
6385     considered to be passed to `-OPT', and if the alias is used in the
6386     negative form then NEGARG is considered to be passed to `-OPT'.
6387
6388     Aliases should not specify `Var' or `Mask' or `UInteger'.  Aliases
6389     should normally specify the same languages as the target of the
6390     alias; the flags on the target will be used to determine any
6391     diagnostic for use of an option for the wrong language, while
6392     those on the alias will be used to identify what command-line text
6393     is the option and what text is any argument to that option.
6394
6395     When an `Alias' definition is used for an option, driver specs do
6396     not need to handle it and no `OPT_' enumeration value is defined
6397     for it; only the canonical form of the option will be seen in those
6398     places.
6399
6400`NegativeAlias'
6401     For an option marked with `Alias(OPT)', the option is considered
6402     to be an alias for the positive form of `-OPT' if negated and for
6403     the negative form of `-OPT' if not negated.  `NegativeAlias' may
6404     not be used with the forms of `Alias' taking more than one
6405     argument.
6406
6407`Ignore'
6408     This option is ignored apart from printing any warning specified
6409     using `Warn'.  The option will not be seen by specs and no `OPT_'
6410     enumeration value is defined for it.
6411
6412`SeparateAlias'
6413     For an option marked with `Joined', `Separate' and `Alias', the
6414     option only acts as an alias when passed a separate argument; with
6415     a joined argument it acts as a normal option, with an `OPT_'
6416     enumeration value.  This is for compatibility with the Java `-d'
6417     option and should not be used for new options.
6418
6419`Warn(MESSAGE)'
6420     If this option is used, output the warning MESSAGE.  MESSAGE is a
6421     format string, either taking a single operand with a `%qs' format
6422     which is the option name, or not taking any operands, which is
6423     passed to the `warning' function.  If an alias is marked `Warn',
6424     the target of the alias must not also be marked `Warn'.
6425
6426`Report'
6427     The state of the option should be printed by `-fverbose-asm'.
6428
6429`Warning'
6430     This is a warning option and should be shown as such in `--help'
6431     output.  This flag does not currently affect anything other than
6432     `--help'.
6433
6434`Optimization'
6435     This is an optimization option.  It should be shown as such in
6436     `--help' output, and any associated variable named using `Var'
6437     should be saved and restored when the optimization level is
6438     changed with `optimize' attributes.
6439
6440`Undocumented'
6441     The option is deliberately missing documentation and should not be
6442     included in the `--help' output.
6443
6444`Condition(COND)'
6445     The option should only be accepted if preprocessor condition COND
6446     is true.  Note that any C declarations associated with the option
6447     will be present even if COND is false; COND simply controls
6448     whether the option is accepted and whether it is printed in the
6449     `--help' output.
6450
6451`Save'
6452     Build the `cl_target_option' structure to hold a copy of the
6453     option, add the functions `cl_target_option_save' and
6454     `cl_target_option_restore' to save and restore the options.
6455
6456`SetByCombined'
6457     The option may also be set by a combined option such as
6458     `-ffast-math'.  This causes the `gcc_options' struct to have a
6459     field `frontend_set_NAME', where `NAME' is the name of the field
6460     holding the value of this option (without the leading `x_').  This
6461     gives the front end a way to indicate that the value has been set
6462     explicitly and should not be changed by the combined option.  For
6463     example, some front ends use this to prevent `-ffast-math' and
6464     `-fno-fast-math' from changing the value of `-fmath-errno' for
6465     languages that do not use `errno'.
6466
6467`EnabledBy(OPT)'
6468`EnabledBy(OPT && OPT2)'
6469     If not explicitly set, the option is set to the value of `-OPT'.
6470     The second form specifies that the option is only set if both OPT
6471     and OPT2 are set.
6472
6473`LangEnabledBy(LANGUAGE, OPT)'
6474`LangEnabledBy(LANGUAGE, OPT, POSARG, NEGARG)'
6475     When compiling for the given language, the option is set to the
6476     value of `-OPT', if not explicitly set. In the second form, if OPT
6477     is used in the positive form then POSARG is considered to be
6478     passed to the option, and if OPT is used in the negative form then
6479     NEGARG is considered to be passed to the option.  It is possible
6480     to specify several different languages.  Each LANGUAGE must have
6481     been declared by an earlier `Language' record.  *Note Option file
6482     format::.
6483
6484`NoDWARFRecord'
6485     The option is omitted from the producer string written by
6486     `-grecord-gcc-switches'.
6487
6488
6489File: gccint.info,  Node: Passes,  Next: GENERIC,  Prev: Options,  Up: Top
6490
64919 Passes and Files of the Compiler
6492**********************************
6493
6494This chapter is dedicated to giving an overview of the optimization and
6495code generation passes of the compiler.  In the process, it describes
6496some of the language front end interface, though this description is no
6497where near complete.
6498
6499* Menu:
6500
6501* Parsing pass::         The language front end turns text into bits.
6502* Gimplification pass::  The bits are turned into something we can optimize.
6503* Pass manager::         Sequencing the optimization passes.
6504* Tree SSA passes::      Optimizations on a high-level representation.
6505* RTL passes::           Optimizations on a low-level representation.
6506
6507
6508File: gccint.info,  Node: Parsing pass,  Next: Gimplification pass,  Up: Passes
6509
65109.1 Parsing pass
6511================
6512
6513The language front end is invoked only once, via
6514`lang_hooks.parse_file', to parse the entire input.  The language front
6515end may use any intermediate language representation deemed
6516appropriate.  The C front end uses GENERIC trees (*note GENERIC::), plus
6517a double handful of language specific tree codes defined in
6518`c-common.def'.  The Fortran front end uses a completely different
6519private representation.
6520
6521 At some point the front end must translate the representation used in
6522the front end to a representation understood by the language-independent
6523portions of the compiler.  Current practice takes one of two forms.
6524The C front end manually invokes the gimplifier (*note GIMPLE::) on
6525each function, and uses the gimplifier callbacks to convert the
6526language-specific tree nodes directly to GIMPLE before passing the
6527function off to be compiled.  The Fortran front end converts from a
6528private representation to GENERIC, which is later lowered to GIMPLE
6529when the function is compiled.  Which route to choose probably depends
6530on how well GENERIC (plus extensions) can be made to match up with the
6531source language and necessary parsing data structures.
6532
6533 BUG: Gimplification must occur before nested function lowering, and
6534nested function lowering must be done by the front end before passing
6535the data off to cgraph.
6536
6537 TODO: Cgraph should control nested function lowering.  It would only
6538be invoked when it is certain that the outer-most function is used.
6539
6540 TODO: Cgraph needs a gimplify_function callback.  It should be invoked
6541when (1) it is certain that the function is used, (2) warning flags
6542specified by the user require some amount of compilation in order to
6543honor, (3) the language indicates that semantic analysis is not
6544complete until gimplification occurs.  Hum... this sounds overly
6545complicated.  Perhaps we should just have the front end gimplify
6546always; in most cases it's only one function call.
6547
6548 The front end needs to pass all function definitions and top level
6549declarations off to the middle-end so that they can be compiled and
6550emitted to the object file.  For a simple procedural language, it is
6551usually most convenient to do this as each top level declaration or
6552definition is seen.  There is also a distinction to be made between
6553generating functional code and generating complete debug information.
6554The only thing that is absolutely required for functional code is that
6555function and data _definitions_ be passed to the middle-end.  For
6556complete debug information, function, data and type declarations should
6557all be passed as well.
6558
6559 In any case, the front end needs each complete top-level function or
6560data declaration, and each data definition should be passed to
6561`rest_of_decl_compilation'.  Each complete type definition should be
6562passed to `rest_of_type_compilation'.  Each function definition should
6563be passed to `cgraph_finalize_function'.
6564
6565 TODO: I know rest_of_compilation currently has all sorts of RTL
6566generation semantics.  I plan to move all code generation bits (both
6567Tree and RTL) to compile_function.  Should we hide cgraph from the
6568front ends and move back to rest_of_compilation as the official
6569interface?  Possibly we should rename all three interfaces such that
6570the names match in some meaningful way and that is more descriptive
6571than "rest_of".
6572
6573 The middle-end will, at its option, emit the function and data
6574definitions immediately or queue them for later processing.
6575
6576
6577File: gccint.info,  Node: Gimplification pass,  Next: Pass manager,  Prev: Parsing pass,  Up: Passes
6578
65799.2 Gimplification pass
6580=======================
6581
6582"Gimplification" is a whimsical term for the process of converting the
6583intermediate representation of a function into the GIMPLE language
6584(*note GIMPLE::).  The term stuck, and so words like "gimplification",
6585"gimplify", "gimplifier" and the like are sprinkled throughout this
6586section of code.
6587
6588 While a front end may certainly choose to generate GIMPLE directly if
6589it chooses, this can be a moderately complex process unless the
6590intermediate language used by the front end is already fairly simple.
6591Usually it is easier to generate GENERIC trees plus extensions and let
6592the language-independent gimplifier do most of the work.
6593
6594 The main entry point to this pass is `gimplify_function_tree' located
6595in `gimplify.c'.  From here we process the entire function gimplifying
6596each statement in turn.  The main workhorse for this pass is
6597`gimplify_expr'.  Approximately everything passes through here at least
6598once, and it is from here that we invoke the `lang_hooks.gimplify_expr'
6599callback.
6600
6601 The callback should examine the expression in question and return
6602`GS_UNHANDLED' if the expression is not a language specific construct
6603that requires attention.  Otherwise it should alter the expression in
6604some way to such that forward progress is made toward producing valid
6605GIMPLE.  If the callback is certain that the transformation is complete
6606and the expression is valid GIMPLE, it should return `GS_ALL_DONE'.
6607Otherwise it should return `GS_OK', which will cause the expression to
6608be processed again.  If the callback encounters an error during the
6609transformation (because the front end is relying on the gimplification
6610process to finish semantic checks), it should return `GS_ERROR'.
6611
6612
6613File: gccint.info,  Node: Pass manager,  Next: Tree SSA passes,  Prev: Gimplification pass,  Up: Passes
6614
66159.3 Pass manager
6616================
6617
6618The pass manager is located in `passes.c', `tree-optimize.c' and
6619`tree-pass.h'.  Its job is to run all of the individual passes in the
6620correct order, and take care of standard bookkeeping that applies to
6621every pass.
6622
6623 The theory of operation is that each pass defines a structure that
6624represents everything we need to know about that pass--when it should
6625be run, how it should be run, what intermediate language form or
6626on-the-side data structures it needs.  We register the pass to be run
6627in some particular order, and the pass manager arranges for everything
6628to happen in the correct order.
6629
6630 The actuality doesn't completely live up to the theory at present.
6631Command-line switches and `timevar_id_t' enumerations must still be
6632defined elsewhere.  The pass manager validates constraints but does not
6633attempt to (re-)generate data structures or lower intermediate language
6634form based on the requirements of the next pass.  Nevertheless, what is
6635present is useful, and a far sight better than nothing at all.
6636
6637 Each pass should have a unique name.  Each pass may have its own dump
6638file (for GCC debugging purposes).  Passes with a name starting with a
6639star do not dump anything.  Sometimes passes are supposed to share a
6640dump file / option name.  To still give these unique names, you can use
6641a prefix that is delimited by a space from the part that is used for
6642the dump file / option name.  E.g. When the pass name is "ud dce", the
6643name used for dump file/options is "dce".
6644
6645 TODO: describe the global variables set up by the pass manager, and a
6646brief description of how a new pass should use it.  I need to look at
6647what info RTL passes use first...
6648
6649
6650File: gccint.info,  Node: Tree SSA passes,  Next: RTL passes,  Prev: Pass manager,  Up: Passes
6651
66529.4 Tree SSA passes
6653===================
6654
6655The following briefly describes the Tree optimization passes that are
6656run after gimplification and what source files they are located in.
6657
6658   * Remove useless statements
6659
6660     This pass is an extremely simple sweep across the gimple code in
6661     which we identify obviously dead code and remove it.  Here we do
6662     things like simplify `if' statements with constant conditions,
6663     remove exception handling constructs surrounding code that
6664     obviously cannot throw, remove lexical bindings that contain no
6665     variables, and other assorted simplistic cleanups.  The idea is to
6666     get rid of the obvious stuff quickly rather than wait until later
6667     when it's more work to get rid of it.  This pass is located in
6668     `tree-cfg.c' and described by `pass_remove_useless_stmts'.
6669
6670   * Mudflap declaration registration
6671
6672     If mudflap (*note -fmudflap -fmudflapth -fmudflapir: (gcc)Optimize
6673     Options.) is enabled, we generate code to register some variable
6674     declarations with the mudflap runtime.  Specifically, the runtime
6675     tracks the lifetimes of those variable declarations that have
6676     their addresses taken, or whose bounds are unknown at compile time
6677     (`extern').  This pass generates new exception handling constructs
6678     (`try'/`finally'), and so must run before those are lowered.  In
6679     addition, the pass enqueues declarations of static variables whose
6680     lifetimes extend to the entire program.  The pass is located in
6681     `tree-mudflap.c' and is described by `pass_mudflap_1'.
6682
6683   * OpenMP lowering
6684
6685     If OpenMP generation (`-fopenmp') is enabled, this pass lowers
6686     OpenMP constructs into GIMPLE.
6687
6688     Lowering of OpenMP constructs involves creating replacement
6689     expressions for local variables that have been mapped using data
6690     sharing clauses, exposing the control flow of most synchronization
6691     directives and adding region markers to facilitate the creation of
6692     the control flow graph.  The pass is located in `omp-low.c' and is
6693     described by `pass_lower_omp'.
6694
6695   * OpenMP expansion
6696
6697     If OpenMP generation (`-fopenmp') is enabled, this pass expands
6698     parallel regions into their own functions to be invoked by the
6699     thread library.  The pass is located in `omp-low.c' and is
6700     described by `pass_expand_omp'.
6701
6702   * Lower control flow
6703
6704     This pass flattens `if' statements (`COND_EXPR') and moves lexical
6705     bindings (`BIND_EXPR') out of line.  After this pass, all `if'
6706     statements will have exactly two `goto' statements in its `then'
6707     and `else' arms.  Lexical binding information for each statement
6708     will be found in `TREE_BLOCK' rather than being inferred from its
6709     position under a `BIND_EXPR'.  This pass is found in
6710     `gimple-low.c' and is described by `pass_lower_cf'.
6711
6712   * Lower exception handling control flow
6713
6714     This pass decomposes high-level exception handling constructs
6715     (`TRY_FINALLY_EXPR' and `TRY_CATCH_EXPR') into a form that
6716     explicitly represents the control flow involved.  After this pass,
6717     `lookup_stmt_eh_region' will return a non-negative number for any
6718     statement that may have EH control flow semantics; examine
6719     `tree_can_throw_internal' or `tree_can_throw_external' for exact
6720     semantics.  Exact control flow may be extracted from
6721     `foreach_reachable_handler'.  The EH region nesting tree is defined
6722     in `except.h' and built in `except.c'.  The lowering pass itself
6723     is in `tree-eh.c' and is described by `pass_lower_eh'.
6724
6725   * Build the control flow graph
6726
6727     This pass decomposes a function into basic blocks and creates all
6728     of the edges that connect them.  It is located in `tree-cfg.c' and
6729     is described by `pass_build_cfg'.
6730
6731   * Find all referenced variables
6732
6733     This pass walks the entire function and collects an array of all
6734     variables referenced in the function, `referenced_vars'.  The
6735     index at which a variable is found in the array is used as a UID
6736     for the variable within this function.  This data is needed by the
6737     SSA rewriting routines.  The pass is located in `tree-dfa.c' and
6738     is described by `pass_referenced_vars'.
6739
6740   * Enter static single assignment form
6741
6742     This pass rewrites the function such that it is in SSA form.  After
6743     this pass, all `is_gimple_reg' variables will be referenced by
6744     `SSA_NAME', and all occurrences of other variables will be
6745     annotated with `VDEFS' and `VUSES'; PHI nodes will have been
6746     inserted as necessary for each basic block.  This pass is located
6747     in `tree-ssa.c' and is described by `pass_build_ssa'.
6748
6749   * Warn for uninitialized variables
6750
6751     This pass scans the function for uses of `SSA_NAME's that are fed
6752     by default definition.  For non-parameter variables, such uses are
6753     uninitialized.  The pass is run twice, before and after
6754     optimization (if turned on).  In the first pass we only warn for
6755     uses that are positively uninitialized; in the second pass we warn
6756     for uses that are possibly uninitialized.  The pass is located in
6757     `tree-ssa.c' and is defined by `pass_early_warn_uninitialized' and
6758     `pass_late_warn_uninitialized'.
6759
6760   * Dead code elimination
6761
6762     This pass scans the function for statements without side effects
6763     whose result is unused.  It does not do memory life analysis, so
6764     any value that is stored in memory is considered used.  The pass
6765     is run multiple times throughout the optimization process.  It is
6766     located in `tree-ssa-dce.c' and is described by `pass_dce'.
6767
6768   * Dominator optimizations
6769
6770     This pass performs trivial dominator-based copy and constant
6771     propagation, expression simplification, and jump threading.  It is
6772     run multiple times throughout the optimization process.  It is
6773     located in `tree-ssa-dom.c' and is described by `pass_dominator'.
6774
6775   * Forward propagation of single-use variables
6776
6777     This pass attempts to remove redundant computation by substituting
6778     variables that are used once into the expression that uses them and
6779     seeing if the result can be simplified.  It is located in
6780     `tree-ssa-forwprop.c' and is described by `pass_forwprop'.
6781
6782   * Copy Renaming
6783
6784     This pass attempts to change the name of compiler temporaries
6785     involved in copy operations such that SSA->normal can coalesce the
6786     copy away.  When compiler temporaries are copies of user
6787     variables, it also renames the compiler temporary to the user
6788     variable resulting in better use of user symbols.  It is located
6789     in `tree-ssa-copyrename.c' and is described by `pass_copyrename'.
6790
6791   * PHI node optimizations
6792
6793     This pass recognizes forms of PHI inputs that can be represented as
6794     conditional expressions and rewrites them into straight line code.
6795     It is located in `tree-ssa-phiopt.c' and is described by
6796     `pass_phiopt'.
6797
6798   * May-alias optimization
6799
6800     This pass performs a flow sensitive SSA-based points-to analysis.
6801     The resulting may-alias, must-alias, and escape analysis
6802     information is used to promote variables from in-memory
6803     addressable objects to non-aliased variables that can be renamed
6804     into SSA form.  We also update the `VDEF'/`VUSE' memory tags for
6805     non-renameable aggregates so that we get fewer false kills.  The
6806     pass is located in `tree-ssa-alias.c' and is described by
6807     `pass_may_alias'.
6808
6809     Interprocedural points-to information is located in
6810     `tree-ssa-structalias.c' and described by `pass_ipa_pta'.
6811
6812   * Profiling
6813
6814     This pass rewrites the function in order to collect runtime block
6815     and value profiling data.  Such data may be fed back into the
6816     compiler on a subsequent run so as to allow optimization based on
6817     expected execution frequencies.  The pass is located in
6818     `predict.c' and is described by `pass_profile'.
6819
6820   * Lower complex arithmetic
6821
6822     This pass rewrites complex arithmetic operations into their
6823     component scalar arithmetic operations.  The pass is located in
6824     `tree-complex.c' and is described by `pass_lower_complex'.
6825
6826   * Scalar replacement of aggregates
6827
6828     This pass rewrites suitable non-aliased local aggregate variables
6829     into a set of scalar variables.  The resulting scalar variables are
6830     rewritten into SSA form, which allows subsequent optimization
6831     passes to do a significantly better job with them.  The pass is
6832     located in `tree-sra.c' and is described by `pass_sra'.
6833
6834   * Dead store elimination
6835
6836     This pass eliminates stores to memory that are subsequently
6837     overwritten by another store, without any intervening loads.  The
6838     pass is located in `tree-ssa-dse.c' and is described by `pass_dse'.
6839
6840   * Tail recursion elimination
6841
6842     This pass transforms tail recursion into a loop.  It is located in
6843     `tree-tailcall.c' and is described by `pass_tail_recursion'.
6844
6845   * Forward store motion
6846
6847     This pass sinks stores and assignments down the flowgraph closer
6848     to their use point.  The pass is located in `tree-ssa-sink.c' and
6849     is described by `pass_sink_code'.
6850
6851   * Partial redundancy elimination
6852
6853     This pass eliminates partially redundant computations, as well as
6854     performing load motion.  The pass is located in `tree-ssa-pre.c'
6855     and is described by `pass_pre'.
6856
6857     Just before partial redundancy elimination, if
6858     `-funsafe-math-optimizations' is on, GCC tries to convert
6859     divisions to multiplications by the reciprocal.  The pass is
6860     located in `tree-ssa-math-opts.c' and is described by
6861     `pass_cse_reciprocal'.
6862
6863   * Full redundancy elimination
6864
6865     This is a simpler form of PRE that only eliminates redundancies
6866     that occur on all paths.  It is located in `tree-ssa-pre.c' and
6867     described by `pass_fre'.
6868
6869   * Loop optimization
6870
6871     The main driver of the pass is placed in `tree-ssa-loop.c' and
6872     described by `pass_loop'.
6873
6874     The optimizations performed by this pass are:
6875
6876     Loop invariant motion.  This pass moves only invariants that would
6877     be hard to handle on RTL level (function calls, operations that
6878     expand to nontrivial sequences of insns).  With `-funswitch-loops'
6879     it also moves operands of conditions that are invariant out of the
6880     loop, so that we can use just trivial invariantness analysis in
6881     loop unswitching.  The pass also includes store motion.  The pass
6882     is implemented in `tree-ssa-loop-im.c'.
6883
6884     Canonical induction variable creation.  This pass creates a simple
6885     counter for number of iterations of the loop and replaces the exit
6886     condition of the loop using it, in case when a complicated
6887     analysis is necessary to determine the number of iterations.
6888     Later optimizations then may determine the number easily.  The
6889     pass is implemented in `tree-ssa-loop-ivcanon.c'.
6890
6891     Induction variable optimizations.  This pass performs standard
6892     induction variable optimizations, including strength reduction,
6893     induction variable merging and induction variable elimination.
6894     The pass is implemented in `tree-ssa-loop-ivopts.c'.
6895
6896     Loop unswitching.  This pass moves the conditional jumps that are
6897     invariant out of the loops.  To achieve this, a duplicate of the
6898     loop is created for each possible outcome of conditional jump(s).
6899     The pass is implemented in `tree-ssa-loop-unswitch.c'.  This pass
6900     should eventually replace the RTL level loop unswitching in
6901     `loop-unswitch.c', but currently the RTL level pass is not
6902     completely redundant yet due to deficiencies in tree level alias
6903     analysis.
6904
6905     The optimizations also use various utility functions contained in
6906     `tree-ssa-loop-manip.c', `cfgloop.c', `cfgloopanal.c' and
6907     `cfgloopmanip.c'.
6908
6909     Vectorization.  This pass transforms loops to operate on vector
6910     types instead of scalar types.  Data parallelism across loop
6911     iterations is exploited to group data elements from consecutive
6912     iterations into a vector and operate on them in parallel.
6913     Depending on available target support the loop is conceptually
6914     unrolled by a factor `VF' (vectorization factor), which is the
6915     number of elements operated upon in parallel in each iteration,
6916     and the `VF' copies of each scalar operation are fused to form a
6917     vector operation.  Additional loop transformations such as peeling
6918     and versioning may take place to align the number of iterations,
6919     and to align the memory accesses in the loop.  The pass is
6920     implemented in `tree-vectorizer.c' (the main driver),
6921     `tree-vect-loop.c' and `tree-vect-loop-manip.c' (loop specific
6922     parts and general loop utilities), `tree-vect-slp' (loop-aware SLP
6923     functionality), `tree-vect-stmts.c' and `tree-vect-data-refs.c'.
6924     Analysis of data references is in `tree-data-ref.c'.
6925
6926     SLP Vectorization.  This pass performs vectorization of
6927     straight-line code. The pass is implemented in `tree-vectorizer.c'
6928     (the main driver), `tree-vect-slp.c', `tree-vect-stmts.c' and
6929     `tree-vect-data-refs.c'.
6930
6931     Autoparallelization.  This pass splits the loop iteration space to
6932     run into several threads.  The pass is implemented in
6933     `tree-parloops.c'.
6934
6935     Graphite is a loop transformation framework based on the polyhedral
6936     model.  Graphite stands for Gimple Represented as Polyhedra.  The
6937     internals of this infrastructure are documented in
6938     `http://gcc.gnu.org/wiki/Graphite'.  The passes working on this
6939     representation are implemented in the various `graphite-*' files.
6940
6941   * Tree level if-conversion for vectorizer
6942
6943     This pass applies if-conversion to simple loops to help vectorizer.
6944     We identify if convertible loops, if-convert statements and merge
6945     basic blocks in one big block.  The idea is to present loop in such
6946     form so that vectorizer can have one to one mapping between
6947     statements and available vector operations.  This pass is located
6948     in `tree-if-conv.c' and is described by `pass_if_conversion'.
6949
6950   * Conditional constant propagation
6951
6952     This pass relaxes a lattice of values in order to identify those
6953     that must be constant even in the presence of conditional branches.
6954     The pass is located in `tree-ssa-ccp.c' and is described by
6955     `pass_ccp'.
6956
6957     A related pass that works on memory loads and stores, and not just
6958     register values, is located in `tree-ssa-ccp.c' and described by
6959     `pass_store_ccp'.
6960
6961   * Conditional copy propagation
6962
6963     This is similar to constant propagation but the lattice of values
6964     is the "copy-of" relation.  It eliminates redundant copies from the
6965     code.  The pass is located in `tree-ssa-copy.c' and described by
6966     `pass_copy_prop'.
6967
6968     A related pass that works on memory copies, and not just register
6969     copies, is located in `tree-ssa-copy.c' and described by
6970     `pass_store_copy_prop'.
6971
6972   * Value range propagation
6973
6974     This transformation is similar to constant propagation but instead
6975     of propagating single constant values, it propagates known value
6976     ranges.  The implementation is based on Patterson's range
6977     propagation algorithm (Accurate Static Branch Prediction by Value
6978     Range Propagation, J. R. C. Patterson, PLDI '95).  In contrast to
6979     Patterson's algorithm, this implementation does not propagate
6980     branch probabilities nor it uses more than a single range per SSA
6981     name. This means that the current implementation cannot be used
6982     for branch prediction (though adapting it would not be difficult).
6983     The pass is located in `tree-vrp.c' and is described by `pass_vrp'.
6984
6985   * Folding built-in functions
6986
6987     This pass simplifies built-in functions, as applicable, with
6988     constant arguments or with inferable string lengths.  It is
6989     located in `tree-ssa-ccp.c' and is described by
6990     `pass_fold_builtins'.
6991
6992   * Split critical edges
6993
6994     This pass identifies critical edges and inserts empty basic blocks
6995     such that the edge is no longer critical.  The pass is located in
6996     `tree-cfg.c' and is described by `pass_split_crit_edges'.
6997
6998   * Control dependence dead code elimination
6999
7000     This pass is a stronger form of dead code elimination that can
7001     eliminate unnecessary control flow statements.   It is located in
7002     `tree-ssa-dce.c' and is described by `pass_cd_dce'.
7003
7004   * Tail call elimination
7005
7006     This pass identifies function calls that may be rewritten into
7007     jumps.  No code transformation is actually applied here, but the
7008     data and control flow problem is solved.  The code transformation
7009     requires target support, and so is delayed until RTL.  In the
7010     meantime `CALL_EXPR_TAILCALL' is set indicating the possibility.
7011     The pass is located in `tree-tailcall.c' and is described by
7012     `pass_tail_calls'.  The RTL transformation is handled by
7013     `fixup_tail_calls' in `calls.c'.
7014
7015   * Warn for function return without value
7016
7017     For non-void functions, this pass locates return statements that do
7018     not specify a value and issues a warning.  Such a statement may
7019     have been injected by falling off the end of the function.  This
7020     pass is run last so that we have as much time as possible to prove
7021     that the statement is not reachable.  It is located in
7022     `tree-cfg.c' and is described by `pass_warn_function_return'.
7023
7024   * Mudflap statement annotation
7025
7026     If mudflap is enabled, we rewrite some memory accesses with code to
7027     validate that the memory access is correct.  In particular,
7028     expressions involving pointer dereferences (`INDIRECT_REF',
7029     `ARRAY_REF', etc.) are replaced by code that checks the selected
7030     address range against the mudflap runtime's database of valid
7031     regions.  This check includes an inline lookup into a
7032     direct-mapped cache, based on shift/mask operations of the pointer
7033     value, with a fallback function call into the runtime.  The pass
7034     is located in `tree-mudflap.c' and is described by
7035     `pass_mudflap_2'.
7036
7037   * Leave static single assignment form
7038
7039     This pass rewrites the function such that it is in normal form.  At
7040     the same time, we eliminate as many single-use temporaries as
7041     possible, so the intermediate language is no longer GIMPLE, but
7042     GENERIC.  The pass is located in `tree-outof-ssa.c' and is
7043     described by `pass_del_ssa'.
7044
7045   * Merge PHI nodes that feed into one another
7046
7047     This is part of the CFG cleanup passes.  It attempts to join PHI
7048     nodes from a forwarder CFG block into another block with PHI
7049     nodes.  The pass is located in `tree-cfgcleanup.c' and is
7050     described by `pass_merge_phi'.
7051
7052   * Return value optimization
7053
7054     If a function always returns the same local variable, and that
7055     local variable is an aggregate type, then the variable is replaced
7056     with the return value for the function (i.e., the function's
7057     DECL_RESULT).  This is equivalent to the C++ named return value
7058     optimization applied to GIMPLE.  The pass is located in
7059     `tree-nrv.c' and is described by `pass_nrv'.
7060
7061   * Return slot optimization
7062
7063     If a function returns a memory object and is called as `var =
7064     foo()', this pass tries to change the call so that the address of
7065     `var' is sent to the caller to avoid an extra memory copy.  This
7066     pass is located in `tree-nrv.c' and is described by
7067     `pass_return_slot'.
7068
7069   * Optimize calls to `__builtin_object_size'
7070
7071     This is a propagation pass similar to CCP that tries to remove
7072     calls to `__builtin_object_size' when the size of the object can be
7073     computed at compile-time.  This pass is located in
7074     `tree-object-size.c' and is described by `pass_object_sizes'.
7075
7076   * Loop invariant motion
7077
7078     This pass removes expensive loop-invariant computations out of
7079     loops.  The pass is located in `tree-ssa-loop.c' and described by
7080     `pass_lim'.
7081
7082   * Loop nest optimizations
7083
7084     This is a family of loop transformations that works on loop nests.
7085     It includes loop interchange, scaling, skewing and reversal and
7086     they are all geared to the optimization of data locality in array
7087     traversals and the removal of dependencies that hamper
7088     optimizations such as loop parallelization and vectorization.  The
7089     pass is located in `tree-loop-linear.c' and described by
7090     `pass_linear_transform'.
7091
7092   * Removal of empty loops
7093
7094     This pass removes loops with no code in them.  The pass is located
7095     in `tree-ssa-loop-ivcanon.c' and described by `pass_empty_loop'.
7096
7097   * Unrolling of small loops
7098
7099     This pass completely unrolls loops with few iterations.  The pass
7100     is located in `tree-ssa-loop-ivcanon.c' and described by
7101     `pass_complete_unroll'.
7102
7103   * Predictive commoning
7104
7105     This pass makes the code reuse the computations from the previous
7106     iterations of the loops, especially loads and stores to memory.
7107     It does so by storing the values of these computations to a bank
7108     of temporary variables that are rotated at the end of loop.  To
7109     avoid the need for this rotation, the loop is then unrolled and
7110     the copies of the loop body are rewritten to use the appropriate
7111     version of the temporary variable.  This pass is located in
7112     `tree-predcom.c' and described by `pass_predcom'.
7113
7114   * Array prefetching
7115
7116     This pass issues prefetch instructions for array references inside
7117     loops.  The pass is located in `tree-ssa-loop-prefetch.c' and
7118     described by `pass_loop_prefetch'.
7119
7120   * Reassociation
7121
7122     This pass rewrites arithmetic expressions to enable optimizations
7123     that operate on them, like redundancy elimination and
7124     vectorization.  The pass is located in `tree-ssa-reassoc.c' and
7125     described by `pass_reassoc'.
7126
7127   * Optimization of `stdarg' functions
7128
7129     This pass tries to avoid the saving of register arguments into the
7130     stack on entry to `stdarg' functions.  If the function doesn't use
7131     any `va_start' macros, no registers need to be saved.  If
7132     `va_start' macros are used, the `va_list' variables don't escape
7133     the function, it is only necessary to save registers that will be
7134     used in `va_arg' macros.  For instance, if `va_arg' is only used
7135     with integral types in the function, floating point registers
7136     don't need to be saved.  This pass is located in `tree-stdarg.c'
7137     and described by `pass_stdarg'.
7138
7139
7140
7141File: gccint.info,  Node: RTL passes,  Prev: Tree SSA passes,  Up: Passes
7142
71439.5 RTL passes
7144==============
7145
7146The following briefly describes the RTL generation and optimization
7147passes that are run after the Tree optimization passes.
7148
7149   * RTL generation
7150
7151     The source files for RTL generation include `stmt.c', `calls.c',
7152     `expr.c', `explow.c', `expmed.c', `function.c', `optabs.c' and
7153     `emit-rtl.c'.  Also, the file `insn-emit.c', generated from the
7154     machine description by the program `genemit', is used in this
7155     pass.  The header file `expr.h' is used for communication within
7156     this pass.
7157
7158     The header files `insn-flags.h' and `insn-codes.h', generated from
7159     the machine description by the programs `genflags' and `gencodes',
7160     tell this pass which standard names are available for use and
7161     which patterns correspond to them.
7162
7163   * Generation of exception landing pads
7164
7165     This pass generates the glue that handles communication between the
7166     exception handling library routines and the exception handlers
7167     within the function.  Entry points in the function that are
7168     invoked by the exception handling library are called "landing
7169     pads".  The code for this pass is located in `except.c'.
7170
7171   * Control flow graph cleanup
7172
7173     This pass removes unreachable code, simplifies jumps to next,
7174     jumps to jump, jumps across jumps, etc.  The pass is run multiple
7175     times.  For historical reasons, it is occasionally referred to as
7176     the "jump optimization pass".  The bulk of the code for this pass
7177     is in `cfgcleanup.c', and there are support routines in `cfgrtl.c'
7178     and `jump.c'.
7179
7180   * Forward propagation of single-def values
7181
7182     This pass attempts to remove redundant computation by substituting
7183     variables that come from a single definition, and seeing if the
7184     result can be simplified.  It performs copy propagation and
7185     addressing mode selection.  The pass is run twice, with values
7186     being propagated into loops only on the second run.  The code is
7187     located in `fwprop.c'.
7188
7189   * Common subexpression elimination
7190
7191     This pass removes redundant computation within basic blocks, and
7192     optimizes addressing modes based on cost.  The pass is run twice.
7193     The code for this pass is located in `cse.c'.
7194
7195   * Global common subexpression elimination
7196
7197     This pass performs two different types of GCSE  depending on
7198     whether you are optimizing for size or not (LCM based GCSE tends
7199     to increase code size for a gain in speed, while Morel-Renvoise
7200     based GCSE does not).  When optimizing for size, GCSE is done
7201     using Morel-Renvoise Partial Redundancy Elimination, with the
7202     exception that it does not try to move invariants out of
7203     loops--that is left to  the loop optimization pass.  If MR PRE
7204     GCSE is done, code hoisting (aka unification) is also done, as
7205     well as load motion.  If you are optimizing for speed, LCM (lazy
7206     code motion) based GCSE is done.  LCM is based on the work of
7207     Knoop, Ruthing, and Steffen.  LCM based GCSE also does loop
7208     invariant code motion.  We also perform load and store motion when
7209     optimizing for speed.  Regardless of which type of GCSE is used,
7210     the GCSE pass also performs global constant and  copy propagation.
7211     The source file for this pass is `gcse.c', and the LCM routines
7212     are in `lcm.c'.
7213
7214   * Loop optimization
7215
7216     This pass performs several loop related optimizations.  The source
7217     files `cfgloopanal.c' and `cfgloopmanip.c' contain generic loop
7218     analysis and manipulation code.  Initialization and finalization
7219     of loop structures is handled by `loop-init.c'.  A loop invariant
7220     motion pass is implemented in `loop-invariant.c'.  Basic block
7221     level optimizations--unrolling, peeling and unswitching loops--
7222     are implemented in `loop-unswitch.c' and `loop-unroll.c'.
7223     Replacing of the exit condition of loops by special
7224     machine-dependent instructions is handled by `loop-doloop.c'.
7225
7226   * Jump bypassing
7227
7228     This pass is an aggressive form of GCSE that transforms the control
7229     flow graph of a function by propagating constants into conditional
7230     branch instructions.  The source file for this pass is `gcse.c'.
7231
7232   * If conversion
7233
7234     This pass attempts to replace conditional branches and surrounding
7235     assignments with arithmetic, boolean value producing comparison
7236     instructions, and conditional move instructions.  In the very last
7237     invocation after reload/LRA, it will generate predicated
7238     instructions when supported by the target.  The code is located in
7239     `ifcvt.c'.
7240
7241   * Web construction
7242
7243     This pass splits independent uses of each pseudo-register.  This
7244     can improve effect of the other transformation, such as CSE or
7245     register allocation.  The code for this pass is located in `web.c'.
7246
7247   * Instruction combination
7248
7249     This pass attempts to combine groups of two or three instructions
7250     that are related by data flow into single instructions.  It
7251     combines the RTL expressions for the instructions by substitution,
7252     simplifies the result using algebra, and then attempts to match
7253     the result against the machine description.  The code is located
7254     in `combine.c'.
7255
7256   * Register movement
7257
7258     This pass looks for cases where matching constraints would force an
7259     instruction to need a reload, and this reload would be a
7260     register-to-register move.  It then attempts to change the
7261     registers used by the instruction to avoid the move instruction.
7262     The code is located in `regmove.c'.
7263
7264   * Mode switching optimization
7265
7266     This pass looks for instructions that require the processor to be
7267     in a specific "mode" and minimizes the number of mode changes
7268     required to satisfy all users.  What these modes are, and what
7269     they apply to are completely target-specific.  The code for this
7270     pass is located in `mode-switching.c'.
7271
7272   * Modulo scheduling
7273
7274     This pass looks at innermost loops and reorders their instructions
7275     by overlapping different iterations.  Modulo scheduling is
7276     performed immediately before instruction scheduling.  The code for
7277     this pass is located in `modulo-sched.c'.
7278
7279   * Instruction scheduling
7280
7281     This pass looks for instructions whose output will not be
7282     available by the time that it is used in subsequent instructions.
7283     Memory loads and floating point instructions often have this
7284     behavior on RISC machines.  It re-orders instructions within a
7285     basic block to try to separate the definition and use of items
7286     that otherwise would cause pipeline stalls.  This pass is
7287     performed twice, before and after register allocation.  The code
7288     for this pass is located in `haifa-sched.c', `sched-deps.c',
7289     `sched-ebb.c', `sched-rgn.c' and `sched-vis.c'.
7290
7291   * Register allocation
7292
7293     These passes make sure that all occurrences of pseudo registers are
7294     eliminated, either by allocating them to a hard register, replacing
7295     them by an equivalent expression (e.g. a constant) or by placing
7296     them on the stack.  This is done in several subpasses:
7297
7298        * Register move optimizations.  This pass makes some simple RTL
7299          code transformations which improve the subsequent register
7300          allocation.  The source file is `regmove.c'.
7301
7302        * The integrated register allocator (IRA).  It is called
7303          integrated because coalescing, register live range splitting,
7304          and hard register preferencing are done on-the-fly during
7305          coloring.  It also has better integration with the reload/LRA
7306          pass.  Pseudo-registers spilled by the allocator or the
7307          reload/LRA have still a chance to get hard-registers if the
7308          reload/LRA evicts some pseudo-registers from hard-registers.
7309          The allocator helps to choose better pseudos for spilling
7310          based on their live ranges and to coalesce stack slots
7311          allocated for the spilled pseudo-registers.  IRA is a regional
7312          register allocator which is transformed into Chaitin-Briggs
7313          allocator if there is one region.  By default, IRA chooses
7314          regions using register pressure but the user can force it to
7315          use one region or regions corresponding to all loops.
7316
7317          Source files of the allocator are `ira.c', `ira-build.c',
7318          `ira-costs.c', `ira-conflicts.c', `ira-color.c',
7319          `ira-emit.c', `ira-lives', plus header files `ira.h' and
7320          `ira-int.h' used for the communication between the allocator
7321          and the rest of the compiler and between the IRA files.
7322
7323        * Reloading.  This pass renumbers pseudo registers with the
7324          hardware registers numbers they were allocated.  Pseudo
7325          registers that did not get hard registers are replaced with
7326          stack slots.  Then it finds instructions that are invalid
7327          because a value has failed to end up in a register, or has
7328          ended up in a register of the wrong kind.  It fixes up these
7329          instructions by reloading the problematical values
7330          temporarily into registers.  Additional instructions are
7331          generated to do the copying.
7332
7333          The reload pass also optionally eliminates the frame pointer
7334          and inserts instructions to save and restore call-clobbered
7335          registers around calls.
7336
7337          Source files are `reload.c' and `reload1.c', plus the header
7338          `reload.h' used for communication between them.
7339
7340        * This pass is a modern replacement of the reload pass.  Source
7341          files are `lra.c', `lra-assign.c', `lra-coalesce.c',
7342          `lra-constraints.c', `lra-eliminations.c', `lra-equivs.c',
7343          `lra-lives.c', `lra-saves.c', `lra-spills.c', the header
7344          `lra-int.h' used for communication between them, and the
7345          header `lra.h' used for communication between LRA and the
7346          rest of compiler.
7347
7348          Unlike the reload pass, intermediate LRA decisions are
7349          reflected in RTL as much as possible.  This reduces the
7350          number of target-dependent macros and hooks, leaving
7351          instruction constraints as the primary source of control.
7352
7353          LRA is run on targets for which TARGET_LRA_P returns true.
7354
7355   * Basic block reordering
7356
7357     This pass implements profile guided code positioning.  If profile
7358     information is not available, various types of static analysis are
7359     performed to make the predictions normally coming from the profile
7360     feedback (IE execution frequency, branch probability, etc).  It is
7361     implemented in the file `bb-reorder.c', and the various prediction
7362     routines are in `predict.c'.
7363
7364   * Variable tracking
7365
7366     This pass computes where the variables are stored at each position
7367     in code and generates notes describing the variable locations to
7368     RTL code.  The location lists are then generated according to these
7369     notes to debug information if the debugging information format
7370     supports location lists.  The code is located in `var-tracking.c'.
7371
7372   * Delayed branch scheduling
7373
7374     This optional pass attempts to find instructions that can go into
7375     the delay slots of other instructions, usually jumps and calls.
7376     The code for this pass is located in `reorg.c'.
7377
7378   * Branch shortening
7379
7380     On many RISC machines, branch instructions have a limited range.
7381     Thus, longer sequences of instructions must be used for long
7382     branches.  In this pass, the compiler figures out what how far
7383     each instruction will be from each other instruction, and
7384     therefore whether the usual instructions, or the longer sequences,
7385     must be used for each branch.  The code for this pass is located
7386     in `final.c'.
7387
7388   * Register-to-stack conversion
7389
7390     Conversion from usage of some hard registers to usage of a register
7391     stack may be done at this point.  Currently, this is supported only
7392     for the floating-point registers of the Intel 80387 coprocessor.
7393     The code for this pass is located in `reg-stack.c'.
7394
7395   * Final
7396
7397     This pass outputs the assembler code for the function.  The source
7398     files are `final.c' plus `insn-output.c'; the latter is generated
7399     automatically from the machine description by the tool `genoutput'.
7400     The header file `conditions.h' is used for communication between
7401     these files.  If mudflap is enabled, the queue of deferred
7402     declarations and any addressed constants (e.g., string literals)
7403     is processed by `mudflap_finish_file' into a synthetic constructor
7404     function containing calls into the mudflap runtime.
7405
7406   * Debugging information output
7407
7408     This is run after final because it must output the stack slot
7409     offsets for pseudo registers that did not get hard registers.
7410     Source files are `dbxout.c' for DBX symbol table format,
7411     `sdbout.c' for SDB symbol table format, `dwarfout.c' for DWARF
7412     symbol table format, files `dwarf2out.c' and `dwarf2asm.c' for
7413     DWARF2 symbol table format, and `vmsdbgout.c' for VMS debug symbol
7414     table format.
7415
7416
7417
7418File: gccint.info,  Node: RTL,  Next: Control Flow,  Prev: Tree SSA,  Up: Top
7419
742010 RTL Representation
7421*********************
7422
7423The last part of the compiler work is done on a low-level intermediate
7424representation called Register Transfer Language.  In this language, the
7425instructions to be output are described, pretty much one by one, in an
7426algebraic form that describes what the instruction does.
7427
7428 RTL is inspired by Lisp lists.  It has both an internal form, made up
7429of structures that point at other structures, and a textual form that
7430is used in the machine description and in printed debugging dumps.  The
7431textual form uses nested parentheses to indicate the pointers in the
7432internal form.
7433
7434* Menu:
7435
7436* RTL Objects::       Expressions vs vectors vs strings vs integers.
7437* RTL Classes::       Categories of RTL expression objects, and their structure.
7438* Accessors::         Macros to access expression operands or vector elts.
7439* Special Accessors:: Macros to access specific annotations on RTL.
7440* Flags::             Other flags in an RTL expression.
7441* Machine Modes::     Describing the size and format of a datum.
7442* Constants::         Expressions with constant values.
7443* Regs and Memory::   Expressions representing register contents or memory.
7444* Arithmetic::        Expressions representing arithmetic on other expressions.
7445* Comparisons::       Expressions representing comparison of expressions.
7446* Bit-Fields::        Expressions representing bit-fields in memory or reg.
7447* Vector Operations:: Expressions involving vector datatypes.
7448* Conversions::       Extending, truncating, floating or fixing.
7449* RTL Declarations::  Declaring volatility, constancy, etc.
7450* Side Effects::      Expressions for storing in registers, etc.
7451* Incdec::            Embedded side-effects for autoincrement addressing.
7452* Assembler::         Representing `asm' with operands.
7453* Debug Information:: Expressions representing debugging information.
7454* Insns::             Expression types for entire insns.
7455* Calls::             RTL representation of function call insns.
7456* Sharing::           Some expressions are unique; others *must* be copied.
7457* Reading RTL::       Reading textual RTL from a file.
7458
7459
7460File: gccint.info,  Node: RTL Objects,  Next: RTL Classes,  Up: RTL
7461
746210.1 RTL Object Types
7463=====================
7464
7465RTL uses five kinds of objects: expressions, integers, wide integers,
7466strings and vectors.  Expressions are the most important ones.  An RTL
7467expression ("RTX", for short) is a C structure, but it is usually
7468referred to with a pointer; a type that is given the typedef name `rtx'.
7469
7470 An integer is simply an `int'; their written form uses decimal digits.
7471A wide integer is an integral object whose type is `HOST_WIDE_INT';
7472their written form uses decimal digits.
7473
7474 A string is a sequence of characters.  In core it is represented as a
7475`char *' in usual C fashion, and it is written in C syntax as well.
7476However, strings in RTL may never be null.  If you write an empty
7477string in a machine description, it is represented in core as a null
7478pointer rather than as a pointer to a null character.  In certain
7479contexts, these null pointers instead of strings are valid.  Within RTL
7480code, strings are most commonly found inside `symbol_ref' expressions,
7481but they appear in other contexts in the RTL expressions that make up
7482machine descriptions.
7483
7484 In a machine description, strings are normally written with double
7485quotes, as you would in C.  However, strings in machine descriptions may
7486extend over many lines, which is invalid C, and adjacent string
7487constants are not concatenated as they are in C.  Any string constant
7488may be surrounded with a single set of parentheses.  Sometimes this
7489makes the machine description easier to read.
7490
7491 There is also a special syntax for strings, which can be useful when C
7492code is embedded in a machine description.  Wherever a string can
7493appear, it is also valid to write a C-style brace block.  The entire
7494brace block, including the outermost pair of braces, is considered to be
7495the string constant.  Double quote characters inside the braces are not
7496special.  Therefore, if you write string constants in the C code, you
7497need not escape each quote character with a backslash.
7498
7499 A vector contains an arbitrary number of pointers to expressions.  The
7500number of elements in the vector is explicitly present in the vector.
7501The written form of a vector consists of square brackets (`[...]')
7502surrounding the elements, in sequence and with whitespace separating
7503them.  Vectors of length zero are not created; null pointers are used
7504instead.
7505
7506 Expressions are classified by "expression codes" (also called RTX
7507codes).  The expression code is a name defined in `rtl.def', which is
7508also (in uppercase) a C enumeration constant.  The possible expression
7509codes and their meanings are machine-independent.  The code of an RTX
7510can be extracted with the macro `GET_CODE (X)' and altered with
7511`PUT_CODE (X, NEWCODE)'.
7512
7513 The expression code determines how many operands the expression
7514contains, and what kinds of objects they are.  In RTL, unlike Lisp, you
7515cannot tell by looking at an operand what kind of object it is.
7516Instead, you must know from its context--from the expression code of
7517the containing expression.  For example, in an expression of code
7518`subreg', the first operand is to be regarded as an expression and the
7519second operand as an integer.  In an expression of code `plus', there
7520are two operands, both of which are to be regarded as expressions.  In
7521a `symbol_ref' expression, there is one operand, which is to be
7522regarded as a string.
7523
7524 Expressions are written as parentheses containing the name of the
7525expression type, its flags and machine mode if any, and then the
7526operands of the expression (separated by spaces).
7527
7528 Expression code names in the `md' file are written in lowercase, but
7529when they appear in C code they are written in uppercase.  In this
7530manual, they are shown as follows: `const_int'.
7531
7532 In a few contexts a null pointer is valid where an expression is
7533normally wanted.  The written form of this is `(nil)'.
7534
7535
7536File: gccint.info,  Node: RTL Classes,  Next: Accessors,  Prev: RTL Objects,  Up: RTL
7537
753810.2 RTL Classes and Formats
7539============================
7540
7541The various expression codes are divided into several "classes", which
7542are represented by single characters.  You can determine the class of
7543an RTX code with the macro `GET_RTX_CLASS (CODE)'.  Currently,
7544`rtl.def' defines these classes:
7545
7546`RTX_OBJ'
7547     An RTX code that represents an actual object, such as a register
7548     (`REG') or a memory location (`MEM', `SYMBOL_REF').  `LO_SUM') is
7549     also included; instead, `SUBREG' and `STRICT_LOW_PART' are not in
7550     this class, but in class `x'.
7551
7552`RTX_CONST_OBJ'
7553     An RTX code that represents a constant object.  `HIGH' is also
7554     included in this class.
7555
7556`RTX_COMPARE'
7557     An RTX code for a non-symmetric comparison, such as `GEU' or `LT'.
7558
7559`RTX_COMM_COMPARE'
7560     An RTX code for a symmetric (commutative) comparison, such as `EQ'
7561     or `ORDERED'.
7562
7563`RTX_UNARY'
7564     An RTX code for a unary arithmetic operation, such as `NEG',
7565     `NOT', or `ABS'.  This category also includes value extension
7566     (sign or zero) and conversions between integer and floating point.
7567
7568`RTX_COMM_ARITH'
7569     An RTX code for a commutative binary operation, such as `PLUS' or
7570     `AND'.  `NE' and `EQ' are comparisons, so they have class `<'.
7571
7572`RTX_BIN_ARITH'
7573     An RTX code for a non-commutative binary operation, such as
7574     `MINUS', `DIV', or `ASHIFTRT'.
7575
7576`RTX_BITFIELD_OPS'
7577     An RTX code for a bit-field operation.  Currently only
7578     `ZERO_EXTRACT' and `SIGN_EXTRACT'.  These have three inputs and
7579     are lvalues (so they can be used for insertion as well).  *Note
7580     Bit-Fields::.
7581
7582`RTX_TERNARY'
7583     An RTX code for other three input operations.  Currently only
7584     `IF_THEN_ELSE',  `VEC_MERGE', `SIGN_EXTRACT', `ZERO_EXTRACT', and
7585     `FMA'.
7586
7587`RTX_INSN'
7588     An RTX code for an entire instruction:  `INSN', `JUMP_INSN', and
7589     `CALL_INSN'.  *Note Insns::.
7590
7591`RTX_MATCH'
7592     An RTX code for something that matches in insns, such as
7593     `MATCH_DUP'.  These only occur in machine descriptions.
7594
7595`RTX_AUTOINC'
7596     An RTX code for an auto-increment addressing mode, such as
7597     `POST_INC'.
7598
7599`RTX_EXTRA'
7600     All other RTX codes.  This category includes the remaining codes
7601     used only in machine descriptions (`DEFINE_*', etc.).  It also
7602     includes all the codes describing side effects (`SET', `USE',
7603     `CLOBBER', etc.) and the non-insns that may appear on an insn
7604     chain, such as `NOTE', `BARRIER', and `CODE_LABEL'.  `SUBREG' is
7605     also part of this class.
7606
7607 For each expression code, `rtl.def' specifies the number of contained
7608objects and their kinds using a sequence of characters called the
7609"format" of the expression code.  For example, the format of `subreg'
7610is `ei'.
7611
7612 These are the most commonly used format characters:
7613
7614`e'
7615     An expression (actually a pointer to an expression).
7616
7617`i'
7618     An integer.
7619
7620`w'
7621     A wide integer.
7622
7623`s'
7624     A string.
7625
7626`E'
7627     A vector of expressions.
7628
7629 A few other format characters are used occasionally:
7630
7631`u'
7632     `u' is equivalent to `e' except that it is printed differently in
7633     debugging dumps.  It is used for pointers to insns.
7634
7635`n'
7636     `n' is equivalent to `i' except that it is printed differently in
7637     debugging dumps.  It is used for the line number or code number of
7638     a `note' insn.
7639
7640`S'
7641     `S' indicates a string which is optional.  In the RTL objects in
7642     core, `S' is equivalent to `s', but when the object is read, from
7643     an `md' file, the string value of this operand may be omitted.  An
7644     omitted string is taken to be the null string.
7645
7646`V'
7647     `V' indicates a vector which is optional.  In the RTL objects in
7648     core, `V' is equivalent to `E', but when the object is read from
7649     an `md' file, the vector value of this operand may be omitted.  An
7650     omitted vector is effectively the same as a vector of no elements.
7651
7652`B'
7653     `B' indicates a pointer to basic block structure.
7654
7655`0'
7656     `0' means a slot whose contents do not fit any normal category.
7657     `0' slots are not printed at all in dumps, and are often used in
7658     special ways by small parts of the compiler.
7659
7660 There are macros to get the number of operands and the format of an
7661expression code:
7662
7663`GET_RTX_LENGTH (CODE)'
7664     Number of operands of an RTX of code CODE.
7665
7666`GET_RTX_FORMAT (CODE)'
7667     The format of an RTX of code CODE, as a C string.
7668
7669 Some classes of RTX codes always have the same format.  For example, it
7670is safe to assume that all comparison operations have format `ee'.
7671
7672`1'
7673     All codes of this class have format `e'.
7674
7675`<'
7676`c'
7677`2'
7678     All codes of these classes have format `ee'.
7679
7680`b'
7681`3'
7682     All codes of these classes have format `eee'.
7683
7684`i'
7685     All codes of this class have formats that begin with `iuueiee'.
7686     *Note Insns::.  Note that not all RTL objects linked onto an insn
7687     chain are of class `i'.
7688
7689`o'
7690`m'
7691`x'
7692     You can make no assumptions about the format of these codes.
7693
7694
7695File: gccint.info,  Node: Accessors,  Next: Special Accessors,  Prev: RTL Classes,  Up: RTL
7696
769710.3 Access to Operands
7698=======================
7699
7700Operands of expressions are accessed using the macros `XEXP', `XINT',
7701`XWINT' and `XSTR'.  Each of these macros takes two arguments: an
7702expression-pointer (RTX) and an operand number (counting from zero).
7703Thus,
7704
7705     XEXP (X, 2)
7706
7707accesses operand 2 of expression X, as an expression.
7708
7709     XINT (X, 2)
7710
7711accesses the same operand as an integer.  `XSTR', used in the same
7712fashion, would access it as a string.
7713
7714 Any operand can be accessed as an integer, as an expression or as a
7715string.  You must choose the correct method of access for the kind of
7716value actually stored in the operand.  You would do this based on the
7717expression code of the containing expression.  That is also how you
7718would know how many operands there are.
7719
7720 For example, if X is a `subreg' expression, you know that it has two
7721operands which can be correctly accessed as `XEXP (X, 0)' and `XINT (X,
77221)'.  If you did `XINT (X, 0)', you would get the address of the
7723expression operand but cast as an integer; that might occasionally be
7724useful, but it would be cleaner to write `(int) XEXP (X, 0)'.  `XEXP
7725(X, 1)' would also compile without error, and would return the second,
7726integer operand cast as an expression pointer, which would probably
7727result in a crash when accessed.  Nothing stops you from writing `XEXP
7728(X, 28)' either, but this will access memory past the end of the
7729expression with unpredictable results.
7730
7731 Access to operands which are vectors is more complicated.  You can use
7732the macro `XVEC' to get the vector-pointer itself, or the macros
7733`XVECEXP' and `XVECLEN' to access the elements and length of a vector.
7734
7735`XVEC (EXP, IDX)'
7736     Access the vector-pointer which is operand number IDX in EXP.
7737
7738`XVECLEN (EXP, IDX)'
7739     Access the length (number of elements) in the vector which is in
7740     operand number IDX in EXP.  This value is an `int'.
7741
7742`XVECEXP (EXP, IDX, ELTNUM)'
7743     Access element number ELTNUM in the vector which is in operand
7744     number IDX in EXP.  This value is an RTX.
7745
7746     It is up to you to make sure that ELTNUM is not negative and is
7747     less than `XVECLEN (EXP, IDX)'.
7748
7749 All the macros defined in this section expand into lvalues and
7750therefore can be used to assign the operands, lengths and vector
7751elements as well as to access them.
7752
7753
7754File: gccint.info,  Node: Special Accessors,  Next: Flags,  Prev: Accessors,  Up: RTL
7755
775610.4 Access to Special Operands
7757===============================
7758
7759Some RTL nodes have special annotations associated with them.
7760
7761`MEM'
7762
7763    `MEM_ALIAS_SET (X)'
7764          If 0, X is not in any alias set, and may alias anything.
7765          Otherwise, X can only alias `MEM's in a conflicting alias
7766          set.  This value is set in a language-dependent manner in the
7767          front-end, and should not be altered in the back-end.  In
7768          some front-ends, these numbers may correspond in some way to
7769          types, or other language-level entities, but they need not,
7770          and the back-end makes no such assumptions.  These set
7771          numbers are tested with `alias_sets_conflict_p'.
7772
7773    `MEM_EXPR (X)'
7774          If this register is known to hold the value of some user-level
7775          declaration, this is that tree node.  It may also be a
7776          `COMPONENT_REF', in which case this is some field reference,
7777          and `TREE_OPERAND (X, 0)' contains the declaration, or
7778          another `COMPONENT_REF', or null if there is no compile-time
7779          object associated with the reference.
7780
7781    `MEM_OFFSET_KNOWN_P (X)'
7782          True if the offset of the memory reference from `MEM_EXPR' is
7783          known.  `MEM_OFFSET (X)' provides the offset if so.
7784
7785    `MEM_OFFSET (X)'
7786          The offset from the start of `MEM_EXPR'.  The value is only
7787          valid if `MEM_OFFSET_KNOWN_P (X)' is true.
7788
7789    `MEM_SIZE_KNOWN_P (X)'
7790          True if the size of the memory reference is known.  `MEM_SIZE
7791          (X)' provides its size if so.
7792
7793    `MEM_SIZE (X)'
7794          The size in bytes of the memory reference.  This is mostly
7795          relevant for `BLKmode' references as otherwise the size is
7796          implied by the mode.  The value is only valid if
7797          `MEM_SIZE_KNOWN_P (X)' is true.
7798
7799    `MEM_ALIGN (X)'
7800          The known alignment in bits of the memory reference.
7801
7802    `MEM_ADDR_SPACE (X)'
7803          The address space of the memory reference.  This will
7804          commonly be zero for the generic address space.
7805
7806`REG'
7807
7808    `ORIGINAL_REGNO (X)'
7809          This field holds the number the register "originally" had;
7810          for a pseudo register turned into a hard reg this will hold
7811          the old pseudo register number.
7812
7813    `REG_EXPR (X)'
7814          If this register is known to hold the value of some user-level
7815          declaration, this is that tree node.
7816
7817    `REG_OFFSET (X)'
7818          If this register is known to hold the value of some user-level
7819          declaration, this is the offset into that logical storage.
7820
7821`SYMBOL_REF'
7822
7823    `SYMBOL_REF_DECL (X)'
7824          If the `symbol_ref' X was created for a `VAR_DECL' or a
7825          `FUNCTION_DECL', that tree is recorded here.  If this value is
7826          null, then X was created by back end code generation routines,
7827          and there is no associated front end symbol table entry.
7828
7829          `SYMBOL_REF_DECL' may also point to a tree of class `'c'',
7830          that is, some sort of constant.  In this case, the
7831          `symbol_ref' is an entry in the per-file constant pool;
7832          again, there is no associated front end symbol table entry.
7833
7834    `SYMBOL_REF_CONSTANT (X)'
7835          If `CONSTANT_POOL_ADDRESS_P (X)' is true, this is the constant
7836          pool entry for X.  It is null otherwise.
7837
7838    `SYMBOL_REF_DATA (X)'
7839          A field of opaque type used to store `SYMBOL_REF_DECL' or
7840          `SYMBOL_REF_CONSTANT'.
7841
7842    `SYMBOL_REF_FLAGS (X)'
7843          In a `symbol_ref', this is used to communicate various
7844          predicates about the symbol.  Some of these are common enough
7845          to be computed by common code, some are specific to the
7846          target.  The common bits are:
7847
7848         `SYMBOL_FLAG_FUNCTION'
7849               Set if the symbol refers to a function.
7850
7851         `SYMBOL_FLAG_LOCAL'
7852               Set if the symbol is local to this "module".  See
7853               `TARGET_BINDS_LOCAL_P'.
7854
7855         `SYMBOL_FLAG_EXTERNAL'
7856               Set if this symbol is not defined in this translation
7857               unit.  Note that this is not the inverse of
7858               `SYMBOL_FLAG_LOCAL'.
7859
7860         `SYMBOL_FLAG_SMALL'
7861               Set if the symbol is located in the small data section.
7862               See `TARGET_IN_SMALL_DATA_P'.
7863
7864         `SYMBOL_REF_TLS_MODEL (X)'
7865               This is a multi-bit field accessor that returns the
7866               `tls_model' to be used for a thread-local storage
7867               symbol.  It returns zero for non-thread-local symbols.
7868
7869         `SYMBOL_FLAG_HAS_BLOCK_INFO'
7870               Set if the symbol has `SYMBOL_REF_BLOCK' and
7871               `SYMBOL_REF_BLOCK_OFFSET' fields.
7872
7873         `SYMBOL_FLAG_ANCHOR'
7874               Set if the symbol is used as a section anchor.  "Section
7875               anchors" are symbols that have a known position within
7876               an `object_block' and that can be used to access nearby
7877               members of that block.  They are used to implement
7878               `-fsection-anchors'.
7879
7880               If this flag is set, then `SYMBOL_FLAG_HAS_BLOCK_INFO'
7881               will be too.
7882
7883          Bits beginning with `SYMBOL_FLAG_MACH_DEP' are available for
7884          the target's use.
7885
7886`SYMBOL_REF_BLOCK (X)'
7887     If `SYMBOL_REF_HAS_BLOCK_INFO_P (X)', this is the `object_block'
7888     structure to which the symbol belongs, or `NULL' if it has not
7889     been assigned a block.
7890
7891`SYMBOL_REF_BLOCK_OFFSET (X)'
7892     If `SYMBOL_REF_HAS_BLOCK_INFO_P (X)', this is the offset of X from
7893     the first object in `SYMBOL_REF_BLOCK (X)'.  The value is negative
7894     if X has not yet been assigned to a block, or it has not been
7895     given an offset within that block.
7896
7897
7898File: gccint.info,  Node: Flags,  Next: Machine Modes,  Prev: Special Accessors,  Up: RTL
7899
790010.5 Flags in an RTL Expression
7901===============================
7902
7903RTL expressions contain several flags (one-bit bit-fields) that are
7904used in certain types of expression.  Most often they are accessed with
7905the following macros, which expand into lvalues.
7906
7907`CONSTANT_POOL_ADDRESS_P (X)'
7908     Nonzero in a `symbol_ref' if it refers to part of the current
7909     function's constant pool.  For most targets these addresses are in
7910     a `.rodata' section entirely separate from the function, but for
7911     some targets the addresses are close to the beginning of the
7912     function.  In either case GCC assumes these addresses can be
7913     addressed directly, perhaps with the help of base registers.
7914     Stored in the `unchanging' field and printed as `/u'.
7915
7916`RTL_CONST_CALL_P (X)'
7917     In a `call_insn' indicates that the insn represents a call to a
7918     const function.  Stored in the `unchanging' field and printed as
7919     `/u'.
7920
7921`RTL_PURE_CALL_P (X)'
7922     In a `call_insn' indicates that the insn represents a call to a
7923     pure function.  Stored in the `return_val' field and printed as
7924     `/i'.
7925
7926`RTL_CONST_OR_PURE_CALL_P (X)'
7927     In a `call_insn', true if `RTL_CONST_CALL_P' or `RTL_PURE_CALL_P'
7928     is true.
7929
7930`RTL_LOOPING_CONST_OR_PURE_CALL_P (X)'
7931     In a `call_insn' indicates that the insn represents a possibly
7932     infinite looping call to a const or pure function.  Stored in the
7933     `call' field and printed as `/c'.  Only true if one of
7934     `RTL_CONST_CALL_P' or `RTL_PURE_CALL_P' is true.
7935
7936`INSN_ANNULLED_BRANCH_P (X)'
7937     In a `jump_insn', `call_insn', or `insn' indicates that the branch
7938     is an annulling one.  See the discussion under `sequence' below.
7939     Stored in the `unchanging' field and printed as `/u'.
7940
7941`INSN_DELETED_P (X)'
7942     In an `insn', `call_insn', `jump_insn', `code_label', `barrier',
7943     or `note', nonzero if the insn has been deleted.  Stored in the
7944     `volatil' field and printed as `/v'.
7945
7946`INSN_FROM_TARGET_P (X)'
7947     In an `insn' or `jump_insn' or `call_insn' in a delay slot of a
7948     branch, indicates that the insn is from the target of the branch.
7949     If the branch insn has `INSN_ANNULLED_BRANCH_P' set, this insn
7950     will only be executed if the branch is taken.  For annulled
7951     branches with `INSN_FROM_TARGET_P' clear, the insn will be
7952     executed only if the branch is not taken.  When
7953     `INSN_ANNULLED_BRANCH_P' is not set, this insn will always be
7954     executed.  Stored in the `in_struct' field and printed as `/s'.
7955
7956`LABEL_PRESERVE_P (X)'
7957     In a `code_label' or `note', indicates that the label is
7958     referenced by code or data not visible to the RTL of a given
7959     function.  Labels referenced by a non-local goto will have this
7960     bit set.  Stored in the `in_struct' field and printed as `/s'.
7961
7962`LABEL_REF_NONLOCAL_P (X)'
7963     In `label_ref' and `reg_label' expressions, nonzero if this is a
7964     reference to a non-local label.  Stored in the `volatil' field and
7965     printed as `/v'.
7966
7967`MEM_KEEP_ALIAS_SET_P (X)'
7968     In `mem' expressions, 1 if we should keep the alias set for this
7969     mem unchanged when we access a component.  Set to 1, for example,
7970     when we are already in a non-addressable component of an aggregate.
7971     Stored in the `jump' field and printed as `/j'.
7972
7973`MEM_VOLATILE_P (X)'
7974     In `mem', `asm_operands', and `asm_input' expressions, nonzero for
7975     volatile memory references.  Stored in the `volatil' field and
7976     printed as `/v'.
7977
7978`MEM_NOTRAP_P (X)'
7979     In `mem', nonzero for memory references that will not trap.
7980     Stored in the `call' field and printed as `/c'.
7981
7982`MEM_POINTER (X)'
7983     Nonzero in a `mem' if the memory reference holds a pointer.
7984     Stored in the `frame_related' field and printed as `/f'.
7985
7986`REG_FUNCTION_VALUE_P (X)'
7987     Nonzero in a `reg' if it is the place in which this function's
7988     value is going to be returned.  (This happens only in a hard
7989     register.)  Stored in the `return_val' field and printed as `/i'.
7990
7991`REG_POINTER (X)'
7992     Nonzero in a `reg' if the register holds a pointer.  Stored in the
7993     `frame_related' field and printed as `/f'.
7994
7995`REG_USERVAR_P (X)'
7996     In a `reg', nonzero if it corresponds to a variable present in the
7997     user's source code.  Zero for temporaries generated internally by
7998     the compiler.  Stored in the `volatil' field and printed as `/v'.
7999
8000     The same hard register may be used also for collecting the values
8001     of functions called by this one, but `REG_FUNCTION_VALUE_P' is zero
8002     in this kind of use.
8003
8004`RTX_FRAME_RELATED_P (X)'
8005     Nonzero in an `insn', `call_insn', `jump_insn', `barrier', or
8006     `set' which is part of a function prologue and sets the stack
8007     pointer, sets the frame pointer, or saves a register.  This flag
8008     should also be set on an instruction that sets up a temporary
8009     register to use in place of the frame pointer.  Stored in the
8010     `frame_related' field and printed as `/f'.
8011
8012     In particular, on RISC targets where there are limits on the sizes
8013     of immediate constants, it is sometimes impossible to reach the
8014     register save area directly from the stack pointer.  In that case,
8015     a temporary register is used that is near enough to the register
8016     save area, and the Canonical Frame Address, i.e., DWARF2's logical
8017     frame pointer, register must (temporarily) be changed to be this
8018     temporary register.  So, the instruction that sets this temporary
8019     register must be marked as `RTX_FRAME_RELATED_P'.
8020
8021     If the marked instruction is overly complex (defined in terms of
8022     what `dwarf2out_frame_debug_expr' can handle), you will also have
8023     to create a `REG_FRAME_RELATED_EXPR' note and attach it to the
8024     instruction.  This note should contain a simple expression of the
8025     computation performed by this instruction, i.e., one that
8026     `dwarf2out_frame_debug_expr' can handle.
8027
8028     This flag is required for exception handling support on targets
8029     with RTL prologues.
8030
8031`MEM_READONLY_P (X)'
8032     Nonzero in a `mem', if the memory is statically allocated and
8033     read-only.
8034
8035     Read-only in this context means never modified during the lifetime
8036     of the program, not necessarily in ROM or in write-disabled pages.
8037     A common example of the later is a shared library's global offset
8038     table.  This table is initialized by the runtime loader, so the
8039     memory is technically writable, but after control is transferred
8040     from the runtime loader to the application, this memory will never
8041     be subsequently modified.
8042
8043     Stored in the `unchanging' field and printed as `/u'.
8044
8045`SCHED_GROUP_P (X)'
8046     During instruction scheduling, in an `insn', `call_insn' or
8047     `jump_insn', indicates that the previous insn must be scheduled
8048     together with this insn.  This is used to ensure that certain
8049     groups of instructions will not be split up by the instruction
8050     scheduling pass, for example, `use' insns before a `call_insn' may
8051     not be separated from the `call_insn'.  Stored in the `in_struct'
8052     field and printed as `/s'.
8053
8054`SET_IS_RETURN_P (X)'
8055     For a `set', nonzero if it is for a return.  Stored in the `jump'
8056     field and printed as `/j'.
8057
8058`SIBLING_CALL_P (X)'
8059     For a `call_insn', nonzero if the insn is a sibling call.  Stored
8060     in the `jump' field and printed as `/j'.
8061
8062`STRING_POOL_ADDRESS_P (X)'
8063     For a `symbol_ref' expression, nonzero if it addresses this
8064     function's string constant pool.  Stored in the `frame_related'
8065     field and printed as `/f'.
8066
8067`SUBREG_PROMOTED_UNSIGNED_P (X)'
8068     Returns a value greater then zero for a `subreg' that has
8069     `SUBREG_PROMOTED_VAR_P' nonzero if the object being referenced is
8070     kept zero-extended, zero if it is kept sign-extended, and less
8071     then zero if it is extended some other way via the `ptr_extend'
8072     instruction.  Stored in the `unchanging' field and `volatil'
8073     field, printed as `/u' and `/v'.  This macro may only be used to
8074     get the value it may not be used to change the value.  Use
8075     `SUBREG_PROMOTED_UNSIGNED_SET' to change the value.
8076
8077`SUBREG_PROMOTED_UNSIGNED_SET (X)'
8078     Set the `unchanging' and `volatil' fields in a `subreg' to reflect
8079     zero, sign, or other extension.  If `volatil' is zero, then
8080     `unchanging' as nonzero means zero extension and as zero means
8081     sign extension.  If `volatil' is nonzero then some other type of
8082     extension was done via the `ptr_extend' instruction.
8083
8084`SUBREG_PROMOTED_VAR_P (X)'
8085     Nonzero in a `subreg' if it was made when accessing an object that
8086     was promoted to a wider mode in accord with the `PROMOTED_MODE'
8087     machine description macro (*note Storage Layout::).  In this case,
8088     the mode of the `subreg' is the declared mode of the object and
8089     the mode of `SUBREG_REG' is the mode of the register that holds
8090     the object.  Promoted variables are always either sign- or
8091     zero-extended to the wider mode on every assignment.  Stored in
8092     the `in_struct' field and printed as `/s'.
8093
8094`SYMBOL_REF_USED (X)'
8095     In a `symbol_ref', indicates that X has been used.  This is
8096     normally only used to ensure that X is only declared external
8097     once.  Stored in the `used' field.
8098
8099`SYMBOL_REF_WEAK (X)'
8100     In a `symbol_ref', indicates that X has been declared weak.
8101     Stored in the `return_val' field and printed as `/i'.
8102
8103`SYMBOL_REF_FLAG (X)'
8104     In a `symbol_ref', this is used as a flag for machine-specific
8105     purposes.  Stored in the `volatil' field and printed as `/v'.
8106
8107     Most uses of `SYMBOL_REF_FLAG' are historic and may be subsumed by
8108     `SYMBOL_REF_FLAGS'.  Certainly use of `SYMBOL_REF_FLAGS' is
8109     mandatory if the target requires more than one bit of storage.
8110
8111`PREFETCH_SCHEDULE_BARRIER_P (X)'
8112     In a `prefetch', indicates that the prefetch is a scheduling
8113     barrier.  No other INSNs will be moved over it.  Stored in the
8114     `volatil' field and printed as `/v'.
8115
8116 These are the fields to which the above macros refer:
8117
8118`call'
8119     In a `mem', 1 means that the memory reference will not trap.
8120
8121     In a `call', 1 means that this pure or const call may possibly
8122     infinite loop.
8123
8124     In an RTL dump, this flag is represented as `/c'.
8125
8126`frame_related'
8127     In an `insn' or `set' expression, 1 means that it is part of a
8128     function prologue and sets the stack pointer, sets the frame
8129     pointer, saves a register, or sets up a temporary register to use
8130     in place of the frame pointer.
8131
8132     In `reg' expressions, 1 means that the register holds a pointer.
8133
8134     In `mem' expressions, 1 means that the memory reference holds a
8135     pointer.
8136
8137     In `symbol_ref' expressions, 1 means that the reference addresses
8138     this function's string constant pool.
8139
8140     In an RTL dump, this flag is represented as `/f'.
8141
8142`in_struct'
8143     In `reg' expressions, it is 1 if the register has its entire life
8144     contained within the test expression of some loop.
8145
8146     In `subreg' expressions, 1 means that the `subreg' is accessing an
8147     object that has had its mode promoted from a wider mode.
8148
8149     In `label_ref' expressions, 1 means that the referenced label is
8150     outside the innermost loop containing the insn in which the
8151     `label_ref' was found.
8152
8153     In `code_label' expressions, it is 1 if the label may never be
8154     deleted.  This is used for labels which are the target of
8155     non-local gotos.  Such a label that would have been deleted is
8156     replaced with a `note' of type `NOTE_INSN_DELETED_LABEL'.
8157
8158     In an `insn' during dead-code elimination, 1 means that the insn is
8159     dead code.
8160
8161     In an `insn' or `jump_insn' during reorg for an insn in the delay
8162     slot of a branch, 1 means that this insn is from the target of the
8163     branch.
8164
8165     In an `insn' during instruction scheduling, 1 means that this insn
8166     must be scheduled as part of a group together with the previous
8167     insn.
8168
8169     In an RTL dump, this flag is represented as `/s'.
8170
8171`return_val'
8172     In `reg' expressions, 1 means the register contains the value to
8173     be returned by the current function.  On machines that pass
8174     parameters in registers, the same register number may be used for
8175     parameters as well, but this flag is not set on such uses.
8176
8177     In `symbol_ref' expressions, 1 means the referenced symbol is weak.
8178
8179     In `call' expressions, 1 means the call is pure.
8180
8181     In an RTL dump, this flag is represented as `/i'.
8182
8183`jump'
8184     In a `mem' expression, 1 means we should keep the alias set for
8185     this mem unchanged when we access a component.
8186
8187     In a `set', 1 means it is for a return.
8188
8189     In a `call_insn', 1 means it is a sibling call.
8190
8191     In an RTL dump, this flag is represented as `/j'.
8192
8193`unchanging'
8194     In `reg' and `mem' expressions, 1 means that the value of the
8195     expression never changes.
8196
8197     In `subreg' expressions, it is 1 if the `subreg' references an
8198     unsigned object whose mode has been promoted to a wider mode.
8199
8200     In an `insn' or `jump_insn' in the delay slot of a branch
8201     instruction, 1 means an annulling branch should be used.
8202
8203     In a `symbol_ref' expression, 1 means that this symbol addresses
8204     something in the per-function constant pool.
8205
8206     In a `call_insn' 1 means that this instruction is a call to a const
8207     function.
8208
8209     In an RTL dump, this flag is represented as `/u'.
8210
8211`used'
8212     This flag is used directly (without an access macro) at the end of
8213     RTL generation for a function, to count the number of times an
8214     expression appears in insns.  Expressions that appear more than
8215     once are copied, according to the rules for shared structure
8216     (*note Sharing::).
8217
8218     For a `reg', it is used directly (without an access macro) by the
8219     leaf register renumbering code to ensure that each register is only
8220     renumbered once.
8221
8222     In a `symbol_ref', it indicates that an external declaration for
8223     the symbol has already been written.
8224
8225`volatil'
8226     In a `mem', `asm_operands', or `asm_input' expression, it is 1 if
8227     the memory reference is volatile.  Volatile memory references may
8228     not be deleted, reordered or combined.
8229
8230     In a `symbol_ref' expression, it is used for machine-specific
8231     purposes.
8232
8233     In a `reg' expression, it is 1 if the value is a user-level
8234     variable.  0 indicates an internal compiler temporary.
8235
8236     In an `insn', 1 means the insn has been deleted.
8237
8238     In `label_ref' and `reg_label' expressions, 1 means a reference to
8239     a non-local label.
8240
8241     In `prefetch' expressions, 1 means that the containing insn is a
8242     scheduling barrier.
8243
8244     In an RTL dump, this flag is represented as `/v'.
8245
8246
8247File: gccint.info,  Node: Machine Modes,  Next: Constants,  Prev: Flags,  Up: RTL
8248
824910.6 Machine Modes
8250==================
8251
8252A machine mode describes a size of data object and the representation
8253used for it.  In the C code, machine modes are represented by an
8254enumeration type, `enum machine_mode', defined in `machmode.def'.  Each
8255RTL expression has room for a machine mode and so do certain kinds of
8256tree expressions (declarations and types, to be precise).
8257
8258 In debugging dumps and machine descriptions, the machine mode of an RTL
8259expression is written after the expression code with a colon to separate
8260them.  The letters `mode' which appear at the end of each machine mode
8261name are omitted.  For example, `(reg:SI 38)' is a `reg' expression
8262with machine mode `SImode'.  If the mode is `VOIDmode', it is not
8263written at all.
8264
8265 Here is a table of machine modes.  The term "byte" below refers to an
8266object of `BITS_PER_UNIT' bits (*note Storage Layout::).
8267
8268`BImode'
8269     "Bit" mode represents a single bit, for predicate registers.
8270
8271`QImode'
8272     "Quarter-Integer" mode represents a single byte treated as an
8273     integer.
8274
8275`HImode'
8276     "Half-Integer" mode represents a two-byte integer.
8277
8278`PSImode'
8279     "Partial Single Integer" mode represents an integer which occupies
8280     four bytes but which doesn't really use all four.  On some
8281     machines, this is the right mode to use for pointers.
8282
8283`SImode'
8284     "Single Integer" mode represents a four-byte integer.
8285
8286`PDImode'
8287     "Partial Double Integer" mode represents an integer which occupies
8288     eight bytes but which doesn't really use all eight.  On some
8289     machines, this is the right mode to use for certain pointers.
8290
8291`DImode'
8292     "Double Integer" mode represents an eight-byte integer.
8293
8294`TImode'
8295     "Tetra Integer" (?) mode represents a sixteen-byte integer.
8296
8297`OImode'
8298     "Octa Integer" (?) mode represents a thirty-two-byte integer.
8299
8300`QFmode'
8301     "Quarter-Floating" mode represents a quarter-precision (single
8302     byte) floating point number.
8303
8304`HFmode'
8305     "Half-Floating" mode represents a half-precision (two byte)
8306     floating point number.
8307
8308`TQFmode'
8309     "Three-Quarter-Floating" (?) mode represents a
8310     three-quarter-precision (three byte) floating point number.
8311
8312`SFmode'
8313     "Single Floating" mode represents a four byte floating point
8314     number.  In the common case, of a processor with IEEE arithmetic
8315     and 8-bit bytes, this is a single-precision IEEE floating point
8316     number; it can also be used for double-precision (on processors
8317     with 16-bit bytes) and single-precision VAX and IBM types.
8318
8319`DFmode'
8320     "Double Floating" mode represents an eight byte floating point
8321     number.  In the common case, of a processor with IEEE arithmetic
8322     and 8-bit bytes, this is a double-precision IEEE floating point
8323     number.
8324
8325`XFmode'
8326     "Extended Floating" mode represents an IEEE extended floating point
8327     number.  This mode only has 80 meaningful bits (ten bytes).  Some
8328     processors require such numbers to be padded to twelve bytes,
8329     others to sixteen; this mode is used for either.
8330
8331`SDmode'
8332     "Single Decimal Floating" mode represents a four byte decimal
8333     floating point number (as distinct from conventional binary
8334     floating point).
8335
8336`DDmode'
8337     "Double Decimal Floating" mode represents an eight byte decimal
8338     floating point number.
8339
8340`TDmode'
8341     "Tetra Decimal Floating" mode represents a sixteen byte decimal
8342     floating point number all 128 of whose bits are meaningful.
8343
8344`TFmode'
8345     "Tetra Floating" mode represents a sixteen byte floating point
8346     number all 128 of whose bits are meaningful.  One common use is the
8347     IEEE quad-precision format.
8348
8349`QQmode'
8350     "Quarter-Fractional" mode represents a single byte treated as a
8351     signed fractional number.  The default format is "s.7".
8352
8353`HQmode'
8354     "Half-Fractional" mode represents a two-byte signed fractional
8355     number.  The default format is "s.15".
8356
8357`SQmode'
8358     "Single Fractional" mode represents a four-byte signed fractional
8359     number.  The default format is "s.31".
8360
8361`DQmode'
8362     "Double Fractional" mode represents an eight-byte signed
8363     fractional number.  The default format is "s.63".
8364
8365`TQmode'
8366     "Tetra Fractional" mode represents a sixteen-byte signed
8367     fractional number.  The default format is "s.127".
8368
8369`UQQmode'
8370     "Unsigned Quarter-Fractional" mode represents a single byte
8371     treated as an unsigned fractional number.  The default format is
8372     ".8".
8373
8374`UHQmode'
8375     "Unsigned Half-Fractional" mode represents a two-byte unsigned
8376     fractional number.  The default format is ".16".
8377
8378`USQmode'
8379     "Unsigned Single Fractional" mode represents a four-byte unsigned
8380     fractional number.  The default format is ".32".
8381
8382`UDQmode'
8383     "Unsigned Double Fractional" mode represents an eight-byte unsigned
8384     fractional number.  The default format is ".64".
8385
8386`UTQmode'
8387     "Unsigned Tetra Fractional" mode represents a sixteen-byte unsigned
8388     fractional number.  The default format is ".128".
8389
8390`HAmode'
8391     "Half-Accumulator" mode represents a two-byte signed accumulator.
8392     The default format is "s8.7".
8393
8394`SAmode'
8395     "Single Accumulator" mode represents a four-byte signed
8396     accumulator.  The default format is "s16.15".
8397
8398`DAmode'
8399     "Double Accumulator" mode represents an eight-byte signed
8400     accumulator.  The default format is "s32.31".
8401
8402`TAmode'
8403     "Tetra Accumulator" mode represents a sixteen-byte signed
8404     accumulator.  The default format is "s64.63".
8405
8406`UHAmode'
8407     "Unsigned Half-Accumulator" mode represents a two-byte unsigned
8408     accumulator.  The default format is "8.8".
8409
8410`USAmode'
8411     "Unsigned Single Accumulator" mode represents a four-byte unsigned
8412     accumulator.  The default format is "16.16".
8413
8414`UDAmode'
8415     "Unsigned Double Accumulator" mode represents an eight-byte
8416     unsigned accumulator.  The default format is "32.32".
8417
8418`UTAmode'
8419     "Unsigned Tetra Accumulator" mode represents a sixteen-byte
8420     unsigned accumulator.  The default format is "64.64".
8421
8422`CCmode'
8423     "Condition Code" mode represents the value of a condition code,
8424     which is a machine-specific set of bits used to represent the
8425     result of a comparison operation.  Other machine-specific modes
8426     may also be used for the condition code.  These modes are not used
8427     on machines that use `cc0' (*note Condition Code::).
8428
8429`BLKmode'
8430     "Block" mode represents values that are aggregates to which none of
8431     the other modes apply.  In RTL, only memory references can have
8432     this mode, and only if they appear in string-move or vector
8433     instructions.  On machines which have no such instructions,
8434     `BLKmode' will not appear in RTL.
8435
8436`VOIDmode'
8437     Void mode means the absence of a mode or an unspecified mode.  For
8438     example, RTL expressions of code `const_int' have mode `VOIDmode'
8439     because they can be taken to have whatever mode the context
8440     requires.  In debugging dumps of RTL, `VOIDmode' is expressed by
8441     the absence of any mode.
8442
8443`QCmode, HCmode, SCmode, DCmode, XCmode, TCmode'
8444     These modes stand for a complex number represented as a pair of
8445     floating point values.  The floating point values are in `QFmode',
8446     `HFmode', `SFmode', `DFmode', `XFmode', and `TFmode', respectively.
8447
8448`CQImode, CHImode, CSImode, CDImode, CTImode, COImode'
8449     These modes stand for a complex number represented as a pair of
8450     integer values.  The integer values are in `QImode', `HImode',
8451     `SImode', `DImode', `TImode', and `OImode', respectively.
8452
8453 The machine description defines `Pmode' as a C macro which expands
8454into the machine mode used for addresses.  Normally this is the mode
8455whose size is `BITS_PER_WORD', `SImode' on 32-bit machines.
8456
8457 The only modes which a machine description must support are `QImode',
8458and the modes corresponding to `BITS_PER_WORD', `FLOAT_TYPE_SIZE' and
8459`DOUBLE_TYPE_SIZE'.  The compiler will attempt to use `DImode' for
84608-byte structures and unions, but this can be prevented by overriding
8461the definition of `MAX_FIXED_MODE_SIZE'.  Alternatively, you can have
8462the compiler use `TImode' for 16-byte structures and unions.  Likewise,
8463you can arrange for the C type `short int' to avoid using `HImode'.
8464
8465 Very few explicit references to machine modes remain in the compiler
8466and these few references will soon be removed.  Instead, the machine
8467modes are divided into mode classes.  These are represented by the
8468enumeration type `enum mode_class' defined in `machmode.h'.  The
8469possible mode classes are:
8470
8471`MODE_INT'
8472     Integer modes.  By default these are `BImode', `QImode', `HImode',
8473     `SImode', `DImode', `TImode', and `OImode'.
8474
8475`MODE_PARTIAL_INT'
8476     The "partial integer" modes, `PQImode', `PHImode', `PSImode' and
8477     `PDImode'.
8478
8479`MODE_FLOAT'
8480     Floating point modes.  By default these are `QFmode', `HFmode',
8481     `TQFmode', `SFmode', `DFmode', `XFmode' and `TFmode'.
8482
8483`MODE_DECIMAL_FLOAT'
8484     Decimal floating point modes.  By default these are `SDmode',
8485     `DDmode' and `TDmode'.
8486
8487`MODE_FRACT'
8488     Signed fractional modes.  By default these are `QQmode', `HQmode',
8489     `SQmode', `DQmode' and `TQmode'.
8490
8491`MODE_UFRACT'
8492     Unsigned fractional modes.  By default these are `UQQmode',
8493     `UHQmode', `USQmode', `UDQmode' and `UTQmode'.
8494
8495`MODE_ACCUM'
8496     Signed accumulator modes.  By default these are `HAmode',
8497     `SAmode', `DAmode' and `TAmode'.
8498
8499`MODE_UACCUM'
8500     Unsigned accumulator modes.  By default these are `UHAmode',
8501     `USAmode', `UDAmode' and `UTAmode'.
8502
8503`MODE_COMPLEX_INT'
8504     Complex integer modes.  (These are not currently implemented).
8505
8506`MODE_COMPLEX_FLOAT'
8507     Complex floating point modes.  By default these are `QCmode',
8508     `HCmode', `SCmode', `DCmode', `XCmode', and `TCmode'.
8509
8510`MODE_FUNCTION'
8511     Algol or Pascal function variables including a static chain.
8512     (These are not currently implemented).
8513
8514`MODE_CC'
8515     Modes representing condition code values.  These are `CCmode' plus
8516     any `CC_MODE' modes listed in the `MACHINE-modes.def'.  *Note Jump
8517     Patterns::, also see *note Condition Code::.
8518
8519`MODE_RANDOM'
8520     This is a catchall mode class for modes which don't fit into the
8521     above classes.  Currently `VOIDmode' and `BLKmode' are in
8522     `MODE_RANDOM'.
8523
8524 Here are some C macros that relate to machine modes:
8525
8526`GET_MODE (X)'
8527     Returns the machine mode of the RTX X.
8528
8529`PUT_MODE (X, NEWMODE)'
8530     Alters the machine mode of the RTX X to be NEWMODE.
8531
8532`NUM_MACHINE_MODES'
8533     Stands for the number of machine modes available on the target
8534     machine.  This is one greater than the largest numeric value of any
8535     machine mode.
8536
8537`GET_MODE_NAME (M)'
8538     Returns the name of mode M as a string.
8539
8540`GET_MODE_CLASS (M)'
8541     Returns the mode class of mode M.
8542
8543`GET_MODE_WIDER_MODE (M)'
8544     Returns the next wider natural mode.  For example, the expression
8545     `GET_MODE_WIDER_MODE (QImode)' returns `HImode'.
8546
8547`GET_MODE_SIZE (M)'
8548     Returns the size in bytes of a datum of mode M.
8549
8550`GET_MODE_BITSIZE (M)'
8551     Returns the size in bits of a datum of mode M.
8552
8553`GET_MODE_IBIT (M)'
8554     Returns the number of integral bits of a datum of fixed-point mode
8555     M.
8556
8557`GET_MODE_FBIT (M)'
8558     Returns the number of fractional bits of a datum of fixed-point
8559     mode M.
8560
8561`GET_MODE_MASK (M)'
8562     Returns a bitmask containing 1 for all bits in a word that fit
8563     within mode M.  This macro can only be used for modes whose
8564     bitsize is less than or equal to `HOST_BITS_PER_INT'.
8565
8566`GET_MODE_ALIGNMENT (M)'
8567     Return the required alignment, in bits, for an object of mode M.
8568
8569`GET_MODE_UNIT_SIZE (M)'
8570     Returns the size in bytes of the subunits of a datum of mode M.
8571     This is the same as `GET_MODE_SIZE' except in the case of complex
8572     modes.  For them, the unit size is the size of the real or
8573     imaginary part.
8574
8575`GET_MODE_NUNITS (M)'
8576     Returns the number of units contained in a mode, i.e.,
8577     `GET_MODE_SIZE' divided by `GET_MODE_UNIT_SIZE'.
8578
8579`GET_CLASS_NARROWEST_MODE (C)'
8580     Returns the narrowest mode in mode class C.
8581
8582 The global variables `byte_mode' and `word_mode' contain modes whose
8583classes are `MODE_INT' and whose bitsizes are either `BITS_PER_UNIT' or
8584`BITS_PER_WORD', respectively.  On 32-bit machines, these are `QImode'
8585and `SImode', respectively.
8586
8587
8588File: gccint.info,  Node: Constants,  Next: Regs and Memory,  Prev: Machine Modes,  Up: RTL
8589
859010.7 Constant Expression Types
8591==============================
8592
8593The simplest RTL expressions are those that represent constant values.
8594
8595`(const_int I)'
8596     This type of expression represents the integer value I.  I is
8597     customarily accessed with the macro `INTVAL' as in `INTVAL (EXP)',
8598     which is equivalent to `XWINT (EXP, 0)'.
8599
8600     Constants generated for modes with fewer bits than in
8601     `HOST_WIDE_INT' must be sign extended to full width (e.g., with
8602     `gen_int_mode').  For constants for modes with more bits than in
8603     `HOST_WIDE_INT' the implied high order bits of that constant are
8604     copies of the top bit.  Note however that values are neither
8605     inherently signed nor inherently unsigned; where necessary,
8606     signedness is determined by the rtl operation instead.
8607
8608     There is only one expression object for the integer value zero; it
8609     is the value of the variable `const0_rtx'.  Likewise, the only
8610     expression for integer value one is found in `const1_rtx', the only
8611     expression for integer value two is found in `const2_rtx', and the
8612     only expression for integer value negative one is found in
8613     `constm1_rtx'.  Any attempt to create an expression of code
8614     `const_int' and value zero, one, two or negative one will return
8615     `const0_rtx', `const1_rtx', `const2_rtx' or `constm1_rtx' as
8616     appropriate.
8617
8618     Similarly, there is only one object for the integer whose value is
8619     `STORE_FLAG_VALUE'.  It is found in `const_true_rtx'.  If
8620     `STORE_FLAG_VALUE' is one, `const_true_rtx' and `const1_rtx' will
8621     point to the same object.  If `STORE_FLAG_VALUE' is -1,
8622     `const_true_rtx' and `constm1_rtx' will point to the same object.
8623
8624`(const_double:M I0 I1 ...)'
8625     Represents either a floating-point constant of mode M or an
8626     integer constant too large to fit into `HOST_BITS_PER_WIDE_INT'
8627     bits but small enough to fit within twice that number of bits (GCC
8628     does not provide a mechanism to represent even larger constants).
8629     In the latter case, M will be `VOIDmode'.  For integral values
8630     constants for modes with more bits than twice the number in
8631     `HOST_WIDE_INT' the implied high order bits of that constant are
8632     copies of the top bit of `CONST_DOUBLE_HIGH'.  Note however that
8633     integral values are neither inherently signed nor inherently
8634     unsigned; where necessary, signedness is determined by the rtl
8635     operation instead.
8636
8637     If M is `VOIDmode', the bits of the value are stored in I0 and I1.
8638     I0 is customarily accessed with the macro `CONST_DOUBLE_LOW' and
8639     I1 with `CONST_DOUBLE_HIGH'.
8640
8641     If the constant is floating point (regardless of its precision),
8642     then the number of integers used to store the value depends on the
8643     size of `REAL_VALUE_TYPE' (*note Floating Point::).  The integers
8644     represent a floating point number, but not precisely in the target
8645     machine's or host machine's floating point format.  To convert
8646     them to the precise bit pattern used by the target machine, use
8647     the macro `REAL_VALUE_TO_TARGET_DOUBLE' and friends (*note Data
8648     Output::).
8649
8650`(const_fixed:M ...)'
8651     Represents a fixed-point constant of mode M.  The operand is a
8652     data structure of type `struct fixed_value' and is accessed with
8653     the macro `CONST_FIXED_VALUE'.  The high part of data is accessed
8654     with `CONST_FIXED_VALUE_HIGH'; the low part is accessed with
8655     `CONST_FIXED_VALUE_LOW'.
8656
8657`(const_vector:M [X0 X1 ...])'
8658     Represents a vector constant.  The square brackets stand for the
8659     vector containing the constant elements.  X0, X1 and so on are the
8660     `const_int', `const_double' or `const_fixed' elements.
8661
8662     The number of units in a `const_vector' is obtained with the macro
8663     `CONST_VECTOR_NUNITS' as in `CONST_VECTOR_NUNITS (V)'.
8664
8665     Individual elements in a vector constant are accessed with the
8666     macro `CONST_VECTOR_ELT' as in `CONST_VECTOR_ELT (V, N)' where V
8667     is the vector constant and N is the element desired.
8668
8669`(const_string STR)'
8670     Represents a constant string with value STR.  Currently this is
8671     used only for insn attributes (*note Insn Attributes::) since
8672     constant strings in C are placed in memory.
8673
8674`(symbol_ref:MODE SYMBOL)'
8675     Represents the value of an assembler label for data.  SYMBOL is a
8676     string that describes the name of the assembler label.  If it
8677     starts with a `*', the label is the rest of SYMBOL not including
8678     the `*'.  Otherwise, the label is SYMBOL, usually prefixed with
8679     `_'.
8680
8681     The `symbol_ref' contains a mode, which is usually `Pmode'.
8682     Usually that is the only mode for which a symbol is directly valid.
8683
8684`(label_ref:MODE LABEL)'
8685     Represents the value of an assembler label for code.  It contains
8686     one operand, an expression, which must be a `code_label' or a
8687     `note' of type `NOTE_INSN_DELETED_LABEL' that appears in the
8688     instruction sequence to identify the place where the label should
8689     go.
8690
8691     The reason for using a distinct expression type for code label
8692     references is so that jump optimization can distinguish them.
8693
8694     The `label_ref' contains a mode, which is usually `Pmode'.
8695     Usually that is the only mode for which a label is directly valid.
8696
8697`(const:M EXP)'
8698     Represents a constant that is the result of an assembly-time
8699     arithmetic computation.  The operand, EXP, is an expression that
8700     contains only constants (`const_int', `symbol_ref' and `label_ref'
8701     expressions) combined with `plus' and `minus'.  However, not all
8702     combinations are valid, since the assembler cannot do arbitrary
8703     arithmetic on relocatable symbols.
8704
8705     M should be `Pmode'.
8706
8707`(high:M EXP)'
8708     Represents the high-order bits of EXP, usually a `symbol_ref'.
8709     The number of bits is machine-dependent and is normally the number
8710     of bits specified in an instruction that initializes the high
8711     order bits of a register.  It is used with `lo_sum' to represent
8712     the typical two-instruction sequence used in RISC machines to
8713     reference a global memory location.
8714
8715     M should be `Pmode'.
8716
8717 The macro `CONST0_RTX (MODE)' refers to an expression with value 0 in
8718mode MODE.  If mode MODE is of mode class `MODE_INT', it returns
8719`const0_rtx'.  If mode MODE is of mode class `MODE_FLOAT', it returns a
8720`CONST_DOUBLE' expression in mode MODE.  Otherwise, it returns a
8721`CONST_VECTOR' expression in mode MODE.  Similarly, the macro
8722`CONST1_RTX (MODE)' refers to an expression with value 1 in mode MODE
8723and similarly for `CONST2_RTX'.  The `CONST1_RTX' and `CONST2_RTX'
8724macros are undefined for vector modes.
8725
8726
8727File: gccint.info,  Node: Regs and Memory,  Next: Arithmetic,  Prev: Constants,  Up: RTL
8728
872910.8 Registers and Memory
8730=========================
8731
8732Here are the RTL expression types for describing access to machine
8733registers and to main memory.
8734
8735`(reg:M N)'
8736     For small values of the integer N (those that are less than
8737     `FIRST_PSEUDO_REGISTER'), this stands for a reference to machine
8738     register number N: a "hard register".  For larger values of N, it
8739     stands for a temporary value or "pseudo register".  The compiler's
8740     strategy is to generate code assuming an unlimited number of such
8741     pseudo registers, and later convert them into hard registers or
8742     into memory references.
8743
8744     M is the machine mode of the reference.  It is necessary because
8745     machines can generally refer to each register in more than one
8746     mode.  For example, a register may contain a full word but there
8747     may be instructions to refer to it as a half word or as a single
8748     byte, as well as instructions to refer to it as a floating point
8749     number of various precisions.
8750
8751     Even for a register that the machine can access in only one mode,
8752     the mode must always be specified.
8753
8754     The symbol `FIRST_PSEUDO_REGISTER' is defined by the machine
8755     description, since the number of hard registers on the machine is
8756     an invariant characteristic of the machine.  Note, however, that
8757     not all of the machine registers must be general registers.  All
8758     the machine registers that can be used for storage of data are
8759     given hard register numbers, even those that can be used only in
8760     certain instructions or can hold only certain types of data.
8761
8762     A hard register may be accessed in various modes throughout one
8763     function, but each pseudo register is given a natural mode and is
8764     accessed only in that mode.  When it is necessary to describe an
8765     access to a pseudo register using a nonnatural mode, a `subreg'
8766     expression is used.
8767
8768     A `reg' expression with a machine mode that specifies more than
8769     one word of data may actually stand for several consecutive
8770     registers.  If in addition the register number specifies a
8771     hardware register, then it actually represents several consecutive
8772     hardware registers starting with the specified one.
8773
8774     Each pseudo register number used in a function's RTL code is
8775     represented by a unique `reg' expression.
8776
8777     Some pseudo register numbers, those within the range of
8778     `FIRST_VIRTUAL_REGISTER' to `LAST_VIRTUAL_REGISTER' only appear
8779     during the RTL generation phase and are eliminated before the
8780     optimization phases.  These represent locations in the stack frame
8781     that cannot be determined until RTL generation for the function
8782     has been completed.  The following virtual register numbers are
8783     defined:
8784
8785    `VIRTUAL_INCOMING_ARGS_REGNUM'
8786          This points to the first word of the incoming arguments
8787          passed on the stack.  Normally these arguments are placed
8788          there by the caller, but the callee may have pushed some
8789          arguments that were previously passed in registers.
8790
8791          When RTL generation is complete, this virtual register is
8792          replaced by the sum of the register given by
8793          `ARG_POINTER_REGNUM' and the value of `FIRST_PARM_OFFSET'.
8794
8795    `VIRTUAL_STACK_VARS_REGNUM'
8796          If `FRAME_GROWS_DOWNWARD' is defined to a nonzero value, this
8797          points to immediately above the first variable on the stack.
8798          Otherwise, it points to the first variable on the stack.
8799
8800          `VIRTUAL_STACK_VARS_REGNUM' is replaced with the sum of the
8801          register given by `FRAME_POINTER_REGNUM' and the value
8802          `STARTING_FRAME_OFFSET'.
8803
8804    `VIRTUAL_STACK_DYNAMIC_REGNUM'
8805          This points to the location of dynamically allocated memory
8806          on the stack immediately after the stack pointer has been
8807          adjusted by the amount of memory desired.
8808
8809          This virtual register is replaced by the sum of the register
8810          given by `STACK_POINTER_REGNUM' and the value
8811          `STACK_DYNAMIC_OFFSET'.
8812
8813    `VIRTUAL_OUTGOING_ARGS_REGNUM'
8814          This points to the location in the stack at which outgoing
8815          arguments should be written when the stack is pre-pushed
8816          (arguments pushed using push insns should always use
8817          `STACK_POINTER_REGNUM').
8818
8819          This virtual register is replaced by the sum of the register
8820          given by `STACK_POINTER_REGNUM' and the value
8821          `STACK_POINTER_OFFSET'.
8822
8823`(subreg:M1 REG:M2 BYTENUM)'
8824     `subreg' expressions are used to refer to a register in a machine
8825     mode other than its natural one, or to refer to one register of a
8826     multi-part `reg' that actually refers to several registers.
8827
8828     Each pseudo register has a natural mode.  If it is necessary to
8829     operate on it in a different mode, the register must be enclosed
8830     in a `subreg'.
8831
8832     There are currently three supported types for the first operand of
8833     a `subreg':
8834        * pseudo registers This is the most common case.  Most
8835          `subreg's have pseudo `reg's as their first operand.
8836
8837        * mem `subreg's of `mem' were common in earlier versions of GCC
8838          and are still supported.  During the reload pass these are
8839          replaced by plain `mem's.  On machines that do not do
8840          instruction scheduling, use of `subreg's of `mem' are still
8841          used, but this is no longer recommended.  Such `subreg's are
8842          considered to be `register_operand's rather than
8843          `memory_operand's before and during reload.  Because of this,
8844          the scheduling passes cannot properly schedule instructions
8845          with `subreg's of `mem', so for machines that do scheduling,
8846          `subreg's of `mem' should never be used.  To support this,
8847          the combine and recog passes have explicit code to inhibit
8848          the creation of `subreg's of `mem' when `INSN_SCHEDULING' is
8849          defined.
8850
8851          The use of `subreg's of `mem' after the reload pass is an area
8852          that is not well understood and should be avoided.  There is
8853          still some code in the compiler to support this, but this
8854          code has possibly rotted.  This use of `subreg's is
8855          discouraged and will most likely not be supported in the
8856          future.
8857
8858        * hard registers It is seldom necessary to wrap hard registers
8859          in `subreg's; such registers would normally reduce to a
8860          single `reg' rtx.  This use of `subreg's is discouraged and
8861          may not be supported in the future.
8862
8863
8864     `subreg's of `subreg's are not supported.  Using
8865     `simplify_gen_subreg' is the recommended way to avoid this problem.
8866
8867     `subreg's come in two distinct flavors, each having its own usage
8868     and rules:
8869
8870    Paradoxical subregs
8871          When M1 is strictly wider than M2, the `subreg' expression is
8872          called "paradoxical".  The canonical test for this class of
8873          `subreg' is:
8874
8875               GET_MODE_SIZE (M1) > GET_MODE_SIZE (M2)
8876
8877          Paradoxical `subreg's can be used as both lvalues and rvalues.
8878          When used as an lvalue, the low-order bits of the source value
8879          are stored in REG and the high-order bits are discarded.
8880          When used as an rvalue, the low-order bits of the `subreg' are
8881          taken from REG while the high-order bits may or may not be
8882          defined.
8883
8884          The high-order bits of rvalues are in the following
8885          circumstances:
8886
8887             * `subreg's of `mem' When M2 is smaller than a word, the
8888               macro `LOAD_EXTEND_OP', can control how the high-order
8889               bits are defined.
8890
8891             * `subreg' of `reg's The upper bits are defined when
8892               `SUBREG_PROMOTED_VAR_P' is true.
8893               `SUBREG_PROMOTED_UNSIGNED_P' describes what the upper
8894               bits hold.  Such subregs usually represent local
8895               variables, register variables and parameter pseudo
8896               variables that have been promoted to a wider mode.
8897
8898
8899          BYTENUM is always zero for a paradoxical `subreg', even on
8900          big-endian targets.
8901
8902          For example, the paradoxical `subreg':
8903
8904               (set (subreg:SI (reg:HI X) 0) Y)
8905
8906          stores the lower 2 bytes of Y in X and discards the upper 2
8907          bytes.  A subsequent:
8908
8909               (set Z (subreg:SI (reg:HI X) 0))
8910
8911          would set the lower two bytes of Z to Y and set the upper two
8912          bytes to an unknown value assuming `SUBREG_PROMOTED_VAR_P' is
8913          false.
8914
8915    Normal subregs
8916          When M1 is at least as narrow as M2 the `subreg' expression
8917          is called "normal".
8918
8919          Normal `subreg's restrict consideration to certain bits of
8920          REG.  There are two cases.  If M1 is smaller than a word, the
8921          `subreg' refers to the least-significant part (or "lowpart")
8922          of one word of REG.  If M1 is word-sized or greater, the
8923          `subreg' refers to one or more complete words.
8924
8925          When used as an lvalue, `subreg' is a word-based accessor.
8926          Storing to a `subreg' modifies all the words of REG that
8927          overlap the `subreg', but it leaves the other words of REG
8928          alone.
8929
8930          When storing to a normal `subreg' that is smaller than a word,
8931          the other bits of the referenced word are usually left in an
8932          undefined state.  This laxity makes it easier to generate
8933          efficient code for such instructions.  To represent an
8934          instruction that preserves all the bits outside of those in
8935          the `subreg', use `strict_low_part' or `zero_extract' around
8936          the `subreg'.
8937
8938          BYTENUM must identify the offset of the first byte of the
8939          `subreg' from the start of REG, assuming that REG is laid out
8940          in memory order.  The memory order of bytes is defined by two
8941          target macros, `WORDS_BIG_ENDIAN' and `BYTES_BIG_ENDIAN':
8942
8943             * `WORDS_BIG_ENDIAN', if set to 1, says that byte number
8944               zero is part of the most significant word; otherwise, it
8945               is part of the least significant word.
8946
8947             * `BYTES_BIG_ENDIAN', if set to 1, says that byte number
8948               zero is the most significant byte within a word;
8949               otherwise, it is the least significant byte within a
8950               word.
8951
8952          On a few targets, `FLOAT_WORDS_BIG_ENDIAN' disagrees with
8953          `WORDS_BIG_ENDIAN'.  However, most parts of the compiler treat
8954          floating point values as if they had the same endianness as
8955          integer values.  This works because they handle them solely
8956          as a collection of integer values, with no particular
8957          numerical value.  Only real.c and the runtime libraries care
8958          about `FLOAT_WORDS_BIG_ENDIAN'.
8959
8960          Thus,
8961
8962               (subreg:HI (reg:SI X) 2)
8963
8964          on a `BYTES_BIG_ENDIAN', `UNITS_PER_WORD == 4' target is the
8965          same as
8966
8967               (subreg:HI (reg:SI X) 0)
8968
8969          on a little-endian, `UNITS_PER_WORD == 4' target.  Both
8970          `subreg's access the lower two bytes of register X.
8971
8972
8973     A `MODE_PARTIAL_INT' mode behaves as if it were as wide as the
8974     corresponding `MODE_INT' mode, except that it has an unknown
8975     number of undefined bits.  For example:
8976
8977          (subreg:PSI (reg:SI 0) 0)
8978
8979     accesses the whole of `(reg:SI 0)', but the exact relationship
8980     between the `PSImode' value and the `SImode' value is not defined.
8981     If we assume `UNITS_PER_WORD <= 4', then the following two
8982     `subreg's:
8983
8984          (subreg:PSI (reg:DI 0) 0)
8985          (subreg:PSI (reg:DI 0) 4)
8986
8987     represent independent 4-byte accesses to the two halves of
8988     `(reg:DI 0)'.  Both `subreg's have an unknown number of undefined
8989     bits.
8990
8991     If `UNITS_PER_WORD <= 2' then these two `subreg's:
8992
8993          (subreg:HI (reg:PSI 0) 0)
8994          (subreg:HI (reg:PSI 0) 2)
8995
8996     represent independent 2-byte accesses that together span the whole
8997     of `(reg:PSI 0)'.  Storing to the first `subreg' does not affect
8998     the value of the second, and vice versa.  `(reg:PSI 0)' has an
8999     unknown number of undefined bits, so the assignment:
9000
9001          (set (subreg:HI (reg:PSI 0) 0) (reg:HI 4))
9002
9003     does not guarantee that `(subreg:HI (reg:PSI 0) 0)' has the value
9004     `(reg:HI 4)'.
9005
9006     The rules above apply to both pseudo REGs and hard REGs.  If the
9007     semantics are not correct for particular combinations of M1, M2
9008     and hard REG, the target-specific code must ensure that those
9009     combinations are never used.  For example:
9010
9011          CANNOT_CHANGE_MODE_CLASS (M2, M1, CLASS)
9012
9013     must be true for every class CLASS that includes REG.
9014
9015     The first operand of a `subreg' expression is customarily accessed
9016     with the `SUBREG_REG' macro and the second operand is customarily
9017     accessed with the `SUBREG_BYTE' macro.
9018
9019     It has been several years since a platform in which
9020     `BYTES_BIG_ENDIAN' not equal to `WORDS_BIG_ENDIAN' has been
9021     tested.  Anyone wishing to support such a platform in the future
9022     may be confronted with code rot.
9023
9024`(scratch:M)'
9025     This represents a scratch register that will be required for the
9026     execution of a single instruction and not used subsequently.  It is
9027     converted into a `reg' by either the local register allocator or
9028     the reload pass.
9029
9030     `scratch' is usually present inside a `clobber' operation (*note
9031     Side Effects::).
9032
9033`(cc0)'
9034     This refers to the machine's condition code register.  It has no
9035     operands and may not have a machine mode.  There are two ways to
9036     use it:
9037
9038        * To stand for a complete set of condition code flags.  This is
9039          best on most machines, where each comparison sets the entire
9040          series of flags.
9041
9042          With this technique, `(cc0)' may be validly used in only two
9043          contexts: as the destination of an assignment (in test and
9044          compare instructions) and in comparison operators comparing
9045          against zero (`const_int' with value zero; that is to say,
9046          `const0_rtx').
9047
9048        * To stand for a single flag that is the result of a single
9049          condition.  This is useful on machines that have only a
9050          single flag bit, and in which comparison instructions must
9051          specify the condition to test.
9052
9053          With this technique, `(cc0)' may be validly used in only two
9054          contexts: as the destination of an assignment (in test and
9055          compare instructions) where the source is a comparison
9056          operator, and as the first operand of `if_then_else' (in a
9057          conditional branch).
9058
9059     There is only one expression object of code `cc0'; it is the value
9060     of the variable `cc0_rtx'.  Any attempt to create an expression of
9061     code `cc0' will return `cc0_rtx'.
9062
9063     Instructions can set the condition code implicitly.  On many
9064     machines, nearly all instructions set the condition code based on
9065     the value that they compute or store.  It is not necessary to
9066     record these actions explicitly in the RTL because the machine
9067     description includes a prescription for recognizing the
9068     instructions that do so (by means of the macro
9069     `NOTICE_UPDATE_CC').  *Note Condition Code::.  Only instructions
9070     whose sole purpose is to set the condition code, and instructions
9071     that use the condition code, need mention `(cc0)'.
9072
9073     On some machines, the condition code register is given a register
9074     number and a `reg' is used instead of `(cc0)'.  This is usually the
9075     preferable approach if only a small subset of instructions modify
9076     the condition code.  Other machines store condition codes in
9077     general registers; in such cases a pseudo register should be used.
9078
9079     Some machines, such as the SPARC and RS/6000, have two sets of
9080     arithmetic instructions, one that sets and one that does not set
9081     the condition code.  This is best handled by normally generating
9082     the instruction that does not set the condition code, and making a
9083     pattern that both performs the arithmetic and sets the condition
9084     code register (which would not be `(cc0)' in this case).  For
9085     examples, search for `addcc' and `andcc' in `sparc.md'.
9086
9087`(pc)'
9088     This represents the machine's program counter.  It has no operands
9089     and may not have a machine mode.  `(pc)' may be validly used only
9090     in certain specific contexts in jump instructions.
9091
9092     There is only one expression object of code `pc'; it is the value
9093     of the variable `pc_rtx'.  Any attempt to create an expression of
9094     code `pc' will return `pc_rtx'.
9095
9096     All instructions that do not jump alter the program counter
9097     implicitly by incrementing it, but there is no need to mention
9098     this in the RTL.
9099
9100`(mem:M ADDR ALIAS)'
9101     This RTX represents a reference to main memory at an address
9102     represented by the expression ADDR.  M specifies how large a unit
9103     of memory is accessed.  ALIAS specifies an alias set for the
9104     reference.  In general two items are in different alias sets if
9105     they cannot reference the same memory address.
9106
9107     The construct `(mem:BLK (scratch))' is considered to alias all
9108     other memories.  Thus it may be used as a memory barrier in
9109     epilogue stack deallocation patterns.
9110
9111`(concatM RTX RTX)'
9112     This RTX represents the concatenation of two other RTXs.  This is
9113     used for complex values.  It should only appear in the RTL
9114     attached to declarations and during RTL generation.  It should not
9115     appear in the ordinary insn chain.
9116
9117`(concatnM [RTX ...])'
9118     This RTX represents the concatenation of all the RTX to make a
9119     single value.  Like `concat', this should only appear in
9120     declarations, and not in the insn chain.
9121
9122
9123File: gccint.info,  Node: Arithmetic,  Next: Comparisons,  Prev: Regs and Memory,  Up: RTL
9124
912510.9 RTL Expressions for Arithmetic
9126===================================
9127
9128Unless otherwise specified, all the operands of arithmetic expressions
9129must be valid for mode M.  An operand is valid for mode M if it has
9130mode M, or if it is a `const_int' or `const_double' and M is a mode of
9131class `MODE_INT'.
9132
9133 For commutative binary operations, constants should be placed in the
9134second operand.
9135
9136`(plus:M X Y)'
9137`(ss_plus:M X Y)'
9138`(us_plus:M X Y)'
9139     These three expressions all represent the sum of the values
9140     represented by X and Y carried out in machine mode M.  They differ
9141     in their behavior on overflow of integer modes.  `plus' wraps
9142     round modulo the width of M; `ss_plus' saturates at the maximum
9143     signed value representable in M; `us_plus' saturates at the
9144     maximum unsigned value.
9145
9146`(lo_sum:M X Y)'
9147     This expression represents the sum of X and the low-order bits of
9148     Y.  It is used with `high' (*note Constants::) to represent the
9149     typical two-instruction sequence used in RISC machines to
9150     reference a global memory location.
9151
9152     The number of low order bits is machine-dependent but is normally
9153     the number of bits in a `Pmode' item minus the number of bits set
9154     by `high'.
9155
9156     M should be `Pmode'.
9157
9158`(minus:M X Y)'
9159`(ss_minus:M X Y)'
9160`(us_minus:M X Y)'
9161     These three expressions represent the result of subtracting Y from
9162     X, carried out in mode M.  Behavior on overflow is the same as for
9163     the three variants of `plus' (see above).
9164
9165`(compare:M X Y)'
9166     Represents the result of subtracting Y from X for purposes of
9167     comparison.  The result is computed without overflow, as if with
9168     infinite precision.
9169
9170     Of course, machines can't really subtract with infinite precision.
9171     However, they can pretend to do so when only the sign of the
9172     result will be used, which is the case when the result is stored
9173     in the condition code.  And that is the _only_ way this kind of
9174     expression may validly be used: as a value to be stored in the
9175     condition codes, either `(cc0)' or a register.  *Note
9176     Comparisons::.
9177
9178     The mode M is not related to the modes of X and Y, but instead is
9179     the mode of the condition code value.  If `(cc0)' is used, it is
9180     `VOIDmode'.  Otherwise it is some mode in class `MODE_CC', often
9181     `CCmode'.  *Note Condition Code::.  If M is `VOIDmode' or
9182     `CCmode', the operation returns sufficient information (in an
9183     unspecified format) so that any comparison operator can be applied
9184     to the result of the `COMPARE' operation.  For other modes in
9185     class `MODE_CC', the operation only returns a subset of this
9186     information.
9187
9188     Normally, X and Y must have the same mode.  Otherwise, `compare'
9189     is valid only if the mode of X is in class `MODE_INT' and Y is a
9190     `const_int' or `const_double' with mode `VOIDmode'.  The mode of X
9191     determines what mode the comparison is to be done in; thus it must
9192     not be `VOIDmode'.
9193
9194     If one of the operands is a constant, it should be placed in the
9195     second operand and the comparison code adjusted as appropriate.
9196
9197     A `compare' specifying two `VOIDmode' constants is not valid since
9198     there is no way to know in what mode the comparison is to be
9199     performed; the comparison must either be folded during the
9200     compilation or the first operand must be loaded into a register
9201     while its mode is still known.
9202
9203`(neg:M X)'
9204`(ss_neg:M X)'
9205`(us_neg:M X)'
9206     These two expressions represent the negation (subtraction from
9207     zero) of the value represented by X, carried out in mode M.  They
9208     differ in the behavior on overflow of integer modes.  In the case
9209     of `neg', the negation of the operand may be a number not
9210     representable in mode M, in which case it is truncated to M.
9211     `ss_neg' and `us_neg' ensure that an out-of-bounds result
9212     saturates to the maximum or minimum signed or unsigned value.
9213
9214`(mult:M X Y)'
9215`(ss_mult:M X Y)'
9216`(us_mult:M X Y)'
9217     Represents the signed product of the values represented by X and Y
9218     carried out in machine mode M.  `ss_mult' and `us_mult' ensure
9219     that an out-of-bounds result saturates to the maximum or minimum
9220     signed or unsigned value.
9221
9222     Some machines support a multiplication that generates a product
9223     wider than the operands.  Write the pattern for this as
9224
9225          (mult:M (sign_extend:M X) (sign_extend:M Y))
9226
9227     where M is wider than the modes of X and Y, which need not be the
9228     same.
9229
9230     For unsigned widening multiplication, use the same idiom, but with
9231     `zero_extend' instead of `sign_extend'.
9232
9233`(fma:M X Y Z)'
9234     Represents the `fma', `fmaf', and `fmal' builtin functions that do
9235     a combined multiply of X and Y and then adding toZ without doing
9236     an intermediate rounding step.
9237
9238`(div:M X Y)'
9239`(ss_div:M X Y)'
9240     Represents the quotient in signed division of X by Y, carried out
9241     in machine mode M.  If M is a floating point mode, it represents
9242     the exact quotient; otherwise, the integerized quotient.  `ss_div'
9243     ensures that an out-of-bounds result saturates to the maximum or
9244     minimum signed value.
9245
9246     Some machines have division instructions in which the operands and
9247     quotient widths are not all the same; you should represent such
9248     instructions using `truncate' and `sign_extend' as in,
9249
9250          (truncate:M1 (div:M2 X (sign_extend:M2 Y)))
9251
9252`(udiv:M X Y)'
9253`(us_div:M X Y)'
9254     Like `div' but represents unsigned division.  `us_div' ensures
9255     that an out-of-bounds result saturates to the maximum or minimum
9256     unsigned value.
9257
9258`(mod:M X Y)'
9259`(umod:M X Y)'
9260     Like `div' and `udiv' but represent the remainder instead of the
9261     quotient.
9262
9263`(smin:M X Y)'
9264`(smax:M X Y)'
9265     Represents the smaller (for `smin') or larger (for `smax') of X
9266     and Y, interpreted as signed values in mode M.  When used with
9267     floating point, if both operands are zeros, or if either operand
9268     is `NaN', then it is unspecified which of the two operands is
9269     returned as the result.
9270
9271`(umin:M X Y)'
9272`(umax:M X Y)'
9273     Like `smin' and `smax', but the values are interpreted as unsigned
9274     integers.
9275
9276`(not:M X)'
9277     Represents the bitwise complement of the value represented by X,
9278     carried out in mode M, which must be a fixed-point machine mode.
9279
9280`(and:M X Y)'
9281     Represents the bitwise logical-and of the values represented by X
9282     and Y, carried out in machine mode M, which must be a fixed-point
9283     machine mode.
9284
9285`(ior:M X Y)'
9286     Represents the bitwise inclusive-or of the values represented by X
9287     and Y, carried out in machine mode M, which must be a fixed-point
9288     mode.
9289
9290`(xor:M X Y)'
9291     Represents the bitwise exclusive-or of the values represented by X
9292     and Y, carried out in machine mode M, which must be a fixed-point
9293     mode.
9294
9295`(ashift:M X C)'
9296`(ss_ashift:M X C)'
9297`(us_ashift:M X C)'
9298     These three expressions represent the result of arithmetically
9299     shifting X left by C places.  They differ in their behavior on
9300     overflow of integer modes.  An `ashift' operation is a plain shift
9301     with no special behavior in case of a change in the sign bit;
9302     `ss_ashift' and `us_ashift' saturates to the minimum or maximum
9303     representable value if any of the bits shifted out differs from
9304     the final sign bit.
9305
9306     X have mode M, a fixed-point machine mode.  C be a fixed-point
9307     mode or be a constant with mode `VOIDmode'; which mode is
9308     determined by the mode called for in the machine description entry
9309     for the left-shift instruction.  For example, on the VAX, the mode
9310     of C is `QImode' regardless of M.
9311
9312`(lshiftrt:M X C)'
9313`(ashiftrt:M X C)'
9314     Like `ashift' but for right shift.  Unlike the case for left shift,
9315     these two operations are distinct.
9316
9317`(rotate:M X C)'
9318`(rotatert:M X C)'
9319     Similar but represent left and right rotate.  If C is a constant,
9320     use `rotate'.
9321
9322`(abs:M X)'
9323
9324`(ss_abs:M X)'
9325     Represents the absolute value of X, computed in mode M.  `ss_abs'
9326     ensures that an out-of-bounds result saturates to the maximum
9327     signed value.
9328
9329`(sqrt:M X)'
9330     Represents the square root of X, computed in mode M.  Most often M
9331     will be a floating point mode.
9332
9333`(ffs:M X)'
9334     Represents one plus the index of the least significant 1-bit in X,
9335     represented as an integer of mode M.  (The value is zero if X is
9336     zero.)  The mode of X must be M or `VOIDmode'.
9337
9338`(clrsb:M X)'
9339     Represents the number of redundant leading sign bits in X,
9340     represented as an integer of mode M, starting at the most
9341     significant bit position.  This is one less than the number of
9342     leading sign bits (either 0 or 1), with no special cases.  The
9343     mode of X must be M or `VOIDmode'.
9344
9345`(clz:M X)'
9346     Represents the number of leading 0-bits in X, represented as an
9347     integer of mode M, starting at the most significant bit position.
9348     If X is zero, the value is determined by
9349     `CLZ_DEFINED_VALUE_AT_ZERO' (*note Misc::).  Note that this is one
9350     of the few expressions that is not invariant under widening.  The
9351     mode of X must be M or `VOIDmode'.
9352
9353`(ctz:M X)'
9354     Represents the number of trailing 0-bits in X, represented as an
9355     integer of mode M, starting at the least significant bit position.
9356     If X is zero, the value is determined by
9357     `CTZ_DEFINED_VALUE_AT_ZERO' (*note Misc::).  Except for this case,
9358     `ctz(x)' is equivalent to `ffs(X) - 1'.  The mode of X must be M
9359     or `VOIDmode'.
9360
9361`(popcount:M X)'
9362     Represents the number of 1-bits in X, represented as an integer of
9363     mode M.  The mode of X must be M or `VOIDmode'.
9364
9365`(parity:M X)'
9366     Represents the number of 1-bits modulo 2 in X, represented as an
9367     integer of mode M.  The mode of X must be M or `VOIDmode'.
9368
9369`(bswap:M X)'
9370     Represents the value X with the order of bytes reversed, carried
9371     out in mode M, which must be a fixed-point machine mode.  The mode
9372     of X must be M or `VOIDmode'.
9373
9374
9375File: gccint.info,  Node: Comparisons,  Next: Bit-Fields,  Prev: Arithmetic,  Up: RTL
9376
937710.10 Comparison Operations
9378===========================
9379
9380Comparison operators test a relation on two operands and are considered
9381to represent a machine-dependent nonzero value described by, but not
9382necessarily equal to, `STORE_FLAG_VALUE' (*note Misc::) if the relation
9383holds, or zero if it does not, for comparison operators whose results
9384have a `MODE_INT' mode, `FLOAT_STORE_FLAG_VALUE' (*note Misc::) if the
9385relation holds, or zero if it does not, for comparison operators that
9386return floating-point values, and a vector of either
9387`VECTOR_STORE_FLAG_VALUE' (*note Misc::) if the relation holds, or of
9388zeros if it does not, for comparison operators that return vector
9389results.  The mode of the comparison operation is independent of the
9390mode of the data being compared.  If the comparison operation is being
9391tested (e.g., the first operand of an `if_then_else'), the mode must be
9392`VOIDmode'.
9393
9394 There are two ways that comparison operations may be used.  The
9395comparison operators may be used to compare the condition codes `(cc0)'
9396against zero, as in `(eq (cc0) (const_int 0))'.  Such a construct
9397actually refers to the result of the preceding instruction in which the
9398condition codes were set.  The instruction setting the condition code
9399must be adjacent to the instruction using the condition code; only
9400`note' insns may separate them.
9401
9402 Alternatively, a comparison operation may directly compare two data
9403objects.  The mode of the comparison is determined by the operands; they
9404must both be valid for a common machine mode.  A comparison with both
9405operands constant would be invalid as the machine mode could not be
9406deduced from it, but such a comparison should never exist in RTL due to
9407constant folding.
9408
9409 In the example above, if `(cc0)' were last set to `(compare X Y)', the
9410comparison operation is identical to `(eq X Y)'.  Usually only one style
9411of comparisons is supported on a particular machine, but the combine
9412pass will try to merge the operations to produce the `eq' shown in case
9413it exists in the context of the particular insn involved.
9414
9415 Inequality comparisons come in two flavors, signed and unsigned.  Thus,
9416there are distinct expression codes `gt' and `gtu' for signed and
9417unsigned greater-than.  These can produce different results for the same
9418pair of integer values: for example, 1 is signed greater-than -1 but not
9419unsigned greater-than, because -1 when regarded as unsigned is actually
9420`0xffffffff' which is greater than 1.
9421
9422 The signed comparisons are also used for floating point values.
9423Floating point comparisons are distinguished by the machine modes of
9424the operands.
9425
9426`(eq:M X Y)'
9427     `STORE_FLAG_VALUE' if the values represented by X and Y are equal,
9428     otherwise 0.
9429
9430`(ne:M X Y)'
9431     `STORE_FLAG_VALUE' if the values represented by X and Y are not
9432     equal, otherwise 0.
9433
9434`(gt:M X Y)'
9435     `STORE_FLAG_VALUE' if the X is greater than Y.  If they are
9436     fixed-point, the comparison is done in a signed sense.
9437
9438`(gtu:M X Y)'
9439     Like `gt' but does unsigned comparison, on fixed-point numbers
9440     only.
9441
9442`(lt:M X Y)'
9443`(ltu:M X Y)'
9444     Like `gt' and `gtu' but test for "less than".
9445
9446`(ge:M X Y)'
9447`(geu:M X Y)'
9448     Like `gt' and `gtu' but test for "greater than or equal".
9449
9450`(le:M X Y)'
9451`(leu:M X Y)'
9452     Like `gt' and `gtu' but test for "less than or equal".
9453
9454`(if_then_else COND THEN ELSE)'
9455     This is not a comparison operation but is listed here because it is
9456     always used in conjunction with a comparison operation.  To be
9457     precise, COND is a comparison expression.  This expression
9458     represents a choice, according to COND, between the value
9459     represented by THEN and the one represented by ELSE.
9460
9461     On most machines, `if_then_else' expressions are valid only to
9462     express conditional jumps.
9463
9464`(cond [TEST1 VALUE1 TEST2 VALUE2 ...] DEFAULT)'
9465     Similar to `if_then_else', but more general.  Each of TEST1,
9466     TEST2, ... is performed in turn.  The result of this expression is
9467     the VALUE corresponding to the first nonzero test, or DEFAULT if
9468     none of the tests are nonzero expressions.
9469
9470     This is currently not valid for instruction patterns and is
9471     supported only for insn attributes.  *Note Insn Attributes::.
9472
9473
9474File: gccint.info,  Node: Bit-Fields,  Next: Vector Operations,  Prev: Comparisons,  Up: RTL
9475
947610.11 Bit-Fields
9477================
9478
9479Special expression codes exist to represent bit-field instructions.
9480
9481`(sign_extract:M LOC SIZE POS)'
9482     This represents a reference to a sign-extended bit-field contained
9483     or starting in LOC (a memory or register reference).  The bit-field
9484     is SIZE bits wide and starts at bit POS.  The compilation option
9485     `BITS_BIG_ENDIAN' says which end of the memory unit POS counts
9486     from.
9487
9488     If LOC is in memory, its mode must be a single-byte integer mode.
9489     If LOC is in a register, the mode to use is specified by the
9490     operand of the `insv' or `extv' pattern (*note Standard Names::)
9491     and is usually a full-word integer mode, which is the default if
9492     none is specified.
9493
9494     The mode of POS is machine-specific and is also specified in the
9495     `insv' or `extv' pattern.
9496
9497     The mode M is the same as the mode that would be used for LOC if
9498     it were a register.
9499
9500     A `sign_extract' can not appear as an lvalue, or part thereof, in
9501     RTL.
9502
9503`(zero_extract:M LOC SIZE POS)'
9504     Like `sign_extract' but refers to an unsigned or zero-extended
9505     bit-field.  The same sequence of bits are extracted, but they are
9506     filled to an entire word with zeros instead of by sign-extension.
9507
9508     Unlike `sign_extract', this type of expressions can be lvalues in
9509     RTL; they may appear on the left side of an assignment, indicating
9510     insertion of a value into the specified bit-field.
9511
9512
9513File: gccint.info,  Node: Vector Operations,  Next: Conversions,  Prev: Bit-Fields,  Up: RTL
9514
951510.12 Vector Operations
9516=======================
9517
9518All normal RTL expressions can be used with vector modes; they are
9519interpreted as operating on each part of the vector independently.
9520Additionally, there are a few new expressions to describe specific
9521vector operations.
9522
9523`(vec_merge:M VEC1 VEC2 ITEMS)'
9524     This describes a merge operation between two vectors.  The result
9525     is a vector of mode M; its elements are selected from either VEC1
9526     or VEC2.  Which elements are selected is described by ITEMS, which
9527     is a bit mask represented by a `const_int'; a zero bit indicates
9528     the corresponding element in the result vector is taken from VEC2
9529     while a set bit indicates it is taken from VEC1.
9530
9531`(vec_select:M VEC1 SELECTION)'
9532     This describes an operation that selects parts of a vector.  VEC1
9533     is the source vector, and SELECTION is a `parallel' that contains a
9534     `const_int' for each of the subparts of the result vector, giving
9535     the number of the source subpart that should be stored into it.
9536     The result mode M is either the submode for a single element of
9537     VEC1 (if only one subpart is selected), or another vector mode
9538     with that element submode (if multiple subparts are selected).
9539
9540`(vec_concat:M X1 X2)'
9541     Describes a vector concat operation.  The result is a
9542     concatenation of the vectors or scalars X1 and X2; its length is
9543     the sum of the lengths of the two inputs.
9544
9545`(vec_duplicate:M X)'
9546     This operation converts a scalar into a vector or a small vector
9547     into a larger one by duplicating the input values.  The output
9548     vector mode must have the same submodes as the input vector mode
9549     or the scalar modes, and the number of output parts must be an
9550     integer multiple of the number of input parts.
9551
9552
9553
9554File: gccint.info,  Node: Conversions,  Next: RTL Declarations,  Prev: Vector Operations,  Up: RTL
9555
955610.13 Conversions
9557=================
9558
9559All conversions between machine modes must be represented by explicit
9560conversion operations.  For example, an expression which is the sum of
9561a byte and a full word cannot be written as `(plus:SI (reg:QI 34)
9562(reg:SI 80))' because the `plus' operation requires two operands of the
9563same machine mode.  Therefore, the byte-sized operand is enclosed in a
9564conversion operation, as in
9565
9566     (plus:SI (sign_extend:SI (reg:QI 34)) (reg:SI 80))
9567
9568 The conversion operation is not a mere placeholder, because there may
9569be more than one way of converting from a given starting mode to the
9570desired final mode.  The conversion operation code says how to do it.
9571
9572 For all conversion operations, X must not be `VOIDmode' because the
9573mode in which to do the conversion would not be known.  The conversion
9574must either be done at compile-time or X must be placed into a register.
9575
9576`(sign_extend:M X)'
9577     Represents the result of sign-extending the value X to machine
9578     mode M.  M must be a fixed-point mode and X a fixed-point value of
9579     a mode narrower than M.
9580
9581`(zero_extend:M X)'
9582     Represents the result of zero-extending the value X to machine
9583     mode M.  M must be a fixed-point mode and X a fixed-point value of
9584     a mode narrower than M.
9585
9586`(float_extend:M X)'
9587     Represents the result of extending the value X to machine mode M.
9588     M must be a floating point mode and X a floating point value of a
9589     mode narrower than M.
9590
9591`(truncate:M X)'
9592     Represents the result of truncating the value X to machine mode M.
9593     M must be a fixed-point mode and X a fixed-point value of a mode
9594     wider than M.
9595
9596`(ss_truncate:M X)'
9597     Represents the result of truncating the value X to machine mode M,
9598     using signed saturation in the case of overflow.  Both M and the
9599     mode of X must be fixed-point modes.
9600
9601`(us_truncate:M X)'
9602     Represents the result of truncating the value X to machine mode M,
9603     using unsigned saturation in the case of overflow.  Both M and the
9604     mode of X must be fixed-point modes.
9605
9606`(float_truncate:M X)'
9607     Represents the result of truncating the value X to machine mode M.
9608     M must be a floating point mode and X a floating point value of a
9609     mode wider than M.
9610
9611`(float:M X)'
9612     Represents the result of converting fixed point value X, regarded
9613     as signed, to floating point mode M.
9614
9615`(unsigned_float:M X)'
9616     Represents the result of converting fixed point value X, regarded
9617     as unsigned, to floating point mode M.
9618
9619`(fix:M X)'
9620     When M is a floating-point mode, represents the result of
9621     converting floating point value X (valid for mode M) to an
9622     integer, still represented in floating point mode M, by rounding
9623     towards zero.
9624
9625     When M is a fixed-point mode, represents the result of converting
9626     floating point value X to mode M, regarded as signed.  How
9627     rounding is done is not specified, so this operation may be used
9628     validly in compiling C code only for integer-valued operands.
9629
9630`(unsigned_fix:M X)'
9631     Represents the result of converting floating point value X to
9632     fixed point mode M, regarded as unsigned.  How rounding is done is
9633     not specified.
9634
9635`(fract_convert:M X)'
9636     Represents the result of converting fixed-point value X to
9637     fixed-point mode M, signed integer value X to fixed-point mode M,
9638     floating-point value X to fixed-point mode M, fixed-point value X
9639     to integer mode M regarded as signed, or fixed-point value X to
9640     floating-point mode M.  When overflows or underflows happen, the
9641     results are undefined.
9642
9643`(sat_fract:M X)'
9644     Represents the result of converting fixed-point value X to
9645     fixed-point mode M, signed integer value X to fixed-point mode M,
9646     or floating-point value X to fixed-point mode M.  When overflows
9647     or underflows happen, the results are saturated to the maximum or
9648     the minimum.
9649
9650`(unsigned_fract_convert:M X)'
9651     Represents the result of converting fixed-point value X to integer
9652     mode M regarded as unsigned, or unsigned integer value X to
9653     fixed-point mode M.  When overflows or underflows happen, the
9654     results are undefined.
9655
9656`(unsigned_sat_fract:M X)'
9657     Represents the result of converting unsigned integer value X to
9658     fixed-point mode M.  When overflows or underflows happen, the
9659     results are saturated to the maximum or the minimum.
9660
9661
9662File: gccint.info,  Node: RTL Declarations,  Next: Side Effects,  Prev: Conversions,  Up: RTL
9663
966410.14 Declarations
9665==================
9666
9667Declaration expression codes do not represent arithmetic operations but
9668rather state assertions about their operands.
9669
9670`(strict_low_part (subreg:M (reg:N R) 0))'
9671     This expression code is used in only one context: as the
9672     destination operand of a `set' expression.  In addition, the
9673     operand of this expression must be a non-paradoxical `subreg'
9674     expression.
9675
9676     The presence of `strict_low_part' says that the part of the
9677     register which is meaningful in mode N, but is not part of mode M,
9678     is not to be altered.  Normally, an assignment to such a subreg is
9679     allowed to have undefined effects on the rest of the register when
9680     M is less than a word.
9681
9682
9683File: gccint.info,  Node: Side Effects,  Next: Incdec,  Prev: RTL Declarations,  Up: RTL
9684
968510.15 Side Effect Expressions
9686=============================
9687
9688The expression codes described so far represent values, not actions.
9689But machine instructions never produce values; they are meaningful only
9690for their side effects on the state of the machine.  Special expression
9691codes are used to represent side effects.
9692
9693 The body of an instruction is always one of these side effect codes;
9694the codes described above, which represent values, appear only as the
9695operands of these.
9696
9697`(set LVAL X)'
9698     Represents the action of storing the value of X into the place
9699     represented by LVAL.  LVAL must be an expression representing a
9700     place that can be stored in: `reg' (or `subreg', `strict_low_part'
9701     or `zero_extract'), `mem', `pc', `parallel', or `cc0'.
9702
9703     If LVAL is a `reg', `subreg' or `mem', it has a machine mode; then
9704     X must be valid for that mode.
9705
9706     If LVAL is a `reg' whose machine mode is less than the full width
9707     of the register, then it means that the part of the register
9708     specified by the machine mode is given the specified value and the
9709     rest of the register receives an undefined value.  Likewise, if
9710     LVAL is a `subreg' whose machine mode is narrower than the mode of
9711     the register, the rest of the register can be changed in an
9712     undefined way.
9713
9714     If LVAL is a `strict_low_part' of a subreg, then the part of the
9715     register specified by the machine mode of the `subreg' is given
9716     the value X and the rest of the register is not changed.
9717
9718     If LVAL is a `zero_extract', then the referenced part of the
9719     bit-field (a memory or register reference) specified by the
9720     `zero_extract' is given the value X and the rest of the bit-field
9721     is not changed.  Note that `sign_extract' can not appear in LVAL.
9722
9723     If LVAL is `(cc0)', it has no machine mode, and X may be either a
9724     `compare' expression or a value that may have any mode.  The
9725     latter case represents a "test" instruction.  The expression `(set
9726     (cc0) (reg:M N))' is equivalent to `(set (cc0) (compare (reg:M N)
9727     (const_int 0)))'.  Use the former expression to save space during
9728     the compilation.
9729
9730     If LVAL is a `parallel', it is used to represent the case of a
9731     function returning a structure in multiple registers.  Each element
9732     of the `parallel' is an `expr_list' whose first operand is a `reg'
9733     and whose second operand is a `const_int' representing the offset
9734     (in bytes) into the structure at which the data in that register
9735     corresponds.  The first element may be null to indicate that the
9736     structure is also passed partly in memory.
9737
9738     If LVAL is `(pc)', we have a jump instruction, and the
9739     possibilities for X are very limited.  It may be a `label_ref'
9740     expression (unconditional jump).  It may be an `if_then_else'
9741     (conditional jump), in which case either the second or the third
9742     operand must be `(pc)' (for the case which does not jump) and the
9743     other of the two must be a `label_ref' (for the case which does
9744     jump).  X may also be a `mem' or `(plus:SI (pc) Y)', where Y may
9745     be a `reg' or a `mem'; these unusual patterns are used to
9746     represent jumps through branch tables.
9747
9748     If LVAL is neither `(cc0)' nor `(pc)', the mode of LVAL must not
9749     be `VOIDmode' and the mode of X must be valid for the mode of LVAL.
9750
9751     LVAL is customarily accessed with the `SET_DEST' macro and X with
9752     the `SET_SRC' macro.
9753
9754`(return)'
9755     As the sole expression in a pattern, represents a return from the
9756     current function, on machines where this can be done with one
9757     instruction, such as VAXen.  On machines where a multi-instruction
9758     "epilogue" must be executed in order to return from the function,
9759     returning is done by jumping to a label which precedes the
9760     epilogue, and the `return' expression code is never used.
9761
9762     Inside an `if_then_else' expression, represents the value to be
9763     placed in `pc' to return to the caller.
9764
9765     Note that an insn pattern of `(return)' is logically equivalent to
9766     `(set (pc) (return))', but the latter form is never used.
9767
9768`(simple_return)'
9769     Like `(return)', but truly represents only a function return, while
9770     `(return)' may represent an insn that also performs other functions
9771     of the function epilogue.  Like `(return)', this may also occur in
9772     conditional jumps.
9773
9774`(call FUNCTION NARGS)'
9775     Represents a function call.  FUNCTION is a `mem' expression whose
9776     address is the address of the function to be called.  NARGS is an
9777     expression which can be used for two purposes: on some machines it
9778     represents the number of bytes of stack argument; on others, it
9779     represents the number of argument registers.
9780
9781     Each machine has a standard machine mode which FUNCTION must have.
9782     The machine description defines macro `FUNCTION_MODE' to expand
9783     into the requisite mode name.  The purpose of this mode is to
9784     specify what kind of addressing is allowed, on machines where the
9785     allowed kinds of addressing depend on the machine mode being
9786     addressed.
9787
9788`(clobber X)'
9789     Represents the storing or possible storing of an unpredictable,
9790     undescribed value into X, which must be a `reg', `scratch',
9791     `parallel' or `mem' expression.
9792
9793     One place this is used is in string instructions that store
9794     standard values into particular hard registers.  It may not be
9795     worth the trouble to describe the values that are stored, but it
9796     is essential to inform the compiler that the registers will be
9797     altered, lest it attempt to keep data in them across the string
9798     instruction.
9799
9800     If X is `(mem:BLK (const_int 0))' or `(mem:BLK (scratch))', it
9801     means that all memory locations must be presumed clobbered.  If X
9802     is a `parallel', it has the same meaning as a `parallel' in a
9803     `set' expression.
9804
9805     Note that the machine description classifies certain hard
9806     registers as "call-clobbered".  All function call instructions are
9807     assumed by default to clobber these registers, so there is no need
9808     to use `clobber' expressions to indicate this fact.  Also, each
9809     function call is assumed to have the potential to alter any memory
9810     location, unless the function is declared `const'.
9811
9812     If the last group of expressions in a `parallel' are each a
9813     `clobber' expression whose arguments are `reg' or `match_scratch'
9814     (*note RTL Template::) expressions, the combiner phase can add the
9815     appropriate `clobber' expressions to an insn it has constructed
9816     when doing so will cause a pattern to be matched.
9817
9818     This feature can be used, for example, on a machine that whose
9819     multiply and add instructions don't use an MQ register but which
9820     has an add-accumulate instruction that does clobber the MQ
9821     register.  Similarly, a combined instruction might require a
9822     temporary register while the constituent instructions might not.
9823
9824     When a `clobber' expression for a register appears inside a
9825     `parallel' with other side effects, the register allocator
9826     guarantees that the register is unoccupied both before and after
9827     that insn if it is a hard register clobber.  For pseudo-register
9828     clobber, the register allocator and the reload pass do not assign
9829     the same hard register to the clobber and the input operands if
9830     there is an insn alternative containing the `&' constraint (*note
9831     Modifiers::) for the clobber and the hard register is in register
9832     classes of the clobber in the alternative.  You can clobber either
9833     a specific hard register, a pseudo register, or a `scratch'
9834     expression; in the latter two cases, GCC will allocate a hard
9835     register that is available there for use as a temporary.
9836
9837     For instructions that require a temporary register, you should use
9838     `scratch' instead of a pseudo-register because this will allow the
9839     combiner phase to add the `clobber' when required.  You do this by
9840     coding (`clobber' (`match_scratch' ...)).  If you do clobber a
9841     pseudo register, use one which appears nowhere else--generate a
9842     new one each time.  Otherwise, you may confuse CSE.
9843
9844     There is one other known use for clobbering a pseudo register in a
9845     `parallel': when one of the input operands of the insn is also
9846     clobbered by the insn.  In this case, using the same pseudo
9847     register in the clobber and elsewhere in the insn produces the
9848     expected results.
9849
9850`(use X)'
9851     Represents the use of the value of X.  It indicates that the value
9852     in X at this point in the program is needed, even though it may
9853     not be apparent why this is so.  Therefore, the compiler will not
9854     attempt to delete previous instructions whose only effect is to
9855     store a value in X.  X must be a `reg' expression.
9856
9857     In some situations, it may be tempting to add a `use' of a
9858     register in a `parallel' to describe a situation where the value
9859     of a special register will modify the behavior of the instruction.
9860     A hypothetical example might be a pattern for an addition that can
9861     either wrap around or use saturating addition depending on the
9862     value of a special control register:
9863
9864          (parallel [(set (reg:SI 2) (unspec:SI [(reg:SI 3)
9865                                                 (reg:SI 4)] 0))
9866                     (use (reg:SI 1))])
9867
9868     This will not work, several of the optimizers only look at
9869     expressions locally; it is very likely that if you have multiple
9870     insns with identical inputs to the `unspec', they will be
9871     optimized away even if register 1 changes in between.
9872
9873     This means that `use' can _only_ be used to describe that the
9874     register is live.  You should think twice before adding `use'
9875     statements, more often you will want to use `unspec' instead.  The
9876     `use' RTX is most commonly useful to describe that a fixed
9877     register is implicitly used in an insn.  It is also safe to use in
9878     patterns where the compiler knows for other reasons that the result
9879     of the whole pattern is variable, such as `movmemM' or `call'
9880     patterns.
9881
9882     During the reload phase, an insn that has a `use' as pattern can
9883     carry a reg_equal note.  These `use' insns will be deleted before
9884     the reload phase exits.
9885
9886     During the delayed branch scheduling phase, X may be an insn.
9887     This indicates that X previously was located at this place in the
9888     code and its data dependencies need to be taken into account.
9889     These `use' insns will be deleted before the delayed branch
9890     scheduling phase exits.
9891
9892`(parallel [X0 X1 ...])'
9893     Represents several side effects performed in parallel.  The square
9894     brackets stand for a vector; the operand of `parallel' is a vector
9895     of expressions.  X0, X1 and so on are individual side effect
9896     expressions--expressions of code `set', `call', `return',
9897     `simple_return', `clobber' or `use'.
9898
9899     "In parallel" means that first all the values used in the
9900     individual side-effects are computed, and second all the actual
9901     side-effects are performed.  For example,
9902
9903          (parallel [(set (reg:SI 1) (mem:SI (reg:SI 1)))
9904                     (set (mem:SI (reg:SI 1)) (reg:SI 1))])
9905
9906     says unambiguously that the values of hard register 1 and the
9907     memory location addressed by it are interchanged.  In both places
9908     where `(reg:SI 1)' appears as a memory address it refers to the
9909     value in register 1 _before_ the execution of the insn.
9910
9911     It follows that it is _incorrect_ to use `parallel' and expect the
9912     result of one `set' to be available for the next one.  For
9913     example, people sometimes attempt to represent a jump-if-zero
9914     instruction this way:
9915
9916          (parallel [(set (cc0) (reg:SI 34))
9917                     (set (pc) (if_then_else
9918                                  (eq (cc0) (const_int 0))
9919                                  (label_ref ...)
9920                                  (pc)))])
9921
9922     But this is incorrect, because it says that the jump condition
9923     depends on the condition code value _before_ this instruction, not
9924     on the new value that is set by this instruction.
9925
9926     Peephole optimization, which takes place together with final
9927     assembly code output, can produce insns whose patterns consist of
9928     a `parallel' whose elements are the operands needed to output the
9929     resulting assembler code--often `reg', `mem' or constant
9930     expressions.  This would not be well-formed RTL at any other stage
9931     in compilation, but it is ok then because no further optimization
9932     remains to be done.  However, the definition of the macro
9933     `NOTICE_UPDATE_CC', if any, must deal with such insns if you
9934     define any peephole optimizations.
9935
9936`(cond_exec [COND EXPR])'
9937     Represents a conditionally executed expression.  The EXPR is
9938     executed only if the COND is nonzero.  The COND expression must
9939     not have side-effects, but the EXPR may very well have
9940     side-effects.
9941
9942`(sequence [INSNS ...])'
9943     Represents a sequence of insns.  Each of the INSNS that appears in
9944     the vector is suitable for appearing in the chain of insns, so it
9945     must be an `insn', `jump_insn', `call_insn', `code_label',
9946     `barrier' or `note'.
9947
9948     A `sequence' RTX is never placed in an actual insn during RTL
9949     generation.  It represents the sequence of insns that result from a
9950     `define_expand' _before_ those insns are passed to `emit_insn' to
9951     insert them in the chain of insns.  When actually inserted, the
9952     individual sub-insns are separated out and the `sequence' is
9953     forgotten.
9954
9955     After delay-slot scheduling is completed, an insn and all the
9956     insns that reside in its delay slots are grouped together into a
9957     `sequence'.  The insn requiring the delay slot is the first insn
9958     in the vector; subsequent insns are to be placed in the delay slot.
9959
9960     `INSN_ANNULLED_BRANCH_P' is set on an insn in a delay slot to
9961     indicate that a branch insn should be used that will conditionally
9962     annul the effect of the insns in the delay slots.  In such a case,
9963     `INSN_FROM_TARGET_P' indicates that the insn is from the target of
9964     the branch and should be executed only if the branch is taken;
9965     otherwise the insn should be executed only if the branch is not
9966     taken.  *Note Delay Slots::.
9967
9968 These expression codes appear in place of a side effect, as the body of
9969an insn, though strictly speaking they do not always describe side
9970effects as such:
9971
9972`(asm_input S)'
9973     Represents literal assembler code as described by the string S.
9974
9975`(unspec [OPERANDS ...] INDEX)'
9976`(unspec_volatile [OPERANDS ...] INDEX)'
9977     Represents a machine-specific operation on OPERANDS.  INDEX
9978     selects between multiple machine-specific operations.
9979     `unspec_volatile' is used for volatile operations and operations
9980     that may trap; `unspec' is used for other operations.
9981
9982     These codes may appear inside a `pattern' of an insn, inside a
9983     `parallel', or inside an expression.
9984
9985`(addr_vec:M [LR0 LR1 ...])'
9986     Represents a table of jump addresses.  The vector elements LR0,
9987     etc., are `label_ref' expressions.  The mode M specifies how much
9988     space is given to each address; normally M would be `Pmode'.
9989
9990`(addr_diff_vec:M BASE [LR0 LR1 ...] MIN MAX FLAGS)'
9991     Represents a table of jump addresses expressed as offsets from
9992     BASE.  The vector elements LR0, etc., are `label_ref' expressions
9993     and so is BASE.  The mode M specifies how much space is given to
9994     each address-difference.  MIN and MAX are set up by branch
9995     shortening and hold a label with a minimum and a maximum address,
9996     respectively.  FLAGS indicates the relative position of BASE, MIN
9997     and MAX to the containing insn and of MIN and MAX to BASE.  See
9998     rtl.def for details.
9999
10000`(prefetch:M ADDR RW LOCALITY)'
10001     Represents prefetch of memory at address ADDR.  Operand RW is 1 if
10002     the prefetch is for data to be written, 0 otherwise; targets that
10003     do not support write prefetches should treat this as a normal
10004     prefetch.  Operand LOCALITY specifies the amount of temporal
10005     locality; 0 if there is none or 1, 2, or 3 for increasing levels
10006     of temporal locality; targets that do not support locality hints
10007     should ignore this.
10008
10009     This insn is used to minimize cache-miss latency by moving data
10010     into a cache before it is accessed.  It should use only
10011     non-faulting data prefetch instructions.
10012
10013
10014File: gccint.info,  Node: Incdec,  Next: Assembler,  Prev: Side Effects,  Up: RTL
10015
1001610.16 Embedded Side-Effects on Addresses
10017========================================
10018
10019Six special side-effect expression codes appear as memory addresses.
10020
10021`(pre_dec:M X)'
10022     Represents the side effect of decrementing X by a standard amount
10023     and represents also the value that X has after being decremented.
10024     X must be a `reg' or `mem', but most machines allow only a `reg'.
10025     M must be the machine mode for pointers on the machine in use.
10026     The amount X is decremented by is the length in bytes of the
10027     machine mode of the containing memory reference of which this
10028     expression serves as the address.  Here is an example of its use:
10029
10030          (mem:DF (pre_dec:SI (reg:SI 39)))
10031
10032     This says to decrement pseudo register 39 by the length of a
10033     `DFmode' value and use the result to address a `DFmode' value.
10034
10035`(pre_inc:M X)'
10036     Similar, but specifies incrementing X instead of decrementing it.
10037
10038`(post_dec:M X)'
10039     Represents the same side effect as `pre_dec' but a different
10040     value.  The value represented here is the value X has before being
10041     decremented.
10042
10043`(post_inc:M X)'
10044     Similar, but specifies incrementing X instead of decrementing it.
10045
10046`(post_modify:M X Y)'
10047     Represents the side effect of setting X to Y and represents X
10048     before X is modified.  X must be a `reg' or `mem', but most
10049     machines allow only a `reg'.  M must be the machine mode for
10050     pointers on the machine in use.
10051
10052     The expression Y must be one of three forms: `(plus:M X Z)',
10053     `(minus:M X Z)', or `(plus:M X I)', where Z is an index register
10054     and I is a constant.
10055
10056     Here is an example of its use:
10057
10058          (mem:SF (post_modify:SI (reg:SI 42) (plus (reg:SI 42)
10059                                                    (reg:SI 48))))
10060
10061     This says to modify pseudo register 42 by adding the contents of
10062     pseudo register 48 to it, after the use of what ever 42 points to.
10063
10064`(pre_modify:M X EXPR)'
10065     Similar except side effects happen before the use.
10066
10067 These embedded side effect expressions must be used with care.
10068Instruction patterns may not use them.  Until the `flow' pass of the
10069compiler, they may occur only to represent pushes onto the stack.  The
10070`flow' pass finds cases where registers are incremented or decremented
10071in one instruction and used as an address shortly before or after;
10072these cases are then transformed to use pre- or post-increment or
10073-decrement.
10074
10075 If a register used as the operand of these expressions is used in
10076another address in an insn, the original value of the register is used.
10077Uses of the register outside of an address are not permitted within the
10078same insn as a use in an embedded side effect expression because such
10079insns behave differently on different machines and hence must be treated
10080as ambiguous and disallowed.
10081
10082 An instruction that can be represented with an embedded side effect
10083could also be represented using `parallel' containing an additional
10084`set' to describe how the address register is altered.  This is not
10085done because machines that allow these operations at all typically
10086allow them wherever a memory address is called for.  Describing them as
10087additional parallel stores would require doubling the number of entries
10088in the machine description.
10089
10090
10091File: gccint.info,  Node: Assembler,  Next: Debug Information,  Prev: Incdec,  Up: RTL
10092
1009310.17 Assembler Instructions as Expressions
10094===========================================
10095
10096The RTX code `asm_operands' represents a value produced by a
10097user-specified assembler instruction.  It is used to represent an `asm'
10098statement with arguments.  An `asm' statement with a single output
10099operand, like this:
10100
10101     asm ("foo %1,%2,%0" : "=a" (outputvar) : "g" (x + y), "di" (*z));
10102
10103is represented using a single `asm_operands' RTX which represents the
10104value that is stored in `outputvar':
10105
10106     (set RTX-FOR-OUTPUTVAR
10107          (asm_operands "foo %1,%2,%0" "a" 0
10108                        [RTX-FOR-ADDITION-RESULT RTX-FOR-*Z]
10109                        [(asm_input:M1 "g")
10110                         (asm_input:M2 "di")]))
10111
10112Here the operands of the `asm_operands' RTX are the assembler template
10113string, the output-operand's constraint, the index-number of the output
10114operand among the output operands specified, a vector of input operand
10115RTX's, and a vector of input-operand modes and constraints.  The mode
10116M1 is the mode of the sum `x+y'; M2 is that of `*z'.
10117
10118 When an `asm' statement has multiple output values, its insn has
10119several such `set' RTX's inside of a `parallel'.  Each `set' contains
10120an `asm_operands'; all of these share the same assembler template and
10121vectors, but each contains the constraint for the respective output
10122operand.  They are also distinguished by the output-operand index
10123number, which is 0, 1, ... for successive output operands.
10124
10125
10126File: gccint.info,  Node: Debug Information,  Next: Insns,  Prev: Assembler,  Up: RTL
10127
1012810.18 Variable Location Debug Information in RTL
10129================================================
10130
10131Variable tracking relies on `MEM_EXPR' and `REG_EXPR' annotations to
10132determine what user variables memory and register references refer to.
10133
10134 Variable tracking at assignments uses these notes only when they refer
10135to variables that live at fixed locations (e.g., addressable variables,
10136global non-automatic variables).  For variables whose location may
10137vary, it relies on the following types of notes.
10138
10139`(var_location:MODE VAR EXP STAT)'
10140     Binds variable `var', a tree, to value EXP, an RTL expression.  It
10141     appears only in `NOTE_INSN_VAR_LOCATION' and `DEBUG_INSN's, with
10142     slightly different meanings.  MODE, if present, represents the
10143     mode of EXP, which is useful if it is a modeless expression.  STAT
10144     is only meaningful in notes, indicating whether the variable is
10145     known to be initialized or uninitialized.
10146
10147`(debug_expr:MODE DECL)'
10148     Stands for the value bound to the `DEBUG_EXPR_DECL' DECL, that
10149     points back to it, within value expressions in `VAR_LOCATION'
10150     nodes.
10151
10152
10153
10154File: gccint.info,  Node: Insns,  Next: Calls,  Prev: Debug Information,  Up: RTL
10155
1015610.19 Insns
10157===========
10158
10159The RTL representation of the code for a function is a doubly-linked
10160chain of objects called "insns".  Insns are expressions with special
10161codes that are used for no other purpose.  Some insns are actual
10162instructions; others represent dispatch tables for `switch' statements;
10163others represent labels to jump to or various sorts of declarative
10164information.
10165
10166 In addition to its own specific data, each insn must have a unique
10167id-number that distinguishes it from all other insns in the current
10168function (after delayed branch scheduling, copies of an insn with the
10169same id-number may be present in multiple places in a function, but
10170these copies will always be identical and will only appear inside a
10171`sequence'), and chain pointers to the preceding and following insns.
10172These three fields occupy the same position in every insn, independent
10173of the expression code of the insn.  They could be accessed with `XEXP'
10174and `XINT', but instead three special macros are always used:
10175
10176`INSN_UID (I)'
10177     Accesses the unique id of insn I.
10178
10179`PREV_INSN (I)'
10180     Accesses the chain pointer to the insn preceding I.  If I is the
10181     first insn, this is a null pointer.
10182
10183`NEXT_INSN (I)'
10184     Accesses the chain pointer to the insn following I.  If I is the
10185     last insn, this is a null pointer.
10186
10187 The first insn in the chain is obtained by calling `get_insns'; the
10188last insn is the result of calling `get_last_insn'.  Within the chain
10189delimited by these insns, the `NEXT_INSN' and `PREV_INSN' pointers must
10190always correspond: if INSN is not the first insn,
10191
10192     NEXT_INSN (PREV_INSN (INSN)) == INSN
10193
10194is always true and if INSN is not the last insn,
10195
10196     PREV_INSN (NEXT_INSN (INSN)) == INSN
10197
10198is always true.
10199
10200 After delay slot scheduling, some of the insns in the chain might be
10201`sequence' expressions, which contain a vector of insns.  The value of
10202`NEXT_INSN' in all but the last of these insns is the next insn in the
10203vector; the value of `NEXT_INSN' of the last insn in the vector is the
10204same as the value of `NEXT_INSN' for the `sequence' in which it is
10205contained.  Similar rules apply for `PREV_INSN'.
10206
10207 This means that the above invariants are not necessarily true for insns
10208inside `sequence' expressions.  Specifically, if INSN is the first insn
10209in a `sequence', `NEXT_INSN (PREV_INSN (INSN))' is the insn containing
10210the `sequence' expression, as is the value of `PREV_INSN (NEXT_INSN
10211(INSN))' if INSN is the last insn in the `sequence' expression.  You
10212can use these expressions to find the containing `sequence' expression.
10213
10214 Every insn has one of the following expression codes:
10215
10216`insn'
10217     The expression code `insn' is used for instructions that do not
10218     jump and do not do function calls.  `sequence' expressions are
10219     always contained in insns with code `insn' even if one of those
10220     insns should jump or do function calls.
10221
10222     Insns with code `insn' have four additional fields beyond the three
10223     mandatory ones listed above.  These four are described in a table
10224     below.
10225
10226`jump_insn'
10227     The expression code `jump_insn' is used for instructions that may
10228     jump (or, more generally, may contain `label_ref' expressions to
10229     which `pc' can be set in that instruction).  If there is an
10230     instruction to return from the current function, it is recorded as
10231     a `jump_insn'.
10232
10233     `jump_insn' insns have the same extra fields as `insn' insns,
10234     accessed in the same way and in addition contain a field
10235     `JUMP_LABEL' which is defined once jump optimization has completed.
10236
10237     For simple conditional and unconditional jumps, this field contains
10238     the `code_label' to which this insn will (possibly conditionally)
10239     branch.  In a more complex jump, `JUMP_LABEL' records one of the
10240     labels that the insn refers to; other jump target labels are
10241     recorded as `REG_LABEL_TARGET' notes.  The exception is `addr_vec'
10242     and `addr_diff_vec', where `JUMP_LABEL' is `NULL_RTX' and the only
10243     way to find the labels is to scan the entire body of the insn.
10244
10245     Return insns count as jumps, but since they do not refer to any
10246     labels, their `JUMP_LABEL' is `NULL_RTX'.
10247
10248`call_insn'
10249     The expression code `call_insn' is used for instructions that may
10250     do function calls.  It is important to distinguish these
10251     instructions because they imply that certain registers and memory
10252     locations may be altered unpredictably.
10253
10254     `call_insn' insns have the same extra fields as `insn' insns,
10255     accessed in the same way and in addition contain a field
10256     `CALL_INSN_FUNCTION_USAGE', which contains a list (chain of
10257     `expr_list' expressions) containing `use', `clobber' and sometimes
10258     `set' expressions that denote hard registers and `mem's used or
10259     clobbered by the called function.
10260
10261     A `mem' generally points to a stack slot in which arguments passed
10262     to the libcall by reference (*note TARGET_PASS_BY_REFERENCE:
10263     Register Arguments.) are stored.  If the argument is caller-copied
10264     (*note TARGET_CALLEE_COPIES: Register Arguments.), the stack slot
10265     will be mentioned in `clobber' and `use' entries; if it's
10266     callee-copied, only a `use' will appear, and the `mem' may point
10267     to addresses that are not stack slots.
10268
10269     Registers occurring inside a `clobber' in this list augment
10270     registers specified in `CALL_USED_REGISTERS' (*note Register
10271     Basics::).
10272
10273     If the list contains a `set' involving two registers, it indicates
10274     that the function returns one of its arguments.  Such a `set' may
10275     look like a no-op if the same register holds the argument and the
10276     return value.
10277
10278`code_label'
10279     A `code_label' insn represents a label that a jump insn can jump
10280     to.  It contains two special fields of data in addition to the
10281     three standard ones.  `CODE_LABEL_NUMBER' is used to hold the
10282     "label number", a number that identifies this label uniquely among
10283     all the labels in the compilation (not just in the current
10284     function).  Ultimately, the label is represented in the assembler
10285     output as an assembler label, usually of the form `LN' where N is
10286     the label number.
10287
10288     When a `code_label' appears in an RTL expression, it normally
10289     appears within a `label_ref' which represents the address of the
10290     label, as a number.
10291
10292     Besides as a `code_label', a label can also be represented as a
10293     `note' of type `NOTE_INSN_DELETED_LABEL'.
10294
10295     The field `LABEL_NUSES' is only defined once the jump optimization
10296     phase is completed.  It contains the number of times this label is
10297     referenced in the current function.
10298
10299     The field `LABEL_KIND' differentiates four different types of
10300     labels: `LABEL_NORMAL', `LABEL_STATIC_ENTRY',
10301     `LABEL_GLOBAL_ENTRY', and `LABEL_WEAK_ENTRY'.  The only labels
10302     that do not have type `LABEL_NORMAL' are "alternate entry points"
10303     to the current function.  These may be static (visible only in the
10304     containing translation unit), global (exposed to all translation
10305     units), or weak (global, but can be overridden by another symbol
10306     with the same name).
10307
10308     Much of the compiler treats all four kinds of label identically.
10309     Some of it needs to know whether or not a label is an alternate
10310     entry point; for this purpose, the macro `LABEL_ALT_ENTRY_P' is
10311     provided.  It is equivalent to testing whether `LABEL_KIND (label)
10312     == LABEL_NORMAL'.  The only place that cares about the distinction
10313     between static, global, and weak alternate entry points, besides
10314     the front-end code that creates them, is the function
10315     `output_alternate_entry_point', in `final.c'.
10316
10317     To set the kind of a label, use the `SET_LABEL_KIND' macro.
10318
10319`barrier'
10320     Barriers are placed in the instruction stream when control cannot
10321     flow past them.  They are placed after unconditional jump
10322     instructions to indicate that the jumps are unconditional and
10323     after calls to `volatile' functions, which do not return (e.g.,
10324     `exit').  They contain no information beyond the three standard
10325     fields.
10326
10327`note'
10328     `note' insns are used to represent additional debugging and
10329     declarative information.  They contain two nonstandard fields, an
10330     integer which is accessed with the macro `NOTE_LINE_NUMBER' and a
10331     string accessed with `NOTE_SOURCE_FILE'.
10332
10333     If `NOTE_LINE_NUMBER' is positive, the note represents the
10334     position of a source line and `NOTE_SOURCE_FILE' is the source
10335     file name that the line came from.  These notes control generation
10336     of line number data in the assembler output.
10337
10338     Otherwise, `NOTE_LINE_NUMBER' is not really a line number but a
10339     code with one of the following values (and `NOTE_SOURCE_FILE' must
10340     contain a null pointer):
10341
10342    `NOTE_INSN_DELETED'
10343          Such a note is completely ignorable.  Some passes of the
10344          compiler delete insns by altering them into notes of this
10345          kind.
10346
10347    `NOTE_INSN_DELETED_LABEL'
10348          This marks what used to be a `code_label', but was not used
10349          for other purposes than taking its address and was
10350          transformed to mark that no code jumps to it.
10351
10352    `NOTE_INSN_BLOCK_BEG'
10353    `NOTE_INSN_BLOCK_END'
10354          These types of notes indicate the position of the beginning
10355          and end of a level of scoping of variable names.  They
10356          control the output of debugging information.
10357
10358    `NOTE_INSN_EH_REGION_BEG'
10359    `NOTE_INSN_EH_REGION_END'
10360          These types of notes indicate the position of the beginning
10361          and end of a level of scoping for exception handling.
10362          `NOTE_BLOCK_NUMBER' identifies which `CODE_LABEL' or `note'
10363          of type `NOTE_INSN_DELETED_LABEL' is associated with the
10364          given region.
10365
10366    `NOTE_INSN_LOOP_BEG'
10367    `NOTE_INSN_LOOP_END'
10368          These types of notes indicate the position of the beginning
10369          and end of a `while' or `for' loop.  They enable the loop
10370          optimizer to find loops quickly.
10371
10372    `NOTE_INSN_LOOP_CONT'
10373          Appears at the place in a loop that `continue' statements
10374          jump to.
10375
10376    `NOTE_INSN_LOOP_VTOP'
10377          This note indicates the place in a loop where the exit test
10378          begins for those loops in which the exit test has been
10379          duplicated.  This position becomes another virtual start of
10380          the loop when considering loop invariants.
10381
10382    `NOTE_INSN_FUNCTION_BEG'
10383          Appears at the start of the function body, after the function
10384          prologue.
10385
10386    `NOTE_INSN_VAR_LOCATION'
10387          This note is used to generate variable location debugging
10388          information.  It indicates that the user variable in its
10389          `VAR_LOCATION' operand is at the location given in the RTL
10390          expression, or holds a value that can be computed by
10391          evaluating the RTL expression from that static point in the
10392          program up to the next such note for the same user variable.
10393
10394
10395     These codes are printed symbolically when they appear in debugging
10396     dumps.
10397
10398`debug_insn'
10399     The expression code `debug_insn' is used for pseudo-instructions
10400     that hold debugging information for variable tracking at
10401     assignments (see `-fvar-tracking-assignments' option).  They are
10402     the RTL representation of `GIMPLE_DEBUG' statements (*note
10403     `GIMPLE_DEBUG'::), with a `VAR_LOCATION' operand that binds a user
10404     variable tree to an RTL representation of the `value' in the
10405     corresponding statement.  A `DEBUG_EXPR' in it stands for the
10406     value bound to the corresponding `DEBUG_EXPR_DECL'.
10407
10408     Throughout optimization passes, binding information is kept in
10409     pseudo-instruction form, so that, unlike notes, it gets the same
10410     treatment and adjustments that regular instructions would.  It is
10411     the variable tracking pass that turns these pseudo-instructions
10412     into var location notes, analyzing control flow, value
10413     equivalences and changes to registers and memory referenced in
10414     value expressions, propagating the values of debug temporaries and
10415     determining expressions that can be used to compute the value of
10416     each user variable at as many points (ranges, actually) in the
10417     program as possible.
10418
10419     Unlike `NOTE_INSN_VAR_LOCATION', the value expression in an
10420     `INSN_VAR_LOCATION' denotes a value at that specific point in the
10421     program, rather than an expression that can be evaluated at any
10422     later point before an overriding `VAR_LOCATION' is encountered.
10423     E.g., if a user variable is bound to a `REG' and then a subsequent
10424     insn modifies the `REG', the note location would keep mapping the
10425     user variable to the register across the insn, whereas the insn
10426     location would keep the variable bound to the value, so that the
10427     variable tracking pass would emit another location note for the
10428     variable at the point in which the register is modified.
10429
10430
10431 The machine mode of an insn is normally `VOIDmode', but some phases
10432use the mode for various purposes.
10433
10434 The common subexpression elimination pass sets the mode of an insn to
10435`QImode' when it is the first insn in a block that has already been
10436processed.
10437
10438 The second Haifa scheduling pass, for targets that can multiple issue,
10439sets the mode of an insn to `TImode' when it is believed that the
10440instruction begins an issue group.  That is, when the instruction
10441cannot issue simultaneously with the previous.  This may be relied on
10442by later passes, in particular machine-dependent reorg.
10443
10444 Here is a table of the extra fields of `insn', `jump_insn' and
10445`call_insn' insns:
10446
10447`PATTERN (I)'
10448     An expression for the side effect performed by this insn.  This
10449     must be one of the following codes: `set', `call', `use',
10450     `clobber', `return', `simple_return', `asm_input', `asm_output',
10451     `addr_vec', `addr_diff_vec', `trap_if', `unspec',
10452     `unspec_volatile', `parallel', `cond_exec', or `sequence'.  If it
10453     is a `parallel', each element of the `parallel' must be one these
10454     codes, except that `parallel' expressions cannot be nested and
10455     `addr_vec' and `addr_diff_vec' are not permitted inside a
10456     `parallel' expression.
10457
10458`INSN_CODE (I)'
10459     An integer that says which pattern in the machine description
10460     matches this insn, or -1 if the matching has not yet been
10461     attempted.
10462
10463     Such matching is never attempted and this field remains -1 on an
10464     insn whose pattern consists of a single `use', `clobber',
10465     `asm_input', `addr_vec' or `addr_diff_vec' expression.
10466
10467     Matching is also never attempted on insns that result from an `asm'
10468     statement.  These contain at least one `asm_operands' expression.
10469     The function `asm_noperands' returns a non-negative value for such
10470     insns.
10471
10472     In the debugging output, this field is printed as a number
10473     followed by a symbolic representation that locates the pattern in
10474     the `md' file as some small positive or negative offset from a
10475     named pattern.
10476
10477`LOG_LINKS (I)'
10478     A list (chain of `insn_list' expressions) giving information about
10479     dependencies between instructions within a basic block.  Neither a
10480     jump nor a label may come between the related insns.  These are
10481     only used by the schedulers and by combine.  This is a deprecated
10482     data structure.  Def-use and use-def chains are now preferred.
10483
10484`REG_NOTES (I)'
10485     A list (chain of `expr_list' and `insn_list' expressions) giving
10486     miscellaneous information about the insn.  It is often information
10487     pertaining to the registers used in this insn.
10488
10489 The `LOG_LINKS' field of an insn is a chain of `insn_list'
10490expressions.  Each of these has two operands: the first is an insn, and
10491the second is another `insn_list' expression (the next one in the
10492chain).  The last `insn_list' in the chain has a null pointer as second
10493operand.  The significant thing about the chain is which insns appear
10494in it (as first operands of `insn_list' expressions).  Their order is
10495not significant.
10496
10497 This list is originally set up by the flow analysis pass; it is a null
10498pointer until then.  Flow only adds links for those data dependencies
10499which can be used for instruction combination.  For each insn, the flow
10500analysis pass adds a link to insns which store into registers values
10501that are used for the first time in this insn.
10502
10503 The `REG_NOTES' field of an insn is a chain similar to the `LOG_LINKS'
10504field but it includes `expr_list' expressions in addition to
10505`insn_list' expressions.  There are several kinds of register notes,
10506which are distinguished by the machine mode, which in a register note
10507is really understood as being an `enum reg_note'.  The first operand OP
10508of the note is data whose meaning depends on the kind of note.
10509
10510 The macro `REG_NOTE_KIND (X)' returns the kind of register note.  Its
10511counterpart, the macro `PUT_REG_NOTE_KIND (X, NEWKIND)' sets the
10512register note type of X to be NEWKIND.
10513
10514 Register notes are of three classes: They may say something about an
10515input to an insn, they may say something about an output of an insn, or
10516they may create a linkage between two insns.  There are also a set of
10517values that are only used in `LOG_LINKS'.
10518
10519 These register notes annotate inputs to an insn:
10520
10521`REG_DEAD'
10522     The value in OP dies in this insn; that is to say, altering the
10523     value immediately after this insn would not affect the future
10524     behavior of the program.
10525
10526     It does not follow that the register OP has no useful value after
10527     this insn since OP is not necessarily modified by this insn.
10528     Rather, no subsequent instruction uses the contents of OP.
10529
10530`REG_UNUSED'
10531     The register OP being set by this insn will not be used in a
10532     subsequent insn.  This differs from a `REG_DEAD' note, which
10533     indicates that the value in an input will not be used subsequently.
10534     These two notes are independent; both may be present for the same
10535     register.
10536
10537`REG_INC'
10538     The register OP is incremented (or decremented; at this level
10539     there is no distinction) by an embedded side effect inside this
10540     insn.  This means it appears in a `post_inc', `pre_inc',
10541     `post_dec' or `pre_dec' expression.
10542
10543`REG_NONNEG'
10544     The register OP is known to have a nonnegative value when this
10545     insn is reached.  This is used so that decrement and branch until
10546     zero instructions, such as the m68k dbra, can be matched.
10547
10548     The `REG_NONNEG' note is added to insns only if the machine
10549     description has a `decrement_and_branch_until_zero' pattern.
10550
10551`REG_LABEL_OPERAND'
10552     This insn uses OP, a `code_label' or a `note' of type
10553     `NOTE_INSN_DELETED_LABEL', but is not a `jump_insn', or it is a
10554     `jump_insn' that refers to the operand as an ordinary operand.
10555     The label may still eventually be a jump target, but if so in an
10556     indirect jump in a subsequent insn.  The presence of this note
10557     allows jump optimization to be aware that OP is, in fact, being
10558     used, and flow optimization to build an accurate flow graph.
10559
10560`REG_LABEL_TARGET'
10561     This insn is a `jump_insn' but not an `addr_vec' or
10562     `addr_diff_vec'.  It uses OP, a `code_label' as a direct or
10563     indirect jump target.  Its purpose is similar to that of
10564     `REG_LABEL_OPERAND'.  This note is only present if the insn has
10565     multiple targets; the last label in the insn (in the highest
10566     numbered insn-field) goes into the `JUMP_LABEL' field and does not
10567     have a `REG_LABEL_TARGET' note.  *Note JUMP_LABEL: Insns.
10568
10569`REG_CROSSING_JUMP'
10570     This insn is a branching instruction (either an unconditional jump
10571     or an indirect jump) which crosses between hot and cold sections,
10572     which could potentially be very far apart in the executable.  The
10573     presence of this note indicates to other optimizations that this
10574     branching instruction should not be "collapsed" into a simpler
10575     branching construct.  It is used when the optimization to
10576     partition basic blocks into hot and cold sections is turned on.
10577
10578`REG_SETJMP'
10579     Appears attached to each `CALL_INSN' to `setjmp' or a related
10580     function.
10581
10582 The following notes describe attributes of outputs of an insn:
10583
10584`REG_EQUIV'
10585`REG_EQUAL'
10586     This note is only valid on an insn that sets only one register and
10587     indicates that that register will be equal to OP at run time; the
10588     scope of this equivalence differs between the two types of notes.
10589     The value which the insn explicitly copies into the register may
10590     look different from OP, but they will be equal at run time.  If the
10591     output of the single `set' is a `strict_low_part' expression, the
10592     note refers to the register that is contained in `SUBREG_REG' of
10593     the `subreg' expression.
10594
10595     For `REG_EQUIV', the register is equivalent to OP throughout the
10596     entire function, and could validly be replaced in all its
10597     occurrences by OP.  ("Validly" here refers to the data flow of the
10598     program; simple replacement may make some insns invalid.)  For
10599     example, when a constant is loaded into a register that is never
10600     assigned any other value, this kind of note is used.
10601
10602     When a parameter is copied into a pseudo-register at entry to a
10603     function, a note of this kind records that the register is
10604     equivalent to the stack slot where the parameter was passed.
10605     Although in this case the register may be set by other insns, it
10606     is still valid to replace the register by the stack slot
10607     throughout the function.
10608
10609     A `REG_EQUIV' note is also used on an instruction which copies a
10610     register parameter into a pseudo-register at entry to a function,
10611     if there is a stack slot where that parameter could be stored.
10612     Although other insns may set the pseudo-register, it is valid for
10613     the compiler to replace the pseudo-register by stack slot
10614     throughout the function, provided the compiler ensures that the
10615     stack slot is properly initialized by making the replacement in
10616     the initial copy instruction as well.  This is used on machines
10617     for which the calling convention allocates stack space for
10618     register parameters.  See `REG_PARM_STACK_SPACE' in *note Stack
10619     Arguments::.
10620
10621     In the case of `REG_EQUAL', the register that is set by this insn
10622     will be equal to OP at run time at the end of this insn but not
10623     necessarily elsewhere in the function.  In this case, OP is
10624     typically an arithmetic expression.  For example, when a sequence
10625     of insns such as a library call is used to perform an arithmetic
10626     operation, this kind of note is attached to the insn that produces
10627     or copies the final value.
10628
10629     These two notes are used in different ways by the compiler passes.
10630     `REG_EQUAL' is used by passes prior to register allocation (such as
10631     common subexpression elimination and loop optimization) to tell
10632     them how to think of that value.  `REG_EQUIV' notes are used by
10633     register allocation to indicate that there is an available
10634     substitute expression (either a constant or a `mem' expression for
10635     the location of a parameter on the stack) that may be used in
10636     place of a register if insufficient registers are available.
10637
10638     Except for stack homes for parameters, which are indicated by a
10639     `REG_EQUIV' note and are not useful to the early optimization
10640     passes and pseudo registers that are equivalent to a memory
10641     location throughout their entire life, which is not detected until
10642     later in the compilation, all equivalences are initially indicated
10643     by an attached `REG_EQUAL' note.  In the early stages of register
10644     allocation, a `REG_EQUAL' note is changed into a `REG_EQUIV' note
10645     if OP is a constant and the insn represents the only set of its
10646     destination register.
10647
10648     Thus, compiler passes prior to register allocation need only check
10649     for `REG_EQUAL' notes and passes subsequent to register allocation
10650     need only check for `REG_EQUIV' notes.
10651
10652 These notes describe linkages between insns.  They occur in pairs: one
10653insn has one of a pair of notes that points to a second insn, which has
10654the inverse note pointing back to the first insn.
10655
10656`REG_CC_SETTER'
10657`REG_CC_USER'
10658     On machines that use `cc0', the insns which set and use `cc0' set
10659     and use `cc0' are adjacent.  However, when branch delay slot
10660     filling is done, this may no longer be true.  In this case a
10661     `REG_CC_USER' note will be placed on the insn setting `cc0' to
10662     point to the insn using `cc0' and a `REG_CC_SETTER' note will be
10663     placed on the insn using `cc0' to point to the insn setting `cc0'.
10664
10665 These values are only used in the `LOG_LINKS' field, and indicate the
10666type of dependency that each link represents.  Links which indicate a
10667data dependence (a read after write dependence) do not use any code,
10668they simply have mode `VOIDmode', and are printed without any
10669descriptive text.
10670
10671`REG_DEP_TRUE'
10672     This indicates a true dependence (a read after write dependence).
10673
10674`REG_DEP_OUTPUT'
10675     This indicates an output dependence (a write after write
10676     dependence).
10677
10678`REG_DEP_ANTI'
10679     This indicates an anti dependence (a write after read dependence).
10680
10681
10682 These notes describe information gathered from gcov profile data.  They
10683are stored in the `REG_NOTES' field of an insn as an `expr_list'.
10684
10685`REG_BR_PROB'
10686     This is used to specify the ratio of branches to non-branches of a
10687     branch insn according to the profile data.  The value is stored as
10688     a value between 0 and REG_BR_PROB_BASE; larger values indicate a
10689     higher probability that the branch will be taken.
10690
10691`REG_BR_PRED'
10692     These notes are found in JUMP insns after delayed branch scheduling
10693     has taken place.  They indicate both the direction and the
10694     likelihood of the JUMP.  The format is a bitmask of ATTR_FLAG_*
10695     values.
10696
10697`REG_FRAME_RELATED_EXPR'
10698     This is used on an RTX_FRAME_RELATED_P insn wherein the attached
10699     expression is used in place of the actual insn pattern.  This is
10700     done in cases where the pattern is either complex or misleading.
10701
10702 For convenience, the machine mode in an `insn_list' or `expr_list' is
10703printed using these symbolic codes in debugging dumps.
10704
10705 The only difference between the expression codes `insn_list' and
10706`expr_list' is that the first operand of an `insn_list' is assumed to
10707be an insn and is printed in debugging dumps as the insn's unique id;
10708the first operand of an `expr_list' is printed in the ordinary way as
10709an expression.
10710
10711
10712File: gccint.info,  Node: Calls,  Next: Sharing,  Prev: Insns,  Up: RTL
10713
1071410.20 RTL Representation of Function-Call Insns
10715===============================================
10716
10717Insns that call subroutines have the RTL expression code `call_insn'.
10718These insns must satisfy special rules, and their bodies must use a
10719special RTL expression code, `call'.
10720
10721 A `call' expression has two operands, as follows:
10722
10723     (call (mem:FM ADDR) NBYTES)
10724
10725Here NBYTES is an operand that represents the number of bytes of
10726argument data being passed to the subroutine, FM is a machine mode
10727(which must equal as the definition of the `FUNCTION_MODE' macro in the
10728machine description) and ADDR represents the address of the subroutine.
10729
10730 For a subroutine that returns no value, the `call' expression as shown
10731above is the entire body of the insn, except that the insn might also
10732contain `use' or `clobber' expressions.
10733
10734 For a subroutine that returns a value whose mode is not `BLKmode', the
10735value is returned in a hard register.  If this register's number is R,
10736then the body of the call insn looks like this:
10737
10738     (set (reg:M R)
10739          (call (mem:FM ADDR) NBYTES))
10740
10741This RTL expression makes it clear (to the optimizer passes) that the
10742appropriate register receives a useful value in this insn.
10743
10744 When a subroutine returns a `BLKmode' value, it is handled by passing
10745to the subroutine the address of a place to store the value.  So the
10746call insn itself does not "return" any value, and it has the same RTL
10747form as a call that returns nothing.
10748
10749 On some machines, the call instruction itself clobbers some register,
10750for example to contain the return address.  `call_insn' insns on these
10751machines should have a body which is a `parallel' that contains both
10752the `call' expression and `clobber' expressions that indicate which
10753registers are destroyed.  Similarly, if the call instruction requires
10754some register other than the stack pointer that is not explicitly
10755mentioned in its RTL, a `use' subexpression should mention that
10756register.
10757
10758 Functions that are called are assumed to modify all registers listed in
10759the configuration macro `CALL_USED_REGISTERS' (*note Register Basics::)
10760and, with the exception of `const' functions and library calls, to
10761modify all of memory.
10762
10763 Insns containing just `use' expressions directly precede the
10764`call_insn' insn to indicate which registers contain inputs to the
10765function.  Similarly, if registers other than those in
10766`CALL_USED_REGISTERS' are clobbered by the called function, insns
10767containing a single `clobber' follow immediately after the call to
10768indicate which registers.
10769
10770
10771File: gccint.info,  Node: Sharing,  Next: Reading RTL,  Prev: Calls,  Up: RTL
10772
1077310.21 Structure Sharing Assumptions
10774===================================
10775
10776The compiler assumes that certain kinds of RTL expressions are unique;
10777there do not exist two distinct objects representing the same value.
10778In other cases, it makes an opposite assumption: that no RTL expression
10779object of a certain kind appears in more than one place in the
10780containing structure.
10781
10782 These assumptions refer to a single function; except for the RTL
10783objects that describe global variables and external functions, and a
10784few standard objects such as small integer constants, no RTL objects
10785are common to two functions.
10786
10787   * Each pseudo-register has only a single `reg' object to represent
10788     it, and therefore only a single machine mode.
10789
10790   * For any symbolic label, there is only one `symbol_ref' object
10791     referring to it.
10792
10793   * All `const_int' expressions with equal values are shared.
10794
10795   * There is only one `pc' expression.
10796
10797   * There is only one `cc0' expression.
10798
10799   * There is only one `const_double' expression with value 0 for each
10800     floating point mode.  Likewise for values 1 and 2.
10801
10802   * There is only one `const_vector' expression with value 0 for each
10803     vector mode, be it an integer or a double constant vector.
10804
10805   * No `label_ref' or `scratch' appears in more than one place in the
10806     RTL structure; in other words, it is safe to do a tree-walk of all
10807     the insns in the function and assume that each time a `label_ref'
10808     or `scratch' is seen it is distinct from all others that are seen.
10809
10810   * Only one `mem' object is normally created for each static variable
10811     or stack slot, so these objects are frequently shared in all the
10812     places they appear.  However, separate but equal objects for these
10813     variables are occasionally made.
10814
10815   * When a single `asm' statement has multiple output operands, a
10816     distinct `asm_operands' expression is made for each output operand.
10817     However, these all share the vector which contains the sequence of
10818     input operands.  This sharing is used later on to test whether two
10819     `asm_operands' expressions come from the same statement, so all
10820     optimizations must carefully preserve the sharing if they copy the
10821     vector at all.
10822
10823   * No RTL object appears in more than one place in the RTL structure
10824     except as described above.  Many passes of the compiler rely on
10825     this by assuming that they can modify RTL objects in place without
10826     unwanted side-effects on other insns.
10827
10828   * During initial RTL generation, shared structure is freely
10829     introduced.  After all the RTL for a function has been generated,
10830     all shared structure is copied by `unshare_all_rtl' in
10831     `emit-rtl.c', after which the above rules are guaranteed to be
10832     followed.
10833
10834   * During the combiner pass, shared structure within an insn can exist
10835     temporarily.  However, the shared structure is copied before the
10836     combiner is finished with the insn.  This is done by calling
10837     `copy_rtx_if_shared', which is a subroutine of `unshare_all_rtl'.
10838
10839
10840File: gccint.info,  Node: Reading RTL,  Prev: Sharing,  Up: RTL
10841
1084210.22 Reading RTL
10843=================
10844
10845To read an RTL object from a file, call `read_rtx'.  It takes one
10846argument, a stdio stream, and returns a single RTL object.  This routine
10847is defined in `read-rtl.c'.  It is not available in the compiler
10848itself, only the various programs that generate the compiler back end
10849from the machine description.
10850
10851 People frequently have the idea of using RTL stored as text in a file
10852as an interface between a language front end and the bulk of GCC.  This
10853idea is not feasible.
10854
10855 GCC was designed to use RTL internally only.  Correct RTL for a given
10856program is very dependent on the particular target machine.  And the RTL
10857does not contain all the information about the program.
10858
10859 The proper way to interface GCC to a new language front end is with
10860the "tree" data structure, described in the files `tree.h' and
10861`tree.def'.  The documentation for this structure (*note GENERIC::) is
10862incomplete.
10863
10864
10865File: gccint.info,  Node: GENERIC,  Next: GIMPLE,  Prev: Passes,  Up: Top
10866
1086711 GENERIC
10868**********
10869
10870The purpose of GENERIC is simply to provide a language-independent way
10871of representing an entire function in trees.  To this end, it was
10872necessary to add a few new tree codes to the back end, but most
10873everything was already there.  If you can express it with the codes in
10874`gcc/tree.def', it's GENERIC.
10875
10876 Early on, there was a great deal of debate about how to think about
10877statements in a tree IL.  In GENERIC, a statement is defined as any
10878expression whose value, if any, is ignored.  A statement will always
10879have `TREE_SIDE_EFFECTS' set (or it will be discarded), but a
10880non-statement expression may also have side effects.  A `CALL_EXPR',
10881for instance.
10882
10883 It would be possible for some local optimizations to work on the
10884GENERIC form of a function; indeed, the adapted tree inliner works fine
10885on GENERIC, but the current compiler performs inlining after lowering
10886to GIMPLE (a restricted form described in the next section). Indeed,
10887currently the frontends perform this lowering before handing off to
10888`tree_rest_of_compilation', but this seems inelegant.
10889
10890* Menu:
10891
10892* Deficiencies::                Topics net yet covered in this document.
10893* Tree overview::               All about `tree's.
10894* Types::                       Fundamental and aggregate types.
10895* Declarations::                Type declarations and variables.
10896* Attributes::                  Declaration and type attributes.
10897* Expressions: Expression trees.            Operating on data.
10898* Statements::                  Control flow and related trees.
10899* Functions::           	Function bodies, linkage, and other aspects.
10900* Language-dependent trees::    Topics and trees specific to language front ends.
10901* C and C++ Trees::     	Trees specific to C and C++.
10902* Java Trees:: 	                Trees specific to Java.
10903
10904
10905File: gccint.info,  Node: Deficiencies,  Next: Tree overview,  Up: GENERIC
10906
1090711.1 Deficiencies
10908=================
10909
10910There are many places in which this document is incomplet and incorrekt.
10911It is, as of yet, only _preliminary_ documentation.
10912
10913
10914File: gccint.info,  Node: Tree overview,  Next: Types,  Prev: Deficiencies,  Up: GENERIC
10915
1091611.2 Overview
10917=============
10918
10919The central data structure used by the internal representation is the
10920`tree'.  These nodes, while all of the C type `tree', are of many
10921varieties.  A `tree' is a pointer type, but the object to which it
10922points may be of a variety of types.  From this point forward, we will
10923refer to trees in ordinary type, rather than in `this font', except
10924when talking about the actual C type `tree'.
10925
10926 You can tell what kind of node a particular tree is by using the
10927`TREE_CODE' macro.  Many, many macros take trees as input and return
10928trees as output.  However, most macros require a certain kind of tree
10929node as input.  In other words, there is a type-system for trees, but
10930it is not reflected in the C type-system.
10931
10932 For safety, it is useful to configure GCC with `--enable-checking'.
10933Although this results in a significant performance penalty (since all
10934tree types are checked at run-time), and is therefore inappropriate in a
10935release version, it is extremely helpful during the development process.
10936
10937 Many macros behave as predicates.  Many, although not all, of these
10938predicates end in `_P'.  Do not rely on the result type of these macros
10939being of any particular type.  You may, however, rely on the fact that
10940the type can be compared to `0', so that statements like
10941     if (TEST_P (t) && !TEST_P (y))
10942       x = 1;
10943 and
10944     int i = (TEST_P (t) != 0);
10945 are legal.  Macros that return `int' values now may be changed to
10946return `tree' values, or other pointers in the future.  Even those that
10947continue to return `int' may return multiple nonzero codes where
10948previously they returned only zero and one.  Therefore, you should not
10949write code like
10950     if (TEST_P (t) == 1)
10951 as this code is not guaranteed to work correctly in the future.
10952
10953 You should not take the address of values returned by the macros or
10954functions described here.  In particular, no guarantee is given that the
10955values are lvalues.
10956
10957 In general, the names of macros are all in uppercase, while the names
10958of functions are entirely in lowercase.  There are rare exceptions to
10959this rule.  You should assume that any macro or function whose name is
10960made up entirely of uppercase letters may evaluate its arguments more
10961than once.  You may assume that a macro or function whose name is made
10962up entirely of lowercase letters will evaluate its arguments only once.
10963
10964 The `error_mark_node' is a special tree.  Its tree code is
10965`ERROR_MARK', but since there is only ever one node with that code, the
10966usual practice is to compare the tree against `error_mark_node'.  (This
10967test is just a test for pointer equality.)  If an error has occurred
10968during front-end processing the flag `errorcount' will be set.  If the
10969front end has encountered code it cannot handle, it will issue a
10970message to the user and set `sorrycount'.  When these flags are set,
10971any macro or function which normally returns a tree of a particular
10972kind may instead return the `error_mark_node'.  Thus, if you intend to
10973do any processing of erroneous code, you must be prepared to deal with
10974the `error_mark_node'.
10975
10976 Occasionally, a particular tree slot (like an operand to an expression,
10977or a particular field in a declaration) will be referred to as
10978"reserved for the back end".  These slots are used to store RTL when
10979the tree is converted to RTL for use by the GCC back end.  However, if
10980that process is not taking place (e.g., if the front end is being hooked
10981up to an intelligent editor), then those slots may be used by the back
10982end presently in use.
10983
10984 If you encounter situations that do not match this documentation, such
10985as tree nodes of types not mentioned here, or macros documented to
10986return entities of a particular kind that instead return entities of
10987some different kind, you have found a bug, either in the front end or in
10988the documentation.  Please report these bugs as you would any other bug.
10989
10990* Menu:
10991
10992* Macros and Functions::Macros and functions that can be used with all trees.
10993* Identifiers::         The names of things.
10994* Containers::          Lists and vectors.
10995
10996
10997File: gccint.info,  Node: Macros and Functions,  Next: Identifiers,  Up: Tree overview
10998
1099911.2.1 Trees
11000------------
11001
11002All GENERIC trees have two fields in common.  First, `TREE_CHAIN' is a
11003pointer that can be used as a singly-linked list to other trees.  The
11004other is `TREE_TYPE'.  Many trees store the type of an expression or
11005declaration in this field.
11006
11007 These are some other functions for handling trees:
11008
11009`tree_size'
11010     Return the number of bytes a tree takes.
11011
11012`build0'
11013`build1'
11014`build2'
11015`build3'
11016`build4'
11017`build5'
11018`build6'
11019     These functions build a tree and supply values to put in each
11020     parameter.  The basic signature is `code, type, [operands]'.
11021     `code' is the `TREE_CODE', and `type' is a tree representing the
11022     `TREE_TYPE'.  These are followed by the operands, each of which is
11023     also a tree.
11024
11025
11026
11027File: gccint.info,  Node: Identifiers,  Next: Containers,  Prev: Macros and Functions,  Up: Tree overview
11028
1102911.2.2 Identifiers
11030------------------
11031
11032An `IDENTIFIER_NODE' represents a slightly more general concept that
11033the standard C or C++ concept of identifier.  In particular, an
11034`IDENTIFIER_NODE' may contain a `$', or other extraordinary characters.
11035
11036 There are never two distinct `IDENTIFIER_NODE's representing the same
11037identifier.  Therefore, you may use pointer equality to compare
11038`IDENTIFIER_NODE's, rather than using a routine like `strcmp'.  Use
11039`get_identifier' to obtain the unique `IDENTIFIER_NODE' for a supplied
11040string.
11041
11042 You can use the following macros to access identifiers:
11043`IDENTIFIER_POINTER'
11044     The string represented by the identifier, represented as a
11045     `char*'.  This string is always `NUL'-terminated, and contains no
11046     embedded `NUL' characters.
11047
11048`IDENTIFIER_LENGTH'
11049     The length of the string returned by `IDENTIFIER_POINTER', not
11050     including the trailing `NUL'.  This value of `IDENTIFIER_LENGTH
11051     (x)' is always the same as `strlen (IDENTIFIER_POINTER (x))'.
11052
11053`IDENTIFIER_OPNAME_P'
11054     This predicate holds if the identifier represents the name of an
11055     overloaded operator.  In this case, you should not depend on the
11056     contents of either the `IDENTIFIER_POINTER' or the
11057     `IDENTIFIER_LENGTH'.
11058
11059`IDENTIFIER_TYPENAME_P'
11060     This predicate holds if the identifier represents the name of a
11061     user-defined conversion operator.  In this case, the `TREE_TYPE' of
11062     the `IDENTIFIER_NODE' holds the type to which the conversion
11063     operator converts.
11064
11065
11066
11067File: gccint.info,  Node: Containers,  Prev: Identifiers,  Up: Tree overview
11068
1106911.2.3 Containers
11070-----------------
11071
11072Two common container data structures can be represented directly with
11073tree nodes.  A `TREE_LIST' is a singly linked list containing two trees
11074per node.  These are the `TREE_PURPOSE' and `TREE_VALUE' of each node.
11075(Often, the `TREE_PURPOSE' contains some kind of tag, or additional
11076information, while the `TREE_VALUE' contains the majority of the
11077payload.  In other cases, the `TREE_PURPOSE' is simply `NULL_TREE',
11078while in still others both the `TREE_PURPOSE' and `TREE_VALUE' are of
11079equal stature.)  Given one `TREE_LIST' node, the next node is found by
11080following the `TREE_CHAIN'.  If the `TREE_CHAIN' is `NULL_TREE', then
11081you have reached the end of the list.
11082
11083 A `TREE_VEC' is a simple vector.  The `TREE_VEC_LENGTH' is an integer
11084(not a tree) giving the number of nodes in the vector.  The nodes
11085themselves are accessed using the `TREE_VEC_ELT' macro, which takes two
11086arguments.  The first is the `TREE_VEC' in question; the second is an
11087integer indicating which element in the vector is desired.  The
11088elements are indexed from zero.
11089
11090
11091File: gccint.info,  Node: Types,  Next: Declarations,  Prev: Tree overview,  Up: GENERIC
11092
1109311.3 Types
11094==========
11095
11096All types have corresponding tree nodes.  However, you should not assume
11097that there is exactly one tree node corresponding to each type.  There
11098are often multiple nodes corresponding to the same type.
11099
11100 For the most part, different kinds of types have different tree codes.
11101(For example, pointer types use a `POINTER_TYPE' code while arrays use
11102an `ARRAY_TYPE' code.)  However, pointers to member functions use the
11103`RECORD_TYPE' code.  Therefore, when writing a `switch' statement that
11104depends on the code associated with a particular type, you should take
11105care to handle pointers to member functions under the `RECORD_TYPE'
11106case label.
11107
11108 The following functions and macros deal with cv-qualification of types:
11109`TYPE_MAIN_VARIANT'
11110     This macro returns the unqualified version of a type.  It may be
11111     applied to an unqualified type, but it is not always the identity
11112     function in that case.
11113
11114 A few other macros and functions are usable with all types:
11115`TYPE_SIZE'
11116     The number of bits required to represent the type, represented as
11117     an `INTEGER_CST'.  For an incomplete type, `TYPE_SIZE' will be
11118     `NULL_TREE'.
11119
11120`TYPE_ALIGN'
11121     The alignment of the type, in bits, represented as an `int'.
11122
11123`TYPE_NAME'
11124     This macro returns a declaration (in the form of a `TYPE_DECL') for
11125     the type.  (Note this macro does _not_ return an
11126     `IDENTIFIER_NODE', as you might expect, given its name!)  You can
11127     look at the `DECL_NAME' of the `TYPE_DECL' to obtain the actual
11128     name of the type.  The `TYPE_NAME' will be `NULL_TREE' for a type
11129     that is not a built-in type, the result of a typedef, or a named
11130     class type.
11131
11132`TYPE_CANONICAL'
11133     This macro returns the "canonical" type for the given type node.
11134     Canonical types are used to improve performance in the C++ and
11135     Objective-C++ front ends by allowing efficient comparison between
11136     two type nodes in `same_type_p': if the `TYPE_CANONICAL' values of
11137     the types are equal, the types are equivalent; otherwise, the types
11138     are not equivalent. The notion of equivalence for canonical types
11139     is the same as the notion of type equivalence in the language
11140     itself. For instance,
11141
11142     When `TYPE_CANONICAL' is `NULL_TREE', there is no canonical type
11143     for the given type node. In this case, comparison between this
11144     type and any other type requires the compiler to perform a deep,
11145     "structural" comparison to see if the two type nodes have the same
11146     form and properties.
11147
11148     The canonical type for a node is always the most fundamental type
11149     in the equivalence class of types. For instance, `int' is its own
11150     canonical type. A typedef `I' of `int' will have `int' as its
11151     canonical type. Similarly, `I*' and a typedef `IP' (defined to
11152     `I*') will has `int*' as their canonical type. When building a new
11153     type node, be sure to set `TYPE_CANONICAL' to the appropriate
11154     canonical type. If the new type is a compound type (built from
11155     other types), and any of those other types require structural
11156     equality, use `SET_TYPE_STRUCTURAL_EQUALITY' to ensure that the
11157     new type also requires structural equality. Finally, if for some
11158     reason you cannot guarantee that `TYPE_CANONICAL' will point to
11159     the canonical type, use `SET_TYPE_STRUCTURAL_EQUALITY' to make
11160     sure that the new type-and any type constructed based on
11161     it-requires structural equality. If you suspect that the canonical
11162     type system is miscomparing types, pass `--param
11163     verify-canonical-types=1' to the compiler or configure with
11164     `--enable-checking' to force the compiler to verify its
11165     canonical-type comparisons against the structural comparisons; the
11166     compiler will then print any warnings if the canonical types
11167     miscompare.
11168
11169`TYPE_STRUCTURAL_EQUALITY_P'
11170     This predicate holds when the node requires structural equality
11171     checks, e.g., when `TYPE_CANONICAL' is `NULL_TREE'.
11172
11173`SET_TYPE_STRUCTURAL_EQUALITY'
11174     This macro states that the type node it is given requires
11175     structural equality checks, e.g., it sets `TYPE_CANONICAL' to
11176     `NULL_TREE'.
11177
11178`same_type_p'
11179     This predicate takes two types as input, and holds if they are the
11180     same type.  For example, if one type is a `typedef' for the other,
11181     or both are `typedef's for the same type.  This predicate also
11182     holds if the two trees given as input are simply copies of one
11183     another; i.e., there is no difference between them at the source
11184     level, but, for whatever reason, a duplicate has been made in the
11185     representation.  You should never use `==' (pointer equality) to
11186     compare types; always use `same_type_p' instead.
11187
11188 Detailed below are the various kinds of types, and the macros that can
11189be used to access them.  Although other kinds of types are used
11190elsewhere in G++, the types described here are the only ones that you
11191will encounter while examining the intermediate representation.
11192
11193`VOID_TYPE'
11194     Used to represent the `void' type.
11195
11196`INTEGER_TYPE'
11197     Used to represent the various integral types, including `char',
11198     `short', `int', `long', and `long long'.  This code is not used
11199     for enumeration types, nor for the `bool' type.  The
11200     `TYPE_PRECISION' is the number of bits used in the representation,
11201     represented as an `unsigned int'.  (Note that in the general case
11202     this is not the same value as `TYPE_SIZE'; suppose that there were
11203     a 24-bit integer type, but that alignment requirements for the ABI
11204     required 32-bit alignment.  Then, `TYPE_SIZE' would be an
11205     `INTEGER_CST' for 32, while `TYPE_PRECISION' would be 24.)  The
11206     integer type is unsigned if `TYPE_UNSIGNED' holds; otherwise, it
11207     is signed.
11208
11209     The `TYPE_MIN_VALUE' is an `INTEGER_CST' for the smallest integer
11210     that may be represented by this type.  Similarly, the
11211     `TYPE_MAX_VALUE' is an `INTEGER_CST' for the largest integer that
11212     may be represented by this type.
11213
11214`REAL_TYPE'
11215     Used to represent the `float', `double', and `long double' types.
11216     The number of bits in the floating-point representation is given
11217     by `TYPE_PRECISION', as in the `INTEGER_TYPE' case.
11218
11219`FIXED_POINT_TYPE'
11220     Used to represent the `short _Fract', `_Fract', `long _Fract',
11221     `long long _Fract', `short _Accum', `_Accum', `long _Accum', and
11222     `long long _Accum' types.  The number of bits in the fixed-point
11223     representation is given by `TYPE_PRECISION', as in the
11224     `INTEGER_TYPE' case.  There may be padding bits, fractional bits
11225     and integral bits.  The number of fractional bits is given by
11226     `TYPE_FBIT', and the number of integral bits is given by
11227     `TYPE_IBIT'.  The fixed-point type is unsigned if `TYPE_UNSIGNED'
11228     holds; otherwise, it is signed.  The fixed-point type is
11229     saturating if `TYPE_SATURATING' holds; otherwise, it is not
11230     saturating.
11231
11232`COMPLEX_TYPE'
11233     Used to represent GCC built-in `__complex__' data types.  The
11234     `TREE_TYPE' is the type of the real and imaginary parts.
11235
11236`ENUMERAL_TYPE'
11237     Used to represent an enumeration type.  The `TYPE_PRECISION' gives
11238     (as an `int'), the number of bits used to represent the type.  If
11239     there are no negative enumeration constants, `TYPE_UNSIGNED' will
11240     hold.  The minimum and maximum enumeration constants may be
11241     obtained with `TYPE_MIN_VALUE' and `TYPE_MAX_VALUE', respectively;
11242     each of these macros returns an `INTEGER_CST'.
11243
11244     The actual enumeration constants themselves may be obtained by
11245     looking at the `TYPE_VALUES'.  This macro will return a
11246     `TREE_LIST', containing the constants.  The `TREE_PURPOSE' of each
11247     node will be an `IDENTIFIER_NODE' giving the name of the constant;
11248     the `TREE_VALUE' will be an `INTEGER_CST' giving the value
11249     assigned to that constant.  These constants will appear in the
11250     order in which they were declared.  The `TREE_TYPE' of each of
11251     these constants will be the type of enumeration type itself.
11252
11253`BOOLEAN_TYPE'
11254     Used to represent the `bool' type.
11255
11256`POINTER_TYPE'
11257     Used to represent pointer types, and pointer to data member types.
11258     The `TREE_TYPE' gives the type to which this type points.
11259
11260`REFERENCE_TYPE'
11261     Used to represent reference types.  The `TREE_TYPE' gives the type
11262     to which this type refers.
11263
11264`FUNCTION_TYPE'
11265     Used to represent the type of non-member functions and of static
11266     member functions.  The `TREE_TYPE' gives the return type of the
11267     function.  The `TYPE_ARG_TYPES' are a `TREE_LIST' of the argument
11268     types.  The `TREE_VALUE' of each node in this list is the type of
11269     the corresponding argument; the `TREE_PURPOSE' is an expression
11270     for the default argument value, if any.  If the last node in the
11271     list is `void_list_node' (a `TREE_LIST' node whose `TREE_VALUE' is
11272     the `void_type_node'), then functions of this type do not take
11273     variable arguments.  Otherwise, they do take a variable number of
11274     arguments.
11275
11276     Note that in C (but not in C++) a function declared like `void f()'
11277     is an unprototyped function taking a variable number of arguments;
11278     the `TYPE_ARG_TYPES' of such a function will be `NULL'.
11279
11280`METHOD_TYPE'
11281     Used to represent the type of a non-static member function.  Like a
11282     `FUNCTION_TYPE', the return type is given by the `TREE_TYPE'.  The
11283     type of `*this', i.e., the class of which functions of this type
11284     are a member, is given by the `TYPE_METHOD_BASETYPE'.  The
11285     `TYPE_ARG_TYPES' is the parameter list, as for a `FUNCTION_TYPE',
11286     and includes the `this' argument.
11287
11288`ARRAY_TYPE'
11289     Used to represent array types.  The `TREE_TYPE' gives the type of
11290     the elements in the array.  If the array-bound is present in the
11291     type, the `TYPE_DOMAIN' is an `INTEGER_TYPE' whose
11292     `TYPE_MIN_VALUE' and `TYPE_MAX_VALUE' will be the lower and upper
11293     bounds of the array, respectively.  The `TYPE_MIN_VALUE' will
11294     always be an `INTEGER_CST' for zero, while the `TYPE_MAX_VALUE'
11295     will be one less than the number of elements in the array, i.e.,
11296     the highest value which may be used to index an element in the
11297     array.
11298
11299`RECORD_TYPE'
11300     Used to represent `struct' and `class' types, as well as pointers
11301     to member functions and similar constructs in other languages.
11302     `TYPE_FIELDS' contains the items contained in this type, each of
11303     which can be a `FIELD_DECL', `VAR_DECL', `CONST_DECL', or
11304     `TYPE_DECL'.  You may not make any assumptions about the ordering
11305     of the fields in the type or whether one or more of them overlap.
11306
11307`UNION_TYPE'
11308     Used to represent `union' types.  Similar to `RECORD_TYPE' except
11309     that all `FIELD_DECL' nodes in `TYPE_FIELD' start at bit position
11310     zero.
11311
11312`QUAL_UNION_TYPE'
11313     Used to represent part of a variant record in Ada.  Similar to
11314     `UNION_TYPE' except that each `FIELD_DECL' has a `DECL_QUALIFIER'
11315     field, which contains a boolean expression that indicates whether
11316     the field is present in the object.  The type will only have one
11317     field, so each field's `DECL_QUALIFIER' is only evaluated if none
11318     of the expressions in the previous fields in `TYPE_FIELDS' are
11319     nonzero.  Normally these expressions will reference a field in the
11320     outer object using a `PLACEHOLDER_EXPR'.
11321
11322`LANG_TYPE'
11323     This node is used to represent a language-specific type.  The front
11324     end must handle it.
11325
11326`OFFSET_TYPE'
11327     This node is used to represent a pointer-to-data member.  For a
11328     data member `X::m' the `TYPE_OFFSET_BASETYPE' is `X' and the
11329     `TREE_TYPE' is the type of `m'.
11330
11331
11332 There are variables whose values represent some of the basic types.
11333These include:
11334`void_type_node'
11335     A node for `void'.
11336
11337`integer_type_node'
11338     A node for `int'.
11339
11340`unsigned_type_node.'
11341     A node for `unsigned int'.
11342
11343`char_type_node.'
11344     A node for `char'.
11345 It may sometimes be useful to compare one of these variables with a
11346type in hand, using `same_type_p'.
11347
11348
11349File: gccint.info,  Node: Declarations,  Next: Attributes,  Prev: Types,  Up: GENERIC
11350
1135111.4 Declarations
11352=================
11353
11354This section covers the various kinds of declarations that appear in the
11355internal representation, except for declarations of functions
11356(represented by `FUNCTION_DECL' nodes), which are described in *note
11357Functions::.
11358
11359* Menu:
11360
11361* Working with declarations::  Macros and functions that work on
11362declarations.
11363* Internal structure:: How declaration nodes are represented.
11364
11365
11366File: gccint.info,  Node: Working with declarations,  Next: Internal structure,  Up: Declarations
11367
1136811.4.1 Working with declarations
11369--------------------------------
11370
11371Some macros can be used with any kind of declaration.  These include:
11372`DECL_NAME'
11373     This macro returns an `IDENTIFIER_NODE' giving the name of the
11374     entity.
11375
11376`TREE_TYPE'
11377     This macro returns the type of the entity declared.
11378
11379`EXPR_FILENAME'
11380     This macro returns the name of the file in which the entity was
11381     declared, as a `char*'.  For an entity declared implicitly by the
11382     compiler (like `__builtin_memcpy'), this will be the string
11383     `"<internal>"'.
11384
11385`EXPR_LINENO'
11386     This macro returns the line number at which the entity was
11387     declared, as an `int'.
11388
11389`DECL_ARTIFICIAL'
11390     This predicate holds if the declaration was implicitly generated
11391     by the compiler.  For example, this predicate will hold of an
11392     implicitly declared member function, or of the `TYPE_DECL'
11393     implicitly generated for a class type.  Recall that in C++ code
11394     like:
11395          struct S {};
11396     is roughly equivalent to C code like:
11397          struct S {};
11398          typedef struct S S;
11399     The implicitly generated `typedef' declaration is represented by a
11400     `TYPE_DECL' for which `DECL_ARTIFICIAL' holds.
11401
11402
11403 The various kinds of declarations include:
11404`LABEL_DECL'
11405     These nodes are used to represent labels in function bodies.  For
11406     more information, see *note Functions::.  These nodes only appear
11407     in block scopes.
11408
11409`CONST_DECL'
11410     These nodes are used to represent enumeration constants.  The
11411     value of the constant is given by `DECL_INITIAL' which will be an
11412     `INTEGER_CST' with the same type as the `TREE_TYPE' of the
11413     `CONST_DECL', i.e., an `ENUMERAL_TYPE'.
11414
11415`RESULT_DECL'
11416     These nodes represent the value returned by a function.  When a
11417     value is assigned to a `RESULT_DECL', that indicates that the
11418     value should be returned, via bitwise copy, by the function.  You
11419     can use `DECL_SIZE' and `DECL_ALIGN' on a `RESULT_DECL', just as
11420     with a `VAR_DECL'.
11421
11422`TYPE_DECL'
11423     These nodes represent `typedef' declarations.  The `TREE_TYPE' is
11424     the type declared to have the name given by `DECL_NAME'.  In some
11425     cases, there is no associated name.
11426
11427`VAR_DECL'
11428     These nodes represent variables with namespace or block scope, as
11429     well as static data members.  The `DECL_SIZE' and `DECL_ALIGN' are
11430     analogous to `TYPE_SIZE' and `TYPE_ALIGN'.  For a declaration, you
11431     should always use the `DECL_SIZE' and `DECL_ALIGN' rather than the
11432     `TYPE_SIZE' and `TYPE_ALIGN' given by the `TREE_TYPE', since
11433     special attributes may have been applied to the variable to give
11434     it a particular size and alignment.  You may use the predicates
11435     `DECL_THIS_STATIC' or `DECL_THIS_EXTERN' to test whether the
11436     storage class specifiers `static' or `extern' were used to declare
11437     a variable.
11438
11439     If this variable is initialized (but does not require a
11440     constructor), the `DECL_INITIAL' will be an expression for the
11441     initializer.  The initializer should be evaluated, and a bitwise
11442     copy into the variable performed.  If the `DECL_INITIAL' is the
11443     `error_mark_node', there is an initializer, but it is given by an
11444     explicit statement later in the code; no bitwise copy is required.
11445
11446     GCC provides an extension that allows either automatic variables,
11447     or global variables, to be placed in particular registers.  This
11448     extension is being used for a particular `VAR_DECL' if
11449     `DECL_REGISTER' holds for the `VAR_DECL', and if
11450     `DECL_ASSEMBLER_NAME' is not equal to `DECL_NAME'.  In that case,
11451     `DECL_ASSEMBLER_NAME' is the name of the register into which the
11452     variable will be placed.
11453
11454`PARM_DECL'
11455     Used to represent a parameter to a function.  Treat these nodes
11456     similarly to `VAR_DECL' nodes.  These nodes only appear in the
11457     `DECL_ARGUMENTS' for a `FUNCTION_DECL'.
11458
11459     The `DECL_ARG_TYPE' for a `PARM_DECL' is the type that will
11460     actually be used when a value is passed to this function.  It may
11461     be a wider type than the `TREE_TYPE' of the parameter; for
11462     example, the ordinary type might be `short' while the
11463     `DECL_ARG_TYPE' is `int'.
11464
11465`DEBUG_EXPR_DECL'
11466     Used to represent an anonymous debug-information temporary created
11467     to hold an expression as it is optimized away, so that its value
11468     can be referenced in debug bind statements.
11469
11470`FIELD_DECL'
11471     These nodes represent non-static data members.  The `DECL_SIZE' and
11472     `DECL_ALIGN' behave as for `VAR_DECL' nodes.  The position of the
11473     field within the parent record is specified by a combination of
11474     three attributes.  `DECL_FIELD_OFFSET' is the position, counting
11475     in bytes, of the `DECL_OFFSET_ALIGN'-bit sized word containing the
11476     bit of the field closest to the beginning of the structure.
11477     `DECL_FIELD_BIT_OFFSET' is the bit offset of the first bit of the
11478     field within this word; this may be nonzero even for fields that
11479     are not bit-fields, since `DECL_OFFSET_ALIGN' may be greater than
11480     the natural alignment of the field's type.
11481
11482     If `DECL_C_BIT_FIELD' holds, this field is a bit-field.  In a
11483     bit-field, `DECL_BIT_FIELD_TYPE' also contains the type that was
11484     originally specified for it, while DECL_TYPE may be a modified
11485     type with lesser precision, according to the size of the bit field.
11486
11487`NAMESPACE_DECL'
11488     Namespaces provide a name hierarchy for other declarations.  They
11489     appear in the `DECL_CONTEXT' of other `_DECL' nodes.
11490
11491
11492
11493File: gccint.info,  Node: Internal structure,  Prev: Working with declarations,  Up: Declarations
11494
1149511.4.2 Internal structure
11496-------------------------
11497
11498`DECL' nodes are represented internally as a hierarchy of structures.
11499
11500* Menu:
11501
11502* Current structure hierarchy::  The current DECL node structure
11503hierarchy.
11504* Adding new DECL node types:: How to add a new DECL node to a
11505frontend.
11506
11507
11508File: gccint.info,  Node: Current structure hierarchy,  Next: Adding new DECL node types,  Up: Internal structure
11509
1151011.4.2.1 Current structure hierarchy
11511....................................
11512
11513`struct tree_decl_minimal'
11514     This is the minimal structure to inherit from in order for common
11515     `DECL' macros to work.  The fields it contains are a unique ID,
11516     source location, context, and name.
11517
11518`struct tree_decl_common'
11519     This structure inherits from `struct tree_decl_minimal'.  It
11520     contains fields that most `DECL' nodes need, such as a field to
11521     store alignment, machine mode, size, and attributes.
11522
11523`struct tree_field_decl'
11524     This structure inherits from `struct tree_decl_common'.  It is
11525     used to represent `FIELD_DECL'.
11526
11527`struct tree_label_decl'
11528     This structure inherits from `struct tree_decl_common'.  It is
11529     used to represent `LABEL_DECL'.
11530
11531`struct tree_translation_unit_decl'
11532     This structure inherits from `struct tree_decl_common'.  It is
11533     used to represent `TRANSLATION_UNIT_DECL'.
11534
11535`struct tree_decl_with_rtl'
11536     This structure inherits from `struct tree_decl_common'.  It
11537     contains a field to store the low-level RTL associated with a
11538     `DECL' node.
11539
11540`struct tree_result_decl'
11541     This structure inherits from `struct tree_decl_with_rtl'.  It is
11542     used to represent `RESULT_DECL'.
11543
11544`struct tree_const_decl'
11545     This structure inherits from `struct tree_decl_with_rtl'.  It is
11546     used to represent `CONST_DECL'.
11547
11548`struct tree_parm_decl'
11549     This structure inherits from `struct tree_decl_with_rtl'.  It is
11550     used to represent `PARM_DECL'.
11551
11552`struct tree_decl_with_vis'
11553     This structure inherits from `struct tree_decl_with_rtl'.  It
11554     contains fields necessary to store visibility information, as well
11555     as a section name and assembler name.
11556
11557`struct tree_var_decl'
11558     This structure inherits from `struct tree_decl_with_vis'.  It is
11559     used to represent `VAR_DECL'.
11560
11561`struct tree_function_decl'
11562     This structure inherits from `struct tree_decl_with_vis'.  It is
11563     used to represent `FUNCTION_DECL'.
11564
11565
11566
11567File: gccint.info,  Node: Adding new DECL node types,  Prev: Current structure hierarchy,  Up: Internal structure
11568
1156911.4.2.2 Adding new DECL node types
11570...................................
11571
11572Adding a new `DECL' tree consists of the following steps
11573
11574Add a new tree code for the `DECL' node
11575     For language specific `DECL' nodes, there is a `.def' file in each
11576     frontend directory where the tree code should be added.  For
11577     `DECL' nodes that are part of the middle-end, the code should be
11578     added to `tree.def'.
11579
11580Create a new structure type for the `DECL' node
11581     These structures should inherit from one of the existing
11582     structures in the language hierarchy by using that structure as
11583     the first member.
11584
11585          struct tree_foo_decl
11586          {
11587             struct tree_decl_with_vis common;
11588          }
11589
11590     Would create a structure name `tree_foo_decl' that inherits from
11591     `struct tree_decl_with_vis'.
11592
11593     For language specific `DECL' nodes, this new structure type should
11594     go in the appropriate `.h' file.  For `DECL' nodes that are part
11595     of the middle-end, the structure type should go in `tree.h'.
11596
11597Add a member to the tree structure enumerator for the node
11598     For garbage collection and dynamic checking purposes, each `DECL'
11599     node structure type is required to have a unique enumerator value
11600     specified with it.  For language specific `DECL' nodes, this new
11601     enumerator value should go in the appropriate `.def' file.  For
11602     `DECL' nodes that are part of the middle-end, the enumerator
11603     values are specified in `treestruct.def'.
11604
11605Update `union tree_node'
11606     In order to make your new structure type usable, it must be added
11607     to `union tree_node'.  For language specific `DECL' nodes, a new
11608     entry should be added to the appropriate `.h' file of the form
11609            struct tree_foo_decl GTY ((tag ("TS_VAR_DECL"))) foo_decl;
11610     For `DECL' nodes that are part of the middle-end, the additional
11611     member goes directly into `union tree_node' in `tree.h'.
11612
11613Update dynamic checking info
11614     In order to be able to check whether accessing a named portion of
11615     `union tree_node' is legal, and whether a certain `DECL' node
11616     contains one of the enumerated `DECL' node structures in the
11617     hierarchy, a simple lookup table is used.  This lookup table needs
11618     to be kept up to date with the tree structure hierarchy, or else
11619     checking and containment macros will fail inappropriately.
11620
11621     For language specific `DECL' nodes, their is an `init_ts' function
11622     in an appropriate `.c' file, which initializes the lookup table.
11623     Code setting up the table for new `DECL' nodes should be added
11624     there.  For each `DECL' tree code and enumerator value
11625     representing a member of the inheritance  hierarchy, the table
11626     should contain 1 if that tree code inherits (directly or
11627     indirectly) from that member.  Thus, a `FOO_DECL' node derived
11628     from `struct decl_with_rtl', and enumerator value `TS_FOO_DECL',
11629     would be set up as follows
11630          tree_contains_struct[FOO_DECL][TS_FOO_DECL] = 1;
11631          tree_contains_struct[FOO_DECL][TS_DECL_WRTL] = 1;
11632          tree_contains_struct[FOO_DECL][TS_DECL_COMMON] = 1;
11633          tree_contains_struct[FOO_DECL][TS_DECL_MINIMAL] = 1;
11634
11635     For `DECL' nodes that are part of the middle-end, the setup code
11636     goes into `tree.c'.
11637
11638Add macros to access any new fields and flags
11639     Each added field or flag should have a macro that is used to access
11640     it, that performs appropriate checking to ensure only the right
11641     type of `DECL' nodes access the field.
11642
11643     These macros generally take the following form
11644          #define FOO_DECL_FIELDNAME(NODE) FOO_DECL_CHECK(NODE)->foo_decl.fieldname
11645     However, if the structure is simply a base class for further
11646     structures, something like the following should be used
11647          #define BASE_STRUCT_CHECK(T) CONTAINS_STRUCT_CHECK(T, TS_BASE_STRUCT)
11648          #define BASE_STRUCT_FIELDNAME(NODE) \
11649             (BASE_STRUCT_CHECK(NODE)->base_struct.fieldname
11650
11651
11652
11653File: gccint.info,  Node: Attributes,  Next: Expression trees,  Prev: Declarations,  Up: GENERIC
11654
1165511.5 Attributes in trees
11656========================
11657
11658Attributes, as specified using the `__attribute__' keyword, are
11659represented internally as a `TREE_LIST'.  The `TREE_PURPOSE' is the
11660name of the attribute, as an `IDENTIFIER_NODE'.  The `TREE_VALUE' is a
11661`TREE_LIST' of the arguments of the attribute, if any, or `NULL_TREE'
11662if there are no arguments; the arguments are stored as the `TREE_VALUE'
11663of successive entries in the list, and may be identifiers or
11664expressions.  The `TREE_CHAIN' of the attribute is the next attribute
11665in a list of attributes applying to the same declaration or type, or
11666`NULL_TREE' if there are no further attributes in the list.
11667
11668 Attributes may be attached to declarations and to types; these
11669attributes may be accessed with the following macros.  All attributes
11670are stored in this way, and many also cause other changes to the
11671declaration or type or to other internal compiler data structures.
11672
11673 -- Tree Macro: tree DECL_ATTRIBUTES (tree DECL)
11674     This macro returns the attributes on the declaration DECL.
11675
11676 -- Tree Macro: tree TYPE_ATTRIBUTES (tree TYPE)
11677     This macro returns the attributes on the type TYPE.
11678
11679
11680File: gccint.info,  Node: Expression trees,  Next: Statements,  Prev: Attributes,  Up: GENERIC
11681
1168211.6 Expressions
11683================
11684
11685The internal representation for expressions is for the most part quite
11686straightforward.  However, there are a few facts that one must bear in
11687mind.  In particular, the expression "tree" is actually a directed
11688acyclic graph.  (For example there may be many references to the integer
11689constant zero throughout the source program; many of these will be
11690represented by the same expression node.)  You should not rely on
11691certain kinds of node being shared, nor should you rely on certain
11692kinds of nodes being unshared.
11693
11694 The following macros can be used with all expression nodes:
11695
11696`TREE_TYPE'
11697     Returns the type of the expression.  This value may not be
11698     precisely the same type that would be given the expression in the
11699     original program.
11700
11701 In what follows, some nodes that one might expect to always have type
11702`bool' are documented to have either integral or boolean type.  At some
11703point in the future, the C front end may also make use of this same
11704intermediate representation, and at this point these nodes will
11705certainly have integral type.  The previous sentence is not meant to
11706imply that the C++ front end does not or will not give these nodes
11707integral type.
11708
11709 Below, we list the various kinds of expression nodes.  Except where
11710noted otherwise, the operands to an expression are accessed using the
11711`TREE_OPERAND' macro.  For example, to access the first operand to a
11712binary plus expression `expr', use:
11713
11714     TREE_OPERAND (expr, 0)
11715 As this example indicates, the operands are zero-indexed.
11716
11717* Menu:
11718
11719* Constants: Constant expressions.
11720* Storage References::
11721* Unary and Binary Expressions::
11722* Vectors::
11723
11724
11725File: gccint.info,  Node: Constant expressions,  Next: Storage References,  Up: Expression trees
11726
1172711.6.1 Constant expressions
11728---------------------------
11729
11730The table below begins with constants, moves on to unary expressions,
11731then proceeds to binary expressions, and concludes with various other
11732kinds of expressions:
11733
11734`INTEGER_CST'
11735     These nodes represent integer constants.  Note that the type of
11736     these constants is obtained with `TREE_TYPE'; they are not always
11737     of type `int'.  In particular, `char' constants are represented
11738     with `INTEGER_CST' nodes.  The value of the integer constant `e' is
11739     given by
11740          ((TREE_INT_CST_HIGH (e) << HOST_BITS_PER_WIDE_INT)
11741          + TREE_INST_CST_LOW (e))
11742     HOST_BITS_PER_WIDE_INT is at least thirty-two on all platforms.
11743     Both `TREE_INT_CST_HIGH' and `TREE_INT_CST_LOW' return a
11744     `HOST_WIDE_INT'.  The value of an `INTEGER_CST' is interpreted as
11745     a signed or unsigned quantity depending on the type of the
11746     constant.  In general, the expression given above will overflow,
11747     so it should not be used to calculate the value of the constant.
11748
11749     The variable `integer_zero_node' is an integer constant with value
11750     zero.  Similarly, `integer_one_node' is an integer constant with
11751     value one.  The `size_zero_node' and `size_one_node' variables are
11752     analogous, but have type `size_t' rather than `int'.
11753
11754     The function `tree_int_cst_lt' is a predicate which holds if its
11755     first argument is less than its second.  Both constants are
11756     assumed to have the same signedness (i.e., either both should be
11757     signed or both should be unsigned.)  The full width of the
11758     constant is used when doing the comparison; the usual rules about
11759     promotions and conversions are ignored.  Similarly,
11760     `tree_int_cst_equal' holds if the two constants are equal.  The
11761     `tree_int_cst_sgn' function returns the sign of a constant.  The
11762     value is `1', `0', or `-1' according on whether the constant is
11763     greater than, equal to, or less than zero.  Again, the signedness
11764     of the constant's type is taken into account; an unsigned constant
11765     is never less than zero, no matter what its bit-pattern.
11766
11767`REAL_CST'
11768     FIXME: Talk about how to obtain representations of this constant,
11769     do comparisons, and so forth.
11770
11771`FIXED_CST'
11772     These nodes represent fixed-point constants.  The type of these
11773     constants is obtained with `TREE_TYPE'.  `TREE_FIXED_CST_PTR'
11774     points to a `struct fixed_value';  `TREE_FIXED_CST' returns the
11775     structure itself.  `struct fixed_value' contains `data' with the
11776     size of two `HOST_BITS_PER_WIDE_INT' and `mode' as the associated
11777     fixed-point machine mode for `data'.
11778
11779`COMPLEX_CST'
11780     These nodes are used to represent complex number constants, that
11781     is a `__complex__' whose parts are constant nodes.  The
11782     `TREE_REALPART' and `TREE_IMAGPART' return the real and the
11783     imaginary parts respectively.
11784
11785`VECTOR_CST'
11786     These nodes are used to represent vector constants, whose parts are
11787     constant nodes.  Each individual constant node is either an
11788     integer or a double constant node.  The first operand is a
11789     `TREE_LIST' of the constant nodes and is accessed through
11790     `TREE_VECTOR_CST_ELTS'.
11791
11792`STRING_CST'
11793     These nodes represent string-constants.  The `TREE_STRING_LENGTH'
11794     returns the length of the string, as an `int'.  The
11795     `TREE_STRING_POINTER' is a `char*' containing the string itself.
11796     The string may not be `NUL'-terminated, and it may contain
11797     embedded `NUL' characters.  Therefore, the `TREE_STRING_LENGTH'
11798     includes the trailing `NUL' if it is present.
11799
11800     For wide string constants, the `TREE_STRING_LENGTH' is the number
11801     of bytes in the string, and the `TREE_STRING_POINTER' points to an
11802     array of the bytes of the string, as represented on the target
11803     system (that is, as integers in the target endianness).  Wide and
11804     non-wide string constants are distinguished only by the `TREE_TYPE'
11805     of the `STRING_CST'.
11806
11807     FIXME: The formats of string constants are not well-defined when
11808     the target system bytes are not the same width as host system
11809     bytes.
11810
11811
11812
11813File: gccint.info,  Node: Storage References,  Next: Unary and Binary Expressions,  Prev: Constant expressions,  Up: Expression trees
11814
1181511.6.2 References to storage
11816----------------------------
11817
11818`ARRAY_REF'
11819     These nodes represent array accesses.  The first operand is the
11820     array; the second is the index.  To calculate the address of the
11821     memory accessed, you must scale the index by the size of the type
11822     of the array elements.  The type of these expressions must be the
11823     type of a component of the array.  The third and fourth operands
11824     are used after gimplification to represent the lower bound and
11825     component size but should not be used directly; call
11826     `array_ref_low_bound' and `array_ref_element_size' instead.
11827
11828`ARRAY_RANGE_REF'
11829     These nodes represent access to a range (or "slice") of an array.
11830     The operands are the same as that for `ARRAY_REF' and have the same
11831     meanings.  The type of these expressions must be an array whose
11832     component type is the same as that of the first operand.  The
11833     range of that array type determines the amount of data these
11834     expressions access.
11835
11836`TARGET_MEM_REF'
11837     These nodes represent memory accesses whose address directly map to
11838     an addressing mode of the target architecture.  The first argument
11839     is `TMR_SYMBOL' and must be a `VAR_DECL' of an object with a fixed
11840     address.  The second argument is `TMR_BASE' and the third one is
11841     `TMR_INDEX'.  The fourth argument is `TMR_STEP' and must be an
11842     `INTEGER_CST'.  The fifth argument is `TMR_OFFSET' and must be an
11843     `INTEGER_CST'.  Any of the arguments may be NULL if the
11844     appropriate component does not appear in the address.  Address of
11845     the `TARGET_MEM_REF' is determined in the following way.
11846
11847          &TMR_SYMBOL + TMR_BASE + TMR_INDEX * TMR_STEP + TMR_OFFSET
11848
11849     The sixth argument is the reference to the original memory access,
11850     which is preserved for the purposes of the RTL alias analysis.
11851     The seventh argument is a tag representing the results of tree
11852     level alias analysis.
11853
11854`ADDR_EXPR'
11855     These nodes are used to represent the address of an object.  (These
11856     expressions will always have pointer or reference type.)  The
11857     operand may be another expression, or it may be a declaration.
11858
11859     As an extension, GCC allows users to take the address of a label.
11860     In this case, the operand of the `ADDR_EXPR' will be a
11861     `LABEL_DECL'.  The type of such an expression is `void*'.
11862
11863     If the object addressed is not an lvalue, a temporary is created,
11864     and the address of the temporary is used.
11865
11866`INDIRECT_REF'
11867     These nodes are used to represent the object pointed to by a
11868     pointer.  The operand is the pointer being dereferenced; it will
11869     always have pointer or reference type.
11870
11871`MEM_REF'
11872     These nodes are used to represent the object pointed to by a
11873     pointer offset by a constant.  The first operand is the pointer
11874     being dereferenced; it will always have pointer or reference type.
11875     The second operand is a pointer constant.  Its type is specifying
11876     the type to be used for type-based alias analysis.
11877
11878`COMPONENT_REF'
11879     These nodes represent non-static data member accesses.  The first
11880     operand is the object (rather than a pointer to it); the second
11881     operand is the `FIELD_DECL' for the data member.  The third
11882     operand represents the byte offset of the field, but should not be
11883     used directly; call `component_ref_field_offset' instead.
11884
11885
11886
11887File: gccint.info,  Node: Unary and Binary Expressions,  Next: Vectors,  Prev: Storage References,  Up: Expression trees
11888
1188911.6.3 Unary and Binary Expressions
11890-----------------------------------
11891
11892`NEGATE_EXPR'
11893     These nodes represent unary negation of the single operand, for
11894     both integer and floating-point types.  The type of negation can be
11895     determined by looking at the type of the expression.
11896
11897     The behavior of this operation on signed arithmetic overflow is
11898     controlled by the `flag_wrapv' and `flag_trapv' variables.
11899
11900`ABS_EXPR'
11901     These nodes represent the absolute value of the single operand, for
11902     both integer and floating-point types.  This is typically used to
11903     implement the `abs', `labs' and `llabs' builtins for integer
11904     types, and the `fabs', `fabsf' and `fabsl' builtins for floating
11905     point types.  The type of abs operation can be determined by
11906     looking at the type of the expression.
11907
11908     This node is not used for complex types.  To represent the modulus
11909     or complex abs of a complex value, use the `BUILT_IN_CABS',
11910     `BUILT_IN_CABSF' or `BUILT_IN_CABSL' builtins, as used to
11911     implement the C99 `cabs', `cabsf' and `cabsl' built-in functions.
11912
11913`BIT_NOT_EXPR'
11914     These nodes represent bitwise complement, and will always have
11915     integral type.  The only operand is the value to be complemented.
11916
11917`TRUTH_NOT_EXPR'
11918     These nodes represent logical negation, and will always have
11919     integral (or boolean) type.  The operand is the value being
11920     negated.  The type of the operand and that of the result are
11921     always of `BOOLEAN_TYPE' or `INTEGER_TYPE'.
11922
11923`PREDECREMENT_EXPR'
11924`PREINCREMENT_EXPR'
11925`POSTDECREMENT_EXPR'
11926`POSTINCREMENT_EXPR'
11927     These nodes represent increment and decrement expressions.  The
11928     value of the single operand is computed, and the operand
11929     incremented or decremented.  In the case of `PREDECREMENT_EXPR' and
11930     `PREINCREMENT_EXPR', the value of the expression is the value
11931     resulting after the increment or decrement; in the case of
11932     `POSTDECREMENT_EXPR' and `POSTINCREMENT_EXPR' is the value before
11933     the increment or decrement occurs.  The type of the operand, like
11934     that of the result, will be either integral, boolean, or
11935     floating-point.
11936
11937`FIX_TRUNC_EXPR'
11938     These nodes represent conversion of a floating-point value to an
11939     integer.  The single operand will have a floating-point type, while
11940     the complete expression will have an integral (or boolean) type.
11941     The operand is rounded towards zero.
11942
11943`FLOAT_EXPR'
11944     These nodes represent conversion of an integral (or boolean) value
11945     to a floating-point value.  The single operand will have integral
11946     type, while the complete expression will have a floating-point
11947     type.
11948
11949     FIXME: How is the operand supposed to be rounded?  Is this
11950     dependent on `-mieee'?
11951
11952`COMPLEX_EXPR'
11953     These nodes are used to represent complex numbers constructed from
11954     two expressions of the same (integer or real) type.  The first
11955     operand is the real part and the second operand is the imaginary
11956     part.
11957
11958`CONJ_EXPR'
11959     These nodes represent the conjugate of their operand.
11960
11961`REALPART_EXPR'
11962`IMAGPART_EXPR'
11963     These nodes represent respectively the real and the imaginary parts
11964     of complex numbers (their sole argument).
11965
11966`NON_LVALUE_EXPR'
11967     These nodes indicate that their one and only operand is not an
11968     lvalue.  A back end can treat these identically to the single
11969     operand.
11970
11971`NOP_EXPR'
11972     These nodes are used to represent conversions that do not require
11973     any code-generation.  For example, conversion of a `char*' to an
11974     `int*' does not require any code be generated; such a conversion is
11975     represented by a `NOP_EXPR'.  The single operand is the expression
11976     to be converted.  The conversion from a pointer to a reference is
11977     also represented with a `NOP_EXPR'.
11978
11979`CONVERT_EXPR'
11980     These nodes are similar to `NOP_EXPR's, but are used in those
11981     situations where code may need to be generated.  For example, if an
11982     `int*' is converted to an `int' code may need to be generated on
11983     some platforms.  These nodes are never used for C++-specific
11984     conversions, like conversions between pointers to different
11985     classes in an inheritance hierarchy.  Any adjustments that need to
11986     be made in such cases are always indicated explicitly.  Similarly,
11987     a user-defined conversion is never represented by a
11988     `CONVERT_EXPR'; instead, the function calls are made explicit.
11989
11990`FIXED_CONVERT_EXPR'
11991     These nodes are used to represent conversions that involve
11992     fixed-point values.  For example, from a fixed-point value to
11993     another fixed-point value, from an integer to a fixed-point value,
11994     from a fixed-point value to an integer, from a floating-point
11995     value to a fixed-point value, or from a fixed-point value to a
11996     floating-point value.
11997
11998`LSHIFT_EXPR'
11999`RSHIFT_EXPR'
12000     These nodes represent left and right shifts, respectively.  The
12001     first operand is the value to shift; it will always be of integral
12002     type.  The second operand is an expression for the number of bits
12003     by which to shift.  Right shift should be treated as arithmetic,
12004     i.e., the high-order bits should be zero-filled when the
12005     expression has unsigned type and filled with the sign bit when the
12006     expression has signed type.  Note that the result is undefined if
12007     the second operand is larger than or equal to the first operand's
12008     type size. Unlike most nodes, these can have a vector as first
12009     operand and a scalar as second operand.
12010
12011`BIT_IOR_EXPR'
12012`BIT_XOR_EXPR'
12013`BIT_AND_EXPR'
12014     These nodes represent bitwise inclusive or, bitwise exclusive or,
12015     and bitwise and, respectively.  Both operands will always have
12016     integral type.
12017
12018`TRUTH_ANDIF_EXPR'
12019`TRUTH_ORIF_EXPR'
12020     These nodes represent logical "and" and logical "or", respectively.
12021     These operators are not strict; i.e., the second operand is
12022     evaluated only if the value of the expression is not determined by
12023     evaluation of the first operand.  The type of the operands and
12024     that of the result are always of `BOOLEAN_TYPE' or `INTEGER_TYPE'.
12025
12026`TRUTH_AND_EXPR'
12027`TRUTH_OR_EXPR'
12028`TRUTH_XOR_EXPR'
12029     These nodes represent logical and, logical or, and logical
12030     exclusive or.  They are strict; both arguments are always
12031     evaluated.  There are no corresponding operators in C or C++, but
12032     the front end will sometimes generate these expressions anyhow, if
12033     it can tell that strictness does not matter.  The type of the
12034     operands and that of the result are always of `BOOLEAN_TYPE' or
12035     `INTEGER_TYPE'.
12036
12037`POINTER_PLUS_EXPR'
12038     This node represents pointer arithmetic.  The first operand is
12039     always a pointer/reference type.  The second operand is always an
12040     unsigned integer type compatible with sizetype.  This is the only
12041     binary arithmetic operand that can operate on pointer types.
12042
12043`PLUS_EXPR'
12044`MINUS_EXPR'
12045`MULT_EXPR'
12046     These nodes represent various binary arithmetic operations.
12047     Respectively, these operations are addition, subtraction (of the
12048     second operand from the first) and multiplication.  Their operands
12049     may have either integral or floating type, but there will never be
12050     case in which one operand is of floating type and the other is of
12051     integral type.
12052
12053     The behavior of these operations on signed arithmetic overflow is
12054     controlled by the `flag_wrapv' and `flag_trapv' variables.
12055
12056`MULT_HIGHPART_EXPR'
12057     This node represents the "high-part" of a widening multiplication.
12058     For an integral type with B bits of precision, the result is the
12059     most significant B bits of the full 2B product.
12060
12061`RDIV_EXPR'
12062     This node represents a floating point division operation.
12063
12064`TRUNC_DIV_EXPR'
12065`FLOOR_DIV_EXPR'
12066`CEIL_DIV_EXPR'
12067`ROUND_DIV_EXPR'
12068     These nodes represent integer division operations that return an
12069     integer result.  `TRUNC_DIV_EXPR' rounds towards zero,
12070     `FLOOR_DIV_EXPR' rounds towards negative infinity, `CEIL_DIV_EXPR'
12071     rounds towards positive infinity and `ROUND_DIV_EXPR' rounds to
12072     the closest integer.  Integer division in C and C++ is truncating,
12073     i.e. `TRUNC_DIV_EXPR'.
12074
12075     The behavior of these operations on signed arithmetic overflow,
12076     when dividing the minimum signed integer by minus one, is
12077     controlled by the `flag_wrapv' and `flag_trapv' variables.
12078
12079`TRUNC_MOD_EXPR'
12080`FLOOR_MOD_EXPR'
12081`CEIL_MOD_EXPR'
12082`ROUND_MOD_EXPR'
12083     These nodes represent the integer remainder or modulus operation.
12084     The integer modulus of two operands `a' and `b' is defined as `a -
12085     (a/b)*b' where the division calculated using the corresponding
12086     division operator.  Hence for `TRUNC_MOD_EXPR' this definition
12087     assumes division using truncation towards zero, i.e.
12088     `TRUNC_DIV_EXPR'.  Integer remainder in C and C++ uses truncating
12089     division, i.e. `TRUNC_MOD_EXPR'.
12090
12091`EXACT_DIV_EXPR'
12092     The `EXACT_DIV_EXPR' code is used to represent integer divisions
12093     where the numerator is known to be an exact multiple of the
12094     denominator.  This allows the backend to choose between the faster
12095     of `TRUNC_DIV_EXPR', `CEIL_DIV_EXPR' and `FLOOR_DIV_EXPR' for the
12096     current target.
12097
12098`LT_EXPR'
12099`LE_EXPR'
12100`GT_EXPR'
12101`GE_EXPR'
12102`EQ_EXPR'
12103`NE_EXPR'
12104     These nodes represent the less than, less than or equal to, greater
12105     than, greater than or equal to, equal, and not equal comparison
12106     operators.  The first and second operands will either be both of
12107     integral type, both of floating type or both of vector type.  The
12108     result type of these expressions will always be of integral,
12109     boolean or signed integral vector type.  These operations return
12110     the result type's zero value for false, the result type's one
12111     value for true, and a vector whose elements are zero (false) or
12112     minus one (true) for vectors.
12113
12114     For floating point comparisons, if we honor IEEE NaNs and either
12115     operand is NaN, then `NE_EXPR' always returns true and the
12116     remaining operators always return false.  On some targets,
12117     comparisons against an IEEE NaN, other than equality and
12118     inequality, may generate a floating point exception.
12119
12120`ORDERED_EXPR'
12121`UNORDERED_EXPR'
12122     These nodes represent non-trapping ordered and unordered comparison
12123     operators.  These operations take two floating point operands and
12124     determine whether they are ordered or unordered relative to each
12125     other.  If either operand is an IEEE NaN, their comparison is
12126     defined to be unordered, otherwise the comparison is defined to be
12127     ordered.  The result type of these expressions will always be of
12128     integral or boolean type.  These operations return the result
12129     type's zero value for false, and the result type's one value for
12130     true.
12131
12132`UNLT_EXPR'
12133`UNLE_EXPR'
12134`UNGT_EXPR'
12135`UNGE_EXPR'
12136`UNEQ_EXPR'
12137`LTGT_EXPR'
12138     These nodes represent the unordered comparison operators.  These
12139     operations take two floating point operands and determine whether
12140     the operands are unordered or are less than, less than or equal to,
12141     greater than, greater than or equal to, or equal respectively.  For
12142     example, `UNLT_EXPR' returns true if either operand is an IEEE NaN
12143     or the first operand is less than the second.  With the possible
12144     exception of `LTGT_EXPR', all of these operations are guaranteed
12145     not to generate a floating point exception.  The result type of
12146     these expressions will always be of integral or boolean type.
12147     These operations return the result type's zero value for false,
12148     and the result type's one value for true.
12149
12150`MODIFY_EXPR'
12151     These nodes represent assignment.  The left-hand side is the first
12152     operand; the right-hand side is the second operand.  The left-hand
12153     side will be a `VAR_DECL', `INDIRECT_REF', `COMPONENT_REF', or
12154     other lvalue.
12155
12156     These nodes are used to represent not only assignment with `=' but
12157     also compound assignments (like `+='), by reduction to `='
12158     assignment.  In other words, the representation for `i += 3' looks
12159     just like that for `i = i + 3'.
12160
12161`INIT_EXPR'
12162     These nodes are just like `MODIFY_EXPR', but are used only when a
12163     variable is initialized, rather than assigned to subsequently.
12164     This means that we can assume that the target of the
12165     initialization is not used in computing its own value; any
12166     reference to the lhs in computing the rhs is undefined.
12167
12168`COMPOUND_EXPR'
12169     These nodes represent comma-expressions.  The first operand is an
12170     expression whose value is computed and thrown away prior to the
12171     evaluation of the second operand.  The value of the entire
12172     expression is the value of the second operand.
12173
12174`COND_EXPR'
12175     These nodes represent `?:' expressions.  The first operand is of
12176     boolean or integral type.  If it evaluates to a nonzero value, the
12177     second operand should be evaluated, and returned as the value of
12178     the expression.  Otherwise, the third operand is evaluated, and
12179     returned as the value of the expression.
12180
12181     The second operand must have the same type as the entire
12182     expression, unless it unconditionally throws an exception or calls
12183     a noreturn function, in which case it should have void type.  The
12184     same constraints apply to the third operand.  This allows array
12185     bounds checks to be represented conveniently as `(i >= 0 && i <
12186     10) ? i : abort()'.
12187
12188     As a GNU extension, the C language front-ends allow the second
12189     operand of the `?:' operator may be omitted in the source.  For
12190     example, `x ? : 3' is equivalent to `x ? x : 3', assuming that `x'
12191     is an expression without side-effects.  In the tree
12192     representation, however, the second operand is always present,
12193     possibly protected by `SAVE_EXPR' if the first argument does cause
12194     side-effects.
12195
12196`CALL_EXPR'
12197     These nodes are used to represent calls to functions, including
12198     non-static member functions.  `CALL_EXPR's are implemented as
12199     expression nodes with a variable number of operands.  Rather than
12200     using `TREE_OPERAND' to extract them, it is preferable to use the
12201     specialized accessor macros and functions that operate
12202     specifically on `CALL_EXPR' nodes.
12203
12204     `CALL_EXPR_FN' returns a pointer to the function to call; it is
12205     always an expression whose type is a `POINTER_TYPE'.
12206
12207     The number of arguments to the call is returned by
12208     `call_expr_nargs', while the arguments themselves can be accessed
12209     with the `CALL_EXPR_ARG' macro.  The arguments are zero-indexed
12210     and numbered left-to-right.  You can iterate over the arguments
12211     using `FOR_EACH_CALL_EXPR_ARG', as in:
12212
12213          tree call, arg;
12214          call_expr_arg_iterator iter;
12215          FOR_EACH_CALL_EXPR_ARG (arg, iter, call)
12216            /* arg is bound to successive arguments of call.  */
12217            ...;
12218
12219     For non-static member functions, there will be an operand
12220     corresponding to the `this' pointer.  There will always be
12221     expressions corresponding to all of the arguments, even if the
12222     function is declared with default arguments and some arguments are
12223     not explicitly provided at the call sites.
12224
12225     `CALL_EXPR's also have a `CALL_EXPR_STATIC_CHAIN' operand that is
12226     used to implement nested functions.  This operand is otherwise
12227     null.
12228
12229`CLEANUP_POINT_EXPR'
12230     These nodes represent full-expressions.  The single operand is an
12231     expression to evaluate.  Any destructor calls engendered by the
12232     creation of temporaries during the evaluation of that expression
12233     should be performed immediately after the expression is evaluated.
12234
12235`CONSTRUCTOR'
12236     These nodes represent the brace-enclosed initializers for a
12237     structure or array.  The first operand is reserved for use by the
12238     back end.  The second operand is a `TREE_LIST'.  If the
12239     `TREE_TYPE' of the `CONSTRUCTOR' is a `RECORD_TYPE' or
12240     `UNION_TYPE', then the `TREE_PURPOSE' of each node in the
12241     `TREE_LIST' will be a `FIELD_DECL' and the `TREE_VALUE' of each
12242     node will be the expression used to initialize that field.
12243
12244     If the `TREE_TYPE' of the `CONSTRUCTOR' is an `ARRAY_TYPE', then
12245     the `TREE_PURPOSE' of each element in the `TREE_LIST' will be an
12246     `INTEGER_CST' or a `RANGE_EXPR' of two `INTEGER_CST's.  A single
12247     `INTEGER_CST' indicates which element of the array (indexed from
12248     zero) is being assigned to.  A `RANGE_EXPR' indicates an inclusive
12249     range of elements to initialize.  In both cases the `TREE_VALUE'
12250     is the corresponding initializer.  It is re-evaluated for each
12251     element of a `RANGE_EXPR'.  If the `TREE_PURPOSE' is `NULL_TREE',
12252     then the initializer is for the next available array element.
12253
12254     In the front end, you should not depend on the fields appearing in
12255     any particular order.  However, in the middle end, fields must
12256     appear in declaration order.  You should not assume that all
12257     fields will be represented.  Unrepresented fields will be set to
12258     zero.
12259
12260`COMPOUND_LITERAL_EXPR'
12261     These nodes represent ISO C99 compound literals.  The
12262     `COMPOUND_LITERAL_EXPR_DECL_EXPR' is a `DECL_EXPR' containing an
12263     anonymous `VAR_DECL' for the unnamed object represented by the
12264     compound literal; the `DECL_INITIAL' of that `VAR_DECL' is a
12265     `CONSTRUCTOR' representing the brace-enclosed list of initializers
12266     in the compound literal.  That anonymous `VAR_DECL' can also be
12267     accessed directly by the `COMPOUND_LITERAL_EXPR_DECL' macro.
12268
12269`SAVE_EXPR'
12270     A `SAVE_EXPR' represents an expression (possibly involving
12271     side-effects) that is used more than once.  The side-effects should
12272     occur only the first time the expression is evaluated.  Subsequent
12273     uses should just reuse the computed value.  The first operand to
12274     the `SAVE_EXPR' is the expression to evaluate.  The side-effects
12275     should be executed where the `SAVE_EXPR' is first encountered in a
12276     depth-first preorder traversal of the expression tree.
12277
12278`TARGET_EXPR'
12279     A `TARGET_EXPR' represents a temporary object.  The first operand
12280     is a `VAR_DECL' for the temporary variable.  The second operand is
12281     the initializer for the temporary.  The initializer is evaluated
12282     and, if non-void, copied (bitwise) into the temporary.  If the
12283     initializer is void, that means that it will perform the
12284     initialization itself.
12285
12286     Often, a `TARGET_EXPR' occurs on the right-hand side of an
12287     assignment, or as the second operand to a comma-expression which is
12288     itself the right-hand side of an assignment, etc.  In this case,
12289     we say that the `TARGET_EXPR' is "normal"; otherwise, we say it is
12290     "orphaned".  For a normal `TARGET_EXPR' the temporary variable
12291     should be treated as an alias for the left-hand side of the
12292     assignment, rather than as a new temporary variable.
12293
12294     The third operand to the `TARGET_EXPR', if present, is a
12295     cleanup-expression (i.e., destructor call) for the temporary.  If
12296     this expression is orphaned, then this expression must be executed
12297     when the statement containing this expression is complete.  These
12298     cleanups must always be executed in the order opposite to that in
12299     which they were encountered.  Note that if a temporary is created
12300     on one branch of a conditional operator (i.e., in the second or
12301     third operand to a `COND_EXPR'), the cleanup must be run only if
12302     that branch is actually executed.
12303
12304`VA_ARG_EXPR'
12305     This node is used to implement support for the C/C++ variable
12306     argument-list mechanism.  It represents expressions like `va_arg
12307     (ap, type)'.  Its `TREE_TYPE' yields the tree representation for
12308     `type' and its sole argument yields the representation for `ap'.
12309
12310
12311
12312File: gccint.info,  Node: Vectors,  Prev: Unary and Binary Expressions,  Up: Expression trees
12313
1231411.6.4 Vectors
12315--------------
12316
12317`VEC_LSHIFT_EXPR'
12318`VEC_RSHIFT_EXPR'
12319     These nodes represent whole vector left and right shifts,
12320     respectively.  The first operand is the vector to shift; it will
12321     always be of vector type.  The second operand is an expression for
12322     the number of bits by which to shift.  Note that the result is
12323     undefined if the second operand is larger than or equal to the
12324     first operand's type size.
12325
12326`VEC_WIDEN_MULT_HI_EXPR'
12327`VEC_WIDEN_MULT_LO_EXPR'
12328     These nodes represent widening vector multiplication of the high
12329     and low parts of the two input vectors, respectively.  Their
12330     operands are vectors that contain the same number of elements
12331     (`N') of the same integral type.  The result is a vector that
12332     contains half as many elements, of an integral type whose size is
12333     twice as wide.  In the case of `VEC_WIDEN_MULT_HI_EXPR' the high
12334     `N/2' elements of the two vector are multiplied to produce the
12335     vector of `N/2' products. In the case of `VEC_WIDEN_MULT_LO_EXPR'
12336     the low `N/2' elements of the two vector are multiplied to produce
12337     the vector of `N/2' products.
12338
12339`VEC_UNPACK_HI_EXPR'
12340`VEC_UNPACK_LO_EXPR'
12341     These nodes represent unpacking of the high and low parts of the
12342     input vector, respectively.  The single operand is a vector that
12343     contains `N' elements of the same integral or floating point type.
12344     The result is a vector that contains half as many elements, of an
12345     integral or floating point type whose size is twice as wide.  In
12346     the case of `VEC_UNPACK_HI_EXPR' the high `N/2' elements of the
12347     vector are extracted and widened (promoted).  In the case of
12348     `VEC_UNPACK_LO_EXPR' the low `N/2' elements of the vector are
12349     extracted and widened (promoted).
12350
12351`VEC_UNPACK_FLOAT_HI_EXPR'
12352`VEC_UNPACK_FLOAT_LO_EXPR'
12353     These nodes represent unpacking of the high and low parts of the
12354     input vector, where the values are converted from fixed point to
12355     floating point.  The single operand is a vector that contains `N'
12356     elements of the same integral type.  The result is a vector that
12357     contains half as many elements of a floating point type whose size
12358     is twice as wide.  In the case of `VEC_UNPACK_HI_EXPR' the high
12359     `N/2' elements of the vector are extracted, converted and widened.
12360     In the case of `VEC_UNPACK_LO_EXPR' the low `N/2' elements of the
12361     vector are extracted, converted and widened.
12362
12363`VEC_PACK_TRUNC_EXPR'
12364     This node represents packing of truncated elements of the two
12365     input vectors into the output vector.  Input operands are vectors
12366     that contain the same number of elements of the same integral or
12367     floating point type.  The result is a vector that contains twice
12368     as many elements of an integral or floating point type whose size
12369     is half as wide. The elements of the two vectors are demoted and
12370     merged (concatenated) to form the output vector.
12371
12372`VEC_PACK_SAT_EXPR'
12373     This node represents packing of elements of the two input vectors
12374     into the output vector using saturation.  Input operands are
12375     vectors that contain the same number of elements of the same
12376     integral type.  The result is a vector that contains twice as many
12377     elements of an integral type whose size is half as wide.  The
12378     elements of the two vectors are demoted and merged (concatenated)
12379     to form the output vector.
12380
12381`VEC_PACK_FIX_TRUNC_EXPR'
12382     This node represents packing of elements of the two input vectors
12383     into the output vector, where the values are converted from
12384     floating point to fixed point.  Input operands are vectors that
12385     contain the same number of elements of a floating point type.  The
12386     result is a vector that contains twice as many elements of an
12387     integral type whose size is half as wide.  The elements of the two
12388     vectors are merged (concatenated) to form the output vector.
12389
12390`VEC_COND_EXPR'
12391     These nodes represent `?:' expressions.  The three operands must be
12392     vectors of the same size and number of elements.  The second and
12393     third operands must have the same type as the entire expression.
12394     The first operand is of signed integral vector type.  If an
12395     element of the first operand evaluates to a zero value, the
12396     corresponding element of the result is taken from the third
12397     operand. If it evaluates to a minus one value, it is taken from
12398     the second operand. It should never evaluate to any other value
12399     currently, but optimizations should not rely on that property. In
12400     contrast with a `COND_EXPR', all operands are always evaluated.
12401
12402
12403File: gccint.info,  Node: Statements,  Next: Functions,  Prev: Expression trees,  Up: GENERIC
12404
1240511.7 Statements
12406===============
12407
12408Most statements in GIMPLE are assignment statements, represented by
12409`GIMPLE_ASSIGN'.  No other C expressions can appear at statement level;
12410a reference to a volatile object is converted into a `GIMPLE_ASSIGN'.
12411
12412 There are also several varieties of complex statements.
12413
12414* Menu:
12415
12416* Basic Statements::
12417* Blocks::
12418* Statement Sequences::
12419* Empty Statements::
12420* Jumps::
12421* Cleanups::
12422* OpenMP::
12423
12424
12425File: gccint.info,  Node: Basic Statements,  Next: Blocks,  Up: Statements
12426
1242711.7.1 Basic Statements
12428-----------------------
12429
12430`ASM_EXPR'
12431     Used to represent an inline assembly statement.  For an inline
12432     assembly statement like:
12433          asm ("mov x, y");
12434     The `ASM_STRING' macro will return a `STRING_CST' node for `"mov
12435     x, y"'.  If the original statement made use of the
12436     extended-assembly syntax, then `ASM_OUTPUTS', `ASM_INPUTS', and
12437     `ASM_CLOBBERS' will be the outputs, inputs, and clobbers for the
12438     statement, represented as `STRING_CST' nodes.  The
12439     extended-assembly syntax looks like:
12440          asm ("fsinx %1,%0" : "=f" (result) : "f" (angle));
12441     The first string is the `ASM_STRING', containing the instruction
12442     template.  The next two strings are the output and inputs,
12443     respectively; this statement has no clobbers.  As this example
12444     indicates, "plain" assembly statements are merely a special case
12445     of extended assembly statements; they have no cv-qualifiers,
12446     outputs, inputs, or clobbers.  All of the strings will be
12447     `NUL'-terminated, and will contain no embedded `NUL'-characters.
12448
12449     If the assembly statement is declared `volatile', or if the
12450     statement was not an extended assembly statement, and is therefore
12451     implicitly volatile, then the predicate `ASM_VOLATILE_P' will hold
12452     of the `ASM_EXPR'.
12453
12454`DECL_EXPR'
12455     Used to represent a local declaration.  The `DECL_EXPR_DECL' macro
12456     can be used to obtain the entity declared.  This declaration may
12457     be a `LABEL_DECL', indicating that the label declared is a local
12458     label.  (As an extension, GCC allows the declaration of labels
12459     with scope.)  In C, this declaration may be a `FUNCTION_DECL',
12460     indicating the use of the GCC nested function extension.  For more
12461     information, *note Functions::.
12462
12463`LABEL_EXPR'
12464     Used to represent a label.  The `LABEL_DECL' declared by this
12465     statement can be obtained with the `LABEL_EXPR_LABEL' macro.  The
12466     `IDENTIFIER_NODE' giving the name of the label can be obtained from
12467     the `LABEL_DECL' with `DECL_NAME'.
12468
12469`GOTO_EXPR'
12470     Used to represent a `goto' statement.  The `GOTO_DESTINATION' will
12471     usually be a `LABEL_DECL'.  However, if the "computed goto"
12472     extension has been used, the `GOTO_DESTINATION' will be an
12473     arbitrary expression indicating the destination.  This expression
12474     will always have pointer type.
12475
12476`RETURN_EXPR'
12477     Used to represent a `return' statement.  Operand 0 represents the
12478     value to return.  It should either be the `RESULT_DECL' for the
12479     containing function, or a `MODIFY_EXPR' or `INIT_EXPR' setting the
12480     function's `RESULT_DECL'.  It will be `NULL_TREE' if the statement
12481     was just
12482          return;
12483
12484`LOOP_EXPR'
12485     These nodes represent "infinite" loops.  The `LOOP_EXPR_BODY'
12486     represents the body of the loop.  It should be executed forever,
12487     unless an `EXIT_EXPR' is encountered.
12488
12489`EXIT_EXPR'
12490     These nodes represent conditional exits from the nearest enclosing
12491     `LOOP_EXPR'.  The single operand is the condition; if it is
12492     nonzero, then the loop should be exited.  An `EXIT_EXPR' will only
12493     appear within a `LOOP_EXPR'.
12494
12495`SWITCH_STMT'
12496     Used to represent a `switch' statement.  The `SWITCH_STMT_COND' is
12497     the expression on which the switch is occurring.  See the
12498     documentation for an `IF_STMT' for more information on the
12499     representation used for the condition.  The `SWITCH_STMT_BODY' is
12500     the body of the switch statement.   The `SWITCH_STMT_TYPE' is the
12501     original type of switch expression as given in the source, before
12502     any compiler conversions.
12503
12504`CASE_LABEL_EXPR'
12505     Use to represent a `case' label, range of `case' labels, or a
12506     `default' label.  If `CASE_LOW' is `NULL_TREE', then this is a
12507     `default' label.  Otherwise, if `CASE_HIGH' is `NULL_TREE', then
12508     this is an ordinary `case' label.  In this case, `CASE_LOW' is an
12509     expression giving the value of the label.  Both `CASE_LOW' and
12510     `CASE_HIGH' are `INTEGER_CST' nodes.  These values will have the
12511     same type as the condition expression in the switch statement.
12512
12513     Otherwise, if both `CASE_LOW' and `CASE_HIGH' are defined, the
12514     statement is a range of case labels.  Such statements originate
12515     with the extension that allows users to write things of the form:
12516          case 2 ... 5:
12517     The first value will be `CASE_LOW', while the second will be
12518     `CASE_HIGH'.
12519
12520
12521
12522File: gccint.info,  Node: Blocks,  Next: Statement Sequences,  Prev: Basic Statements,  Up: Statements
12523
1252411.7.2 Blocks
12525-------------
12526
12527Block scopes and the variables they declare in GENERIC are expressed
12528using the `BIND_EXPR' code, which in previous versions of GCC was
12529primarily used for the C statement-expression extension.
12530
12531 Variables in a block are collected into `BIND_EXPR_VARS' in
12532declaration order through their `TREE_CHAIN' field.  Any runtime
12533initialization is moved out of `DECL_INITIAL' and into a statement in
12534the controlled block.  When gimplifying from C or C++, this
12535initialization replaces the `DECL_STMT'.  These variables will never
12536require cleanups.  The scope of these variables is just the body
12537
12538 Variable-length arrays (VLAs) complicate this process, as their size
12539often refers to variables initialized earlier in the block.  To handle
12540this, we currently split the block at that point, and move the VLA into
12541a new, inner `BIND_EXPR'.  This strategy may change in the future.
12542
12543 A C++ program will usually contain more `BIND_EXPR's than there are
12544syntactic blocks in the source code, since several C++ constructs have
12545implicit scopes associated with them.  On the other hand, although the
12546C++ front end uses pseudo-scopes to handle cleanups for objects with
12547destructors, these don't translate into the GIMPLE form; multiple
12548declarations at the same level use the same `BIND_EXPR'.
12549
12550
12551File: gccint.info,  Node: Statement Sequences,  Next: Empty Statements,  Prev: Blocks,  Up: Statements
12552
1255311.7.3 Statement Sequences
12554--------------------------
12555
12556Multiple statements at the same nesting level are collected into a
12557`STATEMENT_LIST'.  Statement lists are modified and traversed using the
12558interface in `tree-iterator.h'.
12559
12560
12561File: gccint.info,  Node: Empty Statements,  Next: Jumps,  Prev: Statement Sequences,  Up: Statements
12562
1256311.7.4 Empty Statements
12564-----------------------
12565
12566Whenever possible, statements with no effect are discarded.  But if
12567they are nested within another construct which cannot be discarded for
12568some reason, they are instead replaced with an empty statement,
12569generated by `build_empty_stmt'.  Initially, all empty statements were
12570shared, after the pattern of the Java front end, but this caused a lot
12571of trouble in practice.
12572
12573 An empty statement is represented as `(void)0'.
12574
12575
12576File: gccint.info,  Node: Jumps,  Next: Cleanups,  Prev: Empty Statements,  Up: Statements
12577
1257811.7.5 Jumps
12579------------
12580
12581Other jumps are expressed by either `GOTO_EXPR' or `RETURN_EXPR'.
12582
12583 The operand of a `GOTO_EXPR' must be either a label or a variable
12584containing the address to jump to.
12585
12586 The operand of a `RETURN_EXPR' is either `NULL_TREE', `RESULT_DECL',
12587or a `MODIFY_EXPR' which sets the return value.  It would be nice to
12588move the `MODIFY_EXPR' into a separate statement, but the special
12589return semantics in `expand_return' make that difficult.  It may still
12590happen in the future, perhaps by moving most of that logic into
12591`expand_assignment'.
12592
12593
12594File: gccint.info,  Node: Cleanups,  Next: OpenMP,  Prev: Jumps,  Up: Statements
12595
1259611.7.6 Cleanups
12597---------------
12598
12599Destructors for local C++ objects and similar dynamic cleanups are
12600represented in GIMPLE by a `TRY_FINALLY_EXPR'.  `TRY_FINALLY_EXPR' has
12601two operands, both of which are a sequence of statements to execute.
12602The first sequence is executed.  When it completes the second sequence
12603is executed.
12604
12605 The first sequence may complete in the following ways:
12606
12607  1. Execute the last statement in the sequence and fall off the end.
12608
12609  2. Execute a goto statement (`GOTO_EXPR') to an ordinary label
12610     outside the sequence.
12611
12612  3. Execute a return statement (`RETURN_EXPR').
12613
12614  4. Throw an exception.  This is currently not explicitly represented
12615     in GIMPLE.
12616
12617
12618 The second sequence is not executed if the first sequence completes by
12619calling `setjmp' or `exit' or any other function that does not return.
12620The second sequence is also not executed if the first sequence
12621completes via a non-local goto or a computed goto (in general the
12622compiler does not know whether such a goto statement exits the first
12623sequence or not, so we assume that it doesn't).
12624
12625 After the second sequence is executed, if it completes normally by
12626falling off the end, execution continues wherever the first sequence
12627would have continued, by falling off the end, or doing a goto, etc.
12628
12629 `TRY_FINALLY_EXPR' complicates the flow graph, since the cleanup needs
12630to appear on every edge out of the controlled block; this reduces the
12631freedom to move code across these edges.  Therefore, the EH lowering
12632pass which runs before most of the optimization passes eliminates these
12633expressions by explicitly adding the cleanup to each edge.  Rethrowing
12634the exception is represented using `RESX_EXPR'.
12635
12636
12637File: gccint.info,  Node: OpenMP,  Prev: Cleanups,  Up: Statements
12638
1263911.7.7 OpenMP
12640-------------
12641
12642All the statements starting with `OMP_' represent directives and
12643clauses used by the OpenMP API `http://www.openmp.org/'.
12644
12645`OMP_PARALLEL'
12646     Represents `#pragma omp parallel [clause1 ... clauseN]'. It has
12647     four operands:
12648
12649     Operand `OMP_PARALLEL_BODY' is valid while in GENERIC and High
12650     GIMPLE forms.  It contains the body of code to be executed by all
12651     the threads.  During GIMPLE lowering, this operand becomes `NULL'
12652     and the body is emitted linearly after `OMP_PARALLEL'.
12653
12654     Operand `OMP_PARALLEL_CLAUSES' is the list of clauses associated
12655     with the directive.
12656
12657     Operand `OMP_PARALLEL_FN' is created by `pass_lower_omp', it
12658     contains the `FUNCTION_DECL' for the function that will contain
12659     the body of the parallel region.
12660
12661     Operand `OMP_PARALLEL_DATA_ARG' is also created by
12662     `pass_lower_omp'. If there are shared variables to be communicated
12663     to the children threads, this operand will contain the `VAR_DECL'
12664     that contains all the shared values and variables.
12665
12666`OMP_FOR'
12667     Represents `#pragma omp for [clause1 ... clauseN]'.  It has 5
12668     operands:
12669
12670     Operand `OMP_FOR_BODY' contains the loop body.
12671
12672     Operand `OMP_FOR_CLAUSES' is the list of clauses associated with
12673     the directive.
12674
12675     Operand `OMP_FOR_INIT' is the loop initialization code of the form
12676     `VAR = N1'.
12677
12678     Operand `OMP_FOR_COND' is the loop conditional expression of the
12679     form `VAR {<,>,<=,>=} N2'.
12680
12681     Operand `OMP_FOR_INCR' is the loop index increment of the form
12682     `VAR {+=,-=} INCR'.
12683
12684     Operand `OMP_FOR_PRE_BODY' contains side-effect code from operands
12685     `OMP_FOR_INIT', `OMP_FOR_COND' and `OMP_FOR_INC'.  These
12686     side-effects are part of the `OMP_FOR' block but must be evaluated
12687     before the start of loop body.
12688
12689     The loop index variable `VAR' must be a signed integer variable,
12690     which is implicitly private to each thread.  Bounds `N1' and `N2'
12691     and the increment expression `INCR' are required to be loop
12692     invariant integer expressions that are evaluated without any
12693     synchronization. The evaluation order, frequency of evaluation and
12694     side-effects are unspecified by the standard.
12695
12696`OMP_SECTIONS'
12697     Represents `#pragma omp sections [clause1 ... clauseN]'.
12698
12699     Operand `OMP_SECTIONS_BODY' contains the sections body, which in
12700     turn contains a set of `OMP_SECTION' nodes for each of the
12701     concurrent sections delimited by `#pragma omp section'.
12702
12703     Operand `OMP_SECTIONS_CLAUSES' is the list of clauses associated
12704     with the directive.
12705
12706`OMP_SECTION'
12707     Section delimiter for `OMP_SECTIONS'.
12708
12709`OMP_SINGLE'
12710     Represents `#pragma omp single'.
12711
12712     Operand `OMP_SINGLE_BODY' contains the body of code to be executed
12713     by a single thread.
12714
12715     Operand `OMP_SINGLE_CLAUSES' is the list of clauses associated
12716     with the directive.
12717
12718`OMP_MASTER'
12719     Represents `#pragma omp master'.
12720
12721     Operand `OMP_MASTER_BODY' contains the body of code to be executed
12722     by the master thread.
12723
12724`OMP_ORDERED'
12725     Represents `#pragma omp ordered'.
12726
12727     Operand `OMP_ORDERED_BODY' contains the body of code to be
12728     executed in the sequential order dictated by the loop index
12729     variable.
12730
12731`OMP_CRITICAL'
12732     Represents `#pragma omp critical [name]'.
12733
12734     Operand `OMP_CRITICAL_BODY' is the critical section.
12735
12736     Operand `OMP_CRITICAL_NAME' is an optional identifier to label the
12737     critical section.
12738
12739`OMP_RETURN'
12740     This does not represent any OpenMP directive, it is an artificial
12741     marker to indicate the end of the body of an OpenMP. It is used by
12742     the flow graph (`tree-cfg.c') and OpenMP region building code
12743     (`omp-low.c').
12744
12745`OMP_CONTINUE'
12746     Similarly, this instruction does not represent an OpenMP
12747     directive, it is used by `OMP_FOR' and `OMP_SECTIONS' to mark the
12748     place where the code needs to loop to the next iteration (in the
12749     case of `OMP_FOR') or the next section (in the case of
12750     `OMP_SECTIONS').
12751
12752     In some cases, `OMP_CONTINUE' is placed right before `OMP_RETURN'.
12753     But if there are cleanups that need to occur right after the
12754     looping body, it will be emitted between `OMP_CONTINUE' and
12755     `OMP_RETURN'.
12756
12757`OMP_ATOMIC'
12758     Represents `#pragma omp atomic'.
12759
12760     Operand 0 is the address at which the atomic operation is to be
12761     performed.
12762
12763     Operand 1 is the expression to evaluate.  The gimplifier tries
12764     three alternative code generation strategies.  Whenever possible,
12765     an atomic update built-in is used.  If that fails, a
12766     compare-and-swap loop is attempted.  If that also fails, a regular
12767     critical section around the expression is used.
12768
12769`OMP_CLAUSE'
12770     Represents clauses associated with one of the `OMP_' directives.
12771     Clauses are represented by separate sub-codes defined in `tree.h'.
12772     Clauses codes can be one of: `OMP_CLAUSE_PRIVATE',
12773     `OMP_CLAUSE_SHARED', `OMP_CLAUSE_FIRSTPRIVATE',
12774     `OMP_CLAUSE_LASTPRIVATE', `OMP_CLAUSE_COPYIN',
12775     `OMP_CLAUSE_COPYPRIVATE', `OMP_CLAUSE_IF',
12776     `OMP_CLAUSE_NUM_THREADS', `OMP_CLAUSE_SCHEDULE',
12777     `OMP_CLAUSE_NOWAIT', `OMP_CLAUSE_ORDERED', `OMP_CLAUSE_DEFAULT',
12778     `OMP_CLAUSE_REDUCTION', `OMP_CLAUSE_COLLAPSE', `OMP_CLAUSE_UNTIED',
12779     `OMP_CLAUSE_FINAL', and `OMP_CLAUSE_MERGEABLE'.  Each code
12780     represents the corresponding OpenMP clause.
12781
12782     Clauses associated with the same directive are chained together
12783     via `OMP_CLAUSE_CHAIN'. Those clauses that accept a list of
12784     variables are restricted to exactly one, accessed with
12785     `OMP_CLAUSE_VAR'.  Therefore, multiple variables under the same
12786     clause `C' need to be represented as multiple `C' clauses chained
12787     together.  This facilitates adding new clauses during compilation.
12788
12789
12790
12791File: gccint.info,  Node: Functions,  Next: Language-dependent trees,  Prev: Statements,  Up: GENERIC
12792
1279311.8 Functions
12794==============
12795
12796A function is represented by a `FUNCTION_DECL' node.  It stores the
12797basic pieces of the function such as body, parameters, and return type
12798as well as information on the surrounding context, visibility, and
12799linkage.
12800
12801* Menu:
12802
12803* Function Basics::     Function names, body, and parameters.
12804* Function Properties:: Context, linkage, etc.
12805
12806
12807File: gccint.info,  Node: Function Basics,  Next: Function Properties,  Up: Functions
12808
1280911.8.1 Function Basics
12810----------------------
12811
12812A function has four core parts: the name, the parameters, the result,
12813and the body.  The following macros and functions access these parts of
12814a `FUNCTION_DECL' as well as other basic features:
12815`DECL_NAME'
12816     This macro returns the unqualified name of the function, as an
12817     `IDENTIFIER_NODE'.  For an instantiation of a function template,
12818     the `DECL_NAME' is the unqualified name of the template, not
12819     something like `f<int>'.  The value of `DECL_NAME' is undefined
12820     when used on a constructor, destructor, overloaded operator, or
12821     type-conversion operator, or any function that is implicitly
12822     generated by the compiler.  See below for macros that can be used
12823     to distinguish these cases.
12824
12825`DECL_ASSEMBLER_NAME'
12826     This macro returns the mangled name of the function, also an
12827     `IDENTIFIER_NODE'.  This name does not contain leading underscores
12828     on systems that prefix all identifiers with underscores.  The
12829     mangled name is computed in the same way on all platforms; if
12830     special processing is required to deal with the object file format
12831     used on a particular platform, it is the responsibility of the
12832     back end to perform those modifications.  (Of course, the back end
12833     should not modify `DECL_ASSEMBLER_NAME' itself.)
12834
12835     Using `DECL_ASSEMBLER_NAME' will cause additional memory to be
12836     allocated (for the mangled name of the entity) so it should be used
12837     only when emitting assembly code.  It should not be used within the
12838     optimizers to determine whether or not two declarations are the
12839     same, even though some of the existing optimizers do use it in
12840     that way.  These uses will be removed over time.
12841
12842`DECL_ARGUMENTS'
12843     This macro returns the `PARM_DECL' for the first argument to the
12844     function.  Subsequent `PARM_DECL' nodes can be obtained by
12845     following the `TREE_CHAIN' links.
12846
12847`DECL_RESULT'
12848     This macro returns the `RESULT_DECL' for the function.
12849
12850`DECL_SAVED_TREE'
12851     This macro returns the complete body of the function.
12852
12853`TREE_TYPE'
12854     This macro returns the `FUNCTION_TYPE' or `METHOD_TYPE' for the
12855     function.
12856
12857`DECL_INITIAL'
12858     A function that has a definition in the current translation unit
12859     will have a non-`NULL' `DECL_INITIAL'.  However, back ends should
12860     not make use of the particular value given by `DECL_INITIAL'.
12861
12862     It should contain a tree of `BLOCK' nodes that mirrors the scopes
12863     that variables are bound in the function.  Each block contains a
12864     list of decls declared in a basic block, a pointer to a chain of
12865     blocks at the next lower scope level, then a pointer to the next
12866     block at the same level and a backpointer to the parent `BLOCK' or
12867     `FUNCTION_DECL'.  So given a function as follows:
12868
12869          void foo()
12870          {
12871            int a;
12872            {
12873              int b;
12874            }
12875            int c;
12876          }
12877
12878     you would get the following:
12879
12880          tree foo = FUNCTION_DECL;
12881          tree decl_a = VAR_DECL;
12882          tree decl_b = VAR_DECL;
12883          tree decl_c = VAR_DECL;
12884          tree block_a = BLOCK;
12885          tree block_b = BLOCK;
12886          tree block_c = BLOCK;
12887          BLOCK_VARS(block_a) = decl_a;
12888          BLOCK_SUBBLOCKS(block_a) = block_b;
12889          BLOCK_CHAIN(block_a) = block_c;
12890          BLOCK_SUPERCONTEXT(block_a) = foo;
12891          BLOCK_VARS(block_b) = decl_b;
12892          BLOCK_SUPERCONTEXT(block_b) = block_a;
12893          BLOCK_VARS(block_c) = decl_c;
12894          BLOCK_SUPERCONTEXT(block_c) = foo;
12895          DECL_INITIAL(foo) = block_a;
12896
12897
12898
12899File: gccint.info,  Node: Function Properties,  Prev: Function Basics,  Up: Functions
12900
1290111.8.2 Function Properties
12902--------------------------
12903
12904To determine the scope of a function, you can use the `DECL_CONTEXT'
12905macro.  This macro will return the class (either a `RECORD_TYPE' or a
12906`UNION_TYPE') or namespace (a `NAMESPACE_DECL') of which the function
12907is a member.  For a virtual function, this macro returns the class in
12908which the function was actually defined, not the base class in which
12909the virtual declaration occurred.
12910
12911 In C, the `DECL_CONTEXT' for a function maybe another function.  This
12912representation indicates that the GNU nested function extension is in
12913use.  For details on the semantics of nested functions, see the GCC
12914Manual.  The nested function can refer to local variables in its
12915containing function.  Such references are not explicitly marked in the
12916tree structure; back ends must look at the `DECL_CONTEXT' for the
12917referenced `VAR_DECL'.  If the `DECL_CONTEXT' for the referenced
12918`VAR_DECL' is not the same as the function currently being processed,
12919and neither `DECL_EXTERNAL' nor `TREE_STATIC' hold, then the reference
12920is to a local variable in a containing function, and the back end must
12921take appropriate action.
12922
12923`DECL_EXTERNAL'
12924     This predicate holds if the function is undefined.
12925
12926`TREE_PUBLIC'
12927     This predicate holds if the function has external linkage.
12928
12929`TREE_STATIC'
12930     This predicate holds if the function has been defined.
12931
12932`TREE_THIS_VOLATILE'
12933     This predicate holds if the function does not return normally.
12934
12935`TREE_READONLY'
12936     This predicate holds if the function can only read its arguments.
12937
12938`DECL_PURE_P'
12939     This predicate holds if the function can only read its arguments,
12940     but may also read global memory.
12941
12942`DECL_VIRTUAL_P'
12943     This predicate holds if the function is virtual.
12944
12945`DECL_ARTIFICIAL'
12946     This macro holds if the function was implicitly generated by the
12947     compiler, rather than explicitly declared.  In addition to
12948     implicitly generated class member functions, this macro holds for
12949     the special functions created to implement static initialization
12950     and destruction, to compute run-time type information, and so
12951     forth.
12952
12953`DECL_FUNCTION_SPECIFIC_TARGET'
12954     This macro returns a tree node that holds the target options that
12955     are to be used to compile this particular function or `NULL_TREE'
12956     if the function is to be compiled with the target options
12957     specified on the command line.
12958
12959`DECL_FUNCTION_SPECIFIC_OPTIMIZATION'
12960     This macro returns a tree node that holds the optimization options
12961     that are to be used to compile this particular function or
12962     `NULL_TREE' if the function is to be compiled with the
12963     optimization options specified on the command line.
12964
12965
12966
12967File: gccint.info,  Node: Language-dependent trees,  Next: C and C++ Trees,  Prev: Functions,  Up: GENERIC
12968
1296911.9 Language-dependent trees
12970=============================
12971
12972Front ends may wish to keep some state associated with various GENERIC
12973trees while parsing.  To support this, trees provide a set of flags
12974that may be used by the front end.  They are accessed using
12975`TREE_LANG_FLAG_n' where `n' is currently 0 through 6.
12976
12977 If necessary, a front end can use some language-dependent tree codes
12978in its GENERIC representation, so long as it provides a hook for
12979converting them to GIMPLE and doesn't expect them to work with any
12980(hypothetical) optimizers that run before the conversion to GIMPLE. The
12981intermediate representation used while parsing C and C++ looks very
12982little like GENERIC, but the C and C++ gimplifier hooks are perfectly
12983happy to take it as input and spit out GIMPLE.
12984
12985
12986File: gccint.info,  Node: C and C++ Trees,  Next: Java Trees,  Prev: Language-dependent trees,  Up: GENERIC
12987
1298811.10 C and C++ Trees
12989=====================
12990
12991This section documents the internal representation used by GCC to
12992represent C and C++ source programs.  When presented with a C or C++
12993source program, GCC parses the program, performs semantic analysis
12994(including the generation of error messages), and then produces the
12995internal representation described here.  This representation contains a
12996complete representation for the entire translation unit provided as
12997input to the front end.  This representation is then typically processed
12998by a code-generator in order to produce machine code, but could also be
12999used in the creation of source browsers, intelligent editors, automatic
13000documentation generators, interpreters, and any other programs needing
13001the ability to process C or C++ code.
13002
13003 This section explains the internal representation.  In particular, it
13004documents the internal representation for C and C++ source constructs,
13005and the macros, functions, and variables that can be used to access
13006these constructs.  The C++ representation is largely a superset of the
13007representation used in the C front end.  There is only one construct
13008used in C that does not appear in the C++ front end and that is the GNU
13009"nested function" extension.  Many of the macros documented here do not
13010apply in C because the corresponding language constructs do not appear
13011in C.
13012
13013 The C and C++ front ends generate a mix of GENERIC trees and ones
13014specific to C and C++.  These language-specific trees are higher-level
13015constructs than the ones in GENERIC to make the parser's job easier.
13016This section describes those trees that aren't part of GENERIC as well
13017as aspects of GENERIC trees that are treated in a language-specific
13018manner.
13019
13020 If you are developing a "back end", be it is a code-generator or some
13021other tool, that uses this representation, you may occasionally find
13022that you need to ask questions not easily answered by the functions and
13023macros available here.  If that situation occurs, it is quite likely
13024that GCC already supports the functionality you desire, but that the
13025interface is simply not documented here.  In that case, you should ask
13026the GCC maintainers (via mail to <gcc@gcc.gnu.org>) about documenting
13027the functionality you require.  Similarly, if you find yourself writing
13028functions that do not deal directly with your back end, but instead
13029might be useful to other people using the GCC front end, you should
13030submit your patches for inclusion in GCC.
13031
13032* Menu:
13033
13034* Types for C++::               Fundamental and aggregate types.
13035* Namespaces::                  Namespaces.
13036* Classes::                     Classes.
13037* Functions for C++::           Overloading and accessors for C++.
13038* Statements for C++::          Statements specific to C and C++.
13039* C++ Expressions::    From `typeid' to `throw'.
13040
13041
13042File: gccint.info,  Node: Types for C++,  Next: Namespaces,  Up: C and C++ Trees
13043
1304411.10.1 Types for C++
13045---------------------
13046
13047In C++, an array type is not qualified; rather the type of the array
13048elements is qualified.  This situation is reflected in the intermediate
13049representation.  The macros described here will always examine the
13050qualification of the underlying element type when applied to an array
13051type.  (If the element type is itself an array, then the recursion
13052continues until a non-array type is found, and the qualification of this
13053type is examined.)  So, for example, `CP_TYPE_CONST_P' will hold of the
13054type `const int ()[7]', denoting an array of seven `int's.
13055
13056 The following functions and macros deal with cv-qualification of types:
13057`cp_type_quals'
13058     This function returns the set of type qualifiers applied to this
13059     type.  This value is `TYPE_UNQUALIFIED' if no qualifiers have been
13060     applied.  The `TYPE_QUAL_CONST' bit is set if the type is
13061     `const'-qualified.  The `TYPE_QUAL_VOLATILE' bit is set if the
13062     type is `volatile'-qualified.  The `TYPE_QUAL_RESTRICT' bit is set
13063     if the type is `restrict'-qualified.
13064
13065`CP_TYPE_CONST_P'
13066     This macro holds if the type is `const'-qualified.
13067
13068`CP_TYPE_VOLATILE_P'
13069     This macro holds if the type is `volatile'-qualified.
13070
13071`CP_TYPE_RESTRICT_P'
13072     This macro holds if the type is `restrict'-qualified.
13073
13074`CP_TYPE_CONST_NON_VOLATILE_P'
13075     This predicate holds for a type that is `const'-qualified, but
13076     _not_ `volatile'-qualified; other cv-qualifiers are ignored as
13077     well: only the `const'-ness is tested.
13078
13079
13080 A few other macros and functions are usable with all types:
13081`TYPE_SIZE'
13082     The number of bits required to represent the type, represented as
13083     an `INTEGER_CST'.  For an incomplete type, `TYPE_SIZE' will be
13084     `NULL_TREE'.
13085
13086`TYPE_ALIGN'
13087     The alignment of the type, in bits, represented as an `int'.
13088
13089`TYPE_NAME'
13090     This macro returns a declaration (in the form of a `TYPE_DECL') for
13091     the type.  (Note this macro does _not_ return an
13092     `IDENTIFIER_NODE', as you might expect, given its name!)  You can
13093     look at the `DECL_NAME' of the `TYPE_DECL' to obtain the actual
13094     name of the type.  The `TYPE_NAME' will be `NULL_TREE' for a type
13095     that is not a built-in type, the result of a typedef, or a named
13096     class type.
13097
13098`CP_INTEGRAL_TYPE'
13099     This predicate holds if the type is an integral type.  Notice that
13100     in C++, enumerations are _not_ integral types.
13101
13102`ARITHMETIC_TYPE_P'
13103     This predicate holds if the type is an integral type (in the C++
13104     sense) or a floating point type.
13105
13106`CLASS_TYPE_P'
13107     This predicate holds for a class-type.
13108
13109`TYPE_BUILT_IN'
13110     This predicate holds for a built-in type.
13111
13112`TYPE_PTRDATAMEM_P'
13113     This predicate holds if the type is a pointer to data member.
13114
13115`TYPE_PTR_P'
13116     This predicate holds if the type is a pointer type, and the
13117     pointee is not a data member.
13118
13119`TYPE_PTRFN_P'
13120     This predicate holds for a pointer to function type.
13121
13122`TYPE_PTROB_P'
13123     This predicate holds for a pointer to object type.  Note however
13124     that it does not hold for the generic pointer to object type `void
13125     *'.  You may use `TYPE_PTROBV_P' to test for a pointer to object
13126     type as well as `void *'.
13127
13128
13129 The table below describes types specific to C and C++ as well as
13130language-dependent info about GENERIC types.
13131
13132`POINTER_TYPE'
13133     Used to represent pointer types, and pointer to data member types.
13134     If `TREE_TYPE' is a pointer to data member type, then
13135     `TYPE_PTRDATAMEM_P' will hold.  For a pointer to data member type
13136     of the form `T X::*', `TYPE_PTRMEM_CLASS_TYPE' will be the type
13137     `X', while `TYPE_PTRMEM_POINTED_TO_TYPE' will be the type `T'.
13138
13139`RECORD_TYPE'
13140     Used to represent `struct' and `class' types in C and C++.  If
13141     `TYPE_PTRMEMFUNC_P' holds, then this type is a pointer-to-member
13142     type.  In that case, the `TYPE_PTRMEMFUNC_FN_TYPE' is a
13143     `POINTER_TYPE' pointing to a `METHOD_TYPE'.  The `METHOD_TYPE' is
13144     the type of a function pointed to by the pointer-to-member
13145     function.  If `TYPE_PTRMEMFUNC_P' does not hold, this type is a
13146     class type.  For more information, *note Classes::.
13147
13148`UNKNOWN_TYPE'
13149     This node is used to represent a type the knowledge of which is
13150     insufficient for a sound processing.
13151
13152`TYPENAME_TYPE'
13153     Used to represent a construct of the form `typename T::A'.  The
13154     `TYPE_CONTEXT' is `T'; the `TYPE_NAME' is an `IDENTIFIER_NODE' for
13155     `A'.  If the type is specified via a template-id, then
13156     `TYPENAME_TYPE_FULLNAME' yields a `TEMPLATE_ID_EXPR'.  The
13157     `TREE_TYPE' is non-`NULL' if the node is implicitly generated in
13158     support for the implicit typename extension; in which case the
13159     `TREE_TYPE' is a type node for the base-class.
13160
13161`TYPEOF_TYPE'
13162     Used to represent the `__typeof__' extension.  The `TYPE_FIELDS'
13163     is the expression the type of which is being represented.
13164
13165
13166
13167File: gccint.info,  Node: Namespaces,  Next: Classes,  Prev: Types for C++,  Up: C and C++ Trees
13168
1316911.10.2 Namespaces
13170------------------
13171
13172The root of the entire intermediate representation is the variable
13173`global_namespace'.  This is the namespace specified with `::' in C++
13174source code.  All other namespaces, types, variables, functions, and so
13175forth can be found starting with this namespace.
13176
13177 However, except for the fact that it is distinguished as the root of
13178the representation, the global namespace is no different from any other
13179namespace.  Thus, in what follows, we describe namespaces generally,
13180rather than the global namespace in particular.
13181
13182 A namespace is represented by a `NAMESPACE_DECL' node.
13183
13184 The following macros and functions can be used on a `NAMESPACE_DECL':
13185
13186`DECL_NAME'
13187     This macro is used to obtain the `IDENTIFIER_NODE' corresponding to
13188     the unqualified name of the name of the namespace (*note
13189     Identifiers::).  The name of the global namespace is `::', even
13190     though in C++ the global namespace is unnamed.  However, you
13191     should use comparison with `global_namespace', rather than
13192     `DECL_NAME' to determine whether or not a namespace is the global
13193     one.  An unnamed namespace will have a `DECL_NAME' equal to
13194     `anonymous_namespace_name'.  Within a single translation unit, all
13195     unnamed namespaces will have the same name.
13196
13197`DECL_CONTEXT'
13198     This macro returns the enclosing namespace.  The `DECL_CONTEXT' for
13199     the `global_namespace' is `NULL_TREE'.
13200
13201`DECL_NAMESPACE_ALIAS'
13202     If this declaration is for a namespace alias, then
13203     `DECL_NAMESPACE_ALIAS' is the namespace for which this one is an
13204     alias.
13205
13206     Do not attempt to use `cp_namespace_decls' for a namespace which is
13207     an alias.  Instead, follow `DECL_NAMESPACE_ALIAS' links until you
13208     reach an ordinary, non-alias, namespace, and call
13209     `cp_namespace_decls' there.
13210
13211`DECL_NAMESPACE_STD_P'
13212     This predicate holds if the namespace is the special `::std'
13213     namespace.
13214
13215`cp_namespace_decls'
13216     This function will return the declarations contained in the
13217     namespace, including types, overloaded functions, other
13218     namespaces, and so forth.  If there are no declarations, this
13219     function will return `NULL_TREE'.  The declarations are connected
13220     through their `TREE_CHAIN' fields.
13221
13222     Although most entries on this list will be declarations,
13223     `TREE_LIST' nodes may also appear.  In this case, the `TREE_VALUE'
13224     will be an `OVERLOAD'.  The value of the `TREE_PURPOSE' is
13225     unspecified; back ends should ignore this value.  As with the
13226     other kinds of declarations returned by `cp_namespace_decls', the
13227     `TREE_CHAIN' will point to the next declaration in this list.
13228
13229     For more information on the kinds of declarations that can occur
13230     on this list, *Note Declarations::.  Some declarations will not
13231     appear on this list.  In particular, no `FIELD_DECL',
13232     `LABEL_DECL', or `PARM_DECL' nodes will appear here.
13233
13234     This function cannot be used with namespaces that have
13235     `DECL_NAMESPACE_ALIAS' set.
13236
13237
13238
13239File: gccint.info,  Node: Classes,  Next: Functions for C++,  Prev: Namespaces,  Up: C and C++ Trees
13240
1324111.10.3 Classes
13242---------------
13243
13244Besides namespaces, the other high-level scoping construct in C++ is the
13245class.  (Throughout this manual the term "class" is used to mean the
13246types referred to in the ANSI/ISO C++ Standard as classes; these include
13247types defined with the `class', `struct', and `union' keywords.)
13248
13249 A class type is represented by either a `RECORD_TYPE' or a
13250`UNION_TYPE'.  A class declared with the `union' tag is represented by
13251a `UNION_TYPE', while classes declared with either the `struct' or the
13252`class' tag are represented by `RECORD_TYPE's.  You can use the
13253`CLASSTYPE_DECLARED_CLASS' macro to discern whether or not a particular
13254type is a `class' as opposed to a `struct'.  This macro will be true
13255only for classes declared with the `class' tag.
13256
13257 Almost all non-function members are available on the `TYPE_FIELDS'
13258list.  Given one member, the next can be found by following the
13259`TREE_CHAIN'.  You should not depend in any way on the order in which
13260fields appear on this list.  All nodes on this list will be `DECL'
13261nodes.  A `FIELD_DECL' is used to represent a non-static data member, a
13262`VAR_DECL' is used to represent a static data member, and a `TYPE_DECL'
13263is used to represent a type.  Note that the `CONST_DECL' for an
13264enumeration constant will appear on this list, if the enumeration type
13265was declared in the class.  (Of course, the `TYPE_DECL' for the
13266enumeration type will appear here as well.)  There are no entries for
13267base classes on this list.  In particular, there is no `FIELD_DECL' for
13268the "base-class portion" of an object.
13269
13270 The `TYPE_VFIELD' is a compiler-generated field used to point to
13271virtual function tables.  It may or may not appear on the `TYPE_FIELDS'
13272list.  However, back ends should handle the `TYPE_VFIELD' just like all
13273the entries on the `TYPE_FIELDS' list.
13274
13275 The function members are available on the `TYPE_METHODS' list.  Again,
13276subsequent members are found by following the `TREE_CHAIN' field.  If a
13277function is overloaded, each of the overloaded functions appears; no
13278`OVERLOAD' nodes appear on the `TYPE_METHODS' list.  Implicitly
13279declared functions (including default constructors, copy constructors,
13280assignment operators, and destructors) will appear on this list as well.
13281
13282 Every class has an associated "binfo", which can be obtained with
13283`TYPE_BINFO'.  Binfos are used to represent base-classes.  The binfo
13284given by `TYPE_BINFO' is the degenerate case, whereby every class is
13285considered to be its own base-class.  The base binfos for a particular
13286binfo are held in a vector, whose length is obtained with
13287`BINFO_N_BASE_BINFOS'.  The base binfos themselves are obtained with
13288`BINFO_BASE_BINFO' and `BINFO_BASE_ITERATE'.  To add a new binfo, use
13289`BINFO_BASE_APPEND'.  The vector of base binfos can be obtained with
13290`BINFO_BASE_BINFOS', but normally you do not need to use that.  The
13291class type associated with a binfo is given by `BINFO_TYPE'.  It is not
13292always the case that `BINFO_TYPE (TYPE_BINFO (x))', because of typedefs
13293and qualified types.  Neither is it the case that `TYPE_BINFO
13294(BINFO_TYPE (y))' is the same binfo as `y'.  The reason is that if `y'
13295is a binfo representing a base-class `B' of a derived class `D', then
13296`BINFO_TYPE (y)' will be `B', and `TYPE_BINFO (BINFO_TYPE (y))' will be
13297`B' as its own base-class, rather than as a base-class of `D'.
13298
13299 The access to a base type can be found with `BINFO_BASE_ACCESS'.  This
13300will produce `access_public_node', `access_private_node' or
13301`access_protected_node'.  If bases are always public,
13302`BINFO_BASE_ACCESSES' may be `NULL'.
13303
13304 `BINFO_VIRTUAL_P' is used to specify whether the binfo is inherited
13305virtually or not.  The other flags, `BINFO_MARKED_P' and `BINFO_FLAG_1'
13306to `BINFO_FLAG_6' can be used for language specific use.
13307
13308 The following macros can be used on a tree node representing a
13309class-type.
13310
13311`LOCAL_CLASS_P'
13312     This predicate holds if the class is local class _i.e._ declared
13313     inside a function body.
13314
13315`TYPE_POLYMORPHIC_P'
13316     This predicate holds if the class has at least one virtual function
13317     (declared or inherited).
13318
13319`TYPE_HAS_DEFAULT_CONSTRUCTOR'
13320     This predicate holds whenever its argument represents a class-type
13321     with default constructor.
13322
13323`CLASSTYPE_HAS_MUTABLE'
13324`TYPE_HAS_MUTABLE_P'
13325     These predicates hold for a class-type having a mutable data
13326     member.
13327
13328`CLASSTYPE_NON_POD_P'
13329     This predicate holds only for class-types that are not PODs.
13330
13331`TYPE_HAS_NEW_OPERATOR'
13332     This predicate holds for a class-type that defines `operator new'.
13333
13334`TYPE_HAS_ARRAY_NEW_OPERATOR'
13335     This predicate holds for a class-type for which `operator new[]'
13336     is defined.
13337
13338`TYPE_OVERLOADS_CALL_EXPR'
13339     This predicate holds for class-type for which the function call
13340     `operator()' is overloaded.
13341
13342`TYPE_OVERLOADS_ARRAY_REF'
13343     This predicate holds for a class-type that overloads `operator[]'
13344
13345`TYPE_OVERLOADS_ARROW'
13346     This predicate holds for a class-type for which `operator->' is
13347     overloaded.
13348
13349
13350
13351File: gccint.info,  Node: Functions for C++,  Next: Statements for C++,  Prev: Classes,  Up: C and C++ Trees
13352
1335311.10.4 Functions for C++
13354-------------------------
13355
13356A function is represented by a `FUNCTION_DECL' node.  A set of
13357overloaded functions is sometimes represented by an `OVERLOAD' node.
13358
13359 An `OVERLOAD' node is not a declaration, so none of the `DECL_' macros
13360should be used on an `OVERLOAD'.  An `OVERLOAD' node is similar to a
13361`TREE_LIST'.  Use `OVL_CURRENT' to get the function associated with an
13362`OVERLOAD' node; use `OVL_NEXT' to get the next `OVERLOAD' node in the
13363list of overloaded functions.  The macros `OVL_CURRENT' and `OVL_NEXT'
13364are actually polymorphic; you can use them to work with `FUNCTION_DECL'
13365nodes as well as with overloads.  In the case of a `FUNCTION_DECL',
13366`OVL_CURRENT' will always return the function itself, and `OVL_NEXT'
13367will always be `NULL_TREE'.
13368
13369 To determine the scope of a function, you can use the `DECL_CONTEXT'
13370macro.  This macro will return the class (either a `RECORD_TYPE' or a
13371`UNION_TYPE') or namespace (a `NAMESPACE_DECL') of which the function
13372is a member.  For a virtual function, this macro returns the class in
13373which the function was actually defined, not the base class in which
13374the virtual declaration occurred.
13375
13376 If a friend function is defined in a class scope, the
13377`DECL_FRIEND_CONTEXT' macro can be used to determine the class in which
13378it was defined.  For example, in
13379     class C { friend void f() {} };
13380 the `DECL_CONTEXT' for `f' will be the `global_namespace', but the
13381`DECL_FRIEND_CONTEXT' will be the `RECORD_TYPE' for `C'.
13382
13383 The following macros and functions can be used on a `FUNCTION_DECL':
13384`DECL_MAIN_P'
13385     This predicate holds for a function that is the program entry point
13386     `::code'.
13387
13388`DECL_LOCAL_FUNCTION_P'
13389     This predicate holds if the function was declared at block scope,
13390     even though it has a global scope.
13391
13392`DECL_ANTICIPATED'
13393     This predicate holds if the function is a built-in function but its
13394     prototype is not yet explicitly declared.
13395
13396`DECL_EXTERN_C_FUNCTION_P'
13397     This predicate holds if the function is declared as an ``extern
13398     "C"'' function.
13399
13400`DECL_LINKONCE_P'
13401     This macro holds if multiple copies of this function may be
13402     emitted in various translation units.  It is the responsibility of
13403     the linker to merge the various copies.  Template instantiations
13404     are the most common example of functions for which
13405     `DECL_LINKONCE_P' holds; G++ instantiates needed templates in all
13406     translation units which require them, and then relies on the
13407     linker to remove duplicate instantiations.
13408
13409     FIXME: This macro is not yet implemented.
13410
13411`DECL_FUNCTION_MEMBER_P'
13412     This macro holds if the function is a member of a class, rather
13413     than a member of a namespace.
13414
13415`DECL_STATIC_FUNCTION_P'
13416     This predicate holds if the function a static member function.
13417
13418`DECL_NONSTATIC_MEMBER_FUNCTION_P'
13419     This macro holds for a non-static member function.
13420
13421`DECL_CONST_MEMFUNC_P'
13422     This predicate holds for a `const'-member function.
13423
13424`DECL_VOLATILE_MEMFUNC_P'
13425     This predicate holds for a `volatile'-member function.
13426
13427`DECL_CONSTRUCTOR_P'
13428     This macro holds if the function is a constructor.
13429
13430`DECL_NONCONVERTING_P'
13431     This predicate holds if the constructor is a non-converting
13432     constructor.
13433
13434`DECL_COMPLETE_CONSTRUCTOR_P'
13435     This predicate holds for a function which is a constructor for an
13436     object of a complete type.
13437
13438`DECL_BASE_CONSTRUCTOR_P'
13439     This predicate holds for a function which is a constructor for a
13440     base class sub-object.
13441
13442`DECL_COPY_CONSTRUCTOR_P'
13443     This predicate holds for a function which is a copy-constructor.
13444
13445`DECL_DESTRUCTOR_P'
13446     This macro holds if the function is a destructor.
13447
13448`DECL_COMPLETE_DESTRUCTOR_P'
13449     This predicate holds if the function is the destructor for an
13450     object a complete type.
13451
13452`DECL_OVERLOADED_OPERATOR_P'
13453     This macro holds if the function is an overloaded operator.
13454
13455`DECL_CONV_FN_P'
13456     This macro holds if the function is a type-conversion operator.
13457
13458`DECL_GLOBAL_CTOR_P'
13459     This predicate holds if the function is a file-scope initialization
13460     function.
13461
13462`DECL_GLOBAL_DTOR_P'
13463     This predicate holds if the function is a file-scope finalization
13464     function.
13465
13466`DECL_THUNK_P'
13467     This predicate holds if the function is a thunk.
13468
13469     These functions represent stub code that adjusts the `this' pointer
13470     and then jumps to another function.  When the jumped-to function
13471     returns, control is transferred directly to the caller, without
13472     returning to the thunk.  The first parameter to the thunk is
13473     always the `this' pointer; the thunk should add `THUNK_DELTA' to
13474     this value.  (The `THUNK_DELTA' is an `int', not an `INTEGER_CST'.)
13475
13476     Then, if `THUNK_VCALL_OFFSET' (an `INTEGER_CST') is nonzero the
13477     adjusted `this' pointer must be adjusted again.  The complete
13478     calculation is given by the following pseudo-code:
13479
13480          this += THUNK_DELTA
13481          if (THUNK_VCALL_OFFSET)
13482            this += (*((ptrdiff_t **) this))[THUNK_VCALL_OFFSET]
13483
13484     Finally, the thunk should jump to the location given by
13485     `DECL_INITIAL'; this will always be an expression for the address
13486     of a function.
13487
13488`DECL_NON_THUNK_FUNCTION_P'
13489     This predicate holds if the function is _not_ a thunk function.
13490
13491`GLOBAL_INIT_PRIORITY'
13492     If either `DECL_GLOBAL_CTOR_P' or `DECL_GLOBAL_DTOR_P' holds, then
13493     this gives the initialization priority for the function.  The
13494     linker will arrange that all functions for which
13495     `DECL_GLOBAL_CTOR_P' holds are run in increasing order of priority
13496     before `main' is called.  When the program exits, all functions for
13497     which `DECL_GLOBAL_DTOR_P' holds are run in the reverse order.
13498
13499`TYPE_RAISES_EXCEPTIONS'
13500     This macro returns the list of exceptions that a (member-)function
13501     can raise.  The returned list, if non `NULL', is comprised of nodes
13502     whose `TREE_VALUE' represents a type.
13503
13504`TYPE_NOTHROW_P'
13505     This predicate holds when the exception-specification of its
13506     arguments is of the form ``()''.
13507
13508`DECL_ARRAY_DELETE_OPERATOR_P'
13509     This predicate holds if the function an overloaded `operator
13510     delete[]'.
13511
13512
13513
13514File: gccint.info,  Node: Statements for C++,  Next: C++ Expressions,  Prev: Functions for C++,  Up: C and C++ Trees
13515
1351611.10.5 Statements for C++
13517--------------------------
13518
13519A function that has a definition in the current translation unit will
13520have a non-`NULL' `DECL_INITIAL'.  However, back ends should not make
13521use of the particular value given by `DECL_INITIAL'.
13522
13523 The `DECL_SAVED_TREE' macro will give the complete body of the
13524function.
13525
1352611.10.5.1 Statements
13527....................
13528
13529There are tree nodes corresponding to all of the source-level statement
13530constructs, used within the C and C++ frontends.  These are enumerated
13531here, together with a list of the various macros that can be used to
13532obtain information about them.  There are a few macros that can be used
13533with all statements:
13534
13535`STMT_IS_FULL_EXPR_P'
13536     In C++, statements normally constitute "full expressions";
13537     temporaries created during a statement are destroyed when the
13538     statement is complete.  However, G++ sometimes represents
13539     expressions by statements; these statements will not have
13540     `STMT_IS_FULL_EXPR_P' set.  Temporaries created during such
13541     statements should be destroyed when the innermost enclosing
13542     statement with `STMT_IS_FULL_EXPR_P' set is exited.
13543
13544
13545 Here is the list of the various statement nodes, and the macros used to
13546access them.  This documentation describes the use of these nodes in
13547non-template functions (including instantiations of template functions).
13548In template functions, the same nodes are used, but sometimes in
13549slightly different ways.
13550
13551 Many of the statements have substatements.  For example, a `while'
13552loop will have a body, which is itself a statement.  If the substatement
13553is `NULL_TREE', it is considered equivalent to a statement consisting
13554of a single `;', i.e., an expression statement in which the expression
13555has been omitted.  A substatement may in fact be a list of statements,
13556connected via their `TREE_CHAIN's.  So, you should always process the
13557statement tree by looping over substatements, like this:
13558     void process_stmt (stmt)
13559          tree stmt;
13560     {
13561       while (stmt)
13562         {
13563           switch (TREE_CODE (stmt))
13564             {
13565             case IF_STMT:
13566               process_stmt (THEN_CLAUSE (stmt));
13567               /* More processing here.  */
13568               break;
13569
13570             ...
13571             }
13572
13573           stmt = TREE_CHAIN (stmt);
13574         }
13575     }
13576 In other words, while the `then' clause of an `if' statement in C++
13577can be only one statement (although that one statement may be a
13578compound statement), the intermediate representation will sometimes use
13579several statements chained together.
13580
13581`BREAK_STMT'
13582     Used to represent a `break' statement.  There are no additional
13583     fields.
13584
13585`CLEANUP_STMT'
13586     Used to represent an action that should take place upon exit from
13587     the enclosing scope.  Typically, these actions are calls to
13588     destructors for local objects, but back ends cannot rely on this
13589     fact.  If these nodes are in fact representing such destructors,
13590     `CLEANUP_DECL' will be the `VAR_DECL' destroyed.  Otherwise,
13591     `CLEANUP_DECL' will be `NULL_TREE'.  In any case, the
13592     `CLEANUP_EXPR' is the expression to execute.  The cleanups
13593     executed on exit from a scope should be run in the reverse order
13594     of the order in which the associated `CLEANUP_STMT's were
13595     encountered.
13596
13597`CONTINUE_STMT'
13598     Used to represent a `continue' statement.  There are no additional
13599     fields.
13600
13601`CTOR_STMT'
13602     Used to mark the beginning (if `CTOR_BEGIN_P' holds) or end (if
13603     `CTOR_END_P' holds of the main body of a constructor.  See also
13604     `SUBOBJECT' for more information on how to use these nodes.
13605
13606`DO_STMT'
13607     Used to represent a `do' loop.  The body of the loop is given by
13608     `DO_BODY' while the termination condition for the loop is given by
13609     `DO_COND'.  The condition for a `do'-statement is always an
13610     expression.
13611
13612`EMPTY_CLASS_EXPR'
13613     Used to represent a temporary object of a class with no data whose
13614     address is never taken.  (All such objects are interchangeable.)
13615     The `TREE_TYPE' represents the type of the object.
13616
13617`EXPR_STMT'
13618     Used to represent an expression statement.  Use `EXPR_STMT_EXPR' to
13619     obtain the expression.
13620
13621`FOR_STMT'
13622     Used to represent a `for' statement.  The `FOR_INIT_STMT' is the
13623     initialization statement for the loop.  The `FOR_COND' is the
13624     termination condition.  The `FOR_EXPR' is the expression executed
13625     right before the `FOR_COND' on each loop iteration; often, this
13626     expression increments a counter.  The body of the loop is given by
13627     `FOR_BODY'.  Note that `FOR_INIT_STMT' and `FOR_BODY' return
13628     statements, while `FOR_COND' and `FOR_EXPR' return expressions.
13629
13630`HANDLER'
13631     Used to represent a C++ `catch' block.  The `HANDLER_TYPE' is the
13632     type of exception that will be caught by this handler; it is equal
13633     (by pointer equality) to `NULL' if this handler is for all types.
13634     `HANDLER_PARMS' is the `DECL_STMT' for the catch parameter, and
13635     `HANDLER_BODY' is the code for the block itself.
13636
13637`IF_STMT'
13638     Used to represent an `if' statement.  The `IF_COND' is the
13639     expression.
13640
13641     If the condition is a `TREE_LIST', then the `TREE_PURPOSE' is a
13642     statement (usually a `DECL_STMT').  Each time the condition is
13643     evaluated, the statement should be executed.  Then, the
13644     `TREE_VALUE' should be used as the conditional expression itself.
13645     This representation is used to handle C++ code like this:
13646
13647     C++ distinguishes between this and `COND_EXPR' for handling
13648     templates.
13649
13650          if (int i = 7) ...
13651
13652     where there is a new local variable (or variables) declared within
13653     the condition.
13654
13655     The `THEN_CLAUSE' represents the statement given by the `then'
13656     condition, while the `ELSE_CLAUSE' represents the statement given
13657     by the `else' condition.
13658
13659`SUBOBJECT'
13660     In a constructor, these nodes are used to mark the point at which a
13661     subobject of `this' is fully constructed.  If, after this point, an
13662     exception is thrown before a `CTOR_STMT' with `CTOR_END_P' set is
13663     encountered, the `SUBOBJECT_CLEANUP' must be executed.  The
13664     cleanups must be executed in the reverse order in which they
13665     appear.
13666
13667`SWITCH_STMT'
13668     Used to represent a `switch' statement.  The `SWITCH_STMT_COND' is
13669     the expression on which the switch is occurring.  See the
13670     documentation for an `IF_STMT' for more information on the
13671     representation used for the condition.  The `SWITCH_STMT_BODY' is
13672     the body of the switch statement.   The `SWITCH_STMT_TYPE' is the
13673     original type of switch expression as given in the source, before
13674     any compiler conversions.
13675
13676`TRY_BLOCK'
13677     Used to represent a `try' block.  The body of the try block is
13678     given by `TRY_STMTS'.  Each of the catch blocks is a `HANDLER'
13679     node.  The first handler is given by `TRY_HANDLERS'.  Subsequent
13680     handlers are obtained by following the `TREE_CHAIN' link from one
13681     handler to the next.  The body of the handler is given by
13682     `HANDLER_BODY'.
13683
13684     If `CLEANUP_P' holds of the `TRY_BLOCK', then the `TRY_HANDLERS'
13685     will not be a `HANDLER' node.  Instead, it will be an expression
13686     that should be executed if an exception is thrown in the try
13687     block.  It must rethrow the exception after executing that code.
13688     And, if an exception is thrown while the expression is executing,
13689     `terminate' must be called.
13690
13691`USING_STMT'
13692     Used to represent a `using' directive.  The namespace is given by
13693     `USING_STMT_NAMESPACE', which will be a NAMESPACE_DECL.  This node
13694     is needed inside template functions, to implement using directives
13695     during instantiation.
13696
13697`WHILE_STMT'
13698     Used to represent a `while' loop.  The `WHILE_COND' is the
13699     termination condition for the loop.  See the documentation for an
13700     `IF_STMT' for more information on the representation used for the
13701     condition.
13702
13703     The `WHILE_BODY' is the body of the loop.
13704
13705
13706
13707File: gccint.info,  Node: C++ Expressions,  Prev: Statements for C++,  Up: C and C++ Trees
13708
1370911.10.6 C++ Expressions
13710-----------------------
13711
13712This section describes expressions specific to the C and C++ front ends.
13713
13714`TYPEID_EXPR'
13715     Used to represent a `typeid' expression.
13716
13717`NEW_EXPR'
13718`VEC_NEW_EXPR'
13719     Used to represent a call to `new' and `new[]' respectively.
13720
13721`DELETE_EXPR'
13722`VEC_DELETE_EXPR'
13723     Used to represent a call to `delete' and `delete[]' respectively.
13724
13725`MEMBER_REF'
13726     Represents a reference to a member of a class.
13727
13728`THROW_EXPR'
13729     Represents an instance of `throw' in the program.  Operand 0,
13730     which is the expression to throw, may be `NULL_TREE'.
13731
13732`AGGR_INIT_EXPR'
13733     An `AGGR_INIT_EXPR' represents the initialization as the return
13734     value of a function call, or as the result of a constructor.  An
13735     `AGGR_INIT_EXPR' will only appear as a full-expression, or as the
13736     second operand of a `TARGET_EXPR'.  `AGGR_INIT_EXPR's have a
13737     representation similar to that of `CALL_EXPR's.  You can use the
13738     `AGGR_INIT_EXPR_FN' and `AGGR_INIT_EXPR_ARG' macros to access the
13739     function to call and the arguments to pass.
13740
13741     If `AGGR_INIT_VIA_CTOR_P' holds of the `AGGR_INIT_EXPR', then the
13742     initialization is via a constructor call.  The address of the
13743     `AGGR_INIT_EXPR_SLOT' operand, which is always a `VAR_DECL', is
13744     taken, and this value replaces the first argument in the argument
13745     list.
13746
13747     In either case, the expression is void.
13748
13749
13750
13751File: gccint.info,  Node: Java Trees,  Prev: C and C++ Trees,  Up: GENERIC
13752
1375311.11 Java Trees
13754================
13755
13756
13757File: gccint.info,  Node: GIMPLE,  Next: Tree SSA,  Prev: GENERIC,  Up: Top
13758
1375912 GIMPLE
13760*********
13761
13762GIMPLE is a three-address representation derived from GENERIC by
13763breaking down GENERIC expressions into tuples of no more than 3
13764operands (with some exceptions like function calls).  GIMPLE was
13765heavily influenced by the SIMPLE IL used by the McCAT compiler project
13766at McGill University, though we have made some different choices.  For
13767one thing, SIMPLE doesn't support `goto'.
13768
13769 Temporaries are introduced to hold intermediate values needed to
13770compute complex expressions. Additionally, all the control structures
13771used in GENERIC are lowered into conditional jumps, lexical scopes are
13772removed and exception regions are converted into an on the side
13773exception region tree.
13774
13775 The compiler pass which converts GENERIC into GIMPLE is referred to as
13776the `gimplifier'.  The gimplifier works recursively, generating GIMPLE
13777tuples out of the original GENERIC expressions.
13778
13779 One of the early implementation strategies used for the GIMPLE
13780representation was to use the same internal data structures used by
13781front ends to represent parse trees. This simplified implementation
13782because we could leverage existing functionality and interfaces.
13783However, GIMPLE is a much more restrictive representation than abstract
13784syntax trees (AST), therefore it does not require the full structural
13785complexity provided by the main tree data structure.
13786
13787 The GENERIC representation of a function is stored in the
13788`DECL_SAVED_TREE' field of the associated `FUNCTION_DECL' tree node.
13789It is converted to GIMPLE by a call to `gimplify_function_tree'.
13790
13791 If a front end wants to include language-specific tree codes in the
13792tree representation which it provides to the back end, it must provide a
13793definition of `LANG_HOOKS_GIMPLIFY_EXPR' which knows how to convert the
13794front end trees to GIMPLE.  Usually such a hook will involve much of
13795the same code for expanding front end trees to RTL.  This function can
13796return fully lowered GIMPLE, or it can return GENERIC trees and let the
13797main gimplifier lower them the rest of the way; this is often simpler.
13798GIMPLE that is not fully lowered is known as "High GIMPLE" and consists
13799of the IL before the pass `pass_lower_cf'.  High GIMPLE contains some
13800container statements like lexical scopes (represented by `GIMPLE_BIND')
13801and nested expressions (e.g., `GIMPLE_TRY'), while "Low GIMPLE" exposes
13802all of the implicit jumps for control and exception expressions
13803directly in the IL and EH region trees.
13804
13805 The C and C++ front ends currently convert directly from front end
13806trees to GIMPLE, and hand that off to the back end rather than first
13807converting to GENERIC.  Their gimplifier hooks know about all the
13808`_STMT' nodes and how to convert them to GENERIC forms.  There was some
13809work done on a genericization pass which would run first, but the
13810existence of `STMT_EXPR' meant that in order to convert all of the C
13811statements into GENERIC equivalents would involve walking the entire
13812tree anyway, so it was simpler to lower all the way.  This might change
13813in the future if someone writes an optimization pass which would work
13814better with higher-level trees, but currently the optimizers all expect
13815GIMPLE.
13816
13817 You can request to dump a C-like representation of the GIMPLE form
13818with the flag `-fdump-tree-gimple'.
13819
13820* Menu:
13821
13822* Tuple representation::
13823* GIMPLE instruction set::
13824* GIMPLE Exception Handling::
13825* Temporaries::
13826* Operands::
13827* Manipulating GIMPLE statements::
13828* Tuple specific accessors::
13829* GIMPLE sequences::
13830* Sequence iterators::
13831* Adding a new GIMPLE statement code::
13832* Statement and operand traversals::
13833
13834
13835File: gccint.info,  Node: Tuple representation,  Next: GIMPLE instruction set,  Up: GIMPLE
13836
1383712.1 Tuple representation
13838=========================
13839
13840GIMPLE instructions are tuples of variable size divided in two groups:
13841a header describing the instruction and its locations, and a variable
13842length body with all the operands. Tuples are organized into a
13843hierarchy with 3 main classes of tuples.
13844
1384512.1.1 `gimple_statement_base' (gsbase)
13846---------------------------------------
13847
13848This is the root of the hierarchy, it holds basic information needed by
13849most GIMPLE statements. There are some fields that may not be relevant
13850to every GIMPLE statement, but those were moved into the base structure
13851to take advantage of holes left by other fields (thus making the
13852structure more compact).  The structure takes 4 words (32 bytes) on 64
13853bit hosts:
13854
13855Field                   Size (bits)
13856`code'                  8
13857`subcode'               16
13858`no_warning'            1
13859`visited'               1
13860`nontemporal_move'      1
13861`plf'                   2
13862`modified'              1
13863`has_volatile_ops'      1
13864`references_memory_p'   1
13865`uid'                   32
13866`location'              32
13867`num_ops'               32
13868`bb'                    64
13869`block'                 63
13870Total size              32 bytes
13871
13872   * `code' Main identifier for a GIMPLE instruction.
13873
13874   * `subcode' Used to distinguish different variants of the same basic
13875     instruction or provide flags applicable to a given code. The
13876     `subcode' flags field has different uses depending on the code of
13877     the instruction, but mostly it distinguishes instructions of the
13878     same family. The most prominent use of this field is in
13879     assignments, where subcode indicates the operation done on the RHS
13880     of the assignment. For example, a = b + c is encoded as
13881     `GIMPLE_ASSIGN <PLUS_EXPR, a, b, c>'.
13882
13883   * `no_warning' Bitflag to indicate whether a warning has already
13884     been issued on this statement.
13885
13886   * `visited' General purpose "visited" marker. Set and cleared by
13887     each pass when needed.
13888
13889   * `nontemporal_move' Bitflag used in assignments that represent
13890     non-temporal moves.  Although this bitflag is only used in
13891     assignments, it was moved into the base to take advantage of the
13892     bit holes left by the previous fields.
13893
13894   * `plf' Pass Local Flags. This 2-bit mask can be used as general
13895     purpose markers by any pass. Passes are responsible for clearing
13896     and setting these two flags accordingly.
13897
13898   * `modified' Bitflag to indicate whether the statement has been
13899     modified.  Used mainly by the operand scanner to determine when to
13900     re-scan a statement for operands.
13901
13902   * `has_volatile_ops' Bitflag to indicate whether this statement
13903     contains operands that have been marked volatile.
13904
13905   * `references_memory_p' Bitflag to indicate whether this statement
13906     contains memory references (i.e., its operands are either global
13907     variables, or pointer dereferences or anything that must reside in
13908     memory).
13909
13910   * `uid' This is an unsigned integer used by passes that want to
13911     assign IDs to every statement. These IDs must be assigned and used
13912     by each pass.
13913
13914   * `location' This is a `location_t' identifier to specify source code
13915     location for this statement. It is inherited from the front end.
13916
13917   * `num_ops' Number of operands that this statement has. This
13918     specifies the size of the operand vector embedded in the tuple.
13919     Only used in some tuples, but it is declared in the base tuple to
13920     take advantage of the 32-bit hole left by the previous fields.
13921
13922   * `bb' Basic block holding the instruction.
13923
13924   * `block' Lexical block holding this statement.  Also used for debug
13925     information generation.
13926
1392712.1.2 `gimple_statement_with_ops'
13928----------------------------------
13929
13930This tuple is actually split in two: `gimple_statement_with_ops_base'
13931and `gimple_statement_with_ops'. This is needed to accommodate the way
13932the operand vector is allocated. The operand vector is defined to be an
13933array of 1 element. So, to allocate a dynamic number of operands, the
13934memory allocator (`gimple_alloc') simply allocates enough memory to
13935hold the structure itself plus `N - 1' operands which run "off the end"
13936of the structure. For example, to allocate space for a tuple with 3
13937operands, `gimple_alloc' reserves `sizeof (struct
13938gimple_statement_with_ops) + 2 * sizeof (tree)' bytes.
13939
13940 On the other hand, several fields in this tuple need to be shared with
13941the `gimple_statement_with_memory_ops' tuple. So, these common fields
13942are placed in `gimple_statement_with_ops_base' which is then inherited
13943from the other two tuples.
13944
13945`gsbase'    256
13946`def_ops'   64
13947`use_ops'   64
13948`op'        `num_ops' * 64
13949Total size  48 + 8 * `num_ops' bytes
13950
13951   * `gsbase' Inherited from `struct gimple_statement_base'.
13952
13953   * `def_ops' Array of pointers into the operand array indicating all
13954     the slots that contain a variable written-to by the statement.
13955     This array is also used for immediate use chaining. Note that it
13956     would be possible to not rely on this array, but the changes
13957     required to implement this are pretty invasive.
13958
13959   * `use_ops' Similar to `def_ops' but for variables read by the
13960     statement.
13961
13962   * `op' Array of trees with `num_ops' slots.
13963
1396412.1.3 `gimple_statement_with_memory_ops'
13965-----------------------------------------
13966
13967This tuple is essentially identical to `gimple_statement_with_ops',
13968except that it contains 4 additional fields to hold vectors related
13969memory stores and loads.  Similar to the previous case, the structure
13970is split in two to accommodate for the operand vector
13971(`gimple_statement_with_memory_ops_base' and
13972`gimple_statement_with_memory_ops').
13973
13974Field        Size (bits)
13975`gsbase'     256
13976`def_ops'    64
13977`use_ops'    64
13978`vdef_ops'   64
13979`vuse_ops'   64
13980`stores'     64
13981`loads'      64
13982`op'         `num_ops' * 64
13983Total size   80 + 8 * `num_ops' bytes
13984
13985   * `vdef_ops' Similar to `def_ops' but for `VDEF' operators. There is
13986     one entry per memory symbol written by this statement. This is
13987     used to maintain the memory SSA use-def and def-def chains.
13988
13989   * `vuse_ops' Similar to `use_ops' but for `VUSE' operators. There is
13990     one entry per memory symbol loaded by this statement. This is used
13991     to maintain the memory SSA use-def chains.
13992
13993   * `stores' Bitset with all the UIDs for the symbols written-to by the
13994     statement.  This is different than `vdef_ops' in that all the
13995     affected symbols are mentioned in this set.  If memory
13996     partitioning is enabled, the `vdef_ops' vector will refer to memory
13997     partitions. Furthermore, no SSA information is stored in this set.
13998
13999   * `loads' Similar to `stores', but for memory loads. (Note that there
14000     is some amount of redundancy here, it should be possible to reduce
14001     memory utilization further by removing these sets).
14002
14003 All the other tuples are defined in terms of these three basic ones.
14004Each tuple will add some fields. The main gimple type is defined to be
14005the union of all these structures (`GTY' markers elided for clarity):
14006
14007     union gimple_statement_d
14008     {
14009       struct gimple_statement_base gsbase;
14010       struct gimple_statement_with_ops gsops;
14011       struct gimple_statement_with_memory_ops gsmem;
14012       struct gimple_statement_omp omp;
14013       struct gimple_statement_bind gimple_bind;
14014       struct gimple_statement_catch gimple_catch;
14015       struct gimple_statement_eh_filter gimple_eh_filter;
14016       struct gimple_statement_phi gimple_phi;
14017       struct gimple_statement_resx gimple_resx;
14018       struct gimple_statement_try gimple_try;
14019       struct gimple_statement_wce gimple_wce;
14020       struct gimple_statement_asm gimple_asm;
14021       struct gimple_statement_omp_critical gimple_omp_critical;
14022       struct gimple_statement_omp_for gimple_omp_for;
14023       struct gimple_statement_omp_parallel gimple_omp_parallel;
14024       struct gimple_statement_omp_task gimple_omp_task;
14025       struct gimple_statement_omp_sections gimple_omp_sections;
14026       struct gimple_statement_omp_single gimple_omp_single;
14027       struct gimple_statement_omp_continue gimple_omp_continue;
14028       struct gimple_statement_omp_atomic_load gimple_omp_atomic_load;
14029       struct gimple_statement_omp_atomic_store gimple_omp_atomic_store;
14030     };
14031
14032
14033File: gccint.info,  Node: GIMPLE instruction set,  Next: GIMPLE Exception Handling,  Prev: Tuple representation,  Up: GIMPLE
14034
1403512.2 GIMPLE instruction set
14036===========================
14037
14038The following table briefly describes the GIMPLE instruction set.
14039
14040Instruction                    High GIMPLE   Low GIMPLE
14041`GIMPLE_ASM'                   x             x
14042`GIMPLE_ASSIGN'                x             x
14043`GIMPLE_BIND'                  x
14044`GIMPLE_CALL'                  x             x
14045`GIMPLE_CATCH'                 x
14046`GIMPLE_COND'                  x             x
14047`GIMPLE_DEBUG'                 x             x
14048`GIMPLE_EH_FILTER'             x
14049`GIMPLE_GOTO'                  x             x
14050`GIMPLE_LABEL'                 x             x
14051`GIMPLE_NOP'                   x             x
14052`GIMPLE_OMP_ATOMIC_LOAD'       x             x
14053`GIMPLE_OMP_ATOMIC_STORE'      x             x
14054`GIMPLE_OMP_CONTINUE'          x             x
14055`GIMPLE_OMP_CRITICAL'          x             x
14056`GIMPLE_OMP_FOR'               x             x
14057`GIMPLE_OMP_MASTER'            x             x
14058`GIMPLE_OMP_ORDERED'           x             x
14059`GIMPLE_OMP_PARALLEL'          x             x
14060`GIMPLE_OMP_RETURN'            x             x
14061`GIMPLE_OMP_SECTION'           x             x
14062`GIMPLE_OMP_SECTIONS'          x             x
14063`GIMPLE_OMP_SECTIONS_SWITCH'   x             x
14064`GIMPLE_OMP_SINGLE'            x             x
14065`GIMPLE_PHI'                                 x
14066`GIMPLE_RESX'                                x
14067`GIMPLE_RETURN'                x             x
14068`GIMPLE_SWITCH'                x             x
14069`GIMPLE_TRY'                   x
14070
14071
14072File: gccint.info,  Node: GIMPLE Exception Handling,  Next: Temporaries,  Prev: GIMPLE instruction set,  Up: GIMPLE
14073
1407412.3 Exception Handling
14075=======================
14076
14077Other exception handling constructs are represented using
14078`GIMPLE_TRY_CATCH'.  `GIMPLE_TRY_CATCH' has two operands.  The first
14079operand is a sequence of statements to execute.  If executing these
14080statements does not throw an exception, then the second operand is
14081ignored.  Otherwise, if an exception is thrown, then the second operand
14082of the `GIMPLE_TRY_CATCH' is checked.  The second operand may have the
14083following forms:
14084
14085  1. A sequence of statements to execute.  When an exception occurs,
14086     these statements are executed, and then the exception is rethrown.
14087
14088  2. A sequence of `GIMPLE_CATCH' statements.  Each `GIMPLE_CATCH' has
14089     a list of applicable exception types and handler code.  If the
14090     thrown exception matches one of the caught types, the associated
14091     handler code is executed.  If the handler code falls off the
14092     bottom, execution continues after the original `GIMPLE_TRY_CATCH'.
14093
14094  3. A `GIMPLE_EH_FILTER' statement.  This has a list of permitted
14095     exception types, and code to handle a match failure.  If the
14096     thrown exception does not match one of the allowed types, the
14097     associated match failure code is executed.  If the thrown exception
14098     does match, it continues unwinding the stack looking for the next
14099     handler.
14100
14101
14102 Currently throwing an exception is not directly represented in GIMPLE,
14103since it is implemented by calling a function.  At some point in the
14104future we will want to add some way to express that the call will throw
14105an exception of a known type.
14106
14107 Just before running the optimizers, the compiler lowers the high-level
14108EH constructs above into a set of `goto's, magic labels, and EH
14109regions.  Continuing to unwind at the end of a cleanup is represented
14110with a `GIMPLE_RESX'.
14111
14112
14113File: gccint.info,  Node: Temporaries,  Next: Operands,  Prev: GIMPLE Exception Handling,  Up: GIMPLE
14114
1411512.4 Temporaries
14116================
14117
14118When gimplification encounters a subexpression that is too complex, it
14119creates a new temporary variable to hold the value of the
14120subexpression, and adds a new statement to initialize it before the
14121current statement. These special temporaries are known as `expression
14122temporaries', and are allocated using `get_formal_tmp_var'.  The
14123compiler tries to always evaluate identical expressions into the same
14124temporary, to simplify elimination of redundant calculations.
14125
14126 We can only use expression temporaries when we know that it will not
14127be reevaluated before its value is used, and that it will not be
14128otherwise modified(1). Other temporaries can be allocated using
14129`get_initialized_tmp_var' or `create_tmp_var'.
14130
14131 Currently, an expression like `a = b + 5' is not reduced any further.
14132We tried converting it to something like
14133     T1 = b + 5;
14134     a = T1;
14135 but this bloated the representation for minimal benefit.  However, a
14136variable which must live in memory cannot appear in an expression; its
14137value is explicitly loaded into a temporary first.  Similarly, storing
14138the value of an expression to a memory variable goes through a
14139temporary.
14140
14141 ---------- Footnotes ----------
14142
14143 (1) These restrictions are derived from those in Morgan 4.8.
14144
14145
14146File: gccint.info,  Node: Operands,  Next: Manipulating GIMPLE statements,  Prev: Temporaries,  Up: GIMPLE
14147
1414812.5 Operands
14149=============
14150
14151In general, expressions in GIMPLE consist of an operation and the
14152appropriate number of simple operands; these operands must either be a
14153GIMPLE rvalue (`is_gimple_val'), i.e. a constant or a register
14154variable.  More complex operands are factored out into temporaries, so
14155that
14156     a = b + c + d
14157 becomes
14158     T1 = b + c;
14159     a = T1 + d;
14160
14161 The same rule holds for arguments to a `GIMPLE_CALL'.
14162
14163 The target of an assignment is usually a variable, but can also be a
14164`MEM_REF' or a compound lvalue as described below.
14165
14166* Menu:
14167
14168* Compound Expressions::
14169* Compound Lvalues::
14170* Conditional Expressions::
14171* Logical Operators::
14172
14173
14174File: gccint.info,  Node: Compound Expressions,  Next: Compound Lvalues,  Up: Operands
14175
1417612.5.1 Compound Expressions
14177---------------------------
14178
14179The left-hand side of a C comma expression is simply moved into a
14180separate statement.
14181
14182
14183File: gccint.info,  Node: Compound Lvalues,  Next: Conditional Expressions,  Prev: Compound Expressions,  Up: Operands
14184
1418512.5.2 Compound Lvalues
14186-----------------------
14187
14188Currently compound lvalues involving array and structure field
14189references are not broken down; an expression like `a.b[2] = 42' is not
14190reduced any further (though complex array subscripts are).  This
14191restriction is a workaround for limitations in later optimizers; if we
14192were to convert this to
14193
14194     T1 = &a.b;
14195     T1[2] = 42;
14196
14197 alias analysis would not remember that the reference to `T1[2]' came
14198by way of `a.b', so it would think that the assignment could alias
14199another member of `a'; this broke `struct-alias-1.c'.  Future optimizer
14200improvements may make this limitation unnecessary.
14201
14202
14203File: gccint.info,  Node: Conditional Expressions,  Next: Logical Operators,  Prev: Compound Lvalues,  Up: Operands
14204
1420512.5.3 Conditional Expressions
14206------------------------------
14207
14208A C `?:' expression is converted into an `if' statement with each
14209branch assigning to the same temporary.  So,
14210
14211     a = b ? c : d;
14212 becomes
14213     if (b == 1)
14214       T1 = c;
14215     else
14216       T1 = d;
14217     a = T1;
14218
14219 The GIMPLE level if-conversion pass re-introduces `?:' expression, if
14220appropriate. It is used to vectorize loops with conditions using vector
14221conditional operations.
14222
14223 Note that in GIMPLE, `if' statements are represented using
14224`GIMPLE_COND', as described below.
14225
14226
14227File: gccint.info,  Node: Logical Operators,  Prev: Conditional Expressions,  Up: Operands
14228
1422912.5.4 Logical Operators
14230------------------------
14231
14232Except when they appear in the condition operand of a `GIMPLE_COND',
14233logical `and' and `or' operators are simplified as follows: `a = b &&
14234c' becomes
14235
14236     T1 = (bool)b;
14237     if (T1 == true)
14238       T1 = (bool)c;
14239     a = T1;
14240
14241 Note that `T1' in this example cannot be an expression temporary,
14242because it has two different assignments.
14243
1424412.5.5 Manipulating operands
14245----------------------------
14246
14247All gimple operands are of type `tree'.  But only certain types of
14248trees are allowed to be used as operand tuples.  Basic validation is
14249controlled by the function `get_gimple_rhs_class', which given a tree
14250code, returns an `enum' with the following values of type `enum
14251gimple_rhs_class'
14252
14253   * `GIMPLE_INVALID_RHS' The tree cannot be used as a GIMPLE operand.
14254
14255   * `GIMPLE_TERNARY_RHS' The tree is a valid GIMPLE ternary operation.
14256
14257   * `GIMPLE_BINARY_RHS' The tree is a valid GIMPLE binary operation.
14258
14259   * `GIMPLE_UNARY_RHS' The tree is a valid GIMPLE unary operation.
14260
14261   * `GIMPLE_SINGLE_RHS' The tree is a single object, that cannot be
14262     split into simpler operands (for instance, `SSA_NAME', `VAR_DECL',
14263     `COMPONENT_REF', etc).
14264
14265     This operand class also acts as an escape hatch for tree nodes
14266     that may be flattened out into the operand vector, but would need
14267     more than two slots on the RHS.  For instance, a `COND_EXPR'
14268     expression of the form `(a op b) ? x : y' could be flattened out
14269     on the operand vector using 4 slots, but it would also require
14270     additional processing to distinguish `c = a op b' from `c = a op b
14271     ? x : y'.  Something similar occurs with `ASSERT_EXPR'.   In time,
14272     these special case tree expressions should be flattened into the
14273     operand vector.
14274
14275 For tree nodes in the categories `GIMPLE_TERNARY_RHS',
14276`GIMPLE_BINARY_RHS' and `GIMPLE_UNARY_RHS', they cannot be stored
14277inside tuples directly.  They first need to be flattened and separated
14278into individual components.  For instance, given the GENERIC expression
14279
14280     a = b + c
14281
14282 its tree representation is:
14283
14284     MODIFY_EXPR <VAR_DECL  <a>, PLUS_EXPR <VAR_DECL <b>, VAR_DECL <c>>>
14285
14286 In this case, the GIMPLE form for this statement is logically
14287identical to its GENERIC form but in GIMPLE, the `PLUS_EXPR' on the RHS
14288of the assignment is not represented as a tree, instead the two
14289operands are taken out of the `PLUS_EXPR' sub-tree and flattened into
14290the GIMPLE tuple as follows:
14291
14292     GIMPLE_ASSIGN <PLUS_EXPR, VAR_DECL <a>, VAR_DECL <b>, VAR_DECL <c>>
14293
1429412.5.6 Operand vector allocation
14295--------------------------------
14296
14297The operand vector is stored at the bottom of the three tuple
14298structures that accept operands. This means, that depending on the code
14299of a given statement, its operand vector will be at different offsets
14300from the base of the structure.  To access tuple operands use the
14301following accessors
14302
14303 -- GIMPLE function: unsigned gimple_num_ops (gimple g)
14304     Returns the number of operands in statement G.
14305
14306 -- GIMPLE function: tree gimple_op (gimple g, unsigned i)
14307     Returns operand `I' from statement `G'.
14308
14309 -- GIMPLE function: tree * gimple_ops (gimple g)
14310     Returns a pointer into the operand vector for statement `G'.  This
14311     is computed using an internal table called `gimple_ops_offset_'[].
14312     This table is indexed by the gimple code of `G'.
14313
14314     When the compiler is built, this table is filled-in using the
14315     sizes of the structures used by each statement code defined in
14316     gimple.def.  Since the operand vector is at the bottom of the
14317     structure, for a gimple code `C' the offset is computed as sizeof
14318     (struct-of `C') - sizeof (tree).
14319
14320     This mechanism adds one memory indirection to every access when
14321     using `gimple_op'(), if this becomes a bottleneck, a pass can
14322     choose to memoize the result from `gimple_ops'() and use that to
14323     access the operands.
14324
1432512.5.7 Operand validation
14326-------------------------
14327
14328When adding a new operand to a gimple statement, the operand will be
14329validated according to what each tuple accepts in its operand vector.
14330These predicates are called by the `gimple_NAME_set_...()'.  Each tuple
14331will use one of the following predicates (Note, this list is not
14332exhaustive):
14333
14334 -- GIMPLE function: bool is_gimple_val (tree t)
14335     Returns true if t is a "GIMPLE value", which are all the
14336     non-addressable stack variables (variables for which
14337     `is_gimple_reg' returns true) and constants (expressions for which
14338     `is_gimple_min_invariant' returns true).
14339
14340 -- GIMPLE function: bool is_gimple_addressable (tree t)
14341     Returns true if t is a symbol or memory reference whose address
14342     can be taken.
14343
14344 -- GIMPLE function: bool is_gimple_asm_val (tree t)
14345     Similar to `is_gimple_val' but it also accepts hard registers.
14346
14347 -- GIMPLE function: bool is_gimple_call_addr (tree t)
14348     Return true if t is a valid expression to use as the function
14349     called by a `GIMPLE_CALL'.
14350
14351 -- GIMPLE function: bool is_gimple_mem_ref_addr (tree t)
14352     Return true if t is a valid expression to use as first operand of
14353     a `MEM_REF' expression.
14354
14355 -- GIMPLE function: bool is_gimple_constant (tree t)
14356     Return true if t is a valid gimple constant.
14357
14358 -- GIMPLE function: bool is_gimple_min_invariant (tree t)
14359     Return true if t is a valid minimal invariant.  This is different
14360     from constants, in that the specific value of t may not be known
14361     at compile time, but it is known that it doesn't change (e.g., the
14362     address of a function local variable).
14363
14364 -- GIMPLE function: bool is_gimple_ip_invariant (tree t)
14365     Return true if t is an interprocedural invariant.  This means that
14366     t is a valid invariant in all functions (e.g. it can be an address
14367     of a global variable but not of a local one).
14368
14369 -- GIMPLE function: bool is_gimple_ip_invariant_address (tree t)
14370     Return true if t is an `ADDR_EXPR' that does not change once the
14371     program is running (and which is valid in all functions).
14372
1437312.5.8 Statement validation
14374---------------------------
14375
14376 -- GIMPLE function: bool is_gimple_assign (gimple g)
14377     Return true if the code of g is `GIMPLE_ASSIGN'.
14378
14379 -- GIMPLE function: bool is_gimple_call (gimple g)
14380     Return true if the code of g is `GIMPLE_CALL'.
14381
14382 -- GIMPLE function: bool is_gimple_debug (gimple g)
14383     Return true if the code of g is `GIMPLE_DEBUG'.
14384
14385 -- GIMPLE function: bool gimple_assign_cast_p (gimple g)
14386     Return true if g is a `GIMPLE_ASSIGN' that performs a type cast
14387     operation.
14388
14389 -- GIMPLE function: bool gimple_debug_bind_p (gimple g)
14390     Return true if g is a `GIMPLE_DEBUG' that binds the value of an
14391     expression to a variable.
14392
14393
14394File: gccint.info,  Node: Manipulating GIMPLE statements,  Next: Tuple specific accessors,  Prev: Operands,  Up: GIMPLE
14395
1439612.6 Manipulating GIMPLE statements
14397===================================
14398
14399This section documents all the functions available to handle each of
14400the GIMPLE instructions.
14401
1440212.6.1 Common accessors
14403-----------------------
14404
14405The following are common accessors for gimple statements.
14406
14407 -- GIMPLE function: enum gimple_code gimple_code (gimple g)
14408     Return the code for statement `G'.
14409
14410 -- GIMPLE function: basic_block gimple_bb (gimple g)
14411     Return the basic block to which statement `G' belongs to.
14412
14413 -- GIMPLE function: tree gimple_block (gimple g)
14414     Return the lexical scope block holding statement `G'.
14415
14416 -- GIMPLE function: tree gimple_expr_type (gimple stmt)
14417     Return the type of the main expression computed by `STMT'. Return
14418     `void_type_node' if `STMT' computes nothing. This will only return
14419     something meaningful for `GIMPLE_ASSIGN', `GIMPLE_COND' and
14420     `GIMPLE_CALL'.  For all other tuple codes, it will return
14421     `void_type_node'.
14422
14423 -- GIMPLE function: enum tree_code gimple_expr_code (gimple stmt)
14424     Return the tree code for the expression computed by `STMT'.  This
14425     is only meaningful for `GIMPLE_CALL', `GIMPLE_ASSIGN' and
14426     `GIMPLE_COND'.  If `STMT' is `GIMPLE_CALL', it will return
14427     `CALL_EXPR'.  For `GIMPLE_COND', it returns the code of the
14428     comparison predicate.  For `GIMPLE_ASSIGN' it returns the code of
14429     the operation performed by the `RHS' of the assignment.
14430
14431 -- GIMPLE function: void gimple_set_block (gimple g, tree block)
14432     Set the lexical scope block of `G' to `BLOCK'.
14433
14434 -- GIMPLE function: location_t gimple_locus (gimple g)
14435     Return locus information for statement `G'.
14436
14437 -- GIMPLE function: void gimple_set_locus (gimple g, location_t locus)
14438     Set locus information for statement `G'.
14439
14440 -- GIMPLE function: bool gimple_locus_empty_p (gimple g)
14441     Return true if `G' does not have locus information.
14442
14443 -- GIMPLE function: bool gimple_no_warning_p (gimple stmt)
14444     Return true if no warnings should be emitted for statement `STMT'.
14445
14446 -- GIMPLE function: void gimple_set_visited (gimple stmt, bool
14447          visited_p)
14448     Set the visited status on statement `STMT' to `VISITED_P'.
14449
14450 -- GIMPLE function: bool gimple_visited_p (gimple stmt)
14451     Return the visited status on statement `STMT'.
14452
14453 -- GIMPLE function: void gimple_set_plf (gimple stmt, enum plf_mask
14454          plf, bool val_p)
14455     Set pass local flag `PLF' on statement `STMT' to `VAL_P'.
14456
14457 -- GIMPLE function: unsigned int gimple_plf (gimple stmt, enum
14458          plf_mask plf)
14459     Return the value of pass local flag `PLF' on statement `STMT'.
14460
14461 -- GIMPLE function: bool gimple_has_ops (gimple g)
14462     Return true if statement `G' has register or memory operands.
14463
14464 -- GIMPLE function: bool gimple_has_mem_ops (gimple g)
14465     Return true if statement `G' has memory operands.
14466
14467 -- GIMPLE function: unsigned gimple_num_ops (gimple g)
14468     Return the number of operands for statement `G'.
14469
14470 -- GIMPLE function: tree * gimple_ops (gimple g)
14471     Return the array of operands for statement `G'.
14472
14473 -- GIMPLE function: tree gimple_op (gimple g, unsigned i)
14474     Return operand `I' for statement `G'.
14475
14476 -- GIMPLE function: tree * gimple_op_ptr (gimple g, unsigned i)
14477     Return a pointer to operand `I' for statement `G'.
14478
14479 -- GIMPLE function: void gimple_set_op (gimple g, unsigned i, tree op)
14480     Set operand `I' of statement `G' to `OP'.
14481
14482 -- GIMPLE function: bitmap gimple_addresses_taken (gimple stmt)
14483     Return the set of symbols that have had their address taken by
14484     `STMT'.
14485
14486 -- GIMPLE function: struct def_optype_d * gimple_def_ops (gimple g)
14487     Return the set of `DEF' operands for statement `G'.
14488
14489 -- GIMPLE function: void gimple_set_def_ops (gimple g, struct
14490          def_optype_d *def)
14491     Set `DEF' to be the set of `DEF' operands for statement `G'.
14492
14493 -- GIMPLE function: struct use_optype_d * gimple_use_ops (gimple g)
14494     Return the set of `USE' operands for statement `G'.
14495
14496 -- GIMPLE function: void gimple_set_use_ops (gimple g, struct
14497          use_optype_d *use)
14498     Set `USE' to be the set of `USE' operands for statement `G'.
14499
14500 -- GIMPLE function: struct voptype_d * gimple_vuse_ops (gimple g)
14501     Return the set of `VUSE' operands for statement `G'.
14502
14503 -- GIMPLE function: void gimple_set_vuse_ops (gimple g, struct
14504          voptype_d *ops)
14505     Set `OPS' to be the set of `VUSE' operands for statement `G'.
14506
14507 -- GIMPLE function: struct voptype_d * gimple_vdef_ops (gimple g)
14508     Return the set of `VDEF' operands for statement `G'.
14509
14510 -- GIMPLE function: void gimple_set_vdef_ops (gimple g, struct
14511          voptype_d *ops)
14512     Set `OPS' to be the set of `VDEF' operands for statement `G'.
14513
14514 -- GIMPLE function: bitmap gimple_loaded_syms (gimple g)
14515     Return the set of symbols loaded by statement `G'.  Each element of
14516     the set is the `DECL_UID' of the corresponding symbol.
14517
14518 -- GIMPLE function: bitmap gimple_stored_syms (gimple g)
14519     Return the set of symbols stored by statement `G'.  Each element of
14520     the set is the `DECL_UID' of the corresponding symbol.
14521
14522 -- GIMPLE function: bool gimple_modified_p (gimple g)
14523     Return true if statement `G' has operands and the modified field
14524     has been set.
14525
14526 -- GIMPLE function: bool gimple_has_volatile_ops (gimple stmt)
14527     Return true if statement `STMT' contains volatile operands.
14528
14529 -- GIMPLE function: void gimple_set_has_volatile_ops (gimple stmt,
14530          bool volatilep)
14531     Return true if statement `STMT' contains volatile operands.
14532
14533 -- GIMPLE function: void update_stmt (gimple s)
14534     Mark statement `S' as modified, and update it.
14535
14536 -- GIMPLE function: void update_stmt_if_modified (gimple s)
14537     Update statement `S' if it has been marked modified.
14538
14539 -- GIMPLE function: gimple gimple_copy (gimple stmt)
14540     Return a deep copy of statement `STMT'.
14541
14542
14543File: gccint.info,  Node: Tuple specific accessors,  Next: GIMPLE sequences,  Prev: Manipulating GIMPLE statements,  Up: GIMPLE
14544
1454512.7 Tuple specific accessors
14546=============================
14547
14548* Menu:
14549
14550* `GIMPLE_ASM'::
14551* `GIMPLE_ASSIGN'::
14552* `GIMPLE_BIND'::
14553* `GIMPLE_CALL'::
14554* `GIMPLE_CATCH'::
14555* `GIMPLE_COND'::
14556* `GIMPLE_DEBUG'::
14557* `GIMPLE_EH_FILTER'::
14558* `GIMPLE_LABEL'::
14559* `GIMPLE_NOP'::
14560* `GIMPLE_OMP_ATOMIC_LOAD'::
14561* `GIMPLE_OMP_ATOMIC_STORE'::
14562* `GIMPLE_OMP_CONTINUE'::
14563* `GIMPLE_OMP_CRITICAL'::
14564* `GIMPLE_OMP_FOR'::
14565* `GIMPLE_OMP_MASTER'::
14566* `GIMPLE_OMP_ORDERED'::
14567* `GIMPLE_OMP_PARALLEL'::
14568* `GIMPLE_OMP_RETURN'::
14569* `GIMPLE_OMP_SECTION'::
14570* `GIMPLE_OMP_SECTIONS'::
14571* `GIMPLE_OMP_SINGLE'::
14572* `GIMPLE_PHI'::
14573* `GIMPLE_RESX'::
14574* `GIMPLE_RETURN'::
14575* `GIMPLE_SWITCH'::
14576* `GIMPLE_TRY'::
14577* `GIMPLE_WITH_CLEANUP_EXPR'::
14578
14579
14580File: gccint.info,  Node: `GIMPLE_ASM',  Next: `GIMPLE_ASSIGN',  Up: Tuple specific accessors
14581
1458212.7.1 `GIMPLE_ASM'
14583-------------------
14584
14585 -- GIMPLE function: gimple gimple_build_asm (const char *string,
14586          ninputs, noutputs, nclobbers, ...)
14587     Build a `GIMPLE_ASM' statement.  This statement is used for
14588     building in-line assembly constructs.  `STRING' is the assembly
14589     code.  `NINPUT' is the number of register inputs.  `NOUTPUT' is the
14590     number of register outputs.  `NCLOBBERS' is the number of clobbered
14591     registers.  The rest of the arguments trees for each input,
14592     output, and clobbered registers.
14593
14594 -- GIMPLE function: gimple gimple_build_asm_vec (const char *,
14595          VEC(tree,gc) *, VEC(tree,gc) *, VEC(tree,gc) *)
14596     Identical to gimple_build_asm, but the arguments are passed in
14597     VECs.
14598
14599 -- GIMPLE function: unsigned gimple_asm_ninputs (gimple g)
14600     Return the number of input operands for `GIMPLE_ASM' `G'.
14601
14602 -- GIMPLE function: unsigned gimple_asm_noutputs (gimple g)
14603     Return the number of output operands for `GIMPLE_ASM' `G'.
14604
14605 -- GIMPLE function: unsigned gimple_asm_nclobbers (gimple g)
14606     Return the number of clobber operands for `GIMPLE_ASM' `G'.
14607
14608 -- GIMPLE function: tree gimple_asm_input_op (gimple g, unsigned index)
14609     Return input operand `INDEX' of `GIMPLE_ASM' `G'.
14610
14611 -- GIMPLE function: void gimple_asm_set_input_op (gimple g, unsigned
14612          index, tree in_op)
14613     Set `IN_OP' to be input operand `INDEX' in `GIMPLE_ASM' `G'.
14614
14615 -- GIMPLE function: tree gimple_asm_output_op (gimple g, unsigned
14616          index)
14617     Return output operand `INDEX' of `GIMPLE_ASM' `G'.
14618
14619 -- GIMPLE function: void gimple_asm_set_output_op (gimple g, unsigned
14620          index, tree out_op)
14621     Set `OUT_OP' to be output operand `INDEX' in `GIMPLE_ASM' `G'.
14622
14623 -- GIMPLE function: tree gimple_asm_clobber_op (gimple g, unsigned
14624          index)
14625     Return clobber operand `INDEX' of `GIMPLE_ASM' `G'.
14626
14627 -- GIMPLE function: void gimple_asm_set_clobber_op (gimple g, unsigned
14628          index, tree clobber_op)
14629     Set `CLOBBER_OP' to be clobber operand `INDEX' in `GIMPLE_ASM' `G'.
14630
14631 -- GIMPLE function: const char * gimple_asm_string (gimple g)
14632     Return the string representing the assembly instruction in
14633     `GIMPLE_ASM' `G'.
14634
14635 -- GIMPLE function: bool gimple_asm_volatile_p (gimple g)
14636     Return true if `G' is an asm statement marked volatile.
14637
14638 -- GIMPLE function: void gimple_asm_set_volatile (gimple g)
14639     Mark asm statement `G' as volatile.
14640
14641 -- GIMPLE function: void gimple_asm_clear_volatile (gimple g)
14642     Remove volatile marker from asm statement `G'.
14643
14644
14645File: gccint.info,  Node: `GIMPLE_ASSIGN',  Next: `GIMPLE_BIND',  Prev: `GIMPLE_ASM',  Up: Tuple specific accessors
14646
1464712.7.2 `GIMPLE_ASSIGN'
14648----------------------
14649
14650 -- GIMPLE function: gimple gimple_build_assign (tree lhs, tree rhs)
14651     Build a `GIMPLE_ASSIGN' statement.  The left-hand side is an lvalue
14652     passed in lhs.  The right-hand side can be either a unary or
14653     binary tree expression.  The expression tree rhs will be flattened
14654     and its operands assigned to the corresponding operand slots in
14655     the new statement.  This function is useful when you already have
14656     a tree expression that you want to convert into a tuple.  However,
14657     try to avoid building expression trees for the sole purpose of
14658     calling this function.  If you already have the operands in
14659     separate trees, it is better to use `gimple_build_assign_with_ops'.
14660
14661 -- GIMPLE function: gimple gimplify_assign (tree dst, tree src,
14662          gimple_seq *seq_p)
14663     Build a new `GIMPLE_ASSIGN' tuple and append it to the end of
14664     `*SEQ_P'.
14665
14666 `DST'/`SRC' are the destination and source respectively.  You can pass
14667ungimplified trees in `DST' or `SRC', in which case they will be
14668converted to a gimple operand if necessary.
14669
14670 This function returns the newly created `GIMPLE_ASSIGN' tuple.
14671
14672 -- GIMPLE function: gimple gimple_build_assign_with_ops (enum
14673          tree_code subcode, tree lhs, tree op1, tree op2)
14674     This function is similar to `gimple_build_assign', but is used to
14675     build a `GIMPLE_ASSIGN' statement when the operands of the
14676     right-hand side of the assignment are already split into different
14677     operands.
14678
14679     The left-hand side is an lvalue passed in lhs.  Subcode is the
14680     `tree_code' for the right-hand side of the assignment.  Op1 and op2
14681     are the operands.  If op2 is null, subcode must be a `tree_code'
14682     for a unary expression.
14683
14684 -- GIMPLE function: enum tree_code gimple_assign_rhs_code (gimple g)
14685     Return the code of the expression computed on the `RHS' of
14686     assignment statement `G'.
14687
14688 -- GIMPLE function: enum gimple_rhs_class gimple_assign_rhs_class
14689          (gimple g)
14690     Return the gimple rhs class of the code for the expression
14691     computed on the rhs of assignment statement `G'.  This will never
14692     return `GIMPLE_INVALID_RHS'.
14693
14694 -- GIMPLE function: tree gimple_assign_lhs (gimple g)
14695     Return the `LHS' of assignment statement `G'.
14696
14697 -- GIMPLE function: tree * gimple_assign_lhs_ptr (gimple g)
14698     Return a pointer to the `LHS' of assignment statement `G'.
14699
14700 -- GIMPLE function: tree gimple_assign_rhs1 (gimple g)
14701     Return the first operand on the `RHS' of assignment statement `G'.
14702
14703 -- GIMPLE function: tree * gimple_assign_rhs1_ptr (gimple g)
14704     Return the address of the first operand on the `RHS' of assignment
14705     statement `G'.
14706
14707 -- GIMPLE function: tree gimple_assign_rhs2 (gimple g)
14708     Return the second operand on the `RHS' of assignment statement `G'.
14709
14710 -- GIMPLE function: tree * gimple_assign_rhs2_ptr (gimple g)
14711     Return the address of the second operand on the `RHS' of assignment
14712     statement `G'.
14713
14714 -- GIMPLE function: tree gimple_assign_rhs3 (gimple g)
14715     Return the third operand on the `RHS' of assignment statement `G'.
14716
14717 -- GIMPLE function: tree * gimple_assign_rhs3_ptr (gimple g)
14718     Return the address of the third operand on the `RHS' of assignment
14719     statement `G'.
14720
14721 -- GIMPLE function: void gimple_assign_set_lhs (gimple g, tree lhs)
14722     Set `LHS' to be the `LHS' operand of assignment statement `G'.
14723
14724 -- GIMPLE function: void gimple_assign_set_rhs1 (gimple g, tree rhs)
14725     Set `RHS' to be the first operand on the `RHS' of assignment
14726     statement `G'.
14727
14728 -- GIMPLE function: void gimple_assign_set_rhs2 (gimple g, tree rhs)
14729     Set `RHS' to be the second operand on the `RHS' of assignment
14730     statement `G'.
14731
14732 -- GIMPLE function: void gimple_assign_set_rhs3 (gimple g, tree rhs)
14733     Set `RHS' to be the third operand on the `RHS' of assignment
14734     statement `G'.
14735
14736 -- GIMPLE function: bool gimple_assign_cast_p (gimple s)
14737     Return true if `S' is a type-cast assignment.
14738
14739
14740File: gccint.info,  Node: `GIMPLE_BIND',  Next: `GIMPLE_CALL',  Prev: `GIMPLE_ASSIGN',  Up: Tuple specific accessors
14741
1474212.7.3 `GIMPLE_BIND'
14743--------------------
14744
14745 -- GIMPLE function: gimple gimple_build_bind (tree vars, gimple_seq
14746          body)
14747     Build a `GIMPLE_BIND' statement with a list of variables in `VARS'
14748     and a body of statements in sequence `BODY'.
14749
14750 -- GIMPLE function: tree gimple_bind_vars (gimple g)
14751     Return the variables declared in the `GIMPLE_BIND' statement `G'.
14752
14753 -- GIMPLE function: void gimple_bind_set_vars (gimple g, tree vars)
14754     Set `VARS' to be the set of variables declared in the `GIMPLE_BIND'
14755     statement `G'.
14756
14757 -- GIMPLE function: void gimple_bind_append_vars (gimple g, tree vars)
14758     Append `VARS' to the set of variables declared in the `GIMPLE_BIND'
14759     statement `G'.
14760
14761 -- GIMPLE function: gimple_seq gimple_bind_body (gimple g)
14762     Return the GIMPLE sequence contained in the `GIMPLE_BIND' statement
14763     `G'.
14764
14765 -- GIMPLE function: void gimple_bind_set_body (gimple g, gimple_seq
14766          seq)
14767     Set `SEQ' to be sequence contained in the `GIMPLE_BIND' statement
14768     `G'.
14769
14770 -- GIMPLE function: void gimple_bind_add_stmt (gimple gs, gimple stmt)
14771     Append a statement to the end of a `GIMPLE_BIND''s body.
14772
14773 -- GIMPLE function: void gimple_bind_add_seq (gimple gs, gimple_seq
14774          seq)
14775     Append a sequence of statements to the end of a `GIMPLE_BIND''s
14776     body.
14777
14778 -- GIMPLE function: tree gimple_bind_block (gimple g)
14779     Return the `TREE_BLOCK' node associated with `GIMPLE_BIND'
14780     statement `G'. This is analogous to the `BIND_EXPR_BLOCK' field in
14781     trees.
14782
14783 -- GIMPLE function: void gimple_bind_set_block (gimple g, tree block)
14784     Set `BLOCK' to be the `TREE_BLOCK' node associated with
14785     `GIMPLE_BIND' statement `G'.
14786
14787
14788File: gccint.info,  Node: `GIMPLE_CALL',  Next: `GIMPLE_CATCH',  Prev: `GIMPLE_BIND',  Up: Tuple specific accessors
14789
1479012.7.4 `GIMPLE_CALL'
14791--------------------
14792
14793 -- GIMPLE function: gimple gimple_build_call (tree fn, unsigned nargs,
14794          ...)
14795     Build a `GIMPLE_CALL' statement to function `FN'.  The argument
14796     `FN' must be either a `FUNCTION_DECL' or a gimple call address as
14797     determined by `is_gimple_call_addr'.  `NARGS' are the number of
14798     arguments.  The rest of the arguments follow the argument `NARGS',
14799     and must be trees that are valid as rvalues in gimple (i.e., each
14800     operand is validated with `is_gimple_operand').
14801
14802 -- GIMPLE function: gimple gimple_build_call_from_tree (tree call_expr)
14803     Build a `GIMPLE_CALL' from a `CALL_EXPR' node.  The arguments and
14804     the function are taken from the expression directly.  This routine
14805     assumes that `call_expr' is already in GIMPLE form.  That is, its
14806     operands are GIMPLE values and the function call needs no further
14807     simplification.  All the call flags in `call_expr' are copied over
14808     to the new `GIMPLE_CALL'.
14809
14810 -- GIMPLE function: gimple gimple_build_call_vec (tree fn, `VEC'(tree,
14811          heap) *args)
14812     Identical to `gimple_build_call' but the arguments are stored in a
14813     `VEC'().
14814
14815 -- GIMPLE function: tree gimple_call_lhs (gimple g)
14816     Return the `LHS' of call statement `G'.
14817
14818 -- GIMPLE function: tree * gimple_call_lhs_ptr (gimple g)
14819     Return a pointer to the `LHS' of call statement `G'.
14820
14821 -- GIMPLE function: void gimple_call_set_lhs (gimple g, tree lhs)
14822     Set `LHS' to be the `LHS' operand of call statement `G'.
14823
14824 -- GIMPLE function: tree gimple_call_fn (gimple g)
14825     Return the tree node representing the function called by call
14826     statement `G'.
14827
14828 -- GIMPLE function: void gimple_call_set_fn (gimple g, tree fn)
14829     Set `FN' to be the function called by call statement `G'.  This has
14830     to be a gimple value specifying the address of the called function.
14831
14832 -- GIMPLE function: tree gimple_call_fndecl (gimple g)
14833     If a given `GIMPLE_CALL''s callee is a `FUNCTION_DECL', return it.
14834     Otherwise return `NULL'.  This function is analogous to
14835     `get_callee_fndecl' in `GENERIC'.
14836
14837 -- GIMPLE function: tree gimple_call_set_fndecl (gimple g, tree fndecl)
14838     Set the called function to `FNDECL'.
14839
14840 -- GIMPLE function: tree gimple_call_return_type (gimple g)
14841     Return the type returned by call statement `G'.
14842
14843 -- GIMPLE function: tree gimple_call_chain (gimple g)
14844     Return the static chain for call statement `G'.
14845
14846 -- GIMPLE function: void gimple_call_set_chain (gimple g, tree chain)
14847     Set `CHAIN' to be the static chain for call statement `G'.
14848
14849 -- GIMPLE function: unsigned gimple_call_num_args (gimple g)
14850     Return the number of arguments used by call statement `G'.
14851
14852 -- GIMPLE function: tree gimple_call_arg (gimple g, unsigned index)
14853     Return the argument at position `INDEX' for call statement `G'.
14854     The first argument is 0.
14855
14856 -- GIMPLE function: tree * gimple_call_arg_ptr (gimple g, unsigned
14857          index)
14858     Return a pointer to the argument at position `INDEX' for call
14859     statement `G'.
14860
14861 -- GIMPLE function: void gimple_call_set_arg (gimple g, unsigned
14862          index, tree arg)
14863     Set `ARG' to be the argument at position `INDEX' for call statement
14864     `G'.
14865
14866 -- GIMPLE function: void gimple_call_set_tail (gimple s)
14867     Mark call statement `S' as being a tail call (i.e., a call just
14868     before the exit of a function). These calls are candidate for tail
14869     call optimization.
14870
14871 -- GIMPLE function: bool gimple_call_tail_p (gimple s)
14872     Return true if `GIMPLE_CALL' `S' is marked as a tail call.
14873
14874 -- GIMPLE function: void gimple_call_mark_uninlinable (gimple s)
14875     Mark `GIMPLE_CALL' `S' as being uninlinable.
14876
14877 -- GIMPLE function: bool gimple_call_cannot_inline_p (gimple s)
14878     Return true if `GIMPLE_CALL' `S' cannot be inlined.
14879
14880 -- GIMPLE function: bool gimple_call_noreturn_p (gimple s)
14881     Return true if `S' is a noreturn call.
14882
14883 -- GIMPLE function: gimple gimple_call_copy_skip_args (gimple stmt,
14884          bitmap args_to_skip)
14885     Build a `GIMPLE_CALL' identical to `STMT' but skipping the
14886     arguments in the positions marked by the set `ARGS_TO_SKIP'.
14887
14888
14889File: gccint.info,  Node: `GIMPLE_CATCH',  Next: `GIMPLE_COND',  Prev: `GIMPLE_CALL',  Up: Tuple specific accessors
14890
1489112.7.5 `GIMPLE_CATCH'
14892---------------------
14893
14894 -- GIMPLE function: gimple gimple_build_catch (tree types, gimple_seq
14895          handler)
14896     Build a `GIMPLE_CATCH' statement.  `TYPES' are the tree types this
14897     catch handles.  `HANDLER' is a sequence of statements with the code
14898     for the handler.
14899
14900 -- GIMPLE function: tree gimple_catch_types (gimple g)
14901     Return the types handled by `GIMPLE_CATCH' statement `G'.
14902
14903 -- GIMPLE function: tree * gimple_catch_types_ptr (gimple g)
14904     Return a pointer to the types handled by `GIMPLE_CATCH' statement
14905     `G'.
14906
14907 -- GIMPLE function: gimple_seq gimple_catch_handler (gimple g)
14908     Return the GIMPLE sequence representing the body of the handler of
14909     `GIMPLE_CATCH' statement `G'.
14910
14911 -- GIMPLE function: void gimple_catch_set_types (gimple g, tree t)
14912     Set `T' to be the set of types handled by `GIMPLE_CATCH' `G'.
14913
14914 -- GIMPLE function: void gimple_catch_set_handler (gimple g,
14915          gimple_seq handler)
14916     Set `HANDLER' to be the body of `GIMPLE_CATCH' `G'.
14917
14918
14919File: gccint.info,  Node: `GIMPLE_COND',  Next: `GIMPLE_DEBUG',  Prev: `GIMPLE_CATCH',  Up: Tuple specific accessors
14920
1492112.7.6 `GIMPLE_COND'
14922--------------------
14923
14924 -- GIMPLE function: gimple gimple_build_cond (enum tree_code
14925          pred_code, tree lhs, tree rhs, tree t_label, tree f_label)
14926     Build a `GIMPLE_COND' statement.  `A' `GIMPLE_COND' statement
14927     compares `LHS' and `RHS' and if the condition in `PRED_CODE' is
14928     true, jump to the label in `t_label', otherwise jump to the label
14929     in `f_label'.  `PRED_CODE' are relational operator tree codes like
14930     `EQ_EXPR', `LT_EXPR', `LE_EXPR', `NE_EXPR', etc.
14931
14932 -- GIMPLE function: gimple gimple_build_cond_from_tree (tree cond,
14933          tree t_label, tree f_label)
14934     Build a `GIMPLE_COND' statement from the conditional expression
14935     tree `COND'.  `T_LABEL' and `F_LABEL' are as in
14936     `gimple_build_cond'.
14937
14938 -- GIMPLE function: enum tree_code gimple_cond_code (gimple g)
14939     Return the code of the predicate computed by conditional statement
14940     `G'.
14941
14942 -- GIMPLE function: void gimple_cond_set_code (gimple g, enum
14943          tree_code code)
14944     Set `CODE' to be the predicate code for the conditional statement
14945     `G'.
14946
14947 -- GIMPLE function: tree gimple_cond_lhs (gimple g)
14948     Return the `LHS' of the predicate computed by conditional statement
14949     `G'.
14950
14951 -- GIMPLE function: void gimple_cond_set_lhs (gimple g, tree lhs)
14952     Set `LHS' to be the `LHS' operand of the predicate computed by
14953     conditional statement `G'.
14954
14955 -- GIMPLE function: tree gimple_cond_rhs (gimple g)
14956     Return the `RHS' operand of the predicate computed by conditional
14957     `G'.
14958
14959 -- GIMPLE function: void gimple_cond_set_rhs (gimple g, tree rhs)
14960     Set `RHS' to be the `RHS' operand of the predicate computed by
14961     conditional statement `G'.
14962
14963 -- GIMPLE function: tree gimple_cond_true_label (gimple g)
14964     Return the label used by conditional statement `G' when its
14965     predicate evaluates to true.
14966
14967 -- GIMPLE function: void gimple_cond_set_true_label (gimple g, tree
14968          label)
14969     Set `LABEL' to be the label used by conditional statement `G' when
14970     its predicate evaluates to true.
14971
14972 -- GIMPLE function: void gimple_cond_set_false_label (gimple g, tree
14973          label)
14974     Set `LABEL' to be the label used by conditional statement `G' when
14975     its predicate evaluates to false.
14976
14977 -- GIMPLE function: tree gimple_cond_false_label (gimple g)
14978     Return the label used by conditional statement `G' when its
14979     predicate evaluates to false.
14980
14981 -- GIMPLE function: void gimple_cond_make_false (gimple g)
14982     Set the conditional `COND_STMT' to be of the form 'if (1 == 0)'.
14983
14984 -- GIMPLE function: void gimple_cond_make_true (gimple g)
14985     Set the conditional `COND_STMT' to be of the form 'if (1 == 1)'.
14986
14987
14988File: gccint.info,  Node: `GIMPLE_DEBUG',  Next: `GIMPLE_EH_FILTER',  Prev: `GIMPLE_COND',  Up: Tuple specific accessors
14989
1499012.7.7 `GIMPLE_DEBUG'
14991---------------------
14992
14993 -- GIMPLE function: gimple gimple_build_debug_bind (tree var, tree
14994          value, gimple stmt)
14995     Build a `GIMPLE_DEBUG' statement with `GIMPLE_DEBUG_BIND' of
14996     `subcode'.  The effect of this statement is to tell debug
14997     information generation machinery that the value of user variable
14998     `var' is given by `value' at that point, and to remain with that
14999     value until `var' runs out of scope, a dynamically-subsequent
15000     debug bind statement overrides the binding, or conflicting values
15001     reach a control flow merge point.  Even if components of the
15002     `value' expression change afterwards, the variable is supposed to
15003     retain the same value, though not necessarily the same location.
15004
15005     It is expected that `var' be most often a tree for automatic user
15006     variables (`VAR_DECL' or `PARM_DECL') that satisfy the
15007     requirements for gimple registers, but it may also be a tree for a
15008     scalarized component of a user variable (`ARRAY_REF',
15009     `COMPONENT_REF'), or a debug temporary (`DEBUG_EXPR_DECL').
15010
15011     As for `value', it can be an arbitrary tree expression, but it is
15012     recommended that it be in a suitable form for a gimple assignment
15013     `RHS'.  It is not expected that user variables that could appear
15014     as `var' ever appear in `value', because in the latter we'd have
15015     their `SSA_NAME's instead, but even if they were not in SSA form,
15016     user variables appearing in `value' are to be regarded as part of
15017     the executable code space, whereas those in `var' are to be
15018     regarded as part of the source code space.  There is no way to
15019     refer to the value bound to a user variable within a `value'
15020     expression.
15021
15022     If `value' is `GIMPLE_DEBUG_BIND_NOVALUE', debug information
15023     generation machinery is informed that the variable `var' is
15024     unbound, i.e., that its value is indeterminate, which sometimes
15025     means it is really unavailable, and other times that the compiler
15026     could not keep track of it.
15027
15028     Block and location information for the newly-created stmt are
15029     taken from `stmt', if given.
15030
15031 -- GIMPLE function: tree gimple_debug_bind_get_var (gimple stmt)
15032     Return the user variable VAR that is bound at `stmt'.
15033
15034 -- GIMPLE function: tree gimple_debug_bind_get_value (gimple stmt)
15035     Return the value expression that is bound to a user variable at
15036     `stmt'.
15037
15038 -- GIMPLE function: tree * gimple_debug_bind_get_value_ptr (gimple
15039          stmt)
15040     Return a pointer to the value expression that is bound to a user
15041     variable at `stmt'.
15042
15043 -- GIMPLE function: void gimple_debug_bind_set_var (gimple stmt, tree
15044          var)
15045     Modify the user variable bound at `stmt' to VAR.
15046
15047 -- GIMPLE function: void gimple_debug_bind_set_value (gimple stmt,
15048          tree var)
15049     Modify the value bound to the user variable bound at `stmt' to
15050     VALUE.
15051
15052 -- GIMPLE function: void gimple_debug_bind_reset_value (gimple stmt)
15053     Modify the value bound to the user variable bound at `stmt' so
15054     that the variable becomes unbound.
15055
15056 -- GIMPLE function: bool gimple_debug_bind_has_value_p (gimple stmt)
15057     Return `TRUE' if `stmt' binds a user variable to a value, and
15058     `FALSE' if it unbinds the variable.
15059
15060
15061File: gccint.info,  Node: `GIMPLE_EH_FILTER',  Next: `GIMPLE_LABEL',  Prev: `GIMPLE_DEBUG',  Up: Tuple specific accessors
15062
1506312.7.8 `GIMPLE_EH_FILTER'
15064-------------------------
15065
15066 -- GIMPLE function: gimple gimple_build_eh_filter (tree types,
15067          gimple_seq failure)
15068     Build a `GIMPLE_EH_FILTER' statement.  `TYPES' are the filter's
15069     types.  `FAILURE' is a sequence with the filter's failure action.
15070
15071 -- GIMPLE function: tree gimple_eh_filter_types (gimple g)
15072     Return the types handled by `GIMPLE_EH_FILTER' statement `G'.
15073
15074 -- GIMPLE function: tree * gimple_eh_filter_types_ptr (gimple g)
15075     Return a pointer to the types handled by `GIMPLE_EH_FILTER'
15076     statement `G'.
15077
15078 -- GIMPLE function: gimple_seq gimple_eh_filter_failure (gimple g)
15079     Return the sequence of statement to execute when `GIMPLE_EH_FILTER'
15080     statement fails.
15081
15082 -- GIMPLE function: void gimple_eh_filter_set_types (gimple g, tree
15083          types)
15084     Set `TYPES' to be the set of types handled by `GIMPLE_EH_FILTER'
15085     `G'.
15086
15087 -- GIMPLE function: void gimple_eh_filter_set_failure (gimple g,
15088          gimple_seq failure)
15089     Set `FAILURE' to be the sequence of statements to execute on
15090     failure for `GIMPLE_EH_FILTER' `G'.
15091
15092 -- GIMPLE function: bool gimple_eh_filter_must_not_throw (gimple g)
15093     Return the `EH_FILTER_MUST_NOT_THROW' flag.
15094
15095 -- GIMPLE function: void gimple_eh_filter_set_must_not_throw (gimple
15096          g, bool mntp)
15097     Set the `EH_FILTER_MUST_NOT_THROW' flag.
15098
15099
15100File: gccint.info,  Node: `GIMPLE_LABEL',  Next: `GIMPLE_NOP',  Prev: `GIMPLE_EH_FILTER',  Up: Tuple specific accessors
15101
1510212.7.9 `GIMPLE_LABEL'
15103---------------------
15104
15105 -- GIMPLE function: gimple gimple_build_label (tree label)
15106     Build a `GIMPLE_LABEL' statement with corresponding to the tree
15107     label, `LABEL'.
15108
15109 -- GIMPLE function: tree gimple_label_label (gimple g)
15110     Return the `LABEL_DECL' node used by `GIMPLE_LABEL' statement `G'.
15111
15112 -- GIMPLE function: void gimple_label_set_label (gimple g, tree label)
15113     Set `LABEL' to be the `LABEL_DECL' node used by `GIMPLE_LABEL'
15114     statement `G'.
15115
15116 -- GIMPLE function: gimple gimple_build_goto (tree dest)
15117     Build a `GIMPLE_GOTO' statement to label `DEST'.
15118
15119 -- GIMPLE function: tree gimple_goto_dest (gimple g)
15120     Return the destination of the unconditional jump `G'.
15121
15122 -- GIMPLE function: void gimple_goto_set_dest (gimple g, tree dest)
15123     Set `DEST' to be the destination of the unconditional jump `G'.
15124
15125
15126File: gccint.info,  Node: `GIMPLE_NOP',  Next: `GIMPLE_OMP_ATOMIC_LOAD',  Prev: `GIMPLE_LABEL',  Up: Tuple specific accessors
15127
1512812.7.10 `GIMPLE_NOP'
15129--------------------
15130
15131 -- GIMPLE function: gimple gimple_build_nop (void)
15132     Build a `GIMPLE_NOP' statement.
15133
15134 -- GIMPLE function: bool gimple_nop_p (gimple g)
15135     Returns `TRUE' if statement `G' is a `GIMPLE_NOP'.
15136
15137
15138File: gccint.info,  Node: `GIMPLE_OMP_ATOMIC_LOAD',  Next: `GIMPLE_OMP_ATOMIC_STORE',  Prev: `GIMPLE_NOP',  Up: Tuple specific accessors
15139
1514012.7.11 `GIMPLE_OMP_ATOMIC_LOAD'
15141--------------------------------
15142
15143 -- GIMPLE function: gimple gimple_build_omp_atomic_load (tree lhs,
15144          tree rhs)
15145     Build a `GIMPLE_OMP_ATOMIC_LOAD' statement.  `LHS' is the left-hand
15146     side of the assignment.  `RHS' is the right-hand side of the
15147     assignment.
15148
15149 -- GIMPLE function: void gimple_omp_atomic_load_set_lhs (gimple g,
15150          tree lhs)
15151     Set the `LHS' of an atomic load.
15152
15153 -- GIMPLE function: tree gimple_omp_atomic_load_lhs (gimple g)
15154     Get the `LHS' of an atomic load.
15155
15156 -- GIMPLE function: void gimple_omp_atomic_load_set_rhs (gimple g,
15157          tree rhs)
15158     Set the `RHS' of an atomic set.
15159
15160 -- GIMPLE function: tree gimple_omp_atomic_load_rhs (gimple g)
15161     Get the `RHS' of an atomic set.
15162
15163
15164File: gccint.info,  Node: `GIMPLE_OMP_ATOMIC_STORE',  Next: `GIMPLE_OMP_CONTINUE',  Prev: `GIMPLE_OMP_ATOMIC_LOAD',  Up: Tuple specific accessors
15165
1516612.7.12 `GIMPLE_OMP_ATOMIC_STORE'
15167---------------------------------
15168
15169 -- GIMPLE function: gimple gimple_build_omp_atomic_store (tree val)
15170     Build a `GIMPLE_OMP_ATOMIC_STORE' statement. `VAL' is the value to
15171     be stored.
15172
15173 -- GIMPLE function: void gimple_omp_atomic_store_set_val (gimple g,
15174          tree val)
15175     Set the value being stored in an atomic store.
15176
15177 -- GIMPLE function: tree gimple_omp_atomic_store_val (gimple g)
15178     Return the value being stored in an atomic store.
15179
15180
15181File: gccint.info,  Node: `GIMPLE_OMP_CONTINUE',  Next: `GIMPLE_OMP_CRITICAL',  Prev: `GIMPLE_OMP_ATOMIC_STORE',  Up: Tuple specific accessors
15182
1518312.7.13 `GIMPLE_OMP_CONTINUE'
15184-----------------------------
15185
15186 -- GIMPLE function: gimple gimple_build_omp_continue (tree
15187          control_def, tree control_use)
15188     Build a `GIMPLE_OMP_CONTINUE' statement.  `CONTROL_DEF' is the
15189     definition of the control variable.  `CONTROL_USE' is the use of
15190     the control variable.
15191
15192 -- GIMPLE function: tree gimple_omp_continue_control_def (gimple s)
15193     Return the definition of the control variable on a
15194     `GIMPLE_OMP_CONTINUE' in `S'.
15195
15196 -- GIMPLE function: tree gimple_omp_continue_control_def_ptr (gimple s)
15197     Same as above, but return the pointer.
15198
15199 -- GIMPLE function: tree gimple_omp_continue_set_control_def (gimple s)
15200     Set the control variable definition for a `GIMPLE_OMP_CONTINUE'
15201     statement in `S'.
15202
15203 -- GIMPLE function: tree gimple_omp_continue_control_use (gimple s)
15204     Return the use of the control variable on a `GIMPLE_OMP_CONTINUE'
15205     in `S'.
15206
15207 -- GIMPLE function: tree gimple_omp_continue_control_use_ptr (gimple s)
15208     Same as above, but return the pointer.
15209
15210 -- GIMPLE function: tree gimple_omp_continue_set_control_use (gimple s)
15211     Set the control variable use for a `GIMPLE_OMP_CONTINUE' statement
15212     in `S'.
15213
15214
15215File: gccint.info,  Node: `GIMPLE_OMP_CRITICAL',  Next: `GIMPLE_OMP_FOR',  Prev: `GIMPLE_OMP_CONTINUE',  Up: Tuple specific accessors
15216
1521712.7.14 `GIMPLE_OMP_CRITICAL'
15218-----------------------------
15219
15220 -- GIMPLE function: gimple gimple_build_omp_critical (gimple_seq body,
15221          tree name)
15222     Build a `GIMPLE_OMP_CRITICAL' statement. `BODY' is the sequence of
15223     statements for which only one thread can execute.  `NAME' is an
15224     optional identifier for this critical block.
15225
15226 -- GIMPLE function: tree gimple_omp_critical_name (gimple g)
15227     Return the name associated with `OMP_CRITICAL' statement `G'.
15228
15229 -- GIMPLE function: tree * gimple_omp_critical_name_ptr (gimple g)
15230     Return a pointer to the name associated with `OMP' critical
15231     statement `G'.
15232
15233 -- GIMPLE function: void gimple_omp_critical_set_name (gimple g, tree
15234          name)
15235     Set `NAME' to be the name associated with `OMP' critical statement
15236     `G'.
15237
15238
15239File: gccint.info,  Node: `GIMPLE_OMP_FOR',  Next: `GIMPLE_OMP_MASTER',  Prev: `GIMPLE_OMP_CRITICAL',  Up: Tuple specific accessors
15240
1524112.7.15 `GIMPLE_OMP_FOR'
15242------------------------
15243
15244 -- GIMPLE function: gimple gimple_build_omp_for (gimple_seq body, tree
15245          clauses, tree index, tree initial, tree final, tree incr,
15246          gimple_seq pre_body, enum tree_code omp_for_cond)
15247     Build a `GIMPLE_OMP_FOR' statement. `BODY' is sequence of
15248     statements inside the for loop.  `CLAUSES', are any of the `OMP'
15249     loop construct's clauses: private, firstprivate,  lastprivate,
15250     reductions, ordered, schedule, and nowait.  `PRE_BODY' is the
15251     sequence of statements that are loop invariant.  `INDEX' is the
15252     index variable.  `INITIAL' is the initial value of `INDEX'.
15253     `FINAL' is final value of `INDEX'.  OMP_FOR_COND is the predicate
15254     used to compare `INDEX' and `FINAL'.  `INCR' is the increment
15255     expression.
15256
15257 -- GIMPLE function: tree gimple_omp_for_clauses (gimple g)
15258     Return the clauses associated with `OMP_FOR' `G'.
15259
15260 -- GIMPLE function: tree * gimple_omp_for_clauses_ptr (gimple g)
15261     Return a pointer to the `OMP_FOR' `G'.
15262
15263 -- GIMPLE function: void gimple_omp_for_set_clauses (gimple g, tree
15264          clauses)
15265     Set `CLAUSES' to be the list of clauses associated with `OMP_FOR'
15266     `G'.
15267
15268 -- GIMPLE function: tree gimple_omp_for_index (gimple g)
15269     Return the index variable for `OMP_FOR' `G'.
15270
15271 -- GIMPLE function: tree * gimple_omp_for_index_ptr (gimple g)
15272     Return a pointer to the index variable for `OMP_FOR' `G'.
15273
15274 -- GIMPLE function: void gimple_omp_for_set_index (gimple g, tree
15275          index)
15276     Set `INDEX' to be the index variable for `OMP_FOR' `G'.
15277
15278 -- GIMPLE function: tree gimple_omp_for_initial (gimple g)
15279     Return the initial value for `OMP_FOR' `G'.
15280
15281 -- GIMPLE function: tree * gimple_omp_for_initial_ptr (gimple g)
15282     Return a pointer to the initial value for `OMP_FOR' `G'.
15283
15284 -- GIMPLE function: void gimple_omp_for_set_initial (gimple g, tree
15285          initial)
15286     Set `INITIAL' to be the initial value for `OMP_FOR' `G'.
15287
15288 -- GIMPLE function: tree gimple_omp_for_final (gimple g)
15289     Return the final value for `OMP_FOR' `G'.
15290
15291 -- GIMPLE function: tree * gimple_omp_for_final_ptr (gimple g)
15292     turn a pointer to the final value for `OMP_FOR' `G'.
15293
15294 -- GIMPLE function: void gimple_omp_for_set_final (gimple g, tree
15295          final)
15296     Set `FINAL' to be the final value for `OMP_FOR' `G'.
15297
15298 -- GIMPLE function: tree gimple_omp_for_incr (gimple g)
15299     Return the increment value for `OMP_FOR' `G'.
15300
15301 -- GIMPLE function: tree * gimple_omp_for_incr_ptr (gimple g)
15302     Return a pointer to the increment value for `OMP_FOR' `G'.
15303
15304 -- GIMPLE function: void gimple_omp_for_set_incr (gimple g, tree incr)
15305     Set `INCR' to be the increment value for `OMP_FOR' `G'.
15306
15307 -- GIMPLE function: gimple_seq gimple_omp_for_pre_body (gimple g)
15308     Return the sequence of statements to execute before the `OMP_FOR'
15309     statement `G' starts.
15310
15311 -- GIMPLE function: void gimple_omp_for_set_pre_body (gimple g,
15312          gimple_seq pre_body)
15313     Set `PRE_BODY' to be the sequence of statements to execute before
15314     the `OMP_FOR' statement `G' starts.
15315
15316 -- GIMPLE function: void gimple_omp_for_set_cond (gimple g, enum
15317          tree_code cond)
15318     Set `COND' to be the condition code for `OMP_FOR' `G'.
15319
15320 -- GIMPLE function: enum tree_code gimple_omp_for_cond (gimple g)
15321     Return the condition code associated with `OMP_FOR' `G'.
15322
15323
15324File: gccint.info,  Node: `GIMPLE_OMP_MASTER',  Next: `GIMPLE_OMP_ORDERED',  Prev: `GIMPLE_OMP_FOR',  Up: Tuple specific accessors
15325
1532612.7.16 `GIMPLE_OMP_MASTER'
15327---------------------------
15328
15329 -- GIMPLE function: gimple gimple_build_omp_master (gimple_seq body)
15330     Build a `GIMPLE_OMP_MASTER' statement. `BODY' is the sequence of
15331     statements to be executed by just the master.
15332
15333
15334File: gccint.info,  Node: `GIMPLE_OMP_ORDERED',  Next: `GIMPLE_OMP_PARALLEL',  Prev: `GIMPLE_OMP_MASTER',  Up: Tuple specific accessors
15335
1533612.7.17 `GIMPLE_OMP_ORDERED'
15337----------------------------
15338
15339 -- GIMPLE function: gimple gimple_build_omp_ordered (gimple_seq body)
15340     Build a `GIMPLE_OMP_ORDERED' statement.
15341
15342 `BODY' is the sequence of statements inside a loop that will executed
15343in sequence.
15344
15345
15346File: gccint.info,  Node: `GIMPLE_OMP_PARALLEL',  Next: `GIMPLE_OMP_RETURN',  Prev: `GIMPLE_OMP_ORDERED',  Up: Tuple specific accessors
15347
1534812.7.18 `GIMPLE_OMP_PARALLEL'
15349-----------------------------
15350
15351 -- GIMPLE function: gimple gimple_build_omp_parallel (gimple_seq body,
15352          tree clauses, tree child_fn, tree data_arg)
15353     Build a `GIMPLE_OMP_PARALLEL' statement.
15354
15355 `BODY' is sequence of statements which are executed in parallel.
15356`CLAUSES', are the `OMP' parallel construct's clauses.  `CHILD_FN' is
15357the function created for the parallel threads to execute.  `DATA_ARG'
15358are the shared data argument(s).
15359
15360 -- GIMPLE function: bool gimple_omp_parallel_combined_p (gimple g)
15361     Return true if `OMP' parallel statement `G' has the
15362     `GF_OMP_PARALLEL_COMBINED' flag set.
15363
15364 -- GIMPLE function: void gimple_omp_parallel_set_combined_p (gimple g)
15365     Set the `GF_OMP_PARALLEL_COMBINED' field in `OMP' parallel
15366     statement `G'.
15367
15368 -- GIMPLE function: gimple_seq gimple_omp_body (gimple g)
15369     Return the body for the `OMP' statement `G'.
15370
15371 -- GIMPLE function: void gimple_omp_set_body (gimple g, gimple_seq
15372          body)
15373     Set `BODY' to be the body for the `OMP' statement `G'.
15374
15375 -- GIMPLE function: tree gimple_omp_parallel_clauses (gimple g)
15376     Return the clauses associated with `OMP_PARALLEL' `G'.
15377
15378 -- GIMPLE function: tree * gimple_omp_parallel_clauses_ptr (gimple g)
15379     Return a pointer to the clauses associated with `OMP_PARALLEL' `G'.
15380
15381 -- GIMPLE function: void gimple_omp_parallel_set_clauses (gimple g,
15382          tree clauses)
15383     Set `CLAUSES' to be the list of clauses associated with
15384     `OMP_PARALLEL' `G'.
15385
15386 -- GIMPLE function: tree gimple_omp_parallel_child_fn (gimple g)
15387     Return the child function used to hold the body of `OMP_PARALLEL'
15388     `G'.
15389
15390 -- GIMPLE function: tree * gimple_omp_parallel_child_fn_ptr (gimple g)
15391     Return a pointer to the child function used to hold the body of
15392     `OMP_PARALLEL' `G'.
15393
15394 -- GIMPLE function: void gimple_omp_parallel_set_child_fn (gimple g,
15395          tree child_fn)
15396     Set `CHILD_FN' to be the child function for `OMP_PARALLEL' `G'.
15397
15398 -- GIMPLE function: tree gimple_omp_parallel_data_arg (gimple g)
15399     Return the artificial argument used to send variables and values
15400     from the parent to the children threads in `OMP_PARALLEL' `G'.
15401
15402 -- GIMPLE function: tree * gimple_omp_parallel_data_arg_ptr (gimple g)
15403     Return a pointer to the data argument for `OMP_PARALLEL' `G'.
15404
15405 -- GIMPLE function: void gimple_omp_parallel_set_data_arg (gimple g,
15406          tree data_arg)
15407     Set `DATA_ARG' to be the data argument for `OMP_PARALLEL' `G'.
15408
15409 -- GIMPLE function: bool is_gimple_omp (gimple stmt)
15410     Returns true when the gimple statement `STMT' is any of the OpenMP
15411     types.
15412
15413
15414File: gccint.info,  Node: `GIMPLE_OMP_RETURN',  Next: `GIMPLE_OMP_SECTION',  Prev: `GIMPLE_OMP_PARALLEL',  Up: Tuple specific accessors
15415
1541612.7.19 `GIMPLE_OMP_RETURN'
15417---------------------------
15418
15419 -- GIMPLE function: gimple gimple_build_omp_return (bool wait_p)
15420     Build a `GIMPLE_OMP_RETURN' statement. `WAIT_P' is true if this is
15421     a non-waiting return.
15422
15423 -- GIMPLE function: void gimple_omp_return_set_nowait (gimple s)
15424     Set the nowait flag on `GIMPLE_OMP_RETURN' statement `S'.
15425
15426 -- GIMPLE function: bool gimple_omp_return_nowait_p (gimple g)
15427     Return true if `OMP' return statement `G' has the
15428     `GF_OMP_RETURN_NOWAIT' flag set.
15429
15430
15431File: gccint.info,  Node: `GIMPLE_OMP_SECTION',  Next: `GIMPLE_OMP_SECTIONS',  Prev: `GIMPLE_OMP_RETURN',  Up: Tuple specific accessors
15432
1543312.7.20 `GIMPLE_OMP_SECTION'
15434----------------------------
15435
15436 -- GIMPLE function: gimple gimple_build_omp_section (gimple_seq body)
15437     Build a `GIMPLE_OMP_SECTION' statement for a sections statement.
15438
15439 `BODY' is the sequence of statements in the section.
15440
15441 -- GIMPLE function: bool gimple_omp_section_last_p (gimple g)
15442     Return true if `OMP' section statement `G' has the
15443     `GF_OMP_SECTION_LAST' flag set.
15444
15445 -- GIMPLE function: void gimple_omp_section_set_last (gimple g)
15446     Set the `GF_OMP_SECTION_LAST' flag on `G'.
15447
15448
15449File: gccint.info,  Node: `GIMPLE_OMP_SECTIONS',  Next: `GIMPLE_OMP_SINGLE',  Prev: `GIMPLE_OMP_SECTION',  Up: Tuple specific accessors
15450
1545112.7.21 `GIMPLE_OMP_SECTIONS'
15452-----------------------------
15453
15454 -- GIMPLE function: gimple gimple_build_omp_sections (gimple_seq body,
15455          tree clauses)
15456     Build a `GIMPLE_OMP_SECTIONS' statement. `BODY' is a sequence of
15457     section statements.  `CLAUSES' are any of the `OMP' sections
15458     construct's clauses: private, firstprivate, lastprivate,
15459     reduction, and nowait.
15460
15461 -- GIMPLE function: gimple gimple_build_omp_sections_switch (void)
15462     Build a `GIMPLE_OMP_SECTIONS_SWITCH' statement.
15463
15464 -- GIMPLE function: tree gimple_omp_sections_control (gimple g)
15465     Return the control variable associated with the
15466     `GIMPLE_OMP_SECTIONS' in `G'.
15467
15468 -- GIMPLE function: tree * gimple_omp_sections_control_ptr (gimple g)
15469     Return a pointer to the clauses associated with the
15470     `GIMPLE_OMP_SECTIONS' in `G'.
15471
15472 -- GIMPLE function: void gimple_omp_sections_set_control (gimple g,
15473          tree control)
15474     Set `CONTROL' to be the set of clauses associated with the
15475     `GIMPLE_OMP_SECTIONS' in `G'.
15476
15477 -- GIMPLE function: tree gimple_omp_sections_clauses (gimple g)
15478     Return the clauses associated with `OMP_SECTIONS' `G'.
15479
15480 -- GIMPLE function: tree * gimple_omp_sections_clauses_ptr (gimple g)
15481     Return a pointer to the clauses associated with `OMP_SECTIONS' `G'.
15482
15483 -- GIMPLE function: void gimple_omp_sections_set_clauses (gimple g,
15484          tree clauses)
15485     Set `CLAUSES' to be the set of clauses associated with
15486     `OMP_SECTIONS' `G'.
15487
15488
15489File: gccint.info,  Node: `GIMPLE_OMP_SINGLE',  Next: `GIMPLE_PHI',  Prev: `GIMPLE_OMP_SECTIONS',  Up: Tuple specific accessors
15490
1549112.7.22 `GIMPLE_OMP_SINGLE'
15492---------------------------
15493
15494 -- GIMPLE function: gimple gimple_build_omp_single (gimple_seq body,
15495          tree clauses)
15496     Build a `GIMPLE_OMP_SINGLE' statement. `BODY' is the sequence of
15497     statements that will be executed once.  `CLAUSES' are any of the
15498     `OMP' single construct's clauses: private, firstprivate,
15499     copyprivate, nowait.
15500
15501 -- GIMPLE function: tree gimple_omp_single_clauses (gimple g)
15502     Return the clauses associated with `OMP_SINGLE' `G'.
15503
15504 -- GIMPLE function: tree * gimple_omp_single_clauses_ptr (gimple g)
15505     Return a pointer to the clauses associated with `OMP_SINGLE' `G'.
15506
15507 -- GIMPLE function: void gimple_omp_single_set_clauses (gimple g, tree
15508          clauses)
15509     Set `CLAUSES' to be the clauses associated with `OMP_SINGLE' `G'.
15510
15511
15512File: gccint.info,  Node: `GIMPLE_PHI',  Next: `GIMPLE_RESX',  Prev: `GIMPLE_OMP_SINGLE',  Up: Tuple specific accessors
15513
1551412.7.23 `GIMPLE_PHI'
15515--------------------
15516
15517 -- GIMPLE function: unsigned gimple_phi_capacity (gimple g)
15518     Return the maximum number of arguments supported by `GIMPLE_PHI'
15519     `G'.
15520
15521 -- GIMPLE function: unsigned gimple_phi_num_args (gimple g)
15522     Return the number of arguments in `GIMPLE_PHI' `G'. This must
15523     always be exactly the number of incoming edges for the basic block
15524     holding `G'.
15525
15526 -- GIMPLE function: tree gimple_phi_result (gimple g)
15527     Return the `SSA' name created by `GIMPLE_PHI' `G'.
15528
15529 -- GIMPLE function: tree * gimple_phi_result_ptr (gimple g)
15530     Return a pointer to the `SSA' name created by `GIMPLE_PHI' `G'.
15531
15532 -- GIMPLE function: void gimple_phi_set_result (gimple g, tree result)
15533     Set `RESULT' to be the `SSA' name created by `GIMPLE_PHI' `G'.
15534
15535 -- GIMPLE function: struct phi_arg_d * gimple_phi_arg (gimple g, index)
15536     Return the `PHI' argument corresponding to incoming edge `INDEX'
15537     for `GIMPLE_PHI' `G'.
15538
15539 -- GIMPLE function: void gimple_phi_set_arg (gimple g, index, struct
15540          phi_arg_d * phiarg)
15541     Set `PHIARG' to be the argument corresponding to incoming edge
15542     `INDEX' for `GIMPLE_PHI' `G'.
15543
15544
15545File: gccint.info,  Node: `GIMPLE_RESX',  Next: `GIMPLE_RETURN',  Prev: `GIMPLE_PHI',  Up: Tuple specific accessors
15546
1554712.7.24 `GIMPLE_RESX'
15548---------------------
15549
15550 -- GIMPLE function: gimple gimple_build_resx (int region)
15551     Build a `GIMPLE_RESX' statement which is a statement.  This
15552     statement is a placeholder for _Unwind_Resume before we know if a
15553     function call or a branch is needed.  `REGION' is the exception
15554     region from which control is flowing.
15555
15556 -- GIMPLE function: int gimple_resx_region (gimple g)
15557     Return the region number for `GIMPLE_RESX' `G'.
15558
15559 -- GIMPLE function: void gimple_resx_set_region (gimple g, int region)
15560     Set `REGION' to be the region number for `GIMPLE_RESX' `G'.
15561
15562
15563File: gccint.info,  Node: `GIMPLE_RETURN',  Next: `GIMPLE_SWITCH',  Prev: `GIMPLE_RESX',  Up: Tuple specific accessors
15564
1556512.7.25 `GIMPLE_RETURN'
15566-----------------------
15567
15568 -- GIMPLE function: gimple gimple_build_return (tree retval)
15569     Build a `GIMPLE_RETURN' statement whose return value is retval.
15570
15571 -- GIMPLE function: tree gimple_return_retval (gimple g)
15572     Return the return value for `GIMPLE_RETURN' `G'.
15573
15574 -- GIMPLE function: void gimple_return_set_retval (gimple g, tree
15575          retval)
15576     Set `RETVAL' to be the return value for `GIMPLE_RETURN' `G'.
15577
15578
15579File: gccint.info,  Node: `GIMPLE_SWITCH',  Next: `GIMPLE_TRY',  Prev: `GIMPLE_RETURN',  Up: Tuple specific accessors
15580
1558112.7.26 `GIMPLE_SWITCH'
15582-----------------------
15583
15584 -- GIMPLE function: gimple gimple_build_switch (tree index, tree
15585          default_label, `VEC'(tree,heap) *args)
15586     Build a `GIMPLE_SWITCH' statement.  `INDEX' is the index variable
15587     to switch on, and `DEFAULT_LABEL' represents the default label.
15588     `ARGS' is a vector of `CASE_LABEL_EXPR' trees that contain the
15589     non-default case labels.  Each label is a tree of code
15590     `CASE_LABEL_EXPR'.
15591
15592 -- GIMPLE function: unsigned gimple_switch_num_labels (gimple g)
15593     Return the number of labels associated with the switch statement
15594     `G'.
15595
15596 -- GIMPLE function: void gimple_switch_set_num_labels (gimple g,
15597          unsigned nlabels)
15598     Set `NLABELS' to be the number of labels for the switch statement
15599     `G'.
15600
15601 -- GIMPLE function: tree gimple_switch_index (gimple g)
15602     Return the index variable used by the switch statement `G'.
15603
15604 -- GIMPLE function: void gimple_switch_set_index (gimple g, tree index)
15605     Set `INDEX' to be the index variable for switch statement `G'.
15606
15607 -- GIMPLE function: tree gimple_switch_label (gimple g, unsigned index)
15608     Return the label numbered `INDEX'. The default label is 0, followed
15609     by any labels in a switch statement.
15610
15611 -- GIMPLE function: void gimple_switch_set_label (gimple g, unsigned
15612          index, tree label)
15613     Set the label number `INDEX' to `LABEL'. 0 is always the default
15614     label.
15615
15616 -- GIMPLE function: tree gimple_switch_default_label (gimple g)
15617     Return the default label for a switch statement.
15618
15619 -- GIMPLE function: void gimple_switch_set_default_label (gimple g,
15620          tree label)
15621     Set the default label for a switch statement.
15622
15623
15624File: gccint.info,  Node: `GIMPLE_TRY',  Next: `GIMPLE_WITH_CLEANUP_EXPR',  Prev: `GIMPLE_SWITCH',  Up: Tuple specific accessors
15625
1562612.7.27 `GIMPLE_TRY'
15627--------------------
15628
15629 -- GIMPLE function: gimple gimple_build_try (gimple_seq eval,
15630          gimple_seq cleanup, unsigned int kind)
15631     Build a `GIMPLE_TRY' statement.  `EVAL' is a sequence with the
15632     expression to evaluate.  `CLEANUP' is a sequence of statements to
15633     run at clean-up time.  `KIND' is the enumeration value
15634     `GIMPLE_TRY_CATCH' if this statement denotes a try/catch construct
15635     or `GIMPLE_TRY_FINALLY' if this statement denotes a try/finally
15636     construct.
15637
15638 -- GIMPLE function: enum gimple_try_flags gimple_try_kind (gimple g)
15639     Return the kind of try block represented by `GIMPLE_TRY' `G'. This
15640     is either `GIMPLE_TRY_CATCH' or `GIMPLE_TRY_FINALLY'.
15641
15642 -- GIMPLE function: bool gimple_try_catch_is_cleanup (gimple g)
15643     Return the `GIMPLE_TRY_CATCH_IS_CLEANUP' flag.
15644
15645 -- GIMPLE function: gimple_seq gimple_try_eval (gimple g)
15646     Return the sequence of statements used as the body for `GIMPLE_TRY'
15647     `G'.
15648
15649 -- GIMPLE function: gimple_seq gimple_try_cleanup (gimple g)
15650     Return the sequence of statements used as the cleanup body for
15651     `GIMPLE_TRY' `G'.
15652
15653 -- GIMPLE function: void gimple_try_set_catch_is_cleanup (gimple g,
15654          bool catch_is_cleanup)
15655     Set the `GIMPLE_TRY_CATCH_IS_CLEANUP' flag.
15656
15657 -- GIMPLE function: void gimple_try_set_eval (gimple g, gimple_seq
15658          eval)
15659     Set `EVAL' to be the sequence of statements to use as the body for
15660     `GIMPLE_TRY' `G'.
15661
15662 -- GIMPLE function: void gimple_try_set_cleanup (gimple g, gimple_seq
15663          cleanup)
15664     Set `CLEANUP' to be the sequence of statements to use as the
15665     cleanup body for `GIMPLE_TRY' `G'.
15666
15667
15668File: gccint.info,  Node: `GIMPLE_WITH_CLEANUP_EXPR',  Prev: `GIMPLE_TRY',  Up: Tuple specific accessors
15669
1567012.7.28 `GIMPLE_WITH_CLEANUP_EXPR'
15671----------------------------------
15672
15673 -- GIMPLE function: gimple gimple_build_wce (gimple_seq cleanup)
15674     Build a `GIMPLE_WITH_CLEANUP_EXPR' statement.  `CLEANUP' is the
15675     clean-up expression.
15676
15677 -- GIMPLE function: gimple_seq gimple_wce_cleanup (gimple g)
15678     Return the cleanup sequence for cleanup statement `G'.
15679
15680 -- GIMPLE function: void gimple_wce_set_cleanup (gimple g, gimple_seq
15681          cleanup)
15682     Set `CLEANUP' to be the cleanup sequence for `G'.
15683
15684 -- GIMPLE function: bool gimple_wce_cleanup_eh_only (gimple g)
15685     Return the `CLEANUP_EH_ONLY' flag for a `WCE' tuple.
15686
15687 -- GIMPLE function: void gimple_wce_set_cleanup_eh_only (gimple g,
15688          bool eh_only_p)
15689     Set the `CLEANUP_EH_ONLY' flag for a `WCE' tuple.
15690
15691
15692File: gccint.info,  Node: GIMPLE sequences,  Next: Sequence iterators,  Prev: Tuple specific accessors,  Up: GIMPLE
15693
1569412.8 GIMPLE sequences
15695=====================
15696
15697GIMPLE sequences are the tuple equivalent of `STATEMENT_LIST''s used in
15698`GENERIC'.  They are used to chain statements together, and when used
15699in conjunction with sequence iterators, provide a framework for
15700iterating through statements.
15701
15702 GIMPLE sequences are of type struct `gimple_sequence', but are more
15703commonly passed by reference to functions dealing with sequences.  The
15704type for a sequence pointer is `gimple_seq' which is the same as struct
15705`gimple_sequence' *.  When declaring a local sequence, you can define a
15706local variable of type struct `gimple_sequence'.  When declaring a
15707sequence allocated on the garbage collected heap, use the function
15708`gimple_seq_alloc' documented below.
15709
15710 There are convenience functions for iterating through sequences in the
15711section entitled Sequence Iterators.
15712
15713 Below is a list of functions to manipulate and query sequences.
15714
15715 -- GIMPLE function: void gimple_seq_add_stmt (gimple_seq *seq, gimple
15716          g)
15717     Link a gimple statement to the end of the sequence *`SEQ' if `G' is
15718     not `NULL'.  If *`SEQ' is `NULL', allocate a sequence before
15719     linking.
15720
15721 -- GIMPLE function: void gimple_seq_add_seq (gimple_seq *dest,
15722          gimple_seq src)
15723     Append sequence `SRC' to the end of sequence *`DEST' if `SRC' is
15724     not `NULL'.  If *`DEST' is `NULL', allocate a new sequence before
15725     appending.
15726
15727 -- GIMPLE function: gimple_seq gimple_seq_deep_copy (gimple_seq src)
15728     Perform a deep copy of sequence `SRC' and return the result.
15729
15730 -- GIMPLE function: gimple_seq gimple_seq_reverse (gimple_seq seq)
15731     Reverse the order of the statements in the sequence `SEQ'.  Return
15732     `SEQ'.
15733
15734 -- GIMPLE function: gimple gimple_seq_first (gimple_seq s)
15735     Return the first statement in sequence `S'.
15736
15737 -- GIMPLE function: gimple gimple_seq_last (gimple_seq s)
15738     Return the last statement in sequence `S'.
15739
15740 -- GIMPLE function: void gimple_seq_set_last (gimple_seq s, gimple
15741          last)
15742     Set the last statement in sequence `S' to the statement in `LAST'.
15743
15744 -- GIMPLE function: void gimple_seq_set_first (gimple_seq s, gimple
15745          first)
15746     Set the first statement in sequence `S' to the statement in
15747     `FIRST'.
15748
15749 -- GIMPLE function: void gimple_seq_init (gimple_seq s)
15750     Initialize sequence `S' to an empty sequence.
15751
15752 -- GIMPLE function: gimple_seq gimple_seq_alloc (void)
15753     Allocate a new sequence in the garbage collected store and return
15754     it.
15755
15756 -- GIMPLE function: void gimple_seq_copy (gimple_seq dest, gimple_seq
15757          src)
15758     Copy the sequence `SRC' into the sequence `DEST'.
15759
15760 -- GIMPLE function: bool gimple_seq_empty_p (gimple_seq s)
15761     Return true if the sequence `S' is empty.
15762
15763 -- GIMPLE function: gimple_seq bb_seq (basic_block bb)
15764     Returns the sequence of statements in `BB'.
15765
15766 -- GIMPLE function: void set_bb_seq (basic_block bb, gimple_seq seq)
15767     Sets the sequence of statements in `BB' to `SEQ'.
15768
15769 -- GIMPLE function: bool gimple_seq_singleton_p (gimple_seq seq)
15770     Determine whether `SEQ' contains exactly one statement.
15771
15772
15773File: gccint.info,  Node: Sequence iterators,  Next: Adding a new GIMPLE statement code,  Prev: GIMPLE sequences,  Up: GIMPLE
15774
1577512.9 Sequence iterators
15776=======================
15777
15778Sequence iterators are convenience constructs for iterating through
15779statements in a sequence.  Given a sequence `SEQ', here is a typical
15780use of gimple sequence iterators:
15781
15782     gimple_stmt_iterator gsi;
15783
15784     for (gsi = gsi_start (seq); !gsi_end_p (gsi); gsi_next (&gsi))
15785       {
15786         gimple g = gsi_stmt (gsi);
15787         /* Do something with gimple statement `G'.  */
15788       }
15789
15790 Backward iterations are possible:
15791
15792             for (gsi = gsi_last (seq); !gsi_end_p (gsi); gsi_prev (&gsi))
15793
15794 Forward and backward iterations on basic blocks are possible with
15795`gsi_start_bb' and `gsi_last_bb'.
15796
15797 In the documentation below we sometimes refer to enum
15798`gsi_iterator_update'.  The valid options for this enumeration are:
15799
15800   * `GSI_NEW_STMT' Only valid when a single statement is added.  Move
15801     the iterator to it.
15802
15803   * `GSI_SAME_STMT' Leave the iterator at the same statement.
15804
15805   * `GSI_CONTINUE_LINKING' Move iterator to whatever position is
15806     suitable for linking other statements in the same direction.
15807
15808 Below is a list of the functions used to manipulate and use statement
15809iterators.
15810
15811 -- GIMPLE function: gimple_stmt_iterator gsi_start (gimple_seq seq)
15812     Return a new iterator pointing to the sequence `SEQ''s first
15813     statement.  If `SEQ' is empty, the iterator's basic block is
15814     `NULL'.  Use `gsi_start_bb' instead when the iterator needs to
15815     always have the correct basic block set.
15816
15817 -- GIMPLE function: gimple_stmt_iterator gsi_start_bb (basic_block bb)
15818     Return a new iterator pointing to the first statement in basic
15819     block `BB'.
15820
15821 -- GIMPLE function: gimple_stmt_iterator gsi_last (gimple_seq seq)
15822     Return a new iterator initially pointing to the last statement of
15823     sequence `SEQ'.  If `SEQ' is empty, the iterator's basic block is
15824     `NULL'.  Use `gsi_last_bb' instead when the iterator needs to
15825     always have the correct basic block set.
15826
15827 -- GIMPLE function: gimple_stmt_iterator gsi_last_bb (basic_block bb)
15828     Return a new iterator pointing to the last statement in basic
15829     block `BB'.
15830
15831 -- GIMPLE function: bool gsi_end_p (gimple_stmt_iterator i)
15832     Return `TRUE' if at the end of `I'.
15833
15834 -- GIMPLE function: bool gsi_one_before_end_p (gimple_stmt_iterator i)
15835     Return `TRUE' if we're one statement before the end of `I'.
15836
15837 -- GIMPLE function: void gsi_next (gimple_stmt_iterator *i)
15838     Advance the iterator to the next gimple statement.
15839
15840 -- GIMPLE function: void gsi_prev (gimple_stmt_iterator *i)
15841     Advance the iterator to the previous gimple statement.
15842
15843 -- GIMPLE function: gimple gsi_stmt (gimple_stmt_iterator i)
15844     Return the current stmt.
15845
15846 -- GIMPLE function: gimple_stmt_iterator gsi_after_labels (basic_block
15847          bb)
15848     Return a block statement iterator that points to the first
15849     non-label statement in block `BB'.
15850
15851 -- GIMPLE function: gimple * gsi_stmt_ptr (gimple_stmt_iterator *i)
15852     Return a pointer to the current stmt.
15853
15854 -- GIMPLE function: basic_block gsi_bb (gimple_stmt_iterator i)
15855     Return the basic block associated with this iterator.
15856
15857 -- GIMPLE function: gimple_seq gsi_seq (gimple_stmt_iterator i)
15858     Return the sequence associated with this iterator.
15859
15860 -- GIMPLE function: void gsi_remove (gimple_stmt_iterator *i, bool
15861          remove_eh_info)
15862     Remove the current stmt from the sequence.  The iterator is
15863     updated to point to the next statement.  When `REMOVE_EH_INFO' is
15864     true we remove the statement pointed to by iterator `I' from the
15865     `EH' tables.  Otherwise we do not modify the `EH' tables.
15866     Generally, `REMOVE_EH_INFO' should be true when the statement is
15867     going to be removed from the `IL' and not reinserted elsewhere.
15868
15869 -- GIMPLE function: void gsi_link_seq_before (gimple_stmt_iterator *i,
15870          gimple_seq seq, enum gsi_iterator_update mode)
15871     Links the sequence of statements `SEQ' before the statement pointed
15872     by iterator `I'.  `MODE' indicates what to do with the iterator
15873     after insertion (see `enum gsi_iterator_update' above).
15874
15875 -- GIMPLE function: void gsi_link_before (gimple_stmt_iterator *i,
15876          gimple g, enum gsi_iterator_update mode)
15877     Links statement `G' before the statement pointed-to by iterator
15878     `I'.  Updates iterator `I' according to `MODE'.
15879
15880 -- GIMPLE function: void gsi_link_seq_after (gimple_stmt_iterator *i,
15881          gimple_seq seq, enum gsi_iterator_update mode)
15882     Links sequence `SEQ' after the statement pointed-to by iterator
15883     `I'.  `MODE' is as in `gsi_insert_after'.
15884
15885 -- GIMPLE function: void gsi_link_after (gimple_stmt_iterator *i,
15886          gimple g, enum gsi_iterator_update mode)
15887     Links statement `G' after the statement pointed-to by iterator `I'.
15888     `MODE' is as in `gsi_insert_after'.
15889
15890 -- GIMPLE function: gimple_seq gsi_split_seq_after
15891          (gimple_stmt_iterator i)
15892     Move all statements in the sequence after `I' to a new sequence.
15893     Return this new sequence.
15894
15895 -- GIMPLE function: gimple_seq gsi_split_seq_before
15896          (gimple_stmt_iterator *i)
15897     Move all statements in the sequence before `I' to a new sequence.
15898     Return this new sequence.
15899
15900 -- GIMPLE function: void gsi_replace (gimple_stmt_iterator *i, gimple
15901          stmt, bool update_eh_info)
15902     Replace the statement pointed-to by `I' to `STMT'.  If
15903     `UPDATE_EH_INFO' is true, the exception handling information of
15904     the original statement is moved to the new statement.
15905
15906 -- GIMPLE function: void gsi_insert_before (gimple_stmt_iterator *i,
15907          gimple stmt, enum gsi_iterator_update mode)
15908     Insert statement `STMT' before the statement pointed-to by iterator
15909     `I', update `STMT''s basic block and scan it for new operands.
15910     `MODE' specifies how to update iterator `I' after insertion (see
15911     enum `gsi_iterator_update').
15912
15913 -- GIMPLE function: void gsi_insert_seq_before (gimple_stmt_iterator
15914          *i, gimple_seq seq, enum gsi_iterator_update mode)
15915     Like `gsi_insert_before', but for all the statements in `SEQ'.
15916
15917 -- GIMPLE function: void gsi_insert_after (gimple_stmt_iterator *i,
15918          gimple stmt, enum gsi_iterator_update mode)
15919     Insert statement `STMT' after the statement pointed-to by iterator
15920     `I', update `STMT''s basic block and scan it for new operands.
15921     `MODE' specifies how to update iterator `I' after insertion (see
15922     enum `gsi_iterator_update').
15923
15924 -- GIMPLE function: void gsi_insert_seq_after (gimple_stmt_iterator
15925          *i, gimple_seq seq, enum gsi_iterator_update mode)
15926     Like `gsi_insert_after', but for all the statements in `SEQ'.
15927
15928 -- GIMPLE function: gimple_stmt_iterator gsi_for_stmt (gimple stmt)
15929     Finds iterator for `STMT'.
15930
15931 -- GIMPLE function: void gsi_move_after (gimple_stmt_iterator *from,
15932          gimple_stmt_iterator *to)
15933     Move the statement at `FROM' so it comes right after the statement
15934     at `TO'.
15935
15936 -- GIMPLE function: void gsi_move_before (gimple_stmt_iterator *from,
15937          gimple_stmt_iterator *to)
15938     Move the statement at `FROM' so it comes right before the statement
15939     at `TO'.
15940
15941 -- GIMPLE function: void gsi_move_to_bb_end (gimple_stmt_iterator
15942          *from, basic_block bb)
15943     Move the statement at `FROM' to the end of basic block `BB'.
15944
15945 -- GIMPLE function: void gsi_insert_on_edge (edge e, gimple stmt)
15946     Add `STMT' to the pending list of edge `E'.  No actual insertion is
15947     made until a call to `gsi_commit_edge_inserts'() is made.
15948
15949 -- GIMPLE function: void gsi_insert_seq_on_edge (edge e, gimple_seq
15950          seq)
15951     Add the sequence of statements in `SEQ' to the pending list of edge
15952     `E'.  No actual insertion is made until a call to
15953     `gsi_commit_edge_inserts'() is made.
15954
15955 -- GIMPLE function: basic_block gsi_insert_on_edge_immediate (edge e,
15956          gimple stmt)
15957     Similar to `gsi_insert_on_edge'+`gsi_commit_edge_inserts'.  If a
15958     new block has to be created, it is returned.
15959
15960 -- GIMPLE function: void gsi_commit_one_edge_insert (edge e,
15961          basic_block *new_bb)
15962     Commit insertions pending at edge `E'.  If a new block is created,
15963     set `NEW_BB' to this block, otherwise set it to `NULL'.
15964
15965 -- GIMPLE function: void gsi_commit_edge_inserts (void)
15966     This routine will commit all pending edge insertions, creating any
15967     new basic blocks which are necessary.
15968
15969
15970File: gccint.info,  Node: Adding a new GIMPLE statement code,  Next: Statement and operand traversals,  Prev: Sequence iterators,  Up: GIMPLE
15971
1597212.10 Adding a new GIMPLE statement code
15973========================================
15974
15975The first step in adding a new GIMPLE statement code, is modifying the
15976file `gimple.def', which contains all the GIMPLE codes.  Then you must
15977add a corresponding structure, and an entry in `union
15978gimple_statement_d', both of which are located in `gimple.h'.  This in
15979turn, will require you to add a corresponding `GTY' tag in
15980`gsstruct.def', and code to handle this tag in `gss_for_code' which is
15981located in `gimple.c'.
15982
15983 In order for the garbage collector to know the size of the structure
15984you created in `gimple.h', you need to add a case to handle your new
15985GIMPLE statement in `gimple_size' which is located in `gimple.c'.
15986
15987 You will probably want to create a function to build the new gimple
15988statement in `gimple.c'.  The function should be called
15989`gimple_build_NEW-TUPLE-NAME', and should return the new tuple of type
15990gimple.
15991
15992 If your new statement requires accessors for any members or operands
15993it may have, put simple inline accessors in `gimple.h' and any
15994non-trivial accessors in `gimple.c' with a corresponding prototype in
15995`gimple.h'.
15996
15997
15998File: gccint.info,  Node: Statement and operand traversals,  Prev: Adding a new GIMPLE statement code,  Up: GIMPLE
15999
1600012.11 Statement and operand traversals
16001======================================
16002
16003There are two functions available for walking statements and sequences:
16004`walk_gimple_stmt' and `walk_gimple_seq', accordingly, and a third
16005function for walking the operands in a statement: `walk_gimple_op'.
16006
16007 -- GIMPLE function: tree walk_gimple_stmt (gimple_stmt_iterator *gsi,
16008          walk_stmt_fn callback_stmt, walk_tree_fn callback_op, struct
16009          walk_stmt_info *wi)
16010     This function is used to walk the current statement in `GSI',
16011     optionally using traversal state stored in `WI'.  If `WI' is
16012     `NULL', no state is kept during the traversal.
16013
16014     The callback `CALLBACK_STMT' is called.  If `CALLBACK_STMT' returns
16015     true, it means that the callback function has handled all the
16016     operands of the statement and it is not necessary to walk its
16017     operands.
16018
16019     If `CALLBACK_STMT' is `NULL' or it returns false, `CALLBACK_OP' is
16020     called on each operand of the statement via `walk_gimple_op'.  If
16021     `walk_gimple_op' returns non-`NULL' for any operand, the remaining
16022     operands are not scanned.
16023
16024     The return value is that returned by the last call to
16025     `walk_gimple_op', or `NULL_TREE' if no `CALLBACK_OP' is specified.
16026
16027 -- GIMPLE function: tree walk_gimple_op (gimple stmt, walk_tree_fn
16028          callback_op, struct walk_stmt_info *wi)
16029     Use this function to walk the operands of statement `STMT'.  Every
16030     operand is walked via `walk_tree' with optional state information
16031     in `WI'.
16032
16033     `CALLBACK_OP' is called on each operand of `STMT' via `walk_tree'.
16034     Additional parameters to `walk_tree' must be stored in `WI'.  For
16035     each operand `OP', `walk_tree' is called as:
16036
16037          walk_tree (&`OP', `CALLBACK_OP', `WI', `PSET')
16038
16039     If `CALLBACK_OP' returns non-`NULL' for an operand, the remaining
16040     operands are not scanned.  The return value is that returned by
16041     the last call to `walk_tree', or `NULL_TREE' if no `CALLBACK_OP' is
16042     specified.
16043
16044 -- GIMPLE function: tree walk_gimple_seq (gimple_seq seq, walk_stmt_fn
16045          callback_stmt, walk_tree_fn callback_op, struct
16046          walk_stmt_info *wi)
16047     This function walks all the statements in the sequence `SEQ'
16048     calling `walk_gimple_stmt' on each one.  `WI' is as in
16049     `walk_gimple_stmt'.  If `walk_gimple_stmt' returns non-`NULL', the
16050     walk is stopped and the value returned.  Otherwise, all the
16051     statements are walked and `NULL_TREE' returned.
16052
16053
16054File: gccint.info,  Node: Tree SSA,  Next: RTL,  Prev: GIMPLE,  Up: Top
16055
1605613 Analysis and Optimization of GIMPLE tuples
16057*********************************************
16058
16059GCC uses three main intermediate languages to represent the program
16060during compilation: GENERIC, GIMPLE and RTL.  GENERIC is a
16061language-independent representation generated by each front end.  It is
16062used to serve as an interface between the parser and optimizer.
16063GENERIC is a common representation that is able to represent programs
16064written in all the languages supported by GCC.
16065
16066 GIMPLE and RTL are used to optimize the program.  GIMPLE is used for
16067target and language independent optimizations (e.g., inlining, constant
16068propagation, tail call elimination, redundancy elimination, etc).  Much
16069like GENERIC, GIMPLE is a language independent, tree based
16070representation.  However, it differs from GENERIC in that the GIMPLE
16071grammar is more restrictive: expressions contain no more than 3
16072operands (except function calls), it has no control flow structures and
16073expressions with side-effects are only allowed on the right hand side
16074of assignments.  See the chapter describing GENERIC and GIMPLE for more
16075details.
16076
16077 This chapter describes the data structures and functions used in the
16078GIMPLE optimizers (also known as "tree optimizers" or "middle end").
16079In particular, it focuses on all the macros, data structures, functions
16080and programming constructs needed to implement optimization passes for
16081GIMPLE.
16082
16083* Menu:
16084
16085* Annotations::         Attributes for variables.
16086* SSA Operands::        SSA names referenced by GIMPLE statements.
16087* SSA::                 Static Single Assignment representation.
16088* Alias analysis::      Representing aliased loads and stores.
16089* Memory model::        Memory model used by the middle-end.
16090
16091
16092File: gccint.info,  Node: Annotations,  Next: SSA Operands,  Up: Tree SSA
16093
1609413.1 Annotations
16095================
16096
16097The optimizers need to associate attributes with variables during the
16098optimization process.  For instance, we need to know whether a variable
16099has aliases.  All these attributes are stored in data structures called
16100annotations which are then linked to the field `ann' in `struct
16101tree_common'.
16102
16103 Presently, we define annotations for variables (`var_ann_t').
16104Annotations are defined and documented in `tree-flow.h'.
16105
16106
16107File: gccint.info,  Node: SSA Operands,  Next: SSA,  Prev: Annotations,  Up: Tree SSA
16108
1610913.2 SSA Operands
16110=================
16111
16112Almost every GIMPLE statement will contain a reference to a variable or
16113memory location.  Since statements come in different shapes and sizes,
16114their operands are going to be located at various spots inside the
16115statement's tree.  To facilitate access to the statement's operands,
16116they are organized into lists associated inside each statement's
16117annotation.  Each element in an operand list is a pointer to a
16118`VAR_DECL', `PARM_DECL' or `SSA_NAME' tree node.  This provides a very
16119convenient way of examining and replacing operands.
16120
16121 Data flow analysis and optimization is done on all tree nodes
16122representing variables.  Any node for which `SSA_VAR_P' returns nonzero
16123is considered when scanning statement operands.  However, not all
16124`SSA_VAR_P' variables are processed in the same way.  For the purposes
16125of optimization, we need to distinguish between references to local
16126scalar variables and references to globals, statics, structures,
16127arrays, aliased variables, etc.  The reason is simple, the compiler can
16128gather complete data flow information for a local scalar.  On the other
16129hand, a global variable may be modified by a function call, it may not
16130be possible to keep track of all the elements of an array or the fields
16131of a structure, etc.
16132
16133 The operand scanner gathers two kinds of operands: "real" and
16134"virtual".  An operand for which `is_gimple_reg' returns true is
16135considered real, otherwise it is a virtual operand.  We also
16136distinguish between uses and definitions.  An operand is used if its
16137value is loaded by the statement (e.g., the operand at the RHS of an
16138assignment).  If the statement assigns a new value to the operand, the
16139operand is considered a definition (e.g., the operand at the LHS of an
16140assignment).
16141
16142 Virtual and real operands also have very different data flow
16143properties.  Real operands are unambiguous references to the full
16144object that they represent.  For instance, given
16145
16146     {
16147       int a, b;
16148       a = b
16149     }
16150
16151 Since `a' and `b' are non-aliased locals, the statement `a = b' will
16152have one real definition and one real use because variable `a' is
16153completely modified with the contents of variable `b'.  Real definition
16154are also known as "killing definitions".  Similarly, the use of `b'
16155reads all its bits.
16156
16157 In contrast, virtual operands are used with variables that can have a
16158partial or ambiguous reference.  This includes structures, arrays,
16159globals, and aliased variables.  In these cases, we have two types of
16160definitions.  For globals, structures, and arrays, we can determine from
16161a statement whether a variable of these types has a killing definition.
16162If the variable does, then the statement is marked as having a "must
16163definition" of that variable.  However, if a statement is only defining
16164a part of the variable (i.e. a field in a structure), or if we know
16165that a statement might define the variable but we cannot say for sure,
16166then we mark that statement as having a "may definition".  For
16167instance, given
16168
16169     {
16170       int a, b, *p;
16171
16172       if (...)
16173         p = &a;
16174       else
16175         p = &b;
16176       *p = 5;
16177       return *p;
16178     }
16179
16180 The assignment `*p = 5' may be a definition of `a' or `b'.  If we
16181cannot determine statically where `p' is pointing to at the time of the
16182store operation, we create virtual definitions to mark that statement
16183as a potential definition site for `a' and `b'.  Memory loads are
16184similarly marked with virtual use operands.  Virtual operands are shown
16185in tree dumps right before the statement that contains them.  To
16186request a tree dump with virtual operands, use the `-vops' option to
16187`-fdump-tree':
16188
16189     {
16190       int a, b, *p;
16191
16192       if (...)
16193         p = &a;
16194       else
16195         p = &b;
16196       # a = VDEF <a>
16197       # b = VDEF <b>
16198       *p = 5;
16199
16200       # VUSE <a>
16201       # VUSE <b>
16202       return *p;
16203     }
16204
16205 Notice that `VDEF' operands have two copies of the referenced
16206variable.  This indicates that this is not a killing definition of that
16207variable.  In this case we refer to it as a "may definition" or
16208"aliased store".  The presence of the second copy of the variable in
16209the `VDEF' operand will become important when the function is converted
16210into SSA form.  This will be used to link all the non-killing
16211definitions to prevent optimizations from making incorrect assumptions
16212about them.
16213
16214 Operands are updated as soon as the statement is finished via a call
16215to `update_stmt'.  If statement elements are changed via `SET_USE' or
16216`SET_DEF', then no further action is required (i.e., those macros take
16217care of updating the statement).  If changes are made by manipulating
16218the statement's tree directly, then a call must be made to
16219`update_stmt' when complete.  Calling one of the `bsi_insert' routines
16220or `bsi_replace' performs an implicit call to `update_stmt'.
16221
1622213.2.1 Operand Iterators And Access Routines
16223--------------------------------------------
16224
16225Operands are collected by `tree-ssa-operands.c'.  They are stored
16226inside each statement's annotation and can be accessed through either
16227the operand iterators or an access routine.
16228
16229 The following access routines are available for examining operands:
16230
16231  1. `SINGLE_SSA_{USE,DEF,TREE}_OPERAND': These accessors will return
16232     NULL unless there is exactly one operand matching the specified
16233     flags.  If there is exactly one operand, the operand is returned
16234     as either a `tree', `def_operand_p', or `use_operand_p'.
16235
16236          tree t = SINGLE_SSA_TREE_OPERAND (stmt, flags);
16237          use_operand_p u = SINGLE_SSA_USE_OPERAND (stmt, SSA_ALL_VIRTUAL_USES);
16238          def_operand_p d = SINGLE_SSA_DEF_OPERAND (stmt, SSA_OP_ALL_DEFS);
16239
16240  2. `ZERO_SSA_OPERANDS': This macro returns true if there are no
16241     operands matching the specified flags.
16242
16243          if (ZERO_SSA_OPERANDS (stmt, SSA_OP_ALL_VIRTUALS))
16244            return;
16245
16246  3. `NUM_SSA_OPERANDS': This macro Returns the number of operands
16247     matching 'flags'.  This actually executes a loop to perform the
16248     count, so only use this if it is really needed.
16249
16250          int count = NUM_SSA_OPERANDS (stmt, flags)
16251
16252 If you wish to iterate over some or all operands, use the
16253`FOR_EACH_SSA_{USE,DEF,TREE}_OPERAND' iterator.  For example, to print
16254all the operands for a statement:
16255
16256     void
16257     print_ops (tree stmt)
16258     {
16259       ssa_op_iter;
16260       tree var;
16261
16262       FOR_EACH_SSA_TREE_OPERAND (var, stmt, iter, SSA_OP_ALL_OPERANDS)
16263         print_generic_expr (stderr, var, TDF_SLIM);
16264     }
16265
16266 How to choose the appropriate iterator:
16267
16268  1. Determine whether you are need to see the operand pointers, or
16269     just the trees, and choose the appropriate macro:
16270
16271          Need            Macro:
16272          ----            -------
16273          use_operand_p   FOR_EACH_SSA_USE_OPERAND
16274          def_operand_p   FOR_EACH_SSA_DEF_OPERAND
16275          tree            FOR_EACH_SSA_TREE_OPERAND
16276
16277  2. You need to declare a variable of the type you are interested in,
16278     and an ssa_op_iter structure which serves as the loop controlling
16279     variable.
16280
16281  3. Determine which operands you wish to use, and specify the flags of
16282     those you are interested in.  They are documented in
16283     `tree-ssa-operands.h':
16284
16285          #define SSA_OP_USE              0x01    /* Real USE operands.  */
16286          #define SSA_OP_DEF              0x02    /* Real DEF operands.  */
16287          #define SSA_OP_VUSE             0x04    /* VUSE operands.  */
16288          #define SSA_OP_VMAYUSE          0x08    /* USE portion of VDEFS.  */
16289          #define SSA_OP_VDEF             0x10    /* DEF portion of VDEFS.  */
16290
16291          /* These are commonly grouped operand flags.  */
16292          #define SSA_OP_VIRTUAL_USES     (SSA_OP_VUSE | SSA_OP_VMAYUSE)
16293          #define SSA_OP_VIRTUAL_DEFS     (SSA_OP_VDEF)
16294          #define SSA_OP_ALL_USES         (SSA_OP_VIRTUAL_USES | SSA_OP_USE)
16295          #define SSA_OP_ALL_DEFS         (SSA_OP_VIRTUAL_DEFS | SSA_OP_DEF)
16296          #define SSA_OP_ALL_OPERANDS     (SSA_OP_ALL_USES | SSA_OP_ALL_DEFS)
16297
16298 So if you want to look at the use pointers for all the `USE' and
16299`VUSE' operands, you would do something like:
16300
16301       use_operand_p use_p;
16302       ssa_op_iter iter;
16303
16304       FOR_EACH_SSA_USE_OPERAND (use_p, stmt, iter, (SSA_OP_USE | SSA_OP_VUSE))
16305         {
16306           process_use_ptr (use_p);
16307         }
16308
16309 The `TREE' macro is basically the same as the `USE' and `DEF' macros,
16310only with the use or def dereferenced via `USE_FROM_PTR (use_p)' and
16311`DEF_FROM_PTR (def_p)'.  Since we aren't using operand pointers, use
16312and defs flags can be mixed.
16313
16314       tree var;
16315       ssa_op_iter iter;
16316
16317       FOR_EACH_SSA_TREE_OPERAND (var, stmt, iter, SSA_OP_VUSE)
16318         {
16319            print_generic_expr (stderr, var, TDF_SLIM);
16320         }
16321
16322 `VDEF's are broken into two flags, one for the `DEF' portion
16323(`SSA_OP_VDEF') and one for the USE portion (`SSA_OP_VMAYUSE').  If all
16324you want to look at are the `VDEF's together, there is a fourth
16325iterator macro for this, which returns both a def_operand_p and a
16326use_operand_p for each `VDEF' in the statement.  Note that you don't
16327need any flags for this one.
16328
16329       use_operand_p use_p;
16330       def_operand_p def_p;
16331       ssa_op_iter iter;
16332
16333       FOR_EACH_SSA_MAYDEF_OPERAND (def_p, use_p, stmt, iter)
16334         {
16335           my_code;
16336         }
16337
16338 There are many examples in the code as well, as well as the
16339documentation in `tree-ssa-operands.h'.
16340
16341 There are also a couple of variants on the stmt iterators regarding PHI
16342nodes.
16343
16344 `FOR_EACH_PHI_ARG' Works exactly like `FOR_EACH_SSA_USE_OPERAND',
16345except it works over `PHI' arguments instead of statement operands.
16346
16347     /* Look at every virtual PHI use.  */
16348     FOR_EACH_PHI_ARG (use_p, phi_stmt, iter, SSA_OP_VIRTUAL_USES)
16349     {
16350        my_code;
16351     }
16352
16353     /* Look at every real PHI use.  */
16354     FOR_EACH_PHI_ARG (use_p, phi_stmt, iter, SSA_OP_USES)
16355       my_code;
16356
16357     /* Look at every PHI use.  */
16358     FOR_EACH_PHI_ARG (use_p, phi_stmt, iter, SSA_OP_ALL_USES)
16359       my_code;
16360
16361 `FOR_EACH_PHI_OR_STMT_{USE,DEF}' works exactly like
16362`FOR_EACH_SSA_{USE,DEF}_OPERAND', except it will function on either a
16363statement or a `PHI' node.  These should be used when it is appropriate
16364but they are not quite as efficient as the individual `FOR_EACH_PHI'
16365and `FOR_EACH_SSA' routines.
16366
16367     FOR_EACH_PHI_OR_STMT_USE (use_operand_p, stmt, iter, flags)
16368       {
16369          my_code;
16370       }
16371
16372     FOR_EACH_PHI_OR_STMT_DEF (def_operand_p, phi, iter, flags)
16373       {
16374          my_code;
16375       }
16376
1637713.2.2 Immediate Uses
16378---------------------
16379
16380Immediate use information is now always available.  Using the immediate
16381use iterators, you may examine every use of any `SSA_NAME'. For
16382instance, to change each use of `ssa_var' to `ssa_var2' and call
16383fold_stmt on each stmt after that is done:
16384
16385       use_operand_p imm_use_p;
16386       imm_use_iterator iterator;
16387       tree ssa_var, stmt;
16388
16389
16390       FOR_EACH_IMM_USE_STMT (stmt, iterator, ssa_var)
16391         {
16392           FOR_EACH_IMM_USE_ON_STMT (imm_use_p, iterator)
16393             SET_USE (imm_use_p, ssa_var_2);
16394           fold_stmt (stmt);
16395         }
16396
16397 There are 2 iterators which can be used. `FOR_EACH_IMM_USE_FAST' is
16398used when the immediate uses are not changed, i.e., you are looking at
16399the uses, but not setting them.
16400
16401 If they do get changed, then care must be taken that things are not
16402changed under the iterators, so use the `FOR_EACH_IMM_USE_STMT' and
16403`FOR_EACH_IMM_USE_ON_STMT' iterators.  They attempt to preserve the
16404sanity of the use list by moving all the uses for a statement into a
16405controlled position, and then iterating over those uses.  Then the
16406optimization can manipulate the stmt when all the uses have been
16407processed.  This is a little slower than the FAST version since it adds
16408a placeholder element and must sort through the list a bit for each
16409statement.  This placeholder element must be also be removed if the
16410loop is terminated early.  The macro `BREAK_FROM_IMM_USE_SAFE' is
16411provided to do this :
16412
16413       FOR_EACH_IMM_USE_STMT (stmt, iterator, ssa_var)
16414         {
16415           if (stmt == last_stmt)
16416             BREAK_FROM_SAFE_IMM_USE (iter);
16417
16418           FOR_EACH_IMM_USE_ON_STMT (imm_use_p, iterator)
16419             SET_USE (imm_use_p, ssa_var_2);
16420           fold_stmt (stmt);
16421         }
16422
16423 There are checks in `verify_ssa' which verify that the immediate use
16424list is up to date, as well as checking that an optimization didn't
16425break from the loop without using this macro.  It is safe to simply
16426'break'; from a `FOR_EACH_IMM_USE_FAST' traverse.
16427
16428 Some useful functions and macros:
16429  1. `has_zero_uses (ssa_var)' : Returns true if there are no uses of
16430     `ssa_var'.
16431
16432  2. `has_single_use (ssa_var)' : Returns true if there is only a
16433     single use of `ssa_var'.
16434
16435  3. `single_imm_use (ssa_var, use_operand_p *ptr, tree *stmt)' :
16436     Returns true if there is only a single use of `ssa_var', and also
16437     returns the use pointer and statement it occurs in, in the second
16438     and third parameters.
16439
16440  4. `num_imm_uses (ssa_var)' : Returns the number of immediate uses of
16441     `ssa_var'. It is better not to use this if possible since it simply
16442     utilizes a loop to count the uses.
16443
16444  5. `PHI_ARG_INDEX_FROM_USE (use_p)' : Given a use within a `PHI'
16445     node, return the index number for the use.  An assert is triggered
16446     if the use isn't located in a `PHI' node.
16447
16448  6. `USE_STMT (use_p)' : Return the statement a use occurs in.
16449
16450 Note that uses are not put into an immediate use list until their
16451statement is actually inserted into the instruction stream via a
16452`bsi_*' routine.
16453
16454 It is also still possible to utilize lazy updating of statements, but
16455this should be used only when absolutely required.  Both alias analysis
16456and the dominator optimizations currently do this.
16457
16458 When lazy updating is being used, the immediate use information is out
16459of date and cannot be used reliably.  Lazy updating is achieved by
16460simply marking statements modified via calls to `mark_stmt_modified'
16461instead of `update_stmt'.  When lazy updating is no longer required,
16462all the modified statements must have `update_stmt' called in order to
16463bring them up to date.  This must be done before the optimization is
16464finished, or `verify_ssa' will trigger an abort.
16465
16466 This is done with a simple loop over the instruction stream:
16467       block_stmt_iterator bsi;
16468       basic_block bb;
16469       FOR_EACH_BB (bb)
16470         {
16471           for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
16472             update_stmt_if_modified (bsi_stmt (bsi));
16473         }
16474
16475
16476File: gccint.info,  Node: SSA,  Next: Alias analysis,  Prev: SSA Operands,  Up: Tree SSA
16477
1647813.3 Static Single Assignment
16479=============================
16480
16481Most of the tree optimizers rely on the data flow information provided
16482by the Static Single Assignment (SSA) form.  We implement the SSA form
16483as described in `R. Cytron, J. Ferrante, B. Rosen, M. Wegman, and K.
16484Zadeck.  Efficiently Computing Static Single Assignment Form and the
16485Control Dependence Graph.  ACM Transactions on Programming Languages
16486and Systems, 13(4):451-490, October 1991'.
16487
16488 The SSA form is based on the premise that program variables are
16489assigned in exactly one location in the program.  Multiple assignments
16490to the same variable create new versions of that variable.  Naturally,
16491actual programs are seldom in SSA form initially because variables tend
16492to be assigned multiple times.  The compiler modifies the program
16493representation so that every time a variable is assigned in the code, a
16494new version of the variable is created.  Different versions of the same
16495variable are distinguished by subscripting the variable name with its
16496version number.  Variables used in the right-hand side of expressions
16497are renamed so that their version number matches that of the most
16498recent assignment.
16499
16500 We represent variable versions using `SSA_NAME' nodes.  The renaming
16501process in `tree-ssa.c' wraps every real and virtual operand with an
16502`SSA_NAME' node which contains the version number and the statement
16503that created the `SSA_NAME'.  Only definitions and virtual definitions
16504may create new `SSA_NAME' nodes.
16505
16506 Sometimes, flow of control makes it impossible to determine the most
16507recent version of a variable.  In these cases, the compiler inserts an
16508artificial definition for that variable called "PHI function" or "PHI
16509node".  This new definition merges all the incoming versions of the
16510variable to create a new name for it.  For instance,
16511
16512     if (...)
16513       a_1 = 5;
16514     else if (...)
16515       a_2 = 2;
16516     else
16517       a_3 = 13;
16518
16519     # a_4 = PHI <a_1, a_2, a_3>
16520     return a_4;
16521
16522 Since it is not possible to determine which of the three branches will
16523be taken at runtime, we don't know which of `a_1', `a_2' or `a_3' to
16524use at the return statement.  So, the SSA renamer creates a new version
16525`a_4' which is assigned the result of "merging" `a_1', `a_2' and `a_3'.
16526Hence, PHI nodes mean "one of these operands.  I don't know which".
16527
16528 The following macros can be used to examine PHI nodes
16529
16530 -- Macro: PHI_RESULT (PHI)
16531     Returns the `SSA_NAME' created by PHI node PHI (i.e., PHI's LHS).
16532
16533 -- Macro: PHI_NUM_ARGS (PHI)
16534     Returns the number of arguments in PHI.  This number is exactly
16535     the number of incoming edges to the basic block holding PHI.
16536
16537 -- Macro: PHI_ARG_ELT (PHI, I)
16538     Returns a tuple representing the Ith argument of PHI.  Each
16539     element of this tuple contains an `SSA_NAME' VAR and the incoming
16540     edge through which VAR flows.
16541
16542 -- Macro: PHI_ARG_EDGE (PHI, I)
16543     Returns the incoming edge for the Ith argument of PHI.
16544
16545 -- Macro: PHI_ARG_DEF (PHI, I)
16546     Returns the `SSA_NAME' for the Ith argument of PHI.
16547
1654813.3.1 Preserving the SSA form
16549------------------------------
16550
16551Some optimization passes make changes to the function that invalidate
16552the SSA property.  This can happen when a pass has added new symbols or
16553changed the program so that variables that were previously aliased
16554aren't anymore.  Whenever something like this happens, the affected
16555symbols must be renamed into SSA form again.  Transformations that emit
16556new code or replicate existing statements will also need to update the
16557SSA form.
16558
16559 Since GCC implements two different SSA forms for register and virtual
16560variables, keeping the SSA form up to date depends on whether you are
16561updating register or virtual names.  In both cases, the general idea
16562behind incremental SSA updates is similar: when new SSA names are
16563created, they typically are meant to replace other existing names in
16564the program.
16565
16566 For instance, given the following code:
16567
16568          1  L0:
16569          2  x_1 = PHI (0, x_5)
16570          3  if (x_1 < 10)
16571          4    if (x_1 > 7)
16572          5      y_2 = 0
16573          6    else
16574          7      y_3 = x_1 + x_7
16575          8    endif
16576          9    x_5 = x_1 + 1
16577          10   goto L0;
16578          11 endif
16579
16580 Suppose that we insert new names `x_10' and `x_11' (lines `4' and `8').
16581
16582          1  L0:
16583          2  x_1 = PHI (0, x_5)
16584          3  if (x_1 < 10)
16585          4    x_10 = ...
16586          5    if (x_1 > 7)
16587          6      y_2 = 0
16588          7    else
16589          8      x_11 = ...
16590          9      y_3 = x_1 + x_7
16591          10   endif
16592          11   x_5 = x_1 + 1
16593          12   goto L0;
16594          13 endif
16595
16596 We want to replace all the uses of `x_1' with the new definitions of
16597`x_10' and `x_11'.  Note that the only uses that should be replaced are
16598those at lines `5', `9' and `11'.  Also, the use of `x_7' at line `9'
16599should _not_ be replaced (this is why we cannot just mark symbol `x' for
16600renaming).
16601
16602 Additionally, we may need to insert a PHI node at line `11' because
16603that is a merge point for `x_10' and `x_11'.  So the use of `x_1' at
16604line `11' will be replaced with the new PHI node.  The insertion of PHI
16605nodes is optional.  They are not strictly necessary to preserve the SSA
16606form, and depending on what the caller inserted, they may not even be
16607useful for the optimizers.
16608
16609 Updating the SSA form is a two step process.  First, the pass has to
16610identify which names need to be updated and/or which symbols need to be
16611renamed into SSA form for the first time.  When new names are
16612introduced to replace existing names in the program, the mapping
16613between the old and the new names are registered by calling
16614`register_new_name_mapping' (note that if your pass creates new code by
16615duplicating basic blocks, the call to `tree_duplicate_bb' will set up
16616the necessary mappings automatically).
16617
16618 After the replacement mappings have been registered and new symbols
16619marked for renaming, a call to `update_ssa' makes the registered
16620changes.  This can be done with an explicit call or by creating `TODO'
16621flags in the `tree_opt_pass' structure for your pass.  There are
16622several `TODO' flags that control the behavior of `update_ssa':
16623
16624   * `TODO_update_ssa'.  Update the SSA form inserting PHI nodes for
16625     newly exposed symbols and virtual names marked for updating.  When
16626     updating real names, only insert PHI nodes for a real name `O_j'
16627     in blocks reached by all the new and old definitions for `O_j'.
16628     If the iterated dominance frontier for `O_j' is not pruned, we may
16629     end up inserting PHI nodes in blocks that have one or more edges
16630     with no incoming definition for `O_j'.  This would lead to
16631     uninitialized warnings for `O_j''s symbol.
16632
16633   * `TODO_update_ssa_no_phi'.  Update the SSA form without inserting
16634     any new PHI nodes at all.  This is used by passes that have either
16635     inserted all the PHI nodes themselves or passes that need only to
16636     patch use-def and def-def chains for virtuals (e.g., DCE).
16637
16638   * `TODO_update_ssa_full_phi'.  Insert PHI nodes everywhere they are
16639     needed.  No pruning of the IDF is done.  This is used by passes
16640     that need the PHI nodes for `O_j' even if it means that some
16641     arguments will come from the default definition of `O_j''s symbol
16642     (e.g., `pass_linear_transform').
16643
16644     WARNING: If you need to use this flag, chances are that your pass
16645     may be doing something wrong.  Inserting PHI nodes for an old name
16646     where not all edges carry a new replacement may lead to silent
16647     codegen errors or spurious uninitialized warnings.
16648
16649   * `TODO_update_ssa_only_virtuals'.  Passes that update the SSA form
16650     on their own may want to delegate the updating of virtual names to
16651     the generic updater.  Since FUD chains are easier to maintain,
16652     this simplifies the work they need to do.  NOTE: If this flag is
16653     used, any OLD->NEW mappings for real names are explicitly
16654     destroyed and only the symbols marked for renaming are processed.
16655
1665613.3.2 Preserving the virtual SSA form
16657--------------------------------------
16658
16659The virtual SSA form is harder to preserve than the non-virtual SSA form
16660mainly because the set of virtual operands for a statement may change at
16661what some would consider unexpected times.  In general, statement
16662modifications should be bracketed between calls to `push_stmt_changes'
16663and `pop_stmt_changes'.  For example,
16664
16665         munge_stmt (tree stmt)
16666         {
16667            push_stmt_changes (&stmt);
16668            ... rewrite STMT ...
16669            pop_stmt_changes (&stmt);
16670         }
16671
16672 The call to `push_stmt_changes' saves the current state of the
16673statement operands and the call to `pop_stmt_changes' compares the
16674saved state with the current one and does the appropriate symbol
16675marking for the SSA renamer.
16676
16677 It is possible to modify several statements at a time, provided that
16678`push_stmt_changes' and `pop_stmt_changes' are called in LIFO order, as
16679when processing a stack of statements.
16680
16681 Additionally, if the pass discovers that it did not need to make
16682changes to the statement after calling `push_stmt_changes', it can
16683simply discard the topmost change buffer by calling
16684`discard_stmt_changes'.  This will avoid the expensive operand re-scan
16685operation and the buffer comparison that determines if symbols need to
16686be marked for renaming.
16687
1668813.3.3 Examining `SSA_NAME' nodes
16689---------------------------------
16690
16691The following macros can be used to examine `SSA_NAME' nodes
16692
16693 -- Macro: SSA_NAME_DEF_STMT (VAR)
16694     Returns the statement S that creates the `SSA_NAME' VAR.  If S is
16695     an empty statement (i.e., `IS_EMPTY_STMT (S)' returns `true'), it
16696     means that the first reference to this variable is a USE or a VUSE.
16697
16698 -- Macro: SSA_NAME_VERSION (VAR)
16699     Returns the version number of the `SSA_NAME' object VAR.
16700
1670113.3.4 Walking use-def chains
16702-----------------------------
16703
16704 -- Tree SSA function: void walk_use_def_chains (VAR, FN, DATA)
16705     Walks use-def chains starting at the `SSA_NAME' node VAR.  Calls
16706     function FN at each reaching definition found.  Function FN takes
16707     three arguments: VAR, its defining statement (DEF_STMT) and a
16708     generic pointer to whatever state information that FN may want to
16709     maintain (DATA).  Function FN is able to stop the walk by
16710     returning `true', otherwise in order to continue the walk, FN
16711     should return `false'.
16712
16713     Note, that if DEF_STMT is a `PHI' node, the semantics are slightly
16714     different.  For each argument ARG of the PHI node, this function
16715     will:
16716
16717       1. Walk the use-def chains for ARG.
16718
16719       2. Call `FN (ARG, PHI, DATA)'.
16720
16721     Note how the first argument to FN is no longer the original
16722     variable VAR, but the PHI argument currently being examined.  If
16723     FN wants to get at VAR, it should call `PHI_RESULT' (PHI).
16724
1672513.3.5 Walking the dominator tree
16726---------------------------------
16727
16728 -- Tree SSA function: void walk_dominator_tree (WALK_DATA, BB)
16729     This function walks the dominator tree for the current CFG calling
16730     a set of callback functions defined in STRUCT DOM_WALK_DATA in
16731     `domwalk.h'.  The call back functions you need to define give you
16732     hooks to execute custom code at various points during traversal:
16733
16734       1. Once to initialize any local data needed while processing BB
16735          and its children.  This local data is pushed into an internal
16736          stack which is automatically pushed and popped as the walker
16737          traverses the dominator tree.
16738
16739       2. Once before traversing all the statements in the BB.
16740
16741       3. Once for every statement inside BB.
16742
16743       4. Once after traversing all the statements and before recursing
16744          into BB's dominator children.
16745
16746       5. It then recurses into all the dominator children of BB.
16747
16748       6. After recursing into all the dominator children of BB it can,
16749          optionally, traverse every statement in BB again (i.e.,
16750          repeating steps 2 and 3).
16751
16752       7. Once after walking the statements in BB and BB's dominator
16753          children.  At this stage, the block local data stack is
16754          popped.
16755
16756
16757File: gccint.info,  Node: Alias analysis,  Next: Memory model,  Prev: SSA,  Up: Tree SSA
16758
1675913.4 Alias analysis
16760===================
16761
16762Alias analysis in GIMPLE SSA form consists of two pieces.  First the
16763virtual SSA web ties conflicting memory accesses and provides a SSA
16764use-def chain and SSA immediate-use chains for walking possibly
16765dependent memory accesses.  Second an alias-oracle can be queried to
16766disambiguate explicit and implicit memory references.
16767
16768  1. Memory SSA form.
16769
16770     All statements that may use memory have exactly one accompanied
16771     use of a virtual SSA name that represents the state of memory at
16772     the given point in the IL.
16773
16774     All statements that may define memory have exactly one accompanied
16775     definition of a virtual SSA name using the previous state of memory
16776     and defining the new state of memory after the given point in the
16777     IL.
16778
16779          int i;
16780          int foo (void)
16781          {
16782            # .MEM_3 = VDEF <.MEM_2(D)>
16783            i = 1;
16784            # VUSE <.MEM_3>
16785            return i;
16786          }
16787
16788     The virtual SSA names in this case are `.MEM_2(D)' and `.MEM_3'.
16789     The store to the global variable `i' defines `.MEM_3' invalidating
16790     `.MEM_2(D)'.  The load from `i' uses that new state `.MEM_3'.
16791
16792     The virtual SSA web serves as constraints to SSA optimizers
16793     preventing illegitimate code-motion and optimization.  It also
16794     provides a way to walk related memory statements.
16795
16796  2. Points-to and escape analysis.
16797
16798     Points-to analysis builds a set of constraints from the GIMPLE SSA
16799     IL representing all pointer operations and facts we do or do not
16800     know about pointers.  Solving this set of constraints yields a
16801     conservatively correct solution for each pointer variable in the
16802     program (though we are only interested in SSA name pointers) as to
16803     what it may possibly point to.
16804
16805     This points-to solution for a given SSA name pointer is stored in
16806     the `pt_solution' sub-structure of the `SSA_NAME_PTR_INFO' record.
16807     The following accessor functions are available:
16808
16809        * `pt_solution_includes'
16810
16811        * `pt_solutions_intersect'
16812
16813     Points-to analysis also computes the solution for two special set
16814     of pointers, `ESCAPED' and `CALLUSED'.  Those represent all memory
16815     that has escaped the scope of analysis or that is used by pure or
16816     nested const calls.
16817
16818  3. Type-based alias analysis
16819
16820     Type-based alias analysis is frontend dependent though generic
16821     support is provided by the middle-end in `alias.c'.  TBAA code is
16822     used by both tree optimizers and RTL optimizers.
16823
16824     Every language that wishes to perform language-specific alias
16825     analysis should define a function that computes, given a `tree'
16826     node, an alias set for the node.  Nodes in different alias sets
16827     are not allowed to alias.  For an example, see the C front-end
16828     function `c_get_alias_set'.
16829
16830  4. Tree alias-oracle
16831
16832     The tree alias-oracle provides means to disambiguate two memory
16833     references and memory references against statements.  The following
16834     queries are available:
16835
16836        * `refs_may_alias_p'
16837
16838        * `ref_maybe_used_by_stmt_p'
16839
16840        * `stmt_may_clobber_ref_p'
16841
16842     In addition to those two kind of statement walkers are available
16843     walking statements related to a reference ref.
16844     `walk_non_aliased_vuses' walks over dominating memory defining
16845     statements and calls back if the statement does not clobber ref
16846     providing the non-aliased VUSE.  The walk stops at the first
16847     clobbering statement or if asked to.  `walk_aliased_vdefs' walks
16848     over dominating memory defining statements and calls back on each
16849     statement clobbering ref providing its aliasing VDEF.  The walk
16850     stops if asked to.
16851
16852
16853
16854File: gccint.info,  Node: Memory model,  Prev: Alias analysis,  Up: Tree SSA
16855
1685613.5 Memory model
16857=================
16858
16859The memory model used by the middle-end models that of the C/C++
16860languages.  The middle-end has the notion of an effective type of a
16861memory region which is used for type-based alias analysis.
16862
16863 The following is a refinement of ISO C99 6.5/6, clarifying the block
16864copy case to follow common sense and extending the concept of a dynamic
16865effective type to objects with a declared type as required for C++.
16866
16867     The effective type of an object for an access to its stored value is
16868     the declared type of the object or the effective type determined by
16869     a previous store to it.  If a value is stored into an object through
16870     an lvalue having a type that is not a character type, then the
16871     type of the lvalue becomes the effective type of the object for that
16872     access and for subsequent accesses that do not modify the stored value.
16873     If a value is copied into an object using `memcpy' or `memmove',
16874     or is copied as an array of character type, then the effective type
16875     of the modified object for that access and for subsequent accesses that
16876     do not modify the value is undetermined.  For all other accesses to an
16877     object, the effective type of the object is simply the type of the
16878     lvalue used for the access.
16879
16880
16881File: gccint.info,  Node: Loop Analysis and Representation,  Next: Machine Desc,  Prev: Control Flow,  Up: Top
16882
1688314 Analysis and Representation of Loops
16884***************************************
16885
16886GCC provides extensive infrastructure for work with natural loops, i.e.,
16887strongly connected components of CFG with only one entry block.  This
16888chapter describes representation of loops in GCC, both on GIMPLE and in
16889RTL, as well as the interfaces to loop-related analyses (induction
16890variable analysis and number of iterations analysis).
16891
16892* Menu:
16893
16894* Loop representation::         Representation and analysis of loops.
16895* Loop querying::               Getting information about loops.
16896* Loop manipulation::           Loop manipulation functions.
16897* LCSSA::                       Loop-closed SSA form.
16898* Scalar evolutions::           Induction variables on GIMPLE.
16899* loop-iv::                     Induction variables on RTL.
16900* Number of iterations::        Number of iterations analysis.
16901* Dependency analysis::         Data dependency analysis.
16902* Lambda::                      Linear loop transformations framework.
16903* Omega::                       A solver for linear programming problems.
16904
16905
16906File: gccint.info,  Node: Loop representation,  Next: Loop querying,  Up: Loop Analysis and Representation
16907
1690814.1 Loop representation
16909========================
16910
16911This chapter describes the representation of loops in GCC, and functions
16912that can be used to build, modify and analyze this representation.  Most
16913of the interfaces and data structures are declared in `cfgloop.h'.  At
16914the moment, loop structures are analyzed and this information is
16915updated only by the optimization passes that deal with loops, but some
16916efforts are being made to make it available throughout most of the
16917optimization passes.
16918
16919 In general, a natural loop has one entry block (header) and possibly
16920several back edges (latches) leading to the header from the inside of
16921the loop.  Loops with several latches may appear if several loops share
16922a single header, or if there is a branching in the middle of the loop.
16923The representation of loops in GCC however allows only loops with a
16924single latch.  During loop analysis, headers of such loops are split and
16925forwarder blocks are created in order to disambiguate their structures.
16926Heuristic based on profile information and structure of the induction
16927variables in the loops is used to determine whether the latches
16928correspond to sub-loops or to control flow in a single loop.  This means
16929that the analysis sometimes changes the CFG, and if you run it in the
16930middle of an optimization pass, you must be able to deal with the new
16931blocks.  You may avoid CFG changes by passing
16932`LOOPS_MAY_HAVE_MULTIPLE_LATCHES' flag to the loop discovery, note
16933however that most other loop manipulation functions will not work
16934correctly for loops with multiple latch edges (the functions that only
16935query membership of blocks to loops and subloop relationships, or
16936enumerate and test loop exits, can be expected to work).
16937
16938 Body of the loop is the set of blocks that are dominated by its header,
16939and reachable from its latch against the direction of edges in CFG.  The
16940loops are organized in a containment hierarchy (tree) such that all the
16941loops immediately contained inside loop L are the children of L in the
16942tree.  This tree is represented by the `struct loops' structure.  The
16943root of this tree is a fake loop that contains all blocks in the
16944function.  Each of the loops is represented in a `struct loop'
16945structure.  Each loop is assigned an index (`num' field of the `struct
16946loop' structure), and the pointer to the loop is stored in the
16947corresponding field of the `larray' vector in the loops structure.  The
16948indices do not have to be continuous, there may be empty (`NULL')
16949entries in the `larray' created by deleting loops.  Also, there is no
16950guarantee on the relative order of a loop and its subloops in the
16951numbering.  The index of a loop never changes.
16952
16953 The entries of the `larray' field should not be accessed directly.
16954The function `get_loop' returns the loop description for a loop with
16955the given index.  `number_of_loops' function returns number of loops in
16956the function.  To traverse all loops, use `FOR_EACH_LOOP' macro.  The
16957`flags' argument of the macro is used to determine the direction of
16958traversal and the set of loops visited.  Each loop is guaranteed to be
16959visited exactly once, regardless of the changes to the loop tree, and
16960the loops may be removed during the traversal.  The newly created loops
16961are never traversed, if they need to be visited, this must be done
16962separately after their creation.  The `FOR_EACH_LOOP' macro allocates
16963temporary variables.  If the `FOR_EACH_LOOP' loop were ended using
16964break or goto, they would not be released; `FOR_EACH_LOOP_BREAK' macro
16965must be used instead.
16966
16967 Each basic block contains the reference to the innermost loop it
16968belongs to (`loop_father').  For this reason, it is only possible to
16969have one `struct loops' structure initialized at the same time for each
16970CFG.  The global variable `current_loops' contains the `struct loops'
16971structure.  Many of the loop manipulation functions assume that
16972dominance information is up-to-date.
16973
16974 The loops are analyzed through `loop_optimizer_init' function.  The
16975argument of this function is a set of flags represented in an integer
16976bitmask.  These flags specify what other properties of the loop
16977structures should be calculated/enforced and preserved later:
16978
16979   * `LOOPS_MAY_HAVE_MULTIPLE_LATCHES': If this flag is set, no changes
16980     to CFG will be performed in the loop analysis, in particular,
16981     loops with multiple latch edges will not be disambiguated.  If a
16982     loop has multiple latches, its latch block is set to NULL.  Most of
16983     the loop manipulation functions will not work for loops in this
16984     shape.  No other flags that require CFG changes can be passed to
16985     loop_optimizer_init.
16986
16987   * `LOOPS_HAVE_PREHEADERS': Forwarder blocks are created in such a
16988     way that each loop has only one entry edge, and additionally, the
16989     source block of this entry edge has only one successor.  This
16990     creates a natural place where the code can be moved out of the
16991     loop, and ensures that the entry edge of the loop leads from its
16992     immediate super-loop.
16993
16994   * `LOOPS_HAVE_SIMPLE_LATCHES': Forwarder blocks are created to force
16995     the latch block of each loop to have only one successor.  This
16996     ensures that the latch of the loop does not belong to any of its
16997     sub-loops, and makes manipulation with the loops significantly
16998     easier.  Most of the loop manipulation functions assume that the
16999     loops are in this shape.  Note that with this flag, the "normal"
17000     loop without any control flow inside and with one exit consists of
17001     two basic blocks.
17002
17003   * `LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS': Basic blocks and edges in
17004     the strongly connected components that are not natural loops (have
17005     more than one entry block) are marked with `BB_IRREDUCIBLE_LOOP'
17006     and `EDGE_IRREDUCIBLE_LOOP' flags.  The flag is not set for blocks
17007     and edges that belong to natural loops that are in such an
17008     irreducible region (but it is set for the entry and exit edges of
17009     such a loop, if they lead to/from this region).
17010
17011   * `LOOPS_HAVE_RECORDED_EXITS': The lists of exits are recorded and
17012     updated for each loop.  This makes some functions (e.g.,
17013     `get_loop_exit_edges') more efficient.  Some functions (e.g.,
17014     `single_exit') can be used only if the lists of exits are recorded.
17015
17016 These properties may also be computed/enforced later, using functions
17017`create_preheaders', `force_single_succ_latches',
17018`mark_irreducible_loops' and `record_loop_exits'.
17019
17020 The memory occupied by the loops structures should be freed with
17021`loop_optimizer_finalize' function.
17022
17023 The CFG manipulation functions in general do not update loop
17024structures.  Specialized versions that additionally do so are provided
17025for the most common tasks.  On GIMPLE, `cleanup_tree_cfg_loop' function
17026can be used to cleanup CFG while updating the loops structures if
17027`current_loops' is set.
17028
17029
17030File: gccint.info,  Node: Loop querying,  Next: Loop manipulation,  Prev: Loop representation,  Up: Loop Analysis and Representation
17031
1703214.2 Loop querying
17033==================
17034
17035The functions to query the information about loops are declared in
17036`cfgloop.h'.  Some of the information can be taken directly from the
17037structures.  `loop_father' field of each basic block contains the
17038innermost loop to that the block belongs.  The most useful fields of
17039loop structure (that are kept up-to-date at all times) are:
17040
17041   * `header', `latch': Header and latch basic blocks of the loop.
17042
17043   * `num_nodes': Number of basic blocks in the loop (including the
17044     basic blocks of the sub-loops).
17045
17046   * `depth': The depth of the loop in the loops tree, i.e., the number
17047     of super-loops of the loop.
17048
17049   * `outer', `inner', `next': The super-loop, the first sub-loop, and
17050     the sibling of the loop in the loops tree.
17051
17052 There are other fields in the loop structures, many of them used only
17053by some of the passes, or not updated during CFG changes; in general,
17054they should not be accessed directly.
17055
17056 The most important functions to query loop structures are:
17057
17058   * `flow_loops_dump': Dumps the information about loops to a file.
17059
17060   * `verify_loop_structure': Checks consistency of the loop structures.
17061
17062   * `loop_latch_edge': Returns the latch edge of a loop.
17063
17064   * `loop_preheader_edge': If loops have preheaders, returns the
17065     preheader edge of a loop.
17066
17067   * `flow_loop_nested_p': Tests whether loop is a sub-loop of another
17068     loop.
17069
17070   * `flow_bb_inside_loop_p': Tests whether a basic block belongs to a
17071     loop (including its sub-loops).
17072
17073   * `find_common_loop': Finds the common super-loop of two loops.
17074
17075   * `superloop_at_depth': Returns the super-loop of a loop with the
17076     given depth.
17077
17078   * `tree_num_loop_insns', `num_loop_insns': Estimates the number of
17079     insns in the loop, on GIMPLE and on RTL.
17080
17081   * `loop_exit_edge_p': Tests whether edge is an exit from a loop.
17082
17083   * `mark_loop_exit_edges': Marks all exit edges of all loops with
17084     `EDGE_LOOP_EXIT' flag.
17085
17086   * `get_loop_body', `get_loop_body_in_dom_order',
17087     `get_loop_body_in_bfs_order': Enumerates the basic blocks in the
17088     loop in depth-first search order in reversed CFG, ordered by
17089     dominance relation, and breath-first search order, respectively.
17090
17091   * `single_exit': Returns the single exit edge of the loop, or `NULL'
17092     if the loop has more than one exit.  You can only use this
17093     function if LOOPS_HAVE_MARKED_SINGLE_EXITS property is used.
17094
17095   * `get_loop_exit_edges': Enumerates the exit edges of a loop.
17096
17097   * `just_once_each_iteration_p': Returns true if the basic block is
17098     executed exactly once during each iteration of a loop (that is, it
17099     does not belong to a sub-loop, and it dominates the latch of the
17100     loop).
17101
17102
17103File: gccint.info,  Node: Loop manipulation,  Next: LCSSA,  Prev: Loop querying,  Up: Loop Analysis and Representation
17104
1710514.3 Loop manipulation
17106======================
17107
17108The loops tree can be manipulated using the following functions:
17109
17110   * `flow_loop_tree_node_add': Adds a node to the tree.
17111
17112   * `flow_loop_tree_node_remove': Removes a node from the tree.
17113
17114   * `add_bb_to_loop': Adds a basic block to a loop.
17115
17116   * `remove_bb_from_loops': Removes a basic block from loops.
17117
17118 Most low-level CFG functions update loops automatically.  The following
17119functions handle some more complicated cases of CFG manipulations:
17120
17121   * `remove_path': Removes an edge and all blocks it dominates.
17122
17123   * `split_loop_exit_edge': Splits exit edge of the loop, ensuring
17124     that PHI node arguments remain in the loop (this ensures that
17125     loop-closed SSA form is preserved).  Only useful on GIMPLE.
17126
17127 Finally, there are some higher-level loop transformations implemented.
17128While some of them are written so that they should work on non-innermost
17129loops, they are mostly untested in that case, and at the moment, they
17130are only reliable for the innermost loops:
17131
17132   * `create_iv': Creates a new induction variable.  Only works on
17133     GIMPLE.  `standard_iv_increment_position' can be used to find a
17134     suitable place for the iv increment.
17135
17136   * `duplicate_loop_to_header_edge',
17137     `tree_duplicate_loop_to_header_edge': These functions (on RTL and
17138     on GIMPLE) duplicate the body of the loop prescribed number of
17139     times on one of the edges entering loop header, thus performing
17140     either loop unrolling or loop peeling.  `can_duplicate_loop_p'
17141     (`can_unroll_loop_p' on GIMPLE) must be true for the duplicated
17142     loop.
17143
17144   * `loop_version', `tree_ssa_loop_version': These function create a
17145     copy of a loop, and a branch before them that selects one of them
17146     depending on the prescribed condition.  This is useful for
17147     optimizations that need to verify some assumptions in runtime (one
17148     of the copies of the loop is usually left unchanged, while the
17149     other one is transformed in some way).
17150
17151   * `tree_unroll_loop': Unrolls the loop, including peeling the extra
17152     iterations to make the number of iterations divisible by unroll
17153     factor, updating the exit condition, and removing the exits that
17154     now cannot be taken.  Works only on GIMPLE.
17155
17156
17157File: gccint.info,  Node: LCSSA,  Next: Scalar evolutions,  Prev: Loop manipulation,  Up: Loop Analysis and Representation
17158
1715914.4 Loop-closed SSA form
17160=========================
17161
17162Throughout the loop optimizations on tree level, one extra condition is
17163enforced on the SSA form:  No SSA name is used outside of the loop in
17164that it is defined.  The SSA form satisfying this condition is called
17165"loop-closed SSA form" - LCSSA.  To enforce LCSSA, PHI nodes must be
17166created at the exits of the loops for the SSA names that are used
17167outside of them.  Only the real operands (not virtual SSA names) are
17168held in LCSSA, in order to save memory.
17169
17170 There are various benefits of LCSSA:
17171
17172   * Many optimizations (value range analysis, final value replacement)
17173     are interested in the values that are defined in the loop and used
17174     outside of it, i.e., exactly those for that we create new PHI
17175     nodes.
17176
17177   * In induction variable analysis, it is not necessary to specify the
17178     loop in that the analysis should be performed - the scalar
17179     evolution analysis always returns the results with respect to the
17180     loop in that the SSA name is defined.
17181
17182   * It makes updating of SSA form during loop transformations simpler.
17183     Without LCSSA, operations like loop unrolling may force creation
17184     of PHI nodes arbitrarily far from the loop, while in LCSSA, the
17185     SSA form can be updated locally.  However, since we only keep real
17186     operands in LCSSA, we cannot use this advantage (we could have
17187     local updating of real operands, but it is not much more efficient
17188     than to use generic SSA form updating for it as well; the amount
17189     of changes to SSA is the same).
17190
17191 However, it also means LCSSA must be updated.  This is usually
17192straightforward, unless you create a new value in loop and use it
17193outside, or unless you manipulate loop exit edges (functions are
17194provided to make these manipulations simple).
17195`rewrite_into_loop_closed_ssa' is used to rewrite SSA form to LCSSA,
17196and `verify_loop_closed_ssa' to check that the invariant of LCSSA is
17197preserved.
17198
17199
17200File: gccint.info,  Node: Scalar evolutions,  Next: loop-iv,  Prev: LCSSA,  Up: Loop Analysis and Representation
17201
1720214.5 Scalar evolutions
17203======================
17204
17205Scalar evolutions (SCEV) are used to represent results of induction
17206variable analysis on GIMPLE.  They enable us to represent variables with
17207complicated behavior in a simple and consistent way (we only use it to
17208express values of polynomial induction variables, but it is possible to
17209extend it).  The interfaces to SCEV analysis are declared in
17210`tree-scalar-evolution.h'.  To use scalar evolutions analysis,
17211`scev_initialize' must be used.  To stop using SCEV, `scev_finalize'
17212should be used.  SCEV analysis caches results in order to save time and
17213memory.  This cache however is made invalid by most of the loop
17214transformations, including removal of code.  If such a transformation
17215is performed, `scev_reset' must be called to clean the caches.
17216
17217 Given an SSA name, its behavior in loops can be analyzed using the
17218`analyze_scalar_evolution' function.  The returned SCEV however does
17219not have to be fully analyzed and it may contain references to other
17220SSA names defined in the loop.  To resolve these (potentially
17221recursive) references, `instantiate_parameters' or `resolve_mixers'
17222functions must be used.  `instantiate_parameters' is useful when you
17223use the results of SCEV only for some analysis, and when you work with
17224whole nest of loops at once.  It will try replacing all SSA names by
17225their SCEV in all loops, including the super-loops of the current loop,
17226thus providing a complete information about the behavior of the
17227variable in the loop nest.  `resolve_mixers' is useful if you work with
17228only one loop at a time, and if you possibly need to create code based
17229on the value of the induction variable.  It will only resolve the SSA
17230names defined in the current loop, leaving the SSA names defined
17231outside unchanged, even if their evolution in the outer loops is known.
17232
17233 The SCEV is a normal tree expression, except for the fact that it may
17234contain several special tree nodes.  One of them is `SCEV_NOT_KNOWN',
17235used for SSA names whose value cannot be expressed.  The other one is
17236`POLYNOMIAL_CHREC'.  Polynomial chrec has three arguments - base, step
17237and loop (both base and step may contain further polynomial chrecs).
17238Type of the expression and of base and step must be the same.  A
17239variable has evolution `POLYNOMIAL_CHREC(base, step, loop)' if it is
17240(in the specified loop) equivalent to `x_1' in the following example
17241
17242     while (...)
17243       {
17244         x_1 = phi (base, x_2);
17245         x_2 = x_1 + step;
17246       }
17247
17248 Note that this includes the language restrictions on the operations.
17249For example, if we compile C code and `x' has signed type, then the
17250overflow in addition would cause undefined behavior, and we may assume
17251that this does not happen.  Hence, the value with this SCEV cannot
17252overflow (which restricts the number of iterations of such a loop).
17253
17254 In many cases, one wants to restrict the attention just to affine
17255induction variables.  In this case, the extra expressive power of SCEV
17256is not useful, and may complicate the optimizations.  In this case,
17257`simple_iv' function may be used to analyze a value - the result is a
17258loop-invariant base and step.
17259
17260
17261File: gccint.info,  Node: loop-iv,  Next: Number of iterations,  Prev: Scalar evolutions,  Up: Loop Analysis and Representation
17262
1726314.6 IV analysis on RTL
17264=======================
17265
17266The induction variable on RTL is simple and only allows analysis of
17267affine induction variables, and only in one loop at once.  The interface
17268is declared in `cfgloop.h'.  Before analyzing induction variables in a
17269loop L, `iv_analysis_loop_init' function must be called on L.  After
17270the analysis (possibly calling `iv_analysis_loop_init' for several
17271loops) is finished, `iv_analysis_done' should be called.  The following
17272functions can be used to access the results of the analysis:
17273
17274   * `iv_analyze': Analyzes a single register used in the given insn.
17275     If no use of the register in this insn is found, the following
17276     insns are scanned, so that this function can be called on the insn
17277     returned by get_condition.
17278
17279   * `iv_analyze_result': Analyzes result of the assignment in the
17280     given insn.
17281
17282   * `iv_analyze_expr': Analyzes a more complicated expression.  All
17283     its operands are analyzed by `iv_analyze', and hence they must be
17284     used in the specified insn or one of the following insns.
17285
17286 The description of the induction variable is provided in `struct
17287rtx_iv'.  In order to handle subregs, the representation is a bit
17288complicated; if the value of the `extend' field is not `UNKNOWN', the
17289value of the induction variable in the i-th iteration is
17290
17291     delta + mult * extend_{extend_mode} (subreg_{mode} (base + i * step)),
17292
17293 with the following exception:  if `first_special' is true, then the
17294value in the first iteration (when `i' is zero) is `delta + mult *
17295base'.  However, if `extend' is equal to `UNKNOWN', then
17296`first_special' must be false, `delta' 0, `mult' 1 and the value in the
17297i-th iteration is
17298
17299     subreg_{mode} (base + i * step)
17300
17301 The function `get_iv_value' can be used to perform these calculations.
17302
17303
17304File: gccint.info,  Node: Number of iterations,  Next: Dependency analysis,  Prev: loop-iv,  Up: Loop Analysis and Representation
17305
1730614.7 Number of iterations analysis
17307==================================
17308
17309Both on GIMPLE and on RTL, there are functions available to determine
17310the number of iterations of a loop, with a similar interface.  The
17311number of iterations of a loop in GCC is defined as the number of
17312executions of the loop latch.  In many cases, it is not possible to
17313determine the number of iterations unconditionally - the determined
17314number is correct only if some assumptions are satisfied.  The analysis
17315tries to verify these conditions using the information contained in the
17316program; if it fails, the conditions are returned together with the
17317result.  The following information and conditions are provided by the
17318analysis:
17319
17320   * `assumptions': If this condition is false, the rest of the
17321     information is invalid.
17322
17323   * `noloop_assumptions' on RTL, `may_be_zero' on GIMPLE: If this
17324     condition is true, the loop exits in the first iteration.
17325
17326   * `infinite': If this condition is true, the loop is infinite.  This
17327     condition is only available on RTL.  On GIMPLE, conditions for
17328     finiteness of the loop are included in `assumptions'.
17329
17330   * `niter_expr' on RTL, `niter' on GIMPLE: The expression that gives
17331     number of iterations.  The number of iterations is defined as the
17332     number of executions of the loop latch.
17333
17334 Both on GIMPLE and on RTL, it necessary for the induction variable
17335analysis framework to be initialized (SCEV on GIMPLE, loop-iv on RTL).
17336On GIMPLE, the results are stored to `struct tree_niter_desc'
17337structure.  Number of iterations before the loop is exited through a
17338given exit can be determined using `number_of_iterations_exit'
17339function.  On RTL, the results are returned in `struct niter_desc'
17340structure.  The corresponding function is named `check_simple_exit'.
17341There are also functions that pass through all the exits of a loop and
17342try to find one with easy to determine number of iterations -
17343`find_loop_niter' on GIMPLE and `find_simple_exit' on RTL.  Finally,
17344there are functions that provide the same information, but additionally
17345cache it, so that repeated calls to number of iterations are not so
17346costly - `number_of_latch_executions' on GIMPLE and
17347`get_simple_loop_desc' on RTL.
17348
17349 Note that some of these functions may behave slightly differently than
17350others - some of them return only the expression for the number of
17351iterations, and fail if there are some assumptions.  The function
17352`number_of_latch_executions' works only for single-exit loops.  The
17353function `number_of_cond_exit_executions' can be used to determine
17354number of executions of the exit condition of a single-exit loop (i.e.,
17355the `number_of_latch_executions' increased by one).
17356
17357
17358File: gccint.info,  Node: Dependency analysis,  Next: Lambda,  Prev: Number of iterations,  Up: Loop Analysis and Representation
17359
1736014.8 Data Dependency Analysis
17361=============================
17362
17363The code for the data dependence analysis can be found in
17364`tree-data-ref.c' and its interface and data structures are described
17365in `tree-data-ref.h'.  The function that computes the data dependences
17366for all the array and pointer references for a given loop is
17367`compute_data_dependences_for_loop'.  This function is currently used
17368by the linear loop transform and the vectorization passes.  Before
17369calling this function, one has to allocate two vectors: a first vector
17370will contain the set of data references that are contained in the
17371analyzed loop body, and the second vector will contain the dependence
17372relations between the data references.  Thus if the vector of data
17373references is of size `n', the vector containing the dependence
17374relations will contain `n*n' elements.  However if the analyzed loop
17375contains side effects, such as calls that potentially can interfere
17376with the data references in the current analyzed loop, the analysis
17377stops while scanning the loop body for data references, and inserts a
17378single `chrec_dont_know' in the dependence relation array.
17379
17380 The data references are discovered in a particular order during the
17381scanning of the loop body: the loop body is analyzed in execution order,
17382and the data references of each statement are pushed at the end of the
17383data reference array.  Two data references syntactically occur in the
17384program in the same order as in the array of data references.  This
17385syntactic order is important in some classical data dependence tests,
17386and mapping this order to the elements of this array avoids costly
17387queries to the loop body representation.
17388
17389 Three types of data references are currently handled: ARRAY_REF,
17390INDIRECT_REF and COMPONENT_REF. The data structure for the data
17391reference is `data_reference', where `data_reference_p' is a name of a
17392pointer to the data reference structure. The structure contains the
17393following elements:
17394
17395   * `base_object_info': Provides information about the base object of
17396     the data reference and its access functions. These access functions
17397     represent the evolution of the data reference in the loop relative
17398     to its base, in keeping with the classical meaning of the data
17399     reference access function for the support of arrays. For example,
17400     for a reference `a.b[i][j]', the base object is `a.b' and the
17401     access functions, one for each array subscript, are: `{i_init, +
17402     i_step}_1, {j_init, +, j_step}_2'.
17403
17404   * `first_location_in_loop': Provides information about the first
17405     location accessed by the data reference in the loop and about the
17406     access function used to represent evolution relative to this
17407     location. This data is used to support pointers, and is not used
17408     for arrays (for which we have base objects). Pointer accesses are
17409     represented as a one-dimensional access that starts from the first
17410     location accessed in the loop. For example:
17411
17412                for1 i
17413                   for2 j
17414                    *((int *)p + i + j) = a[i][j];
17415
17416     The access function of the pointer access is `{0, + 4B}_for2'
17417     relative to `p + i'. The access functions of the array are
17418     `{i_init, + i_step}_for1' and `{j_init, +, j_step}_for2' relative
17419     to `a'.
17420
17421     Usually, the object the pointer refers to is either unknown, or we
17422     can't prove that the access is confined to the boundaries of a
17423     certain object.
17424
17425     Two data references can be compared only if at least one of these
17426     two representations has all its fields filled for both data
17427     references.
17428
17429     The current strategy for data dependence tests is as follows: If
17430     both `a' and `b' are represented as arrays, compare
17431     `a.base_object' and `b.base_object'; if they are equal, apply
17432     dependence tests (use access functions based on base_objects).
17433     Else if both `a' and `b' are represented as pointers, compare
17434     `a.first_location' and `b.first_location'; if they are equal,
17435     apply dependence tests (use access functions based on first
17436     location).  However, if `a' and `b' are represented differently,
17437     only try to prove that the bases are definitely different.
17438
17439   * Aliasing information.
17440
17441   * Alignment information.
17442
17443 The structure describing the relation between two data references is
17444`data_dependence_relation' and the shorter name for a pointer to such a
17445structure is `ddr_p'.  This structure contains:
17446
17447   * a pointer to each data reference,
17448
17449   * a tree node `are_dependent' that is set to `chrec_known' if the
17450     analysis has proved that there is no dependence between these two
17451     data references, `chrec_dont_know' if the analysis was not able to
17452     determine any useful result and potentially there could exist a
17453     dependence between these data references, and `are_dependent' is
17454     set to `NULL_TREE' if there exist a dependence relation between the
17455     data references, and the description of this dependence relation is
17456     given in the `subscripts', `dir_vects', and `dist_vects' arrays,
17457
17458   * a boolean that determines whether the dependence relation can be
17459     represented by a classical distance vector,
17460
17461   * an array `subscripts' that contains a description of each
17462     subscript of the data references.  Given two array accesses a
17463     subscript is the tuple composed of the access functions for a given
17464     dimension.  For example, given `A[f1][f2][f3]' and
17465     `B[g1][g2][g3]', there are three subscripts: `(f1, g1), (f2, g2),
17466     (f3, g3)'.
17467
17468   * two arrays `dir_vects' and `dist_vects' that contain classical
17469     representations of the data dependences under the form of
17470     direction and distance dependence vectors,
17471
17472   * an array of loops `loop_nest' that contains the loops to which the
17473     distance and direction vectors refer to.
17474
17475 Several functions for pretty printing the information extracted by the
17476data dependence analysis are available: `dump_ddrs' prints with a
17477maximum verbosity the details of a data dependence relations array,
17478`dump_dist_dir_vectors' prints only the classical distance and
17479direction vectors for a data dependence relations array, and
17480`dump_data_references' prints the details of the data references
17481contained in a data reference array.
17482
17483
17484File: gccint.info,  Node: Lambda,  Next: Omega,  Prev: Dependency analysis,  Up: Loop Analysis and Representation
17485
1748614.9 Linear loop transformations framework
17487==========================================
17488
17489Lambda is a framework that allows transformations of loops using
17490non-singular matrix based transformations of the iteration space and
17491loop bounds. This allows compositions of skewing, scaling, interchange,
17492and reversal transformations.  These transformations are often used to
17493improve cache behavior or remove inner loop dependencies to allow
17494parallelization and vectorization to take place.
17495
17496 To perform these transformations, Lambda requires that the loopnest be
17497converted into an internal form that can be matrix transformed easily.
17498To do this conversion, the function `gcc_loopnest_to_lambda_loopnest'
17499is provided.  If the loop cannot be transformed using lambda, this
17500function will return NULL.
17501
17502 Once a `lambda_loopnest' is obtained from the conversion function, it
17503can be transformed by using `lambda_loopnest_transform', which takes a
17504transformation matrix to apply.  Note that it is up to the caller to
17505verify that the transformation matrix is legal to apply to the loop
17506(dependence respecting, etc).  Lambda simply applies whatever matrix it
17507is told to provide.  It can be extended to make legal matrices out of
17508any non-singular matrix, but this is not currently implemented.
17509Legality of a matrix for a given loopnest can be verified using
17510`lambda_transform_legal_p'.
17511
17512 Given a transformed loopnest, conversion back into gcc IR is done by
17513`lambda_loopnest_to_gcc_loopnest'.  This function will modify the loops
17514so that they match the transformed loopnest.
17515
17516
17517File: gccint.info,  Node: Omega,  Prev: Lambda,  Up: Loop Analysis and Representation
17518
1751914.10 Omega a solver for linear programming problems
17520====================================================
17521
17522The data dependence analysis contains several solvers triggered
17523sequentially from the less complex ones to the more sophisticated.  For
17524ensuring the consistency of the results of these solvers, a data
17525dependence check pass has been implemented based on two different
17526solvers.  The second method that has been integrated to GCC is based on
17527the Omega dependence solver, written in the 1990's by William Pugh and
17528David Wonnacott.  Data dependence tests can be formulated using a
17529subset of the Presburger arithmetics that can be translated to linear
17530constraint systems.  These linear constraint systems can then be solved
17531using the Omega solver.
17532
17533 The Omega solver is using Fourier-Motzkin's algorithm for variable
17534elimination: a linear constraint system containing `n' variables is
17535reduced to a linear constraint system with `n-1' variables.  The Omega
17536solver can also be used for solving other problems that can be
17537expressed under the form of a system of linear equalities and
17538inequalities.  The Omega solver is known to have an exponential worst
17539case, also known under the name of "omega nightmare" in the literature,
17540but in practice, the omega test is known to be efficient for the common
17541data dependence tests.
17542
17543 The interface used by the Omega solver for describing the linear
17544programming problems is described in `omega.h', and the solver is
17545`omega_solve_problem'.
17546
17547
17548File: gccint.info,  Node: Control Flow,  Next: Loop Analysis and Representation,  Prev: RTL,  Up: Top
17549
1755015 Control Flow Graph
17551*********************
17552
17553A control flow graph (CFG) is a data structure built on top of the
17554intermediate code representation (the RTL or `GIMPLE' instruction
17555stream) abstracting the control flow behavior of a function that is
17556being compiled.  The CFG is a directed graph where the vertices
17557represent basic blocks and edges represent possible transfer of control
17558flow from one basic block to another.  The data structures used to
17559represent the control flow graph are defined in `basic-block.h'.
17560
17561 In GCC, the representation of control flow is maintained throughout
17562the compilation process, from constructing the CFG early in
17563`pass_build_cfg' to `pass_free_cfg' (see `passes.c').  The CFG takes
17564various different modes and may undergo extensive manipulations, but
17565the graph is always valid between its construction and its release.
17566This way, transfer of information such as data flow, a measured
17567profile, or the loop tree, can be propagated through the passes
17568pipeline, and even from `GIMPLE' to `RTL'.
17569
17570 Often the CFG may be better viewed as integral part of instruction
17571chain, than structure built on the top of it.  Updating the compiler's
17572intermediate representation for instructions can not be easily done
17573without proper maintenance of the CFG simultaneously.
17574
17575* Menu:
17576
17577* Basic Blocks::           The definition and representation of basic blocks.
17578* Edges::                  Types of edges and their representation.
17579* Profile information::    Representation of frequencies and probabilities.
17580* Maintaining the CFG::    Keeping the control flow graph and up to date.
17581* Liveness information::   Using and maintaining liveness information.
17582
17583
17584File: gccint.info,  Node: Basic Blocks,  Next: Edges,  Up: Control Flow
17585
1758615.1 Basic Blocks
17587=================
17588
17589A basic block is a straight-line sequence of code with only one entry
17590point and only one exit.  In GCC, basic blocks are represented using
17591the `basic_block' data type.
17592
17593 Special basic blocks represent possible entry and exit points of a
17594function.  These blocks are called `ENTRY_BLOCK_PTR' and
17595`EXIT_BLOCK_PTR'.  These blocks do not contain any code.
17596
17597 The `BASIC_BLOCK' array contains all basic blocks in an unspecified
17598order.  Each `basic_block' structure has a field that holds a unique
17599integer identifier `index' that is the index of the block in the
17600`BASIC_BLOCK' array.  The total number of basic blocks in the function
17601is `n_basic_blocks'.  Both the basic block indices and the total number
17602of basic blocks may vary during the compilation process, as passes
17603reorder, create, duplicate, and destroy basic blocks.  The index for
17604any block should never be greater than `last_basic_block'.  The indices
176050 and 1 are special codes reserved for `ENTRY_BLOCK' and `EXIT_BLOCK',
17606the indices of `ENTRY_BLOCK_PTR' and `EXIT_BLOCK_PTR'.
17607
17608 Two pointer members of the `basic_block' structure are the pointers
17609`next_bb' and `prev_bb'.  These are used to keep doubly linked chain of
17610basic blocks in the same order as the underlying instruction stream.
17611The chain of basic blocks is updated transparently by the provided API
17612for manipulating the CFG.  The macro `FOR_EACH_BB' can be used to visit
17613all the basic blocks in lexicographical order, except `ENTRY_BLOCK' and
17614`EXIT_BLOCK'.  The macro `FOR_ALL_BB' also visits all basic blocks in
17615lexicographical order, including `ENTRY_BLOCK' and `EXIT_BLOCK'.
17616
17617 The functions `post_order_compute' and `inverted_post_order_compute'
17618can be used to compute topological orders of the CFG.  The orders are
17619stored as vectors of basic block indices.  The `BASIC_BLOCK' array can
17620be used to iterate each basic block by index.  Dominator traversals are
17621also possible using `walk_dominator_tree'.  Given two basic blocks A
17622and B, block A dominates block B if A is _always_ executed before B.
17623
17624 Each `basic_block' also contains pointers to the first instruction
17625(the "head") and the last instruction (the "tail") or "end" of the
17626instruction stream contained in a basic block.  In fact, since the
17627`basic_block' data type is used to represent blocks in both major
17628intermediate representations of GCC (`GIMPLE' and RTL), there are
17629pointers to the head and end of a basic block for both representations,
17630stored in intermediate representation specific data in the `il' field
17631of `struct basic_block_def'.
17632
17633 For RTL, these pointers are `BB_HEAD' and `BB_END'.
17634
17635 In the RTL representation of a function, the instruction stream
17636contains not only the "real" instructions, but also "notes" or "insn
17637notes" (to distinguish them from "reg notes").  Any function that moves
17638or duplicates the basic blocks needs to take care of updating of these
17639notes.  Many of these notes expect that the instruction stream consists
17640of linear regions, so updating can sometimes be tedious.  All types of
17641insn notes are defined in `insn-notes.def'.
17642
17643 In the RTL function representation, the instructions contained in a
17644basic block always follow a `NOTE_INSN_BASIC_BLOCK', but zero or more
17645`CODE_LABEL' nodes can precede the block note.  A basic block ends with
17646a control flow instruction or with the last instruction before the next
17647`CODE_LABEL' or `NOTE_INSN_BASIC_BLOCK'.  By definition, a `CODE_LABEL'
17648cannot appear in the middle of the instruction stream of a basic block.
17649
17650 In addition to notes, the jump table vectors are also represented as
17651"pseudo-instructions" inside the insn stream.  These vectors never
17652appear in the basic block and should always be placed just after the
17653table jump instructions referencing them.  After removing the
17654table-jump it is often difficult to eliminate the code computing the
17655address and referencing the vector, so cleaning up these vectors is
17656postponed until after liveness analysis.   Thus the jump table vectors
17657may appear in the insn stream unreferenced and without any purpose.
17658Before any edge is made "fall-thru", the existence of such construct in
17659the way needs to be checked by calling `can_fallthru' function.
17660
17661 For the `GIMPLE' representation, the PHI nodes and statements
17662contained in a basic block are in a `gimple_seq' pointed to by the
17663basic block intermediate language specific pointers.  Abstract
17664containers and iterators are used to access the PHI nodes and
17665statements in a basic blocks.  These iterators are called "GIMPLE
17666statement iterators" (GSIs).  Grep for `^gsi' in the various `gimple-*'
17667and `tree-*' files.  The following snippet will pretty-print all PHI
17668nodes the statements of the current function in the GIMPLE
17669representation.
17670
17671     basic_block bb;
17672
17673     FOR_EACH_BB (bb)
17674       {
17675        gimple_stmt_iterator si;
17676
17677        for (si = gsi_start_phis (bb); !gsi_end_p (si); gsi_next (&si))
17678          {
17679            gimple phi = gsi_stmt (si);
17680            print_gimple_stmt (dump_file, phi, 0, TDF_SLIM);
17681          }
17682        for (si = gsi_start_bb (bb); !gsi_end_p (si); gsi_next (&si))
17683          {
17684            gimple stmt = gsi_stmt (si);
17685            print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM);
17686          }
17687       }
17688
17689
17690File: gccint.info,  Node: Edges,  Next: Profile information,  Prev: Basic Blocks,  Up: Control Flow
17691
1769215.2 Edges
17693==========
17694
17695Edges represent possible control flow transfers from the end of some
17696basic block A to the head of another basic block B.  We say that A is a
17697predecessor of B, and B is a successor of A.  Edges are represented in
17698GCC with the `edge' data type.  Each `edge' acts as a link between two
17699basic blocks: The `src' member of an edge points to the predecessor
17700basic block of the `dest' basic block.  The members `preds' and `succs'
17701of the `basic_block' data type point to type-safe vectors of edges to
17702the predecessors and successors of the block.
17703
17704 When walking the edges in an edge vector, "edge iterators" should be
17705used.  Edge iterators are constructed using the `edge_iterator' data
17706structure and several methods are available to operate on them:
17707
17708`ei_start'
17709     This function initializes an `edge_iterator' that points to the
17710     first edge in a vector of edges.
17711
17712`ei_last'
17713     This function initializes an `edge_iterator' that points to the
17714     last edge in a vector of edges.
17715
17716`ei_end_p'
17717     This predicate is `true' if an `edge_iterator' represents the last
17718     edge in an edge vector.
17719
17720`ei_one_before_end_p'
17721     This predicate is `true' if an `edge_iterator' represents the
17722     second last edge in an edge vector.
17723
17724`ei_next'
17725     This function takes a pointer to an `edge_iterator' and makes it
17726     point to the next edge in the sequence.
17727
17728`ei_prev'
17729     This function takes a pointer to an `edge_iterator' and makes it
17730     point to the previous edge in the sequence.
17731
17732`ei_edge'
17733     This function returns the `edge' currently pointed to by an
17734     `edge_iterator'.
17735
17736`ei_safe_safe'
17737     This function returns the `edge' currently pointed to by an
17738     `edge_iterator', but returns `NULL' if the iterator is pointing at
17739     the end of the sequence.  This function has been provided for
17740     existing code makes the assumption that a `NULL' edge indicates
17741     the end of the sequence.
17742
17743
17744 The convenience macro `FOR_EACH_EDGE' can be used to visit all of the
17745edges in a sequence of predecessor or successor edges.  It must not be
17746used when an element might be removed during the traversal, otherwise
17747elements will be missed.  Here is an example of how to use the macro:
17748
17749     edge e;
17750     edge_iterator ei;
17751
17752     FOR_EACH_EDGE (e, ei, bb->succs)
17753       {
17754          if (e->flags & EDGE_FALLTHRU)
17755            break;
17756       }
17757
17758 There are various reasons why control flow may transfer from one block
17759to another.  One possibility is that some instruction, for example a
17760`CODE_LABEL', in a linearized instruction stream just always starts a
17761new basic block.  In this case a "fall-thru" edge links the basic block
17762to the first following basic block.  But there are several other
17763reasons why edges may be created.  The `flags' field of the `edge' data
17764type is used to store information about the type of edge we are dealing
17765with.  Each edge is of one of the following types:
17766
17767_jump_
17768     No type flags are set for edges corresponding to jump instructions.
17769     These edges are used for unconditional or conditional jumps and in
17770     RTL also for table jumps.  They are the easiest to manipulate as
17771     they may be freely redirected when the flow graph is not in SSA
17772     form.
17773
17774_fall-thru_
17775     Fall-thru edges are present in case where the basic block may
17776     continue execution to the following one without branching.  These
17777     edges have the `EDGE_FALLTHRU' flag set.  Unlike other types of
17778     edges, these edges must come into the basic block immediately
17779     following in the instruction stream.  The function
17780     `force_nonfallthru' is available to insert an unconditional jump
17781     in the case that redirection is needed.  Note that this may
17782     require creation of a new basic block.
17783
17784_exception handling_
17785     Exception handling edges represent possible control transfers from
17786     a trapping instruction to an exception handler.  The definition of
17787     "trapping" varies.  In C++, only function calls can throw, but for
17788     Java and Ada, exceptions like division by zero or segmentation
17789     fault are defined and thus each instruction possibly throwing this
17790     kind of exception needs to be handled as control flow instruction.
17791     Exception edges have the `EDGE_ABNORMAL' and `EDGE_EH' flags set.
17792
17793     When updating the instruction stream it is easy to change possibly
17794     trapping instruction to non-trapping, by simply removing the
17795     exception edge.  The opposite conversion is difficult, but should
17796     not happen anyway.  The edges can be eliminated via
17797     `purge_dead_edges' call.
17798
17799     In the RTL representation, the destination of an exception edge is
17800     specified by `REG_EH_REGION' note attached to the insn.  In case
17801     of a trapping call the `EDGE_ABNORMAL_CALL' flag is set too.  In
17802     the `GIMPLE' representation, this extra flag is not set.
17803
17804     In the RTL representation, the predicate `may_trap_p' may be used
17805     to check whether instruction still may trap or not.  For the tree
17806     representation, the `tree_could_trap_p' predicate is available,
17807     but this predicate only checks for possible memory traps, as in
17808     dereferencing an invalid pointer location.
17809
17810_sibling calls_
17811     Sibling calls or tail calls terminate the function in a
17812     non-standard way and thus an edge to the exit must be present.
17813     `EDGE_SIBCALL' and `EDGE_ABNORMAL' are set in such case.  These
17814     edges only exist in the RTL representation.
17815
17816_computed jumps_
17817     Computed jumps contain edges to all labels in the function
17818     referenced from the code.  All those edges have `EDGE_ABNORMAL'
17819     flag set.  The edges used to represent computed jumps often cause
17820     compile time performance problems, since functions consisting of
17821     many taken labels and many computed jumps may have _very_ dense
17822     flow graphs, so these edges need to be handled with special care.
17823     During the earlier stages of the compilation process, GCC tries to
17824     avoid such dense flow graphs by factoring computed jumps.  For
17825     example, given the following series of jumps,
17826
17827            goto *x;
17828            [ ... ]
17829
17830            goto *x;
17831            [ ... ]
17832
17833            goto *x;
17834            [ ... ]
17835
17836     factoring the computed jumps results in the following code sequence
17837     which has a much simpler flow graph:
17838
17839            goto y;
17840            [ ... ]
17841
17842            goto y;
17843            [ ... ]
17844
17845            goto y;
17846            [ ... ]
17847
17848          y:
17849            goto *x;
17850
17851     However, the classic problem with this transformation is that it
17852     has a runtime cost in there resulting code: An extra jump.
17853     Therefore, the computed jumps are un-factored in the later passes
17854     of the compiler (in the pass called
17855     `pass_duplicate_computed_gotos').  Be aware of that when you work
17856     on passes in that area.  There have been numerous examples already
17857     where the compile time for code with unfactored computed jumps
17858     caused some serious headaches.
17859
17860_nonlocal goto handlers_
17861     GCC allows nested functions to return into caller using a `goto'
17862     to a label passed to as an argument to the callee.  The labels
17863     passed to nested functions contain special code to cleanup after
17864     function call.  Such sections of code are referred to as "nonlocal
17865     goto receivers".  If a function contains such nonlocal goto
17866     receivers, an edge from the call to the label is created with the
17867     `EDGE_ABNORMAL' and `EDGE_ABNORMAL_CALL' flags set.
17868
17869_function entry points_
17870     By definition, execution of function starts at basic block 0, so
17871     there is always an edge from the `ENTRY_BLOCK_PTR' to basic block
17872     0.  There is no `GIMPLE' representation for alternate entry points
17873     at this moment.  In RTL, alternate entry points are specified by
17874     `CODE_LABEL' with `LABEL_ALTERNATE_NAME' defined.  This feature is
17875     currently used for multiple entry point prologues and is limited
17876     to post-reload passes only.  This can be used by back-ends to emit
17877     alternate prologues for functions called from different contexts.
17878     In future full support for multiple entry functions defined by
17879     Fortran 90 needs to be implemented.
17880
17881_function exits_
17882     In the pre-reload representation a function terminates after the
17883     last instruction in the insn chain and no explicit return
17884     instructions are used.  This corresponds to the fall-thru edge
17885     into exit block.  After reload, optimal RTL epilogues are used
17886     that use explicit (conditional) return instructions that are
17887     represented by edges with no flags set.
17888
17889
17890
17891File: gccint.info,  Node: Profile information,  Next: Maintaining the CFG,  Prev: Edges,  Up: Control Flow
17892
1789315.3 Profile information
17894========================
17895
17896In many cases a compiler must make a choice whether to trade speed in
17897one part of code for speed in another, or to trade code size for code
17898speed.  In such cases it is useful to know information about how often
17899some given block will be executed.  That is the purpose for maintaining
17900profile within the flow graph.  GCC can handle profile information
17901obtained through "profile feedback", but it can also estimate branch
17902probabilities based on statics and heuristics.
17903
17904 The feedback based profile is produced by compiling the program with
17905instrumentation, executing it on a train run and reading the numbers of
17906executions of basic blocks and edges back to the compiler while
17907re-compiling the program to produce the final executable.  This method
17908provides very accurate information about where a program spends most of
17909its time on the train run.  Whether it matches the average run of
17910course depends on the choice of train data set, but several studies
17911have shown that the behavior of a program usually changes just
17912marginally over different data sets.
17913
17914 When profile feedback is not available, the compiler may be asked to
17915attempt to predict the behavior of each branch in the program using a
17916set of heuristics (see `predict.def' for details) and compute estimated
17917frequencies of each basic block by propagating the probabilities over
17918the graph.
17919
17920 Each `basic_block' contains two integer fields to represent profile
17921information: `frequency' and `count'.  The `frequency' is an estimation
17922how often is basic block executed within a function.  It is represented
17923as an integer scaled in the range from 0 to `BB_FREQ_BASE'.  The most
17924frequently executed basic block in function is initially set to
17925`BB_FREQ_BASE' and the rest of frequencies are scaled accordingly.
17926During optimization, the frequency of the most frequent basic block can
17927both decrease (for instance by loop unrolling) or grow (for instance by
17928cross-jumping optimization), so scaling sometimes has to be performed
17929multiple times.
17930
17931 The `count' contains hard-counted numbers of execution measured during
17932training runs and is nonzero only when profile feedback is available.
17933This value is represented as the host's widest integer (typically a 64
17934bit integer) of the special type `gcov_type'.
17935
17936 Most optimization passes can use only the frequency information of a
17937basic block, but a few passes may want to know hard execution counts.
17938The frequencies should always match the counts after scaling, however
17939during updating of the profile information numerical error may
17940accumulate into quite large errors.
17941
17942 Each edge also contains a branch probability field: an integer in the
17943range from 0 to `REG_BR_PROB_BASE'.  It represents probability of
17944passing control from the end of the `src' basic block to the `dest'
17945basic block, i.e. the probability that control will flow along this
17946edge.  The `EDGE_FREQUENCY' macro is available to compute how
17947frequently a given edge is taken.  There is a `count' field for each
17948edge as well, representing same information as for a basic block.
17949
17950 The basic block frequencies are not represented in the instruction
17951stream, but in the RTL representation the edge frequencies are
17952represented for conditional jumps (via the `REG_BR_PROB' macro) since
17953they are used when instructions are output to the assembly file and the
17954flow graph is no longer maintained.
17955
17956 The probability that control flow arrives via a given edge to its
17957destination basic block is called "reverse probability" and is not
17958directly represented, but it may be easily computed from frequencies of
17959basic blocks.
17960
17961 Updating profile information is a delicate task that can unfortunately
17962not be easily integrated with the CFG manipulation API.  Many of the
17963functions and hooks to modify the CFG, such as
17964`redirect_edge_and_branch', do not have enough information to easily
17965update the profile, so updating it is in the majority of cases left up
17966to the caller.  It is difficult to uncover bugs in the profile updating
17967code, because they manifest themselves only by producing worse code,
17968and checking profile consistency is not possible because of numeric
17969error accumulation.  Hence special attention needs to be given to this
17970issue in each pass that modifies the CFG.
17971
17972 It is important to point out that `REG_BR_PROB_BASE' and
17973`BB_FREQ_BASE' are both set low enough to be possible to compute second
17974power of any frequency or probability in the flow graph, it is not
17975possible to even square the `count' field, as modern CPUs are fast
17976enough to execute $2^32$ operations quickly.
17977
17978
17979File: gccint.info,  Node: Maintaining the CFG,  Next: Liveness information,  Prev: Profile information,  Up: Control Flow
17980
1798115.4 Maintaining the CFG
17982========================
17983
17984An important task of each compiler pass is to keep both the control
17985flow graph and all profile information up-to-date.  Reconstruction of
17986the control flow graph after each pass is not an option, since it may be
17987very expensive and lost profile information cannot be reconstructed at
17988all.
17989
17990 GCC has two major intermediate representations, and both use the
17991`basic_block' and `edge' data types to represent control flow.  Both
17992representations share as much of the CFG maintenance code as possible.
17993For each representation, a set of "hooks" is defined so that each
17994representation can provide its own implementation of CFG manipulation
17995routines when necessary.  These hooks are defined in `cfghooks.h'.
17996There are hooks for almost all common CFG manipulations, including
17997block splitting and merging, edge redirection and creating and deleting
17998basic blocks.  These hooks should provide everything you need to
17999maintain and manipulate the CFG in both the RTL and `GIMPLE'
18000representation.
18001
18002 At the moment, the basic block boundaries are maintained transparently
18003when modifying instructions, so there rarely is a need to move them
18004manually (such as in case someone wants to output instruction outside
18005basic block explicitly).
18006
18007 In the RTL representation, each instruction has a `BLOCK_FOR_INSN'
18008value that represents pointer to the basic block that contains the
18009instruction.  In the `GIMPLE' representation, the function `gimple_bb'
18010returns a pointer to the basic block containing the queried statement.
18011
18012 When changes need to be applied to a function in its `GIMPLE'
18013representation, "GIMPLE statement iterators" should be used.  These
18014iterators provide an integrated abstraction of the flow graph and the
18015instruction stream.  Block statement iterators are constructed using
18016the `gimple_stmt_iterator' data structure and several modifier are
18017available, including the following:
18018
18019`gsi_start'
18020     This function initializes a `gimple_stmt_iterator' that points to
18021     the first non-empty statement in a basic block.
18022
18023`gsi_last'
18024     This function initializes a `gimple_stmt_iterator' that points to
18025     the last statement in a basic block.
18026
18027`gsi_end_p'
18028     This predicate is `true' if a `gimple_stmt_iterator' represents
18029     the end of a basic block.
18030
18031`gsi_next'
18032     This function takes a `gimple_stmt_iterator' and makes it point to
18033     its successor.
18034
18035`gsi_prev'
18036     This function takes a `gimple_stmt_iterator' and makes it point to
18037     its predecessor.
18038
18039`gsi_insert_after'
18040     This function inserts a statement after the `gimple_stmt_iterator'
18041     passed in.  The final parameter determines whether the statement
18042     iterator is updated to point to the newly inserted statement, or
18043     left pointing to the original statement.
18044
18045`gsi_insert_before'
18046     This function inserts a statement before the `gimple_stmt_iterator'
18047     passed in.  The final parameter determines whether the statement
18048     iterator is updated to point to the newly inserted statement, or
18049     left pointing to the original  statement.
18050
18051`gsi_remove'
18052     This function removes the `gimple_stmt_iterator' passed in and
18053     rechains the remaining statements in a basic block, if any.
18054
18055 In the RTL representation, the macros `BB_HEAD' and `BB_END' may be
18056used to get the head and end `rtx' of a basic block.  No abstract
18057iterators are defined for traversing the insn chain, but you can just
18058use `NEXT_INSN' and `PREV_INSN' instead.  *Note Insns::.
18059
18060 Usually a code manipulating pass simplifies the instruction stream and
18061the flow of control, possibly eliminating some edges.  This may for
18062example happen when a conditional jump is replaced with an
18063unconditional jump, but also when simplifying possibly trapping
18064instruction to non-trapping while compiling Java.  Updating of edges is
18065not transparent and each optimization pass is required to do so
18066manually.  However only few cases occur in practice.  The pass may call
18067`purge_dead_edges' on a given basic block to remove superfluous edges,
18068if any.
18069
18070 Another common scenario is redirection of branch instructions, but
18071this is best modeled as redirection of edges in the control flow graph
18072and thus use of `redirect_edge_and_branch' is preferred over more low
18073level functions, such as `redirect_jump' that operate on RTL chain
18074only.  The CFG hooks defined in `cfghooks.h' should provide the
18075complete API required for manipulating and maintaining the CFG.
18076
18077 It is also possible that a pass has to insert control flow instruction
18078into the middle of a basic block, thus creating an entry point in the
18079middle of the basic block, which is impossible by definition: The block
18080must be split to make sure it only has one entry point, i.e. the head
18081of the basic block.  The CFG hook `split_block' may be used when an
18082instruction in the middle of a basic block has to become the target of
18083a jump or branch instruction.
18084
18085 For a global optimizer, a common operation is to split edges in the
18086flow graph and insert instructions on them.  In the RTL representation,
18087this can be easily done using the `insert_insn_on_edge' function that
18088emits an instruction "on the edge", caching it for a later
18089`commit_edge_insertions' call that will take care of moving the
18090inserted instructions off the edge into the instruction stream
18091contained in a basic block.  This includes the creation of new basic
18092blocks where needed.  In the `GIMPLE' representation, the equivalent
18093functions are `gsi_insert_on_edge' which inserts a block statement
18094iterator on an edge, and `gsi_commit_edge_inserts' which flushes the
18095instruction to actual instruction stream.
18096
18097 While debugging the optimization pass, the `verify_flow_info' function
18098may be useful to find bugs in the control flow graph updating code.
18099
18100
18101File: gccint.info,  Node: Liveness information,  Prev: Maintaining the CFG,  Up: Control Flow
18102
1810315.5 Liveness information
18104=========================
18105
18106Liveness information is useful to determine whether some register is
18107"live" at given point of program, i.e. that it contains a value that
18108may be used at a later point in the program.  This information is used,
18109for instance, during register allocation, as the pseudo registers only
18110need to be assigned to a unique hard register or to a stack slot if
18111they are live.  The hard registers and stack slots may be freely reused
18112for other values when a register is dead.
18113
18114 Liveness information is available in the back end starting with
18115`pass_df_initialize' and ending with `pass_df_finish'.  Three flavors
18116of live analysis are available: With `LR', it is possible to determine
18117at any point `P' in the function if the register may be used on some
18118path from `P' to the end of the function.  With `UR', it is possible to
18119determine if there is a path from the beginning of the function to `P'
18120that defines the variable.  `LIVE' is the intersection of the `LR' and
18121`UR' and a variable is live at `P' if there is both an assignment that
18122reaches it from the beginning of the function and a use that can be
18123reached on some path from `P' to the end of the function.
18124
18125 In general `LIVE' is the most useful of the three.  The macros
18126`DF_[LR,UR,LIVE]_[IN,OUT]' can be used to access this information.  The
18127macros take a basic block number and return a bitmap that is indexed by
18128the register number.  This information is only guaranteed to be up to
18129date after calls are made to `df_analyze'.  See the file `df-core.c'
18130for details on using the dataflow.
18131
18132 The liveness information is stored partly in the RTL instruction stream
18133and partly in the flow graph.  Local information is stored in the
18134instruction stream: Each instruction may contain `REG_DEAD' notes
18135representing that the value of a given register is no longer needed, or
18136`REG_UNUSED' notes representing that the value computed by the
18137instruction is never used.  The second is useful for instructions
18138computing multiple values at once.
18139
18140
18141File: gccint.info,  Node: Machine Desc,  Next: Target Macros,  Prev: Loop Analysis and Representation,  Up: Top
18142
1814316 Machine Descriptions
18144***********************
18145
18146A machine description has two parts: a file of instruction patterns
18147(`.md' file) and a C header file of macro definitions.
18148
18149 The `.md' file for a target machine contains a pattern for each
18150instruction that the target machine supports (or at least each
18151instruction that is worth telling the compiler about).  It may also
18152contain comments.  A semicolon causes the rest of the line to be a
18153comment, unless the semicolon is inside a quoted string.
18154
18155 See the next chapter for information on the C header file.
18156
18157* Menu:
18158
18159* Overview::            How the machine description is used.
18160* Patterns::            How to write instruction patterns.
18161* Example::             An explained example of a `define_insn' pattern.
18162* RTL Template::        The RTL template defines what insns match a pattern.
18163* Output Template::     The output template says how to make assembler code
18164                        from such an insn.
18165* Output Statement::    For more generality, write C code to output
18166                        the assembler code.
18167* Predicates::          Controlling what kinds of operands can be used
18168                        for an insn.
18169* Constraints::         Fine-tuning operand selection.
18170* Standard Names::      Names mark patterns to use for code generation.
18171* Pattern Ordering::    When the order of patterns makes a difference.
18172* Dependent Patterns::  Having one pattern may make you need another.
18173* Jump Patterns::       Special considerations for patterns for jump insns.
18174* Looping Patterns::    How to define patterns for special looping insns.
18175* Insn Canonicalizations::Canonicalization of Instructions
18176* Expander Definitions::Generating a sequence of several RTL insns
18177                        for a standard operation.
18178* Insn Splitting::      Splitting Instructions into Multiple Instructions.
18179* Including Patterns::  Including Patterns in Machine Descriptions.
18180* Peephole Definitions::Defining machine-specific peephole optimizations.
18181* Insn Attributes::     Specifying the value of attributes for generated insns.
18182* Conditional Execution::Generating `define_insn' patterns for
18183                         predication.
18184* Define Subst::	Generating `define_insn' and `define_expand'
18185			patterns from other patterns.
18186* Constant Definitions::Defining symbolic constants that can be used in the
18187                        md file.
18188* Iterators::           Using iterators to generate patterns from a template.
18189
18190
18191File: gccint.info,  Node: Overview,  Next: Patterns,  Up: Machine Desc
18192
1819316.1 Overview of How the Machine Description is Used
18194====================================================
18195
18196There are three main conversions that happen in the compiler:
18197
18198  1. The front end reads the source code and builds a parse tree.
18199
18200  2. The parse tree is used to generate an RTL insn list based on named
18201     instruction patterns.
18202
18203  3. The insn list is matched against the RTL templates to produce
18204     assembler code.
18205
18206
18207 For the generate pass, only the names of the insns matter, from either
18208a named `define_insn' or a `define_expand'.  The compiler will choose
18209the pattern with the right name and apply the operands according to the
18210documentation later in this chapter, without regard for the RTL
18211template or operand constraints.  Note that the names the compiler looks
18212for are hard-coded in the compiler--it will ignore unnamed patterns and
18213patterns with names it doesn't know about, but if you don't provide a
18214named pattern it needs, it will abort.
18215
18216 If a `define_insn' is used, the template given is inserted into the
18217insn list.  If a `define_expand' is used, one of three things happens,
18218based on the condition logic.  The condition logic may manually create
18219new insns for the insn list, say via `emit_insn()', and invoke `DONE'.
18220For certain named patterns, it may invoke `FAIL' to tell the compiler
18221to use an alternate way of performing that task.  If it invokes neither
18222`DONE' nor `FAIL', the template given in the pattern is inserted, as if
18223the `define_expand' were a `define_insn'.
18224
18225 Once the insn list is generated, various optimization passes convert,
18226replace, and rearrange the insns in the insn list.  This is where the
18227`define_split' and `define_peephole' patterns get used, for example.
18228
18229 Finally, the insn list's RTL is matched up with the RTL templates in
18230the `define_insn' patterns, and those patterns are used to emit the
18231final assembly code.  For this purpose, each named `define_insn' acts
18232like it's unnamed, since the names are ignored.
18233
18234
18235File: gccint.info,  Node: Patterns,  Next: Example,  Prev: Overview,  Up: Machine Desc
18236
1823716.2 Everything about Instruction Patterns
18238==========================================
18239
18240Each instruction pattern contains an incomplete RTL expression, with
18241pieces to be filled in later, operand constraints that restrict how the
18242pieces can be filled in, and an output pattern or C code to generate
18243the assembler output, all wrapped up in a `define_insn' expression.
18244
18245 A `define_insn' is an RTL expression containing four or five operands:
18246
18247  1. An optional name.  The presence of a name indicate that this
18248     instruction pattern can perform a certain standard job for the
18249     RTL-generation pass of the compiler.  This pass knows certain
18250     names and will use the instruction patterns with those names, if
18251     the names are defined in the machine description.
18252
18253     The absence of a name is indicated by writing an empty string
18254     where the name should go.  Nameless instruction patterns are never
18255     used for generating RTL code, but they may permit several simpler
18256     insns to be combined later on.
18257
18258     Names that are not thus known and used in RTL-generation have no
18259     effect; they are equivalent to no name at all.
18260
18261     For the purpose of debugging the compiler, you may also specify a
18262     name beginning with the `*' character.  Such a name is used only
18263     for identifying the instruction in RTL dumps; it is entirely
18264     equivalent to having a nameless pattern for all other purposes.
18265
18266  2. The "RTL template" (*note RTL Template::) is a vector of incomplete
18267     RTL expressions which show what the instruction should look like.
18268     It is incomplete because it may contain `match_operand',
18269     `match_operator', and `match_dup' expressions that stand for
18270     operands of the instruction.
18271
18272     If the vector has only one element, that element is the template
18273     for the instruction pattern.  If the vector has multiple elements,
18274     then the instruction pattern is a `parallel' expression containing
18275     the elements described.
18276
18277  3. A condition.  This is a string which contains a C expression that
18278     is the final test to decide whether an insn body matches this
18279     pattern.
18280
18281     For a named pattern, the condition (if present) may not depend on
18282     the data in the insn being matched, but only the
18283     target-machine-type flags.  The compiler needs to test these
18284     conditions during initialization in order to learn exactly which
18285     named instructions are available in a particular run.
18286
18287     For nameless patterns, the condition is applied only when matching
18288     an individual insn, and only after the insn has matched the
18289     pattern's recognition template.  The insn's operands may be found
18290     in the vector `operands'.  For an insn where the condition has
18291     once matched, it can't be used to control register allocation, for
18292     example by excluding certain hard registers or hard register
18293     combinations.
18294
18295  4. The "output template": a string that says how to output matching
18296     insns as assembler code.  `%' in this string specifies where to
18297     substitute the value of an operand.  *Note Output Template::.
18298
18299     When simple substitution isn't general enough, you can specify a
18300     piece of C code to compute the output.  *Note Output Statement::.
18301
18302  5. Optionally, a vector containing the values of attributes for insns
18303     matching this pattern.  *Note Insn Attributes::.
18304
18305
18306File: gccint.info,  Node: Example,  Next: RTL Template,  Prev: Patterns,  Up: Machine Desc
18307
1830816.3 Example of `define_insn'
18309=============================
18310
18311Here is an actual example of an instruction pattern, for the
1831268000/68020.
18313
18314     (define_insn "tstsi"
18315       [(set (cc0)
18316             (match_operand:SI 0 "general_operand" "rm"))]
18317       ""
18318       "*
18319     {
18320       if (TARGET_68020 || ! ADDRESS_REG_P (operands[0]))
18321         return \"tstl %0\";
18322       return \"cmpl #0,%0\";
18323     }")
18324
18325This can also be written using braced strings:
18326
18327     (define_insn "tstsi"
18328       [(set (cc0)
18329             (match_operand:SI 0 "general_operand" "rm"))]
18330       ""
18331     {
18332       if (TARGET_68020 || ! ADDRESS_REG_P (operands[0]))
18333         return "tstl %0";
18334       return "cmpl #0,%0";
18335     })
18336
18337 This is an instruction that sets the condition codes based on the
18338value of a general operand.  It has no condition, so any insn whose RTL
18339description has the form shown may be handled according to this
18340pattern.  The name `tstsi' means "test a `SImode' value" and tells the
18341RTL generation pass that, when it is necessary to test such a value, an
18342insn to do so can be constructed using this pattern.
18343
18344 The output control string is a piece of C code which chooses which
18345output template to return based on the kind of operand and the specific
18346type of CPU for which code is being generated.
18347
18348 `"rm"' is an operand constraint.  Its meaning is explained below.
18349
18350
18351File: gccint.info,  Node: RTL Template,  Next: Output Template,  Prev: Example,  Up: Machine Desc
18352
1835316.4 RTL Template
18354=================
18355
18356The RTL template is used to define which insns match the particular
18357pattern and how to find their operands.  For named patterns, the RTL
18358template also says how to construct an insn from specified operands.
18359
18360 Construction involves substituting specified operands into a copy of
18361the template.  Matching involves determining the values that serve as
18362the operands in the insn being matched.  Both of these activities are
18363controlled by special expression types that direct matching and
18364substitution of the operands.
18365
18366`(match_operand:M N PREDICATE CONSTRAINT)'
18367     This expression is a placeholder for operand number N of the insn.
18368     When constructing an insn, operand number N will be substituted at
18369     this point.  When matching an insn, whatever appears at this
18370     position in the insn will be taken as operand number N; but it
18371     must satisfy PREDICATE or this instruction pattern will not match
18372     at all.
18373
18374     Operand numbers must be chosen consecutively counting from zero in
18375     each instruction pattern.  There may be only one `match_operand'
18376     expression in the pattern for each operand number.  Usually
18377     operands are numbered in the order of appearance in `match_operand'
18378     expressions.  In the case of a `define_expand', any operand numbers
18379     used only in `match_dup' expressions have higher values than all
18380     other operand numbers.
18381
18382     PREDICATE is a string that is the name of a function that accepts
18383     two arguments, an expression and a machine mode.  *Note
18384     Predicates::.  During matching, the function will be called with
18385     the putative operand as the expression and M as the mode argument
18386     (if M is not specified, `VOIDmode' will be used, which normally
18387     causes PREDICATE to accept any mode).  If it returns zero, this
18388     instruction pattern fails to match.  PREDICATE may be an empty
18389     string; then it means no test is to be done on the operand, so
18390     anything which occurs in this position is valid.
18391
18392     Most of the time, PREDICATE will reject modes other than M--but
18393     not always.  For example, the predicate `address_operand' uses M
18394     as the mode of memory ref that the address should be valid for.
18395     Many predicates accept `const_int' nodes even though their mode is
18396     `VOIDmode'.
18397
18398     CONSTRAINT controls reloading and the choice of the best register
18399     class to use for a value, as explained later (*note Constraints::).
18400     If the constraint would be an empty string, it can be omitted.
18401
18402     People are often unclear on the difference between the constraint
18403     and the predicate.  The predicate helps decide whether a given
18404     insn matches the pattern.  The constraint plays no role in this
18405     decision; instead, it controls various decisions in the case of an
18406     insn which does match.
18407
18408`(match_scratch:M N CONSTRAINT)'
18409     This expression is also a placeholder for operand number N and
18410     indicates that operand must be a `scratch' or `reg' expression.
18411
18412     When matching patterns, this is equivalent to
18413
18414          (match_operand:M N "scratch_operand" PRED)
18415
18416     but, when generating RTL, it produces a (`scratch':M) expression.
18417
18418     If the last few expressions in a `parallel' are `clobber'
18419     expressions whose operands are either a hard register or
18420     `match_scratch', the combiner can add or delete them when
18421     necessary.  *Note Side Effects::.
18422
18423`(match_dup N)'
18424     This expression is also a placeholder for operand number N.  It is
18425     used when the operand needs to appear more than once in the insn.
18426
18427     In construction, `match_dup' acts just like `match_operand': the
18428     operand is substituted into the insn being constructed.  But in
18429     matching, `match_dup' behaves differently.  It assumes that operand
18430     number N has already been determined by a `match_operand'
18431     appearing earlier in the recognition template, and it matches only
18432     an identical-looking expression.
18433
18434     Note that `match_dup' should not be used to tell the compiler that
18435     a particular register is being used for two operands (example:
18436     `add' that adds one register to another; the second register is
18437     both an input operand and the output operand).  Use a matching
18438     constraint (*note Simple Constraints::) for those.  `match_dup' is
18439     for the cases where one operand is used in two places in the
18440     template, such as an instruction that computes both a quotient and
18441     a remainder, where the opcode takes two input operands but the RTL
18442     template has to refer to each of those twice; once for the
18443     quotient pattern and once for the remainder pattern.
18444
18445`(match_operator:M N PREDICATE [OPERANDS...])'
18446     This pattern is a kind of placeholder for a variable RTL expression
18447     code.
18448
18449     When constructing an insn, it stands for an RTL expression whose
18450     expression code is taken from that of operand N, and whose
18451     operands are constructed from the patterns OPERANDS.
18452
18453     When matching an expression, it matches an expression if the
18454     function PREDICATE returns nonzero on that expression _and_ the
18455     patterns OPERANDS match the operands of the expression.
18456
18457     Suppose that the function `commutative_operator' is defined as
18458     follows, to match any expression whose operator is one of the
18459     commutative arithmetic operators of RTL and whose mode is MODE:
18460
18461          int
18462          commutative_integer_operator (x, mode)
18463               rtx x;
18464               enum machine_mode mode;
18465          {
18466            enum rtx_code code = GET_CODE (x);
18467            if (GET_MODE (x) != mode)
18468              return 0;
18469            return (GET_RTX_CLASS (code) == RTX_COMM_ARITH
18470                    || code == EQ || code == NE);
18471          }
18472
18473     Then the following pattern will match any RTL expression consisting
18474     of a commutative operator applied to two general operands:
18475
18476          (match_operator:SI 3 "commutative_operator"
18477            [(match_operand:SI 1 "general_operand" "g")
18478             (match_operand:SI 2 "general_operand" "g")])
18479
18480     Here the vector `[OPERANDS...]' contains two patterns because the
18481     expressions to be matched all contain two operands.
18482
18483     When this pattern does match, the two operands of the commutative
18484     operator are recorded as operands 1 and 2 of the insn.  (This is
18485     done by the two instances of `match_operand'.)  Operand 3 of the
18486     insn will be the entire commutative expression: use `GET_CODE
18487     (operands[3])' to see which commutative operator was used.
18488
18489     The machine mode M of `match_operator' works like that of
18490     `match_operand': it is passed as the second argument to the
18491     predicate function, and that function is solely responsible for
18492     deciding whether the expression to be matched "has" that mode.
18493
18494     When constructing an insn, argument 3 of the gen-function will
18495     specify the operation (i.e. the expression code) for the
18496     expression to be made.  It should be an RTL expression, whose
18497     expression code is copied into a new expression whose operands are
18498     arguments 1 and 2 of the gen-function.  The subexpressions of
18499     argument 3 are not used; only its expression code matters.
18500
18501     When `match_operator' is used in a pattern for matching an insn,
18502     it usually best if the operand number of the `match_operator' is
18503     higher than that of the actual operands of the insn.  This improves
18504     register allocation because the register allocator often looks at
18505     operands 1 and 2 of insns to see if it can do register tying.
18506
18507     There is no way to specify constraints in `match_operator'.  The
18508     operand of the insn which corresponds to the `match_operator'
18509     never has any constraints because it is never reloaded as a whole.
18510     However, if parts of its OPERANDS are matched by `match_operand'
18511     patterns, those parts may have constraints of their own.
18512
18513`(match_op_dup:M N[OPERANDS...])'
18514     Like `match_dup', except that it applies to operators instead of
18515     operands.  When constructing an insn, operand number N will be
18516     substituted at this point.  But in matching, `match_op_dup' behaves
18517     differently.  It assumes that operand number N has already been
18518     determined by a `match_operator' appearing earlier in the
18519     recognition template, and it matches only an identical-looking
18520     expression.
18521
18522`(match_parallel N PREDICATE [SUBPAT...])'
18523     This pattern is a placeholder for an insn that consists of a
18524     `parallel' expression with a variable number of elements.  This
18525     expression should only appear at the top level of an insn pattern.
18526
18527     When constructing an insn, operand number N will be substituted at
18528     this point.  When matching an insn, it matches if the body of the
18529     insn is a `parallel' expression with at least as many elements as
18530     the vector of SUBPAT expressions in the `match_parallel', if each
18531     SUBPAT matches the corresponding element of the `parallel', _and_
18532     the function PREDICATE returns nonzero on the `parallel' that is
18533     the body of the insn.  It is the responsibility of the predicate
18534     to validate elements of the `parallel' beyond those listed in the
18535     `match_parallel'.
18536
18537     A typical use of `match_parallel' is to match load and store
18538     multiple expressions, which can contain a variable number of
18539     elements in a `parallel'.  For example,
18540
18541          (define_insn ""
18542            [(match_parallel 0 "load_multiple_operation"
18543               [(set (match_operand:SI 1 "gpc_reg_operand" "=r")
18544                     (match_operand:SI 2 "memory_operand" "m"))
18545                (use (reg:SI 179))
18546                (clobber (reg:SI 179))])]
18547            ""
18548            "loadm 0,0,%1,%2")
18549
18550     This example comes from `a29k.md'.  The function
18551     `load_multiple_operation' is defined in `a29k.c' and checks that
18552     subsequent elements in the `parallel' are the same as the `set' in
18553     the pattern, except that they are referencing subsequent registers
18554     and memory locations.
18555
18556     An insn that matches this pattern might look like:
18557
18558          (parallel
18559           [(set (reg:SI 20) (mem:SI (reg:SI 100)))
18560            (use (reg:SI 179))
18561            (clobber (reg:SI 179))
18562            (set (reg:SI 21)
18563                 (mem:SI (plus:SI (reg:SI 100)
18564                                  (const_int 4))))
18565            (set (reg:SI 22)
18566                 (mem:SI (plus:SI (reg:SI 100)
18567                                  (const_int 8))))])
18568
18569`(match_par_dup N [SUBPAT...])'
18570     Like `match_op_dup', but for `match_parallel' instead of
18571     `match_operator'.
18572
18573
18574
18575File: gccint.info,  Node: Output Template,  Next: Output Statement,  Prev: RTL Template,  Up: Machine Desc
18576
1857716.5 Output Templates and Operand Substitution
18578==============================================
18579
18580The "output template" is a string which specifies how to output the
18581assembler code for an instruction pattern.  Most of the template is a
18582fixed string which is output literally.  The character `%' is used to
18583specify where to substitute an operand; it can also be used to identify
18584places where different variants of the assembler require different
18585syntax.
18586
18587 In the simplest case, a `%' followed by a digit N says to output
18588operand N at that point in the string.
18589
18590 `%' followed by a letter and a digit says to output an operand in an
18591alternate fashion.  Four letters have standard, built-in meanings
18592described below.  The machine description macro `PRINT_OPERAND' can
18593define additional letters with nonstandard meanings.
18594
18595 `%cDIGIT' can be used to substitute an operand that is a constant
18596value without the syntax that normally indicates an immediate operand.
18597
18598 `%nDIGIT' is like `%cDIGIT' except that the value of the constant is
18599negated before printing.
18600
18601 `%aDIGIT' can be used to substitute an operand as if it were a memory
18602reference, with the actual operand treated as the address.  This may be
18603useful when outputting a "load address" instruction, because often the
18604assembler syntax for such an instruction requires you to write the
18605operand as if it were a memory reference.
18606
18607 `%lDIGIT' is used to substitute a `label_ref' into a jump instruction.
18608
18609 `%=' outputs a number which is unique to each instruction in the
18610entire compilation.  This is useful for making local labels to be
18611referred to more than once in a single template that generates multiple
18612assembler instructions.
18613
18614 `%' followed by a punctuation character specifies a substitution that
18615does not use an operand.  Only one case is standard: `%%' outputs a `%'
18616into the assembler code.  Other nonstandard cases can be defined in the
18617`PRINT_OPERAND' macro.  You must also define which punctuation
18618characters are valid with the `PRINT_OPERAND_PUNCT_VALID_P' macro.
18619
18620 The template may generate multiple assembler instructions.  Write the
18621text for the instructions, with `\;' between them.
18622
18623 When the RTL contains two operands which are required by constraint to
18624match each other, the output template must refer only to the
18625lower-numbered operand.  Matching operands are not always identical,
18626and the rest of the compiler arranges to put the proper RTL expression
18627for printing into the lower-numbered operand.
18628
18629 One use of nonstandard letters or punctuation following `%' is to
18630distinguish between different assembler languages for the same machine;
18631for example, Motorola syntax versus MIT syntax for the 68000.  Motorola
18632syntax requires periods in most opcode names, while MIT syntax does
18633not.  For example, the opcode `movel' in MIT syntax is `move.l' in
18634Motorola syntax.  The same file of patterns is used for both kinds of
18635output syntax, but the character sequence `%.' is used in each place
18636where Motorola syntax wants a period.  The `PRINT_OPERAND' macro for
18637Motorola syntax defines the sequence to output a period; the macro for
18638MIT syntax defines it to do nothing.
18639
18640 As a special case, a template consisting of the single character `#'
18641instructs the compiler to first split the insn, and then output the
18642resulting instructions separately.  This helps eliminate redundancy in
18643the output templates.   If you have a `define_insn' that needs to emit
18644multiple assembler instructions, and there is a matching `define_split'
18645already defined, then you can simply use `#' as the output template
18646instead of writing an output template that emits the multiple assembler
18647instructions.
18648
18649 If the macro `ASSEMBLER_DIALECT' is defined, you can use construct of
18650the form `{option0|option1|option2}' in the templates.  These describe
18651multiple variants of assembler language syntax.  *Note Instruction
18652Output::.
18653
18654
18655File: gccint.info,  Node: Output Statement,  Next: Predicates,  Prev: Output Template,  Up: Machine Desc
18656
1865716.6 C Statements for Assembler Output
18658======================================
18659
18660Often a single fixed template string cannot produce correct and
18661efficient assembler code for all the cases that are recognized by a
18662single instruction pattern.  For example, the opcodes may depend on the
18663kinds of operands; or some unfortunate combinations of operands may
18664require extra machine instructions.
18665
18666 If the output control string starts with a `@', then it is actually a
18667series of templates, each on a separate line.  (Blank lines and leading
18668spaces and tabs are ignored.)  The templates correspond to the
18669pattern's constraint alternatives (*note Multi-Alternative::).  For
18670example, if a target machine has a two-address add instruction `addr'
18671to add into a register and another `addm' to add a register to memory,
18672you might write this pattern:
18673
18674     (define_insn "addsi3"
18675       [(set (match_operand:SI 0 "general_operand" "=r,m")
18676             (plus:SI (match_operand:SI 1 "general_operand" "0,0")
18677                      (match_operand:SI 2 "general_operand" "g,r")))]
18678       ""
18679       "@
18680        addr %2,%0
18681        addm %2,%0")
18682
18683 If the output control string starts with a `*', then it is not an
18684output template but rather a piece of C program that should compute a
18685template.  It should execute a `return' statement to return the
18686template-string you want.  Most such templates use C string literals,
18687which require doublequote characters to delimit them.  To include these
18688doublequote characters in the string, prefix each one with `\'.
18689
18690 If the output control string is written as a brace block instead of a
18691double-quoted string, it is automatically assumed to be C code.  In that
18692case, it is not necessary to put in a leading asterisk, or to escape the
18693doublequotes surrounding C string literals.
18694
18695 The operands may be found in the array `operands', whose C data type
18696is `rtx []'.
18697
18698 It is very common to select different ways of generating assembler code
18699based on whether an immediate operand is within a certain range.  Be
18700careful when doing this, because the result of `INTVAL' is an integer
18701on the host machine.  If the host machine has more bits in an `int'
18702than the target machine has in the mode in which the constant will be
18703used, then some of the bits you get from `INTVAL' will be superfluous.
18704For proper results, you must carefully disregard the values of those
18705bits.
18706
18707 It is possible to output an assembler instruction and then go on to
18708output or compute more of them, using the subroutine `output_asm_insn'.
18709This receives two arguments: a template-string and a vector of
18710operands.  The vector may be `operands', or it may be another array of
18711`rtx' that you declare locally and initialize yourself.
18712
18713 When an insn pattern has multiple alternatives in its constraints,
18714often the appearance of the assembler code is determined mostly by
18715which alternative was matched.  When this is so, the C code can test
18716the variable `which_alternative', which is the ordinal number of the
18717alternative that was actually satisfied (0 for the first, 1 for the
18718second alternative, etc.).
18719
18720 For example, suppose there are two opcodes for storing zero, `clrreg'
18721for registers and `clrmem' for memory locations.  Here is how a pattern
18722could use `which_alternative' to choose between them:
18723
18724     (define_insn ""
18725       [(set (match_operand:SI 0 "general_operand" "=r,m")
18726             (const_int 0))]
18727       ""
18728       {
18729       return (which_alternative == 0
18730               ? "clrreg %0" : "clrmem %0");
18731       })
18732
18733 The example above, where the assembler code to generate was _solely_
18734determined by the alternative, could also have been specified as
18735follows, having the output control string start with a `@':
18736
18737     (define_insn ""
18738       [(set (match_operand:SI 0 "general_operand" "=r,m")
18739             (const_int 0))]
18740       ""
18741       "@
18742        clrreg %0
18743        clrmem %0")
18744
18745 If you just need a little bit of C code in one (or a few) alternatives,
18746you can use `*' inside of a `@' multi-alternative template:
18747
18748     (define_insn ""
18749       [(set (match_operand:SI 0 "general_operand" "=r,<,m")
18750             (const_int 0))]
18751       ""
18752       "@
18753        clrreg %0
18754        * return stack_mem_p (operands[0]) ? \"push 0\" : \"clrmem %0\";
18755        clrmem %0")
18756
18757
18758File: gccint.info,  Node: Predicates,  Next: Constraints,  Prev: Output Statement,  Up: Machine Desc
18759
1876016.7 Predicates
18761===============
18762
18763A predicate determines whether a `match_operand' or `match_operator'
18764expression matches, and therefore whether the surrounding instruction
18765pattern will be used for that combination of operands.  GCC has a
18766number of machine-independent predicates, and you can define
18767machine-specific predicates as needed.  By convention, predicates used
18768with `match_operand' have names that end in `_operand', and those used
18769with `match_operator' have names that end in `_operator'.
18770
18771 All predicates are Boolean functions (in the mathematical sense) of
18772two arguments: the RTL expression that is being considered at that
18773position in the instruction pattern, and the machine mode that the
18774`match_operand' or `match_operator' specifies.  In this section, the
18775first argument is called OP and the second argument MODE.  Predicates
18776can be called from C as ordinary two-argument functions; this can be
18777useful in output templates or other machine-specific code.
18778
18779 Operand predicates can allow operands that are not actually acceptable
18780to the hardware, as long as the constraints give reload the ability to
18781fix them up (*note Constraints::).  However, GCC will usually generate
18782better code if the predicates specify the requirements of the machine
18783instructions as closely as possible.  Reload cannot fix up operands
18784that must be constants ("immediate operands"); you must use a predicate
18785that allows only constants, or else enforce the requirement in the
18786extra condition.
18787
18788 Most predicates handle their MODE argument in a uniform manner.  If
18789MODE is `VOIDmode' (unspecified), then OP can have any mode.  If MODE
18790is anything else, then OP must have the same mode, unless OP is a
18791`CONST_INT' or integer `CONST_DOUBLE'.  These RTL expressions always
18792have `VOIDmode', so it would be counterproductive to check that their
18793mode matches.  Instead, predicates that accept `CONST_INT' and/or
18794integer `CONST_DOUBLE' check that the value stored in the constant will
18795fit in the requested mode.
18796
18797 Predicates with this behavior are called "normal".  `genrecog' can
18798optimize the instruction recognizer based on knowledge of how normal
18799predicates treat modes.  It can also diagnose certain kinds of common
18800errors in the use of normal predicates; for instance, it is almost
18801always an error to use a normal predicate without specifying a mode.
18802
18803 Predicates that do something different with their MODE argument are
18804called "special".  The generic predicates `address_operand' and
18805`pmode_register_operand' are special predicates.  `genrecog' does not
18806do any optimizations or diagnosis when special predicates are used.
18807
18808* Menu:
18809
18810* Machine-Independent Predicates::  Predicates available to all back ends.
18811* Defining Predicates::             How to write machine-specific predicate
18812                                    functions.
18813
18814
18815File: gccint.info,  Node: Machine-Independent Predicates,  Next: Defining Predicates,  Up: Predicates
18816
1881716.7.1 Machine-Independent Predicates
18818-------------------------------------
18819
18820These are the generic predicates available to all back ends.  They are
18821defined in `recog.c'.  The first category of predicates allow only
18822constant, or "immediate", operands.
18823
18824 -- Function: immediate_operand
18825     This predicate allows any sort of constant that fits in MODE.  It
18826     is an appropriate choice for instructions that take operands that
18827     must be constant.
18828
18829 -- Function: const_int_operand
18830     This predicate allows any `CONST_INT' expression that fits in
18831     MODE.  It is an appropriate choice for an immediate operand that
18832     does not allow a symbol or label.
18833
18834 -- Function: const_double_operand
18835     This predicate accepts any `CONST_DOUBLE' expression that has
18836     exactly MODE.  If MODE is `VOIDmode', it will also accept
18837     `CONST_INT'.  It is intended for immediate floating point
18838     constants.
18839
18840The second category of predicates allow only some kind of machine
18841register.
18842
18843 -- Function: register_operand
18844     This predicate allows any `REG' or `SUBREG' expression that is
18845     valid for MODE.  It is often suitable for arithmetic instruction
18846     operands on a RISC machine.
18847
18848 -- Function: pmode_register_operand
18849     This is a slight variant on `register_operand' which works around
18850     a limitation in the machine-description reader.
18851
18852          (match_operand N "pmode_register_operand" CONSTRAINT)
18853
18854     means exactly what
18855
18856          (match_operand:P N "register_operand" CONSTRAINT)
18857
18858     would mean, if the machine-description reader accepted `:P' mode
18859     suffixes.  Unfortunately, it cannot, because `Pmode' is an alias
18860     for some other mode, and might vary with machine-specific options.
18861     *Note Misc::.
18862
18863 -- Function: scratch_operand
18864     This predicate allows hard registers and `SCRATCH' expressions,
18865     but not pseudo-registers.  It is used internally by
18866     `match_scratch'; it should not be used directly.
18867
18868The third category of predicates allow only some kind of memory
18869reference.
18870
18871 -- Function: memory_operand
18872     This predicate allows any valid reference to a quantity of mode
18873     MODE in memory, as determined by the weak form of
18874     `GO_IF_LEGITIMATE_ADDRESS' (*note Addressing Modes::).
18875
18876 -- Function: address_operand
18877     This predicate is a little unusual; it allows any operand that is a
18878     valid expression for the _address_ of a quantity of mode MODE,
18879     again determined by the weak form of `GO_IF_LEGITIMATE_ADDRESS'.
18880     To first order, if `(mem:MODE (EXP))' is acceptable to
18881     `memory_operand', then EXP is acceptable to `address_operand'.
18882     Note that EXP does not necessarily have the mode MODE.
18883
18884 -- Function: indirect_operand
18885     This is a stricter form of `memory_operand' which allows only
18886     memory references with a `general_operand' as the address
18887     expression.  New uses of this predicate are discouraged, because
18888     `general_operand' is very permissive, so it's hard to tell what an
18889     `indirect_operand' does or does not allow.  If a target has
18890     different requirements for memory operands for different
18891     instructions, it is better to define target-specific predicates
18892     which enforce the hardware's requirements explicitly.
18893
18894 -- Function: push_operand
18895     This predicate allows a memory reference suitable for pushing a
18896     value onto the stack.  This will be a `MEM' which refers to
18897     `stack_pointer_rtx', with a side-effect in its address expression
18898     (*note Incdec::); which one is determined by the `STACK_PUSH_CODE'
18899     macro (*note Frame Layout::).
18900
18901 -- Function: pop_operand
18902     This predicate allows a memory reference suitable for popping a
18903     value off the stack.  Again, this will be a `MEM' referring to
18904     `stack_pointer_rtx', with a side-effect in its address expression.
18905     However, this time `STACK_POP_CODE' is expected.
18906
18907The fourth category of predicates allow some combination of the above
18908operands.
18909
18910 -- Function: nonmemory_operand
18911     This predicate allows any immediate or register operand valid for
18912     MODE.
18913
18914 -- Function: nonimmediate_operand
18915     This predicate allows any register or memory operand valid for
18916     MODE.
18917
18918 -- Function: general_operand
18919     This predicate allows any immediate, register, or memory operand
18920     valid for MODE.
18921
18922Finally, there are two generic operator predicates.
18923
18924 -- Function: comparison_operator
18925     This predicate matches any expression which performs an arithmetic
18926     comparison in MODE; that is, `COMPARISON_P' is true for the
18927     expression code.
18928
18929 -- Function: ordered_comparison_operator
18930     This predicate matches any expression which performs an arithmetic
18931     comparison in MODE and whose expression code is valid for integer
18932     modes; that is, the expression code will be one of `eq', `ne',
18933     `lt', `ltu', `le', `leu', `gt', `gtu', `ge', `geu'.
18934
18935
18936File: gccint.info,  Node: Defining Predicates,  Prev: Machine-Independent Predicates,  Up: Predicates
18937
1893816.7.2 Defining Machine-Specific Predicates
18939-------------------------------------------
18940
18941Many machines have requirements for their operands that cannot be
18942expressed precisely using the generic predicates.  You can define
18943additional predicates using `define_predicate' and
18944`define_special_predicate' expressions.  These expressions have three
18945operands:
18946
18947   * The name of the predicate, as it will be referred to in
18948     `match_operand' or `match_operator' expressions.
18949
18950   * An RTL expression which evaluates to true if the predicate allows
18951     the operand OP, false if it does not.  This expression can only use
18952     the following RTL codes:
18953
18954    `MATCH_OPERAND'
18955          When written inside a predicate expression, a `MATCH_OPERAND'
18956          expression evaluates to true if the predicate it names would
18957          allow OP.  The operand number and constraint are ignored.
18958          Due to limitations in `genrecog', you can only refer to
18959          generic predicates and predicates that have already been
18960          defined.
18961
18962    `MATCH_CODE'
18963          This expression evaluates to true if OP or a specified
18964          subexpression of OP has one of a given list of RTX codes.
18965
18966          The first operand of this expression is a string constant
18967          containing a comma-separated list of RTX code names (in lower
18968          case).  These are the codes for which the `MATCH_CODE' will
18969          be true.
18970
18971          The second operand is a string constant which indicates what
18972          subexpression of OP to examine.  If it is absent or the empty
18973          string, OP itself is examined.  Otherwise, the string constant
18974          must be a sequence of digits and/or lowercase letters.  Each
18975          character indicates a subexpression to extract from the
18976          current expression; for the first character this is OP, for
18977          the second and subsequent characters it is the result of the
18978          previous character.  A digit N extracts `XEXP (E, N)'; a
18979          letter L extracts `XVECEXP (E, 0, N)' where N is the
18980          alphabetic ordinal of L (0 for `a', 1 for 'b', and so on).
18981          The `MATCH_CODE' then examines the RTX code of the
18982          subexpression extracted by the complete string.  It is not
18983          possible to extract components of an `rtvec' that is not at
18984          position 0 within its RTX object.
18985
18986    `MATCH_TEST'
18987          This expression has one operand, a string constant containing
18988          a C expression.  The predicate's arguments, OP and MODE, are
18989          available with those names in the C expression.  The
18990          `MATCH_TEST' evaluates to true if the C expression evaluates
18991          to a nonzero value.  `MATCH_TEST' expressions must not have
18992          side effects.
18993
18994    `AND'
18995    `IOR'
18996    `NOT'
18997    `IF_THEN_ELSE'
18998          The basic `MATCH_' expressions can be combined using these
18999          logical operators, which have the semantics of the C operators
19000          `&&', `||', `!', and `? :' respectively.  As in Common Lisp,
19001          you may give an `AND' or `IOR' expression an arbitrary number
19002          of arguments; this has exactly the same effect as writing a
19003          chain of two-argument `AND' or `IOR' expressions.
19004
19005   * An optional block of C code, which should execute `return true' if
19006     the predicate is found to match and `return false' if it does not.
19007     It must not have any side effects.  The predicate arguments, OP
19008     and MODE, are available with those names.
19009
19010     If a code block is present in a predicate definition, then the RTL
19011     expression must evaluate to true _and_ the code block must execute
19012     `return true' for the predicate to allow the operand.  The RTL
19013     expression is evaluated first; do not re-check anything in the
19014     code block that was checked in the RTL expression.
19015
19016 The program `genrecog' scans `define_predicate' and
19017`define_special_predicate' expressions to determine which RTX codes are
19018possibly allowed.  You should always make this explicit in the RTL
19019predicate expression, using `MATCH_OPERAND' and `MATCH_CODE'.
19020
19021 Here is an example of a simple predicate definition, from the IA64
19022machine description:
19023
19024     ;; True if OP is a `SYMBOL_REF' which refers to the sdata section.
19025     (define_predicate "small_addr_symbolic_operand"
19026       (and (match_code "symbol_ref")
19027            (match_test "SYMBOL_REF_SMALL_ADDR_P (op)")))
19028
19029And here is another, showing the use of the C block.
19030
19031     ;; True if OP is a register operand that is (or could be) a GR reg.
19032     (define_predicate "gr_register_operand"
19033       (match_operand 0 "register_operand")
19034     {
19035       unsigned int regno;
19036       if (GET_CODE (op) == SUBREG)
19037         op = SUBREG_REG (op);
19038
19039       regno = REGNO (op);
19040       return (regno >= FIRST_PSEUDO_REGISTER || GENERAL_REGNO_P (regno));
19041     })
19042
19043 Predicates written with `define_predicate' automatically include a
19044test that MODE is `VOIDmode', or OP has the same mode as MODE, or OP is
19045a `CONST_INT' or `CONST_DOUBLE'.  They do _not_ check specifically for
19046integer `CONST_DOUBLE', nor do they test that the value of either kind
19047of constant fits in the requested mode.  This is because
19048target-specific predicates that take constants usually have to do more
19049stringent value checks anyway.  If you need the exact same treatment of
19050`CONST_INT' or `CONST_DOUBLE' that the generic predicates provide, use
19051a `MATCH_OPERAND' subexpression to call `const_int_operand',
19052`const_double_operand', or `immediate_operand'.
19053
19054 Predicates written with `define_special_predicate' do not get any
19055automatic mode checks, and are treated as having special mode handling
19056by `genrecog'.
19057
19058 The program `genpreds' is responsible for generating code to test
19059predicates.  It also writes a header file containing function
19060declarations for all machine-specific predicates.  It is not necessary
19061to declare these predicates in `CPU-protos.h'.
19062
19063
19064File: gccint.info,  Node: Constraints,  Next: Standard Names,  Prev: Predicates,  Up: Machine Desc
19065
1906616.8 Operand Constraints
19067========================
19068
19069Each `match_operand' in an instruction pattern can specify constraints
19070for the operands allowed.  The constraints allow you to fine-tune
19071matching within the set of operands allowed by the predicate.
19072
19073 Constraints can say whether an operand may be in a register, and which
19074kinds of register; whether the operand can be a memory reference, and
19075which kinds of address; whether the operand may be an immediate
19076constant, and which possible values it may have.  Constraints can also
19077require two operands to match.  Side-effects aren't allowed in operands
19078of inline `asm', unless `<' or `>' constraints are used, because there
19079is no guarantee that the side-effects will happen exactly once in an
19080instruction that can update the addressing register.
19081
19082* Menu:
19083
19084* Simple Constraints::  Basic use of constraints.
19085* Multi-Alternative::   When an insn has two alternative constraint-patterns.
19086* Class Preferences::   Constraints guide which hard register to put things in.
19087* Modifiers::           More precise control over effects of constraints.
19088* Machine Constraints:: Existing constraints for some particular machines.
19089* Disable Insn Alternatives:: Disable insn alternatives using the `enabled' attribute.
19090* Define Constraints::  How to define machine-specific constraints.
19091* C Constraint Interface:: How to test constraints from C code.
19092
19093
19094File: gccint.info,  Node: Simple Constraints,  Next: Multi-Alternative,  Up: Constraints
19095
1909616.8.1 Simple Constraints
19097-------------------------
19098
19099The simplest kind of constraint is a string full of letters, each of
19100which describes one kind of operand that is permitted.  Here are the
19101letters that are allowed:
19102
19103whitespace
19104     Whitespace characters are ignored and can be inserted at any
19105     position except the first.  This enables each alternative for
19106     different operands to be visually aligned in the machine
19107     description even if they have different number of constraints and
19108     modifiers.
19109
19110`m'
19111     A memory operand is allowed, with any kind of address that the
19112     machine supports in general.  Note that the letter used for the
19113     general memory constraint can be re-defined by a back end using
19114     the `TARGET_MEM_CONSTRAINT' macro.
19115
19116`o'
19117     A memory operand is allowed, but only if the address is
19118     "offsettable".  This means that adding a small integer (actually,
19119     the width in bytes of the operand, as determined by its machine
19120     mode) may be added to the address and the result is also a valid
19121     memory address.
19122
19123     For example, an address which is constant is offsettable; so is an
19124     address that is the sum of a register and a constant (as long as a
19125     slightly larger constant is also within the range of
19126     address-offsets supported by the machine); but an autoincrement or
19127     autodecrement address is not offsettable.  More complicated
19128     indirect/indexed addresses may or may not be offsettable depending
19129     on the other addressing modes that the machine supports.
19130
19131     Note that in an output operand which can be matched by another
19132     operand, the constraint letter `o' is valid only when accompanied
19133     by both `<' (if the target machine has predecrement addressing)
19134     and `>' (if the target machine has preincrement addressing).
19135
19136`V'
19137     A memory operand that is not offsettable.  In other words,
19138     anything that would fit the `m' constraint but not the `o'
19139     constraint.
19140
19141`<'
19142     A memory operand with autodecrement addressing (either
19143     predecrement or postdecrement) is allowed.  In inline `asm' this
19144     constraint is only allowed if the operand is used exactly once in
19145     an instruction that can handle the side-effects.  Not using an
19146     operand with `<' in constraint string in the inline `asm' pattern
19147     at all or using it in multiple instructions isn't valid, because
19148     the side-effects wouldn't be performed or would be performed more
19149     than once.  Furthermore, on some targets the operand with `<' in
19150     constraint string must be accompanied by special instruction
19151     suffixes like `%U0' instruction suffix on PowerPC or `%P0' on
19152     IA-64.
19153
19154`>'
19155     A memory operand with autoincrement addressing (either
19156     preincrement or postincrement) is allowed.  In inline `asm' the
19157     same restrictions as for `<' apply.
19158
19159`r'
19160     A register operand is allowed provided that it is in a general
19161     register.
19162
19163`i'
19164     An immediate integer operand (one with constant value) is allowed.
19165     This includes symbolic constants whose values will be known only at
19166     assembly time or later.
19167
19168`n'
19169     An immediate integer operand with a known numeric value is allowed.
19170     Many systems cannot support assembly-time constants for operands
19171     less than a word wide.  Constraints for these operands should use
19172     `n' rather than `i'.
19173
19174`I', `J', `K', ... `P'
19175     Other letters in the range `I' through `P' may be defined in a
19176     machine-dependent fashion to permit immediate integer operands with
19177     explicit integer values in specified ranges.  For example, on the
19178     68000, `I' is defined to stand for the range of values 1 to 8.
19179     This is the range permitted as a shift count in the shift
19180     instructions.
19181
19182`E'
19183     An immediate floating operand (expression code `const_double') is
19184     allowed, but only if the target floating point format is the same
19185     as that of the host machine (on which the compiler is running).
19186
19187`F'
19188     An immediate floating operand (expression code `const_double' or
19189     `const_vector') is allowed.
19190
19191`G', `H'
19192     `G' and `H' may be defined in a machine-dependent fashion to
19193     permit immediate floating operands in particular ranges of values.
19194
19195`s'
19196     An immediate integer operand whose value is not an explicit
19197     integer is allowed.
19198
19199     This might appear strange; if an insn allows a constant operand
19200     with a value not known at compile time, it certainly must allow
19201     any known value.  So why use `s' instead of `i'?  Sometimes it
19202     allows better code to be generated.
19203
19204     For example, on the 68000 in a fullword instruction it is possible
19205     to use an immediate operand; but if the immediate value is between
19206     -128 and 127, better code results from loading the value into a
19207     register and using the register.  This is because the load into
19208     the register can be done with a `moveq' instruction.  We arrange
19209     for this to happen by defining the letter `K' to mean "any integer
19210     outside the range -128 to 127", and then specifying `Ks' in the
19211     operand constraints.
19212
19213`g'
19214     Any register, memory or immediate integer operand is allowed,
19215     except for registers that are not general registers.
19216
19217`X'
19218     Any operand whatsoever is allowed, even if it does not satisfy
19219     `general_operand'.  This is normally used in the constraint of a
19220     `match_scratch' when certain alternatives will not actually
19221     require a scratch register.
19222
19223`0', `1', `2', ... `9'
19224     An operand that matches the specified operand number is allowed.
19225     If a digit is used together with letters within the same
19226     alternative, the digit should come last.
19227
19228     This number is allowed to be more than a single digit.  If multiple
19229     digits are encountered consecutively, they are interpreted as a
19230     single decimal integer.  There is scant chance for ambiguity,
19231     since to-date it has never been desirable that `10' be interpreted
19232     as matching either operand 1 _or_ operand 0.  Should this be
19233     desired, one can use multiple alternatives instead.
19234
19235     This is called a "matching constraint" and what it really means is
19236     that the assembler has only a single operand that fills two roles
19237     considered separate in the RTL insn.  For example, an add insn has
19238     two input operands and one output operand in the RTL, but on most
19239     CISC machines an add instruction really has only two operands, one
19240     of them an input-output operand:
19241
19242          addl #35,r12
19243
19244     Matching constraints are used in these circumstances.  More
19245     precisely, the two operands that match must include one input-only
19246     operand and one output-only operand.  Moreover, the digit must be a
19247     smaller number than the number of the operand that uses it in the
19248     constraint.
19249
19250     For operands to match in a particular case usually means that they
19251     are identical-looking RTL expressions.  But in a few special cases
19252     specific kinds of dissimilarity are allowed.  For example, `*x' as
19253     an input operand will match `*x++' as an output operand.  For
19254     proper results in such cases, the output template should always
19255     use the output-operand's number when printing the operand.
19256
19257`p'
19258     An operand that is a valid memory address is allowed.  This is for
19259     "load address" and "push address" instructions.
19260
19261     `p' in the constraint must be accompanied by `address_operand' as
19262     the predicate in the `match_operand'.  This predicate interprets
19263     the mode specified in the `match_operand' as the mode of the memory
19264     reference for which the address would be valid.
19265
19266OTHER-LETTERS
19267     Other letters can be defined in machine-dependent fashion to stand
19268     for particular classes of registers or other arbitrary operand
19269     types.  `d', `a' and `f' are defined on the 68000/68020 to stand
19270     for data, address and floating point registers.
19271
19272 In order to have valid assembler code, each operand must satisfy its
19273constraint.  But a failure to do so does not prevent the pattern from
19274applying to an insn.  Instead, it directs the compiler to modify the
19275code so that the constraint will be satisfied.  Usually this is done by
19276copying an operand into a register.
19277
19278 Contrast, therefore, the two instruction patterns that follow:
19279
19280     (define_insn ""
19281       [(set (match_operand:SI 0 "general_operand" "=r")
19282             (plus:SI (match_dup 0)
19283                      (match_operand:SI 1 "general_operand" "r")))]
19284       ""
19285       "...")
19286
19287which has two operands, one of which must appear in two places, and
19288
19289     (define_insn ""
19290       [(set (match_operand:SI 0 "general_operand" "=r")
19291             (plus:SI (match_operand:SI 1 "general_operand" "0")
19292                      (match_operand:SI 2 "general_operand" "r")))]
19293       ""
19294       "...")
19295
19296which has three operands, two of which are required by a constraint to
19297be identical.  If we are considering an insn of the form
19298
19299     (insn N PREV NEXT
19300       (set (reg:SI 3)
19301            (plus:SI (reg:SI 6) (reg:SI 109)))
19302       ...)
19303
19304the first pattern would not apply at all, because this insn does not
19305contain two identical subexpressions in the right place.  The pattern
19306would say, "That does not look like an add instruction; try other
19307patterns".  The second pattern would say, "Yes, that's an add
19308instruction, but there is something wrong with it".  It would direct
19309the reload pass of the compiler to generate additional insns to make
19310the constraint true.  The results might look like this:
19311
19312     (insn N2 PREV N
19313       (set (reg:SI 3) (reg:SI 6))
19314       ...)
19315
19316     (insn N N2 NEXT
19317       (set (reg:SI 3)
19318            (plus:SI (reg:SI 3) (reg:SI 109)))
19319       ...)
19320
19321 It is up to you to make sure that each operand, in each pattern, has
19322constraints that can handle any RTL expression that could be present for
19323that operand.  (When multiple alternatives are in use, each pattern
19324must, for each possible combination of operand expressions, have at
19325least one alternative which can handle that combination of operands.)
19326The constraints don't need to _allow_ any possible operand--when this is
19327the case, they do not constrain--but they must at least point the way to
19328reloading any possible operand so that it will fit.
19329
19330   * If the constraint accepts whatever operands the predicate permits,
19331     there is no problem: reloading is never necessary for this operand.
19332
19333     For example, an operand whose constraints permit everything except
19334     registers is safe provided its predicate rejects registers.
19335
19336     An operand whose predicate accepts only constant values is safe
19337     provided its constraints include the letter `i'.  If any possible
19338     constant value is accepted, then nothing less than `i' will do; if
19339     the predicate is more selective, then the constraints may also be
19340     more selective.
19341
19342   * Any operand expression can be reloaded by copying it into a
19343     register.  So if an operand's constraints allow some kind of
19344     register, it is certain to be safe.  It need not permit all
19345     classes of registers; the compiler knows how to copy a register
19346     into another register of the proper class in order to make an
19347     instruction valid.
19348
19349   * A nonoffsettable memory reference can be reloaded by copying the
19350     address into a register.  So if the constraint uses the letter
19351     `o', all memory references are taken care of.
19352
19353   * A constant operand can be reloaded by allocating space in memory to
19354     hold it as preinitialized data.  Then the memory reference can be
19355     used in place of the constant.  So if the constraint uses the
19356     letters `o' or `m', constant operands are not a problem.
19357
19358   * If the constraint permits a constant and a pseudo register used in
19359     an insn was not allocated to a hard register and is equivalent to
19360     a constant, the register will be replaced with the constant.  If
19361     the predicate does not permit a constant and the insn is
19362     re-recognized for some reason, the compiler will crash.  Thus the
19363     predicate must always recognize any objects allowed by the
19364     constraint.
19365
19366 If the operand's predicate can recognize registers, but the constraint
19367does not permit them, it can make the compiler crash.  When this
19368operand happens to be a register, the reload pass will be stymied,
19369because it does not know how to copy a register temporarily into memory.
19370
19371 If the predicate accepts a unary operator, the constraint applies to
19372the operand.  For example, the MIPS processor at ISA level 3 supports an
19373instruction which adds two registers in `SImode' to produce a `DImode'
19374result, but only if the registers are correctly sign extended.  This
19375predicate for the input operands accepts a `sign_extend' of an `SImode'
19376register.  Write the constraint to indicate the type of register that
19377is required for the operand of the `sign_extend'.
19378
19379
19380File: gccint.info,  Node: Multi-Alternative,  Next: Class Preferences,  Prev: Simple Constraints,  Up: Constraints
19381
1938216.8.2 Multiple Alternative Constraints
19383---------------------------------------
19384
19385Sometimes a single instruction has multiple alternative sets of possible
19386operands.  For example, on the 68000, a logical-or instruction can
19387combine register or an immediate value into memory, or it can combine
19388any kind of operand into a register; but it cannot combine one memory
19389location into another.
19390
19391 These constraints are represented as multiple alternatives.  An
19392alternative can be described by a series of letters for each operand.
19393The overall constraint for an operand is made from the letters for this
19394operand from the first alternative, a comma, the letters for this
19395operand from the second alternative, a comma, and so on until the last
19396alternative.  Here is how it is done for fullword logical-or on the
1939768000:
19398
19399     (define_insn "iorsi3"
19400       [(set (match_operand:SI 0 "general_operand" "=m,d")
19401             (ior:SI (match_operand:SI 1 "general_operand" "%0,0")
19402                     (match_operand:SI 2 "general_operand" "dKs,dmKs")))]
19403       ...)
19404
19405 The first alternative has `m' (memory) for operand 0, `0' for operand
194061 (meaning it must match operand 0), and `dKs' for operand 2.  The
19407second alternative has `d' (data register) for operand 0, `0' for
19408operand 1, and `dmKs' for operand 2.  The `=' and `%' in the
19409constraints apply to all the alternatives; their meaning is explained
19410in the next section (*note Class Preferences::).
19411
19412 If all the operands fit any one alternative, the instruction is valid.
19413Otherwise, for each alternative, the compiler counts how many
19414instructions must be added to copy the operands so that that
19415alternative applies.  The alternative requiring the least copying is
19416chosen.  If two alternatives need the same amount of copying, the one
19417that comes first is chosen.  These choices can be altered with the `?'
19418and `!' characters:
19419
19420`?'
19421     Disparage slightly the alternative that the `?' appears in, as a
19422     choice when no alternative applies exactly.  The compiler regards
19423     this alternative as one unit more costly for each `?' that appears
19424     in it.
19425
19426`!'
19427     Disparage severely the alternative that the `!' appears in.  This
19428     alternative can still be used if it fits without reloading, but if
19429     reloading is needed, some other alternative will be used.
19430
19431 When an insn pattern has multiple alternatives in its constraints,
19432often the appearance of the assembler code is determined mostly by which
19433alternative was matched.  When this is so, the C code for writing the
19434assembler code can use the variable `which_alternative', which is the
19435ordinal number of the alternative that was actually satisfied (0 for
19436the first, 1 for the second alternative, etc.).  *Note Output
19437Statement::.
19438
19439
19440File: gccint.info,  Node: Class Preferences,  Next: Modifiers,  Prev: Multi-Alternative,  Up: Constraints
19441
1944216.8.3 Register Class Preferences
19443---------------------------------
19444
19445The operand constraints have another function: they enable the compiler
19446to decide which kind of hardware register a pseudo register is best
19447allocated to.  The compiler examines the constraints that apply to the
19448insns that use the pseudo register, looking for the machine-dependent
19449letters such as `d' and `a' that specify classes of registers.  The
19450pseudo register is put in whichever class gets the most "votes".  The
19451constraint letters `g' and `r' also vote: they vote in favor of a
19452general register.  The machine description says which registers are
19453considered general.
19454
19455 Of course, on some machines all registers are equivalent, and no
19456register classes are defined.  Then none of this complexity is relevant.
19457
19458
19459File: gccint.info,  Node: Modifiers,  Next: Machine Constraints,  Prev: Class Preferences,  Up: Constraints
19460
1946116.8.4 Constraint Modifier Characters
19462-------------------------------------
19463
19464Here are constraint modifier characters.
19465
19466`='
19467     Means that this operand is write-only for this instruction: the
19468     previous value is discarded and replaced by output data.
19469
19470`+'
19471     Means that this operand is both read and written by the
19472     instruction.
19473
19474     When the compiler fixes up the operands to satisfy the constraints,
19475     it needs to know which operands are inputs to the instruction and
19476     which are outputs from it.  `=' identifies an output; `+'
19477     identifies an operand that is both input and output; all other
19478     operands are assumed to be input only.
19479
19480     If you specify `=' or `+' in a constraint, you put it in the first
19481     character of the constraint string.
19482
19483`&'
19484     Means (in a particular alternative) that this operand is an
19485     "earlyclobber" operand, which is modified before the instruction is
19486     finished using the input operands.  Therefore, this operand may
19487     not lie in a register that is used as an input operand or as part
19488     of any memory address.
19489
19490     `&' applies only to the alternative in which it is written.  In
19491     constraints with multiple alternatives, sometimes one alternative
19492     requires `&' while others do not.  See, for example, the `movdf'
19493     insn of the 68000.
19494
19495     An input operand can be tied to an earlyclobber operand if its only
19496     use as an input occurs before the early result is written.  Adding
19497     alternatives of this form often allows GCC to produce better code
19498     when only some of the inputs can be affected by the earlyclobber.
19499     See, for example, the `mulsi3' insn of the ARM.
19500
19501     `&' does not obviate the need to write `='.
19502
19503`%'
19504     Declares the instruction to be commutative for this operand and the
19505     following operand.  This means that the compiler may interchange
19506     the two operands if that is the cheapest way to make all operands
19507     fit the constraints.  This is often used in patterns for addition
19508     instructions that really have only two operands: the result must
19509     go in one of the arguments.  Here for example, is how the 68000
19510     halfword-add instruction is defined:
19511
19512          (define_insn "addhi3"
19513            [(set (match_operand:HI 0 "general_operand" "=m,r")
19514               (plus:HI (match_operand:HI 1 "general_operand" "%0,0")
19515                        (match_operand:HI 2 "general_operand" "di,g")))]
19516            ...)
19517     GCC can only handle one commutative pair in an asm; if you use
19518     more, the compiler may fail.  Note that you need not use the
19519     modifier if the two alternatives are strictly identical; this
19520     would only waste time in the reload pass.  The modifier is not
19521     operational after register allocation, so the result of
19522     `define_peephole2' and `define_split's performed after reload
19523     cannot rely on `%' to make the intended insn match.
19524
19525`#'
19526     Says that all following characters, up to the next comma, are to be
19527     ignored as a constraint.  They are significant only for choosing
19528     register preferences.
19529
19530`*'
19531     Says that the following character should be ignored when choosing
19532     register preferences.  `*' has no effect on the meaning of the
19533     constraint as a constraint, and no effect on reloading.  For LRA
19534     `*' additionally disparages slightly the alternative if the
19535     following character matches the operand.
19536
19537     Here is an example: the 68000 has an instruction to sign-extend a
19538     halfword in a data register, and can also sign-extend a value by
19539     copying it into an address register.  While either kind of
19540     register is acceptable, the constraints on an address-register
19541     destination are less strict, so it is best if register allocation
19542     makes an address register its goal.  Therefore, `*' is used so
19543     that the `d' constraint letter (for data register) is ignored when
19544     computing register preferences.
19545
19546          (define_insn "extendhisi2"
19547            [(set (match_operand:SI 0 "general_operand" "=*d,a")
19548                  (sign_extend:SI
19549                   (match_operand:HI 1 "general_operand" "0,g")))]
19550            ...)
19551
19552
19553File: gccint.info,  Node: Machine Constraints,  Next: Disable Insn Alternatives,  Prev: Modifiers,  Up: Constraints
19554
1955516.8.5 Constraints for Particular Machines
19556------------------------------------------
19557
19558Whenever possible, you should use the general-purpose constraint letters
19559in `asm' arguments, since they will convey meaning more readily to
19560people reading your code.  Failing that, use the constraint letters
19561that usually have very similar meanings across architectures.  The most
19562commonly used constraints are `m' and `r' (for memory and
19563general-purpose registers respectively; *note Simple Constraints::), and
19564`I', usually the letter indicating the most common immediate-constant
19565format.
19566
19567 Each architecture defines additional constraints.  These constraints
19568are used by the compiler itself for instruction generation, as well as
19569for `asm' statements; therefore, some of the constraints are not
19570particularly useful for `asm'.  Here is a summary of some of the
19571machine-dependent constraints available on some particular machines; it
19572includes both constraints that are useful for `asm' and constraints
19573that aren't.  The compiler source file mentioned in the table heading
19574for each architecture is the definitive reference for the meanings of
19575that architecture's constraints.
19576
19577_AArch64 family--`config/aarch64/constraints.md'_
19578
19579    `k'
19580          The stack pointer register (`SP')
19581
19582    `w'
19583          Floating point or SIMD vector register
19584
19585    `I'
19586          Integer constant that is valid as an immediate operand in an
19587          `ADD' instruction
19588
19589    `J'
19590          Integer constant that is valid as an immediate operand in a
19591          `SUB' instruction (once negated)
19592
19593    `K'
19594          Integer constant that can be used with a 32-bit logical
19595          instruction
19596
19597    `L'
19598          Integer constant that can be used with a 64-bit logical
19599          instruction
19600
19601    `M'
19602          Integer constant that is valid as an immediate operand in a
19603          32-bit `MOV' pseudo instruction. The `MOV' may be assembled
19604          to one of several different machine instructions depending on
19605          the value
19606
19607    `N'
19608          Integer constant that is valid as an immediate operand in a
19609          64-bit `MOV' pseudo instruction
19610
19611    `S'
19612          An absolute symbolic address or a label reference
19613
19614    `Y'
19615          Floating point constant zero
19616
19617    `Z'
19618          Integer constant zero
19619
19620    `Usa'
19621          An absolute symbolic address
19622
19623    `Ush'
19624          The high part (bits 12 and upwards) of the pc-relative
19625          address of a symbol within 4GB of the instruction
19626
19627    `Q'
19628          A memory address which uses a single base register with no
19629          offset
19630
19631    `Ump'
19632          A memory address suitable for a load/store pair instruction
19633          in SI, DI, SF and DF modes
19634
19635
19636_ARM family--`config/arm/constraints.md'_
19637
19638    `w'
19639          VFP floating-point register
19640
19641    `G'
19642          The floating-point constant 0.0
19643
19644    `I'
19645          Integer that is valid as an immediate operand in a data
19646          processing instruction.  That is, an integer in the range 0
19647          to 255 rotated by a multiple of 2
19648
19649    `J'
19650          Integer in the range -4095 to 4095
19651
19652    `K'
19653          Integer that satisfies constraint `I' when inverted (ones
19654          complement)
19655
19656    `L'
19657          Integer that satisfies constraint `I' when negated (twos
19658          complement)
19659
19660    `M'
19661          Integer in the range 0 to 32
19662
19663    `Q'
19664          A memory reference where the exact address is in a single
19665          register (``m'' is preferable for `asm' statements)
19666
19667    `R'
19668          An item in the constant pool
19669
19670    `S'
19671          A symbol in the text segment of the current file
19672
19673    `Uv'
19674          A memory reference suitable for VFP load/store insns
19675          (reg+constant offset)
19676
19677    `Uy'
19678          A memory reference suitable for iWMMXt load/store
19679          instructions.
19680
19681    `Uq'
19682          A memory reference suitable for the ARMv4 ldrsb instruction.
19683
19684_AVR family--`config/avr/constraints.md'_
19685
19686    `l'
19687          Registers from r0 to r15
19688
19689    `a'
19690          Registers from r16 to r23
19691
19692    `d'
19693          Registers from r16 to r31
19694
19695    `w'
19696          Registers from r24 to r31.  These registers can be used in
19697          `adiw' command
19698
19699    `e'
19700          Pointer register (r26-r31)
19701
19702    `b'
19703          Base pointer register (r28-r31)
19704
19705    `q'
19706          Stack pointer register (SPH:SPL)
19707
19708    `t'
19709          Temporary register r0
19710
19711    `x'
19712          Register pair X (r27:r26)
19713
19714    `y'
19715          Register pair Y (r29:r28)
19716
19717    `z'
19718          Register pair Z (r31:r30)
19719
19720    `I'
19721          Constant greater than -1, less than 64
19722
19723    `J'
19724          Constant greater than -64, less than 1
19725
19726    `K'
19727          Constant integer 2
19728
19729    `L'
19730          Constant integer 0
19731
19732    `M'
19733          Constant that fits in 8 bits
19734
19735    `N'
19736          Constant integer -1
19737
19738    `O'
19739          Constant integer 8, 16, or 24
19740
19741    `P'
19742          Constant integer 1
19743
19744    `G'
19745          A floating point constant 0.0
19746
19747    `Q'
19748          A memory address based on Y or Z pointer with displacement.
19749
19750_Epiphany--`config/epiphany/constraints.md'_
19751
19752    `U16'
19753          An unsigned 16-bit constant.
19754
19755    `K'
19756          An unsigned 5-bit constant.
19757
19758    `L'
19759          A signed 11-bit constant.
19760
19761    `Cm1'
19762          A signed 11-bit constant added to -1.  Can only match when
19763          the `-m1reg-REG' option is active.
19764
19765    `Cl1'
19766          Left-shift of -1, i.e., a bit mask with a block of leading
19767          ones, the rest being a block of trailing zeroes.  Can only
19768          match when the `-m1reg-REG' option is active.
19769
19770    `Cr1'
19771          Right-shift of -1, i.e., a bit mask with a trailing block of
19772          ones, the rest being zeroes.  Or to put it another way, one
19773          less than a power of two.  Can only match when the
19774          `-m1reg-REG' option is active.
19775
19776    `Cal'
19777          Constant for arithmetic/logical operations.  This is like
19778          `i', except that for position independent code, no symbols /
19779          expressions needing relocations are allowed.
19780
19781    `Csy'
19782          Symbolic constant for call/jump instruction.
19783
19784    `Rcs'
19785          The register class usable in short insns.  This is a register
19786          class constraint, and can thus drive register allocation.
19787          This constraint won't match unless `-mprefer-short-insn-regs'
19788          is in effect.
19789
19790    `Rsc'
19791          The the register class of registers that can be used to hold a
19792          sibcall call address.  I.e., a caller-saved register.
19793
19794    `Rct'
19795          Core control register class.
19796
19797    `Rgs'
19798          The register group usable in short insns.  This constraint
19799          does not use a register class, so that it only passively
19800          matches suitable registers, and doesn't drive register
19801          allocation.
19802
19803    `Car'
19804          Constant suitable for the addsi3_r pattern.  This is a valid
19805          offset For byte, halfword, or word addressing.
19806
19807    `Rra'
19808          Matches the return address if it can be replaced with the
19809          link register.
19810
19811    `Rcc'
19812          Matches the integer condition code register.
19813
19814    `Sra'
19815          Matches the return address if it is in a stack slot.
19816
19817    `Cfm'
19818          Matches control register values to switch fp mode, which are
19819          encapsulated in `UNSPEC_FP_MODE'.
19820
19821_CR16 Architecture--`config/cr16/cr16.h'_
19822
19823    `b'
19824          Registers from r0 to r14 (registers without stack pointer)
19825
19826    `t'
19827          Register from r0 to r11 (all 16-bit registers)
19828
19829    `p'
19830          Register from r12 to r15 (all 32-bit registers)
19831
19832    `I'
19833          Signed constant that fits in 4 bits
19834
19835    `J'
19836          Signed constant that fits in 5 bits
19837
19838    `K'
19839          Signed constant that fits in 6 bits
19840
19841    `L'
19842          Unsigned constant that fits in 4 bits
19843
19844    `M'
19845          Signed constant that fits in 32 bits
19846
19847    `N'
19848          Check for 64 bits wide constants for add/sub instructions
19849
19850    `G'
19851          Floating point constant that is legal for store immediate
19852
19853_Hewlett-Packard PA-RISC--`config/pa/pa.h'_
19854
19855    `a'
19856          General register 1
19857
19858    `f'
19859          Floating point register
19860
19861    `q'
19862          Shift amount register
19863
19864    `x'
19865          Floating point register (deprecated)
19866
19867    `y'
19868          Upper floating point register (32-bit), floating point
19869          register (64-bit)
19870
19871    `Z'
19872          Any register
19873
19874    `I'
19875          Signed 11-bit integer constant
19876
19877    `J'
19878          Signed 14-bit integer constant
19879
19880    `K'
19881          Integer constant that can be deposited with a `zdepi'
19882          instruction
19883
19884    `L'
19885          Signed 5-bit integer constant
19886
19887    `M'
19888          Integer constant 0
19889
19890    `N'
19891          Integer constant that can be loaded with a `ldil' instruction
19892
19893    `O'
19894          Integer constant whose value plus one is a power of 2
19895
19896    `P'
19897          Integer constant that can be used for `and' operations in
19898          `depi' and `extru' instructions
19899
19900    `S'
19901          Integer constant 31
19902
19903    `U'
19904          Integer constant 63
19905
19906    `G'
19907          Floating-point constant 0.0
19908
19909    `A'
19910          A `lo_sum' data-linkage-table memory operand
19911
19912    `Q'
19913          A memory operand that can be used as the destination operand
19914          of an integer store instruction
19915
19916    `R'
19917          A scaled or unscaled indexed memory operand
19918
19919    `T'
19920          A memory operand for floating-point loads and stores
19921
19922    `W'
19923          A register indirect memory operand
19924
19925_picoChip family--`picochip.h'_
19926
19927    `k'
19928          Stack register.
19929
19930    `f'
19931          Pointer register.  A register which can be used to access
19932          memory without supplying an offset.  Any other register can
19933          be used to access memory, but will need a constant offset.
19934          In the case of the offset being zero, it is more efficient to
19935          use a pointer register, since this reduces code size.
19936
19937    `t'
19938          A twin register.  A register which may be paired with an
19939          adjacent register to create a 32-bit register.
19940
19941    `a'
19942          Any absolute memory address (e.g., symbolic constant, symbolic
19943          constant + offset).
19944
19945    `I'
19946          4-bit signed integer.
19947
19948    `J'
19949          4-bit unsigned integer.
19950
19951    `K'
19952          8-bit signed integer.
19953
19954    `M'
19955          Any constant whose absolute value is no greater than 4-bits.
19956
19957    `N'
19958          10-bit signed integer
19959
19960    `O'
19961          16-bit signed integer.
19962
19963
19964_PowerPC and IBM RS6000--`config/rs6000/constraints.md'_
19965
19966    `b'
19967          Address base register
19968
19969    `d'
19970          Floating point register (containing 64-bit value)
19971
19972    `f'
19973          Floating point register (containing 32-bit value)
19974
19975    `v'
19976          Altivec vector register
19977
19978    `wa'
19979          Any VSX register if the -mvsx option was used or NO_REGS.
19980
19981          When using any of the register constraints (`wa', `wd', `wf',
19982          `wg', `wh', `wi', `wj', `wk', `wl', `wm', `ws', `wt', `wu',
19983          `wv', `ww', or `wy') that take VSX registers, you must use
19984          `%x<n>' in the template so that the correct register is used.
19985          Otherwise the register number output in the assembly file
19986          will be incorrect if an Altivec register is an operand of a
19987          VSX instruction that expects VSX register numbering.
19988
19989               asm ("xvadddp %x0,%x1,%x2" : "=wa" (v1) : "wa" (v2), "wa" (v3));
19990
19991          is correct, but:
19992
19993               asm ("xvadddp %0,%1,%2" : "=wa" (v1) : "wa" (v2), "wa" (v3));
19994
19995          is not correct.
19996
19997    `wd'
19998          VSX vector register to hold vector double data or NO_REGS.
19999
20000    `wf'
20001          VSX vector register to hold vector float data or NO_REGS.
20002
20003    `wg'
20004          If `-mmfpgpr' was used, a floating point register or NO_REGS.
20005
20006    `wh'
20007          Floating point register if direct moves are available, or
20008          NO_REGS.
20009
20010    `wi'
20011          FP or VSX register to hold 64-bit integers for VSX insns or
20012          NO_REGS.
20013
20014    `wj'
20015          FP or VSX register to hold 64-bit integers for direct moves
20016          or NO_REGS.
20017
20018    `wk'
20019          FP or VSX register to hold 64-bit doubles for direct moves or
20020          NO_REGS.
20021
20022    `wl'
20023          Floating point register if the LFIWAX instruction is enabled
20024          or NO_REGS.
20025
20026    `wm'
20027          VSX register if direct move instructions are enabled, or
20028          NO_REGS.
20029
20030    `wn'
20031          No register (NO_REGS).
20032
20033    `wr'
20034          General purpose register if 64-bit instructions are enabled
20035          or NO_REGS.
20036
20037    `ws'
20038          VSX vector register to hold scalar double values or NO_REGS.
20039
20040    `wt'
20041          VSX vector register to hold 128 bit integer or NO_REGS.
20042
20043    `wu'
20044          Altivec register to use for float/32-bit int loads/stores  or
20045          NO_REGS.
20046
20047    `wv'
20048          Altivec register to use for double loads/stores  or NO_REGS.
20049
20050    `ww'
20051          FP or VSX register to perform float operations under `-mvsx'
20052          or NO_REGS.
20053
20054    `wx'
20055          Floating point register if the STFIWX instruction is enabled
20056          or NO_REGS.
20057
20058    `wy'
20059          FP or VSX register to perform ISA 2.07 float ops or NO_REGS.
20060
20061    `wz'
20062          Floating point register if the LFIWZX instruction is enabled
20063          or NO_REGS.
20064
20065    `wQ'
20066          A memory address that will work with the `lq' and `stq'
20067          instructions.
20068
20069    `h'
20070          `MQ', `CTR', or `LINK' register
20071
20072    `q'
20073          `MQ' register
20074
20075    `c'
20076          `CTR' register
20077
20078    `l'
20079          `LINK' register
20080
20081    `x'
20082          `CR' register (condition register) number 0
20083
20084    `y'
20085          `CR' register (condition register)
20086
20087    `z'
20088          `XER[CA]' carry bit (part of the XER register)
20089
20090    `I'
20091          Signed 16-bit constant
20092
20093    `J'
20094          Unsigned 16-bit constant shifted left 16 bits (use `L'
20095          instead for `SImode' constants)
20096
20097    `K'
20098          Unsigned 16-bit constant
20099
20100    `L'
20101          Signed 16-bit constant shifted left 16 bits
20102
20103    `M'
20104          Constant larger than 31
20105
20106    `N'
20107          Exact power of 2
20108
20109    `O'
20110          Zero
20111
20112    `P'
20113          Constant whose negation is a signed 16-bit constant
20114
20115    `G'
20116          Floating point constant that can be loaded into a register
20117          with one instruction per word
20118
20119    `H'
20120          Integer/Floating point constant that can be loaded into a
20121          register using three instructions
20122
20123    `m'
20124          Memory operand.  Normally, `m' does not allow addresses that
20125          update the base register.  If `<' or `>' constraint is also
20126          used, they are allowed and therefore on PowerPC targets in
20127          that case it is only safe to use `m<>' in an `asm' statement
20128          if that `asm' statement accesses the operand exactly once.
20129          The `asm' statement must also use `%U<OPNO>' as a placeholder
20130          for the "update" flag in the corresponding load or store
20131          instruction.  For example:
20132
20133               asm ("st%U0 %1,%0" : "=m<>" (mem) : "r" (val));
20134
20135          is correct but:
20136
20137               asm ("st %1,%0" : "=m<>" (mem) : "r" (val));
20138
20139          is not.
20140
20141    `es'
20142          A "stable" memory operand; that is, one which does not
20143          include any automodification of the base register.  This used
20144          to be useful when `m' allowed automodification of the base
20145          register, but as those are now only allowed when `<' or `>'
20146          is used, `es' is basically the same as `m' without `<' and
20147          `>'.
20148
20149    `Q'
20150          Memory operand that is an offset from a register (it is
20151          usually better to use `m' or `es' in `asm' statements)
20152
20153    `Z'
20154          Memory operand that is an indexed or indirect from a register
20155          (it is usually better to use `m' or `es' in `asm' statements)
20156
20157    `R'
20158          AIX TOC entry
20159
20160    `a'
20161          Address operand that is an indexed or indirect from a
20162          register (`p' is preferable for `asm' statements)
20163
20164    `S'
20165          Constant suitable as a 64-bit mask operand
20166
20167    `T'
20168          Constant suitable as a 32-bit mask operand
20169
20170    `U'
20171          System V Release 4 small data area reference
20172
20173    `t'
20174          AND masks that can be performed by two rldic{l, r}
20175          instructions
20176
20177    `W'
20178          Vector constant that does not require memory
20179
20180    `j'
20181          Vector constant that is all zeros.
20182
20183
20184_Intel 386--`config/i386/constraints.md'_
20185
20186    `R'
20187          Legacy register--the eight integer registers available on all
20188          i386 processors (`a', `b', `c', `d', `si', `di', `bp', `sp').
20189
20190    `q'
20191          Any register accessible as `Rl'.  In 32-bit mode, `a', `b',
20192          `c', and `d'; in 64-bit mode, any integer register.
20193
20194    `Q'
20195          Any register accessible as `Rh': `a', `b', `c', and `d'.
20196
20197    `l'
20198          Any register that can be used as the index in a base+index
20199          memory access: that is, any general register except the stack
20200          pointer.
20201
20202    `a'
20203          The `a' register.
20204
20205    `b'
20206          The `b' register.
20207
20208    `c'
20209          The `c' register.
20210
20211    `d'
20212          The `d' register.
20213
20214    `S'
20215          The `si' register.
20216
20217    `D'
20218          The `di' register.
20219
20220    `A'
20221          The `a' and `d' registers.  This class is used for
20222          instructions that return double word results in the `ax:dx'
20223          register pair.  Single word values will be allocated either
20224          in `ax' or `dx'.  For example on i386 the following
20225          implements `rdtsc':
20226
20227               unsigned long long rdtsc (void)
20228               {
20229                 unsigned long long tick;
20230                 __asm__ __volatile__("rdtsc":"=A"(tick));
20231                 return tick;
20232               }
20233
20234          This is not correct on x86_64 as it would allocate tick in
20235          either `ax' or `dx'.  You have to use the following variant
20236          instead:
20237
20238               unsigned long long rdtsc (void)
20239               {
20240                 unsigned int tickl, tickh;
20241                 __asm__ __volatile__("rdtsc":"=a"(tickl),"=d"(tickh));
20242                 return ((unsigned long long)tickh << 32)|tickl;
20243               }
20244
20245    `f'
20246          Any 80387 floating-point (stack) register.
20247
20248    `t'
20249          Top of 80387 floating-point stack (`%st(0)').
20250
20251    `u'
20252          Second from top of 80387 floating-point stack (`%st(1)').
20253
20254    `y'
20255          Any MMX register.
20256
20257    `x'
20258          Any SSE register.
20259
20260    `Yz'
20261          First SSE register (`%xmm0').
20262
20263    `Y2'
20264          Any SSE register, when SSE2 is enabled.
20265
20266    `Yi'
20267          Any SSE register, when SSE2 and inter-unit moves are enabled.
20268
20269    `Ym'
20270          Any MMX register, when inter-unit moves are enabled.
20271
20272    `I'
20273          Integer constant in the range 0 ... 31, for 32-bit shifts.
20274
20275    `J'
20276          Integer constant in the range 0 ... 63, for 64-bit shifts.
20277
20278    `K'
20279          Signed 8-bit integer constant.
20280
20281    `L'
20282          `0xFF' or `0xFFFF', for andsi as a zero-extending move.
20283
20284    `M'
20285          0, 1, 2, or 3 (shifts for the `lea' instruction).
20286
20287    `N'
20288          Unsigned 8-bit integer constant (for `in' and `out'
20289          instructions).
20290
20291    `O'
20292          Integer constant in the range 0 ... 127, for 128-bit shifts.
20293
20294    `G'
20295          Standard 80387 floating point constant.
20296
20297    `C'
20298          Standard SSE floating point constant.
20299
20300    `e'
20301          32-bit signed integer constant, or a symbolic reference known
20302          to fit that range (for immediate operands in sign-extending
20303          x86-64 instructions).
20304
20305    `Z'
20306          32-bit unsigned integer constant, or a symbolic reference
20307          known to fit that range (for immediate operands in
20308          zero-extending x86-64 instructions).
20309
20310
20311_Intel IA-64--`config/ia64/ia64.h'_
20312
20313    `a'
20314          General register `r0' to `r3' for `addl' instruction
20315
20316    `b'
20317          Branch register
20318
20319    `c'
20320          Predicate register (`c' as in "conditional")
20321
20322    `d'
20323          Application register residing in M-unit
20324
20325    `e'
20326          Application register residing in I-unit
20327
20328    `f'
20329          Floating-point register
20330
20331    `m'
20332          Memory operand.  If used together with `<' or `>', the
20333          operand can have postincrement and postdecrement which
20334          require printing with `%Pn' on IA-64.
20335
20336    `G'
20337          Floating-point constant 0.0 or 1.0
20338
20339    `I'
20340          14-bit signed integer constant
20341
20342    `J'
20343          22-bit signed integer constant
20344
20345    `K'
20346          8-bit signed integer constant for logical instructions
20347
20348    `L'
20349          8-bit adjusted signed integer constant for compare pseudo-ops
20350
20351    `M'
20352          6-bit unsigned integer constant for shift counts
20353
20354    `N'
20355          9-bit signed integer constant for load and store
20356          postincrements
20357
20358    `O'
20359          The constant zero
20360
20361    `P'
20362          0 or -1 for `dep' instruction
20363
20364    `Q'
20365          Non-volatile memory for floating-point loads and stores
20366
20367    `R'
20368          Integer constant in the range 1 to 4 for `shladd' instruction
20369
20370    `S'
20371          Memory operand except postincrement and postdecrement.  This
20372          is now roughly the same as `m' when not used together with `<'
20373          or `>'.
20374
20375_FRV--`config/frv/frv.h'_
20376
20377    `a'
20378          Register in the class `ACC_REGS' (`acc0' to `acc7').
20379
20380    `b'
20381          Register in the class `EVEN_ACC_REGS' (`acc0' to `acc7').
20382
20383    `c'
20384          Register in the class `CC_REGS' (`fcc0' to `fcc3' and `icc0'
20385          to `icc3').
20386
20387    `d'
20388          Register in the class `GPR_REGS' (`gr0' to `gr63').
20389
20390    `e'
20391          Register in the class `EVEN_REGS' (`gr0' to `gr63').  Odd
20392          registers are excluded not in the class but through the use
20393          of a machine mode larger than 4 bytes.
20394
20395    `f'
20396          Register in the class `FPR_REGS' (`fr0' to `fr63').
20397
20398    `h'
20399          Register in the class `FEVEN_REGS' (`fr0' to `fr63').  Odd
20400          registers are excluded not in the class but through the use
20401          of a machine mode larger than 4 bytes.
20402
20403    `l'
20404          Register in the class `LR_REG' (the `lr' register).
20405
20406    `q'
20407          Register in the class `QUAD_REGS' (`gr2' to `gr63').
20408          Register numbers not divisible by 4 are excluded not in the
20409          class but through the use of a machine mode larger than 8
20410          bytes.
20411
20412    `t'
20413          Register in the class `ICC_REGS' (`icc0' to `icc3').
20414
20415    `u'
20416          Register in the class `FCC_REGS' (`fcc0' to `fcc3').
20417
20418    `v'
20419          Register in the class `ICR_REGS' (`cc4' to `cc7').
20420
20421    `w'
20422          Register in the class `FCR_REGS' (`cc0' to `cc3').
20423
20424    `x'
20425          Register in the class `QUAD_FPR_REGS' (`fr0' to `fr63').
20426          Register numbers not divisible by 4 are excluded not in the
20427          class but through the use of a machine mode larger than 8
20428          bytes.
20429
20430    `z'
20431          Register in the class `SPR_REGS' (`lcr' and `lr').
20432
20433    `A'
20434          Register in the class `QUAD_ACC_REGS' (`acc0' to `acc7').
20435
20436    `B'
20437          Register in the class `ACCG_REGS' (`accg0' to `accg7').
20438
20439    `C'
20440          Register in the class `CR_REGS' (`cc0' to `cc7').
20441
20442    `G'
20443          Floating point constant zero
20444
20445    `I'
20446          6-bit signed integer constant
20447
20448    `J'
20449          10-bit signed integer constant
20450
20451    `L'
20452          16-bit signed integer constant
20453
20454    `M'
20455          16-bit unsigned integer constant
20456
20457    `N'
20458          12-bit signed integer constant that is negative--i.e. in the
20459          range of -2048 to -1
20460
20461    `O'
20462          Constant zero
20463
20464    `P'
20465          12-bit signed integer constant that is greater than
20466          zero--i.e. in the range of 1 to 2047.
20467
20468
20469_Blackfin family--`config/bfin/constraints.md'_
20470
20471    `a'
20472          P register
20473
20474    `d'
20475          D register
20476
20477    `z'
20478          A call clobbered P register.
20479
20480    `qN'
20481          A single register.  If N is in the range 0 to 7, the
20482          corresponding D register.  If it is `A', then the register P0.
20483
20484    `D'
20485          Even-numbered D register
20486
20487    `W'
20488          Odd-numbered D register
20489
20490    `e'
20491          Accumulator register.
20492
20493    `A'
20494          Even-numbered accumulator register.
20495
20496    `B'
20497          Odd-numbered accumulator register.
20498
20499    `b'
20500          I register
20501
20502    `v'
20503          B register
20504
20505    `f'
20506          M register
20507
20508    `c'
20509          Registers used for circular buffering, i.e. I, B, or L
20510          registers.
20511
20512    `C'
20513          The CC register.
20514
20515    `t'
20516          LT0 or LT1.
20517
20518    `k'
20519          LC0 or LC1.
20520
20521    `u'
20522          LB0 or LB1.
20523
20524    `x'
20525          Any D, P, B, M, I or L register.
20526
20527    `y'
20528          Additional registers typically used only in prologues and
20529          epilogues: RETS, RETN, RETI, RETX, RETE, ASTAT, SEQSTAT and
20530          USP.
20531
20532    `w'
20533          Any register except accumulators or CC.
20534
20535    `Ksh'
20536          Signed 16 bit integer (in the range -32768 to 32767)
20537
20538    `Kuh'
20539          Unsigned 16 bit integer (in the range 0 to 65535)
20540
20541    `Ks7'
20542          Signed 7 bit integer (in the range -64 to 63)
20543
20544    `Ku7'
20545          Unsigned 7 bit integer (in the range 0 to 127)
20546
20547    `Ku5'
20548          Unsigned 5 bit integer (in the range 0 to 31)
20549
20550    `Ks4'
20551          Signed 4 bit integer (in the range -8 to 7)
20552
20553    `Ks3'
20554          Signed 3 bit integer (in the range -3 to 4)
20555
20556    `Ku3'
20557          Unsigned 3 bit integer (in the range 0 to 7)
20558
20559    `PN'
20560          Constant N, where N is a single-digit constant in the range 0
20561          to 4.
20562
20563    `PA'
20564          An integer equal to one of the MACFLAG_XXX constants that is
20565          suitable for use with either accumulator.
20566
20567    `PB'
20568          An integer equal to one of the MACFLAG_XXX constants that is
20569          suitable for use only with accumulator A1.
20570
20571    `M1'
20572          Constant 255.
20573
20574    `M2'
20575          Constant 65535.
20576
20577    `J'
20578          An integer constant with exactly a single bit set.
20579
20580    `L'
20581          An integer constant with all bits set except exactly one.
20582
20583    `H'
20584
20585    `Q'
20586          Any SYMBOL_REF.
20587
20588_M32C--`config/m32c/m32c.c'_
20589
20590    `Rsp'
20591    `Rfb'
20592    `Rsb'
20593          `$sp', `$fb', `$sb'.
20594
20595    `Rcr'
20596          Any control register, when they're 16 bits wide (nothing if
20597          control registers are 24 bits wide)
20598
20599    `Rcl'
20600          Any control register, when they're 24 bits wide.
20601
20602    `R0w'
20603    `R1w'
20604    `R2w'
20605    `R3w'
20606          $r0, $r1, $r2, $r3.
20607
20608    `R02'
20609          $r0 or $r2, or $r2r0 for 32 bit values.
20610
20611    `R13'
20612          $r1 or $r3, or $r3r1 for 32 bit values.
20613
20614    `Rdi'
20615          A register that can hold a 64 bit value.
20616
20617    `Rhl'
20618          $r0 or $r1 (registers with addressable high/low bytes)
20619
20620    `R23'
20621          $r2 or $r3
20622
20623    `Raa'
20624          Address registers
20625
20626    `Raw'
20627          Address registers when they're 16 bits wide.
20628
20629    `Ral'
20630          Address registers when they're 24 bits wide.
20631
20632    `Rqi'
20633          Registers that can hold QI values.
20634
20635    `Rad'
20636          Registers that can be used with displacements ($a0, $a1, $sb).
20637
20638    `Rsi'
20639          Registers that can hold 32 bit values.
20640
20641    `Rhi'
20642          Registers that can hold 16 bit values.
20643
20644    `Rhc'
20645          Registers chat can hold 16 bit values, including all control
20646          registers.
20647
20648    `Rra'
20649          $r0 through R1, plus $a0 and $a1.
20650
20651    `Rfl'
20652          The flags register.
20653
20654    `Rmm'
20655          The memory-based pseudo-registers $mem0 through $mem15.
20656
20657    `Rpi'
20658          Registers that can hold pointers (16 bit registers for r8c,
20659          m16c; 24 bit registers for m32cm, m32c).
20660
20661    `Rpa'
20662          Matches multiple registers in a PARALLEL to form a larger
20663          register.  Used to match function return values.
20664
20665    `Is3'
20666          -8 ... 7
20667
20668    `IS1'
20669          -128 ... 127
20670
20671    `IS2'
20672          -32768 ... 32767
20673
20674    `IU2'
20675          0 ... 65535
20676
20677    `In4'
20678          -8 ... -1 or 1 ... 8
20679
20680    `In5'
20681          -16 ... -1 or 1 ... 16
20682
20683    `In6'
20684          -32 ... -1 or 1 ... 32
20685
20686    `IM2'
20687          -65536 ... -1
20688
20689    `Ilb'
20690          An 8 bit value with exactly one bit set.
20691
20692    `Ilw'
20693          A 16 bit value with exactly one bit set.
20694
20695    `Sd'
20696          The common src/dest memory addressing modes.
20697
20698    `Sa'
20699          Memory addressed using $a0 or $a1.
20700
20701    `Si'
20702          Memory addressed with immediate addresses.
20703
20704    `Ss'
20705          Memory addressed using the stack pointer ($sp).
20706
20707    `Sf'
20708          Memory addressed using the frame base register ($fb).
20709
20710    `Ss'
20711          Memory addressed using the small base register ($sb).
20712
20713    `S1'
20714          $r1h
20715
20716_MeP--`config/mep/constraints.md'_
20717
20718    `a'
20719          The $sp register.
20720
20721    `b'
20722          The $tp register.
20723
20724    `c'
20725          Any control register.
20726
20727    `d'
20728          Either the $hi or the $lo register.
20729
20730    `em'
20731          Coprocessor registers that can be directly loaded ($c0-$c15).
20732
20733    `ex'
20734          Coprocessor registers that can be moved to each other.
20735
20736    `er'
20737          Coprocessor registers that can be moved to core registers.
20738
20739    `h'
20740          The $hi register.
20741
20742    `j'
20743          The $rpc register.
20744
20745    `l'
20746          The $lo register.
20747
20748    `t'
20749          Registers which can be used in $tp-relative addressing.
20750
20751    `v'
20752          The $gp register.
20753
20754    `x'
20755          The coprocessor registers.
20756
20757    `y'
20758          The coprocessor control registers.
20759
20760    `z'
20761          The $0 register.
20762
20763    `A'
20764          User-defined register set A.
20765
20766    `B'
20767          User-defined register set B.
20768
20769    `C'
20770          User-defined register set C.
20771
20772    `D'
20773          User-defined register set D.
20774
20775    `I'
20776          Offsets for $gp-rel addressing.
20777
20778    `J'
20779          Constants that can be used directly with boolean insns.
20780
20781    `K'
20782          Constants that can be moved directly to registers.
20783
20784    `L'
20785          Small constants that can be added to registers.
20786
20787    `M'
20788          Long shift counts.
20789
20790    `N'
20791          Small constants that can be compared to registers.
20792
20793    `O'
20794          Constants that can be loaded into the top half of registers.
20795
20796    `S'
20797          Signed 8-bit immediates.
20798
20799    `T'
20800          Symbols encoded for $tp-rel or $gp-rel addressing.
20801
20802    `U'
20803          Non-constant addresses for loading/saving coprocessor
20804          registers.
20805
20806    `W'
20807          The top half of a symbol's value.
20808
20809    `Y'
20810          A register indirect address without offset.
20811
20812    `Z'
20813          Symbolic references to the control bus.
20814
20815
20816_MicroBlaze--`config/microblaze/constraints.md'_
20817
20818    `d'
20819          A general register (`r0' to `r31').
20820
20821    `z'
20822          A status register (`rmsr', `$fcc1' to `$fcc7').
20823
20824
20825_MIPS--`config/mips/constraints.md'_
20826
20827    `d'
20828          An address register.  This is equivalent to `r' unless
20829          generating MIPS16 code.
20830
20831    `f'
20832          A floating-point register (if available).
20833
20834    `h'
20835          Formerly the `hi' register.  This constraint is no longer
20836          supported.
20837
20838    `l'
20839          The `lo' register.  Use this register to store values that are
20840          no bigger than a word.
20841
20842    `x'
20843          The concatenated `hi' and `lo' registers.  Use this register
20844          to store doubleword values.
20845
20846    `c'
20847          A register suitable for use in an indirect jump.  This will
20848          always be `$25' for `-mabicalls'.
20849
20850    `v'
20851          Register `$3'.  Do not use this constraint in new code; it is
20852          retained only for compatibility with glibc.
20853
20854    `y'
20855          Equivalent to `r'; retained for backwards compatibility.
20856
20857    `z'
20858          A floating-point condition code register.
20859
20860    `I'
20861          A signed 16-bit constant (for arithmetic instructions).
20862
20863    `J'
20864          Integer zero.
20865
20866    `K'
20867          An unsigned 16-bit constant (for logic instructions).
20868
20869    `L'
20870          A signed 32-bit constant in which the lower 16 bits are zero.
20871          Such constants can be loaded using `lui'.
20872
20873    `M'
20874          A constant that cannot be loaded using `lui', `addiu' or
20875          `ori'.
20876
20877    `N'
20878          A constant in the range -65535 to -1 (inclusive).
20879
20880    `O'
20881          A signed 15-bit constant.
20882
20883    `P'
20884          A constant in the range 1 to 65535 (inclusive).
20885
20886    `G'
20887          Floating-point zero.
20888
20889    `R'
20890          An address that can be used in a non-macro load or store.
20891
20892_Motorola 680x0--`config/m68k/constraints.md'_
20893
20894    `a'
20895          Address register
20896
20897    `d'
20898          Data register
20899
20900    `f'
20901          68881 floating-point register, if available
20902
20903    `I'
20904          Integer in the range 1 to 8
20905
20906    `J'
20907          16-bit signed number
20908
20909    `K'
20910          Signed number whose magnitude is greater than 0x80
20911
20912    `L'
20913          Integer in the range -8 to -1
20914
20915    `M'
20916          Signed number whose magnitude is greater than 0x100
20917
20918    `N'
20919          Range 24 to 31, rotatert:SI 8 to 1 expressed as rotate
20920
20921    `O'
20922          16 (for rotate using swap)
20923
20924    `P'
20925          Range 8 to 15, rotatert:HI 8 to 1 expressed as rotate
20926
20927    `R'
20928          Numbers that mov3q can handle
20929
20930    `G'
20931          Floating point constant that is not a 68881 constant
20932
20933    `S'
20934          Operands that satisfy 'm' when -mpcrel is in effect
20935
20936    `T'
20937          Operands that satisfy 's' when -mpcrel is not in effect
20938
20939    `Q'
20940          Address register indirect addressing mode
20941
20942    `U'
20943          Register offset addressing
20944
20945    `W'
20946          const_call_operand
20947
20948    `Cs'
20949          symbol_ref or const
20950
20951    `Ci'
20952          const_int
20953
20954    `C0'
20955          const_int 0
20956
20957    `Cj'
20958          Range of signed numbers that don't fit in 16 bits
20959
20960    `Cmvq'
20961          Integers valid for mvq
20962
20963    `Capsw'
20964          Integers valid for a moveq followed by a swap
20965
20966    `Cmvz'
20967          Integers valid for mvz
20968
20969    `Cmvs'
20970          Integers valid for mvs
20971
20972    `Ap'
20973          push_operand
20974
20975    `Ac'
20976          Non-register operands allowed in clr
20977
20978
20979_Moxie--`config/moxie/constraints.md'_
20980
20981    `A'
20982          An absolute address
20983
20984    `B'
20985          An offset address
20986
20987    `W'
20988          A register indirect memory operand
20989
20990    `I'
20991          A constant in the range of 0 to 255.
20992
20993    `N'
20994          A constant in the range of 0 to -255.
20995
20996
20997_PDP-11--`config/pdp11/constraints.md'_
20998
20999    `a'
21000          Floating point registers AC0 through AC3.  These can be
21001          loaded from/to memory with a single instruction.
21002
21003    `d'
21004          Odd numbered general registers (R1, R3, R5).  These are used
21005          for 16-bit multiply operations.
21006
21007    `f'
21008          Any of the floating point registers (AC0 through AC5).
21009
21010    `G'
21011          Floating point constant 0.
21012
21013    `I'
21014          An integer constant that fits in 16 bits.
21015
21016    `J'
21017          An integer constant whose low order 16 bits are zero.
21018
21019    `K'
21020          An integer constant that does not meet the constraints for
21021          codes `I' or `J'.
21022
21023    `L'
21024          The integer constant 1.
21025
21026    `M'
21027          The integer constant -1.
21028
21029    `N'
21030          The integer constant 0.
21031
21032    `O'
21033          Integer constants -4 through -1 and 1 through 4; shifts by
21034          these amounts are handled as multiple single-bit shifts
21035          rather than a single variable-length shift.
21036
21037    `Q'
21038          A memory reference which requires an additional word (address
21039          or offset) after the opcode.
21040
21041    `R'
21042          A memory reference that is encoded within the opcode.
21043
21044
21045_RL78--`config/rl78/constraints.md'_
21046
21047    `Int3'
21048          An integer constant in the range 1 ... 7.
21049
21050    `Int8'
21051          An integer constant in the range 0 ... 255.
21052
21053    `J'
21054          An integer constant in the range -255 ... 0
21055
21056    `K'
21057          The integer constant 1.
21058
21059    `L'
21060          The integer constant -1.
21061
21062    `M'
21063          The integer constant 0.
21064
21065    `N'
21066          The integer constant 2.
21067
21068    `O'
21069          The integer constant -2.
21070
21071    `P'
21072          An integer constant in the range 1 ... 15.
21073
21074    `Qbi'
21075          The built-in compare types-eq, ne, gtu, ltu, geu, and leu.
21076
21077    `Qsc'
21078          The synthetic compare types-gt, lt, ge, and le.
21079
21080    `Wab'
21081          A memory reference with an absolute address.
21082
21083    `Wbc'
21084          A memory reference using `BC' as a base register, with an
21085          optional offset.
21086
21087    `Wca'
21088          A memory reference using `AX', `BC', `DE', or `HL' for the
21089          address, for calls.
21090
21091    `Wcv'
21092          A memory reference using any 16-bit register pair for the
21093          address, for calls.
21094
21095    `Wd2'
21096          A memory reference using `DE' as a base register, with an
21097          optional offset.
21098
21099    `Wde'
21100          A memory reference using `DE' as a base register, without any
21101          offset.
21102
21103    `Wfr'
21104          Any memory reference to an address in the far address space.
21105
21106    `Wh1'
21107          A memory reference using `HL' as a base register, with an
21108          optional one-byte offset.
21109
21110    `Whb'
21111          A memory reference using `HL' as a base register, with `B' or
21112          `C' as the index register.
21113
21114    `Whl'
21115          A memory reference using `HL' as a base register, without any
21116          offset.
21117
21118    `Ws1'
21119          A memory reference using `SP' as a base register, with an
21120          optional one-byte offset.
21121
21122    `Y'
21123          Any memory reference to an address in the near address space.
21124
21125    `A'
21126          The `AX' register.
21127
21128    `B'
21129          The `BC' register.
21130
21131    `D'
21132          The `DE' register.
21133
21134    `R'
21135          `A' through `L' registers.
21136
21137    `S'
21138          The `SP' register.
21139
21140    `T'
21141          The `HL' register.
21142
21143    `Z08W'
21144          The 16-bit `R8' register.
21145
21146    `Z10W'
21147          The 16-bit `R10' register.
21148
21149    `Zint'
21150          The registers reserved for interrupts (`R24' to `R31').
21151
21152    `a'
21153          The `A' register.
21154
21155    `b'
21156          The `B' register.
21157
21158    `c'
21159          The `C' register.
21160
21161    `d'
21162          The `D' register.
21163
21164    `e'
21165          The `E' register.
21166
21167    `h'
21168          The `H' register.
21169
21170    `l'
21171          The `L' register.
21172
21173    `v'
21174          The virtual registers.
21175
21176    `w'
21177          The `PSW' register.
21178
21179    `x'
21180          The `X' register.
21181
21182
21183_RX--`config/rx/constraints.md'_
21184
21185    `Q'
21186          An address which does not involve register indirect
21187          addressing or pre/post increment/decrement addressing.
21188
21189    `Symbol'
21190          A symbol reference.
21191
21192    `Int08'
21193          A constant in the range -256 to 255, inclusive.
21194
21195    `Sint08'
21196          A constant in the range -128 to 127, inclusive.
21197
21198    `Sint16'
21199          A constant in the range -32768 to 32767, inclusive.
21200
21201    `Sint24'
21202          A constant in the range -8388608 to 8388607, inclusive.
21203
21204    `Uint04'
21205          A constant in the range 0 to 15, inclusive.
21206
21207
21208_SPARC--`config/sparc/sparc.h'_
21209
21210    `f'
21211          Floating-point register on the SPARC-V8 architecture and
21212          lower floating-point register on the SPARC-V9 architecture.
21213
21214    `e'
21215          Floating-point register.  It is equivalent to `f' on the
21216          SPARC-V8 architecture and contains both lower and upper
21217          floating-point registers on the SPARC-V9 architecture.
21218
21219    `c'
21220          Floating-point condition code register.
21221
21222    `d'
21223          Lower floating-point register.  It is only valid on the
21224          SPARC-V9 architecture when the Visual Instruction Set is
21225          available.
21226
21227    `b'
21228          Floating-point register.  It is only valid on the SPARC-V9
21229          architecture when the Visual Instruction Set is available.
21230
21231    `h'
21232          64-bit global or out register for the SPARC-V8+ architecture.
21233
21234    `C'
21235          The constant all-ones, for floating-point.
21236
21237    `A'
21238          Signed 5-bit constant
21239
21240    `D'
21241          A vector constant
21242
21243    `I'
21244          Signed 13-bit constant
21245
21246    `J'
21247          Zero
21248
21249    `K'
21250          32-bit constant with the low 12 bits clear (a constant that
21251          can be loaded with the `sethi' instruction)
21252
21253    `L'
21254          A constant in the range supported by `movcc' instructions
21255          (11-bit signed immediate)
21256
21257    `M'
21258          A constant in the range supported by `movrcc' instructions
21259          (10-bit signed immediate)
21260
21261    `N'
21262          Same as `K', except that it verifies that bits that are not
21263          in the lower 32-bit range are all zero.  Must be used instead
21264          of `K' for modes wider than `SImode'
21265
21266    `O'
21267          The constant 4096
21268
21269    `G'
21270          Floating-point zero
21271
21272    `H'
21273          Signed 13-bit constant, sign-extended to 32 or 64 bits
21274
21275    `P'
21276          The constant -1
21277
21278    `Q'
21279          Floating-point constant whose integral representation can be
21280          moved into an integer register using a single sethi
21281          instruction
21282
21283    `R'
21284          Floating-point constant whose integral representation can be
21285          moved into an integer register using a single mov instruction
21286
21287    `S'
21288          Floating-point constant whose integral representation can be
21289          moved into an integer register using a high/lo_sum
21290          instruction sequence
21291
21292    `T'
21293          Memory address aligned to an 8-byte boundary
21294
21295    `U'
21296          Even register
21297
21298    `W'
21299          Memory address for `e' constraint registers
21300
21301    `w'
21302          Memory address with only a base register
21303
21304    `Y'
21305          Vector zero
21306
21307
21308_SPU--`config/spu/spu.h'_
21309
21310    `a'
21311          An immediate which can be loaded with the il/ila/ilh/ilhu
21312          instructions.  const_int is treated as a 64 bit value.
21313
21314    `c'
21315          An immediate for and/xor/or instructions.  const_int is
21316          treated as a 64 bit value.
21317
21318    `d'
21319          An immediate for the `iohl' instruction.  const_int is
21320          treated as a 64 bit value.
21321
21322    `f'
21323          An immediate which can be loaded with `fsmbi'.
21324
21325    `A'
21326          An immediate which can be loaded with the il/ila/ilh/ilhu
21327          instructions.  const_int is treated as a 32 bit value.
21328
21329    `B'
21330          An immediate for most arithmetic instructions.  const_int is
21331          treated as a 32 bit value.
21332
21333    `C'
21334          An immediate for and/xor/or instructions.  const_int is
21335          treated as a 32 bit value.
21336
21337    `D'
21338          An immediate for the `iohl' instruction.  const_int is
21339          treated as a 32 bit value.
21340
21341    `I'
21342          A constant in the range [-64, 63] for shift/rotate
21343          instructions.
21344
21345    `J'
21346          An unsigned 7-bit constant for conversion/nop/channel
21347          instructions.
21348
21349    `K'
21350          A signed 10-bit constant for most arithmetic instructions.
21351
21352    `M'
21353          A signed 16 bit immediate for `stop'.
21354
21355    `N'
21356          An unsigned 16-bit constant for `iohl' and `fsmbi'.
21357
21358    `O'
21359          An unsigned 7-bit constant whose 3 least significant bits are
21360          0.
21361
21362    `P'
21363          An unsigned 3-bit constant for 16-byte rotates and shifts
21364
21365    `R'
21366          Call operand, reg, for indirect calls
21367
21368    `S'
21369          Call operand, symbol, for relative calls.
21370
21371    `T'
21372          Call operand, const_int, for absolute calls.
21373
21374    `U'
21375          An immediate which can be loaded with the il/ila/ilh/ilhu
21376          instructions.  const_int is sign extended to 128 bit.
21377
21378    `W'
21379          An immediate for shift and rotate instructions.  const_int is
21380          treated as a 32 bit value.
21381
21382    `Y'
21383          An immediate for and/xor/or instructions.  const_int is sign
21384          extended as a 128 bit.
21385
21386    `Z'
21387          An immediate for the `iohl' instruction.  const_int is sign
21388          extended to 128 bit.
21389
21390
21391_S/390 and zSeries--`config/s390/s390.h'_
21392
21393    `a'
21394          Address register (general purpose register except r0)
21395
21396    `c'
21397          Condition code register
21398
21399    `d'
21400          Data register (arbitrary general purpose register)
21401
21402    `f'
21403          Floating-point register
21404
21405    `I'
21406          Unsigned 8-bit constant (0-255)
21407
21408    `J'
21409          Unsigned 12-bit constant (0-4095)
21410
21411    `K'
21412          Signed 16-bit constant (-32768-32767)
21413
21414    `L'
21415          Value appropriate as displacement.
21416         `(0..4095)'
21417               for short displacement
21418
21419         `(-524288..524287)'
21420               for long displacement
21421
21422    `M'
21423          Constant integer with a value of 0x7fffffff.
21424
21425    `N'
21426          Multiple letter constraint followed by 4 parameter letters.
21427         `0..9:'
21428               number of the part counting from most to least
21429               significant
21430
21431         `H,Q:'
21432               mode of the part
21433
21434         `D,S,H:'
21435               mode of the containing operand
21436
21437         `0,F:'
21438               value of the other parts (F--all bits set)
21439          The constraint matches if the specified part of a constant
21440          has a value different from its other parts.
21441
21442    `Q'
21443          Memory reference without index register and with short
21444          displacement.
21445
21446    `R'
21447          Memory reference with index register and short displacement.
21448
21449    `S'
21450          Memory reference without index register but with long
21451          displacement.
21452
21453    `T'
21454          Memory reference with index register and long displacement.
21455
21456    `U'
21457          Pointer with short displacement.
21458
21459    `W'
21460          Pointer with long displacement.
21461
21462    `Y'
21463          Shift count operand.
21464
21465
21466_Score family--`config/score/score.h'_
21467
21468    `d'
21469          Registers from r0 to r32.
21470
21471    `e'
21472          Registers from r0 to r16.
21473
21474    `t'
21475          r8--r11 or r22--r27 registers.
21476
21477    `h'
21478          hi register.
21479
21480    `l'
21481          lo register.
21482
21483    `x'
21484          hi + lo register.
21485
21486    `q'
21487          cnt register.
21488
21489    `y'
21490          lcb register.
21491
21492    `z'
21493          scb register.
21494
21495    `a'
21496          cnt + lcb + scb register.
21497
21498    `c'
21499          cr0--cr15 register.
21500
21501    `b'
21502          cp1 registers.
21503
21504    `f'
21505          cp2 registers.
21506
21507    `i'
21508          cp3 registers.
21509
21510    `j'
21511          cp1 + cp2 + cp3 registers.
21512
21513    `I'
21514          High 16-bit constant (32-bit constant with 16 LSBs zero).
21515
21516    `J'
21517          Unsigned 5 bit integer (in the range 0 to 31).
21518
21519    `K'
21520          Unsigned 16 bit integer (in the range 0 to 65535).
21521
21522    `L'
21523          Signed 16 bit integer (in the range -32768 to 32767).
21524
21525    `M'
21526          Unsigned 14 bit integer (in the range 0 to 16383).
21527
21528    `N'
21529          Signed 14 bit integer (in the range -8192 to 8191).
21530
21531    `Z'
21532          Any SYMBOL_REF.
21533
21534_Xstormy16--`config/stormy16/stormy16.h'_
21535
21536    `a'
21537          Register r0.
21538
21539    `b'
21540          Register r1.
21541
21542    `c'
21543          Register r2.
21544
21545    `d'
21546          Register r8.
21547
21548    `e'
21549          Registers r0 through r7.
21550
21551    `t'
21552          Registers r0 and r1.
21553
21554    `y'
21555          The carry register.
21556
21557    `z'
21558          Registers r8 and r9.
21559
21560    `I'
21561          A constant between 0 and 3 inclusive.
21562
21563    `J'
21564          A constant that has exactly one bit set.
21565
21566    `K'
21567          A constant that has exactly one bit clear.
21568
21569    `L'
21570          A constant between 0 and 255 inclusive.
21571
21572    `M'
21573          A constant between -255 and 0 inclusive.
21574
21575    `N'
21576          A constant between -3 and 0 inclusive.
21577
21578    `O'
21579          A constant between 1 and 4 inclusive.
21580
21581    `P'
21582          A constant between -4 and -1 inclusive.
21583
21584    `Q'
21585          A memory reference that is a stack push.
21586
21587    `R'
21588          A memory reference that is a stack pop.
21589
21590    `S'
21591          A memory reference that refers to a constant address of known
21592          value.
21593
21594    `T'
21595          The register indicated by Rx (not implemented yet).
21596
21597    `U'
21598          A constant that is not between 2 and 15 inclusive.
21599
21600    `Z'
21601          The constant 0.
21602
21603
21604_TI C6X family--`config/c6x/constraints.md'_
21605
21606    `a'
21607          Register file A (A0-A31).
21608
21609    `b'
21610          Register file B (B0-B31).
21611
21612    `A'
21613          Predicate registers in register file A (A0-A2 on C64X and
21614          higher, A1 and A2 otherwise).
21615
21616    `B'
21617          Predicate registers in register file B (B0-B2).
21618
21619    `C'
21620          A call-used register in register file B (B0-B9, B16-B31).
21621
21622    `Da'
21623          Register file A, excluding predicate registers (A3-A31, plus
21624          A0 if not C64X or higher).
21625
21626    `Db'
21627          Register file B, excluding predicate registers (B3-B31).
21628
21629    `Iu4'
21630          Integer constant in the range 0 ... 15.
21631
21632    `Iu5'
21633          Integer constant in the range 0 ... 31.
21634
21635    `In5'
21636          Integer constant in the range -31 ... 0.
21637
21638    `Is5'
21639          Integer constant in the range -16 ... 15.
21640
21641    `I5x'
21642          Integer constant that can be the operand of an ADDA or a SUBA
21643          insn.
21644
21645    `IuB'
21646          Integer constant in the range 0 ... 65535.
21647
21648    `IsB'
21649          Integer constant in the range -32768 ... 32767.
21650
21651    `IsC'
21652          Integer constant in the range -2^20 ... 2^20 - 1.
21653
21654    `Jc'
21655          Integer constant that is a valid mask for the clr instruction.
21656
21657    `Js'
21658          Integer constant that is a valid mask for the set instruction.
21659
21660    `Q'
21661          Memory location with A base register.
21662
21663    `R'
21664          Memory location with B base register.
21665
21666    `S0'
21667          On C64x+ targets, a GP-relative small data reference.
21668
21669    `S1'
21670          Any kind of `SYMBOL_REF', for use in a call address.
21671
21672    `Si'
21673          Any kind of immediate operand, unless it matches the S0
21674          constraint.
21675
21676    `T'
21677          Memory location with B base register, but not using a long
21678          offset.
21679
21680    `W'
21681          A memory operand with an address that can't be used in an
21682          unaligned access.
21683
21684    `Z'
21685          Register B14 (aka DP).
21686
21687
21688_TILE-Gx--`config/tilegx/constraints.md'_
21689
21690    `R00'
21691    `R01'
21692    `R02'
21693    `R03'
21694    `R04'
21695    `R05'
21696    `R06'
21697    `R07'
21698    `R08'
21699    `R09'
21700    `R10'
21701          Each of these represents a register constraint for an
21702          individual register, from r0 to r10.
21703
21704    `I'
21705          Signed 8-bit integer constant.
21706
21707    `J'
21708          Signed 16-bit integer constant.
21709
21710    `K'
21711          Unsigned 16-bit integer constant.
21712
21713    `L'
21714          Integer constant that fits in one signed byte when
21715          incremented by one (-129 ... 126).
21716
21717    `m'
21718          Memory operand.  If used together with `<' or `>', the
21719          operand can have postincrement which requires printing with
21720          `%In' and `%in' on TILE-Gx.  For example:
21721
21722               asm ("st_add %I0,%1,%i0" : "=m<>" (*mem) : "r" (val));
21723
21724    `M'
21725          A bit mask suitable for the BFINS instruction.
21726
21727    `N'
21728          Integer constant that is a byte tiled out eight times.
21729
21730    `O'
21731          The integer zero constant.
21732
21733    `P'
21734          Integer constant that is a sign-extended byte tiled out as
21735          four shorts.
21736
21737    `Q'
21738          Integer constant that fits in one signed byte when incremented
21739          (-129 ... 126), but excluding -1.
21740
21741    `S'
21742          Integer constant that has all 1 bits consecutive and starting
21743          at bit 0.
21744
21745    `T'
21746          A 16-bit fragment of a got, tls, or pc-relative reference.
21747
21748    `U'
21749          Memory operand except postincrement.  This is roughly the
21750          same as `m' when not used together with `<' or `>'.
21751
21752    `W'
21753          An 8-element vector constant with identical elements.
21754
21755    `Y'
21756          A 4-element vector constant with identical elements.
21757
21758    `Z0'
21759          The integer constant 0xffffffff.
21760
21761    `Z1'
21762          The integer constant 0xffffffff00000000.
21763
21764
21765_TILEPro--`config/tilepro/constraints.md'_
21766
21767    `R00'
21768    `R01'
21769    `R02'
21770    `R03'
21771    `R04'
21772    `R05'
21773    `R06'
21774    `R07'
21775    `R08'
21776    `R09'
21777    `R10'
21778          Each of these represents a register constraint for an
21779          individual register, from r0 to r10.
21780
21781    `I'
21782          Signed 8-bit integer constant.
21783
21784    `J'
21785          Signed 16-bit integer constant.
21786
21787    `K'
21788          Nonzero integer constant with low 16 bits zero.
21789
21790    `L'
21791          Integer constant that fits in one signed byte when
21792          incremented by one (-129 ... 126).
21793
21794    `m'
21795          Memory operand.  If used together with `<' or `>', the
21796          operand can have postincrement which requires printing with
21797          `%In' and `%in' on TILEPro.  For example:
21798
21799               asm ("swadd %I0,%1,%i0" : "=m<>" (mem) : "r" (val));
21800
21801    `M'
21802          A bit mask suitable for the MM instruction.
21803
21804    `N'
21805          Integer constant that is a byte tiled out four times.
21806
21807    `O'
21808          The integer zero constant.
21809
21810    `P'
21811          Integer constant that is a sign-extended byte tiled out as
21812          two shorts.
21813
21814    `Q'
21815          Integer constant that fits in one signed byte when incremented
21816          (-129 ... 126), but excluding -1.
21817
21818    `T'
21819          A symbolic operand, or a 16-bit fragment of a got, tls, or
21820          pc-relative reference.
21821
21822    `U'
21823          Memory operand except postincrement.  This is roughly the
21824          same as `m' when not used together with `<' or `>'.
21825
21826    `W'
21827          A 4-element vector constant with identical elements.
21828
21829    `Y'
21830          A 2-element vector constant with identical elements.
21831
21832
21833_Xtensa--`config/xtensa/constraints.md'_
21834
21835    `a'
21836          General-purpose 32-bit register
21837
21838    `b'
21839          One-bit boolean register
21840
21841    `A'
21842          MAC16 40-bit accumulator register
21843
21844    `I'
21845          Signed 12-bit integer constant, for use in MOVI instructions
21846
21847    `J'
21848          Signed 8-bit integer constant, for use in ADDI instructions
21849
21850    `K'
21851          Integer constant valid for BccI instructions
21852
21853    `L'
21854          Unsigned constant valid for BccUI instructions
21855
21856
21857
21858
21859File: gccint.info,  Node: Disable Insn Alternatives,  Next: Define Constraints,  Prev: Machine Constraints,  Up: Constraints
21860
2186116.8.6 Disable insn alternatives using the `enabled' attribute
21862--------------------------------------------------------------
21863
21864The `enabled' insn attribute may be used to disable certain insn
21865alternatives for machine-specific reasons.  This is useful when adding
21866new instructions to an existing pattern which are only available for
21867certain cpu architecture levels as specified with the `-march=' option.
21868
21869 If an insn alternative is disabled, then it will never be used.  The
21870compiler treats the constraints for the disabled alternative as
21871unsatisfiable.
21872
21873 In order to make use of the `enabled' attribute a back end has to add
21874in the machine description files:
21875
21876  1. A definition of the `enabled' insn attribute.  The attribute is
21877     defined as usual using the `define_attr' command.  This definition
21878     should be based on other insn attributes and/or target flags.  The
21879     `enabled' attribute is a numeric attribute and should evaluate to
21880     `(const_int 1)' for an enabled alternative and to `(const_int 0)'
21881     otherwise.
21882
21883  2. A definition of another insn attribute used to describe for what
21884     reason an insn alternative might be available or not.  E.g.
21885     `cpu_facility' as in the example below.
21886
21887  3. An assignment for the second attribute to each insn definition
21888     combining instructions which are not all available under the same
21889     circumstances.  (Note: It obviously only makes sense for
21890     definitions with more than one alternative.  Otherwise the insn
21891     pattern should be disabled or enabled using the insn condition.)
21892
21893 E.g. the following two patterns could easily be merged using the
21894`enabled' attribute:
21895
21896
21897     (define_insn "*movdi_old"
21898       [(set (match_operand:DI 0 "register_operand" "=d")
21899             (match_operand:DI 1 "register_operand" " d"))]
21900       "!TARGET_NEW"
21901       "lgr %0,%1")
21902
21903     (define_insn "*movdi_new"
21904       [(set (match_operand:DI 0 "register_operand" "=d,f,d")
21905             (match_operand:DI 1 "register_operand" " d,d,f"))]
21906       "TARGET_NEW"
21907       "@
21908        lgr  %0,%1
21909        ldgr %0,%1
21910        lgdr %0,%1")
21911
21912 to:
21913
21914
21915     (define_insn "*movdi_combined"
21916       [(set (match_operand:DI 0 "register_operand" "=d,f,d")
21917             (match_operand:DI 1 "register_operand" " d,d,f"))]
21918       ""
21919       "@
21920        lgr  %0,%1
21921        ldgr %0,%1
21922        lgdr %0,%1"
21923       [(set_attr "cpu_facility" "*,new,new")])
21924
21925 with the `enabled' attribute defined like this:
21926
21927
21928     (define_attr "cpu_facility" "standard,new" (const_string "standard"))
21929
21930     (define_attr "enabled" ""
21931       (cond [(eq_attr "cpu_facility" "standard") (const_int 1)
21932              (and (eq_attr "cpu_facility" "new")
21933                   (ne (symbol_ref "TARGET_NEW") (const_int 0)))
21934              (const_int 1)]
21935             (const_int 0)))
21936
21937
21938File: gccint.info,  Node: Define Constraints,  Next: C Constraint Interface,  Prev: Disable Insn Alternatives,  Up: Constraints
21939
2194016.8.7 Defining Machine-Specific Constraints
21941--------------------------------------------
21942
21943Machine-specific constraints fall into two categories: register and
21944non-register constraints.  Within the latter category, constraints
21945which allow subsets of all possible memory or address operands should
21946be specially marked, to give `reload' more information.
21947
21948 Machine-specific constraints can be given names of arbitrary length,
21949but they must be entirely composed of letters, digits, underscores
21950(`_'), and angle brackets (`< >').  Like C identifiers, they must begin
21951with a letter or underscore.
21952
21953 In order to avoid ambiguity in operand constraint strings, no
21954constraint can have a name that begins with any other constraint's
21955name.  For example, if `x' is defined as a constraint name, `xy' may
21956not be, and vice versa.  As a consequence of this rule, no constraint
21957may begin with one of the generic constraint letters: `E F V X g i m n
21958o p r s'.
21959
21960 Register constraints correspond directly to register classes.  *Note
21961Register Classes::.  There is thus not much flexibility in their
21962definitions.
21963
21964 -- MD Expression: define_register_constraint name regclass docstring
21965     All three arguments are string constants.  NAME is the name of the
21966     constraint, as it will appear in `match_operand' expressions.  If
21967     NAME is a multi-letter constraint its length shall be the same for
21968     all constraints starting with the same letter.  REGCLASS can be
21969     either the name of the corresponding register class (*note
21970     Register Classes::), or a C expression which evaluates to the
21971     appropriate register class.  If it is an expression, it must have
21972     no side effects, and it cannot look at the operand.  The usual use
21973     of expressions is to map some register constraints to `NO_REGS'
21974     when the register class is not available on a given
21975     subarchitecture.
21976
21977     DOCSTRING is a sentence documenting the meaning of the constraint.
21978     Docstrings are explained further below.
21979
21980 Non-register constraints are more like predicates: the constraint
21981definition gives a Boolean expression which indicates whether the
21982constraint matches.
21983
21984 -- MD Expression: define_constraint name docstring exp
21985     The NAME and DOCSTRING arguments are the same as for
21986     `define_register_constraint', but note that the docstring comes
21987     immediately after the name for these expressions.  EXP is an RTL
21988     expression, obeying the same rules as the RTL expressions in
21989     predicate definitions.  *Note Defining Predicates::, for details.
21990     If it evaluates true, the constraint matches; if it evaluates
21991     false, it doesn't. Constraint expressions should indicate which
21992     RTL codes they might match, just like predicate expressions.
21993
21994     `match_test' C expressions have access to the following variables:
21995
21996    OP
21997          The RTL object defining the operand.
21998
21999    MODE
22000          The machine mode of OP.
22001
22002    IVAL
22003          `INTVAL (OP)', if OP is a `const_int'.
22004
22005    HVAL
22006          `CONST_DOUBLE_HIGH (OP)', if OP is an integer `const_double'.
22007
22008    LVAL
22009          `CONST_DOUBLE_LOW (OP)', if OP is an integer `const_double'.
22010
22011    RVAL
22012          `CONST_DOUBLE_REAL_VALUE (OP)', if OP is a floating-point
22013          `const_double'.
22014
22015     The *VAL variables should only be used once another piece of the
22016     expression has verified that OP is the appropriate kind of RTL
22017     object.
22018
22019 Most non-register constraints should be defined with
22020`define_constraint'.  The remaining two definition expressions are only
22021appropriate for constraints that should be handled specially by
22022`reload' if they fail to match.
22023
22024 -- MD Expression: define_memory_constraint name docstring exp
22025     Use this expression for constraints that match a subset of all
22026     memory operands: that is, `reload' can make them match by
22027     converting the operand to the form `(mem (reg X))', where X is a
22028     base register (from the register class specified by
22029     `BASE_REG_CLASS', *note Register Classes::).
22030
22031     For example, on the S/390, some instructions do not accept
22032     arbitrary memory references, but only those that do not make use
22033     of an index register.  The constraint letter `Q' is defined to
22034     represent a memory address of this type.  If `Q' is defined with
22035     `define_memory_constraint', a `Q' constraint can handle any memory
22036     operand, because `reload' knows it can simply copy the memory
22037     address into a base register if required.  This is analogous to
22038     the way an `o' constraint can handle any memory operand.
22039
22040     The syntax and semantics are otherwise identical to
22041     `define_constraint'.
22042
22043 -- MD Expression: define_address_constraint name docstring exp
22044     Use this expression for constraints that match a subset of all
22045     address operands: that is, `reload' can make the constraint match
22046     by converting the operand to the form `(reg X)', again with X a
22047     base register.
22048
22049     Constraints defined with `define_address_constraint' can only be
22050     used with the `address_operand' predicate, or machine-specific
22051     predicates that work the same way.  They are treated analogously to
22052     the generic `p' constraint.
22053
22054     The syntax and semantics are otherwise identical to
22055     `define_constraint'.
22056
22057 For historical reasons, names beginning with the letters `G H' are
22058reserved for constraints that match only `const_double's, and names
22059beginning with the letters `I J K L M N O P' are reserved for
22060constraints that match only `const_int's.  This may change in the
22061future.  For the time being, constraints with these names must be
22062written in a stylized form, so that `genpreds' can tell you did it
22063correctly:
22064
22065     (define_constraint "[GHIJKLMNOP]..."
22066       "DOC..."
22067       (and (match_code "const_int")  ; `const_double' for G/H
22068            CONDITION...))            ; usually a `match_test'
22069
22070 It is fine to use names beginning with other letters for constraints
22071that match `const_double's or `const_int's.
22072
22073 Each docstring in a constraint definition should be one or more
22074complete sentences, marked up in Texinfo format.  _They are currently
22075unused._ In the future they will be copied into the GCC manual, in
22076*note Machine Constraints::, replacing the hand-maintained tables
22077currently found in that section.  Also, in the future the compiler may
22078use this to give more helpful diagnostics when poor choice of `asm'
22079constraints causes a reload failure.
22080
22081 If you put the pseudo-Texinfo directive `@internal' at the beginning
22082of a docstring, then (in the future) it will appear only in the
22083internals manual's version of the machine-specific constraint tables.
22084Use this for constraints that should not appear in `asm' statements.
22085
22086
22087File: gccint.info,  Node: C Constraint Interface,  Prev: Define Constraints,  Up: Constraints
22088
2208916.8.8 Testing constraints from C
22090---------------------------------
22091
22092It is occasionally useful to test a constraint from C code rather than
22093implicitly via the constraint string in a `match_operand'.  The
22094generated file `tm_p.h' declares a few interfaces for working with
22095machine-specific constraints.  None of these interfaces work with the
22096generic constraints described in *note Simple Constraints::.  This may
22097change in the future.
22098
22099 *Warning:* `tm_p.h' may declare other functions that operate on
22100constraints, besides the ones documented here.  Do not use those
22101functions from machine-dependent code.  They exist to implement the old
22102constraint interface that machine-independent components of the
22103compiler still expect.  They will change or disappear in the future.
22104
22105 Some valid constraint names are not valid C identifiers, so there is a
22106mangling scheme for referring to them from C.  Constraint names that do
22107not contain angle brackets or underscores are left unchanged.
22108Underscores are doubled, each `<' is replaced with `_l', and each `>'
22109with `_g'.  Here are some examples:
22110
22111     *Original* *Mangled*
22112     `x'        `x'
22113     `P42x'     `P42x'
22114     `P4_x'     `P4__x'
22115     `P4>x'     `P4_gx'
22116     `P4>>'     `P4_g_g'
22117     `P4_g>'    `P4__g_g'
22118
22119 Throughout this section, the variable C is either a constraint in the
22120abstract sense, or a constant from `enum constraint_num'; the variable
22121M is a mangled constraint name (usually as part of a larger identifier).
22122
22123 -- Enum: constraint_num
22124     For each machine-specific constraint, there is a corresponding
22125     enumeration constant: `CONSTRAINT_' plus the mangled name of the
22126     constraint.  Functions that take an `enum constraint_num' as an
22127     argument expect one of these constants.
22128
22129     Machine-independent constraints do not have associated constants.
22130     This may change in the future.
22131
22132 -- Function: inline bool satisfies_constraint_M (rtx EXP)
22133     For each machine-specific, non-register constraint M, there is one
22134     of these functions; it returns `true' if EXP satisfies the
22135     constraint.  These functions are only visible if `rtl.h' was
22136     included before `tm_p.h'.
22137
22138 -- Function: bool constraint_satisfied_p (rtx EXP, enum constraint_num
22139          C)
22140     Like the `satisfies_constraint_M' functions, but the constraint to
22141     test is given as an argument, C.  If C specifies a register
22142     constraint, this function will always return `false'.
22143
22144 -- Function: enum reg_class regclass_for_constraint (enum
22145          constraint_num C)
22146     Returns the register class associated with C.  If C is not a
22147     register constraint, or those registers are not available for the
22148     currently selected subtarget, returns `NO_REGS'.
22149
22150 Here is an example use of `satisfies_constraint_M'.  In peephole
22151optimizations (*note Peephole Definitions::), operand constraint
22152strings are ignored, so if there are relevant constraints, they must be
22153tested in the C condition.  In the example, the optimization is applied
22154if operand 2 does _not_ satisfy the `K' constraint.  (This is a
22155simplified version of a peephole definition from the i386 machine
22156description.)
22157
22158     (define_peephole2
22159       [(match_scratch:SI 3 "r")
22160        (set (match_operand:SI 0 "register_operand" "")
22161             (mult:SI (match_operand:SI 1 "memory_operand" "")
22162                      (match_operand:SI 2 "immediate_operand" "")))]
22163
22164       "!satisfies_constraint_K (operands[2])"
22165
22166       [(set (match_dup 3) (match_dup 1))
22167        (set (match_dup 0) (mult:SI (match_dup 3) (match_dup 2)))]
22168
22169       "")
22170
22171
22172File: gccint.info,  Node: Standard Names,  Next: Pattern Ordering,  Prev: Constraints,  Up: Machine Desc
22173
2217416.9 Standard Pattern Names For Generation
22175==========================================
22176
22177Here is a table of the instruction names that are meaningful in the RTL
22178generation pass of the compiler.  Giving one of these names to an
22179instruction pattern tells the RTL generation pass that it can use the
22180pattern to accomplish a certain task.
22181
22182`movM'
22183     Here M stands for a two-letter machine mode name, in lowercase.
22184     This instruction pattern moves data with that machine mode from
22185     operand 1 to operand 0.  For example, `movsi' moves full-word data.
22186
22187     If operand 0 is a `subreg' with mode M of a register whose own
22188     mode is wider than M, the effect of this instruction is to store
22189     the specified value in the part of the register that corresponds
22190     to mode M.  Bits outside of M, but which are within the same
22191     target word as the `subreg' are undefined.  Bits which are outside
22192     the target word are left unchanged.
22193
22194     This class of patterns is special in several ways.  First of all,
22195     each of these names up to and including full word size _must_ be
22196     defined, because there is no other way to copy a datum from one
22197     place to another.  If there are patterns accepting operands in
22198     larger modes, `movM' must be defined for integer modes of those
22199     sizes.
22200
22201     Second, these patterns are not used solely in the RTL generation
22202     pass.  Even the reload pass can generate move insns to copy values
22203     from stack slots into temporary registers.  When it does so, one
22204     of the operands is a hard register and the other is an operand
22205     that can need to be reloaded into a register.
22206
22207     Therefore, when given such a pair of operands, the pattern must
22208     generate RTL which needs no reloading and needs no temporary
22209     registers--no registers other than the operands.  For example, if
22210     you support the pattern with a `define_expand', then in such a
22211     case the `define_expand' mustn't call `force_reg' or any other such
22212     function which might generate new pseudo registers.
22213
22214     This requirement exists even for subword modes on a RISC machine
22215     where fetching those modes from memory normally requires several
22216     insns and some temporary registers.
22217
22218     During reload a memory reference with an invalid address may be
22219     passed as an operand.  Such an address will be replaced with a
22220     valid address later in the reload pass.  In this case, nothing may
22221     be done with the address except to use it as it stands.  If it is
22222     copied, it will not be replaced with a valid address.  No attempt
22223     should be made to make such an address into a valid address and no
22224     routine (such as `change_address') that will do so may be called.
22225     Note that `general_operand' will fail when applied to such an
22226     address.
22227
22228     The global variable `reload_in_progress' (which must be explicitly
22229     declared if required) can be used to determine whether such special
22230     handling is required.
22231
22232     The variety of operands that have reloads depends on the rest of
22233     the machine description, but typically on a RISC machine these can
22234     only be pseudo registers that did not get hard registers, while on
22235     other machines explicit memory references will get optional
22236     reloads.
22237
22238     If a scratch register is required to move an object to or from
22239     memory, it can be allocated using `gen_reg_rtx' prior to life
22240     analysis.
22241
22242     If there are cases which need scratch registers during or after
22243     reload, you must provide an appropriate secondary_reload target
22244     hook.
22245
22246     The macro `can_create_pseudo_p' can be used to determine if it is
22247     unsafe to create new pseudo registers.  If this variable is
22248     nonzero, then it is unsafe to call `gen_reg_rtx' to allocate a new
22249     pseudo.
22250
22251     The constraints on a `movM' must permit moving any hard register
22252     to any other hard register provided that `HARD_REGNO_MODE_OK'
22253     permits mode M in both registers and `TARGET_REGISTER_MOVE_COST'
22254     applied to their classes returns a value of 2.
22255
22256     It is obligatory to support floating point `movM' instructions
22257     into and out of any registers that can hold fixed point values,
22258     because unions and structures (which have modes `SImode' or
22259     `DImode') can be in those registers and they may have floating
22260     point members.
22261
22262     There may also be a need to support fixed point `movM'
22263     instructions in and out of floating point registers.
22264     Unfortunately, I have forgotten why this was so, and I don't know
22265     whether it is still true.  If `HARD_REGNO_MODE_OK' rejects fixed
22266     point values in floating point registers, then the constraints of
22267     the fixed point `movM' instructions must be designed to avoid ever
22268     trying to reload into a floating point register.
22269
22270`reload_inM'
22271`reload_outM'
22272     These named patterns have been obsoleted by the target hook
22273     `secondary_reload'.
22274
22275     Like `movM', but used when a scratch register is required to move
22276     between operand 0 and operand 1.  Operand 2 describes the scratch
22277     register.  See the discussion of the `SECONDARY_RELOAD_CLASS'
22278     macro in *note Register Classes::.
22279
22280     There are special restrictions on the form of the `match_operand's
22281     used in these patterns.  First, only the predicate for the reload
22282     operand is examined, i.e., `reload_in' examines operand 1, but not
22283     the predicates for operand 0 or 2.  Second, there may be only one
22284     alternative in the constraints.  Third, only a single register
22285     class letter may be used for the constraint; subsequent constraint
22286     letters are ignored.  As a special exception, an empty constraint
22287     string matches the `ALL_REGS' register class.  This may relieve
22288     ports of the burden of defining an `ALL_REGS' constraint letter
22289     just for these patterns.
22290
22291`movstrictM'
22292     Like `movM' except that if operand 0 is a `subreg' with mode M of
22293     a register whose natural mode is wider, the `movstrictM'
22294     instruction is guaranteed not to alter any of the register except
22295     the part which belongs to mode M.
22296
22297`movmisalignM'
22298     This variant of a move pattern is designed to load or store a value
22299     from a memory address that is not naturally aligned for its mode.
22300     For a store, the memory will be in operand 0; for a load, the
22301     memory will be in operand 1.  The other operand is guaranteed not
22302     to be a memory, so that it's easy to tell whether this is a load
22303     or store.
22304
22305     This pattern is used by the autovectorizer, and when expanding a
22306     `MISALIGNED_INDIRECT_REF' expression.
22307
22308`load_multiple'
22309     Load several consecutive memory locations into consecutive
22310     registers.  Operand 0 is the first of the consecutive registers,
22311     operand 1 is the first memory location, and operand 2 is a
22312     constant: the number of consecutive registers.
22313
22314     Define this only if the target machine really has such an
22315     instruction; do not define this if the most efficient way of
22316     loading consecutive registers from memory is to do them one at a
22317     time.
22318
22319     On some machines, there are restrictions as to which consecutive
22320     registers can be stored into memory, such as particular starting or
22321     ending register numbers or only a range of valid counts.  For those
22322     machines, use a `define_expand' (*note Expander Definitions::) and
22323     make the pattern fail if the restrictions are not met.
22324
22325     Write the generated insn as a `parallel' with elements being a
22326     `set' of one register from the appropriate memory location (you may
22327     also need `use' or `clobber' elements).  Use a `match_parallel'
22328     (*note RTL Template::) to recognize the insn.  See `rs6000.md' for
22329     examples of the use of this insn pattern.
22330
22331`store_multiple'
22332     Similar to `load_multiple', but store several consecutive registers
22333     into consecutive memory locations.  Operand 0 is the first of the
22334     consecutive memory locations, operand 1 is the first register, and
22335     operand 2 is a constant: the number of consecutive registers.
22336
22337`vec_load_lanesMN'
22338     Perform an interleaved load of several vectors from memory operand
22339     1 into register operand 0.  Both operands have mode M.  The
22340     register operand is viewed as holding consecutive vectors of mode
22341     N, while the memory operand is a flat array that contains the same
22342     number of elements.  The operation is equivalent to:
22343
22344          int c = GET_MODE_SIZE (M) / GET_MODE_SIZE (N);
22345          for (j = 0; j < GET_MODE_NUNITS (N); j++)
22346            for (i = 0; i < c; i++)
22347              operand0[i][j] = operand1[j * c + i];
22348
22349     For example, `vec_load_lanestiv4hi' loads 8 16-bit values from
22350     memory into a register of mode `TI'.  The register contains two
22351     consecutive vectors of mode `V4HI'.
22352
22353     This pattern can only be used if:
22354          TARGET_ARRAY_MODE_SUPPORTED_P (N, C)
22355     is true.  GCC assumes that, if a target supports this kind of
22356     instruction for some mode N, it also supports unaligned loads for
22357     vectors of mode N.
22358
22359`vec_store_lanesMN'
22360     Equivalent to `vec_load_lanesMN', with the memory and register
22361     operands reversed.  That is, the instruction is equivalent to:
22362
22363          int c = GET_MODE_SIZE (M) / GET_MODE_SIZE (N);
22364          for (j = 0; j < GET_MODE_NUNITS (N); j++)
22365            for (i = 0; i < c; i++)
22366              operand0[j * c + i] = operand1[i][j];
22367
22368     for a memory operand 0 and register operand 1.
22369
22370`vec_setM'
22371     Set given field in the vector value.  Operand 0 is the vector to
22372     modify, operand 1 is new value of field and operand 2 specify the
22373     field index.
22374
22375`vec_extractM'
22376     Extract given field from the vector value.  Operand 1 is the
22377     vector, operand 2 specify field index and operand 0 place to store
22378     value into.
22379
22380`vec_initM'
22381     Initialize the vector to given values.  Operand 0 is the vector to
22382     initialize and operand 1 is parallel containing values for
22383     individual fields.
22384
22385`vcondMN'
22386     Output a conditional vector move.  Operand 0 is the destination to
22387     receive a combination of operand 1 and operand 2, which are of
22388     mode M, dependent on the outcome of the predicate in operand 3
22389     which is a vector comparison with operands of mode N in operands 4
22390     and 5.  The modes M and N should have the same size.  Operand 0
22391     will be set to the value OP1 & MSK | OP2 & ~MSK where MSK is
22392     computed by element-wise evaluation of the vector comparison with
22393     a truth value of all-ones and a false value of all-zeros.
22394
22395`vec_permM'
22396     Output a (variable) vector permutation.  Operand 0 is the
22397     destination to receive elements from operand 1 and operand 2,
22398     which are of mode M.  Operand 3 is the "selector".  It is an
22399     integral mode vector of the same width and number of elements as
22400     mode M.
22401
22402     The input elements are numbered from 0 in operand 1 through 2*N-1
22403     in operand 2.  The elements of the selector must be computed
22404     modulo 2*N.  Note that if `rtx_equal_p(operand1, operand2)', this
22405     can be implemented with just operand 1 and selector elements
22406     modulo N.
22407
22408     In order to make things easy for a number of targets, if there is
22409     no `vec_perm' pattern for mode M, but there is for mode Q where Q
22410     is a vector of `QImode' of the same width as M, the middle-end
22411     will lower the mode M `VEC_PERM_EXPR' to mode Q.
22412
22413`vec_perm_constM'
22414     Like `vec_perm' except that the permutation is a compile-time
22415     constant.  That is, operand 3, the "selector", is a `CONST_VECTOR'.
22416
22417     Some targets cannot perform a permutation with a variable selector,
22418     but can efficiently perform a constant permutation.  Further, the
22419     target hook `vec_perm_ok' is queried to determine if the specific
22420     constant permutation is available efficiently; the named pattern
22421     is never expanded without `vec_perm_ok' returning true.
22422
22423     There is no need for a target to supply both `vec_permM' and
22424     `vec_perm_constM' if the former can trivially implement the
22425     operation with, say, the vector constant loaded into a register.
22426
22427`pushM1'
22428     Output a push instruction.  Operand 0 is value to push.  Used only
22429     when `PUSH_ROUNDING' is defined.  For historical reason, this
22430     pattern may be missing and in such case an `mov' expander is used
22431     instead, with a `MEM' expression forming the push operation.  The
22432     `mov' expander method is deprecated.
22433
22434`addM3'
22435     Add operand 2 and operand 1, storing the result in operand 0.  All
22436     operands must have mode M.  This can be used even on two-address
22437     machines, by means of constraints requiring operands 1 and 0 to be
22438     the same location.
22439
22440`ssaddM3', `usaddM3'
22441`subM3', `sssubM3', `ussubM3'
22442`mulM3', `ssmulM3', `usmulM3'
22443`divM3', `ssdivM3'
22444`udivM3', `usdivM3'
22445`modM3', `umodM3'
22446`uminM3', `umaxM3'
22447`andM3', `iorM3', `xorM3'
22448     Similar, for other arithmetic operations.
22449
22450`fmaM4'
22451     Multiply operand 2 and operand 1, then add operand 3, storing the
22452     result in operand 0 without doing an intermediate rounding step.
22453     All operands must have mode M.  This pattern is used to implement
22454     the `fma', `fmaf', and `fmal' builtin functions from the ISO C99
22455     standard.
22456
22457`fmsM4'
22458     Like `fmaM4', except operand 3 subtracted from the product instead
22459     of added to the product.  This is represented in the rtl as
22460
22461          (fma:M OP1 OP2 (neg:M OP3))
22462
22463`fnmaM4'
22464     Like `fmaM4' except that the intermediate product is negated
22465     before being added to operand 3.  This is represented in the rtl as
22466
22467          (fma:M (neg:M OP1) OP2 OP3)
22468
22469`fnmsM4'
22470     Like `fmsM4' except that the intermediate product is negated
22471     before subtracting operand 3.  This is represented in the rtl as
22472
22473          (fma:M (neg:M OP1) OP2 (neg:M OP3))
22474
22475`sminM3', `smaxM3'
22476     Signed minimum and maximum operations.  When used with floating
22477     point, if both operands are zeros, or if either operand is `NaN',
22478     then it is unspecified which of the two operands is returned as
22479     the result.
22480
22481`reduc_smin_M', `reduc_smax_M'
22482     Find the signed minimum/maximum of the elements of a vector. The
22483     vector is operand 1, and the scalar result is stored in the least
22484     significant bits of operand 0 (also a vector). The output and
22485     input vector should have the same modes.
22486
22487`reduc_umin_M', `reduc_umax_M'
22488     Find the unsigned minimum/maximum of the elements of a vector. The
22489     vector is operand 1, and the scalar result is stored in the least
22490     significant bits of operand 0 (also a vector). The output and
22491     input vector should have the same modes.
22492
22493`reduc_splus_M'
22494     Compute the sum of the signed elements of a vector. The vector is
22495     operand 1, and the scalar result is stored in the least
22496     significant bits of operand 0 (also a vector). The output and
22497     input vector should have the same modes.
22498
22499`reduc_uplus_M'
22500     Compute the sum of the unsigned elements of a vector. The vector
22501     is operand 1, and the scalar result is stored in the least
22502     significant bits of operand 0 (also a vector). The output and
22503     input vector should have the same modes.
22504
22505`sdot_prodM'
22506
22507`udot_prodM'
22508     Compute the sum of the products of two signed/unsigned elements.
22509     Operand 1 and operand 2 are of the same mode. Their product, which
22510     is of a wider mode, is computed and added to operand 3. Operand 3
22511     is of a mode equal or wider than the mode of the product. The
22512     result is placed in operand 0, which is of the same mode as
22513     operand 3.
22514
22515`ssum_widenM3'
22516
22517`usum_widenM3'
22518     Operands 0 and 2 are of the same mode, which is wider than the
22519     mode of operand 1. Add operand 1 to operand 2 and place the
22520     widened result in operand 0. (This is used express accumulation of
22521     elements into an accumulator of a wider mode.)
22522
22523`vec_shl_M', `vec_shr_M'
22524     Whole vector left/right shift in bits.  Operand 1 is a vector to
22525     be shifted.  Operand 2 is an integer shift amount in bits.
22526     Operand 0 is where the resulting shifted vector is stored.  The
22527     output and input vectors should have the same modes.
22528
22529`vec_pack_trunc_M'
22530     Narrow (demote) and merge the elements of two vectors. Operands 1
22531     and 2 are vectors of the same mode having N integral or floating
22532     point elements of size S.  Operand 0 is the resulting vector in
22533     which 2*N elements of size N/2 are concatenated after narrowing
22534     them down using truncation.
22535
22536`vec_pack_ssat_M', `vec_pack_usat_M'
22537     Narrow (demote) and merge the elements of two vectors.  Operands 1
22538     and 2 are vectors of the same mode having N integral elements of
22539     size S.  Operand 0 is the resulting vector in which the elements
22540     of the two input vectors are concatenated after narrowing them
22541     down using signed/unsigned saturating arithmetic.
22542
22543`vec_pack_sfix_trunc_M', `vec_pack_ufix_trunc_M'
22544     Narrow, convert to signed/unsigned integral type and merge the
22545     elements of two vectors.  Operands 1 and 2 are vectors of the same
22546     mode having N floating point elements of size S.  Operand 0 is the
22547     resulting vector in which 2*N elements of size N/2 are
22548     concatenated.
22549
22550`vec_unpacks_hi_M', `vec_unpacks_lo_M'
22551     Extract and widen (promote) the high/low part of a vector of signed
22552     integral or floating point elements.  The input vector (operand 1)
22553     has N elements of size S.  Widen (promote) the high/low elements
22554     of the vector using signed or floating point extension and place
22555     the resulting N/2 values of size 2*S in the output vector (operand
22556     0).
22557
22558`vec_unpacku_hi_M', `vec_unpacku_lo_M'
22559     Extract and widen (promote) the high/low part of a vector of
22560     unsigned integral elements.  The input vector (operand 1) has N
22561     elements of size S.  Widen (promote) the high/low elements of the
22562     vector using zero extension and place the resulting N/2 values of
22563     size 2*S in the output vector (operand 0).
22564
22565`vec_unpacks_float_hi_M', `vec_unpacks_float_lo_M'
22566`vec_unpacku_float_hi_M', `vec_unpacku_float_lo_M'
22567     Extract, convert to floating point type and widen the high/low
22568     part of a vector of signed/unsigned integral elements.  The input
22569     vector (operand 1) has N elements of size S.  Convert the high/low
22570     elements of the vector using floating point conversion and place
22571     the resulting N/2 values of size 2*S in the output vector (operand
22572     0).
22573
22574`vec_widen_umult_hi_M', `vec_widen_umult_lo_M'
22575`vec_widen_smult_hi_M', `vec_widen_smult_lo_M'
22576`vec_widen_umult_even_M', `vec_widen_umult_odd_M'
22577`vec_widen_smult_even_M', `vec_widen_smult_odd_M'
22578     Signed/Unsigned widening multiplication.  The two inputs (operands
22579     1 and 2) are vectors with N signed/unsigned elements of size S.
22580     Multiply the high/low or even/odd elements of the two vectors, and
22581     put the N/2 products of size 2*S in the output vector (operand 0).
22582
22583`vec_widen_ushiftl_hi_M', `vec_widen_ushiftl_lo_M'
22584`vec_widen_sshiftl_hi_M', `vec_widen_sshiftl_lo_M'
22585     Signed/Unsigned widening shift left.  The first input (operand 1)
22586     is a vector with N signed/unsigned elements of size S.  Operand 2
22587     is a constant.  Shift the high/low elements of operand 1, and put
22588     the N/2 results of size 2*S in the output vector (operand 0).
22589
22590`mulhisi3'
22591     Multiply operands 1 and 2, which have mode `HImode', and store a
22592     `SImode' product in operand 0.
22593
22594`mulqihi3', `mulsidi3'
22595     Similar widening-multiplication instructions of other widths.
22596
22597`umulqihi3', `umulhisi3', `umulsidi3'
22598     Similar widening-multiplication instructions that do unsigned
22599     multiplication.
22600
22601`usmulqihi3', `usmulhisi3', `usmulsidi3'
22602     Similar widening-multiplication instructions that interpret the
22603     first operand as unsigned and the second operand as signed, then
22604     do a signed multiplication.
22605
22606`smulM3_highpart'
22607     Perform a signed multiplication of operands 1 and 2, which have
22608     mode M, and store the most significant half of the product in
22609     operand 0.  The least significant half of the product is discarded.
22610
22611`umulM3_highpart'
22612     Similar, but the multiplication is unsigned.
22613
22614`maddMN4'
22615     Multiply operands 1 and 2, sign-extend them to mode N, add operand
22616     3, and store the result in operand 0.  Operands 1 and 2 have mode
22617     M and operands 0 and 3 have mode N.  Both modes must be integer or
22618     fixed-point modes and N must be twice the size of M.
22619
22620     In other words, `maddMN4' is like `mulMN3' except that it also
22621     adds operand 3.
22622
22623     These instructions are not allowed to `FAIL'.
22624
22625`umaddMN4'
22626     Like `maddMN4', but zero-extend the multiplication operands
22627     instead of sign-extending them.
22628
22629`ssmaddMN4'
22630     Like `maddMN4', but all involved operations must be
22631     signed-saturating.
22632
22633`usmaddMN4'
22634     Like `umaddMN4', but all involved operations must be
22635     unsigned-saturating.
22636
22637`msubMN4'
22638     Multiply operands 1 and 2, sign-extend them to mode N, subtract the
22639     result from operand 3, and store the result in operand 0.
22640     Operands 1 and 2 have mode M and operands 0 and 3 have mode N.
22641     Both modes must be integer or fixed-point modes and N must be twice
22642     the size of M.
22643
22644     In other words, `msubMN4' is like `mulMN3' except that it also
22645     subtracts the result from operand 3.
22646
22647     These instructions are not allowed to `FAIL'.
22648
22649`umsubMN4'
22650     Like `msubMN4', but zero-extend the multiplication operands
22651     instead of sign-extending them.
22652
22653`ssmsubMN4'
22654     Like `msubMN4', but all involved operations must be
22655     signed-saturating.
22656
22657`usmsubMN4'
22658     Like `umsubMN4', but all involved operations must be
22659     unsigned-saturating.
22660
22661`divmodM4'
22662     Signed division that produces both a quotient and a remainder.
22663     Operand 1 is divided by operand 2 to produce a quotient stored in
22664     operand 0 and a remainder stored in operand 3.
22665
22666     For machines with an instruction that produces both a quotient and
22667     a remainder, provide a pattern for `divmodM4' but do not provide
22668     patterns for `divM3' and `modM3'.  This allows optimization in the
22669     relatively common case when both the quotient and remainder are
22670     computed.
22671
22672     If an instruction that just produces a quotient or just a remainder
22673     exists and is more efficient than the instruction that produces
22674     both, write the output routine of `divmodM4' to call
22675     `find_reg_note' and look for a `REG_UNUSED' note on the quotient
22676     or remainder and generate the appropriate instruction.
22677
22678`udivmodM4'
22679     Similar, but does unsigned division.
22680
22681`ashlM3', `ssashlM3', `usashlM3'
22682     Arithmetic-shift operand 1 left by a number of bits specified by
22683     operand 2, and store the result in operand 0.  Here M is the mode
22684     of operand 0 and operand 1; operand 2's mode is specified by the
22685     instruction pattern, and the compiler will convert the operand to
22686     that mode before generating the instruction.  The meaning of
22687     out-of-range shift counts can optionally be specified by
22688     `TARGET_SHIFT_TRUNCATION_MASK'.  *Note
22689     TARGET_SHIFT_TRUNCATION_MASK::.  Operand 2 is always a scalar type.
22690
22691`ashrM3', `lshrM3', `rotlM3', `rotrM3'
22692     Other shift and rotate instructions, analogous to the `ashlM3'
22693     instructions.  Operand 2 is always a scalar type.
22694
22695`vashlM3', `vashrM3', `vlshrM3', `vrotlM3', `vrotrM3'
22696     Vector shift and rotate instructions that take vectors as operand 2
22697     instead of a scalar type.
22698
22699`bswapM2'
22700     Reverse the order of bytes of operand 1 and store the result in
22701     operand 0.
22702
22703`negM2', `ssnegM2', `usnegM2'
22704     Negate operand 1 and store the result in operand 0.
22705
22706`absM2'
22707     Store the absolute value of operand 1 into operand 0.
22708
22709`sqrtM2'
22710     Store the square root of operand 1 into operand 0.
22711
22712     The `sqrt' built-in function of C always uses the mode which
22713     corresponds to the C data type `double' and the `sqrtf' built-in
22714     function uses the mode which corresponds to the C data type
22715     `float'.
22716
22717`fmodM3'
22718     Store the remainder of dividing operand 1 by operand 2 into
22719     operand 0, rounded towards zero to an integer.
22720
22721     The `fmod' built-in function of C always uses the mode which
22722     corresponds to the C data type `double' and the `fmodf' built-in
22723     function uses the mode which corresponds to the C data type
22724     `float'.
22725
22726`remainderM3'
22727     Store the remainder of dividing operand 1 by operand 2 into
22728     operand 0, rounded to the nearest integer.
22729
22730     The `remainder' built-in function of C always uses the mode which
22731     corresponds to the C data type `double' and the `remainderf'
22732     built-in function uses the mode which corresponds to the C data
22733     type `float'.
22734
22735`cosM2'
22736     Store the cosine of operand 1 into operand 0.
22737
22738     The `cos' built-in function of C always uses the mode which
22739     corresponds to the C data type `double' and the `cosf' built-in
22740     function uses the mode which corresponds to the C data type
22741     `float'.
22742
22743`sinM2'
22744     Store the sine of operand 1 into operand 0.
22745
22746     The `sin' built-in function of C always uses the mode which
22747     corresponds to the C data type `double' and the `sinf' built-in
22748     function uses the mode which corresponds to the C data type
22749     `float'.
22750
22751`sincosM3'
22752     Store the cosine of operand 2 into operand 0 and the sine of
22753     operand 2 into operand 1.
22754
22755     The `sin' and `cos' built-in functions of C always use the mode
22756     which corresponds to the C data type `double' and the `sinf' and
22757     `cosf' built-in function use the mode which corresponds to the C
22758     data type `float'.  Targets that can calculate the sine and cosine
22759     simultaneously can implement this pattern as opposed to
22760     implementing individual `sinM2' and `cosM2' patterns.  The `sin'
22761     and `cos' built-in functions will then be expanded to the
22762     `sincosM3' pattern, with one of the output values left unused.
22763
22764`expM2'
22765     Store the exponential of operand 1 into operand 0.
22766
22767     The `exp' built-in function of C always uses the mode which
22768     corresponds to the C data type `double' and the `expf' built-in
22769     function uses the mode which corresponds to the C data type
22770     `float'.
22771
22772`logM2'
22773     Store the natural logarithm of operand 1 into operand 0.
22774
22775     The `log' built-in function of C always uses the mode which
22776     corresponds to the C data type `double' and the `logf' built-in
22777     function uses the mode which corresponds to the C data type
22778     `float'.
22779
22780`powM3'
22781     Store the value of operand 1 raised to the exponent operand 2 into
22782     operand 0.
22783
22784     The `pow' built-in function of C always uses the mode which
22785     corresponds to the C data type `double' and the `powf' built-in
22786     function uses the mode which corresponds to the C data type
22787     `float'.
22788
22789`atan2M3'
22790     Store the arc tangent (inverse tangent) of operand 1 divided by
22791     operand 2 into operand 0, using the signs of both arguments to
22792     determine the quadrant of the result.
22793
22794     The `atan2' built-in function of C always uses the mode which
22795     corresponds to the C data type `double' and the `atan2f' built-in
22796     function uses the mode which corresponds to the C data type
22797     `float'.
22798
22799`floorM2'
22800     Store the largest integral value not greater than argument.
22801
22802     The `floor' built-in function of C always uses the mode which
22803     corresponds to the C data type `double' and the `floorf' built-in
22804     function uses the mode which corresponds to the C data type
22805     `float'.
22806
22807`btruncM2'
22808     Store the argument rounded to integer towards zero.
22809
22810     The `trunc' built-in function of C always uses the mode which
22811     corresponds to the C data type `double' and the `truncf' built-in
22812     function uses the mode which corresponds to the C data type
22813     `float'.
22814
22815`roundM2'
22816     Store the argument rounded to integer away from zero.
22817
22818     The `round' built-in function of C always uses the mode which
22819     corresponds to the C data type `double' and the `roundf' built-in
22820     function uses the mode which corresponds to the C data type
22821     `float'.
22822
22823`ceilM2'
22824     Store the argument rounded to integer away from zero.
22825
22826     The `ceil' built-in function of C always uses the mode which
22827     corresponds to the C data type `double' and the `ceilf' built-in
22828     function uses the mode which corresponds to the C data type
22829     `float'.
22830
22831`nearbyintM2'
22832     Store the argument rounded according to the default rounding mode
22833
22834     The `nearbyint' built-in function of C always uses the mode which
22835     corresponds to the C data type `double' and the `nearbyintf'
22836     built-in function uses the mode which corresponds to the C data
22837     type `float'.
22838
22839`rintM2'
22840     Store the argument rounded according to the default rounding mode
22841     and raise the inexact exception when the result differs in value
22842     from the argument
22843
22844     The `rint' built-in function of C always uses the mode which
22845     corresponds to the C data type `double' and the `rintf' built-in
22846     function uses the mode which corresponds to the C data type
22847     `float'.
22848
22849`lrintMN2'
22850     Convert operand 1 (valid for floating point mode M) to fixed point
22851     mode N as a signed number according to the current rounding mode
22852     and store in operand 0 (which has mode N).
22853
22854`lroundMN2'
22855     Convert operand 1 (valid for floating point mode M) to fixed point
22856     mode N as a signed number rounding to nearest and away from zero
22857     and store in operand 0 (which has mode N).
22858
22859`lfloorMN2'
22860     Convert operand 1 (valid for floating point mode M) to fixed point
22861     mode N as a signed number rounding down and store in operand 0
22862     (which has mode N).
22863
22864`lceilMN2'
22865     Convert operand 1 (valid for floating point mode M) to fixed point
22866     mode N as a signed number rounding up and store in operand 0
22867     (which has mode N).
22868
22869`copysignM3'
22870     Store a value with the magnitude of operand 1 and the sign of
22871     operand 2 into operand 0.
22872
22873     The `copysign' built-in function of C always uses the mode which
22874     corresponds to the C data type `double' and the `copysignf'
22875     built-in function uses the mode which corresponds to the C data
22876     type `float'.
22877
22878`ffsM2'
22879     Store into operand 0 one plus the index of the least significant
22880     1-bit of operand 1.  If operand 1 is zero, store zero.  M is the
22881     mode of operand 0; operand 1's mode is specified by the instruction
22882     pattern, and the compiler will convert the operand to that mode
22883     before generating the instruction.
22884
22885     The `ffs' built-in function of C always uses the mode which
22886     corresponds to the C data type `int'.
22887
22888`clzM2'
22889     Store into operand 0 the number of leading 0-bits in X, starting
22890     at the most significant bit position.  If X is 0, the
22891     `CLZ_DEFINED_VALUE_AT_ZERO' (*note Misc::) macro defines if the
22892     result is undefined or has a useful value.  M is the mode of
22893     operand 0; operand 1's mode is specified by the instruction
22894     pattern, and the compiler will convert the operand to that mode
22895     before generating the instruction.
22896
22897`ctzM2'
22898     Store into operand 0 the number of trailing 0-bits in X, starting
22899     at the least significant bit position.  If X is 0, the
22900     `CTZ_DEFINED_VALUE_AT_ZERO' (*note Misc::) macro defines if the
22901     result is undefined or has a useful value.  M is the mode of
22902     operand 0; operand 1's mode is specified by the instruction
22903     pattern, and the compiler will convert the operand to that mode
22904     before generating the instruction.
22905
22906`popcountM2'
22907     Store into operand 0 the number of 1-bits in X.  M is the mode of
22908     operand 0; operand 1's mode is specified by the instruction
22909     pattern, and the compiler will convert the operand to that mode
22910     before generating the instruction.
22911
22912`parityM2'
22913     Store into operand 0 the parity of X, i.e. the number of 1-bits in
22914     X modulo 2.  M is the mode of operand 0; operand 1's mode is
22915     specified by the instruction pattern, and the compiler will convert
22916     the operand to that mode before generating the instruction.
22917
22918`one_cmplM2'
22919     Store the bitwise-complement of operand 1 into operand 0.
22920
22921`movmemM'
22922     Block move instruction.  The destination and source blocks of
22923     memory are the first two operands, and both are `mem:BLK's with an
22924     address in mode `Pmode'.
22925
22926     The number of bytes to move is the third operand, in mode M.
22927     Usually, you specify `word_mode' for M.  However, if you can
22928     generate better code knowing the range of valid lengths is smaller
22929     than those representable in a full word, you should provide a
22930     pattern with a mode corresponding to the range of values you can
22931     handle efficiently (e.g., `QImode' for values in the range 0-127;
22932     note we avoid numbers that appear negative) and also a pattern
22933     with `word_mode'.
22934
22935     The fourth operand is the known shared alignment of the source and
22936     destination, in the form of a `const_int' rtx.  Thus, if the
22937     compiler knows that both source and destination are word-aligned,
22938     it may provide the value 4 for this operand.
22939
22940     Optional operands 5 and 6 specify expected alignment and size of
22941     block respectively.  The expected alignment differs from alignment
22942     in operand 4 in a way that the blocks are not required to be
22943     aligned according to it in all cases. This expected alignment is
22944     also in bytes, just like operand 4.  Expected size, when unknown,
22945     is set to `(const_int -1)'.
22946
22947     Descriptions of multiple `movmemM' patterns can only be beneficial
22948     if the patterns for smaller modes have fewer restrictions on their
22949     first, second and fourth operands.  Note that the mode M in
22950     `movmemM' does not impose any restriction on the mode of
22951     individually moved data units in the block.
22952
22953     These patterns need not give special consideration to the
22954     possibility that the source and destination strings might overlap.
22955
22956`movstr'
22957     String copy instruction, with `stpcpy' semantics.  Operand 0 is an
22958     output operand in mode `Pmode'.  The addresses of the destination
22959     and source strings are operands 1 and 2, and both are `mem:BLK's
22960     with addresses in mode `Pmode'.  The execution of the expansion of
22961     this pattern should store in operand 0 the address in which the
22962     `NUL' terminator was stored in the destination string.
22963
22964`setmemM'
22965     Block set instruction.  The destination string is the first
22966     operand, given as a `mem:BLK' whose address is in mode `Pmode'.
22967     The number of bytes to set is the second operand, in mode M.  The
22968     value to initialize the memory with is the third operand. Targets
22969     that only support the clearing of memory should reject any value
22970     that is not the constant 0.  See `movmemM' for a discussion of the
22971     choice of mode.
22972
22973     The fourth operand is the known alignment of the destination, in
22974     the form of a `const_int' rtx.  Thus, if the compiler knows that
22975     the destination is word-aligned, it may provide the value 4 for
22976     this operand.
22977
22978     Optional operands 5 and 6 specify expected alignment and size of
22979     block respectively.  The expected alignment differs from alignment
22980     in operand 4 in a way that the blocks are not required to be
22981     aligned according to it in all cases. This expected alignment is
22982     also in bytes, just like operand 4.  Expected size, when unknown,
22983     is set to `(const_int -1)'.
22984
22985     The use for multiple `setmemM' is as for `movmemM'.
22986
22987`cmpstrnM'
22988     String compare instruction, with five operands.  Operand 0 is the
22989     output; it has mode M.  The remaining four operands are like the
22990     operands of `movmemM'.  The two memory blocks specified are
22991     compared byte by byte in lexicographic order starting at the
22992     beginning of each string.  The instruction is not allowed to
22993     prefetch more than one byte at a time since either string may end
22994     in the first byte and reading past that may access an invalid page
22995     or segment and cause a fault.  The comparison terminates early if
22996     the fetched bytes are different or if they are equal to zero.  The
22997     effect of the instruction is to store a value in operand 0 whose
22998     sign indicates the result of the comparison.
22999
23000`cmpstrM'
23001     String compare instruction, without known maximum length.  Operand
23002     0 is the output; it has mode M.  The second and third operand are
23003     the blocks of memory to be compared; both are `mem:BLK' with an
23004     address in mode `Pmode'.
23005
23006     The fourth operand is the known shared alignment of the source and
23007     destination, in the form of a `const_int' rtx.  Thus, if the
23008     compiler knows that both source and destination are word-aligned,
23009     it may provide the value 4 for this operand.
23010
23011     The two memory blocks specified are compared byte by byte in
23012     lexicographic order starting at the beginning of each string.  The
23013     instruction is not allowed to prefetch more than one byte at a
23014     time since either string may end in the first byte and reading
23015     past that may access an invalid page or segment and cause a fault.
23016     The comparison will terminate when the fetched bytes are different
23017     or if they are equal to zero.  The effect of the instruction is to
23018     store a value in operand 0 whose sign indicates the result of the
23019     comparison.
23020
23021`cmpmemM'
23022     Block compare instruction, with five operands like the operands of
23023     `cmpstrM'.  The two memory blocks specified are compared byte by
23024     byte in lexicographic order starting at the beginning of each
23025     block.  Unlike `cmpstrM' the instruction can prefetch any bytes in
23026     the two memory blocks.  Also unlike `cmpstrM' the comparison will
23027     not stop if both bytes are zero.  The effect of the instruction is
23028     to store a value in operand 0 whose sign indicates the result of
23029     the comparison.
23030
23031`strlenM'
23032     Compute the length of a string, with three operands.  Operand 0 is
23033     the result (of mode M), operand 1 is a `mem' referring to the
23034     first character of the string, operand 2 is the character to
23035     search for (normally zero), and operand 3 is a constant describing
23036     the known alignment of the beginning of the string.
23037
23038`floatMN2'
23039     Convert signed integer operand 1 (valid for fixed point mode M) to
23040     floating point mode N and store in operand 0 (which has mode N).
23041
23042`floatunsMN2'
23043     Convert unsigned integer operand 1 (valid for fixed point mode M)
23044     to floating point mode N and store in operand 0 (which has mode N).
23045
23046`fixMN2'
23047     Convert operand 1 (valid for floating point mode M) to fixed point
23048     mode N as a signed number and store in operand 0 (which has mode
23049     N).  This instruction's result is defined only when the value of
23050     operand 1 is an integer.
23051
23052     If the machine description defines this pattern, it also needs to
23053     define the `ftrunc' pattern.
23054
23055`fixunsMN2'
23056     Convert operand 1 (valid for floating point mode M) to fixed point
23057     mode N as an unsigned number and store in operand 0 (which has
23058     mode N).  This instruction's result is defined only when the value
23059     of operand 1 is an integer.
23060
23061`ftruncM2'
23062     Convert operand 1 (valid for floating point mode M) to an integer
23063     value, still represented in floating point mode M, and store it in
23064     operand 0 (valid for floating point mode M).
23065
23066`fix_truncMN2'
23067     Like `fixMN2' but works for any floating point value of mode M by
23068     converting the value to an integer.
23069
23070`fixuns_truncMN2'
23071     Like `fixunsMN2' but works for any floating point value of mode M
23072     by converting the value to an integer.
23073
23074`truncMN2'
23075     Truncate operand 1 (valid for mode M) to mode N and store in
23076     operand 0 (which has mode N).  Both modes must be fixed point or
23077     both floating point.
23078
23079`extendMN2'
23080     Sign-extend operand 1 (valid for mode M) to mode N and store in
23081     operand 0 (which has mode N).  Both modes must be fixed point or
23082     both floating point.
23083
23084`zero_extendMN2'
23085     Zero-extend operand 1 (valid for mode M) to mode N and store in
23086     operand 0 (which has mode N).  Both modes must be fixed point.
23087
23088`fractMN2'
23089     Convert operand 1 of mode M to mode N and store in operand 0
23090     (which has mode N).  Mode M and mode N could be fixed-point to
23091     fixed-point, signed integer to fixed-point, fixed-point to signed
23092     integer, floating-point to fixed-point, or fixed-point to
23093     floating-point.  When overflows or underflows happen, the results
23094     are undefined.
23095
23096`satfractMN2'
23097     Convert operand 1 of mode M to mode N and store in operand 0
23098     (which has mode N).  Mode M and mode N could be fixed-point to
23099     fixed-point, signed integer to fixed-point, or floating-point to
23100     fixed-point.  When overflows or underflows happen, the instruction
23101     saturates the results to the maximum or the minimum.
23102
23103`fractunsMN2'
23104     Convert operand 1 of mode M to mode N and store in operand 0
23105     (which has mode N).  Mode M and mode N could be unsigned integer
23106     to fixed-point, or fixed-point to unsigned integer.  When
23107     overflows or underflows happen, the results are undefined.
23108
23109`satfractunsMN2'
23110     Convert unsigned integer operand 1 of mode M to fixed-point mode N
23111     and store in operand 0 (which has mode N).  When overflows or
23112     underflows happen, the instruction saturates the results to the
23113     maximum or the minimum.
23114
23115`extvM'
23116     Extract a bit-field from register operand 1, sign-extend it, and
23117     store it in operand 0.  Operand 2 specifies the width of the field
23118     in bits and operand 3 the starting bit, which counts from the most
23119     significant bit if `BITS_BIG_ENDIAN' is true and from the least
23120     significant bit otherwise.
23121
23122     Operands 0 and 1 both have mode M.  Operands 2 and 3 have a
23123     target-specific mode.
23124
23125`extvmisalignM'
23126     Extract a bit-field from memory operand 1, sign extend it, and
23127     store it in operand 0.  Operand 2 specifies the width in bits and
23128     operand 3 the starting bit.  The starting bit is always somewhere
23129     in the first byte of operand 1; it counts from the most
23130     significant bit if `BITS_BIG_ENDIAN' is true and from the least
23131     significant bit otherwise.
23132
23133     Operand 0 has mode M while operand 1 has `BLK' mode.  Operands 2
23134     and 3 have a target-specific mode.
23135
23136     The instruction must not read beyond the last byte of the
23137     bit-field.
23138
23139`extzvM'
23140     Like `extvM' except that the bit-field value is zero-extended.
23141
23142`extzvmisalignM'
23143     Like `extvmisalignM' except that the bit-field value is
23144     zero-extended.
23145
23146`insvM'
23147     Insert operand 3 into a bit-field of register operand 0.  Operand 1
23148     specifies the width of the field in bits and operand 2 the
23149     starting bit, which counts from the most significant bit if
23150     `BITS_BIG_ENDIAN' is true and from the least significant bit
23151     otherwise.
23152
23153     Operands 0 and 3 both have mode M.  Operands 1 and 2 have a
23154     target-specific mode.
23155
23156`insvmisalignM'
23157     Insert operand 3 into a bit-field of memory operand 0.  Operand 1
23158     specifies the width of the field in bits and operand 2 the
23159     starting bit.  The starting bit is always somewhere in the first
23160     byte of operand 0; it counts from the most significant bit if
23161     `BITS_BIG_ENDIAN' is true and from the least significant bit
23162     otherwise.
23163
23164     Operand 3 has mode M while operand 0 has `BLK' mode.  Operands 1
23165     and 2 have a target-specific mode.
23166
23167     The instruction must not read or write beyond the last byte of the
23168     bit-field.
23169
23170`extv'
23171     Extract a bit-field from operand 1 (a register or memory operand),
23172     where operand 2 specifies the width in bits and operand 3 the
23173     starting bit, and store it in operand 0.  Operand 0 must have mode
23174     `word_mode'.  Operand 1 may have mode `byte_mode' or `word_mode';
23175     often `word_mode' is allowed only for registers.  Operands 2 and 3
23176     must be valid for `word_mode'.
23177
23178     The RTL generation pass generates this instruction only with
23179     constants for operands 2 and 3 and the constant is never zero for
23180     operand 2.
23181
23182     The bit-field value is sign-extended to a full word integer before
23183     it is stored in operand 0.
23184
23185     This pattern is deprecated; please use `extvM' and `extvmisalignM'
23186     instead.
23187
23188`extzv'
23189     Like `extv' except that the bit-field value is zero-extended.
23190
23191     This pattern is deprecated; please use `extzvM' and
23192     `extzvmisalignM' instead.
23193
23194`insv'
23195     Store operand 3 (which must be valid for `word_mode') into a
23196     bit-field in operand 0, where operand 1 specifies the width in
23197     bits and operand 2 the starting bit.  Operand 0 may have mode
23198     `byte_mode' or `word_mode'; often `word_mode' is allowed only for
23199     registers.  Operands 1 and 2 must be valid for `word_mode'.
23200
23201     The RTL generation pass generates this instruction only with
23202     constants for operands 1 and 2 and the constant is never zero for
23203     operand 1.
23204
23205     This pattern is deprecated; please use `insvM' and `insvmisalignM'
23206     instead.
23207
23208`movMODEcc'
23209     Conditionally move operand 2 or operand 3 into operand 0 according
23210     to the comparison in operand 1.  If the comparison is true,
23211     operand 2 is moved into operand 0, otherwise operand 3 is moved.
23212
23213     The mode of the operands being compared need not be the same as
23214     the operands being moved.  Some machines, sparc64 for example,
23215     have instructions that conditionally move an integer value based
23216     on the floating point condition codes and vice versa.
23217
23218     If the machine does not have conditional move instructions, do not
23219     define these patterns.
23220
23221`addMODEcc'
23222     Similar to `movMODEcc' but for conditional addition.  Conditionally
23223     move operand 2 or (operands 2 + operand 3) into operand 0
23224     according to the comparison in operand 1.  If the comparison is
23225     false, operand 2 is moved into operand 0, otherwise (operand 2 +
23226     operand 3) is moved.
23227
23228`cstoreMODE4'
23229     Store zero or nonzero in operand 0 according to whether a
23230     comparison is true.  Operand 1 is a comparison operator.  Operand
23231     2 and operand 3 are the first and second operand of the
23232     comparison, respectively.  You specify the mode that operand 0
23233     must have when you write the `match_operand' expression.  The
23234     compiler automatically sees which mode you have used and supplies
23235     an operand of that mode.
23236
23237     The value stored for a true condition must have 1 as its low bit,
23238     or else must be negative.  Otherwise the instruction is not
23239     suitable and you should omit it from the machine description.  You
23240     describe to the compiler exactly which value is stored by defining
23241     the macro `STORE_FLAG_VALUE' (*note Misc::).  If a description
23242     cannot be found that can be used for all the possible comparison
23243     operators, you should pick one and use a `define_expand' to map
23244     all results onto the one you chose.
23245
23246     These operations may `FAIL', but should do so only in relatively
23247     uncommon cases; if they would `FAIL' for common cases involving
23248     integer comparisons, it is best to restrict the predicates to not
23249     allow these operands.  Likewise if a given comparison operator will
23250     always fail, independent of the operands (for floating-point
23251     modes, the `ordered_comparison_operator' predicate is often useful
23252     in this case).
23253
23254     If this pattern is omitted, the compiler will generate a
23255     conditional branch--for example, it may copy a constant one to the
23256     target and branching around an assignment of zero to the
23257     target--or a libcall.  If the predicate for operand 1 only rejects
23258     some operators, it will also try reordering the operands and/or
23259     inverting the result value (e.g. by an exclusive OR).  These
23260     possibilities could be cheaper or equivalent to the instructions
23261     used for the `cstoreMODE4' pattern followed by those required to
23262     convert a positive result from `STORE_FLAG_VALUE' to 1; in this
23263     case, you can and should make operand 1's predicate reject some
23264     operators in the `cstoreMODE4' pattern, or remove the pattern
23265     altogether from the machine description.
23266
23267`cbranchMODE4'
23268     Conditional branch instruction combined with a compare instruction.
23269     Operand 0 is a comparison operator.  Operand 1 and operand 2 are
23270     the first and second operands of the comparison, respectively.
23271     Operand 3 is a `label_ref' that refers to the label to jump to.
23272
23273`jump'
23274     A jump inside a function; an unconditional branch.  Operand 0 is
23275     the `label_ref' of the label to jump to.  This pattern name is
23276     mandatory on all machines.
23277
23278`call'
23279     Subroutine call instruction returning no value.  Operand 0 is the
23280     function to call; operand 1 is the number of bytes of arguments
23281     pushed as a `const_int'; operand 2 is the number of registers used
23282     as operands.
23283
23284     On most machines, operand 2 is not actually stored into the RTL
23285     pattern.  It is supplied for the sake of some RISC machines which
23286     need to put this information into the assembler code; they can put
23287     it in the RTL instead of operand 1.
23288
23289     Operand 0 should be a `mem' RTX whose address is the address of the
23290     function.  Note, however, that this address can be a `symbol_ref'
23291     expression even if it would not be a legitimate memory address on
23292     the target machine.  If it is also not a valid argument for a call
23293     instruction, the pattern for this operation should be a
23294     `define_expand' (*note Expander Definitions::) that places the
23295     address into a register and uses that register in the call
23296     instruction.
23297
23298`call_value'
23299     Subroutine call instruction returning a value.  Operand 0 is the
23300     hard register in which the value is returned.  There are three more
23301     operands, the same as the three operands of the `call' instruction
23302     (but with numbers increased by one).
23303
23304     Subroutines that return `BLKmode' objects use the `call' insn.
23305
23306`call_pop', `call_value_pop'
23307     Similar to `call' and `call_value', except used if defined and if
23308     `RETURN_POPS_ARGS' is nonzero.  They should emit a `parallel' that
23309     contains both the function call and a `set' to indicate the
23310     adjustment made to the frame pointer.
23311
23312     For machines where `RETURN_POPS_ARGS' can be nonzero, the use of
23313     these patterns increases the number of functions for which the
23314     frame pointer can be eliminated, if desired.
23315
23316`untyped_call'
23317     Subroutine call instruction returning a value of any type.
23318     Operand 0 is the function to call; operand 1 is a memory location
23319     where the result of calling the function is to be stored; operand
23320     2 is a `parallel' expression where each element is a `set'
23321     expression that indicates the saving of a function return value
23322     into the result block.
23323
23324     This instruction pattern should be defined to support
23325     `__builtin_apply' on machines where special instructions are needed
23326     to call a subroutine with arbitrary arguments or to save the value
23327     returned.  This instruction pattern is required on machines that
23328     have multiple registers that can hold a return value (i.e.
23329     `FUNCTION_VALUE_REGNO_P' is true for more than one register).
23330
23331`return'
23332     Subroutine return instruction.  This instruction pattern name
23333     should be defined only if a single instruction can do all the work
23334     of returning from a function.
23335
23336     Like the `movM' patterns, this pattern is also used after the RTL
23337     generation phase.  In this case it is to support machines where
23338     multiple instructions are usually needed to return from a
23339     function, but some class of functions only requires one
23340     instruction to implement a return.  Normally, the applicable
23341     functions are those which do not need to save any registers or
23342     allocate stack space.
23343
23344     It is valid for this pattern to expand to an instruction using
23345     `simple_return' if no epilogue is required.
23346
23347`simple_return'
23348     Subroutine return instruction.  This instruction pattern name
23349     should be defined only if a single instruction can do all the work
23350     of returning from a function on a path where no epilogue is
23351     required.  This pattern is very similar to the `return'
23352     instruction pattern, but it is emitted only by the shrink-wrapping
23353     optimization on paths where the function prologue has not been
23354     executed, and a function return should occur without any of the
23355     effects of the epilogue.  Additional uses may be introduced on
23356     paths where both the prologue and the epilogue have executed.
23357
23358     For such machines, the condition specified in this pattern should
23359     only be true when `reload_completed' is nonzero and the function's
23360     epilogue would only be a single instruction.  For machines with
23361     register windows, the routine `leaf_function_p' may be used to
23362     determine if a register window push is required.
23363
23364     Machines that have conditional return instructions should define
23365     patterns such as
23366
23367          (define_insn ""
23368            [(set (pc)
23369                  (if_then_else (match_operator
23370                                   0 "comparison_operator"
23371                                   [(cc0) (const_int 0)])
23372                                (return)
23373                                (pc)))]
23374            "CONDITION"
23375            "...")
23376
23377     where CONDITION would normally be the same condition specified on
23378     the named `return' pattern.
23379
23380`untyped_return'
23381     Untyped subroutine return instruction.  This instruction pattern
23382     should be defined to support `__builtin_return' on machines where
23383     special instructions are needed to return a value of any type.
23384
23385     Operand 0 is a memory location where the result of calling a
23386     function with `__builtin_apply' is stored; operand 1 is a
23387     `parallel' expression where each element is a `set' expression
23388     that indicates the restoring of a function return value from the
23389     result block.
23390
23391`nop'
23392     No-op instruction.  This instruction pattern name should always be
23393     defined to output a no-op in assembler code.  `(const_int 0)' will
23394     do as an RTL pattern.
23395
23396`indirect_jump'
23397     An instruction to jump to an address which is operand zero.  This
23398     pattern name is mandatory on all machines.
23399
23400`casesi'
23401     Instruction to jump through a dispatch table, including bounds
23402     checking.  This instruction takes five operands:
23403
23404       1. The index to dispatch on, which has mode `SImode'.
23405
23406       2. The lower bound for indices in the table, an integer constant.
23407
23408       3. The total range of indices in the table--the largest index
23409          minus the smallest one (both inclusive).
23410
23411       4. A label that precedes the table itself.
23412
23413       5. A label to jump to if the index has a value outside the
23414          bounds.
23415
23416     The table is an `addr_vec' or `addr_diff_vec' inside of a
23417     `jump_insn'.  The number of elements in the table is one plus the
23418     difference between the upper bound and the lower bound.
23419
23420`tablejump'
23421     Instruction to jump to a variable address.  This is a low-level
23422     capability which can be used to implement a dispatch table when
23423     there is no `casesi' pattern.
23424
23425     This pattern requires two operands: the address or offset, and a
23426     label which should immediately precede the jump table.  If the
23427     macro `CASE_VECTOR_PC_RELATIVE' evaluates to a nonzero value then
23428     the first operand is an offset which counts from the address of
23429     the table; otherwise, it is an absolute address to jump to.  In
23430     either case, the first operand has mode `Pmode'.
23431
23432     The `tablejump' insn is always the last insn before the jump table
23433     it uses.  Its assembler code normally has no need to use the
23434     second operand, but you should incorporate it in the RTL pattern so
23435     that the jump optimizer will not delete the table as unreachable
23436     code.
23437
23438`decrement_and_branch_until_zero'
23439     Conditional branch instruction that decrements a register and
23440     jumps if the register is nonzero.  Operand 0 is the register to
23441     decrement and test; operand 1 is the label to jump to if the
23442     register is nonzero.  *Note Looping Patterns::.
23443
23444     This optional instruction pattern is only used by the combiner,
23445     typically for loops reversed by the loop optimizer when strength
23446     reduction is enabled.
23447
23448`doloop_end'
23449     Conditional branch instruction that decrements a register and
23450     jumps if the register is nonzero.  This instruction takes five
23451     operands: Operand 0 is the register to decrement and test; operand
23452     1 is the number of loop iterations as a `const_int' or
23453     `const0_rtx' if this cannot be determined until run-time; operand
23454     2 is the actual or estimated maximum number of iterations as a
23455     `const_int'; operand 3 is the number of enclosed loops as a
23456     `const_int' (an innermost loop has a value of 1); operand 4 is the
23457     label to jump to if the register is nonzero; operand 5 is
23458     const1_rtx if the loop in entered at its top, const0_rtx otherwise.
23459     *Note Looping Patterns::.
23460
23461     This optional instruction pattern should be defined for machines
23462     with low-overhead looping instructions as the loop optimizer will
23463     try to modify suitable loops to utilize it.  If nested
23464     low-overhead looping is not supported, use a `define_expand'
23465     (*note Expander Definitions::) and make the pattern fail if
23466     operand 3 is not `const1_rtx'.  Similarly, if the actual or
23467     estimated maximum number of iterations is too large for this
23468     instruction, make it fail.
23469
23470`doloop_begin'
23471     Companion instruction to `doloop_end' required for machines that
23472     need to perform some initialization, such as loading special
23473     registers used by a low-overhead looping instruction.  If
23474     initialization insns do not always need to be emitted, use a
23475     `define_expand' (*note Expander Definitions::) and make it fail.
23476
23477`canonicalize_funcptr_for_compare'
23478     Canonicalize the function pointer in operand 1 and store the result
23479     into operand 0.
23480
23481     Operand 0 is always a `reg' and has mode `Pmode'; operand 1 may be
23482     a `reg', `mem', `symbol_ref', `const_int', etc and also has mode
23483     `Pmode'.
23484
23485     Canonicalization of a function pointer usually involves computing
23486     the address of the function which would be called if the function
23487     pointer were used in an indirect call.
23488
23489     Only define this pattern if function pointers on the target machine
23490     can have different values but still call the same function when
23491     used in an indirect call.
23492
23493`save_stack_block'
23494`save_stack_function'
23495`save_stack_nonlocal'
23496`restore_stack_block'
23497`restore_stack_function'
23498`restore_stack_nonlocal'
23499     Most machines save and restore the stack pointer by copying it to
23500     or from an object of mode `Pmode'.  Do not define these patterns on
23501     such machines.
23502
23503     Some machines require special handling for stack pointer saves and
23504     restores.  On those machines, define the patterns corresponding to
23505     the non-standard cases by using a `define_expand' (*note Expander
23506     Definitions::) that produces the required insns.  The three types
23507     of saves and restores are:
23508
23509       1. `save_stack_block' saves the stack pointer at the start of a
23510          block that allocates a variable-sized object, and
23511          `restore_stack_block' restores the stack pointer when the
23512          block is exited.
23513
23514       2. `save_stack_function' and `restore_stack_function' do a
23515          similar job for the outermost block of a function and are
23516          used when the function allocates variable-sized objects or
23517          calls `alloca'.  Only the epilogue uses the restored stack
23518          pointer, allowing a simpler save or restore sequence on some
23519          machines.
23520
23521       3. `save_stack_nonlocal' is used in functions that contain labels
23522          branched to by nested functions.  It saves the stack pointer
23523          in such a way that the inner function can use
23524          `restore_stack_nonlocal' to restore the stack pointer.  The
23525          compiler generates code to restore the frame and argument
23526          pointer registers, but some machines require saving and
23527          restoring additional data such as register window information
23528          or stack backchains.  Place insns in these patterns to save
23529          and restore any such required data.
23530
23531     When saving the stack pointer, operand 0 is the save area and
23532     operand 1 is the stack pointer.  The mode used to allocate the
23533     save area defaults to `Pmode' but you can override that choice by
23534     defining the `STACK_SAVEAREA_MODE' macro (*note Storage Layout::).
23535     You must specify an integral mode, or `VOIDmode' if no save area
23536     is needed for a particular type of save (either because no save is
23537     needed or because a machine-specific save area can be used).
23538     Operand 0 is the stack pointer and operand 1 is the save area for
23539     restore operations.  If `save_stack_block' is defined, operand 0
23540     must not be `VOIDmode' since these saves can be arbitrarily nested.
23541
23542     A save area is a `mem' that is at a constant offset from
23543     `virtual_stack_vars_rtx' when the stack pointer is saved for use by
23544     nonlocal gotos and a `reg' in the other two cases.
23545
23546`allocate_stack'
23547     Subtract (or add if `STACK_GROWS_DOWNWARD' is undefined) operand 1
23548     from the stack pointer to create space for dynamically allocated
23549     data.
23550
23551     Store the resultant pointer to this space into operand 0.  If you
23552     are allocating space from the main stack, do this by emitting a
23553     move insn to copy `virtual_stack_dynamic_rtx' to operand 0.  If
23554     you are allocating the space elsewhere, generate code to copy the
23555     location of the space to operand 0.  In the latter case, you must
23556     ensure this space gets freed when the corresponding space on the
23557     main stack is free.
23558
23559     Do not define this pattern if all that must be done is the
23560     subtraction.  Some machines require other operations such as stack
23561     probes or maintaining the back chain.  Define this pattern to emit
23562     those operations in addition to updating the stack pointer.
23563
23564`check_stack'
23565     If stack checking (*note Stack Checking::) cannot be done on your
23566     system by probing the stack, define this pattern to perform the
23567     needed check and signal an error if the stack has overflowed.  The
23568     single operand is the address in the stack farthest from the
23569     current stack pointer that you need to validate.  Normally, on
23570     platforms where this pattern is needed, you would obtain the stack
23571     limit from a global or thread-specific variable or register.
23572
23573`probe_stack_address'
23574     If stack checking (*note Stack Checking::) can be done on your
23575     system by probing the stack but without the need to actually
23576     access it, define this pattern and signal an error if the stack
23577     has overflowed.  The single operand is the memory address in the
23578     stack that needs to be probed.
23579
23580`probe_stack'
23581     If stack checking (*note Stack Checking::) can be done on your
23582     system by probing the stack but doing it with a "store zero"
23583     instruction is not valid or optimal, define this pattern to do the
23584     probing differently and signal an error if the stack has
23585     overflowed.  The single operand is the memory reference in the
23586     stack that needs to be probed.
23587
23588`nonlocal_goto'
23589     Emit code to generate a non-local goto, e.g., a jump from one
23590     function to a label in an outer function.  This pattern has four
23591     arguments, each representing a value to be used in the jump.  The
23592     first argument is to be loaded into the frame pointer, the second
23593     is the address to branch to (code to dispatch to the actual label),
23594     the third is the address of a location where the stack is saved,
23595     and the last is the address of the label, to be placed in the
23596     location for the incoming static chain.
23597
23598     On most machines you need not define this pattern, since GCC will
23599     already generate the correct code, which is to load the frame
23600     pointer and static chain, restore the stack (using the
23601     `restore_stack_nonlocal' pattern, if defined), and jump indirectly
23602     to the dispatcher.  You need only define this pattern if this code
23603     will not work on your machine.
23604
23605`nonlocal_goto_receiver'
23606     This pattern, if defined, contains code needed at the target of a
23607     nonlocal goto after the code already generated by GCC.  You will
23608     not normally need to define this pattern.  A typical reason why
23609     you might need this pattern is if some value, such as a pointer to
23610     a global table, must be restored when the frame pointer is
23611     restored.  Note that a nonlocal goto only occurs within a
23612     unit-of-translation, so a global table pointer that is shared by
23613     all functions of a given module need not be restored.  There are
23614     no arguments.
23615
23616`exception_receiver'
23617     This pattern, if defined, contains code needed at the site of an
23618     exception handler that isn't needed at the site of a nonlocal
23619     goto.  You will not normally need to define this pattern.  A
23620     typical reason why you might need this pattern is if some value,
23621     such as a pointer to a global table, must be restored after
23622     control flow is branched to the handler of an exception.  There
23623     are no arguments.
23624
23625`builtin_setjmp_setup'
23626     This pattern, if defined, contains additional code needed to
23627     initialize the `jmp_buf'.  You will not normally need to define
23628     this pattern.  A typical reason why you might need this pattern is
23629     if some value, such as a pointer to a global table, must be
23630     restored.  Though it is preferred that the pointer value be
23631     recalculated if possible (given the address of a label for
23632     instance).  The single argument is a pointer to the `jmp_buf'.
23633     Note that the buffer is five words long and that the first three
23634     are normally used by the generic mechanism.
23635
23636`builtin_setjmp_receiver'
23637     This pattern, if defined, contains code needed at the site of a
23638     built-in setjmp that isn't needed at the site of a nonlocal goto.
23639     You will not normally need to define this pattern.  A typical
23640     reason why you might need this pattern is if some value, such as a
23641     pointer to a global table, must be restored.  It takes one
23642     argument, which is the label to which builtin_longjmp transferred
23643     control; this pattern may be emitted at a small offset from that
23644     label.
23645
23646`builtin_longjmp'
23647     This pattern, if defined, performs the entire action of the
23648     longjmp.  You will not normally need to define this pattern unless
23649     you also define `builtin_setjmp_setup'.  The single argument is a
23650     pointer to the `jmp_buf'.
23651
23652`eh_return'
23653     This pattern, if defined, affects the way `__builtin_eh_return',
23654     and thence the call frame exception handling library routines, are
23655     built.  It is intended to handle non-trivial actions needed along
23656     the abnormal return path.
23657
23658     The address of the exception handler to which the function should
23659     return is passed as operand to this pattern.  It will normally
23660     need to copied by the pattern to some special register or memory
23661     location.  If the pattern needs to determine the location of the
23662     target call frame in order to do so, it may use
23663     `EH_RETURN_STACKADJ_RTX', if defined; it will have already been
23664     assigned.
23665
23666     If this pattern is not defined, the default action will be to
23667     simply copy the return address to `EH_RETURN_HANDLER_RTX'.  Either
23668     that macro or this pattern needs to be defined if call frame
23669     exception handling is to be used.
23670
23671`prologue'
23672     This pattern, if defined, emits RTL for entry to a function.  The
23673     function entry is responsible for setting up the stack frame,
23674     initializing the frame pointer register, saving callee saved
23675     registers, etc.
23676
23677     Using a prologue pattern is generally preferred over defining
23678     `TARGET_ASM_FUNCTION_PROLOGUE' to emit assembly code for the
23679     prologue.
23680
23681     The `prologue' pattern is particularly useful for targets which
23682     perform instruction scheduling.
23683
23684`window_save'
23685     This pattern, if defined, emits RTL for a register window save.
23686     It should be defined if the target machine has register windows
23687     but the window events are decoupled from calls to subroutines.
23688     The canonical example is the SPARC architecture.
23689
23690`epilogue'
23691     This pattern emits RTL for exit from a function.  The function
23692     exit is responsible for deallocating the stack frame, restoring
23693     callee saved registers and emitting the return instruction.
23694
23695     Using an epilogue pattern is generally preferred over defining
23696     `TARGET_ASM_FUNCTION_EPILOGUE' to emit assembly code for the
23697     epilogue.
23698
23699     The `epilogue' pattern is particularly useful for targets which
23700     perform instruction scheduling or which have delay slots for their
23701     return instruction.
23702
23703`sibcall_epilogue'
23704     This pattern, if defined, emits RTL for exit from a function
23705     without the final branch back to the calling function.  This
23706     pattern will be emitted before any sibling call (aka tail call)
23707     sites.
23708
23709     The `sibcall_epilogue' pattern must not clobber any arguments used
23710     for parameter passing or any stack slots for arguments passed to
23711     the current function.
23712
23713`trap'
23714     This pattern, if defined, signals an error, typically by causing
23715     some kind of signal to be raised.  Among other places, it is used
23716     by the Java front end to signal `invalid array index' exceptions.
23717
23718`ctrapMM4'
23719     Conditional trap instruction.  Operand 0 is a piece of RTL which
23720     performs a comparison, and operands 1 and 2 are the arms of the
23721     comparison.  Operand 3 is the trap code, an integer.
23722
23723     A typical `ctrap' pattern looks like
23724
23725          (define_insn "ctrapsi4"
23726            [(trap_if (match_operator 0 "trap_operator"
23727                       [(match_operand 1 "register_operand")
23728                        (match_operand 2 "immediate_operand")])
23729                      (match_operand 3 "const_int_operand" "i"))]
23730            ""
23731            "...")
23732
23733`prefetch'
23734     This pattern, if defined, emits code for a non-faulting data
23735     prefetch instruction.  Operand 0 is the address of the memory to
23736     prefetch.  Operand 1 is a constant 1 if the prefetch is preparing
23737     for a write to the memory address, or a constant 0 otherwise.
23738     Operand 2 is the expected degree of temporal locality of the data
23739     and is a value between 0 and 3, inclusive; 0 means that the data
23740     has no temporal locality, so it need not be left in the cache
23741     after the access; 3 means that the data has a high degree of
23742     temporal locality and should be left in all levels of cache
23743     possible;  1 and 2 mean, respectively, a low or moderate degree of
23744     temporal locality.
23745
23746     Targets that do not support write prefetches or locality hints can
23747     ignore the values of operands 1 and 2.
23748
23749`blockage'
23750     This pattern defines a pseudo insn that prevents the instruction
23751     scheduler and other passes from moving instructions and using
23752     register equivalences across the boundary defined by the blockage
23753     insn.  This needs to be an UNSPEC_VOLATILE pattern or a volatile
23754     ASM.
23755
23756`memory_barrier'
23757     If the target memory model is not fully synchronous, then this
23758     pattern should be defined to an instruction that orders both loads
23759     and stores before the instruction with respect to loads and stores
23760     after the instruction.  This pattern has no operands.
23761
23762`sync_compare_and_swapMODE'
23763     This pattern, if defined, emits code for an atomic compare-and-swap
23764     operation.  Operand 1 is the memory on which the atomic operation
23765     is performed.  Operand 2 is the "old" value to be compared against
23766     the current contents of the memory location.  Operand 3 is the
23767     "new" value to store in the memory if the compare succeeds.
23768     Operand 0 is the result of the operation; it should contain the
23769     contents of the memory before the operation.  If the compare
23770     succeeds, this should obviously be a copy of operand 2.
23771
23772     This pattern must show that both operand 0 and operand 1 are
23773     modified.
23774
23775     This pattern must issue any memory barrier instructions such that
23776     all memory operations before the atomic operation occur before the
23777     atomic operation and all memory operations after the atomic
23778     operation occur after the atomic operation.
23779
23780     For targets where the success or failure of the compare-and-swap
23781     operation is available via the status flags, it is possible to
23782     avoid a separate compare operation and issue the subsequent branch
23783     or store-flag operation immediately after the compare-and-swap.
23784     To this end, GCC will look for a `MODE_CC' set in the output of
23785     `sync_compare_and_swapMODE'; if the machine description includes
23786     such a set, the target should also define special `cbranchcc4'
23787     and/or `cstorecc4' instructions.  GCC will then be able to take
23788     the destination of the `MODE_CC' set and pass it to the
23789     `cbranchcc4' or `cstorecc4' pattern as the first operand of the
23790     comparison (the second will be `(const_int 0)').
23791
23792     For targets where the operating system may provide support for this
23793     operation via library calls, the `sync_compare_and_swap_optab' may
23794     be initialized to a function with the same interface as the
23795     `__sync_val_compare_and_swap_N' built-in.  If the entire set of
23796     __SYNC builtins are supported via library calls, the target can
23797     initialize all of the optabs at once with `init_sync_libfuncs'.
23798     For the purposes of C++11 `std::atomic::is_lock_free', it is
23799     assumed that these library calls do _not_ use any kind of
23800     interruptable locking.
23801
23802`sync_addMODE', `sync_subMODE'
23803`sync_iorMODE', `sync_andMODE'
23804`sync_xorMODE', `sync_nandMODE'
23805     These patterns emit code for an atomic operation on memory.
23806     Operand 0 is the memory on which the atomic operation is performed.
23807     Operand 1 is the second operand to the binary operator.
23808
23809     This pattern must issue any memory barrier instructions such that
23810     all memory operations before the atomic operation occur before the
23811     atomic operation and all memory operations after the atomic
23812     operation occur after the atomic operation.
23813
23814     If these patterns are not defined, the operation will be
23815     constructed from a compare-and-swap operation, if defined.
23816
23817`sync_old_addMODE', `sync_old_subMODE'
23818`sync_old_iorMODE', `sync_old_andMODE'
23819`sync_old_xorMODE', `sync_old_nandMODE'
23820     These patterns emit code for an atomic operation on memory, and
23821     return the value that the memory contained before the operation.
23822     Operand 0 is the result value, operand 1 is the memory on which the
23823     atomic operation is performed, and operand 2 is the second operand
23824     to the binary operator.
23825
23826     This pattern must issue any memory barrier instructions such that
23827     all memory operations before the atomic operation occur before the
23828     atomic operation and all memory operations after the atomic
23829     operation occur after the atomic operation.
23830
23831     If these patterns are not defined, the operation will be
23832     constructed from a compare-and-swap operation, if defined.
23833
23834`sync_new_addMODE', `sync_new_subMODE'
23835`sync_new_iorMODE', `sync_new_andMODE'
23836`sync_new_xorMODE', `sync_new_nandMODE'
23837     These patterns are like their `sync_old_OP' counterparts, except
23838     that they return the value that exists in the memory location
23839     after the operation, rather than before the operation.
23840
23841`sync_lock_test_and_setMODE'
23842     This pattern takes two forms, based on the capabilities of the
23843     target.  In either case, operand 0 is the result of the operand,
23844     operand 1 is the memory on which the atomic operation is
23845     performed, and operand 2 is the value to set in the lock.
23846
23847     In the ideal case, this operation is an atomic exchange operation,
23848     in which the previous value in memory operand is copied into the
23849     result operand, and the value operand is stored in the memory
23850     operand.
23851
23852     For less capable targets, any value operand that is not the
23853     constant 1 should be rejected with `FAIL'.  In this case the
23854     target may use an atomic test-and-set bit operation.  The result
23855     operand should contain 1 if the bit was previously set and 0 if
23856     the bit was previously clear.  The true contents of the memory
23857     operand are implementation defined.
23858
23859     This pattern must issue any memory barrier instructions such that
23860     the pattern as a whole acts as an acquire barrier, that is all
23861     memory operations after the pattern do not occur until the lock is
23862     acquired.
23863
23864     If this pattern is not defined, the operation will be constructed
23865     from a compare-and-swap operation, if defined.
23866
23867`sync_lock_releaseMODE'
23868     This pattern, if defined, releases a lock set by
23869     `sync_lock_test_and_setMODE'.  Operand 0 is the memory that
23870     contains the lock; operand 1 is the value to store in the lock.
23871
23872     If the target doesn't implement full semantics for
23873     `sync_lock_test_and_setMODE', any value operand which is not the
23874     constant 0 should be rejected with `FAIL', and the true contents
23875     of the memory operand are implementation defined.
23876
23877     This pattern must issue any memory barrier instructions such that
23878     the pattern as a whole acts as a release barrier, that is the lock
23879     is released only after all previous memory operations have
23880     completed.
23881
23882     If this pattern is not defined, then a `memory_barrier' pattern
23883     will be emitted, followed by a store of the value to the memory
23884     operand.
23885
23886`atomic_compare_and_swapMODE'
23887     This pattern, if defined, emits code for an atomic compare-and-swap
23888     operation with memory model semantics.  Operand 2 is the memory on
23889     which the atomic operation is performed.  Operand 0 is an output
23890     operand which is set to true or false based on whether the
23891     operation succeeded.  Operand 1 is an output operand which is set
23892     to the contents of the memory before the operation was attempted.
23893     Operand 3 is the value that is expected to be in memory.  Operand
23894     4 is the value to put in memory if the expected value is found
23895     there.  Operand 5 is set to 1 if this compare and swap is to be
23896     treated as a weak operation.  Operand 6 is the memory model to be
23897     used if the operation is a success.  Operand 7 is the memory model
23898     to be used if the operation fails.
23899
23900     If memory referred to in operand 2 contains the value in operand
23901     3, then operand 4 is stored in memory pointed to by operand 2 and
23902     fencing based on the memory model in operand 6 is issued.
23903
23904     If memory referred to in operand 2 does not contain the value in
23905     operand 3, then fencing based on the memory model in operand 7 is
23906     issued.
23907
23908     If a target does not support weak compare-and-swap operations, or
23909     the port elects not to implement weak operations, the argument in
23910     operand 5 can be ignored.  Note a strong implementation must be
23911     provided.
23912
23913     If this pattern is not provided, the `__atomic_compare_exchange'
23914     built-in functions will utilize the legacy `sync_compare_and_swap'
23915     pattern with an `__ATOMIC_SEQ_CST' memory model.
23916
23917`atomic_loadMODE'
23918     This pattern implements an atomic load operation with memory model
23919     semantics.  Operand 1 is the memory address being loaded from.
23920     Operand 0 is the result of the load.  Operand 2 is the memory
23921     model to be used for the load operation.
23922
23923     If not present, the `__atomic_load' built-in function will either
23924     resort to a normal load with memory barriers, or a compare-and-swap
23925     operation if a normal load would not be atomic.
23926
23927`atomic_storeMODE'
23928     This pattern implements an atomic store operation with memory model
23929     semantics.  Operand 0 is the memory address being stored to.
23930     Operand 1 is the value to be written.  Operand 2 is the memory
23931     model to be used for the operation.
23932
23933     If not present, the `__atomic_store' built-in function will
23934     attempt to perform a normal store and surround it with any
23935     required memory fences.  If the store would not be atomic, then an
23936     `__atomic_exchange' is attempted with the result being ignored.
23937
23938`atomic_exchangeMODE'
23939     This pattern implements an atomic exchange operation with memory
23940     model semantics.  Operand 1 is the memory location the operation
23941     is performed on.  Operand 0 is an output operand which is set to
23942     the original value contained in the memory pointed to by operand
23943     1.  Operand 2 is the value to be stored.  Operand 3 is the memory
23944     model to be used.
23945
23946     If this pattern is not present, the built-in function
23947     `__atomic_exchange' will attempt to preform the operation with a
23948     compare and swap loop.
23949
23950`atomic_addMODE', `atomic_subMODE'
23951`atomic_orMODE', `atomic_andMODE'
23952`atomic_xorMODE', `atomic_nandMODE'
23953     These patterns emit code for an atomic operation on memory with
23954     memory model semantics. Operand 0 is the memory on which the
23955     atomic operation is performed.  Operand 1 is the second operand to
23956     the binary operator.  Operand 2 is the memory model to be used by
23957     the operation.
23958
23959     If these patterns are not defined, attempts will be made to use
23960     legacy `sync' patterns, or equivalent patterns which return a
23961     result.  If none of these are available a compare-and-swap loop
23962     will be used.
23963
23964`atomic_fetch_addMODE', `atomic_fetch_subMODE'
23965`atomic_fetch_orMODE', `atomic_fetch_andMODE'
23966`atomic_fetch_xorMODE', `atomic_fetch_nandMODE'
23967     These patterns emit code for an atomic operation on memory with
23968     memory model semantics, and return the original value. Operand 0
23969     is an output operand which contains the value of the memory
23970     location before the operation was performed.  Operand 1 is the
23971     memory on which the atomic operation is performed.  Operand 2 is
23972     the second operand to the binary operator.  Operand 3 is the
23973     memory model to be used by the operation.
23974
23975     If these patterns are not defined, attempts will be made to use
23976     legacy `sync' patterns.  If none of these are available a
23977     compare-and-swap loop will be used.
23978
23979`atomic_add_fetchMODE', `atomic_sub_fetchMODE'
23980`atomic_or_fetchMODE', `atomic_and_fetchMODE'
23981`atomic_xor_fetchMODE', `atomic_nand_fetchMODE'
23982     These patterns emit code for an atomic operation on memory with
23983     memory model semantics and return the result after the operation
23984     is performed.  Operand 0 is an output operand which contains the
23985     value after the operation.  Operand 1 is the memory on which the
23986     atomic operation is performed.  Operand 2 is the second operand to
23987     the binary operator.  Operand 3 is the memory model to be used by
23988     the operation.
23989
23990     If these patterns are not defined, attempts will be made to use
23991     legacy `sync' patterns, or equivalent patterns which return the
23992     result before the operation followed by the arithmetic operation
23993     required to produce the result.  If none of these are available a
23994     compare-and-swap loop will be used.
23995
23996`atomic_test_and_set'
23997     This pattern emits code for `__builtin_atomic_test_and_set'.
23998     Operand 0 is an output operand which is set to true if the previous
23999     previous contents of the byte was "set", and false otherwise.
24000     Operand 1 is the `QImode' memory to be modified.  Operand 2 is the
24001     memory model to be used.
24002
24003     The specific value that defines "set" is implementation defined,
24004     and is normally based on what is performed by the native atomic
24005     test and set instruction.
24006
24007`mem_thread_fenceMODE'
24008     This pattern emits code required to implement a thread fence with
24009     memory model semantics.  Operand 0 is the memory model to be used.
24010
24011     If this pattern is not specified, all memory models except
24012     `__ATOMIC_RELAXED' will result in issuing a `sync_synchronize'
24013     barrier pattern.
24014
24015`mem_signal_fenceMODE'
24016     This pattern emits code required to implement a signal fence with
24017     memory model semantics.  Operand 0 is the memory model to be used.
24018
24019     This pattern should impact the compiler optimizers the same way
24020     that mem_signal_fence does, but it does not need to issue any
24021     barrier instructions.
24022
24023     If this pattern is not specified, all memory models except
24024     `__ATOMIC_RELAXED' will result in issuing a `sync_synchronize'
24025     barrier pattern.
24026
24027`get_thread_pointerMODE'
24028`set_thread_pointerMODE'
24029     These patterns emit code that reads/sets the TLS thread pointer.
24030     Currently, these are only needed if the target needs to support the
24031     `__builtin_thread_pointer' and `__builtin_set_thread_pointer'
24032     builtins.
24033
24034     The get/set patterns have a single output/input operand
24035     respectively, with MODE intended to be `Pmode'.
24036
24037`stack_protect_set'
24038     This pattern, if defined, moves a `ptr_mode' value from the memory
24039     in operand 1 to the memory in operand 0 without leaving the value
24040     in a register afterward.  This is to avoid leaking the value some
24041     place that an attacker might use to rewrite the stack guard slot
24042     after having clobbered it.
24043
24044     If this pattern is not defined, then a plain move pattern is
24045     generated.
24046
24047`stack_protect_test'
24048     This pattern, if defined, compares a `ptr_mode' value from the
24049     memory in operand 1 with the memory in operand 0 without leaving
24050     the value in a register afterward and branches to operand 2 if the
24051     values were equal.
24052
24053     If this pattern is not defined, then a plain compare pattern and
24054     conditional branch pattern is used.
24055
24056`clear_cache'
24057     This pattern, if defined, flushes the instruction cache for a
24058     region of memory.  The region is bounded to by the Pmode pointers
24059     in operand 0 inclusive and operand 1 exclusive.
24060
24061     If this pattern is not defined, a call to the library function
24062     `__clear_cache' is used.
24063
24064
24065
24066File: gccint.info,  Node: Pattern Ordering,  Next: Dependent Patterns,  Prev: Standard Names,  Up: Machine Desc
24067
2406816.10 When the Order of Patterns Matters
24069========================================
24070
24071Sometimes an insn can match more than one instruction pattern.  Then the
24072pattern that appears first in the machine description is the one used.
24073Therefore, more specific patterns (patterns that will match fewer
24074things) and faster instructions (those that will produce better code
24075when they do match) should usually go first in the description.
24076
24077 In some cases the effect of ordering the patterns can be used to hide
24078a pattern when it is not valid.  For example, the 68000 has an
24079instruction for converting a fullword to floating point and another for
24080converting a byte to floating point.  An instruction converting an
24081integer to floating point could match either one.  We put the pattern
24082to convert the fullword first to make sure that one will be used rather
24083than the other.  (Otherwise a large integer might be generated as a
24084single-byte immediate quantity, which would not work.)  Instead of
24085using this pattern ordering it would be possible to make the pattern
24086for convert-a-byte smart enough to deal properly with any constant
24087value.
24088
24089
24090File: gccint.info,  Node: Dependent Patterns,  Next: Jump Patterns,  Prev: Pattern Ordering,  Up: Machine Desc
24091
2409216.11 Interdependence of Patterns
24093=================================
24094
24095In some cases machines support instructions identical except for the
24096machine mode of one or more operands.  For example, there may be
24097"sign-extend halfword" and "sign-extend byte" instructions whose
24098patterns are
24099
24100     (set (match_operand:SI 0 ...)
24101          (extend:SI (match_operand:HI 1 ...)))
24102
24103     (set (match_operand:SI 0 ...)
24104          (extend:SI (match_operand:QI 1 ...)))
24105
24106Constant integers do not specify a machine mode, so an instruction to
24107extend a constant value could match either pattern.  The pattern it
24108actually will match is the one that appears first in the file.  For
24109correct results, this must be the one for the widest possible mode
24110(`HImode', here).  If the pattern matches the `QImode' instruction, the
24111results will be incorrect if the constant value does not actually fit
24112that mode.
24113
24114 Such instructions to extend constants are rarely generated because
24115they are optimized away, but they do occasionally happen in nonoptimized
24116compilations.
24117
24118 If a constraint in a pattern allows a constant, the reload pass may
24119replace a register with a constant permitted by the constraint in some
24120cases.  Similarly for memory references.  Because of this substitution,
24121you should not provide separate patterns for increment and decrement
24122instructions.  Instead, they should be generated from the same pattern
24123that supports register-register add insns by examining the operands and
24124generating the appropriate machine instruction.
24125
24126
24127File: gccint.info,  Node: Jump Patterns,  Next: Looping Patterns,  Prev: Dependent Patterns,  Up: Machine Desc
24128
2412916.12 Defining Jump Instruction Patterns
24130========================================
24131
24132GCC does not assume anything about how the machine realizes jumps.  The
24133machine description should define a single pattern, usually a
24134`define_expand', which expands to all the required insns.
24135
24136 Usually, this would be a comparison insn to set the condition code and
24137a separate branch insn testing the condition code and branching or not
24138according to its value.  For many machines, however, separating
24139compares and branches is limiting, which is why the more flexible
24140approach with one `define_expand' is used in GCC.  The machine
24141description becomes clearer for architectures that have
24142compare-and-branch instructions but no condition code.  It also works
24143better when different sets of comparison operators are supported by
24144different kinds of conditional branches (e.g. integer vs.
24145floating-point), or by conditional branches with respect to conditional
24146stores.
24147
24148 Two separate insns are always used if the machine description
24149represents a condition code register using the legacy RTL expression
24150`(cc0)', and on most machines that use a separate condition code
24151register (*note Condition Code::).  For machines that use `(cc0)', in
24152fact, the set and use of the condition code must be separate and
24153adjacent(1), thus allowing flags in `cc_status' to be used (*note
24154Condition Code::) and so that the comparison and branch insns could be
24155located from each other by using the functions `prev_cc0_setter' and
24156`next_cc0_user'.
24157
24158 Even in this case having a single entry point for conditional branches
24159is advantageous, because it handles equally well the case where a single
24160comparison instruction records the results of both signed and unsigned
24161comparison of the given operands (with the branch insns coming in
24162distinct signed and unsigned flavors) as in the x86 or SPARC, and the
24163case where there are distinct signed and unsigned compare instructions
24164and only one set of conditional branch instructions as in the PowerPC.
24165
24166 ---------- Footnotes ----------
24167
24168 (1) `note' insns can separate them, though.
24169
24170
24171File: gccint.info,  Node: Looping Patterns,  Next: Insn Canonicalizations,  Prev: Jump Patterns,  Up: Machine Desc
24172
2417316.13 Defining Looping Instruction Patterns
24174===========================================
24175
24176Some machines have special jump instructions that can be utilized to
24177make loops more efficient.  A common example is the 68000 `dbra'
24178instruction which performs a decrement of a register and a branch if the
24179result was greater than zero.  Other machines, in particular digital
24180signal processors (DSPs), have special block repeat instructions to
24181provide low-overhead loop support.  For example, the TI TMS320C3x/C4x
24182DSPs have a block repeat instruction that loads special registers to
24183mark the top and end of a loop and to count the number of loop
24184iterations.  This avoids the need for fetching and executing a
24185`dbra'-like instruction and avoids pipeline stalls associated with the
24186jump.
24187
24188 GCC has three special named patterns to support low overhead looping.
24189They are `decrement_and_branch_until_zero', `doloop_begin', and
24190`doloop_end'.  The first pattern, `decrement_and_branch_until_zero', is
24191not emitted during RTL generation but may be emitted during the
24192instruction combination phase.  This requires the assistance of the
24193loop optimizer, using information collected during strength reduction,
24194to reverse a loop to count down to zero.  Some targets also require the
24195loop optimizer to add a `REG_NONNEG' note to indicate that the
24196iteration count is always positive.  This is needed if the target
24197performs a signed loop termination test.  For example, the 68000 uses a
24198pattern similar to the following for its `dbra' instruction:
24199
24200     (define_insn "decrement_and_branch_until_zero"
24201       [(set (pc)
24202             (if_then_else
24203               (ge (plus:SI (match_operand:SI 0 "general_operand" "+d*am")
24204                            (const_int -1))
24205                   (const_int 0))
24206               (label_ref (match_operand 1 "" ""))
24207               (pc)))
24208        (set (match_dup 0)
24209             (plus:SI (match_dup 0)
24210                      (const_int -1)))]
24211       "find_reg_note (insn, REG_NONNEG, 0)"
24212       "...")
24213
24214 Note that since the insn is both a jump insn and has an output, it must
24215deal with its own reloads, hence the `m' constraints.  Also note that
24216since this insn is generated by the instruction combination phase
24217combining two sequential insns together into an implicit parallel insn,
24218the iteration counter needs to be biased by the same amount as the
24219decrement operation, in this case -1.  Note that the following similar
24220pattern will not be matched by the combiner.
24221
24222     (define_insn "decrement_and_branch_until_zero"
24223       [(set (pc)
24224             (if_then_else
24225               (ge (match_operand:SI 0 "general_operand" "+d*am")
24226                   (const_int 1))
24227               (label_ref (match_operand 1 "" ""))
24228               (pc)))
24229        (set (match_dup 0)
24230             (plus:SI (match_dup 0)
24231                      (const_int -1)))]
24232       "find_reg_note (insn, REG_NONNEG, 0)"
24233       "...")
24234
24235 The other two special looping patterns, `doloop_begin' and
24236`doloop_end', are emitted by the loop optimizer for certain
24237well-behaved loops with a finite number of loop iterations using
24238information collected during strength reduction.
24239
24240 The `doloop_end' pattern describes the actual looping instruction (or
24241the implicit looping operation) and the `doloop_begin' pattern is an
24242optional companion pattern that can be used for initialization needed
24243for some low-overhead looping instructions.
24244
24245 Note that some machines require the actual looping instruction to be
24246emitted at the top of the loop (e.g., the TMS320C3x/C4x DSPs).  Emitting
24247the true RTL for a looping instruction at the top of the loop can cause
24248problems with flow analysis.  So instead, a dummy `doloop' insn is
24249emitted at the end of the loop.  The machine dependent reorg pass checks
24250for the presence of this `doloop' insn and then searches back to the
24251top of the loop, where it inserts the true looping insn (provided there
24252are no instructions in the loop which would cause problems).  Any
24253additional labels can be emitted at this point.  In addition, if the
24254desired special iteration counter register was not allocated, this
24255machine dependent reorg pass could emit a traditional compare and jump
24256instruction pair.
24257
24258 The essential difference between the `decrement_and_branch_until_zero'
24259and the `doloop_end' patterns is that the loop optimizer allocates an
24260additional pseudo register for the latter as an iteration counter.
24261This pseudo register cannot be used within the loop (i.e., general
24262induction variables cannot be derived from it), however, in many cases
24263the loop induction variable may become redundant and removed by the
24264flow pass.
24265
24266
24267File: gccint.info,  Node: Insn Canonicalizations,  Next: Expander Definitions,  Prev: Looping Patterns,  Up: Machine Desc
24268
2426916.14 Canonicalization of Instructions
24270======================================
24271
24272There are often cases where multiple RTL expressions could represent an
24273operation performed by a single machine instruction.  This situation is
24274most commonly encountered with logical, branch, and multiply-accumulate
24275instructions.  In such cases, the compiler attempts to convert these
24276multiple RTL expressions into a single canonical form to reduce the
24277number of insn patterns required.
24278
24279 In addition to algebraic simplifications, following canonicalizations
24280are performed:
24281
24282   * For commutative and comparison operators, a constant is always
24283     made the second operand.  If a machine only supports a constant as
24284     the second operand, only patterns that match a constant in the
24285     second operand need be supplied.
24286
24287   * For associative operators, a sequence of operators will always
24288     chain to the left; for instance, only the left operand of an
24289     integer `plus' can itself be a `plus'.  `and', `ior', `xor',
24290     `plus', `mult', `smin', `smax', `umin', and `umax' are associative
24291     when applied to integers, and sometimes to floating-point.
24292
24293   * For these operators, if only one operand is a `neg', `not',
24294     `mult', `plus', or `minus' expression, it will be the first
24295     operand.
24296
24297   * In combinations of `neg', `mult', `plus', and `minus', the `neg'
24298     operations (if any) will be moved inside the operations as far as
24299     possible.  For instance, `(neg (mult A B))' is canonicalized as
24300     `(mult (neg A) B)', but `(plus (mult (neg B) C) A)' is
24301     canonicalized as `(minus A (mult B C))'.
24302
24303   * For the `compare' operator, a constant is always the second operand
24304     if the first argument is a condition code register or `(cc0)'.
24305
24306   * An operand of `neg', `not', `mult', `plus', or `minus' is made the
24307     first operand under the same conditions as above.
24308
24309   * `(ltu (plus A B) B)' is converted to `(ltu (plus A B) A)'.
24310     Likewise with `geu' instead of `ltu'.
24311
24312   * `(minus X (const_int N))' is converted to `(plus X (const_int
24313     -N))'.
24314
24315   * Within address computations (i.e., inside `mem'), a left shift is
24316     converted into the appropriate multiplication by a power of two.
24317
24318   * De Morgan's Law is used to move bitwise negation inside a bitwise
24319     logical-and or logical-or operation.  If this results in only one
24320     operand being a `not' expression, it will be the first one.
24321
24322     A machine that has an instruction that performs a bitwise
24323     logical-and of one operand with the bitwise negation of the other
24324     should specify the pattern for that instruction as
24325
24326          (define_insn ""
24327            [(set (match_operand:M 0 ...)
24328                  (and:M (not:M (match_operand:M 1 ...))
24329                               (match_operand:M 2 ...)))]
24330            "..."
24331            "...")
24332
24333     Similarly, a pattern for a "NAND" instruction should be written
24334
24335          (define_insn ""
24336            [(set (match_operand:M 0 ...)
24337                  (ior:M (not:M (match_operand:M 1 ...))
24338                               (not:M (match_operand:M 2 ...))))]
24339            "..."
24340            "...")
24341
24342     In both cases, it is not necessary to include patterns for the many
24343     logically equivalent RTL expressions.
24344
24345   * The only possible RTL expressions involving both bitwise
24346     exclusive-or and bitwise negation are `(xor:M X Y)' and `(not:M
24347     (xor:M X Y))'.
24348
24349   * The sum of three items, one of which is a constant, will only
24350     appear in the form
24351
24352          (plus:M (plus:M X Y) CONSTANT)
24353
24354   * Equality comparisons of a group of bits (usually a single bit)
24355     with zero will be written using `zero_extract' rather than the
24356     equivalent `and' or `sign_extract' operations.
24357
24358   * `(sign_extend:M1 (mult:M2 (sign_extend:M2 X) (sign_extend:M2 Y)))'
24359     is converted to `(mult:M1 (sign_extend:M1 X) (sign_extend:M1 Y))',
24360     and likewise for `zero_extend'.
24361
24362   * `(sign_extend:M1 (mult:M2 (ashiftrt:M2 X S) (sign_extend:M2 Y)))'
24363     is converted to `(mult:M1 (sign_extend:M1 (ashiftrt:M2 X S))
24364     (sign_extend:M1 Y))', and likewise for patterns using
24365     `zero_extend' and `lshiftrt'.  If the second operand of `mult' is
24366     also a shift, then that is extended also.  This transformation is
24367     only applied when it can be proven that the original operation had
24368     sufficient precision to prevent overflow.
24369
24370
24371 Further canonicalization rules are defined in the function
24372`commutative_operand_precedence' in `gcc/rtlanal.c'.
24373
24374
24375File: gccint.info,  Node: Expander Definitions,  Next: Insn Splitting,  Prev: Insn Canonicalizations,  Up: Machine Desc
24376
2437716.15 Defining RTL Sequences for Code Generation
24378================================================
24379
24380On some target machines, some standard pattern names for RTL generation
24381cannot be handled with single insn, but a sequence of RTL insns can
24382represent them.  For these target machines, you can write a
24383`define_expand' to specify how to generate the sequence of RTL.
24384
24385 A `define_expand' is an RTL expression that looks almost like a
24386`define_insn'; but, unlike the latter, a `define_expand' is used only
24387for RTL generation and it can produce more than one RTL insn.
24388
24389 A `define_expand' RTX has four operands:
24390
24391   * The name.  Each `define_expand' must have a name, since the only
24392     use for it is to refer to it by name.
24393
24394   * The RTL template.  This is a vector of RTL expressions representing
24395     a sequence of separate instructions.  Unlike `define_insn', there
24396     is no implicit surrounding `PARALLEL'.
24397
24398   * The condition, a string containing a C expression.  This
24399     expression is used to express how the availability of this pattern
24400     depends on subclasses of target machine, selected by command-line
24401     options when GCC is run.  This is just like the condition of a
24402     `define_insn' that has a standard name.  Therefore, the condition
24403     (if present) may not depend on the data in the insn being matched,
24404     but only the target-machine-type flags.  The compiler needs to
24405     test these conditions during initialization in order to learn
24406     exactly which named instructions are available in a particular run.
24407
24408   * The preparation statements, a string containing zero or more C
24409     statements which are to be executed before RTL code is generated
24410     from the RTL template.
24411
24412     Usually these statements prepare temporary registers for use as
24413     internal operands in the RTL template, but they can also generate
24414     RTL insns directly by calling routines such as `emit_insn', etc.
24415     Any such insns precede the ones that come from the RTL template.
24416
24417   * Optionally, a vector containing the values of attributes. *Note
24418     Insn Attributes::.
24419
24420 Every RTL insn emitted by a `define_expand' must match some
24421`define_insn' in the machine description.  Otherwise, the compiler will
24422crash when trying to generate code for the insn or trying to optimize
24423it.
24424
24425 The RTL template, in addition to controlling generation of RTL insns,
24426also describes the operands that need to be specified when this pattern
24427is used.  In particular, it gives a predicate for each operand.
24428
24429 A true operand, which needs to be specified in order to generate RTL
24430from the pattern, should be described with a `match_operand' in its
24431first occurrence in the RTL template.  This enters information on the
24432operand's predicate into the tables that record such things.  GCC uses
24433the information to preload the operand into a register if that is
24434required for valid RTL code.  If the operand is referred to more than
24435once, subsequent references should use `match_dup'.
24436
24437 The RTL template may also refer to internal "operands" which are
24438temporary registers or labels used only within the sequence made by the
24439`define_expand'.  Internal operands are substituted into the RTL
24440template with `match_dup', never with `match_operand'.  The values of
24441the internal operands are not passed in as arguments by the compiler
24442when it requests use of this pattern.  Instead, they are computed
24443within the pattern, in the preparation statements.  These statements
24444compute the values and store them into the appropriate elements of
24445`operands' so that `match_dup' can find them.
24446
24447 There are two special macros defined for use in the preparation
24448statements: `DONE' and `FAIL'.  Use them with a following semicolon, as
24449a statement.
24450
24451`DONE'
24452     Use the `DONE' macro to end RTL generation for the pattern.  The
24453     only RTL insns resulting from the pattern on this occasion will be
24454     those already emitted by explicit calls to `emit_insn' within the
24455     preparation statements; the RTL template will not be generated.
24456
24457`FAIL'
24458     Make the pattern fail on this occasion.  When a pattern fails, it
24459     means that the pattern was not truly available.  The calling
24460     routines in the compiler will try other strategies for code
24461     generation using other patterns.
24462
24463     Failure is currently supported only for binary (addition,
24464     multiplication, shifting, etc.) and bit-field (`extv', `extzv',
24465     and `insv') operations.
24466
24467 If the preparation falls through (invokes neither `DONE' nor `FAIL'),
24468then the `define_expand' acts like a `define_insn' in that the RTL
24469template is used to generate the insn.
24470
24471 The RTL template is not used for matching, only for generating the
24472initial insn list.  If the preparation statement always invokes `DONE'
24473or `FAIL', the RTL template may be reduced to a simple list of
24474operands, such as this example:
24475
24476     (define_expand "addsi3"
24477       [(match_operand:SI 0 "register_operand" "")
24478        (match_operand:SI 1 "register_operand" "")
24479        (match_operand:SI 2 "register_operand" "")]
24480       ""
24481       "
24482     {
24483       handle_add (operands[0], operands[1], operands[2]);
24484       DONE;
24485     }")
24486
24487 Here is an example, the definition of left-shift for the SPUR chip:
24488
24489     (define_expand "ashlsi3"
24490       [(set (match_operand:SI 0 "register_operand" "")
24491             (ashift:SI
24492               (match_operand:SI 1 "register_operand" "")
24493               (match_operand:SI 2 "nonmemory_operand" "")))]
24494       ""
24495       "
24496
24497     {
24498       if (GET_CODE (operands[2]) != CONST_INT
24499           || (unsigned) INTVAL (operands[2]) > 3)
24500         FAIL;
24501     }")
24502
24503This example uses `define_expand' so that it can generate an RTL insn
24504for shifting when the shift-count is in the supported range of 0 to 3
24505but fail in other cases where machine insns aren't available.  When it
24506fails, the compiler tries another strategy using different patterns
24507(such as, a library call).
24508
24509 If the compiler were able to handle nontrivial condition-strings in
24510patterns with names, then it would be possible to use a `define_insn'
24511in that case.  Here is another case (zero-extension on the 68000) which
24512makes more use of the power of `define_expand':
24513
24514     (define_expand "zero_extendhisi2"
24515       [(set (match_operand:SI 0 "general_operand" "")
24516             (const_int 0))
24517        (set (strict_low_part
24518               (subreg:HI
24519                 (match_dup 0)
24520                 0))
24521             (match_operand:HI 1 "general_operand" ""))]
24522       ""
24523       "operands[1] = make_safe_from (operands[1], operands[0]);")
24524
24525Here two RTL insns are generated, one to clear the entire output operand
24526and the other to copy the input operand into its low half.  This
24527sequence is incorrect if the input operand refers to [the old value of]
24528the output operand, so the preparation statement makes sure this isn't
24529so.  The function `make_safe_from' copies the `operands[1]' into a
24530temporary register if it refers to `operands[0]'.  It does this by
24531emitting another RTL insn.
24532
24533 Finally, a third example shows the use of an internal operand.
24534Zero-extension on the SPUR chip is done by `and'-ing the result against
24535a halfword mask.  But this mask cannot be represented by a `const_int'
24536because the constant value is too large to be legitimate on this
24537machine.  So it must be copied into a register with `force_reg' and
24538then the register used in the `and'.
24539
24540     (define_expand "zero_extendhisi2"
24541       [(set (match_operand:SI 0 "register_operand" "")
24542             (and:SI (subreg:SI
24543                       (match_operand:HI 1 "register_operand" "")
24544                       0)
24545                     (match_dup 2)))]
24546       ""
24547       "operands[2]
24548          = force_reg (SImode, GEN_INT (65535)); ")
24549
24550 _Note:_ If the `define_expand' is used to serve a standard binary or
24551unary arithmetic operation or a bit-field operation, then the last insn
24552it generates must not be a `code_label', `barrier' or `note'.  It must
24553be an `insn', `jump_insn' or `call_insn'.  If you don't need a real insn
24554at the end, emit an insn to copy the result of the operation into
24555itself.  Such an insn will generate no code, but it can avoid problems
24556in the compiler.
24557
24558
24559File: gccint.info,  Node: Insn Splitting,  Next: Including Patterns,  Prev: Expander Definitions,  Up: Machine Desc
24560
2456116.16 Defining How to Split Instructions
24562========================================
24563
24564There are two cases where you should specify how to split a pattern
24565into multiple insns.  On machines that have instructions requiring
24566delay slots (*note Delay Slots::) or that have instructions whose
24567output is not available for multiple cycles (*note Processor pipeline
24568description::), the compiler phases that optimize these cases need to
24569be able to move insns into one-instruction delay slots.  However, some
24570insns may generate more than one machine instruction.  These insns
24571cannot be placed into a delay slot.
24572
24573 Often you can rewrite the single insn as a list of individual insns,
24574each corresponding to one machine instruction.  The disadvantage of
24575doing so is that it will cause the compilation to be slower and require
24576more space.  If the resulting insns are too complex, it may also
24577suppress some optimizations.  The compiler splits the insn if there is a
24578reason to believe that it might improve instruction or delay slot
24579scheduling.
24580
24581 The insn combiner phase also splits putative insns.  If three insns are
24582merged into one insn with a complex expression that cannot be matched by
24583some `define_insn' pattern, the combiner phase attempts to split the
24584complex pattern into two insns that are recognized.  Usually it can
24585break the complex pattern into two patterns by splitting out some
24586subexpression.  However, in some other cases, such as performing an
24587addition of a large constant in two insns on a RISC machine, the way to
24588split the addition into two insns is machine-dependent.
24589
24590 The `define_split' definition tells the compiler how to split a
24591complex insn into several simpler insns.  It looks like this:
24592
24593     (define_split
24594       [INSN-PATTERN]
24595       "CONDITION"
24596       [NEW-INSN-PATTERN-1
24597        NEW-INSN-PATTERN-2
24598        ...]
24599       "PREPARATION-STATEMENTS")
24600
24601 INSN-PATTERN is a pattern that needs to be split and CONDITION is the
24602final condition to be tested, as in a `define_insn'.  When an insn
24603matching INSN-PATTERN and satisfying CONDITION is found, it is replaced
24604in the insn list with the insns given by NEW-INSN-PATTERN-1,
24605NEW-INSN-PATTERN-2, etc.
24606
24607 The PREPARATION-STATEMENTS are similar to those statements that are
24608specified for `define_expand' (*note Expander Definitions::) and are
24609executed before the new RTL is generated to prepare for the generated
24610code or emit some insns whose pattern is not fixed.  Unlike those in
24611`define_expand', however, these statements must not generate any new
24612pseudo-registers.  Once reload has completed, they also must not
24613allocate any space in the stack frame.
24614
24615 Patterns are matched against INSN-PATTERN in two different
24616circumstances.  If an insn needs to be split for delay slot scheduling
24617or insn scheduling, the insn is already known to be valid, which means
24618that it must have been matched by some `define_insn' and, if
24619`reload_completed' is nonzero, is known to satisfy the constraints of
24620that `define_insn'.  In that case, the new insn patterns must also be
24621insns that are matched by some `define_insn' and, if `reload_completed'
24622is nonzero, must also satisfy the constraints of those definitions.
24623
24624 As an example of this usage of `define_split', consider the following
24625example from `a29k.md', which splits a `sign_extend' from `HImode' to
24626`SImode' into a pair of shift insns:
24627
24628     (define_split
24629       [(set (match_operand:SI 0 "gen_reg_operand" "")
24630             (sign_extend:SI (match_operand:HI 1 "gen_reg_operand" "")))]
24631       ""
24632       [(set (match_dup 0)
24633             (ashift:SI (match_dup 1)
24634                        (const_int 16)))
24635        (set (match_dup 0)
24636             (ashiftrt:SI (match_dup 0)
24637                          (const_int 16)))]
24638       "
24639     { operands[1] = gen_lowpart (SImode, operands[1]); }")
24640
24641 When the combiner phase tries to split an insn pattern, it is always
24642the case that the pattern is _not_ matched by any `define_insn'.  The
24643combiner pass first tries to split a single `set' expression and then
24644the same `set' expression inside a `parallel', but followed by a
24645`clobber' of a pseudo-reg to use as a scratch register.  In these
24646cases, the combiner expects exactly two new insn patterns to be
24647generated.  It will verify that these patterns match some `define_insn'
24648definitions, so you need not do this test in the `define_split' (of
24649course, there is no point in writing a `define_split' that will never
24650produce insns that match).
24651
24652 Here is an example of this use of `define_split', taken from
24653`rs6000.md':
24654
24655     (define_split
24656       [(set (match_operand:SI 0 "gen_reg_operand" "")
24657             (plus:SI (match_operand:SI 1 "gen_reg_operand" "")
24658                      (match_operand:SI 2 "non_add_cint_operand" "")))]
24659       ""
24660       [(set (match_dup 0) (plus:SI (match_dup 1) (match_dup 3)))
24661        (set (match_dup 0) (plus:SI (match_dup 0) (match_dup 4)))]
24662     "
24663     {
24664       int low = INTVAL (operands[2]) & 0xffff;
24665       int high = (unsigned) INTVAL (operands[2]) >> 16;
24666
24667       if (low & 0x8000)
24668         high++, low |= 0xffff0000;
24669
24670       operands[3] = GEN_INT (high << 16);
24671       operands[4] = GEN_INT (low);
24672     }")
24673
24674 Here the predicate `non_add_cint_operand' matches any `const_int' that
24675is _not_ a valid operand of a single add insn.  The add with the
24676smaller displacement is written so that it can be substituted into the
24677address of a subsequent operation.
24678
24679 An example that uses a scratch register, from the same file, generates
24680an equality comparison of a register and a large constant:
24681
24682     (define_split
24683       [(set (match_operand:CC 0 "cc_reg_operand" "")
24684             (compare:CC (match_operand:SI 1 "gen_reg_operand" "")
24685                         (match_operand:SI 2 "non_short_cint_operand" "")))
24686        (clobber (match_operand:SI 3 "gen_reg_operand" ""))]
24687       "find_single_use (operands[0], insn, 0)
24688        && (GET_CODE (*find_single_use (operands[0], insn, 0)) == EQ
24689            || GET_CODE (*find_single_use (operands[0], insn, 0)) == NE)"
24690       [(set (match_dup 3) (xor:SI (match_dup 1) (match_dup 4)))
24691        (set (match_dup 0) (compare:CC (match_dup 3) (match_dup 5)))]
24692       "
24693     {
24694       /* Get the constant we are comparing against, C, and see what it
24695          looks like sign-extended to 16 bits.  Then see what constant
24696          could be XOR'ed with C to get the sign-extended value.  */
24697
24698       int c = INTVAL (operands[2]);
24699       int sextc = (c << 16) >> 16;
24700       int xorv = c ^ sextc;
24701
24702       operands[4] = GEN_INT (xorv);
24703       operands[5] = GEN_INT (sextc);
24704     }")
24705
24706 To avoid confusion, don't write a single `define_split' that accepts
24707some insns that match some `define_insn' as well as some insns that
24708don't.  Instead, write two separate `define_split' definitions, one for
24709the insns that are valid and one for the insns that are not valid.
24710
24711 The splitter is allowed to split jump instructions into sequence of
24712jumps or create new jumps in while splitting non-jump instructions.  As
24713the central flowgraph and branch prediction information needs to be
24714updated, several restriction apply.
24715
24716 Splitting of jump instruction into sequence that over by another jump
24717instruction is always valid, as compiler expect identical behavior of
24718new jump.  When new sequence contains multiple jump instructions or new
24719labels, more assistance is needed.  Splitter is required to create only
24720unconditional jumps, or simple conditional jump instructions.
24721Additionally it must attach a `REG_BR_PROB' note to each conditional
24722jump.  A global variable `split_branch_probability' holds the
24723probability of the original branch in case it was a simple conditional
24724jump, -1 otherwise.  To simplify recomputing of edge frequencies, the
24725new sequence is required to have only forward jumps to the newly
24726created labels.
24727
24728 For the common case where the pattern of a define_split exactly
24729matches the pattern of a define_insn, use `define_insn_and_split'.  It
24730looks like this:
24731
24732     (define_insn_and_split
24733       [INSN-PATTERN]
24734       "CONDITION"
24735       "OUTPUT-TEMPLATE"
24736       "SPLIT-CONDITION"
24737       [NEW-INSN-PATTERN-1
24738        NEW-INSN-PATTERN-2
24739        ...]
24740       "PREPARATION-STATEMENTS"
24741       [INSN-ATTRIBUTES])
24742
24743 INSN-PATTERN, CONDITION, OUTPUT-TEMPLATE, and INSN-ATTRIBUTES are used
24744as in `define_insn'.  The NEW-INSN-PATTERN vector and the
24745PREPARATION-STATEMENTS are used as in a `define_split'.  The
24746SPLIT-CONDITION is also used as in `define_split', with the additional
24747behavior that if the condition starts with `&&', the condition used for
24748the split will be the constructed as a logical "and" of the split
24749condition with the insn condition.  For example, from i386.md:
24750
24751     (define_insn_and_split "zero_extendhisi2_and"
24752       [(set (match_operand:SI 0 "register_operand" "=r")
24753          (zero_extend:SI (match_operand:HI 1 "register_operand" "0")))
24754        (clobber (reg:CC 17))]
24755       "TARGET_ZERO_EXTEND_WITH_AND && !optimize_size"
24756       "#"
24757       "&& reload_completed"
24758       [(parallel [(set (match_dup 0)
24759                        (and:SI (match_dup 0) (const_int 65535)))
24760                   (clobber (reg:CC 17))])]
24761       ""
24762       [(set_attr "type" "alu1")])
24763
24764 In this case, the actual split condition will be
24765`TARGET_ZERO_EXTEND_WITH_AND && !optimize_size && reload_completed'.
24766
24767 The `define_insn_and_split' construction provides exactly the same
24768functionality as two separate `define_insn' and `define_split'
24769patterns.  It exists for compactness, and as a maintenance tool to
24770prevent having to ensure the two patterns' templates match.
24771
24772
24773File: gccint.info,  Node: Including Patterns,  Next: Peephole Definitions,  Prev: Insn Splitting,  Up: Machine Desc
24774
2477516.17 Including Patterns in Machine Descriptions.
24776=================================================
24777
24778The `include' pattern tells the compiler tools where to look for
24779patterns that are in files other than in the file `.md'.  This is used
24780only at build time and there is no preprocessing allowed.
24781
24782 It looks like:
24783
24784
24785     (include
24786       PATHNAME)
24787
24788 For example:
24789
24790
24791     (include "filestuff")
24792
24793 Where PATHNAME is a string that specifies the location of the file,
24794specifies the include file to be in `gcc/config/target/filestuff'.  The
24795directory `gcc/config/target' is regarded as the default directory.
24796
24797 Machine descriptions may be split up into smaller more manageable
24798subsections and placed into subdirectories.
24799
24800 By specifying:
24801
24802
24803     (include "BOGUS/filestuff")
24804
24805 the include file is specified to be in
24806`gcc/config/TARGET/BOGUS/filestuff'.
24807
24808 Specifying an absolute path for the include file such as;
24809
24810     (include "/u2/BOGUS/filestuff")
24811 is permitted but is not encouraged.
24812
2481316.17.1 RTL Generation Tool Options for Directory Search
24814--------------------------------------------------------
24815
24816The `-IDIR' option specifies directories to search for machine
24817descriptions.  For example:
24818
24819
24820     genrecog -I/p1/abc/proc1 -I/p2/abcd/pro2 target.md
24821
24822 Add the directory DIR to the head of the list of directories to be
24823searched for header files.  This can be used to override a system
24824machine definition file, substituting your own version, since these
24825directories are searched before the default machine description file
24826directories.  If you use more than one `-I' option, the directories are
24827scanned in left-to-right order; the standard default directory come
24828after.
24829
24830
24831File: gccint.info,  Node: Peephole Definitions,  Next: Insn Attributes,  Prev: Including Patterns,  Up: Machine Desc
24832
2483316.18 Machine-Specific Peephole Optimizers
24834==========================================
24835
24836In addition to instruction patterns the `md' file may contain
24837definitions of machine-specific peephole optimizations.
24838
24839 The combiner does not notice certain peephole optimizations when the
24840data flow in the program does not suggest that it should try them.  For
24841example, sometimes two consecutive insns related in purpose can be
24842combined even though the second one does not appear to use a register
24843computed in the first one.  A machine-specific peephole optimizer can
24844detect such opportunities.
24845
24846 There are two forms of peephole definitions that may be used.  The
24847original `define_peephole' is run at assembly output time to match
24848insns and substitute assembly text.  Use of `define_peephole' is
24849deprecated.
24850
24851 A newer `define_peephole2' matches insns and substitutes new insns.
24852The `peephole2' pass is run after register allocation but before
24853scheduling, which may result in much better code for targets that do
24854scheduling.
24855
24856* Menu:
24857
24858* define_peephole::     RTL to Text Peephole Optimizers
24859* define_peephole2::    RTL to RTL Peephole Optimizers
24860
24861
24862File: gccint.info,  Node: define_peephole,  Next: define_peephole2,  Up: Peephole Definitions
24863
2486416.18.1 RTL to Text Peephole Optimizers
24865---------------------------------------
24866
24867A definition looks like this:
24868
24869     (define_peephole
24870       [INSN-PATTERN-1
24871        INSN-PATTERN-2
24872        ...]
24873       "CONDITION"
24874       "TEMPLATE"
24875       "OPTIONAL-INSN-ATTRIBUTES")
24876
24877The last string operand may be omitted if you are not using any
24878machine-specific information in this machine description.  If present,
24879it must obey the same rules as in a `define_insn'.
24880
24881 In this skeleton, INSN-PATTERN-1 and so on are patterns to match
24882consecutive insns.  The optimization applies to a sequence of insns when
24883INSN-PATTERN-1 matches the first one, INSN-PATTERN-2 matches the next,
24884and so on.
24885
24886 Each of the insns matched by a peephole must also match a
24887`define_insn'.  Peepholes are checked only at the last stage just
24888before code generation, and only optionally.  Therefore, any insn which
24889would match a peephole but no `define_insn' will cause a crash in code
24890generation in an unoptimized compilation, or at various optimization
24891stages.
24892
24893 The operands of the insns are matched with `match_operands',
24894`match_operator', and `match_dup', as usual.  What is not usual is that
24895the operand numbers apply to all the insn patterns in the definition.
24896So, you can check for identical operands in two insns by using
24897`match_operand' in one insn and `match_dup' in the other.
24898
24899 The operand constraints used in `match_operand' patterns do not have
24900any direct effect on the applicability of the peephole, but they will
24901be validated afterward, so make sure your constraints are general enough
24902to apply whenever the peephole matches.  If the peephole matches but
24903the constraints are not satisfied, the compiler will crash.
24904
24905 It is safe to omit constraints in all the operands of the peephole; or
24906you can write constraints which serve as a double-check on the criteria
24907previously tested.
24908
24909 Once a sequence of insns matches the patterns, the CONDITION is
24910checked.  This is a C expression which makes the final decision whether
24911to perform the optimization (we do so if the expression is nonzero).  If
24912CONDITION is omitted (in other words, the string is empty) then the
24913optimization is applied to every sequence of insns that matches the
24914patterns.
24915
24916 The defined peephole optimizations are applied after register
24917allocation is complete.  Therefore, the peephole definition can check
24918which operands have ended up in which kinds of registers, just by
24919looking at the operands.
24920
24921 The way to refer to the operands in CONDITION is to write
24922`operands[I]' for operand number I (as matched by `(match_operand I
24923...)').  Use the variable `insn' to refer to the last of the insns
24924being matched; use `prev_active_insn' to find the preceding insns.
24925
24926 When optimizing computations with intermediate results, you can use
24927CONDITION to match only when the intermediate results are not used
24928elsewhere.  Use the C expression `dead_or_set_p (INSN, OP)', where INSN
24929is the insn in which you expect the value to be used for the last time
24930(from the value of `insn', together with use of `prev_nonnote_insn'),
24931and OP is the intermediate value (from `operands[I]').
24932
24933 Applying the optimization means replacing the sequence of insns with
24934one new insn.  The TEMPLATE controls ultimate output of assembler code
24935for this combined insn.  It works exactly like the template of a
24936`define_insn'.  Operand numbers in this template are the same ones used
24937in matching the original sequence of insns.
24938
24939 The result of a defined peephole optimizer does not need to match any
24940of the insn patterns in the machine description; it does not even have
24941an opportunity to match them.  The peephole optimizer definition itself
24942serves as the insn pattern to control how the insn is output.
24943
24944 Defined peephole optimizers are run as assembler code is being output,
24945so the insns they produce are never combined or rearranged in any way.
24946
24947 Here is an example, taken from the 68000 machine description:
24948
24949     (define_peephole
24950       [(set (reg:SI 15) (plus:SI (reg:SI 15) (const_int 4)))
24951        (set (match_operand:DF 0 "register_operand" "=f")
24952             (match_operand:DF 1 "register_operand" "ad"))]
24953       "FP_REG_P (operands[0]) && ! FP_REG_P (operands[1])"
24954     {
24955       rtx xoperands[2];
24956       xoperands[1] = gen_rtx_REG (SImode, REGNO (operands[1]) + 1);
24957     #ifdef MOTOROLA
24958       output_asm_insn ("move.l %1,(sp)", xoperands);
24959       output_asm_insn ("move.l %1,-(sp)", operands);
24960       return "fmove.d (sp)+,%0";
24961     #else
24962       output_asm_insn ("movel %1,sp@", xoperands);
24963       output_asm_insn ("movel %1,sp@-", operands);
24964       return "fmoved sp@+,%0";
24965     #endif
24966     })
24967
24968 The effect of this optimization is to change
24969
24970     jbsr _foobar
24971     addql #4,sp
24972     movel d1,sp@-
24973     movel d0,sp@-
24974     fmoved sp@+,fp0
24975
24976into
24977
24978     jbsr _foobar
24979     movel d1,sp@
24980     movel d0,sp@-
24981     fmoved sp@+,fp0
24982
24983 INSN-PATTERN-1 and so on look _almost_ like the second operand of
24984`define_insn'.  There is one important difference: the second operand
24985of `define_insn' consists of one or more RTX's enclosed in square
24986brackets.  Usually, there is only one: then the same action can be
24987written as an element of a `define_peephole'.  But when there are
24988multiple actions in a `define_insn', they are implicitly enclosed in a
24989`parallel'.  Then you must explicitly write the `parallel', and the
24990square brackets within it, in the `define_peephole'.  Thus, if an insn
24991pattern looks like this,
24992
24993     (define_insn "divmodsi4"
24994       [(set (match_operand:SI 0 "general_operand" "=d")
24995             (div:SI (match_operand:SI 1 "general_operand" "0")
24996                     (match_operand:SI 2 "general_operand" "dmsK")))
24997        (set (match_operand:SI 3 "general_operand" "=d")
24998             (mod:SI (match_dup 1) (match_dup 2)))]
24999       "TARGET_68020"
25000       "divsl%.l %2,%3:%0")
25001
25002then the way to mention this insn in a peephole is as follows:
25003
25004     (define_peephole
25005       [...
25006        (parallel
25007         [(set (match_operand:SI 0 "general_operand" "=d")
25008               (div:SI (match_operand:SI 1 "general_operand" "0")
25009                       (match_operand:SI 2 "general_operand" "dmsK")))
25010          (set (match_operand:SI 3 "general_operand" "=d")
25011               (mod:SI (match_dup 1) (match_dup 2)))])
25012        ...]
25013       ...)
25014
25015
25016File: gccint.info,  Node: define_peephole2,  Prev: define_peephole,  Up: Peephole Definitions
25017
2501816.18.2 RTL to RTL Peephole Optimizers
25019--------------------------------------
25020
25021The `define_peephole2' definition tells the compiler how to substitute
25022one sequence of instructions for another sequence, what additional
25023scratch registers may be needed and what their lifetimes must be.
25024
25025     (define_peephole2
25026       [INSN-PATTERN-1
25027        INSN-PATTERN-2
25028        ...]
25029       "CONDITION"
25030       [NEW-INSN-PATTERN-1
25031        NEW-INSN-PATTERN-2
25032        ...]
25033       "PREPARATION-STATEMENTS")
25034
25035 The definition is almost identical to `define_split' (*note Insn
25036Splitting::) except that the pattern to match is not a single
25037instruction, but a sequence of instructions.
25038
25039 It is possible to request additional scratch registers for use in the
25040output template.  If appropriate registers are not free, the pattern
25041will simply not match.
25042
25043 Scratch registers are requested with a `match_scratch' pattern at the
25044top level of the input pattern.  The allocated register (initially) will
25045be dead at the point requested within the original sequence.  If the
25046scratch is used at more than a single point, a `match_dup' pattern at
25047the top level of the input pattern marks the last position in the input
25048sequence at which the register must be available.
25049
25050 Here is an example from the IA-32 machine description:
25051
25052     (define_peephole2
25053       [(match_scratch:SI 2 "r")
25054        (parallel [(set (match_operand:SI 0 "register_operand" "")
25055                        (match_operator:SI 3 "arith_or_logical_operator"
25056                          [(match_dup 0)
25057                           (match_operand:SI 1 "memory_operand" "")]))
25058                   (clobber (reg:CC 17))])]
25059       "! optimize_size && ! TARGET_READ_MODIFY"
25060       [(set (match_dup 2) (match_dup 1))
25061        (parallel [(set (match_dup 0)
25062                        (match_op_dup 3 [(match_dup 0) (match_dup 2)]))
25063                   (clobber (reg:CC 17))])]
25064       "")
25065
25066This pattern tries to split a load from its use in the hopes that we'll
25067be able to schedule around the memory load latency.  It allocates a
25068single `SImode' register of class `GENERAL_REGS' (`"r"') that needs to
25069be live only at the point just before the arithmetic.
25070
25071 A real example requiring extended scratch lifetimes is harder to come
25072by, so here's a silly made-up example:
25073
25074     (define_peephole2
25075       [(match_scratch:SI 4 "r")
25076        (set (match_operand:SI 0 "" "") (match_operand:SI 1 "" ""))
25077        (set (match_operand:SI 2 "" "") (match_dup 1))
25078        (match_dup 4)
25079        (set (match_operand:SI 3 "" "") (match_dup 1))]
25080       "/* determine 1 does not overlap 0 and 2 */"
25081       [(set (match_dup 4) (match_dup 1))
25082        (set (match_dup 0) (match_dup 4))
25083        (set (match_dup 2) (match_dup 4))]
25084        (set (match_dup 3) (match_dup 4))]
25085       "")
25086
25087If we had not added the `(match_dup 4)' in the middle of the input
25088sequence, it might have been the case that the register we chose at the
25089beginning of the sequence is killed by the first or second `set'.
25090
25091
25092File: gccint.info,  Node: Insn Attributes,  Next: Conditional Execution,  Prev: Peephole Definitions,  Up: Machine Desc
25093
2509416.19 Instruction Attributes
25095============================
25096
25097In addition to describing the instruction supported by the target
25098machine, the `md' file also defines a group of "attributes" and a set of
25099values for each.  Every generated insn is assigned a value for each
25100attribute.  One possible attribute would be the effect that the insn
25101has on the machine's condition code.  This attribute can then be used
25102by `NOTICE_UPDATE_CC' to track the condition codes.
25103
25104* Menu:
25105
25106* Defining Attributes:: Specifying attributes and their values.
25107* Expressions::         Valid expressions for attribute values.
25108* Tagging Insns::       Assigning attribute values to insns.
25109* Attr Example::        An example of assigning attributes.
25110* Insn Lengths::        Computing the length of insns.
25111* Constant Attributes:: Defining attributes that are constant.
25112* Delay Slots::         Defining delay slots required for a machine.
25113* Processor pipeline description:: Specifying information for insn scheduling.
25114
25115
25116File: gccint.info,  Node: Defining Attributes,  Next: Expressions,  Up: Insn Attributes
25117
2511816.19.1 Defining Attributes and their Values
25119--------------------------------------------
25120
25121The `define_attr' expression is used to define each attribute required
25122by the target machine.  It looks like:
25123
25124     (define_attr NAME LIST-OF-VALUES DEFAULT)
25125
25126 NAME is a string specifying the name of the attribute being defined.
25127Some attributes are used in a special way by the rest of the compiler.
25128The `enabled' attribute can be used to conditionally enable or disable
25129insn alternatives (*note Disable Insn Alternatives::). The `predicable'
25130attribute, together with a suitable `define_cond_exec' (*note
25131Conditional Execution::), can be used to automatically generate
25132conditional variants of instruction patterns. The compiler internally
25133uses the names `ce_enabled' and `nonce_enabled', so they should not be
25134used elsewhere as alternative names.
25135
25136 LIST-OF-VALUES is either a string that specifies a comma-separated
25137list of values that can be assigned to the attribute, or a null string
25138to indicate that the attribute takes numeric values.
25139
25140 DEFAULT is an attribute expression that gives the value of this
25141attribute for insns that match patterns whose definition does not
25142include an explicit value for this attribute.  *Note Attr Example::,
25143for more information on the handling of defaults.  *Note Constant
25144Attributes::, for information on attributes that do not depend on any
25145particular insn.
25146
25147 For each defined attribute, a number of definitions are written to the
25148`insn-attr.h' file.  For cases where an explicit set of values is
25149specified for an attribute, the following are defined:
25150
25151   * A `#define' is written for the symbol `HAVE_ATTR_NAME'.
25152
25153   * An enumerated class is defined for `attr_NAME' with elements of
25154     the form `UPPER-NAME_UPPER-VALUE' where the attribute name and
25155     value are first converted to uppercase.
25156
25157   * A function `get_attr_NAME' is defined that is passed an insn and
25158     returns the attribute value for that insn.
25159
25160 For example, if the following is present in the `md' file:
25161
25162     (define_attr "type" "branch,fp,load,store,arith" ...)
25163
25164the following lines will be written to the file `insn-attr.h'.
25165
25166     #define HAVE_ATTR_type 1
25167     enum attr_type {TYPE_BRANCH, TYPE_FP, TYPE_LOAD,
25168                      TYPE_STORE, TYPE_ARITH};
25169     extern enum attr_type get_attr_type ();
25170
25171 If the attribute takes numeric values, no `enum' type will be defined
25172and the function to obtain the attribute's value will return `int'.
25173
25174 There are attributes which are tied to a specific meaning.  These
25175attributes are not free to use for other purposes:
25176
25177`length'
25178     The `length' attribute is used to calculate the length of emitted
25179     code chunks.  This is especially important when verifying branch
25180     distances. *Note Insn Lengths::.
25181
25182`enabled'
25183     The `enabled' attribute can be defined to prevent certain
25184     alternatives of an insn definition from being used during code
25185     generation. *Note Disable Insn Alternatives::.
25186
25187 For each of these special attributes, the corresponding
25188`HAVE_ATTR_NAME' `#define' is also written when the attribute is not
25189defined; in that case, it is defined as `0'.
25190
25191 Another way of defining an attribute is to use:
25192
25193     (define_enum_attr "ATTR" "ENUM" DEFAULT)
25194
25195 This works in just the same way as `define_attr', except that the list
25196of values is taken from a separate enumeration called ENUM (*note
25197define_enum::).  This form allows you to use the same list of values
25198for several attributes without having to repeat the list each time.
25199For example:
25200
25201     (define_enum "processor" [
25202       model_a
25203       model_b
25204       ...
25205     ])
25206     (define_enum_attr "arch" "processor"
25207       (const (symbol_ref "target_arch")))
25208     (define_enum_attr "tune" "processor"
25209       (const (symbol_ref "target_tune")))
25210
25211 defines the same attributes as:
25212
25213     (define_attr "arch" "model_a,model_b,..."
25214       (const (symbol_ref "target_arch")))
25215     (define_attr "tune" "model_a,model_b,..."
25216       (const (symbol_ref "target_tune")))
25217
25218 but without duplicating the processor list.  The second example
25219defines two separate C enums (`attr_arch' and `attr_tune') whereas the
25220first defines a single C enum (`processor').
25221
25222
25223File: gccint.info,  Node: Expressions,  Next: Tagging Insns,  Prev: Defining Attributes,  Up: Insn Attributes
25224
2522516.19.2 Attribute Expressions
25226-----------------------------
25227
25228RTL expressions used to define attributes use the codes described above
25229plus a few specific to attribute definitions, to be discussed below.
25230Attribute value expressions must have one of the following forms:
25231
25232`(const_int I)'
25233     The integer I specifies the value of a numeric attribute.  I must
25234     be non-negative.
25235
25236     The value of a numeric attribute can be specified either with a
25237     `const_int', or as an integer represented as a string in
25238     `const_string', `eq_attr' (see below), `attr', `symbol_ref',
25239     simple arithmetic expressions, and `set_attr' overrides on
25240     specific instructions (*note Tagging Insns::).
25241
25242`(const_string VALUE)'
25243     The string VALUE specifies a constant attribute value.  If VALUE
25244     is specified as `"*"', it means that the default value of the
25245     attribute is to be used for the insn containing this expression.
25246     `"*"' obviously cannot be used in the DEFAULT expression of a
25247     `define_attr'.
25248
25249     If the attribute whose value is being specified is numeric, VALUE
25250     must be a string containing a non-negative integer (normally
25251     `const_int' would be used in this case).  Otherwise, it must
25252     contain one of the valid values for the attribute.
25253
25254`(if_then_else TEST TRUE-VALUE FALSE-VALUE)'
25255     TEST specifies an attribute test, whose format is defined below.
25256     The value of this expression is TRUE-VALUE if TEST is true,
25257     otherwise it is FALSE-VALUE.
25258
25259`(cond [TEST1 VALUE1 ...] DEFAULT)'
25260     The first operand of this expression is a vector containing an even
25261     number of expressions and consisting of pairs of TEST and VALUE
25262     expressions.  The value of the `cond' expression is that of the
25263     VALUE corresponding to the first true TEST expression.  If none of
25264     the TEST expressions are true, the value of the `cond' expression
25265     is that of the DEFAULT expression.
25266
25267 TEST expressions can have one of the following forms:
25268
25269`(const_int I)'
25270     This test is true if I is nonzero and false otherwise.
25271
25272`(not TEST)'
25273`(ior TEST1 TEST2)'
25274`(and TEST1 TEST2)'
25275     These tests are true if the indicated logical function is true.
25276
25277`(match_operand:M N PRED CONSTRAINTS)'
25278     This test is true if operand N of the insn whose attribute value
25279     is being determined has mode M (this part of the test is ignored
25280     if M is `VOIDmode') and the function specified by the string PRED
25281     returns a nonzero value when passed operand N and mode M (this
25282     part of the test is ignored if PRED is the null string).
25283
25284     The CONSTRAINTS operand is ignored and should be the null string.
25285
25286`(match_test C-EXPR)'
25287     The test is true if C expression C-EXPR is true.  In non-constant
25288     attributes, C-EXPR has access to the following variables:
25289
25290    INSN
25291          The rtl instruction under test.
25292
25293    WHICH_ALTERNATIVE
25294          The `define_insn' alternative that INSN matches.  *Note
25295          Output Statement::.
25296
25297    OPERANDS
25298          An array of INSN's rtl operands.
25299
25300     C-EXPR behaves like the condition in a C `if' statement, so there
25301     is no need to explicitly convert the expression into a boolean 0
25302     or 1 value.  For example, the following two tests are equivalent:
25303
25304          (match_test "x & 2")
25305          (match_test "(x & 2) != 0")
25306
25307`(le ARITH1 ARITH2)'
25308`(leu ARITH1 ARITH2)'
25309`(lt ARITH1 ARITH2)'
25310`(ltu ARITH1 ARITH2)'
25311`(gt ARITH1 ARITH2)'
25312`(gtu ARITH1 ARITH2)'
25313`(ge ARITH1 ARITH2)'
25314`(geu ARITH1 ARITH2)'
25315`(ne ARITH1 ARITH2)'
25316`(eq ARITH1 ARITH2)'
25317     These tests are true if the indicated comparison of the two
25318     arithmetic expressions is true.  Arithmetic expressions are formed
25319     with `plus', `minus', `mult', `div', `mod', `abs', `neg', `and',
25320     `ior', `xor', `not', `ashift', `lshiftrt', and `ashiftrt'
25321     expressions.
25322
25323     `const_int' and `symbol_ref' are always valid terms (*note Insn
25324     Lengths::,for additional forms).  `symbol_ref' is a string
25325     denoting a C expression that yields an `int' when evaluated by the
25326     `get_attr_...' routine.  It should normally be a global variable.
25327
25328`(eq_attr NAME VALUE)'
25329     NAME is a string specifying the name of an attribute.
25330
25331     VALUE is a string that is either a valid value for attribute NAME,
25332     a comma-separated list of values, or `!' followed by a value or
25333     list.  If VALUE does not begin with a `!', this test is true if
25334     the value of the NAME attribute of the current insn is in the list
25335     specified by VALUE.  If VALUE begins with a `!', this test is true
25336     if the attribute's value is _not_ in the specified list.
25337
25338     For example,
25339
25340          (eq_attr "type" "load,store")
25341
25342     is equivalent to
25343
25344          (ior (eq_attr "type" "load") (eq_attr "type" "store"))
25345
25346     If NAME specifies an attribute of `alternative', it refers to the
25347     value of the compiler variable `which_alternative' (*note Output
25348     Statement::) and the values must be small integers.  For example,
25349
25350          (eq_attr "alternative" "2,3")
25351
25352     is equivalent to
25353
25354          (ior (eq (symbol_ref "which_alternative") (const_int 2))
25355               (eq (symbol_ref "which_alternative") (const_int 3)))
25356
25357     Note that, for most attributes, an `eq_attr' test is simplified in
25358     cases where the value of the attribute being tested is known for
25359     all insns matching a particular pattern.  This is by far the most
25360     common case.
25361
25362`(attr_flag NAME)'
25363     The value of an `attr_flag' expression is true if the flag
25364     specified by NAME is true for the `insn' currently being scheduled.
25365
25366     NAME is a string specifying one of a fixed set of flags to test.
25367     Test the flags `forward' and `backward' to determine the direction
25368     of a conditional branch.
25369
25370     This example describes a conditional branch delay slot which can
25371     be nullified for forward branches that are taken (annul-true) or
25372     for backward branches which are not taken (annul-false).
25373
25374          (define_delay (eq_attr "type" "cbranch")
25375            [(eq_attr "in_branch_delay" "true")
25376             (and (eq_attr "in_branch_delay" "true")
25377                  (attr_flag "forward"))
25378             (and (eq_attr "in_branch_delay" "true")
25379                  (attr_flag "backward"))])
25380
25381     The `forward' and `backward' flags are false if the current `insn'
25382     being scheduled is not a conditional branch.
25383
25384     `attr_flag' is only used during delay slot scheduling and has no
25385     meaning to other passes of the compiler.
25386
25387`(attr NAME)'
25388     The value of another attribute is returned.  This is most useful
25389     for numeric attributes, as `eq_attr' and `attr_flag' produce more
25390     efficient code for non-numeric attributes.
25391
25392
25393File: gccint.info,  Node: Tagging Insns,  Next: Attr Example,  Prev: Expressions,  Up: Insn Attributes
25394
2539516.19.3 Assigning Attribute Values to Insns
25396-------------------------------------------
25397
25398The value assigned to an attribute of an insn is primarily determined by
25399which pattern is matched by that insn (or which `define_peephole'
25400generated it).  Every `define_insn' and `define_peephole' can have an
25401optional last argument to specify the values of attributes for matching
25402insns.  The value of any attribute not specified in a particular insn
25403is set to the default value for that attribute, as specified in its
25404`define_attr'.  Extensive use of default values for attributes permits
25405the specification of the values for only one or two attributes in the
25406definition of most insn patterns, as seen in the example in the next
25407section.
25408
25409 The optional last argument of `define_insn' and `define_peephole' is a
25410vector of expressions, each of which defines the value for a single
25411attribute.  The most general way of assigning an attribute's value is
25412to use a `set' expression whose first operand is an `attr' expression
25413giving the name of the attribute being set.  The second operand of the
25414`set' is an attribute expression (*note Expressions::) giving the value
25415of the attribute.
25416
25417 When the attribute value depends on the `alternative' attribute (i.e.,
25418which is the applicable alternative in the constraint of the insn), the
25419`set_attr_alternative' expression can be used.  It allows the
25420specification of a vector of attribute expressions, one for each
25421alternative.
25422
25423 When the generality of arbitrary attribute expressions is not required,
25424the simpler `set_attr' expression can be used, which allows specifying
25425a string giving either a single attribute value or a list of attribute
25426values, one for each alternative.
25427
25428 The form of each of the above specifications is shown below.  In each
25429case, NAME is a string specifying the attribute to be set.
25430
25431`(set_attr NAME VALUE-STRING)'
25432     VALUE-STRING is either a string giving the desired attribute value,
25433     or a string containing a comma-separated list giving the values for
25434     succeeding alternatives.  The number of elements must match the
25435     number of alternatives in the constraint of the insn pattern.
25436
25437     Note that it may be useful to specify `*' for some alternative, in
25438     which case the attribute will assume its default value for insns
25439     matching that alternative.
25440
25441`(set_attr_alternative NAME [VALUE1 VALUE2 ...])'
25442     Depending on the alternative of the insn, the value will be one of
25443     the specified values.  This is a shorthand for using a `cond' with
25444     tests on the `alternative' attribute.
25445
25446`(set (attr NAME) VALUE)'
25447     The first operand of this `set' must be the special RTL expression
25448     `attr', whose sole operand is a string giving the name of the
25449     attribute being set.  VALUE is the value of the attribute.
25450
25451 The following shows three different ways of representing the same
25452attribute value specification:
25453
25454     (set_attr "type" "load,store,arith")
25455
25456     (set_attr_alternative "type"
25457                           [(const_string "load") (const_string "store")
25458                            (const_string "arith")])
25459
25460     (set (attr "type")
25461          (cond [(eq_attr "alternative" "1") (const_string "load")
25462                 (eq_attr "alternative" "2") (const_string "store")]
25463                (const_string "arith")))
25464
25465 The `define_asm_attributes' expression provides a mechanism to specify
25466the attributes assigned to insns produced from an `asm' statement.  It
25467has the form:
25468
25469     (define_asm_attributes [ATTR-SETS])
25470
25471where ATTR-SETS is specified the same as for both the `define_insn' and
25472the `define_peephole' expressions.
25473
25474 These values will typically be the "worst case" attribute values.  For
25475example, they might indicate that the condition code will be clobbered.
25476
25477 A specification for a `length' attribute is handled specially.  The
25478way to compute the length of an `asm' insn is to multiply the length
25479specified in the expression `define_asm_attributes' by the number of
25480machine instructions specified in the `asm' statement, determined by
25481counting the number of semicolons and newlines in the string.
25482Therefore, the value of the `length' attribute specified in a
25483`define_asm_attributes' should be the maximum possible length of a
25484single machine instruction.
25485
25486
25487File: gccint.info,  Node: Attr Example,  Next: Insn Lengths,  Prev: Tagging Insns,  Up: Insn Attributes
25488
2548916.19.4 Example of Attribute Specifications
25490-------------------------------------------
25491
25492The judicious use of defaulting is important in the efficient use of
25493insn attributes.  Typically, insns are divided into "types" and an
25494attribute, customarily called `type', is used to represent this value.
25495This attribute is normally used only to define the default value for
25496other attributes.  An example will clarify this usage.
25497
25498 Assume we have a RISC machine with a condition code and in which only
25499full-word operations are performed in registers.  Let us assume that we
25500can divide all insns into loads, stores, (integer) arithmetic
25501operations, floating point operations, and branches.
25502
25503 Here we will concern ourselves with determining the effect of an insn
25504on the condition code and will limit ourselves to the following possible
25505effects:  The condition code can be set unpredictably (clobbered), not
25506be changed, be set to agree with the results of the operation, or only
25507changed if the item previously set into the condition code has been
25508modified.
25509
25510 Here is part of a sample `md' file for such a machine:
25511
25512     (define_attr "type" "load,store,arith,fp,branch" (const_string "arith"))
25513
25514     (define_attr "cc" "clobber,unchanged,set,change0"
25515                  (cond [(eq_attr "type" "load")
25516                             (const_string "change0")
25517                         (eq_attr "type" "store,branch")
25518                             (const_string "unchanged")
25519                         (eq_attr "type" "arith")
25520                             (if_then_else (match_operand:SI 0 "" "")
25521                                           (const_string "set")
25522                                           (const_string "clobber"))]
25523                        (const_string "clobber")))
25524
25525     (define_insn ""
25526       [(set (match_operand:SI 0 "general_operand" "=r,r,m")
25527             (match_operand:SI 1 "general_operand" "r,m,r"))]
25528       ""
25529       "@
25530        move %0,%1
25531        load %0,%1
25532        store %0,%1"
25533       [(set_attr "type" "arith,load,store")])
25534
25535 Note that we assume in the above example that arithmetic operations
25536performed on quantities smaller than a machine word clobber the
25537condition code since they will set the condition code to a value
25538corresponding to the full-word result.
25539
25540
25541File: gccint.info,  Node: Insn Lengths,  Next: Constant Attributes,  Prev: Attr Example,  Up: Insn Attributes
25542
2554316.19.5 Computing the Length of an Insn
25544---------------------------------------
25545
25546For many machines, multiple types of branch instructions are provided,
25547each for different length branch displacements.  In most cases, the
25548assembler will choose the correct instruction to use.  However, when
25549the assembler cannot do so, GCC can when a special attribute, the
25550`length' attribute, is defined.  This attribute must be defined to have
25551numeric values by specifying a null string in its `define_attr'.
25552
25553 In the case of the `length' attribute, two additional forms of
25554arithmetic terms are allowed in test expressions:
25555
25556`(match_dup N)'
25557     This refers to the address of operand N of the current insn, which
25558     must be a `label_ref'.
25559
25560`(pc)'
25561     For non-branch instructions and backward branch instructions, this
25562     refers to the address of the current insn.  But for forward branch
25563     instructions, this refers to the address of the next insn, because
25564     the length of the current insn is to be computed.
25565
25566 For normal insns, the length will be determined by value of the
25567`length' attribute.  In the case of `addr_vec' and `addr_diff_vec' insn
25568patterns, the length is computed as the number of vectors multiplied by
25569the size of each vector.
25570
25571 Lengths are measured in addressable storage units (bytes).
25572
25573 The following macros can be used to refine the length computation:
25574
25575`ADJUST_INSN_LENGTH (INSN, LENGTH)'
25576     If defined, modifies the length assigned to instruction INSN as a
25577     function of the context in which it is used.  LENGTH is an lvalue
25578     that contains the initially computed length of the insn and should
25579     be updated with the correct length of the insn.
25580
25581     This macro will normally not be required.  A case in which it is
25582     required is the ROMP.  On this machine, the size of an `addr_vec'
25583     insn must be increased by two to compensate for the fact that
25584     alignment may be required.
25585
25586 The routine that returns `get_attr_length' (the value of the `length'
25587attribute) can be used by the output routine to determine the form of
25588the branch instruction to be written, as the example below illustrates.
25589
25590 As an example of the specification of variable-length branches,
25591consider the IBM 360.  If we adopt the convention that a register will
25592be set to the starting address of a function, we can jump to labels
25593within 4k of the start using a four-byte instruction.  Otherwise, we
25594need a six-byte sequence to load the address from memory and then
25595branch to it.
25596
25597 On such a machine, a pattern for a branch instruction might be
25598specified as follows:
25599
25600     (define_insn "jump"
25601       [(set (pc)
25602             (label_ref (match_operand 0 "" "")))]
25603       ""
25604     {
25605        return (get_attr_length (insn) == 4
25606                ? "b %l0" : "l r15,=a(%l0); br r15");
25607     }
25608       [(set (attr "length")
25609             (if_then_else (lt (match_dup 0) (const_int 4096))
25610                           (const_int 4)
25611                           (const_int 6)))])
25612
25613
25614File: gccint.info,  Node: Constant Attributes,  Next: Delay Slots,  Prev: Insn Lengths,  Up: Insn Attributes
25615
2561616.19.6 Constant Attributes
25617---------------------------
25618
25619A special form of `define_attr', where the expression for the default
25620value is a `const' expression, indicates an attribute that is constant
25621for a given run of the compiler.  Constant attributes may be used to
25622specify which variety of processor is used.  For example,
25623
25624     (define_attr "cpu" "m88100,m88110,m88000"
25625      (const
25626       (cond [(symbol_ref "TARGET_88100") (const_string "m88100")
25627              (symbol_ref "TARGET_88110") (const_string "m88110")]
25628             (const_string "m88000"))))
25629
25630     (define_attr "memory" "fast,slow"
25631      (const
25632       (if_then_else (symbol_ref "TARGET_FAST_MEM")
25633                     (const_string "fast")
25634                     (const_string "slow"))))
25635
25636 The routine generated for constant attributes has no parameters as it
25637does not depend on any particular insn.  RTL expressions used to define
25638the value of a constant attribute may use the `symbol_ref' form, but
25639may not use either the `match_operand' form or `eq_attr' forms
25640involving insn attributes.
25641
25642
25643File: gccint.info,  Node: Delay Slots,  Next: Processor pipeline description,  Prev: Constant Attributes,  Up: Insn Attributes
25644
2564516.19.7 Delay Slot Scheduling
25646-----------------------------
25647
25648The insn attribute mechanism can be used to specify the requirements for
25649delay slots, if any, on a target machine.  An instruction is said to
25650require a "delay slot" if some instructions that are physically after
25651the instruction are executed as if they were located before it.
25652Classic examples are branch and call instructions, which often execute
25653the following instruction before the branch or call is performed.
25654
25655 On some machines, conditional branch instructions can optionally
25656"annul" instructions in the delay slot.  This means that the
25657instruction will not be executed for certain branch outcomes.  Both
25658instructions that annul if the branch is true and instructions that
25659annul if the branch is false are supported.
25660
25661 Delay slot scheduling differs from instruction scheduling in that
25662determining whether an instruction needs a delay slot is dependent only
25663on the type of instruction being generated, not on data flow between the
25664instructions.  See the next section for a discussion of data-dependent
25665instruction scheduling.
25666
25667 The requirement of an insn needing one or more delay slots is indicated
25668via the `define_delay' expression.  It has the following form:
25669
25670     (define_delay TEST
25671                   [DELAY-1 ANNUL-TRUE-1 ANNUL-FALSE-1
25672                    DELAY-2 ANNUL-TRUE-2 ANNUL-FALSE-2
25673                    ...])
25674
25675 TEST is an attribute test that indicates whether this `define_delay'
25676applies to a particular insn.  If so, the number of required delay
25677slots is determined by the length of the vector specified as the second
25678argument.  An insn placed in delay slot N must satisfy attribute test
25679DELAY-N.  ANNUL-TRUE-N is an attribute test that specifies which insns
25680may be annulled if the branch is true.  Similarly, ANNUL-FALSE-N
25681specifies which insns in the delay slot may be annulled if the branch
25682is false.  If annulling is not supported for that delay slot, `(nil)'
25683should be coded.
25684
25685 For example, in the common case where branch and call insns require a
25686single delay slot, which may contain any insn other than a branch or
25687call, the following would be placed in the `md' file:
25688
25689     (define_delay (eq_attr "type" "branch,call")
25690                   [(eq_attr "type" "!branch,call") (nil) (nil)])
25691
25692 Multiple `define_delay' expressions may be specified.  In this case,
25693each such expression specifies different delay slot requirements and
25694there must be no insn for which tests in two `define_delay' expressions
25695are both true.
25696
25697 For example, if we have a machine that requires one delay slot for
25698branches but two for calls,  no delay slot can contain a branch or call
25699insn, and any valid insn in the delay slot for the branch can be
25700annulled if the branch is true, we might represent this as follows:
25701
25702     (define_delay (eq_attr "type" "branch")
25703        [(eq_attr "type" "!branch,call")
25704         (eq_attr "type" "!branch,call")
25705         (nil)])
25706
25707     (define_delay (eq_attr "type" "call")
25708                   [(eq_attr "type" "!branch,call") (nil) (nil)
25709                    (eq_attr "type" "!branch,call") (nil) (nil)])
25710
25711
25712File: gccint.info,  Node: Processor pipeline description,  Prev: Delay Slots,  Up: Insn Attributes
25713
2571416.19.8 Specifying processor pipeline description
25715-------------------------------------------------
25716
25717To achieve better performance, most modern processors (super-pipelined,
25718superscalar RISC, and VLIW processors) have many "functional units" on
25719which several instructions can be executed simultaneously.  An
25720instruction starts execution if its issue conditions are satisfied.  If
25721not, the instruction is stalled until its conditions are satisfied.
25722Such "interlock (pipeline) delay" causes interruption of the fetching
25723of successor instructions (or demands nop instructions, e.g. for some
25724MIPS processors).
25725
25726 There are two major kinds of interlock delays in modern processors.
25727The first one is a data dependence delay determining "instruction
25728latency time".  The instruction execution is not started until all
25729source data have been evaluated by prior instructions (there are more
25730complex cases when the instruction execution starts even when the data
25731are not available but will be ready in given time after the instruction
25732execution start).  Taking the data dependence delays into account is
25733simple.  The data dependence (true, output, and anti-dependence) delay
25734between two instructions is given by a constant.  In most cases this
25735approach is adequate.  The second kind of interlock delays is a
25736reservation delay.  The reservation delay means that two instructions
25737under execution will be in need of shared processors resources, i.e.
25738buses, internal registers, and/or functional units, which are reserved
25739for some time.  Taking this kind of delay into account is complex
25740especially for modern RISC processors.
25741
25742 The task of exploiting more processor parallelism is solved by an
25743instruction scheduler.  For a better solution to this problem, the
25744instruction scheduler has to have an adequate description of the
25745processor parallelism (or "pipeline description").  GCC machine
25746descriptions describe processor parallelism and functional unit
25747reservations for groups of instructions with the aid of "regular
25748expressions".
25749
25750 The GCC instruction scheduler uses a "pipeline hazard recognizer" to
25751figure out the possibility of the instruction issue by the processor on
25752a given simulated processor cycle.  The pipeline hazard recognizer is
25753automatically generated from the processor pipeline description.  The
25754pipeline hazard recognizer generated from the machine description is
25755based on a deterministic finite state automaton (DFA): the instruction
25756issue is possible if there is a transition from one automaton state to
25757another one.  This algorithm is very fast, and furthermore, its speed
25758is not dependent on processor complexity(1).
25759
25760 The rest of this section describes the directives that constitute an
25761automaton-based processor pipeline description.  The order of these
25762constructions within the machine description file is not important.
25763
25764 The following optional construction describes names of automata
25765generated and used for the pipeline hazards recognition.  Sometimes the
25766generated finite state automaton used by the pipeline hazard recognizer
25767is large.  If we use more than one automaton and bind functional units
25768to the automata, the total size of the automata is usually less than
25769the size of the single automaton.  If there is no one such
25770construction, only one finite state automaton is generated.
25771
25772     (define_automaton AUTOMATA-NAMES)
25773
25774 AUTOMATA-NAMES is a string giving names of the automata.  The names
25775are separated by commas.  All the automata should have unique names.
25776The automaton name is used in the constructions `define_cpu_unit' and
25777`define_query_cpu_unit'.
25778
25779 Each processor functional unit used in the description of instruction
25780reservations should be described by the following construction.
25781
25782     (define_cpu_unit UNIT-NAMES [AUTOMATON-NAME])
25783
25784 UNIT-NAMES is a string giving the names of the functional units
25785separated by commas.  Don't use name `nothing', it is reserved for
25786other goals.
25787
25788 AUTOMATON-NAME is a string giving the name of the automaton with which
25789the unit is bound.  The automaton should be described in construction
25790`define_automaton'.  You should give "automaton-name", if there is a
25791defined automaton.
25792
25793 The assignment of units to automata are constrained by the uses of the
25794units in insn reservations.  The most important constraint is: if a
25795unit reservation is present on a particular cycle of an alternative for
25796an insn reservation, then some unit from the same automaton must be
25797present on the same cycle for the other alternatives of the insn
25798reservation.  The rest of the constraints are mentioned in the
25799description of the subsequent constructions.
25800
25801 The following construction describes CPU functional units analogously
25802to `define_cpu_unit'.  The reservation of such units can be queried for
25803an automaton state.  The instruction scheduler never queries
25804reservation of functional units for given automaton state.  So as a
25805rule, you don't need this construction.  This construction could be
25806used for future code generation goals (e.g. to generate VLIW insn
25807templates).
25808
25809     (define_query_cpu_unit UNIT-NAMES [AUTOMATON-NAME])
25810
25811 UNIT-NAMES is a string giving names of the functional units separated
25812by commas.
25813
25814 AUTOMATON-NAME is a string giving the name of the automaton with which
25815the unit is bound.
25816
25817 The following construction is the major one to describe pipeline
25818characteristics of an instruction.
25819
25820     (define_insn_reservation INSN-NAME DEFAULT_LATENCY
25821                              CONDITION REGEXP)
25822
25823 DEFAULT_LATENCY is a number giving latency time of the instruction.
25824There is an important difference between the old description and the
25825automaton based pipeline description.  The latency time is used for all
25826dependencies when we use the old description.  In the automaton based
25827pipeline description, the given latency time is only used for true
25828dependencies.  The cost of anti-dependencies is always zero and the
25829cost of output dependencies is the difference between latency times of
25830the producing and consuming insns (if the difference is negative, the
25831cost is considered to be zero).  You can always change the default
25832costs for any description by using the target hook
25833`TARGET_SCHED_ADJUST_COST' (*note Scheduling::).
25834
25835 INSN-NAME is a string giving the internal name of the insn.  The
25836internal names are used in constructions `define_bypass' and in the
25837automaton description file generated for debugging.  The internal name
25838has nothing in common with the names in `define_insn'.  It is a good
25839practice to use insn classes described in the processor manual.
25840
25841 CONDITION defines what RTL insns are described by this construction.
25842You should remember that you will be in trouble if CONDITION for two or
25843more different `define_insn_reservation' constructions is TRUE for an
25844insn.  In this case what reservation will be used for the insn is not
25845defined.  Such cases are not checked during generation of the pipeline
25846hazards recognizer because in general recognizing that two conditions
25847may have the same value is quite difficult (especially if the conditions
25848contain `symbol_ref').  It is also not checked during the pipeline
25849hazard recognizer work because it would slow down the recognizer
25850considerably.
25851
25852 REGEXP is a string describing the reservation of the cpu's functional
25853units by the instruction.  The reservations are described by a regular
25854expression according to the following syntax:
25855
25856            regexp = regexp "," oneof
25857                   | oneof
25858
25859            oneof = oneof "|" allof
25860                  | allof
25861
25862            allof = allof "+" repeat
25863                  | repeat
25864
25865            repeat = element "*" number
25866                   | element
25867
25868            element = cpu_function_unit_name
25869                    | reservation_name
25870                    | result_name
25871                    | "nothing"
25872                    | "(" regexp ")"
25873
25874   * `,' is used for describing the start of the next cycle in the
25875     reservation.
25876
25877   * `|' is used for describing a reservation described by the first
25878     regular expression *or* a reservation described by the second
25879     regular expression *or* etc.
25880
25881   * `+' is used for describing a reservation described by the first
25882     regular expression *and* a reservation described by the second
25883     regular expression *and* etc.
25884
25885   * `*' is used for convenience and simply means a sequence in which
25886     the regular expression are repeated NUMBER times with cycle
25887     advancing (see `,').
25888
25889   * `cpu_function_unit_name' denotes reservation of the named
25890     functional unit.
25891
25892   * `reservation_name' -- see description of construction
25893     `define_reservation'.
25894
25895   * `nothing' denotes no unit reservations.
25896
25897 Sometimes unit reservations for different insns contain common parts.
25898In such case, you can simplify the pipeline description by describing
25899the common part by the following construction
25900
25901     (define_reservation RESERVATION-NAME REGEXP)
25902
25903 RESERVATION-NAME is a string giving name of REGEXP.  Functional unit
25904names and reservation names are in the same name space.  So the
25905reservation names should be different from the functional unit names
25906and can not be the reserved name `nothing'.
25907
25908 The following construction is used to describe exceptions in the
25909latency time for given instruction pair.  This is so called bypasses.
25910
25911     (define_bypass NUMBER OUT_INSN_NAMES IN_INSN_NAMES
25912                    [GUARD])
25913
25914 NUMBER defines when the result generated by the instructions given in
25915string OUT_INSN_NAMES will be ready for the instructions given in
25916string IN_INSN_NAMES.  Each of these strings is a comma-separated list
25917of filename-style globs and they refer to the names of
25918`define_insn_reservation's.  For example:
25919     (define_bypass 1 "cpu1_load_*, cpu1_store_*" "cpu1_load_*")
25920 defines a bypass between instructions that start with `cpu1_load_' or
25921`cpu1_store_' and those that start with `cpu1_load_'.
25922
25923 GUARD is an optional string giving the name of a C function which
25924defines an additional guard for the bypass.  The function will get the
25925two insns as parameters.  If the function returns zero the bypass will
25926be ignored for this case.  The additional guard is necessary to
25927recognize complicated bypasses, e.g. when the consumer is only an
25928address of insn `store' (not a stored value).
25929
25930 If there are more one bypass with the same output and input insns, the
25931chosen bypass is the first bypass with a guard in description whose
25932guard function returns nonzero.  If there is no such bypass, then
25933bypass without the guard function is chosen.
25934
25935 The following five constructions are usually used to describe VLIW
25936processors, or more precisely, to describe a placement of small
25937instructions into VLIW instruction slots.  They can be used for RISC
25938processors, too.
25939
25940     (exclusion_set UNIT-NAMES UNIT-NAMES)
25941     (presence_set UNIT-NAMES PATTERNS)
25942     (final_presence_set UNIT-NAMES PATTERNS)
25943     (absence_set UNIT-NAMES PATTERNS)
25944     (final_absence_set UNIT-NAMES PATTERNS)
25945
25946 UNIT-NAMES is a string giving names of functional units separated by
25947commas.
25948
25949 PATTERNS is a string giving patterns of functional units separated by
25950comma.  Currently pattern is one unit or units separated by
25951white-spaces.
25952
25953 The first construction (`exclusion_set') means that each functional
25954unit in the first string can not be reserved simultaneously with a unit
25955whose name is in the second string and vice versa.  For example, the
25956construction is useful for describing processors (e.g. some SPARC
25957processors) with a fully pipelined floating point functional unit which
25958can execute simultaneously only single floating point insns or only
25959double floating point insns.
25960
25961 The second construction (`presence_set') means that each functional
25962unit in the first string can not be reserved unless at least one of
25963pattern of units whose names are in the second string is reserved.
25964This is an asymmetric relation.  For example, it is useful for
25965description that VLIW `slot1' is reserved after `slot0' reservation.
25966We could describe it by the following construction
25967
25968     (presence_set "slot1" "slot0")
25969
25970 Or `slot1' is reserved only after `slot0' and unit `b0' reservation.
25971In this case we could write
25972
25973     (presence_set "slot1" "slot0 b0")
25974
25975 The third construction (`final_presence_set') is analogous to
25976`presence_set'.  The difference between them is when checking is done.
25977When an instruction is issued in given automaton state reflecting all
25978current and planned unit reservations, the automaton state is changed.
25979The first state is a source state, the second one is a result state.
25980Checking for `presence_set' is done on the source state reservation,
25981checking for `final_presence_set' is done on the result reservation.
25982This construction is useful to describe a reservation which is actually
25983two subsequent reservations.  For example, if we use
25984
25985     (presence_set "slot1" "slot0")
25986
25987 the following insn will be never issued (because `slot1' requires
25988`slot0' which is absent in the source state).
25989
25990     (define_reservation "insn_and_nop" "slot0 + slot1")
25991
25992 but it can be issued if we use analogous `final_presence_set'.
25993
25994 The forth construction (`absence_set') means that each functional unit
25995in the first string can be reserved only if each pattern of units whose
25996names are in the second string is not reserved.  This is an asymmetric
25997relation (actually `exclusion_set' is analogous to this one but it is
25998symmetric).  For example it might be useful in a VLIW description to
25999say that `slot0' cannot be reserved after either `slot1' or `slot2'
26000have been reserved.  This can be described as:
26001
26002     (absence_set "slot0" "slot1, slot2")
26003
26004 Or `slot2' can not be reserved if `slot0' and unit `b0' are reserved
26005or `slot1' and unit `b1' are reserved.  In this case we could write
26006
26007     (absence_set "slot2" "slot0 b0, slot1 b1")
26008
26009 All functional units mentioned in a set should belong to the same
26010automaton.
26011
26012 The last construction (`final_absence_set') is analogous to
26013`absence_set' but checking is done on the result (state) reservation.
26014See comments for `final_presence_set'.
26015
26016 You can control the generator of the pipeline hazard recognizer with
26017the following construction.
26018
26019     (automata_option OPTIONS)
26020
26021 OPTIONS is a string giving options which affect the generated code.
26022Currently there are the following options:
26023
26024   * "no-minimization" makes no minimization of the automaton.  This is
26025     only worth to do when we are debugging the description and need to
26026     look more accurately at reservations of states.
26027
26028   * "time" means printing time statistics about the generation of
26029     automata.
26030
26031   * "stats" means printing statistics about the generated automata
26032     such as the number of DFA states, NDFA states and arcs.
26033
26034   * "v" means a generation of the file describing the result automata.
26035     The file has suffix `.dfa' and can be used for the description
26036     verification and debugging.
26037
26038   * "w" means a generation of warning instead of error for
26039     non-critical errors.
26040
26041   * "no-comb-vect" prevents the automaton generator from generating
26042     two data structures and comparing them for space efficiency.  Using
26043     a comb vector to represent transitions may be better, but it can be
26044     very expensive to construct.  This option is useful if the build
26045     process spends an unacceptably long time in genautomata.
26046
26047   * "ndfa" makes nondeterministic finite state automata.  This affects
26048     the treatment of operator `|' in the regular expressions.  The
26049     usual treatment of the operator is to try the first alternative
26050     and, if the reservation is not possible, the second alternative.
26051     The nondeterministic treatment means trying all alternatives, some
26052     of them may be rejected by reservations in the subsequent insns.
26053
26054   * "collapse-ndfa" modifies the behaviour of the generator when
26055     producing an automaton.  An additional state transition to
26056     collapse a nondeterministic NDFA state to a deterministic DFA
26057     state is generated.  It can be triggered by passing `const0_rtx' to
26058     state_transition.  In such an automaton, cycle advance transitions
26059     are available only for these collapsed states.  This option is
26060     useful for ports that want to use the `ndfa' option, but also want
26061     to use `define_query_cpu_unit' to assign units to insns issued in
26062     a cycle.
26063
26064   * "progress" means output of a progress bar showing how many states
26065     were generated so far for automaton being processed.  This is
26066     useful during debugging a DFA description.  If you see too many
26067     generated states, you could interrupt the generator of the pipeline
26068     hazard recognizer and try to figure out a reason for generation of
26069     the huge automaton.
26070
26071 As an example, consider a superscalar RISC machine which can issue
26072three insns (two integer insns and one floating point insn) on the
26073cycle but can finish only two insns.  To describe this, we define the
26074following functional units.
26075
26076     (define_cpu_unit "i0_pipeline, i1_pipeline, f_pipeline")
26077     (define_cpu_unit "port0, port1")
26078
26079 All simple integer insns can be executed in any integer pipeline and
26080their result is ready in two cycles.  The simple integer insns are
26081issued into the first pipeline unless it is reserved, otherwise they
26082are issued into the second pipeline.  Integer division and
26083multiplication insns can be executed only in the second integer
26084pipeline and their results are ready correspondingly in 8 and 4 cycles.
26085The integer division is not pipelined, i.e. the subsequent integer
26086division insn can not be issued until the current division insn
26087finished.  Floating point insns are fully pipelined and their results
26088are ready in 3 cycles.  Where the result of a floating point insn is
26089used by an integer insn, an additional delay of one cycle is incurred.
26090To describe all of this we could specify
26091
26092     (define_cpu_unit "div")
26093
26094     (define_insn_reservation "simple" 2 (eq_attr "type" "int")
26095                              "(i0_pipeline | i1_pipeline), (port0 | port1)")
26096
26097     (define_insn_reservation "mult" 4 (eq_attr "type" "mult")
26098                              "i1_pipeline, nothing*2, (port0 | port1)")
26099
26100     (define_insn_reservation "div" 8 (eq_attr "type" "div")
26101                              "i1_pipeline, div*7, div + (port0 | port1)")
26102
26103     (define_insn_reservation "float" 3 (eq_attr "type" "float")
26104                              "f_pipeline, nothing, (port0 | port1))
26105
26106     (define_bypass 4 "float" "simple,mult,div")
26107
26108 To simplify the description we could describe the following reservation
26109
26110     (define_reservation "finish" "port0|port1")
26111
26112 and use it in all `define_insn_reservation' as in the following
26113construction
26114
26115     (define_insn_reservation "simple" 2 (eq_attr "type" "int")
26116                              "(i0_pipeline | i1_pipeline), finish")
26117
26118 ---------- Footnotes ----------
26119
26120 (1) However, the size of the automaton depends on processor
26121complexity.  To limit this effect, machine descriptions can split
26122orthogonal parts of the machine description among several automata: but
26123then, since each of these must be stepped independently, this does
26124cause a small decrease in the algorithm's performance.
26125
26126
26127File: gccint.info,  Node: Conditional Execution,  Next: Define Subst,  Prev: Insn Attributes,  Up: Machine Desc
26128
2612916.20 Conditional Execution
26130===========================
26131
26132A number of architectures provide for some form of conditional
26133execution, or predication.  The hallmark of this feature is the ability
26134to nullify most of the instructions in the instruction set.  When the
26135instruction set is large and not entirely symmetric, it can be quite
26136tedious to describe these forms directly in the `.md' file.  An
26137alternative is the `define_cond_exec' template.
26138
26139     (define_cond_exec
26140       [PREDICATE-PATTERN]
26141       "CONDITION"
26142       "OUTPUT-TEMPLATE")
26143
26144 PREDICATE-PATTERN is the condition that must be true for the insn to
26145be executed at runtime and should match a relational operator.  One can
26146use `match_operator' to match several relational operators at once.
26147Any `match_operand' operands must have no more than one alternative.
26148
26149 CONDITION is a C expression that must be true for the generated
26150pattern to match.
26151
26152 OUTPUT-TEMPLATE is a string similar to the `define_insn' output
26153template (*note Output Template::), except that the `*' and `@' special
26154cases do not apply.  This is only useful if the assembly text for the
26155predicate is a simple prefix to the main insn.  In order to handle the
26156general case, there is a global variable `current_insn_predicate' that
26157will contain the entire predicate if the current insn is predicated,
26158and will otherwise be `NULL'.
26159
26160 When `define_cond_exec' is used, an implicit reference to the
26161`predicable' instruction attribute is made.  *Note Insn Attributes::.
26162This attribute must be a boolean (i.e. have exactly two elements in its
26163LIST-OF-VALUES), with the possible values being `no' and `yes'.  The
26164default and all uses in the insns must be a simple constant, not a
26165complex expressions.  It may, however, depend on the alternative, by
26166using a comma-separated list of values.  If that is the case, the port
26167should also define an `enabled' attribute (*note Disable Insn
26168Alternatives::), which should also allow only `no' and `yes' as its
26169values.
26170
26171 For each `define_insn' for which the `predicable' attribute is true, a
26172new `define_insn' pattern will be generated that matches a predicated
26173version of the instruction.  For example,
26174
26175     (define_insn "addsi"
26176       [(set (match_operand:SI 0 "register_operand" "r")
26177             (plus:SI (match_operand:SI 1 "register_operand" "r")
26178                      (match_operand:SI 2 "register_operand" "r")))]
26179       "TEST1"
26180       "add %2,%1,%0")
26181
26182     (define_cond_exec
26183       [(ne (match_operand:CC 0 "register_operand" "c")
26184            (const_int 0))]
26185       "TEST2"
26186       "(%0)")
26187
26188generates a new pattern
26189
26190     (define_insn ""
26191       [(cond_exec
26192          (ne (match_operand:CC 3 "register_operand" "c") (const_int 0))
26193          (set (match_operand:SI 0 "register_operand" "r")
26194               (plus:SI (match_operand:SI 1 "register_operand" "r")
26195                        (match_operand:SI 2 "register_operand" "r"))))]
26196       "(TEST2) && (TEST1)"
26197       "(%3) add %2,%1,%0")
26198
26199
26200File: gccint.info,  Node: Define Subst,  Next: Constant Definitions,  Prev: Conditional Execution,  Up: Machine Desc
26201
2620216.21 RTL Templates Transformations
26203===================================
26204
26205For some hardware architectures there are common cases when the RTL
26206templates for the instructions can be derived from the other RTL
26207templates using simple transformations.  E.g., `i386.md' contains an
26208RTL template for the ordinary `sub' instruction-- `*subsi_1', and for
26209the `sub' instruction with subsequent zero-extension--`*subsi_1_zext'.
26210Such cases can be easily implemented by a single meta-template capable
26211of generating a modified case based on the initial one:
26212
26213     (define_subst "NAME"
26214       [INPUT-TEMPLATE]
26215       "CONDITION"
26216       [OUTPUT-TEMPLATE])
26217 INPUT-TEMPLATE is a pattern describing the source RTL template, which
26218will be transformed.
26219
26220 CONDITION is a C expression that is conjunct with the condition from
26221the input-template to generate a condition to be used in the
26222output-template.
26223
26224 OUTPUT-TEMPLATE is a pattern that will be used in the resulting
26225template.
26226
26227 `define_subst' mechanism is tightly coupled with the notion of the
26228subst attribute (*note Subst Iterators::).  The use of `define_subst'
26229is triggered by a reference to a subst attribute in the transforming
26230RTL template.  This reference initiates duplication of the source RTL
26231template and substitution of the attributes with their values.  The
26232source RTL template is left unchanged, while the copy is transformed by
26233`define_subst'.  This transformation can fail in the case when the
26234source RTL template is not matched against the input-template of the
26235`define_subst'.  In such case the copy is deleted.
26236
26237 `define_subst' can be used only in `define_insn' and `define_expand',
26238it cannot be used in other expressions (e.g. in
26239`define_insn_and_split').
26240
26241* Menu:
26242
26243* Define Subst Example::	    Example of `define_subst' work.
26244* Define Subst Pattern Matching::   Process of template comparison.
26245* Define Subst Output Template::    Generation of output template.
26246
26247
26248File: gccint.info,  Node: Define Subst Example,  Next: Define Subst Pattern Matching,  Up: Define Subst
26249
2625016.21.1 `define_subst' Example
26251------------------------------
26252
26253To illustrate how `define_subst' works, let us examine a simple
26254template transformation.
26255
26256 Suppose there are two kinds of instructions: one that touches flags and
26257the other that does not.  The instructions of the second type could be
26258generated with the following `define_subst':
26259
26260     (define_subst "add_clobber_subst"
26261       [(set (match_operand:SI 0 "" "")
26262             (match_operand:SI 1 "" ""))]
26263       ""
26264       [(set (match_dup 0)
26265             (match_dup 1))
26266        (clobber (reg:CC FLAGS_REG))]
26267
26268 This `define_subst' can be applied to any RTL pattern containing `set'
26269of mode SI and generates a copy with clobber when it is applied.
26270
26271 Assume there is an RTL template for a `max' instruction to be used in
26272`define_subst' mentioned above:
26273
26274     (define_insn "maxsi"
26275       [(set (match_operand:SI 0 "register_operand" "=r")
26276             (max:SI
26277               (match_operand:SI 1 "register_operand" "r")
26278               (match_operand:SI 2 "register_operand" "r")))]
26279       ""
26280       "max\t{%2, %1, %0|%0, %1, %2}"
26281      [...])
26282
26283 To mark the RTL template for `define_subst' application,
26284subst-attributes are used.  They should be declared in advance:
26285
26286     (define_subst_attr "add_clobber_name" "add_clobber_subst" "_noclobber" "_clobber")
26287
26288 Here `add_clobber_name' is the attribute name, `add_clobber_subst' is
26289the name of the corresponding `define_subst', the third argument
26290(`_noclobber') is the attribute value that would be substituted into
26291the unchanged version of the source RTL template, and the last argument
26292(`_clobber') is the value that would be substituted into the second,
26293transformed, version of the RTL template.
26294
26295 Once the subst-attribute has been defined, it should be used in RTL
26296templates which need to be processed by the `define_subst'.  So, the
26297original RTL template should be changed:
26298
26299     (define_insn "maxsi<add_clobber_name>"
26300       [(set (match_operand:SI 0 "register_operand" "=r")
26301             (max:SI
26302               (match_operand:SI 1 "register_operand" "r")
26303               (match_operand:SI 2 "register_operand" "r")))]
26304       ""
26305       "max\t{%2, %1, %0|%0, %1, %2}"
26306      [...])
26307
26308 The result of the `define_subst' usage would look like the following:
26309
26310     (define_insn "maxsi_noclobber"
26311       [(set (match_operand:SI 0 "register_operand" "=r")
26312             (max:SI
26313               (match_operand:SI 1 "register_operand" "r")
26314               (match_operand:SI 2 "register_operand" "r")))]
26315       ""
26316       "max\t{%2, %1, %0|%0, %1, %2}"
26317      [...])
26318     (define_insn "maxsi_clobber"
26319       [(set (match_operand:SI 0 "register_operand" "=r")
26320             (max:SI
26321               (match_operand:SI 1 "register_operand" "r")
26322               (match_operand:SI 2 "register_operand" "r")))
26323        (clobber (reg:CC FLAGS_REG))]
26324       ""
26325       "max\t{%2, %1, %0|%0, %1, %2}"
26326      [...])
26327
26328
26329File: gccint.info,  Node: Define Subst Pattern Matching,  Next: Define Subst Output Template,  Prev: Define Subst Example,  Up: Define Subst
26330
2633116.21.2 Pattern Matching in `define_subst'
26332------------------------------------------
26333
26334All expressions, allowed in `define_insn' or `define_expand', are
26335allowed in the input-template of `define_subst', except
26336`match_par_dup', `match_scratch', `match_parallel'. The meanings of
26337expressions in the input-template were changed:
26338
26339 `match_operand' matches any expression (possibly, a subtree in
26340RTL-template), if modes of the `match_operand' and this expression are
26341the same, or mode of the `match_operand' is `VOIDmode', or this
26342expression is `match_dup', `match_op_dup'.  If the expression is
26343`match_operand' too, and predicate of `match_operand' from the input
26344pattern is not empty, then the predicates are compared.  That can be
26345used for more accurate filtering of accepted RTL-templates.
26346
26347 `match_operator' matches common operators (like `plus', `minus'),
26348`unspec', `unspec_volatile' operators and `match_operator's from the
26349original pattern if the modes match and `match_operator' from the input
26350pattern has the same number of operands as the operator from the
26351original pattern.
26352
26353
26354File: gccint.info,  Node: Define Subst Output Template,  Prev: Define Subst Pattern Matching,  Up: Define Subst
26355
2635616.21.3 Generation of output template in `define_subst'
26357-------------------------------------------------------
26358
26359If all necessary checks for `define_subst' application pass, a new
26360RTL-pattern, based on the output-template, is created to replace the old
26361template.  Like in input-patterns, meanings of some RTL expressions are
26362changed when they are used in output-patterns of a `define_subst'.
26363Thus, `match_dup' is used for copying the whole expression from the
26364original pattern, which matched corresponding `match_operand' from the
26365input pattern.
26366
26367 `match_dup N' is used in the output template to be replaced with the
26368expression from the original pattern, which matched `match_operand N'
26369from the input pattern.  As a consequence, `match_dup' cannot be used
26370to point to `match_operand's from the output pattern, it should always
26371refer to a `match_operand' from the input pattern.
26372
26373 In the output template one can refer to the expressions from the
26374original pattern and create new ones.  For instance, some operands could
26375be added by means of standard `match_operand'.
26376
26377 After replacing `match_dup' with some RTL-subtree from the original
26378pattern, it could happen that several `match_operand's in the output
26379pattern have the same indexes.  It is unknown, how many and what
26380indexes would be used in the expression which would replace
26381`match_dup', so such conflicts in indexes are inevitable.  To overcome
26382this issue, `match_operands' and `match_operators', which were
26383introduced into the output pattern, are renumerated when all
26384`match_dup's are replaced.
26385
26386 Number of alternatives in `match_operand's introduced into the output
26387template `M' could differ from the number of alternatives in the
26388original pattern `N', so in the resultant pattern there would be `N*M'
26389alternatives.  Thus, constraints from the original pattern would be
26390duplicated `N' times, constraints from the output pattern would be
26391duplicated `M' times, producing all possible combinations.
26392
26393
26394File: gccint.info,  Node: Constant Definitions,  Next: Iterators,  Prev: Define Subst,  Up: Machine Desc
26395
2639616.22 Constant Definitions
26397==========================
26398
26399Using literal constants inside instruction patterns reduces legibility
26400and can be a maintenance problem.
26401
26402 To overcome this problem, you may use the `define_constants'
26403expression.  It contains a vector of name-value pairs.  From that point
26404on, wherever any of the names appears in the MD file, it is as if the
26405corresponding value had been written instead.  You may use
26406`define_constants' multiple times; each appearance adds more constants
26407to the table.  It is an error to redefine a constant with a different
26408value.
26409
26410 To come back to the a29k load multiple example, instead of
26411
26412     (define_insn ""
26413       [(match_parallel 0 "load_multiple_operation"
26414          [(set (match_operand:SI 1 "gpc_reg_operand" "=r")
26415                (match_operand:SI 2 "memory_operand" "m"))
26416           (use (reg:SI 179))
26417           (clobber (reg:SI 179))])]
26418       ""
26419       "loadm 0,0,%1,%2")
26420
26421 You could write:
26422
26423     (define_constants [
26424         (R_BP 177)
26425         (R_FC 178)
26426         (R_CR 179)
26427         (R_Q  180)
26428     ])
26429
26430     (define_insn ""
26431       [(match_parallel 0 "load_multiple_operation"
26432          [(set (match_operand:SI 1 "gpc_reg_operand" "=r")
26433                (match_operand:SI 2 "memory_operand" "m"))
26434           (use (reg:SI R_CR))
26435           (clobber (reg:SI R_CR))])]
26436       ""
26437       "loadm 0,0,%1,%2")
26438
26439 The constants that are defined with a define_constant are also output
26440in the insn-codes.h header file as #defines.
26441
26442 You can also use the machine description file to define enumerations.
26443Like the constants defined by `define_constant', these enumerations are
26444visible to both the machine description file and the main C code.
26445
26446 The syntax is as follows:
26447
26448     (define_c_enum "NAME" [
26449       VALUE0
26450       VALUE1
26451       ...
26452       VALUEN
26453     ])
26454
26455 This definition causes the equivalent of the following C code to appear
26456in `insn-constants.h':
26457
26458     enum NAME {
26459       VALUE0 = 0,
26460       VALUE1 = 1,
26461       ...
26462       VALUEN = N
26463     };
26464     #define NUM_CNAME_VALUES (N + 1)
26465
26466 where CNAME is the capitalized form of NAME.  It also makes each
26467VALUEI available in the machine description file, just as if it had
26468been declared with:
26469
26470     (define_constants [(VALUEI I)])
26471
26472 Each VALUEI is usually an upper-case identifier and usually begins
26473with CNAME.
26474
26475 You can split the enumeration definition into as many statements as
26476you like.  The above example is directly equivalent to:
26477
26478     (define_c_enum "NAME" [VALUE0])
26479     (define_c_enum "NAME" [VALUE1])
26480     ...
26481     (define_c_enum "NAME" [VALUEN])
26482
26483 Splitting the enumeration helps to improve the modularity of each
26484individual `.md' file.  For example, if a port defines its
26485synchronization instructions in a separate `sync.md' file, it is
26486convenient to define all synchronization-specific enumeration values in
26487`sync.md' rather than in the main `.md' file.
26488
26489 Some enumeration names have special significance to GCC:
26490
26491`unspecv'
26492     If an enumeration called `unspecv' is defined, GCC will use it
26493     when printing out `unspec_volatile' expressions.  For example:
26494
26495          (define_c_enum "unspecv" [
26496            UNSPECV_BLOCKAGE
26497          ])
26498
26499     causes GCC to print `(unspec_volatile ... 0)' as:
26500
26501          (unspec_volatile ... UNSPECV_BLOCKAGE)
26502
26503`unspec'
26504     If an enumeration called `unspec' is defined, GCC will use it when
26505     printing out `unspec' expressions.  GCC will also use it when
26506     printing out `unspec_volatile' expressions unless an `unspecv'
26507     enumeration is also defined.  You can therefore decide whether to
26508     keep separate enumerations for volatile and non-volatile
26509     expressions or whether to use the same enumeration for both.
26510
26511 Another way of defining an enumeration is to use `define_enum':
26512
26513     (define_enum "NAME" [
26514       VALUE0
26515       VALUE1
26516       ...
26517       VALUEN
26518     ])
26519
26520 This directive implies:
26521
26522     (define_c_enum "NAME" [
26523       CNAME_CVALUE0
26524       CNAME_CVALUE1
26525       ...
26526       CNAME_CVALUEN
26527     ])
26528
26529 where CVALUEI is the capitalized form of VALUEI.  However, unlike
26530`define_c_enum', the enumerations defined by `define_enum' can be used
26531in attribute specifications (*note define_enum_attr::).
26532
26533
26534File: gccint.info,  Node: Iterators,  Prev: Constant Definitions,  Up: Machine Desc
26535
2653616.23 Iterators
26537===============
26538
26539Ports often need to define similar patterns for more than one machine
26540mode or for more than one rtx code.  GCC provides some simple iterator
26541facilities to make this process easier.
26542
26543* Menu:
26544
26545* Mode Iterators::         Generating variations of patterns for different modes.
26546* Code Iterators::         Doing the same for codes.
26547* Int Iterators::          Doing the same for integers.
26548* Subst Iterators::	   Generating variations of patterns for define_subst.
26549
26550
26551File: gccint.info,  Node: Mode Iterators,  Next: Code Iterators,  Up: Iterators
26552
2655316.23.1 Mode Iterators
26554----------------------
26555
26556Ports often need to define similar patterns for two or more different
26557modes.  For example:
26558
26559   * If a processor has hardware support for both single and double
26560     floating-point arithmetic, the `SFmode' patterns tend to be very
26561     similar to the `DFmode' ones.
26562
26563   * If a port uses `SImode' pointers in one configuration and `DImode'
26564     pointers in another, it will usually have very similar `SImode'
26565     and `DImode' patterns for manipulating pointers.
26566
26567 Mode iterators allow several patterns to be instantiated from one
26568`.md' file template.  They can be used with any type of rtx-based
26569construct, such as a `define_insn', `define_split', or
26570`define_peephole2'.
26571
26572* Menu:
26573
26574* Defining Mode Iterators:: Defining a new mode iterator.
26575* Substitutions::           Combining mode iterators with substitutions
26576* Examples::                Examples
26577
26578
26579File: gccint.info,  Node: Defining Mode Iterators,  Next: Substitutions,  Up: Mode Iterators
26580
2658116.23.1.1 Defining Mode Iterators
26582.................................
26583
26584The syntax for defining a mode iterator is:
26585
26586     (define_mode_iterator NAME [(MODE1 "COND1") ... (MODEN "CONDN")])
26587
26588 This allows subsequent `.md' file constructs to use the mode suffix
26589`:NAME'.  Every construct that does so will be expanded N times, once
26590with every use of `:NAME' replaced by `:MODE1', once with every use
26591replaced by `:MODE2', and so on.  In the expansion for a particular
26592MODEI, every C condition will also require that CONDI be true.
26593
26594 For example:
26595
26596     (define_mode_iterator P [(SI "Pmode == SImode") (DI "Pmode == DImode")])
26597
26598 defines a new mode suffix `:P'.  Every construct that uses `:P' will
26599be expanded twice, once with every `:P' replaced by `:SI' and once with
26600every `:P' replaced by `:DI'.  The `:SI' version will only apply if
26601`Pmode == SImode' and the `:DI' version will only apply if `Pmode ==
26602DImode'.
26603
26604 As with other `.md' conditions, an empty string is treated as "always
26605true".  `(MODE "")' can also be abbreviated to `MODE'.  For example:
26606
26607     (define_mode_iterator GPR [SI (DI "TARGET_64BIT")])
26608
26609 means that the `:DI' expansion only applies if `TARGET_64BIT' but that
26610the `:SI' expansion has no such constraint.
26611
26612 Iterators are applied in the order they are defined.  This can be
26613significant if two iterators are used in a construct that requires
26614substitutions.  *Note Substitutions::.
26615
26616
26617File: gccint.info,  Node: Substitutions,  Next: Examples,  Prev: Defining Mode Iterators,  Up: Mode Iterators
26618
2661916.23.1.2 Substitution in Mode Iterators
26620........................................
26621
26622If an `.md' file construct uses mode iterators, each version of the
26623construct will often need slightly different strings or modes.  For
26624example:
26625
26626   * When a `define_expand' defines several `addM3' patterns (*note
26627     Standard Names::), each expander will need to use the appropriate
26628     mode name for M.
26629
26630   * When a `define_insn' defines several instruction patterns, each
26631     instruction will often use a different assembler mnemonic.
26632
26633   * When a `define_insn' requires operands with different modes, using
26634     an iterator for one of the operand modes usually requires a
26635     specific mode for the other operand(s).
26636
26637 GCC supports such variations through a system of "mode attributes".
26638There are two standard attributes: `mode', which is the name of the
26639mode in lower case, and `MODE', which is the same thing in upper case.
26640You can define other attributes using:
26641
26642     (define_mode_attr NAME [(MODE1 "VALUE1") ... (MODEN "VALUEN")])
26643
26644 where NAME is the name of the attribute and VALUEI is the value
26645associated with MODEI.
26646
26647 When GCC replaces some :ITERATOR with :MODE, it will scan each string
26648and mode in the pattern for sequences of the form `<ITERATOR:ATTR>',
26649where ATTR is the name of a mode attribute.  If the attribute is
26650defined for MODE, the whole `<...>' sequence will be replaced by the
26651appropriate attribute value.
26652
26653 For example, suppose an `.md' file has:
26654
26655     (define_mode_iterator P [(SI "Pmode == SImode") (DI "Pmode == DImode")])
26656     (define_mode_attr load [(SI "lw") (DI "ld")])
26657
26658 If one of the patterns that uses `:P' contains the string
26659`"<P:load>\t%0,%1"', the `SI' version of that pattern will use
26660`"lw\t%0,%1"' and the `DI' version will use `"ld\t%0,%1"'.
26661
26662 Here is an example of using an attribute for a mode:
26663
26664     (define_mode_iterator LONG [SI DI])
26665     (define_mode_attr SHORT [(SI "HI") (DI "SI")])
26666     (define_insn ...
26667       (sign_extend:LONG (match_operand:<LONG:SHORT> ...)) ...)
26668
26669 The `ITERATOR:' prefix may be omitted, in which case the substitution
26670will be attempted for every iterator expansion.
26671
26672
26673File: gccint.info,  Node: Examples,  Prev: Substitutions,  Up: Mode Iterators
26674
2667516.23.1.3 Mode Iterator Examples
26676................................
26677
26678Here is an example from the MIPS port.  It defines the following modes
26679and attributes (among others):
26680
26681     (define_mode_iterator GPR [SI (DI "TARGET_64BIT")])
26682     (define_mode_attr d [(SI "") (DI "d")])
26683
26684 and uses the following template to define both `subsi3' and `subdi3':
26685
26686     (define_insn "sub<mode>3"
26687       [(set (match_operand:GPR 0 "register_operand" "=d")
26688             (minus:GPR (match_operand:GPR 1 "register_operand" "d")
26689                        (match_operand:GPR 2 "register_operand" "d")))]
26690       ""
26691       "<d>subu\t%0,%1,%2"
26692       [(set_attr "type" "arith")
26693        (set_attr "mode" "<MODE>")])
26694
26695 This is exactly equivalent to:
26696
26697     (define_insn "subsi3"
26698       [(set (match_operand:SI 0 "register_operand" "=d")
26699             (minus:SI (match_operand:SI 1 "register_operand" "d")
26700                       (match_operand:SI 2 "register_operand" "d")))]
26701       ""
26702       "subu\t%0,%1,%2"
26703       [(set_attr "type" "arith")
26704        (set_attr "mode" "SI")])
26705
26706     (define_insn "subdi3"
26707       [(set (match_operand:DI 0 "register_operand" "=d")
26708             (minus:DI (match_operand:DI 1 "register_operand" "d")
26709                       (match_operand:DI 2 "register_operand" "d")))]
26710       ""
26711       "dsubu\t%0,%1,%2"
26712       [(set_attr "type" "arith")
26713        (set_attr "mode" "DI")])
26714
26715
26716File: gccint.info,  Node: Code Iterators,  Next: Int Iterators,  Prev: Mode Iterators,  Up: Iterators
26717
2671816.23.2 Code Iterators
26719----------------------
26720
26721Code iterators operate in a similar way to mode iterators.  *Note Mode
26722Iterators::.
26723
26724 The construct:
26725
26726     (define_code_iterator NAME [(CODE1 "COND1") ... (CODEN "CONDN")])
26727
26728 defines a pseudo rtx code NAME that can be instantiated as CODEI if
26729condition CONDI is true.  Each CODEI must have the same rtx format.
26730*Note RTL Classes::.
26731
26732 As with mode iterators, each pattern that uses NAME will be expanded N
26733times, once with all uses of NAME replaced by CODE1, once with all uses
26734replaced by CODE2, and so on.  *Note Defining Mode Iterators::.
26735
26736 It is possible to define attributes for codes as well as for modes.
26737There are two standard code attributes: `code', the name of the code in
26738lower case, and `CODE', the name of the code in upper case.  Other
26739attributes are defined using:
26740
26741     (define_code_attr NAME [(CODE1 "VALUE1") ... (CODEN "VALUEN")])
26742
26743 Here's an example of code iterators in action, taken from the MIPS
26744port:
26745
26746     (define_code_iterator any_cond [unordered ordered unlt unge uneq ltgt unle ungt
26747                                     eq ne gt ge lt le gtu geu ltu leu])
26748
26749     (define_expand "b<code>"
26750       [(set (pc)
26751             (if_then_else (any_cond:CC (cc0)
26752                                        (const_int 0))
26753                           (label_ref (match_operand 0 ""))
26754                           (pc)))]
26755       ""
26756     {
26757       gen_conditional_branch (operands, <CODE>);
26758       DONE;
26759     })
26760
26761 This is equivalent to:
26762
26763     (define_expand "bunordered"
26764       [(set (pc)
26765             (if_then_else (unordered:CC (cc0)
26766                                         (const_int 0))
26767                           (label_ref (match_operand 0 ""))
26768                           (pc)))]
26769       ""
26770     {
26771       gen_conditional_branch (operands, UNORDERED);
26772       DONE;
26773     })
26774
26775     (define_expand "bordered"
26776       [(set (pc)
26777             (if_then_else (ordered:CC (cc0)
26778                                       (const_int 0))
26779                           (label_ref (match_operand 0 ""))
26780                           (pc)))]
26781       ""
26782     {
26783       gen_conditional_branch (operands, ORDERED);
26784       DONE;
26785     })
26786
26787     ...
26788
26789
26790File: gccint.info,  Node: Int Iterators,  Next: Subst Iterators,  Prev: Code Iterators,  Up: Iterators
26791
2679216.23.3 Int Iterators
26793---------------------
26794
26795Int iterators operate in a similar way to code iterators.  *Note Code
26796Iterators::.
26797
26798 The construct:
26799
26800     (define_int_iterator NAME [(INT1 "COND1") ... (INTN "CONDN")])
26801
26802 defines a pseudo integer constant NAME that can be instantiated as
26803INTI if condition CONDI is true.  Each INT must have the same rtx
26804format.  *Note RTL Classes::. Int iterators can appear in only those
26805rtx fields that have 'i' as the specifier. This means that each INT has
26806to be a constant defined using define_constant or define_c_enum.
26807
26808 As with mode and code iterators, each pattern that uses NAME will be
26809expanded N times, once with all uses of NAME replaced by INT1, once
26810with all uses replaced by INT2, and so on.  *Note Defining Mode
26811Iterators::.
26812
26813 It is possible to define attributes for ints as well as for codes and
26814modes.  Attributes are defined using:
26815
26816     (define_int_attr NAME [(INT1 "VALUE1") ... (INTN "VALUEN")])
26817
26818 Here's an example of int iterators in action, taken from the ARM port:
26819
26820     (define_int_iterator QABSNEG [UNSPEC_VQABS UNSPEC_VQNEG])
26821
26822     (define_int_attr absneg [(UNSPEC_VQABS "abs") (UNSPEC_VQNEG "neg")])
26823
26824     (define_insn "neon_vq<absneg><mode>"
26825       [(set (match_operand:VDQIW 0 "s_register_operand" "=w")
26826     	(unspec:VDQIW [(match_operand:VDQIW 1 "s_register_operand" "w")
26827     		       (match_operand:SI 2 "immediate_operand" "i")]
26828     		      QABSNEG))]
26829       "TARGET_NEON"
26830       "vq<absneg>.<V_s_elem>\t%<V_reg>0, %<V_reg>1"
26831       [(set_attr "neon_type" "neon_vqneg_vqabs")]
26832     )
26833
26834 This is equivalent to:
26835
26836     (define_insn "neon_vqabs<mode>"
26837       [(set (match_operand:VDQIW 0 "s_register_operand" "=w")
26838     	(unspec:VDQIW [(match_operand:VDQIW 1 "s_register_operand" "w")
26839     		       (match_operand:SI 2 "immediate_operand" "i")]
26840     		      UNSPEC_VQABS))]
26841       "TARGET_NEON"
26842       "vqabs.<V_s_elem>\t%<V_reg>0, %<V_reg>1"
26843       [(set_attr "neon_type" "neon_vqneg_vqabs")]
26844     )
26845
26846     (define_insn "neon_vqneg<mode>"
26847       [(set (match_operand:VDQIW 0 "s_register_operand" "=w")
26848     	(unspec:VDQIW [(match_operand:VDQIW 1 "s_register_operand" "w")
26849     		       (match_operand:SI 2 "immediate_operand" "i")]
26850     		      UNSPEC_VQNEG))]
26851       "TARGET_NEON"
26852       "vqneg.<V_s_elem>\t%<V_reg>0, %<V_reg>1"
26853       [(set_attr "neon_type" "neon_vqneg_vqabs")]
26854     )
26855
26856
26857File: gccint.info,  Node: Subst Iterators,  Prev: Int Iterators,  Up: Iterators
26858
2685916.23.4 Subst Iterators
26860-----------------------
26861
26862Subst iterators are special type of iterators with the following
26863restrictions: they could not be declared explicitly, they always have
26864only two values, and they do not have explicit dedicated name.
26865Subst-iterators are triggered only when corresponding subst-attribute is
26866used in RTL-pattern.
26867
26868 Subst iterators transform templates in the following way: the templates
26869are duplicated, the subst-attributes in these templates are replaced
26870with the corresponding values, and a new attribute is implicitly added
26871to the given `define_insn'/`define_expand'.  The name of the added
26872attribute matches the name of `define_subst'.  Such attributes are
26873declared implicitly, and it is not allowed to have a `define_attr'
26874named as a `define_subst'.
26875
26876 Each subst iterator is linked to a `define_subst'.  It is declared
26877implicitly by the first appearance of the corresponding
26878`define_subst_attr', and it is not allowed to define it explicitly.
26879
26880 Declarations of subst-attributes have the following syntax:
26881
26882     (define_subst_attr "NAME"
26883       "SUBST-NAME"
26884       "NO-SUBST-VALUE"
26885       "SUBST-APPLIED-VALUE")
26886
26887 NAME is a string with which the given subst-attribute could be
26888referred to.
26889
26890 SUBST-NAME shows which `define_subst' should be applied to an
26891RTL-template if the given subst-attribute is present in the
26892RTL-template.
26893
26894 NO-SUBST-VALUE is a value with which subst-attribute would be replaced
26895in the first copy of the original RTL-template.
26896
26897 SUBST-APPLIED-VALUE is a value with which subst-attribute would be
26898replaced in the second copy of the original RTL-template.
26899
26900
26901File: gccint.info,  Node: Target Macros,  Next: Host Config,  Prev: Machine Desc,  Up: Top
26902
2690317 Target Description Macros and Functions
26904******************************************
26905
26906In addition to the file `MACHINE.md', a machine description includes a
26907C header file conventionally given the name `MACHINE.h' and a C source
26908file named `MACHINE.c'.  The header file defines numerous macros that
26909convey the information about the target machine that does not fit into
26910the scheme of the `.md' file.  The file `tm.h' should be a link to
26911`MACHINE.h'.  The header file `config.h' includes `tm.h' and most
26912compiler source files include `config.h'.  The source file defines a
26913variable `targetm', which is a structure containing pointers to
26914functions and data relating to the target machine.  `MACHINE.c' should
26915also contain their definitions, if they are not defined elsewhere in
26916GCC, and other functions called through the macros defined in the `.h'
26917file.
26918
26919* Menu:
26920
26921* Target Structure::    The `targetm' variable.
26922* Driver::              Controlling how the driver runs the compilation passes.
26923* Run-time Target::     Defining `-m' options like `-m68000' and `-m68020'.
26924* Per-Function Data::   Defining data structures for per-function information.
26925* Storage Layout::      Defining sizes and alignments of data.
26926* Type Layout::         Defining sizes and properties of basic user data types.
26927* Registers::           Naming and describing the hardware registers.
26928* Register Classes::    Defining the classes of hardware registers.
26929* Old Constraints::     The old way to define machine-specific constraints.
26930* Stack and Calling::   Defining which way the stack grows and by how much.
26931* Varargs::             Defining the varargs macros.
26932* Trampolines::         Code set up at run time to enter a nested function.
26933* Library Calls::       Controlling how library routines are implicitly called.
26934* Addressing Modes::    Defining addressing modes valid for memory operands.
26935* Anchored Addresses::  Defining how `-fsection-anchors' should work.
26936* Condition Code::      Defining how insns update the condition code.
26937* Costs::               Defining relative costs of different operations.
26938* Scheduling::          Adjusting the behavior of the instruction scheduler.
26939* Sections::            Dividing storage into text, data, and other sections.
26940* PIC::                 Macros for position independent code.
26941* Assembler Format::    Defining how to write insns and pseudo-ops to output.
26942* Debugging Info::      Defining the format of debugging output.
26943* Floating Point::      Handling floating point for cross-compilers.
26944* Mode Switching::      Insertion of mode-switching instructions.
26945* Target Attributes::   Defining target-specific uses of `__attribute__'.
26946* Emulated TLS::        Emulated TLS support.
26947* MIPS Coprocessors::   MIPS coprocessor support and how to customize it.
26948* PCH Target::          Validity checking for precompiled headers.
26949* C++ ABI::             Controlling C++ ABI changes.
26950* Named Address Spaces:: Adding support for named address spaces
26951* Misc::                Everything else.
26952
26953
26954File: gccint.info,  Node: Target Structure,  Next: Driver,  Up: Target Macros
26955
2695617.1 The Global `targetm' Variable
26957==================================
26958
26959 -- Variable: struct gcc_target targetm
26960     The target `.c' file must define the global `targetm' variable
26961     which contains pointers to functions and data relating to the
26962     target machine.  The variable is declared in `target.h';
26963     `target-def.h' defines the macro `TARGET_INITIALIZER' which is
26964     used to initialize the variable, and macros for the default
26965     initializers for elements of the structure.  The `.c' file should
26966     override those macros for which the default definition is
26967     inappropriate.  For example:
26968          #include "target.h"
26969          #include "target-def.h"
26970
26971          /* Initialize the GCC target structure.  */
26972
26973          #undef TARGET_COMP_TYPE_ATTRIBUTES
26974          #define TARGET_COMP_TYPE_ATTRIBUTES MACHINE_comp_type_attributes
26975
26976          struct gcc_target targetm = TARGET_INITIALIZER;
26977
26978Where a macro should be defined in the `.c' file in this manner to form
26979part of the `targetm' structure, it is documented below as a "Target
26980Hook" with a prototype.  Many macros will change in future from being
26981defined in the `.h' file to being part of the `targetm' structure.
26982
26983 Similarly, there is a `targetcm' variable for hooks that are specific
26984to front ends for C-family languages, documented as "C Target Hook".
26985This is declared in `c-family/c-target.h', the initializer
26986`TARGETCM_INITIALIZER' in `c-family/c-target-def.h'.  If targets
26987initialize `targetcm' themselves, they should set
26988`target_has_targetcm=yes' in `config.gcc'; otherwise a default
26989definition is used.
26990
26991 Similarly, there is a `targetm_common' variable for hooks that are
26992shared between the compiler driver and the compilers proper, documented
26993as "Common Target Hook".  This is declared in `common/common-target.h',
26994the initializer `TARGETM_COMMON_INITIALIZER' in
26995`common/common-target-def.h'.  If targets initialize `targetm_common'
26996themselves, they should set `target_has_targetm_common=yes' in
26997`config.gcc'; otherwise a default definition is used.
26998
26999
27000File: gccint.info,  Node: Driver,  Next: Run-time Target,  Prev: Target Structure,  Up: Target Macros
27001
2700217.2 Controlling the Compilation Driver, `gcc'
27003==============================================
27004
27005You can control the compilation driver.
27006
27007 -- Macro: DRIVER_SELF_SPECS
27008     A list of specs for the driver itself.  It should be a suitable
27009     initializer for an array of strings, with no surrounding braces.
27010
27011     The driver applies these specs to its own command line between
27012     loading default `specs' files (but not command-line specified
27013     ones) and choosing the multilib directory or running any
27014     subcommands.  It applies them in the order given, so each spec can
27015     depend on the options added by earlier ones.  It is also possible
27016     to remove options using `%<OPTION' in the usual way.
27017
27018     This macro can be useful when a port has several interdependent
27019     target options.  It provides a way of standardizing the command
27020     line so that the other specs are easier to write.
27021
27022     Do not define this macro if it does not need to do anything.
27023
27024 -- Macro: OPTION_DEFAULT_SPECS
27025     A list of specs used to support configure-time default options
27026     (i.e.  `--with' options) in the driver.  It should be a suitable
27027     initializer for an array of structures, each containing two
27028     strings, without the outermost pair of surrounding braces.
27029
27030     The first item in the pair is the name of the default.  This must
27031     match the code in `config.gcc' for the target.  The second item is
27032     a spec to apply if a default with this name was specified.  The
27033     string `%(VALUE)' in the spec will be replaced by the value of the
27034     default everywhere it occurs.
27035
27036     The driver will apply these specs to its own command line between
27037     loading default `specs' files and processing `DRIVER_SELF_SPECS',
27038     using the same mechanism as `DRIVER_SELF_SPECS'.
27039
27040     Do not define this macro if it does not need to do anything.
27041
27042 -- Macro: CPP_SPEC
27043     A C string constant that tells the GCC driver program options to
27044     pass to CPP.  It can also specify how to translate options you
27045     give to GCC into options for GCC to pass to the CPP.
27046
27047     Do not define this macro if it does not need to do anything.
27048
27049 -- Macro: CPLUSPLUS_CPP_SPEC
27050     This macro is just like `CPP_SPEC', but is used for C++, rather
27051     than C.  If you do not define this macro, then the value of
27052     `CPP_SPEC' (if any) will be used instead.
27053
27054 -- Macro: CC1_SPEC
27055     A C string constant that tells the GCC driver program options to
27056     pass to `cc1', `cc1plus', `f771', and the other language front
27057     ends.  It can also specify how to translate options you give to
27058     GCC into options for GCC to pass to front ends.
27059
27060     Do not define this macro if it does not need to do anything.
27061
27062 -- Macro: CC1PLUS_SPEC
27063     A C string constant that tells the GCC driver program options to
27064     pass to `cc1plus'.  It can also specify how to translate options
27065     you give to GCC into options for GCC to pass to the `cc1plus'.
27066
27067     Do not define this macro if it does not need to do anything.  Note
27068     that everything defined in CC1_SPEC is already passed to `cc1plus'
27069     so there is no need to duplicate the contents of CC1_SPEC in
27070     CC1PLUS_SPEC.
27071
27072 -- Macro: ASM_SPEC
27073     A C string constant that tells the GCC driver program options to
27074     pass to the assembler.  It can also specify how to translate
27075     options you give to GCC into options for GCC to pass to the
27076     assembler.  See the file `sun3.h' for an example of this.
27077
27078     Do not define this macro if it does not need to do anything.
27079
27080 -- Macro: ASM_FINAL_SPEC
27081     A C string constant that tells the GCC driver program how to run
27082     any programs which cleanup after the normal assembler.  Normally,
27083     this is not needed.  See the file `mips.h' for an example of this.
27084
27085     Do not define this macro if it does not need to do anything.
27086
27087 -- Macro: AS_NEEDS_DASH_FOR_PIPED_INPUT
27088     Define this macro, with no value, if the driver should give the
27089     assembler an argument consisting of a single dash, `-', to
27090     instruct it to read from its standard input (which will be a pipe
27091     connected to the output of the compiler proper).  This argument is
27092     given after any `-o' option specifying the name of the output file.
27093
27094     If you do not define this macro, the assembler is assumed to read
27095     its standard input if given no non-option arguments.  If your
27096     assembler cannot read standard input at all, use a `%{pipe:%e}'
27097     construct; see `mips.h' for instance.
27098
27099 -- Macro: LINK_SPEC
27100     A C string constant that tells the GCC driver program options to
27101     pass to the linker.  It can also specify how to translate options
27102     you give to GCC into options for GCC to pass to the linker.
27103
27104     Do not define this macro if it does not need to do anything.
27105
27106 -- Macro: LIB_SPEC
27107     Another C string constant used much like `LINK_SPEC'.  The
27108     difference between the two is that `LIB_SPEC' is used at the end
27109     of the command given to the linker.
27110
27111     If this macro is not defined, a default is provided that loads the
27112     standard C library from the usual place.  See `gcc.c'.
27113
27114 -- Macro: LIBGCC_SPEC
27115     Another C string constant that tells the GCC driver program how
27116     and when to place a reference to `libgcc.a' into the linker
27117     command line.  This constant is placed both before and after the
27118     value of `LIB_SPEC'.
27119
27120     If this macro is not defined, the GCC driver provides a default
27121     that passes the string `-lgcc' to the linker.
27122
27123 -- Macro: REAL_LIBGCC_SPEC
27124     By default, if `ENABLE_SHARED_LIBGCC' is defined, the
27125     `LIBGCC_SPEC' is not directly used by the driver program but is
27126     instead modified to refer to different versions of `libgcc.a'
27127     depending on the values of the command line flags `-static',
27128     `-shared', `-static-libgcc', and `-shared-libgcc'.  On targets
27129     where these modifications are inappropriate, define
27130     `REAL_LIBGCC_SPEC' instead.  `REAL_LIBGCC_SPEC' tells the driver
27131     how to place a reference to `libgcc' on the link command line,
27132     but, unlike `LIBGCC_SPEC', it is used unmodified.
27133
27134 -- Macro: USE_LD_AS_NEEDED
27135     A macro that controls the modifications to `LIBGCC_SPEC' mentioned
27136     in `REAL_LIBGCC_SPEC'.  If nonzero, a spec will be generated that
27137     uses -as-needed and the shared libgcc in place of the static
27138     exception handler library, when linking without any of `-static',
27139     `-static-libgcc', or `-shared-libgcc'.
27140
27141 -- Macro: LINK_EH_SPEC
27142     If defined, this C string constant is added to `LINK_SPEC'.  When
27143     `USE_LD_AS_NEEDED' is zero or undefined, it also affects the
27144     modifications to `LIBGCC_SPEC' mentioned in `REAL_LIBGCC_SPEC'.
27145
27146 -- Macro: STARTFILE_SPEC
27147     Another C string constant used much like `LINK_SPEC'.  The
27148     difference between the two is that `STARTFILE_SPEC' is used at the
27149     very beginning of the command given to the linker.
27150
27151     If this macro is not defined, a default is provided that loads the
27152     standard C startup file from the usual place.  See `gcc.c'.
27153
27154 -- Macro: ENDFILE_SPEC
27155     Another C string constant used much like `LINK_SPEC'.  The
27156     difference between the two is that `ENDFILE_SPEC' is used at the
27157     very end of the command given to the linker.
27158
27159     Do not define this macro if it does not need to do anything.
27160
27161 -- Macro: THREAD_MODEL_SPEC
27162     GCC `-v' will print the thread model GCC was configured to use.
27163     However, this doesn't work on platforms that are multilibbed on
27164     thread models, such as AIX 4.3.  On such platforms, define
27165     `THREAD_MODEL_SPEC' such that it evaluates to a string without
27166     blanks that names one of the recognized thread models.  `%*', the
27167     default value of this macro, will expand to the value of
27168     `thread_file' set in `config.gcc'.
27169
27170 -- Macro: SYSROOT_SUFFIX_SPEC
27171     Define this macro to add a suffix to the target sysroot when GCC is
27172     configured with a sysroot.  This will cause GCC to search for
27173     usr/lib, et al, within sysroot+suffix.
27174
27175 -- Macro: SYSROOT_HEADERS_SUFFIX_SPEC
27176     Define this macro to add a headers_suffix to the target sysroot
27177     when GCC is configured with a sysroot.  This will cause GCC to
27178     pass the updated sysroot+headers_suffix to CPP, causing it to
27179     search for usr/include, et al, within sysroot+headers_suffix.
27180
27181 -- Macro: EXTRA_SPECS
27182     Define this macro to provide additional specifications to put in
27183     the `specs' file that can be used in various specifications like
27184     `CC1_SPEC'.
27185
27186     The definition should be an initializer for an array of structures,
27187     containing a string constant, that defines the specification name,
27188     and a string constant that provides the specification.
27189
27190     Do not define this macro if it does not need to do anything.
27191
27192     `EXTRA_SPECS' is useful when an architecture contains several
27193     related targets, which have various `..._SPECS' which are similar
27194     to each other, and the maintainer would like one central place to
27195     keep these definitions.
27196
27197     For example, the PowerPC System V.4 targets use `EXTRA_SPECS' to
27198     define either `_CALL_SYSV' when the System V calling sequence is
27199     used or `_CALL_AIX' when the older AIX-based calling sequence is
27200     used.
27201
27202     The `config/rs6000/rs6000.h' target file defines:
27203
27204          #define EXTRA_SPECS \
27205            { "cpp_sysv_default", CPP_SYSV_DEFAULT },
27206
27207          #define CPP_SYS_DEFAULT ""
27208
27209     The `config/rs6000/sysv.h' target file defines:
27210          #undef CPP_SPEC
27211          #define CPP_SPEC \
27212          "%{posix: -D_POSIX_SOURCE } \
27213          %{mcall-sysv: -D_CALL_SYSV } \
27214          %{!mcall-sysv: %(cpp_sysv_default) } \
27215          %{msoft-float: -D_SOFT_FLOAT} %{mcpu=403: -D_SOFT_FLOAT}"
27216
27217          #undef CPP_SYSV_DEFAULT
27218          #define CPP_SYSV_DEFAULT "-D_CALL_SYSV"
27219
27220     while the `config/rs6000/eabiaix.h' target file defines
27221     `CPP_SYSV_DEFAULT' as:
27222
27223          #undef CPP_SYSV_DEFAULT
27224          #define CPP_SYSV_DEFAULT "-D_CALL_AIX"
27225
27226 -- Macro: LINK_LIBGCC_SPECIAL_1
27227     Define this macro if the driver program should find the library
27228     `libgcc.a'.  If you do not define this macro, the driver program
27229     will pass the argument `-lgcc' to tell the linker to do the search.
27230
27231 -- Macro: LINK_GCC_C_SEQUENCE_SPEC
27232     The sequence in which libgcc and libc are specified to the linker.
27233     By default this is `%G %L %G'.
27234
27235 -- Macro: LINK_COMMAND_SPEC
27236     A C string constant giving the complete command line need to
27237     execute the linker.  When you do this, you will need to update
27238     your port each time a change is made to the link command line
27239     within `gcc.c'.  Therefore, define this macro only if you need to
27240     completely redefine the command line for invoking the linker and
27241     there is no other way to accomplish the effect you need.
27242     Overriding this macro may be avoidable by overriding
27243     `LINK_GCC_C_SEQUENCE_SPEC' instead.
27244
27245 -- Common Target Hook: bool TARGET_ALWAYS_STRIP_DOTDOT
27246     True if `..' components should always be removed from directory
27247     names computed relative to GCC's internal directories, false
27248     (default) if such components should be preserved and directory
27249     names containing them passed to other tools such as the linker.
27250
27251 -- Macro: MULTILIB_DEFAULTS
27252     Define this macro as a C expression for the initializer of an
27253     array of string to tell the driver program which options are
27254     defaults for this target and thus do not need to be handled
27255     specially when using `MULTILIB_OPTIONS'.
27256
27257     Do not define this macro if `MULTILIB_OPTIONS' is not defined in
27258     the target makefile fragment or if none of the options listed in
27259     `MULTILIB_OPTIONS' are set by default.  *Note Target Fragment::.
27260
27261 -- Macro: RELATIVE_PREFIX_NOT_LINKDIR
27262     Define this macro to tell `gcc' that it should only translate a
27263     `-B' prefix into a `-L' linker option if the prefix indicates an
27264     absolute file name.
27265
27266 -- Macro: MD_EXEC_PREFIX
27267     If defined, this macro is an additional prefix to try after
27268     `STANDARD_EXEC_PREFIX'.  `MD_EXEC_PREFIX' is not searched when the
27269     compiler is built as a cross compiler.  If you define
27270     `MD_EXEC_PREFIX', then be sure to add it to the list of
27271     directories used to find the assembler in `configure.in'.
27272
27273 -- Macro: STANDARD_STARTFILE_PREFIX
27274     Define this macro as a C string constant if you wish to override
27275     the standard choice of `libdir' as the default prefix to try when
27276     searching for startup files such as `crt0.o'.
27277     `STANDARD_STARTFILE_PREFIX' is not searched when the compiler is
27278     built as a cross compiler.
27279
27280 -- Macro: STANDARD_STARTFILE_PREFIX_1
27281     Define this macro as a C string constant if you wish to override
27282     the standard choice of `/lib' as a prefix to try after the default
27283     prefix when searching for startup files such as `crt0.o'.
27284     `STANDARD_STARTFILE_PREFIX_1' is not searched when the compiler is
27285     built as a cross compiler.
27286
27287 -- Macro: STANDARD_STARTFILE_PREFIX_2
27288     Define this macro as a C string constant if you wish to override
27289     the standard choice of `/lib' as yet another prefix to try after
27290     the default prefix when searching for startup files such as
27291     `crt0.o'.  `STANDARD_STARTFILE_PREFIX_2' is not searched when the
27292     compiler is built as a cross compiler.
27293
27294 -- Macro: MD_STARTFILE_PREFIX
27295     If defined, this macro supplies an additional prefix to try after
27296     the standard prefixes.  `MD_EXEC_PREFIX' is not searched when the
27297     compiler is built as a cross compiler.
27298
27299 -- Macro: MD_STARTFILE_PREFIX_1
27300     If defined, this macro supplies yet another prefix to try after the
27301     standard prefixes.  It is not searched when the compiler is built
27302     as a cross compiler.
27303
27304 -- Macro: INIT_ENVIRONMENT
27305     Define this macro as a C string constant if you wish to set
27306     environment variables for programs called by the driver, such as
27307     the assembler and loader.  The driver passes the value of this
27308     macro to `putenv' to initialize the necessary environment
27309     variables.
27310
27311 -- Macro: LOCAL_INCLUDE_DIR
27312     Define this macro as a C string constant if you wish to override
27313     the standard choice of `/usr/local/include' as the default prefix
27314     to try when searching for local header files.  `LOCAL_INCLUDE_DIR'
27315     comes before `NATIVE_SYSTEM_HEADER_DIR' (set in `config.gcc',
27316     normally `/usr/include') in the search order.
27317
27318     Cross compilers do not search either `/usr/local/include' or its
27319     replacement.
27320
27321 -- Macro: NATIVE_SYSTEM_HEADER_COMPONENT
27322     The "component" corresponding to `NATIVE_SYSTEM_HEADER_DIR'.  See
27323     `INCLUDE_DEFAULTS', below, for the description of components.  If
27324     you do not define this macro, no component is used.
27325
27326 -- Macro: INCLUDE_DEFAULTS
27327     Define this macro if you wish to override the entire default
27328     search path for include files.  For a native compiler, the default
27329     search path usually consists of `GCC_INCLUDE_DIR',
27330     `LOCAL_INCLUDE_DIR', `GPLUSPLUS_INCLUDE_DIR', and
27331     `NATIVE_SYSTEM_HEADER_DIR'.  In addition, `GPLUSPLUS_INCLUDE_DIR'
27332     and `GCC_INCLUDE_DIR' are defined automatically by `Makefile', and
27333     specify private search areas for GCC.  The directory
27334     `GPLUSPLUS_INCLUDE_DIR' is used only for C++ programs.
27335
27336     The definition should be an initializer for an array of structures.
27337     Each array element should have four elements: the directory name (a
27338     string constant), the component name (also a string constant), a
27339     flag for C++-only directories, and a flag showing that the
27340     includes in the directory don't need to be wrapped in `extern `C''
27341     when compiling C++.  Mark the end of the array with a null element.
27342
27343     The component name denotes what GNU package the include file is
27344     part of, if any, in all uppercase letters.  For example, it might
27345     be `GCC' or `BINUTILS'.  If the package is part of a
27346     vendor-supplied operating system, code the component name as `0'.
27347
27348     For example, here is the definition used for VAX/VMS:
27349
27350          #define INCLUDE_DEFAULTS \
27351          {                                       \
27352            { "GNU_GXX_INCLUDE:", "G++", 1, 1},   \
27353            { "GNU_CC_INCLUDE:", "GCC", 0, 0},    \
27354            { "SYS$SYSROOT:[SYSLIB.]", 0, 0, 0},  \
27355            { ".", 0, 0, 0},                      \
27356            { 0, 0, 0, 0}                         \
27357          }
27358
27359 Here is the order of prefixes tried for exec files:
27360
27361  1. Any prefixes specified by the user with `-B'.
27362
27363  2. The environment variable `GCC_EXEC_PREFIX' or, if `GCC_EXEC_PREFIX'
27364     is not set and the compiler has not been installed in the
27365     configure-time PREFIX, the location in which the compiler has
27366     actually been installed.
27367
27368  3. The directories specified by the environment variable
27369     `COMPILER_PATH'.
27370
27371  4. The macro `STANDARD_EXEC_PREFIX', if the compiler has been
27372     installed in the configured-time PREFIX.
27373
27374  5. The location `/usr/libexec/gcc/', but only if this is a native
27375     compiler.
27376
27377  6. The location `/usr/lib/gcc/', but only if this is a native
27378     compiler.
27379
27380  7. The macro `MD_EXEC_PREFIX', if defined, but only if this is a
27381     native compiler.
27382
27383 Here is the order of prefixes tried for startfiles:
27384
27385  1. Any prefixes specified by the user with `-B'.
27386
27387  2. The environment variable `GCC_EXEC_PREFIX' or its automatically
27388     determined value based on the installed toolchain location.
27389
27390  3. The directories specified by the environment variable
27391     `LIBRARY_PATH' (or port-specific name; native only, cross
27392     compilers do not use this).
27393
27394  4. The macro `STANDARD_EXEC_PREFIX', but only if the toolchain is
27395     installed in the configured PREFIX or this is a native compiler.
27396
27397  5. The location `/usr/lib/gcc/', but only if this is a native
27398     compiler.
27399
27400  6. The macro `MD_EXEC_PREFIX', if defined, but only if this is a
27401     native compiler.
27402
27403  7. The macro `MD_STARTFILE_PREFIX', if defined, but only if this is a
27404     native compiler, or we have a target system root.
27405
27406  8. The macro `MD_STARTFILE_PREFIX_1', if defined, but only if this is
27407     a native compiler, or we have a target system root.
27408
27409  9. The macro `STANDARD_STARTFILE_PREFIX', with any sysroot
27410     modifications.  If this path is relative it will be prefixed by
27411     `GCC_EXEC_PREFIX' and the machine suffix or `STANDARD_EXEC_PREFIX'
27412     and the machine suffix.
27413
27414 10. The macro `STANDARD_STARTFILE_PREFIX_1', but only if this is a
27415     native compiler, or we have a target system root. The default for
27416     this macro is `/lib/'.
27417
27418 11. The macro `STANDARD_STARTFILE_PREFIX_2', but only if this is a
27419     native compiler, or we have a target system root. The default for
27420     this macro is `/usr/lib/'.
27421
27422
27423File: gccint.info,  Node: Run-time Target,  Next: Per-Function Data,  Prev: Driver,  Up: Target Macros
27424
2742517.3 Run-time Target Specification
27426==================================
27427
27428Here are run-time target specifications.
27429
27430 -- Macro: TARGET_CPU_CPP_BUILTINS ()
27431     This function-like macro expands to a block of code that defines
27432     built-in preprocessor macros and assertions for the target CPU,
27433     using the functions `builtin_define', `builtin_define_std' and
27434     `builtin_assert'.  When the front end calls this macro it provides
27435     a trailing semicolon, and since it has finished command line
27436     option processing your code can use those results freely.
27437
27438     `builtin_assert' takes a string in the form you pass to the
27439     command-line option `-A', such as `cpu=mips', and creates the
27440     assertion.  `builtin_define' takes a string in the form accepted
27441     by option `-D' and unconditionally defines the macro.
27442
27443     `builtin_define_std' takes a string representing the name of an
27444     object-like macro.  If it doesn't lie in the user's namespace,
27445     `builtin_define_std' defines it unconditionally.  Otherwise, it
27446     defines a version with two leading underscores, and another version
27447     with two leading and trailing underscores, and defines the original
27448     only if an ISO standard was not requested on the command line.  For
27449     example, passing `unix' defines `__unix', `__unix__' and possibly
27450     `unix'; passing `_mips' defines `__mips', `__mips__' and possibly
27451     `_mips', and passing `_ABI64' defines only `_ABI64'.
27452
27453     You can also test for the C dialect being compiled.  The variable
27454     `c_language' is set to one of `clk_c', `clk_cplusplus' or
27455     `clk_objective_c'.  Note that if we are preprocessing assembler,
27456     this variable will be `clk_c' but the function-like macro
27457     `preprocessing_asm_p()' will return true, so you might want to
27458     check for that first.  If you need to check for strict ANSI, the
27459     variable `flag_iso' can be used.  The function-like macro
27460     `preprocessing_trad_p()' can be used to check for traditional
27461     preprocessing.
27462
27463 -- Macro: TARGET_OS_CPP_BUILTINS ()
27464     Similarly to `TARGET_CPU_CPP_BUILTINS' but this macro is optional
27465     and is used for the target operating system instead.
27466
27467 -- Macro: TARGET_OBJFMT_CPP_BUILTINS ()
27468     Similarly to `TARGET_CPU_CPP_BUILTINS' but this macro is optional
27469     and is used for the target object format.  `elfos.h' uses this
27470     macro to define `__ELF__', so you probably do not need to define
27471     it yourself.
27472
27473 -- Variable: extern int target_flags
27474     This variable is declared in `options.h', which is included before
27475     any target-specific headers.
27476
27477 -- Common Target Hook: int TARGET_DEFAULT_TARGET_FLAGS
27478     This variable specifies the initial value of `target_flags'.  Its
27479     default setting is 0.
27480
27481 -- Common Target Hook: bool TARGET_HANDLE_OPTION (struct gcc_options
27482          *OPTS, struct gcc_options *OPTS_SET, const struct
27483          cl_decoded_option *DECODED, location_t LOC)
27484     This hook is called whenever the user specifies one of the
27485     target-specific options described by the `.opt' definition files
27486     (*note Options::).  It has the opportunity to do some
27487     option-specific processing and should return true if the option is
27488     valid.  The default definition does nothing but return true.
27489
27490     DECODED specifies the option and its arguments.  OPTS and OPTS_SET
27491     are the `gcc_options' structures to be used for storing option
27492     state, and LOC is the location at which the option was passed
27493     (`UNKNOWN_LOCATION' except for options passed via attributes).
27494
27495 -- C Target Hook: bool TARGET_HANDLE_C_OPTION (size_t CODE, const char
27496          *ARG, int VALUE)
27497     This target hook is called whenever the user specifies one of the
27498     target-specific C language family options described by the `.opt'
27499     definition files(*note Options::).  It has the opportunity to do
27500     some option-specific processing and should return true if the
27501     option is valid.  The arguments are like for
27502     `TARGET_HANDLE_OPTION'.  The default definition does nothing but
27503     return false.
27504
27505     In general, you should use `TARGET_HANDLE_OPTION' to handle
27506     options.  However, if processing an option requires routines that
27507     are only available in the C (and related language) front ends,
27508     then you should use `TARGET_HANDLE_C_OPTION' instead.
27509
27510 -- C Target Hook: tree TARGET_OBJC_CONSTRUCT_STRING_OBJECT (tree
27511          STRING)
27512     Targets may provide a string object type that can be used within
27513     and between C, C++ and their respective Objective-C dialects. A
27514     string object might, for example, embed encoding and length
27515     information. These objects are considered opaque to the compiler
27516     and handled as references. An ideal implementation makes the
27517     composition of the string object match that of the Objective-C
27518     `NSString' (`NXString' for GNUStep), allowing efficient
27519     interworking between C-only and Objective-C code. If a target
27520     implements string objects then this hook should return a reference
27521     to such an object constructed from the normal `C' string
27522     representation provided in STRING. At present, the hook is used by
27523     Objective-C only, to obtain a common-format string object when the
27524     target provides one.
27525
27526 -- C Target Hook: void TARGET_OBJC_DECLARE_UNRESOLVED_CLASS_REFERENCE
27527          (const char *CLASSNAME)
27528     Declare that Objective C class CLASSNAME is referenced  by the
27529     current TU.
27530
27531 -- C Target Hook: void TARGET_OBJC_DECLARE_CLASS_DEFINITION (const
27532          char *CLASSNAME)
27533     Declare that Objective C class CLASSNAME is defined  by the
27534     current TU.
27535
27536 -- C Target Hook: bool TARGET_STRING_OBJECT_REF_TYPE_P (const_tree
27537          STRINGREF)
27538     If a target implements string objects then this hook should return
27539     `true' if STRINGREF is a valid reference to such an object.
27540
27541 -- C Target Hook: void TARGET_CHECK_STRING_OBJECT_FORMAT_ARG (tree
27542          FORMAT_ARG, tree ARGS_LIST)
27543     If a target implements string objects then this hook should should
27544     provide a facility to check the function arguments in ARGS_LIST
27545     against the format specifiers in FORMAT_ARG where the type of
27546     FORMAT_ARG is one recognized as a valid string reference type.
27547
27548 -- Target Hook: void TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE (void)
27549     This target function is similar to the hook
27550     `TARGET_OPTION_OVERRIDE' but is called when the optimize level is
27551     changed via an attribute or pragma or when it is reset at the end
27552     of the code affected by the attribute or pragma.  It is not called
27553     at the beginning of compilation when `TARGET_OPTION_OVERRIDE' is
27554     called so if you want to perform these actions then, you should
27555     have `TARGET_OPTION_OVERRIDE' call
27556     `TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE'.
27557
27558 -- Macro: C_COMMON_OVERRIDE_OPTIONS
27559     This is similar to the `TARGET_OPTION_OVERRIDE' hook but is only
27560     used in the C language frontends (C, Objective-C, C++,
27561     Objective-C++) and so can be used to alter option flag variables
27562     which only exist in those frontends.
27563
27564 -- Common Target Hook: const struct default_options *
27565TARGET_OPTION_OPTIMIZATION_TABLE
27566     Some machines may desire to change what optimizations are
27567     performed for various optimization levels.   This variable, if
27568     defined, describes options to enable at particular sets of
27569     optimization levels.  These options are processed once just after
27570     the optimization level is determined and before the remainder of
27571     the command options have been parsed, so may be overridden by other
27572     options passed explicitly.
27573
27574     This processing is run once at program startup and when the
27575     optimization options are changed via `#pragma GCC optimize' or by
27576     using the `optimize' attribute.
27577
27578 -- Common Target Hook: void TARGET_OPTION_INIT_STRUCT (struct
27579          gcc_options *OPTS)
27580     Set target-dependent initial values of fields in OPTS.
27581
27582 -- Common Target Hook: void TARGET_OPTION_DEFAULT_PARAMS (void)
27583     Set target-dependent default values for `--param' settings, using
27584     calls to `set_default_param_value'.
27585
27586 -- Macro: SWITCHABLE_TARGET
27587     Some targets need to switch between substantially different
27588     subtargets during compilation.  For example, the MIPS target has
27589     one subtarget for the traditional MIPS architecture and another
27590     for MIPS16.  Source code can switch between these two
27591     subarchitectures using the `mips16' and `nomips16' attributes.
27592
27593     Such subtargets can differ in things like the set of available
27594     registers, the set of available instructions, the costs of various
27595     operations, and so on.  GCC caches a lot of this type of
27596     information in global variables, and recomputing them for each
27597     subtarget takes a significant amount of time.  The compiler
27598     therefore provides a facility for maintaining several versions of
27599     the global variables and quickly switching between them; see
27600     `target-globals.h' for details.
27601
27602     Define this macro to 1 if your target needs this facility.  The
27603     default is 0.
27604
27605
27606File: gccint.info,  Node: Per-Function Data,  Next: Storage Layout,  Prev: Run-time Target,  Up: Target Macros
27607
2760817.4 Defining data structures for per-function information.
27609===========================================================
27610
27611If the target needs to store information on a per-function basis, GCC
27612provides a macro and a couple of variables to allow this.  Note, just
27613using statics to store the information is a bad idea, since GCC supports
27614nested functions, so you can be halfway through encoding one function
27615when another one comes along.
27616
27617 GCC defines a data structure called `struct function' which contains
27618all of the data specific to an individual function.  This structure
27619contains a field called `machine' whose type is `struct
27620machine_function *', which can be used by targets to point to their own
27621specific data.
27622
27623 If a target needs per-function specific data it should define the type
27624`struct machine_function' and also the macro `INIT_EXPANDERS'.  This
27625macro should be used to initialize the function pointer
27626`init_machine_status'.  This pointer is explained below.
27627
27628 One typical use of per-function, target specific data is to create an
27629RTX to hold the register containing the function's return address.  This
27630RTX can then be used to implement the `__builtin_return_address'
27631function, for level 0.
27632
27633 Note--earlier implementations of GCC used a single data area to hold
27634all of the per-function information.  Thus when processing of a nested
27635function began the old per-function data had to be pushed onto a stack,
27636and when the processing was finished, it had to be popped off the
27637stack.  GCC used to provide function pointers called
27638`save_machine_status' and `restore_machine_status' to handle the saving
27639and restoring of the target specific information.  Since the single
27640data area approach is no longer used, these pointers are no longer
27641supported.
27642
27643 -- Macro: INIT_EXPANDERS
27644     Macro called to initialize any target specific information.  This
27645     macro is called once per function, before generation of any RTL
27646     has begun.  The intention of this macro is to allow the
27647     initialization of the function pointer `init_machine_status'.
27648
27649 -- Variable: void (*)(struct function *) init_machine_status
27650     If this function pointer is non-`NULL' it will be called once per
27651     function, before function compilation starts, in order to allow the
27652     target to perform any target specific initialization of the
27653     `struct function' structure.  It is intended that this would be
27654     used to initialize the `machine' of that structure.
27655
27656     `struct machine_function' structures are expected to be freed by
27657     GC.  Generally, any memory that they reference must be allocated
27658     by using GC allocation, including the structure itself.
27659
27660
27661File: gccint.info,  Node: Storage Layout,  Next: Type Layout,  Prev: Per-Function Data,  Up: Target Macros
27662
2766317.5 Storage Layout
27664===================
27665
27666Note that the definitions of the macros in this table which are sizes or
27667alignments measured in bits do not need to be constant.  They can be C
27668expressions that refer to static variables, such as the `target_flags'.
27669*Note Run-time Target::.
27670
27671 -- Macro: BITS_BIG_ENDIAN
27672     Define this macro to have the value 1 if the most significant bit
27673     in a byte has the lowest number; otherwise define it to have the
27674     value zero.  This means that bit-field instructions count from the
27675     most significant bit.  If the machine has no bit-field
27676     instructions, then this must still be defined, but it doesn't
27677     matter which value it is defined to.  This macro need not be a
27678     constant.
27679
27680     This macro does not affect the way structure fields are packed into
27681     bytes or words; that is controlled by `BYTES_BIG_ENDIAN'.
27682
27683 -- Macro: BYTES_BIG_ENDIAN
27684     Define this macro to have the value 1 if the most significant byte
27685     in a word has the lowest number.  This macro need not be a
27686     constant.
27687
27688 -- Macro: WORDS_BIG_ENDIAN
27689     Define this macro to have the value 1 if, in a multiword object,
27690     the most significant word has the lowest number.  This applies to
27691     both memory locations and registers; see `REG_WORDS_BIG_ENDIAN' if
27692     the order of words in memory is not the same as the order in
27693     registers.  This macro need not be a constant.
27694
27695 -- Macro: REG_WORDS_BIG_ENDIAN
27696     On some machines, the order of words in a multiword object differs
27697     between registers in memory.  In such a situation, define this
27698     macro to describe the order of words in a register.  The macro
27699     `WORDS_BIG_ENDIAN' controls the order of words in memory.
27700
27701 -- Macro: FLOAT_WORDS_BIG_ENDIAN
27702     Define this macro to have the value 1 if `DFmode', `XFmode' or
27703     `TFmode' floating point numbers are stored in memory with the word
27704     containing the sign bit at the lowest address; otherwise define it
27705     to have the value 0.  This macro need not be a constant.
27706
27707     You need not define this macro if the ordering is the same as for
27708     multi-word integers.
27709
27710 -- Macro: BITS_PER_UNIT
27711     Define this macro to be the number of bits in an addressable
27712     storage unit (byte).  If you do not define this macro the default
27713     is 8.
27714
27715 -- Macro: BITS_PER_WORD
27716     Number of bits in a word.  If you do not define this macro, the
27717     default is `BITS_PER_UNIT * UNITS_PER_WORD'.
27718
27719 -- Macro: MAX_BITS_PER_WORD
27720     Maximum number of bits in a word.  If this is undefined, the
27721     default is `BITS_PER_WORD'.  Otherwise, it is the constant value
27722     that is the largest value that `BITS_PER_WORD' can have at
27723     run-time.
27724
27725 -- Macro: UNITS_PER_WORD
27726     Number of storage units in a word; normally the size of a
27727     general-purpose register, a power of two from 1 or 8.
27728
27729 -- Macro: MIN_UNITS_PER_WORD
27730     Minimum number of units in a word.  If this is undefined, the
27731     default is `UNITS_PER_WORD'.  Otherwise, it is the constant value
27732     that is the smallest value that `UNITS_PER_WORD' can have at
27733     run-time.
27734
27735 -- Macro: POINTER_SIZE
27736     Width of a pointer, in bits.  You must specify a value no wider
27737     than the width of `Pmode'.  If it is not equal to the width of
27738     `Pmode', you must define `POINTERS_EXTEND_UNSIGNED'.  If you do
27739     not specify a value the default is `BITS_PER_WORD'.
27740
27741 -- Macro: POINTERS_EXTEND_UNSIGNED
27742     A C expression that determines how pointers should be extended from
27743     `ptr_mode' to either `Pmode' or `word_mode'.  It is greater than
27744     zero if pointers should be zero-extended, zero if they should be
27745     sign-extended, and negative if some other sort of conversion is
27746     needed.  In the last case, the extension is done by the target's
27747     `ptr_extend' instruction.
27748
27749     You need not define this macro if the `ptr_mode', `Pmode' and
27750     `word_mode' are all the same width.
27751
27752 -- Macro: PROMOTE_MODE (M, UNSIGNEDP, TYPE)
27753     A macro to update M and UNSIGNEDP when an object whose type is
27754     TYPE and which has the specified mode and signedness is to be
27755     stored in a register.  This macro is only called when TYPE is a
27756     scalar type.
27757
27758     On most RISC machines, which only have operations that operate on
27759     a full register, define this macro to set M to `word_mode' if M is
27760     an integer mode narrower than `BITS_PER_WORD'.  In most cases,
27761     only integer modes should be widened because wider-precision
27762     floating-point operations are usually more expensive than their
27763     narrower counterparts.
27764
27765     For most machines, the macro definition does not change UNSIGNEDP.
27766     However, some machines, have instructions that preferentially
27767     handle either signed or unsigned quantities of certain modes.  For
27768     example, on the DEC Alpha, 32-bit loads from memory and 32-bit add
27769     instructions sign-extend the result to 64 bits.  On such machines,
27770     set UNSIGNEDP according to which kind of extension is more
27771     efficient.
27772
27773     Do not define this macro if it would never modify M.
27774
27775 -- Target Hook: enum machine_mode TARGET_PROMOTE_FUNCTION_MODE
27776          (const_tree TYPE, enum machine_mode MODE, int *PUNSIGNEDP,
27777          const_tree FUNTYPE, int FOR_RETURN)
27778     Like `PROMOTE_MODE', but it is applied to outgoing function
27779     arguments or function return values.  The target hook should
27780     return the new mode and possibly change `*PUNSIGNEDP' if the
27781     promotion should change signedness.  This function is called only
27782     for scalar _or pointer_ types.
27783
27784     FOR_RETURN allows to distinguish the promotion of arguments and
27785     return values.  If it is `1', a return value is being promoted and
27786     `TARGET_FUNCTION_VALUE' must perform the same promotions done here.
27787     If it is `2', the returned mode should be that of the register in
27788     which an incoming parameter is copied, or the outgoing result is
27789     computed; then the hook should return the same mode as
27790     `promote_mode', though the signedness may be different.
27791
27792     TYPE can be NULL when promoting function arguments of libcalls.
27793
27794     The default is to not promote arguments and return values.  You can
27795     also define the hook to
27796     `default_promote_function_mode_always_promote' if you would like
27797     to apply the same rules given by `PROMOTE_MODE'.
27798
27799 -- Macro: PARM_BOUNDARY
27800     Normal alignment required for function parameters on the stack, in
27801     bits.  All stack parameters receive at least this much alignment
27802     regardless of data type.  On most machines, this is the same as the
27803     size of an integer.
27804
27805 -- Macro: STACK_BOUNDARY
27806     Define this macro to the minimum alignment enforced by hardware
27807     for the stack pointer on this machine.  The definition is a C
27808     expression for the desired alignment (measured in bits).  This
27809     value is used as a default if `PREFERRED_STACK_BOUNDARY' is not
27810     defined.  On most machines, this should be the same as
27811     `PARM_BOUNDARY'.
27812
27813 -- Macro: PREFERRED_STACK_BOUNDARY
27814     Define this macro if you wish to preserve a certain alignment for
27815     the stack pointer, greater than what the hardware enforces.  The
27816     definition is a C expression for the desired alignment (measured
27817     in bits).  This macro must evaluate to a value equal to or larger
27818     than `STACK_BOUNDARY'.
27819
27820 -- Macro: INCOMING_STACK_BOUNDARY
27821     Define this macro if the incoming stack boundary may be different
27822     from `PREFERRED_STACK_BOUNDARY'.  This macro must evaluate to a
27823     value equal to or larger than `STACK_BOUNDARY'.
27824
27825 -- Macro: FUNCTION_BOUNDARY
27826     Alignment required for a function entry point, in bits.
27827
27828 -- Macro: BIGGEST_ALIGNMENT
27829     Biggest alignment that any data type can require on this machine,
27830     in bits.  Note that this is not the biggest alignment that is
27831     supported, just the biggest alignment that, when violated, may
27832     cause a fault.
27833
27834 -- Macro: MALLOC_ABI_ALIGNMENT
27835     Alignment, in bits, a C conformant malloc implementation has to
27836     provide.  If not defined, the default value is `BITS_PER_WORD'.
27837
27838 -- Macro: ATTRIBUTE_ALIGNED_VALUE
27839     Alignment used by the `__attribute__ ((aligned))' construct.  If
27840     not defined, the default value is `BIGGEST_ALIGNMENT'.
27841
27842 -- Macro: MINIMUM_ATOMIC_ALIGNMENT
27843     If defined, the smallest alignment, in bits, that can be given to
27844     an object that can be referenced in one operation, without
27845     disturbing any nearby object.  Normally, this is `BITS_PER_UNIT',
27846     but may be larger on machines that don't have byte or half-word
27847     store operations.
27848
27849 -- Macro: BIGGEST_FIELD_ALIGNMENT
27850     Biggest alignment that any structure or union field can require on
27851     this machine, in bits.  If defined, this overrides
27852     `BIGGEST_ALIGNMENT' for structure and union fields only, unless
27853     the field alignment has been set by the `__attribute__ ((aligned
27854     (N)))' construct.
27855
27856 -- Macro: ADJUST_FIELD_ALIGN (FIELD, COMPUTED)
27857     An expression for the alignment of a structure field FIELD if the
27858     alignment computed in the usual way (including applying of
27859     `BIGGEST_ALIGNMENT' and `BIGGEST_FIELD_ALIGNMENT' to the
27860     alignment) is COMPUTED.  It overrides alignment only if the field
27861     alignment has not been set by the `__attribute__ ((aligned (N)))'
27862     construct.
27863
27864 -- Macro: MAX_STACK_ALIGNMENT
27865     Biggest stack alignment guaranteed by the backend.  Use this macro
27866     to specify the maximum alignment of a variable on stack.
27867
27868     If not defined, the default value is `STACK_BOUNDARY'.
27869
27870
27871 -- Macro: MAX_OFILE_ALIGNMENT
27872     Biggest alignment supported by the object file format of this
27873     machine.  Use this macro to limit the alignment which can be
27874     specified using the `__attribute__ ((aligned (N)))' construct.  If
27875     not defined, the default value is `BIGGEST_ALIGNMENT'.
27876
27877     On systems that use ELF, the default (in `config/elfos.h') is the
27878     largest supported 32-bit ELF section alignment representable on a
27879     32-bit host e.g. `(((unsigned HOST_WIDEST_INT) 1 << 28) * 8)'.  On
27880     32-bit ELF the largest supported section alignment in bits is
27881     `(0x80000000 * 8)', but this is not representable on 32-bit hosts.
27882
27883 -- Macro: DATA_ALIGNMENT (TYPE, BASIC-ALIGN)
27884     If defined, a C expression to compute the alignment for a variable
27885     in the static store.  TYPE is the data type, and BASIC-ALIGN is
27886     the alignment that the object would ordinarily have.  The value of
27887     this macro is used instead of that alignment to align the object.
27888
27889     If this macro is not defined, then BASIC-ALIGN is used.
27890
27891     One use of this macro is to increase alignment of medium-size data
27892     to make it all fit in fewer cache lines.  Another is to cause
27893     character arrays to be word-aligned so that `strcpy' calls that
27894     copy constants to character arrays can be done inline.
27895
27896 -- Macro: CONSTANT_ALIGNMENT (CONSTANT, BASIC-ALIGN)
27897     If defined, a C expression to compute the alignment given to a
27898     constant that is being placed in memory.  CONSTANT is the constant
27899     and BASIC-ALIGN is the alignment that the object would ordinarily
27900     have.  The value of this macro is used instead of that alignment to
27901     align the object.
27902
27903     If this macro is not defined, then BASIC-ALIGN is used.
27904
27905     The typical use of this macro is to increase alignment for string
27906     constants to be word aligned so that `strcpy' calls that copy
27907     constants can be done inline.
27908
27909 -- Macro: LOCAL_ALIGNMENT (TYPE, BASIC-ALIGN)
27910     If defined, a C expression to compute the alignment for a variable
27911     in the local store.  TYPE is the data type, and BASIC-ALIGN is the
27912     alignment that the object would ordinarily have.  The value of this
27913     macro is used instead of that alignment to align the object.
27914
27915     If this macro is not defined, then BASIC-ALIGN is used.
27916
27917     One use of this macro is to increase alignment of medium-size data
27918     to make it all fit in fewer cache lines.
27919
27920     If the value of this macro has a type, it should be an unsigned
27921     type.
27922
27923 -- Target Hook: HOST_WIDE_INT TARGET_VECTOR_ALIGNMENT (const_tree TYPE)
27924     This hook can be used to define the alignment for a vector of type
27925     TYPE, in order to comply with a platform ABI.  The default is to
27926     require natural alignment for vector types.  The alignment
27927     returned by this hook must be a power-of-two multiple of the
27928     default alignment of the vector element type.
27929
27930 -- Macro: STACK_SLOT_ALIGNMENT (TYPE, MODE, BASIC-ALIGN)
27931     If defined, a C expression to compute the alignment for stack slot.
27932     TYPE is the data type, MODE is the widest mode available, and
27933     BASIC-ALIGN is the alignment that the slot would ordinarily have.
27934     The value of this macro is used instead of that alignment to align
27935     the slot.
27936
27937     If this macro is not defined, then BASIC-ALIGN is used when TYPE
27938     is `NULL'.  Otherwise, `LOCAL_ALIGNMENT' will be used.
27939
27940     This macro is to set alignment of stack slot to the maximum
27941     alignment of all possible modes which the slot may have.
27942
27943     If the value of this macro has a type, it should be an unsigned
27944     type.
27945
27946 -- Macro: LOCAL_DECL_ALIGNMENT (DECL)
27947     If defined, a C expression to compute the alignment for a local
27948     variable DECL.
27949
27950     If this macro is not defined, then `LOCAL_ALIGNMENT (TREE_TYPE
27951     (DECL), DECL_ALIGN (DECL))' is used.
27952
27953     One use of this macro is to increase alignment of medium-size data
27954     to make it all fit in fewer cache lines.
27955
27956     If the value of this macro has a type, it should be an unsigned
27957     type.
27958
27959 -- Macro: MINIMUM_ALIGNMENT (EXP, MODE, ALIGN)
27960     If defined, a C expression to compute the minimum required
27961     alignment for dynamic stack realignment purposes for EXP (a type
27962     or decl), MODE, assuming normal alignment ALIGN.
27963
27964     If this macro is not defined, then ALIGN will be used.
27965
27966 -- Macro: EMPTY_FIELD_BOUNDARY
27967     Alignment in bits to be given to a structure bit-field that
27968     follows an empty field such as `int : 0;'.
27969
27970     If `PCC_BITFIELD_TYPE_MATTERS' is true, it overrides this macro.
27971
27972 -- Macro: STRUCTURE_SIZE_BOUNDARY
27973     Number of bits which any structure or union's size must be a
27974     multiple of.  Each structure or union's size is rounded up to a
27975     multiple of this.
27976
27977     If you do not define this macro, the default is the same as
27978     `BITS_PER_UNIT'.
27979
27980 -- Macro: STRICT_ALIGNMENT
27981     Define this macro to be the value 1 if instructions will fail to
27982     work if given data not on the nominal alignment.  If instructions
27983     will merely go slower in that case, define this macro as 0.
27984
27985 -- Macro: PCC_BITFIELD_TYPE_MATTERS
27986     Define this if you wish to imitate the way many other C compilers
27987     handle alignment of bit-fields and the structures that contain
27988     them.
27989
27990     The behavior is that the type written for a named bit-field (`int',
27991     `short', or other integer type) imposes an alignment for the entire
27992     structure, as if the structure really did contain an ordinary
27993     field of that type.  In addition, the bit-field is placed within
27994     the structure so that it would fit within such a field, not
27995     crossing a boundary for it.
27996
27997     Thus, on most machines, a named bit-field whose type is written as
27998     `int' would not cross a four-byte boundary, and would force
27999     four-byte alignment for the whole structure.  (The alignment used
28000     may not be four bytes; it is controlled by the other alignment
28001     parameters.)
28002
28003     An unnamed bit-field will not affect the alignment of the
28004     containing structure.
28005
28006     If the macro is defined, its definition should be a C expression;
28007     a nonzero value for the expression enables this behavior.
28008
28009     Note that if this macro is not defined, or its value is zero, some
28010     bit-fields may cross more than one alignment boundary.  The
28011     compiler can support such references if there are `insv', `extv',
28012     and `extzv' insns that can directly reference memory.
28013
28014     The other known way of making bit-fields work is to define
28015     `STRUCTURE_SIZE_BOUNDARY' as large as `BIGGEST_ALIGNMENT'.  Then
28016     every structure can be accessed with fullwords.
28017
28018     Unless the machine has bit-field instructions or you define
28019     `STRUCTURE_SIZE_BOUNDARY' that way, you must define
28020     `PCC_BITFIELD_TYPE_MATTERS' to have a nonzero value.
28021
28022     If your aim is to make GCC use the same conventions for laying out
28023     bit-fields as are used by another compiler, here is how to
28024     investigate what the other compiler does.  Compile and run this
28025     program:
28026
28027          struct foo1
28028          {
28029            char x;
28030            char :0;
28031            char y;
28032          };
28033
28034          struct foo2
28035          {
28036            char x;
28037            int :0;
28038            char y;
28039          };
28040
28041          main ()
28042          {
28043            printf ("Size of foo1 is %d\n",
28044                    sizeof (struct foo1));
28045            printf ("Size of foo2 is %d\n",
28046                    sizeof (struct foo2));
28047            exit (0);
28048          }
28049
28050     If this prints 2 and 5, then the compiler's behavior is what you
28051     would get from `PCC_BITFIELD_TYPE_MATTERS'.
28052
28053 -- Macro: BITFIELD_NBYTES_LIMITED
28054     Like `PCC_BITFIELD_TYPE_MATTERS' except that its effect is limited
28055     to aligning a bit-field within the structure.
28056
28057 -- Target Hook: bool TARGET_ALIGN_ANON_BITFIELD (void)
28058     When `PCC_BITFIELD_TYPE_MATTERS' is true this hook will determine
28059     whether unnamed bitfields affect the alignment of the containing
28060     structure.  The hook should return true if the structure should
28061     inherit the alignment requirements of an unnamed bitfield's type.
28062
28063 -- Target Hook: bool TARGET_NARROW_VOLATILE_BITFIELD (void)
28064     This target hook should return `true' if accesses to volatile
28065     bitfields should use the narrowest mode possible.  It should
28066     return `false' if these accesses should use the bitfield container
28067     type.
28068
28069     The default is `!TARGET_STRICT_ALIGN'.
28070
28071 -- Target Hook: bool TARGET_MEMBER_TYPE_FORCES_BLK (const_tree FIELD,
28072          enum machine_mode MODE)
28073     Return true if a structure, union or array containing FIELD should
28074     be accessed using `BLKMODE'.
28075
28076     If FIELD is the only field in the structure, MODE is its mode,
28077     otherwise MODE is VOIDmode.  MODE is provided in the case where
28078     structures of one field would require the structure's mode to
28079     retain the field's mode.
28080
28081     Normally, this is not needed.
28082
28083 -- Macro: ROUND_TYPE_ALIGN (TYPE, COMPUTED, SPECIFIED)
28084     Define this macro as an expression for the alignment of a type
28085     (given by TYPE as a tree node) if the alignment computed in the
28086     usual way is COMPUTED and the alignment explicitly specified was
28087     SPECIFIED.
28088
28089     The default is to use SPECIFIED if it is larger; otherwise, use
28090     the smaller of COMPUTED and `BIGGEST_ALIGNMENT'
28091
28092 -- Macro: MAX_FIXED_MODE_SIZE
28093     An integer expression for the size in bits of the largest integer
28094     machine mode that should actually be used.  All integer machine
28095     modes of this size or smaller can be used for structures and
28096     unions with the appropriate sizes.  If this macro is undefined,
28097     `GET_MODE_BITSIZE (DImode)' is assumed.
28098
28099 -- Macro: STACK_SAVEAREA_MODE (SAVE_LEVEL)
28100     If defined, an expression of type `enum machine_mode' that
28101     specifies the mode of the save area operand of a
28102     `save_stack_LEVEL' named pattern (*note Standard Names::).
28103     SAVE_LEVEL is one of `SAVE_BLOCK', `SAVE_FUNCTION', or
28104     `SAVE_NONLOCAL' and selects which of the three named patterns is
28105     having its mode specified.
28106
28107     You need not define this macro if it always returns `Pmode'.  You
28108     would most commonly define this macro if the `save_stack_LEVEL'
28109     patterns need to support both a 32- and a 64-bit mode.
28110
28111 -- Macro: STACK_SIZE_MODE
28112     If defined, an expression of type `enum machine_mode' that
28113     specifies the mode of the size increment operand of an
28114     `allocate_stack' named pattern (*note Standard Names::).
28115
28116     You need not define this macro if it always returns `word_mode'.
28117     You would most commonly define this macro if the `allocate_stack'
28118     pattern needs to support both a 32- and a 64-bit mode.
28119
28120 -- Target Hook: enum machine_mode TARGET_LIBGCC_CMP_RETURN_MODE (void)
28121     This target hook should return the mode to be used for the return
28122     value of compare instructions expanded to libgcc calls.  If not
28123     defined `word_mode' is returned which is the right choice for a
28124     majority of targets.
28125
28126 -- Target Hook: enum machine_mode TARGET_LIBGCC_SHIFT_COUNT_MODE (void)
28127     This target hook should return the mode to be used for the shift
28128     count operand of shift instructions expanded to libgcc calls.  If
28129     not defined `word_mode' is returned which is the right choice for
28130     a majority of targets.
28131
28132 -- Target Hook: enum machine_mode TARGET_UNWIND_WORD_MODE (void)
28133     Return machine mode to be used for `_Unwind_Word' type.  The
28134     default is to use `word_mode'.
28135
28136 -- Macro: ROUND_TOWARDS_ZERO
28137     If defined, this macro should be true if the prevailing rounding
28138     mode is towards zero.
28139
28140     Defining this macro only affects the way `libgcc.a' emulates
28141     floating-point arithmetic.
28142
28143     Not defining this macro is equivalent to returning zero.
28144
28145 -- Macro: LARGEST_EXPONENT_IS_NORMAL (SIZE)
28146     This macro should return true if floats with SIZE bits do not have
28147     a NaN or infinity representation, but use the largest exponent for
28148     normal numbers instead.
28149
28150     Defining this macro only affects the way `libgcc.a' emulates
28151     floating-point arithmetic.
28152
28153     The default definition of this macro returns false for all sizes.
28154
28155 -- Target Hook: bool TARGET_MS_BITFIELD_LAYOUT_P (const_tree
28156          RECORD_TYPE)
28157     This target hook returns `true' if bit-fields in the given
28158     RECORD_TYPE are to be laid out following the rules of Microsoft
28159     Visual C/C++, namely: (i) a bit-field won't share the same storage
28160     unit with the previous bit-field if their underlying types have
28161     different sizes, and the bit-field will be aligned to the highest
28162     alignment of the underlying types of itself and of the previous
28163     bit-field; (ii) a zero-sized bit-field will affect the alignment of
28164     the whole enclosing structure, even if it is unnamed; except that
28165     (iii) a zero-sized bit-field will be disregarded unless it follows
28166     another bit-field of nonzero size.  If this hook returns `true',
28167     other macros that control bit-field layout are ignored.
28168
28169     When a bit-field is inserted into a packed record, the whole size
28170     of the underlying type is used by one or more same-size adjacent
28171     bit-fields (that is, if its long:3, 32 bits is used in the record,
28172     and any additional adjacent long bit-fields are packed into the
28173     same chunk of 32 bits.  However, if the size changes, a new field
28174     of that size is allocated).  In an unpacked record, this is the
28175     same as using alignment, but not equivalent when packing.
28176
28177     If both MS bit-fields and `__attribute__((packed))' are used, the
28178     latter will take precedence.  If `__attribute__((packed))' is used
28179     on a single field when MS bit-fields are in use, it will take
28180     precedence for that field, but the alignment of the rest of the
28181     structure may affect its placement.
28182
28183 -- Target Hook: bool TARGET_DECIMAL_FLOAT_SUPPORTED_P (void)
28184     Returns true if the target supports decimal floating point.
28185
28186 -- Target Hook: bool TARGET_FIXED_POINT_SUPPORTED_P (void)
28187     Returns true if the target supports fixed-point arithmetic.
28188
28189 -- Target Hook: void TARGET_EXPAND_TO_RTL_HOOK (void)
28190     This hook is called just before expansion into rtl, allowing the
28191     target to perform additional initializations or analysis before
28192     the expansion.  For example, the rs6000 port uses it to allocate a
28193     scratch stack slot for use in copying SDmode values between memory
28194     and floating point registers whenever the function being expanded
28195     has any SDmode usage.
28196
28197 -- Target Hook: void TARGET_INSTANTIATE_DECLS (void)
28198     This hook allows the backend to perform additional instantiations
28199     on rtl that are not actually in any insns yet, but will be later.
28200
28201 -- Target Hook: const char * TARGET_MANGLE_TYPE (const_tree TYPE)
28202     If your target defines any fundamental types, or any types your
28203     target uses should be mangled differently from the default, define
28204     this hook to return the appropriate encoding for these types as
28205     part of a C++ mangled name.  The TYPE argument is the tree
28206     structure representing the type to be mangled.  The hook may be
28207     applied to trees which are not target-specific fundamental types;
28208     it should return `NULL' for all such types, as well as arguments
28209     it does not recognize.  If the return value is not `NULL', it must
28210     point to a statically-allocated string constant.
28211
28212     Target-specific fundamental types might be new fundamental types or
28213     qualified versions of ordinary fundamental types.  Encode new
28214     fundamental types as `u N NAME', where NAME is the name used for
28215     the type in source code, and N is the length of NAME in decimal.
28216     Encode qualified versions of ordinary types as `U N NAME CODE',
28217     where NAME is the name used for the type qualifier in source code,
28218     N is the length of NAME as above, and CODE is the code used to
28219     represent the unqualified version of this type.  (See
28220     `write_builtin_type' in `cp/mangle.c' for the list of codes.)  In
28221     both cases the spaces are for clarity; do not include any spaces
28222     in your string.
28223
28224     This hook is applied to types prior to typedef resolution.  If the
28225     mangled name for a particular type depends only on that type's
28226     main variant, you can perform typedef resolution yourself using
28227     `TYPE_MAIN_VARIANT' before mangling.
28228
28229     The default version of this hook always returns `NULL', which is
28230     appropriate for a target that does not define any new fundamental
28231     types.
28232
28233
28234File: gccint.info,  Node: Type Layout,  Next: Registers,  Prev: Storage Layout,  Up: Target Macros
28235
2823617.6 Layout of Source Language Data Types
28237=========================================
28238
28239These macros define the sizes and other characteristics of the standard
28240basic data types used in programs being compiled.  Unlike the macros in
28241the previous section, these apply to specific features of C and related
28242languages, rather than to fundamental aspects of storage layout.
28243
28244 -- Macro: INT_TYPE_SIZE
28245     A C expression for the size in bits of the type `int' on the
28246     target machine.  If you don't define this, the default is one word.
28247
28248 -- Macro: SHORT_TYPE_SIZE
28249     A C expression for the size in bits of the type `short' on the
28250     target machine.  If you don't define this, the default is half a
28251     word.  (If this would be less than one storage unit, it is rounded
28252     up to one unit.)
28253
28254 -- Macro: LONG_TYPE_SIZE
28255     A C expression for the size in bits of the type `long' on the
28256     target machine.  If you don't define this, the default is one word.
28257
28258 -- Macro: ADA_LONG_TYPE_SIZE
28259     On some machines, the size used for the Ada equivalent of the type
28260     `long' by a native Ada compiler differs from that used by C.  In
28261     that situation, define this macro to be a C expression to be used
28262     for the size of that type.  If you don't define this, the default
28263     is the value of `LONG_TYPE_SIZE'.
28264
28265 -- Macro: LONG_LONG_TYPE_SIZE
28266     A C expression for the size in bits of the type `long long' on the
28267     target machine.  If you don't define this, the default is two
28268     words.  If you want to support GNU Ada on your machine, the value
28269     of this macro must be at least 64.
28270
28271 -- Macro: CHAR_TYPE_SIZE
28272     A C expression for the size in bits of the type `char' on the
28273     target machine.  If you don't define this, the default is
28274     `BITS_PER_UNIT'.
28275
28276 -- Macro: BOOL_TYPE_SIZE
28277     A C expression for the size in bits of the C++ type `bool' and C99
28278     type `_Bool' on the target machine.  If you don't define this, and
28279     you probably shouldn't, the default is `CHAR_TYPE_SIZE'.
28280
28281 -- Macro: FLOAT_TYPE_SIZE
28282     A C expression for the size in bits of the type `float' on the
28283     target machine.  If you don't define this, the default is one word.
28284
28285 -- Macro: DOUBLE_TYPE_SIZE
28286     A C expression for the size in bits of the type `double' on the
28287     target machine.  If you don't define this, the default is two
28288     words.
28289
28290 -- Macro: LONG_DOUBLE_TYPE_SIZE
28291     A C expression for the size in bits of the type `long double' on
28292     the target machine.  If you don't define this, the default is two
28293     words.
28294
28295 -- Macro: SHORT_FRACT_TYPE_SIZE
28296     A C expression for the size in bits of the type `short _Fract' on
28297     the target machine.  If you don't define this, the default is
28298     `BITS_PER_UNIT'.
28299
28300 -- Macro: FRACT_TYPE_SIZE
28301     A C expression for the size in bits of the type `_Fract' on the
28302     target machine.  If you don't define this, the default is
28303     `BITS_PER_UNIT * 2'.
28304
28305 -- Macro: LONG_FRACT_TYPE_SIZE
28306     A C expression for the size in bits of the type `long _Fract' on
28307     the target machine.  If you don't define this, the default is
28308     `BITS_PER_UNIT * 4'.
28309
28310 -- Macro: LONG_LONG_FRACT_TYPE_SIZE
28311     A C expression for the size in bits of the type `long long _Fract'
28312     on the target machine.  If you don't define this, the default is
28313     `BITS_PER_UNIT * 8'.
28314
28315 -- Macro: SHORT_ACCUM_TYPE_SIZE
28316     A C expression for the size in bits of the type `short _Accum' on
28317     the target machine.  If you don't define this, the default is
28318     `BITS_PER_UNIT * 2'.
28319
28320 -- Macro: ACCUM_TYPE_SIZE
28321     A C expression for the size in bits of the type `_Accum' on the
28322     target machine.  If you don't define this, the default is
28323     `BITS_PER_UNIT * 4'.
28324
28325 -- Macro: LONG_ACCUM_TYPE_SIZE
28326     A C expression for the size in bits of the type `long _Accum' on
28327     the target machine.  If you don't define this, the default is
28328     `BITS_PER_UNIT * 8'.
28329
28330 -- Macro: LONG_LONG_ACCUM_TYPE_SIZE
28331     A C expression for the size in bits of the type `long long _Accum'
28332     on the target machine.  If you don't define this, the default is
28333     `BITS_PER_UNIT * 16'.
28334
28335 -- Macro: LIBGCC2_LONG_DOUBLE_TYPE_SIZE
28336     Define this macro if `LONG_DOUBLE_TYPE_SIZE' is not constant or if
28337     you want routines in `libgcc2.a' for a size other than
28338     `LONG_DOUBLE_TYPE_SIZE'.  If you don't define this, the default is
28339     `LONG_DOUBLE_TYPE_SIZE'.
28340
28341 -- Macro: LIBGCC2_HAS_DF_MODE
28342     Define this macro if neither `DOUBLE_TYPE_SIZE' nor
28343     `LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is `DFmode' but you want `DFmode'
28344     routines in `libgcc2.a' anyway.  If you don't define this and
28345     either `DOUBLE_TYPE_SIZE' or `LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is 64
28346     then the default is 1, otherwise it is 0.
28347
28348 -- Macro: LIBGCC2_HAS_XF_MODE
28349     Define this macro if `LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is not
28350     `XFmode' but you want `XFmode' routines in `libgcc2.a' anyway.  If
28351     you don't define this and `LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is 80
28352     then the default is 1, otherwise it is 0.
28353
28354 -- Macro: LIBGCC2_HAS_TF_MODE
28355     Define this macro if `LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is not
28356     `TFmode' but you want `TFmode' routines in `libgcc2.a' anyway.  If
28357     you don't define this and `LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is 128
28358     then the default is 1, otherwise it is 0.
28359
28360 -- Macro: LIBGCC2_GNU_PREFIX
28361     This macro corresponds to the `TARGET_LIBFUNC_GNU_PREFIX' target
28362     hook and should be defined if that hook is overriden to be true.
28363     It causes function names in libgcc to be changed to use a `__gnu_'
28364     prefix for their name rather than the default `__'.  A port which
28365     uses this macro should also arrange to use `t-gnu-prefix' in the
28366     libgcc `config.host'.
28367
28368 -- Macro: SF_SIZE
28369 -- Macro: DF_SIZE
28370 -- Macro: XF_SIZE
28371 -- Macro: TF_SIZE
28372     Define these macros to be the size in bits of the mantissa of
28373     `SFmode', `DFmode', `XFmode' and `TFmode' values, if the defaults
28374     in `libgcc2.h' are inappropriate.  By default, `FLT_MANT_DIG' is
28375     used for `SF_SIZE', `LDBL_MANT_DIG' for `XF_SIZE' and `TF_SIZE',
28376     and `DBL_MANT_DIG' or `LDBL_MANT_DIG' for `DF_SIZE' according to
28377     whether `DOUBLE_TYPE_SIZE' or `LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is
28378     64.
28379
28380 -- Macro: TARGET_FLT_EVAL_METHOD
28381     A C expression for the value for `FLT_EVAL_METHOD' in `float.h',
28382     assuming, if applicable, that the floating-point control word is
28383     in its default state.  If you do not define this macro the value of
28384     `FLT_EVAL_METHOD' will be zero.
28385
28386 -- Macro: WIDEST_HARDWARE_FP_SIZE
28387     A C expression for the size in bits of the widest floating-point
28388     format supported by the hardware.  If you define this macro, you
28389     must specify a value less than or equal to the value of
28390     `LONG_DOUBLE_TYPE_SIZE'.  If you do not define this macro, the
28391     value of `LONG_DOUBLE_TYPE_SIZE' is the default.
28392
28393 -- Macro: DEFAULT_SIGNED_CHAR
28394     An expression whose value is 1 or 0, according to whether the type
28395     `char' should be signed or unsigned by default.  The user can
28396     always override this default with the options `-fsigned-char' and
28397     `-funsigned-char'.
28398
28399 -- Target Hook: bool TARGET_DEFAULT_SHORT_ENUMS (void)
28400     This target hook should return true if the compiler should give an
28401     `enum' type only as many bytes as it takes to represent the range
28402     of possible values of that type.  It should return false if all
28403     `enum' types should be allocated like `int'.
28404
28405     The default is to return false.
28406
28407 -- Macro: SIZE_TYPE
28408     A C expression for a string describing the name of the data type
28409     to use for size values.  The typedef name `size_t' is defined
28410     using the contents of the string.
28411
28412     The string can contain more than one keyword.  If so, separate
28413     them with spaces, and write first any length keyword, then
28414     `unsigned' if appropriate, and finally `int'.  The string must
28415     exactly match one of the data type names defined in the function
28416     `c_common_nodes_and_builtins' in the file `c-family/c-common.c'.
28417     You may not omit `int' or change the order--that would cause the
28418     compiler to crash on startup.
28419
28420     If you don't define this macro, the default is `"long unsigned
28421     int"'.
28422
28423 -- Macro: SIZETYPE
28424     GCC defines internal types (`sizetype', `ssizetype', `bitsizetype'
28425     and `sbitsizetype') for expressions dealing with size.  This macro
28426     is a C expression for a string describing the name of the data
28427     type from which the precision of `sizetype' is extracted.
28428
28429     The string has the same restrictions as `SIZE_TYPE' string.
28430
28431     If you don't define this macro, the default is `SIZE_TYPE'.
28432
28433 -- Macro: PTRDIFF_TYPE
28434     A C expression for a string describing the name of the data type
28435     to use for the result of subtracting two pointers.  The typedef
28436     name `ptrdiff_t' is defined using the contents of the string.  See
28437     `SIZE_TYPE' above for more information.
28438
28439     If you don't define this macro, the default is `"long int"'.
28440
28441 -- Macro: WCHAR_TYPE
28442     A C expression for a string describing the name of the data type
28443     to use for wide characters.  The typedef name `wchar_t' is defined
28444     using the contents of the string.  See `SIZE_TYPE' above for more
28445     information.
28446
28447     If you don't define this macro, the default is `"int"'.
28448
28449 -- Macro: WCHAR_TYPE_SIZE
28450     A C expression for the size in bits of the data type for wide
28451     characters.  This is used in `cpp', which cannot make use of
28452     `WCHAR_TYPE'.
28453
28454 -- Macro: WINT_TYPE
28455     A C expression for a string describing the name of the data type to
28456     use for wide characters passed to `printf' and returned from
28457     `getwc'.  The typedef name `wint_t' is defined using the contents
28458     of the string.  See `SIZE_TYPE' above for more information.
28459
28460     If you don't define this macro, the default is `"unsigned int"'.
28461
28462 -- Macro: INTMAX_TYPE
28463     A C expression for a string describing the name of the data type
28464     that can represent any value of any standard or extended signed
28465     integer type.  The typedef name `intmax_t' is defined using the
28466     contents of the string.  See `SIZE_TYPE' above for more
28467     information.
28468
28469     If you don't define this macro, the default is the first of
28470     `"int"', `"long int"', or `"long long int"' that has as much
28471     precision as `long long int'.
28472
28473 -- Macro: UINTMAX_TYPE
28474     A C expression for a string describing the name of the data type
28475     that can represent any value of any standard or extended unsigned
28476     integer type.  The typedef name `uintmax_t' is defined using the
28477     contents of the string.  See `SIZE_TYPE' above for more
28478     information.
28479
28480     If you don't define this macro, the default is the first of
28481     `"unsigned int"', `"long unsigned int"', or `"long long unsigned
28482     int"' that has as much precision as `long long unsigned int'.
28483
28484 -- Macro: SIG_ATOMIC_TYPE
28485 -- Macro: INT8_TYPE
28486 -- Macro: INT16_TYPE
28487 -- Macro: INT32_TYPE
28488 -- Macro: INT64_TYPE
28489 -- Macro: UINT8_TYPE
28490 -- Macro: UINT16_TYPE
28491 -- Macro: UINT32_TYPE
28492 -- Macro: UINT64_TYPE
28493 -- Macro: INT_LEAST8_TYPE
28494 -- Macro: INT_LEAST16_TYPE
28495 -- Macro: INT_LEAST32_TYPE
28496 -- Macro: INT_LEAST64_TYPE
28497 -- Macro: UINT_LEAST8_TYPE
28498 -- Macro: UINT_LEAST16_TYPE
28499 -- Macro: UINT_LEAST32_TYPE
28500 -- Macro: UINT_LEAST64_TYPE
28501 -- Macro: INT_FAST8_TYPE
28502 -- Macro: INT_FAST16_TYPE
28503 -- Macro: INT_FAST32_TYPE
28504 -- Macro: INT_FAST64_TYPE
28505 -- Macro: UINT_FAST8_TYPE
28506 -- Macro: UINT_FAST16_TYPE
28507 -- Macro: UINT_FAST32_TYPE
28508 -- Macro: UINT_FAST64_TYPE
28509 -- Macro: INTPTR_TYPE
28510 -- Macro: UINTPTR_TYPE
28511     C expressions for the standard types `sig_atomic_t', `int8_t',
28512     `int16_t', `int32_t', `int64_t', `uint8_t', `uint16_t',
28513     `uint32_t', `uint64_t', `int_least8_t', `int_least16_t',
28514     `int_least32_t', `int_least64_t', `uint_least8_t',
28515     `uint_least16_t', `uint_least32_t', `uint_least64_t',
28516     `int_fast8_t', `int_fast16_t', `int_fast32_t', `int_fast64_t',
28517     `uint_fast8_t', `uint_fast16_t', `uint_fast32_t', `uint_fast64_t',
28518     `intptr_t', and `uintptr_t'.  See `SIZE_TYPE' above for more
28519     information.
28520
28521     If any of these macros evaluates to a null pointer, the
28522     corresponding type is not supported; if GCC is configured to
28523     provide `<stdint.h>' in such a case, the header provided may not
28524     conform to C99, depending on the type in question.  The defaults
28525     for all of these macros are null pointers.
28526
28527 -- Macro: TARGET_PTRMEMFUNC_VBIT_LOCATION
28528     The C++ compiler represents a pointer-to-member-function with a
28529     struct that looks like:
28530
28531            struct {
28532              union {
28533                void (*fn)();
28534                ptrdiff_t vtable_index;
28535              };
28536              ptrdiff_t delta;
28537            };
28538
28539     The C++ compiler must use one bit to indicate whether the function
28540     that will be called through a pointer-to-member-function is
28541     virtual.  Normally, we assume that the low-order bit of a function
28542     pointer must always be zero.  Then, by ensuring that the
28543     vtable_index is odd, we can distinguish which variant of the union
28544     is in use.  But, on some platforms function pointers can be odd,
28545     and so this doesn't work.  In that case, we use the low-order bit
28546     of the `delta' field, and shift the remainder of the `delta' field
28547     to the left.
28548
28549     GCC will automatically make the right selection about where to
28550     store this bit using the `FUNCTION_BOUNDARY' setting for your
28551     platform.  However, some platforms such as ARM/Thumb have
28552     `FUNCTION_BOUNDARY' set such that functions always start at even
28553     addresses, but the lowest bit of pointers to functions indicate
28554     whether the function at that address is in ARM or Thumb mode.  If
28555     this is the case of your architecture, you should define this
28556     macro to `ptrmemfunc_vbit_in_delta'.
28557
28558     In general, you should not have to define this macro.  On
28559     architectures in which function addresses are always even,
28560     according to `FUNCTION_BOUNDARY', GCC will automatically define
28561     this macro to `ptrmemfunc_vbit_in_pfn'.
28562
28563 -- Macro: TARGET_VTABLE_USES_DESCRIPTORS
28564     Normally, the C++ compiler uses function pointers in vtables.  This
28565     macro allows the target to change to use "function descriptors"
28566     instead.  Function descriptors are found on targets for whom a
28567     function pointer is actually a small data structure.  Normally the
28568     data structure consists of the actual code address plus a data
28569     pointer to which the function's data is relative.
28570
28571     If vtables are used, the value of this macro should be the number
28572     of words that the function descriptor occupies.
28573
28574 -- Macro: TARGET_VTABLE_ENTRY_ALIGN
28575     By default, the vtable entries are void pointers, the so the
28576     alignment is the same as pointer alignment.  The value of this
28577     macro specifies the alignment of the vtable entry in bits.  It
28578     should be defined only when special alignment is necessary. */
28579
28580 -- Macro: TARGET_VTABLE_DATA_ENTRY_DISTANCE
28581     There are a few non-descriptor entries in the vtable at offsets
28582     below zero.  If these entries must be padded (say, to preserve the
28583     alignment specified by `TARGET_VTABLE_ENTRY_ALIGN'), set this to
28584     the number of words in each data entry.
28585
28586
28587File: gccint.info,  Node: Registers,  Next: Register Classes,  Prev: Type Layout,  Up: Target Macros
28588
2858917.7 Register Usage
28590===================
28591
28592This section explains how to describe what registers the target machine
28593has, and how (in general) they can be used.
28594
28595 The description of which registers a specific instruction can use is
28596done with register classes; see *note Register Classes::.  For
28597information on using registers to access a stack frame, see *note Frame
28598Registers::.  For passing values in registers, see *note Register
28599Arguments::.  For returning values in registers, see *note Scalar
28600Return::.
28601
28602* Menu:
28603
28604* Register Basics::             Number and kinds of registers.
28605* Allocation Order::            Order in which registers are allocated.
28606* Values in Registers::         What kinds of values each reg can hold.
28607* Leaf Functions::              Renumbering registers for leaf functions.
28608* Stack Registers::             Handling a register stack such as 80387.
28609
28610
28611File: gccint.info,  Node: Register Basics,  Next: Allocation Order,  Up: Registers
28612
2861317.7.1 Basic Characteristics of Registers
28614-----------------------------------------
28615
28616Registers have various characteristics.
28617
28618 -- Macro: FIRST_PSEUDO_REGISTER
28619     Number of hardware registers known to the compiler.  They receive
28620     numbers 0 through `FIRST_PSEUDO_REGISTER-1'; thus, the first
28621     pseudo register's number really is assigned the number
28622     `FIRST_PSEUDO_REGISTER'.
28623
28624 -- Macro: FIXED_REGISTERS
28625     An initializer that says which registers are used for fixed
28626     purposes all throughout the compiled code and are therefore not
28627     available for general allocation.  These would include the stack
28628     pointer, the frame pointer (except on machines where that can be
28629     used as a general register when no frame pointer is needed), the
28630     program counter on machines where that is considered one of the
28631     addressable registers, and any other numbered register with a
28632     standard use.
28633
28634     This information is expressed as a sequence of numbers, separated
28635     by commas and surrounded by braces.  The Nth number is 1 if
28636     register N is fixed, 0 otherwise.
28637
28638     The table initialized from this macro, and the table initialized by
28639     the following one, may be overridden at run time either
28640     automatically, by the actions of the macro
28641     `CONDITIONAL_REGISTER_USAGE', or by the user with the command
28642     options `-ffixed-REG', `-fcall-used-REG' and `-fcall-saved-REG'.
28643
28644 -- Macro: CALL_USED_REGISTERS
28645     Like `FIXED_REGISTERS' but has 1 for each register that is
28646     clobbered (in general) by function calls as well as for fixed
28647     registers.  This macro therefore identifies the registers that are
28648     not available for general allocation of values that must live
28649     across function calls.
28650
28651     If a register has 0 in `CALL_USED_REGISTERS', the compiler
28652     automatically saves it on function entry and restores it on
28653     function exit, if the register is used within the function.
28654
28655 -- Macro: CALL_REALLY_USED_REGISTERS
28656     Like `CALL_USED_REGISTERS' except this macro doesn't require that
28657     the entire set of `FIXED_REGISTERS' be included.
28658     (`CALL_USED_REGISTERS' must be a superset of `FIXED_REGISTERS').
28659     This macro is optional.  If not specified, it defaults to the value
28660     of `CALL_USED_REGISTERS'.
28661
28662 -- Macro: HARD_REGNO_CALL_PART_CLOBBERED (REGNO, MODE)
28663     A C expression that is nonzero if it is not permissible to store a
28664     value of mode MODE in hard register number REGNO across a call
28665     without some part of it being clobbered.  For most machines this
28666     macro need not be defined.  It is only required for machines that
28667     do not preserve the entire contents of a register across a call.
28668
28669 -- Target Hook: void TARGET_CONDITIONAL_REGISTER_USAGE (void)
28670     This hook may conditionally modify five variables `fixed_regs',
28671     `call_used_regs', `global_regs', `reg_names', and
28672     `reg_class_contents', to take into account any dependence of these
28673     register sets on target flags.  The first three of these are of
28674     type `char []' (interpreted as Boolean vectors).  `global_regs' is
28675     a `const char *[]', and `reg_class_contents' is a `HARD_REG_SET'.
28676     Before the macro is called, `fixed_regs', `call_used_regs',
28677     `reg_class_contents', and `reg_names' have been initialized from
28678     `FIXED_REGISTERS', `CALL_USED_REGISTERS', `REG_CLASS_CONTENTS',
28679     and `REGISTER_NAMES', respectively.  `global_regs' has been
28680     cleared, and any `-ffixed-REG', `-fcall-used-REG' and
28681     `-fcall-saved-REG' command options have been applied.
28682
28683     If the usage of an entire class of registers depends on the target
28684     flags, you may indicate this to GCC by using this macro to modify
28685     `fixed_regs' and `call_used_regs' to 1 for each of the registers
28686     in the classes which should not be used by GCC.  Also define the
28687     macro `REG_CLASS_FROM_LETTER' / `REG_CLASS_FROM_CONSTRAINT' to
28688     return `NO_REGS' if it is called with a letter for a class that
28689     shouldn't be used.
28690
28691     (However, if this class is not included in `GENERAL_REGS' and all
28692     of the insn patterns whose constraints permit this class are
28693     controlled by target switches, then GCC will automatically avoid
28694     using these registers when the target switches are opposed to
28695     them.)
28696
28697 -- Macro: INCOMING_REGNO (OUT)
28698     Define this macro if the target machine has register windows.
28699     This C expression returns the register number as seen by the
28700     called function corresponding to the register number OUT as seen
28701     by the calling function.  Return OUT if register number OUT is not
28702     an outbound register.
28703
28704 -- Macro: OUTGOING_REGNO (IN)
28705     Define this macro if the target machine has register windows.
28706     This C expression returns the register number as seen by the
28707     calling function corresponding to the register number IN as seen
28708     by the called function.  Return IN if register number IN is not an
28709     inbound register.
28710
28711 -- Macro: LOCAL_REGNO (REGNO)
28712     Define this macro if the target machine has register windows.
28713     This C expression returns true if the register is call-saved but
28714     is in the register window.  Unlike most call-saved registers, such
28715     registers need not be explicitly restored on function exit or
28716     during non-local gotos.
28717
28718 -- Macro: PC_REGNUM
28719     If the program counter has a register number, define this as that
28720     register number.  Otherwise, do not define it.
28721
28722
28723File: gccint.info,  Node: Allocation Order,  Next: Values in Registers,  Prev: Register Basics,  Up: Registers
28724
2872517.7.2 Order of Allocation of Registers
28726---------------------------------------
28727
28728Registers are allocated in order.
28729
28730 -- Macro: REG_ALLOC_ORDER
28731     If defined, an initializer for a vector of integers, containing the
28732     numbers of hard registers in the order in which GCC should prefer
28733     to use them (from most preferred to least).
28734
28735     If this macro is not defined, registers are used lowest numbered
28736     first (all else being equal).
28737
28738     One use of this macro is on machines where the highest numbered
28739     registers must always be saved and the save-multiple-registers
28740     instruction supports only sequences of consecutive registers.  On
28741     such machines, define `REG_ALLOC_ORDER' to be an initializer that
28742     lists the highest numbered allocable register first.
28743
28744 -- Macro: ADJUST_REG_ALLOC_ORDER
28745     A C statement (sans semicolon) to choose the order in which to
28746     allocate hard registers for pseudo-registers local to a basic
28747     block.
28748
28749     Store the desired register order in the array `reg_alloc_order'.
28750     Element 0 should be the register to allocate first; element 1, the
28751     next register; and so on.
28752
28753     The macro body should not assume anything about the contents of
28754     `reg_alloc_order' before execution of the macro.
28755
28756     On most machines, it is not necessary to define this macro.
28757
28758 -- Macro: HONOR_REG_ALLOC_ORDER
28759     Normally, IRA tries to estimate the costs for saving a register in
28760     the prologue and restoring it in the epilogue.  This discourages
28761     it from using call-saved registers.  If a machine wants to ensure
28762     that IRA allocates registers in the order given by REG_ALLOC_ORDER
28763     even if some call-saved registers appear earlier than call-used
28764     ones, this macro should be defined.
28765
28766 -- Macro: IRA_HARD_REGNO_ADD_COST_MULTIPLIER (REGNO)
28767     In some case register allocation order is not enough for the
28768     Integrated Register Allocator (IRA) to generate a good code.  If
28769     this macro is defined, it should return a floating point value
28770     based on REGNO.  The cost of using REGNO for a pseudo will be
28771     increased by approximately the pseudo's usage frequency times the
28772     value returned by this macro.  Not defining this macro is
28773     equivalent to having it always return `0.0'.
28774
28775     On most machines, it is not necessary to define this macro.
28776
28777
28778File: gccint.info,  Node: Values in Registers,  Next: Leaf Functions,  Prev: Allocation Order,  Up: Registers
28779
2878017.7.3 How Values Fit in Registers
28781----------------------------------
28782
28783This section discusses the macros that describe which kinds of values
28784(specifically, which machine modes) each register can hold, and how many
28785consecutive registers are needed for a given mode.
28786
28787 -- Macro: HARD_REGNO_NREGS (REGNO, MODE)
28788     A C expression for the number of consecutive hard registers,
28789     starting at register number REGNO, required to hold a value of mode
28790     MODE.  This macro must never return zero, even if a register
28791     cannot hold the requested mode - indicate that with
28792     HARD_REGNO_MODE_OK and/or CANNOT_CHANGE_MODE_CLASS instead.
28793
28794     On a machine where all registers are exactly one word, a suitable
28795     definition of this macro is
28796
28797          #define HARD_REGNO_NREGS(REGNO, MODE)            \
28798             ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1)  \
28799              / UNITS_PER_WORD)
28800
28801 -- Macro: HARD_REGNO_NREGS_HAS_PADDING (REGNO, MODE)
28802     A C expression that is nonzero if a value of mode MODE, stored in
28803     memory, ends with padding that causes it to take up more space than
28804     in registers starting at register number REGNO (as determined by
28805     multiplying GCC's notion of the size of the register when
28806     containing this mode by the number of registers returned by
28807     `HARD_REGNO_NREGS').  By default this is zero.
28808
28809     For example, if a floating-point value is stored in three 32-bit
28810     registers but takes up 128 bits in memory, then this would be
28811     nonzero.
28812
28813     This macros only needs to be defined if there are cases where
28814     `subreg_get_info' would otherwise wrongly determine that a
28815     `subreg' can be represented by an offset to the register number,
28816     when in fact such a `subreg' would contain some of the padding not
28817     stored in registers and so not be representable.
28818
28819 -- Macro: HARD_REGNO_NREGS_WITH_PADDING (REGNO, MODE)
28820     For values of REGNO and MODE for which
28821     `HARD_REGNO_NREGS_HAS_PADDING' returns nonzero, a C expression
28822     returning the greater number of registers required to hold the
28823     value including any padding.  In the example above, the value
28824     would be four.
28825
28826 -- Macro: REGMODE_NATURAL_SIZE (MODE)
28827     Define this macro if the natural size of registers that hold values
28828     of mode MODE is not the word size.  It is a C expression that
28829     should give the natural size in bytes for the specified mode.  It
28830     is used by the register allocator to try to optimize its results.
28831     This happens for example on SPARC 64-bit where the natural size of
28832     floating-point registers is still 32-bit.
28833
28834 -- Macro: HARD_REGNO_MODE_OK (REGNO, MODE)
28835     A C expression that is nonzero if it is permissible to store a
28836     value of mode MODE in hard register number REGNO (or in several
28837     registers starting with that one).  For a machine where all
28838     registers are equivalent, a suitable definition is
28839
28840          #define HARD_REGNO_MODE_OK(REGNO, MODE) 1
28841
28842     You need not include code to check for the numbers of fixed
28843     registers, because the allocation mechanism considers them to be
28844     always occupied.
28845
28846     On some machines, double-precision values must be kept in even/odd
28847     register pairs.  You can implement that by defining this macro to
28848     reject odd register numbers for such modes.
28849
28850     The minimum requirement for a mode to be OK in a register is that
28851     the `movMODE' instruction pattern support moves between the
28852     register and other hard register in the same class and that moving
28853     a value into the register and back out not alter it.
28854
28855     Since the same instruction used to move `word_mode' will work for
28856     all narrower integer modes, it is not necessary on any machine for
28857     `HARD_REGNO_MODE_OK' to distinguish between these modes, provided
28858     you define patterns `movhi', etc., to take advantage of this.  This
28859     is useful because of the interaction between `HARD_REGNO_MODE_OK'
28860     and `MODES_TIEABLE_P'; it is very desirable for all integer modes
28861     to be tieable.
28862
28863     Many machines have special registers for floating point arithmetic.
28864     Often people assume that floating point machine modes are allowed
28865     only in floating point registers.  This is not true.  Any
28866     registers that can hold integers can safely _hold_ a floating
28867     point machine mode, whether or not floating arithmetic can be done
28868     on it in those registers.  Integer move instructions can be used
28869     to move the values.
28870
28871     On some machines, though, the converse is true: fixed-point machine
28872     modes may not go in floating registers.  This is true if the
28873     floating registers normalize any value stored in them, because
28874     storing a non-floating value there would garble it.  In this case,
28875     `HARD_REGNO_MODE_OK' should reject fixed-point machine modes in
28876     floating registers.  But if the floating registers do not
28877     automatically normalize, if you can store any bit pattern in one
28878     and retrieve it unchanged without a trap, then any machine mode
28879     may go in a floating register, so you can define this macro to say
28880     so.
28881
28882     The primary significance of special floating registers is rather
28883     that they are the registers acceptable in floating point arithmetic
28884     instructions.  However, this is of no concern to
28885     `HARD_REGNO_MODE_OK'.  You handle it by writing the proper
28886     constraints for those instructions.
28887
28888     On some machines, the floating registers are especially slow to
28889     access, so that it is better to store a value in a stack frame
28890     than in such a register if floating point arithmetic is not being
28891     done.  As long as the floating registers are not in class
28892     `GENERAL_REGS', they will not be used unless some pattern's
28893     constraint asks for one.
28894
28895 -- Macro: HARD_REGNO_RENAME_OK (FROM, TO)
28896     A C expression that is nonzero if it is OK to rename a hard
28897     register FROM to another hard register TO.
28898
28899     One common use of this macro is to prevent renaming of a register
28900     to another register that is not saved by a prologue in an interrupt
28901     handler.
28902
28903     The default is always nonzero.
28904
28905 -- Macro: MODES_TIEABLE_P (MODE1, MODE2)
28906     A C expression that is nonzero if a value of mode MODE1 is
28907     accessible in mode MODE2 without copying.
28908
28909     If `HARD_REGNO_MODE_OK (R, MODE1)' and `HARD_REGNO_MODE_OK (R,
28910     MODE2)' are always the same for any R, then `MODES_TIEABLE_P
28911     (MODE1, MODE2)' should be nonzero.  If they differ for any R, you
28912     should define this macro to return zero unless some other
28913     mechanism ensures the accessibility of the value in a narrower
28914     mode.
28915
28916     You should define this macro to return nonzero in as many cases as
28917     possible since doing so will allow GCC to perform better register
28918     allocation.
28919
28920 -- Target Hook: bool TARGET_HARD_REGNO_SCRATCH_OK (unsigned int REGNO)
28921     This target hook should return `true' if it is OK to use a hard
28922     register REGNO as scratch reg in peephole2.
28923
28924     One common use of this macro is to prevent using of a register that
28925     is not saved by a prologue in an interrupt handler.
28926
28927     The default version of this hook always returns `true'.
28928
28929 -- Macro: AVOID_CCMODE_COPIES
28930     Define this macro if the compiler should avoid copies to/from
28931     `CCmode' registers.  You should only define this macro if support
28932     for copying to/from `CCmode' is incomplete.
28933
28934
28935File: gccint.info,  Node: Leaf Functions,  Next: Stack Registers,  Prev: Values in Registers,  Up: Registers
28936
2893717.7.4 Handling Leaf Functions
28938------------------------------
28939
28940On some machines, a leaf function (i.e., one which makes no calls) can
28941run more efficiently if it does not make its own register window.
28942Often this means it is required to receive its arguments in the
28943registers where they are passed by the caller, instead of the registers
28944where they would normally arrive.
28945
28946 The special treatment for leaf functions generally applies only when
28947other conditions are met; for example, often they may use only those
28948registers for its own variables and temporaries.  We use the term "leaf
28949function" to mean a function that is suitable for this special
28950handling, so that functions with no calls are not necessarily "leaf
28951functions".
28952
28953 GCC assigns register numbers before it knows whether the function is
28954suitable for leaf function treatment.  So it needs to renumber the
28955registers in order to output a leaf function.  The following macros
28956accomplish this.
28957
28958 -- Macro: LEAF_REGISTERS
28959     Name of a char vector, indexed by hard register number, which
28960     contains 1 for a register that is allowable in a candidate for leaf
28961     function treatment.
28962
28963     If leaf function treatment involves renumbering the registers,
28964     then the registers marked here should be the ones before
28965     renumbering--those that GCC would ordinarily allocate.  The
28966     registers which will actually be used in the assembler code, after
28967     renumbering, should not be marked with 1 in this vector.
28968
28969     Define this macro only if the target machine offers a way to
28970     optimize the treatment of leaf functions.
28971
28972 -- Macro: LEAF_REG_REMAP (REGNO)
28973     A C expression whose value is the register number to which REGNO
28974     should be renumbered, when a function is treated as a leaf
28975     function.
28976
28977     If REGNO is a register number which should not appear in a leaf
28978     function before renumbering, then the expression should yield -1,
28979     which will cause the compiler to abort.
28980
28981     Define this macro only if the target machine offers a way to
28982     optimize the treatment of leaf functions, and registers need to be
28983     renumbered to do this.
28984
28985 `TARGET_ASM_FUNCTION_PROLOGUE' and `TARGET_ASM_FUNCTION_EPILOGUE' must
28986usually treat leaf functions specially.  They can test the C variable
28987`current_function_is_leaf' which is nonzero for leaf functions.
28988`current_function_is_leaf' is set prior to local register allocation
28989and is valid for the remaining compiler passes.  They can also test the
28990C variable `current_function_uses_only_leaf_regs' which is nonzero for
28991leaf functions which only use leaf registers.
28992`current_function_uses_only_leaf_regs' is valid after all passes that
28993modify the instructions have been run and is only useful if
28994`LEAF_REGISTERS' is defined.
28995
28996
28997File: gccint.info,  Node: Stack Registers,  Prev: Leaf Functions,  Up: Registers
28998
2899917.7.5 Registers That Form a Stack
29000----------------------------------
29001
29002There are special features to handle computers where some of the
29003"registers" form a stack.  Stack registers are normally written by
29004pushing onto the stack, and are numbered relative to the top of the
29005stack.
29006
29007 Currently, GCC can only handle one group of stack-like registers, and
29008they must be consecutively numbered.  Furthermore, the existing support
29009for stack-like registers is specific to the 80387 floating point
29010coprocessor.  If you have a new architecture that uses stack-like
29011registers, you will need to do substantial work on `reg-stack.c' and
29012write your machine description to cooperate with it, as well as
29013defining these macros.
29014
29015 -- Macro: STACK_REGS
29016     Define this if the machine has any stack-like registers.
29017
29018 -- Macro: STACK_REG_COVER_CLASS
29019     This is a cover class containing the stack registers.  Define this
29020     if the machine has any stack-like registers.
29021
29022 -- Macro: FIRST_STACK_REG
29023     The number of the first stack-like register.  This one is the top
29024     of the stack.
29025
29026 -- Macro: LAST_STACK_REG
29027     The number of the last stack-like register.  This one is the
29028     bottom of the stack.
29029
29030
29031File: gccint.info,  Node: Register Classes,  Next: Old Constraints,  Prev: Registers,  Up: Target Macros
29032
2903317.8 Register Classes
29034=====================
29035
29036On many machines, the numbered registers are not all equivalent.  For
29037example, certain registers may not be allowed for indexed addressing;
29038certain registers may not be allowed in some instructions.  These
29039machine restrictions are described to the compiler using "register
29040classes".
29041
29042 You define a number of register classes, giving each one a name and
29043saying which of the registers belong to it.  Then you can specify
29044register classes that are allowed as operands to particular instruction
29045patterns.
29046
29047 In general, each register will belong to several classes.  In fact, one
29048class must be named `ALL_REGS' and contain all the registers.  Another
29049class must be named `NO_REGS' and contain no registers.  Often the
29050union of two classes will be another class; however, this is not
29051required.
29052
29053 One of the classes must be named `GENERAL_REGS'.  There is nothing
29054terribly special about the name, but the operand constraint letters `r'
29055and `g' specify this class.  If `GENERAL_REGS' is the same as
29056`ALL_REGS', just define it as a macro which expands to `ALL_REGS'.
29057
29058 Order the classes so that if class X is contained in class Y then X
29059has a lower class number than Y.
29060
29061 The way classes other than `GENERAL_REGS' are specified in operand
29062constraints is through machine-dependent operand constraint letters.
29063You can define such letters to correspond to various classes, then use
29064them in operand constraints.
29065
29066 You must define the narrowest register classes for allocatable
29067registers, so that each class either has no subclasses, or that for
29068some mode, the move cost between registers within the class is cheaper
29069than moving a register in the class to or from memory (*note Costs::).
29070
29071 You should define a class for the union of two classes whenever some
29072instruction allows both classes.  For example, if an instruction allows
29073either a floating point (coprocessor) register or a general register
29074for a certain operand, you should define a class `FLOAT_OR_GENERAL_REGS'
29075which includes both of them.  Otherwise you will get suboptimal code,
29076or even internal compiler errors when reload cannot find a register in
29077the class computed via `reg_class_subunion'.
29078
29079 You must also specify certain redundant information about the register
29080classes: for each class, which classes contain it and which ones are
29081contained in it; for each pair of classes, the largest class contained
29082in their union.
29083
29084 When a value occupying several consecutive registers is expected in a
29085certain class, all the registers used must belong to that class.
29086Therefore, register classes cannot be used to enforce a requirement for
29087a register pair to start with an even-numbered register.  The way to
29088specify this requirement is with `HARD_REGNO_MODE_OK'.
29089
29090 Register classes used for input-operands of bitwise-and or shift
29091instructions have a special requirement: each such class must have, for
29092each fixed-point machine mode, a subclass whose registers can transfer
29093that mode to or from memory.  For example, on some machines, the
29094operations for single-byte values (`QImode') are limited to certain
29095registers.  When this is so, each register class that is used in a
29096bitwise-and or shift instruction must have a subclass consisting of
29097registers from which single-byte values can be loaded or stored.  This
29098is so that `PREFERRED_RELOAD_CLASS' can always have a possible value to
29099return.
29100
29101 -- Data type: enum reg_class
29102     An enumerated type that must be defined with all the register
29103     class names as enumerated values.  `NO_REGS' must be first.
29104     `ALL_REGS' must be the last register class, followed by one more
29105     enumerated value, `LIM_REG_CLASSES', which is not a register class
29106     but rather tells how many classes there are.
29107
29108     Each register class has a number, which is the value of casting
29109     the class name to type `int'.  The number serves as an index in
29110     many of the tables described below.
29111
29112 -- Macro: N_REG_CLASSES
29113     The number of distinct register classes, defined as follows:
29114
29115          #define N_REG_CLASSES (int) LIM_REG_CLASSES
29116
29117 -- Macro: REG_CLASS_NAMES
29118     An initializer containing the names of the register classes as C
29119     string constants.  These names are used in writing some of the
29120     debugging dumps.
29121
29122 -- Macro: REG_CLASS_CONTENTS
29123     An initializer containing the contents of the register classes, as
29124     integers which are bit masks.  The Nth integer specifies the
29125     contents of class N.  The way the integer MASK is interpreted is
29126     that register R is in the class if `MASK & (1 << R)' is 1.
29127
29128     When the machine has more than 32 registers, an integer does not
29129     suffice.  Then the integers are replaced by sub-initializers,
29130     braced groupings containing several integers.  Each
29131     sub-initializer must be suitable as an initializer for the type
29132     `HARD_REG_SET' which is defined in `hard-reg-set.h'.  In this
29133     situation, the first integer in each sub-initializer corresponds to
29134     registers 0 through 31, the second integer to registers 32 through
29135     63, and so on.
29136
29137 -- Macro: REGNO_REG_CLASS (REGNO)
29138     A C expression whose value is a register class containing hard
29139     register REGNO.  In general there is more than one such class;
29140     choose a class which is "minimal", meaning that no smaller class
29141     also contains the register.
29142
29143 -- Macro: BASE_REG_CLASS
29144     A macro whose definition is the name of the class to which a valid
29145     base register must belong.  A base register is one used in an
29146     address which is the register value plus a displacement.
29147
29148 -- Macro: MODE_BASE_REG_CLASS (MODE)
29149     This is a variation of the `BASE_REG_CLASS' macro which allows the
29150     selection of a base register in a mode dependent manner.  If MODE
29151     is VOIDmode then it should return the same value as
29152     `BASE_REG_CLASS'.
29153
29154 -- Macro: MODE_BASE_REG_REG_CLASS (MODE)
29155     A C expression whose value is the register class to which a valid
29156     base register must belong in order to be used in a base plus index
29157     register address.  You should define this macro if base plus index
29158     addresses have different requirements than other base register
29159     uses.
29160
29161 -- Macro: MODE_CODE_BASE_REG_CLASS (MODE, ADDRESS_SPACE, OUTER_CODE,
29162          INDEX_CODE)
29163     A C expression whose value is the register class to which a valid
29164     base register for a memory reference in mode MODE to address space
29165     ADDRESS_SPACE must belong.  OUTER_CODE and INDEX_CODE define the
29166     context in which the base register occurs.  OUTER_CODE is the code
29167     of the immediately enclosing expression (`MEM' for the top level
29168     of an address, `ADDRESS' for something that occurs in an
29169     `address_operand').  INDEX_CODE is the code of the corresponding
29170     index expression if OUTER_CODE is `PLUS'; `SCRATCH' otherwise.
29171
29172 -- Macro: INDEX_REG_CLASS
29173     A macro whose definition is the name of the class to which a valid
29174     index register must belong.  An index register is one used in an
29175     address where its value is either multiplied by a scale factor or
29176     added to another register (as well as added to a displacement).
29177
29178 -- Macro: REGNO_OK_FOR_BASE_P (NUM)
29179     A C expression which is nonzero if register number NUM is suitable
29180     for use as a base register in operand addresses.
29181
29182 -- Macro: REGNO_MODE_OK_FOR_BASE_P (NUM, MODE)
29183     A C expression that is just like `REGNO_OK_FOR_BASE_P', except that
29184     that expression may examine the mode of the memory reference in
29185     MODE.  You should define this macro if the mode of the memory
29186     reference affects whether a register may be used as a base
29187     register.  If you define this macro, the compiler will use it
29188     instead of `REGNO_OK_FOR_BASE_P'.  The mode may be `VOIDmode' for
29189     addresses that appear outside a `MEM', i.e., as an
29190     `address_operand'.
29191
29192 -- Macro: REGNO_MODE_OK_FOR_REG_BASE_P (NUM, MODE)
29193     A C expression which is nonzero if register number NUM is suitable
29194     for use as a base register in base plus index operand addresses,
29195     accessing memory in mode MODE.  It may be either a suitable hard
29196     register or a pseudo register that has been allocated such a hard
29197     register.  You should define this macro if base plus index
29198     addresses have different requirements than other base register
29199     uses.
29200
29201     Use of this macro is deprecated; please use the more general
29202     `REGNO_MODE_CODE_OK_FOR_BASE_P'.
29203
29204 -- Macro: REGNO_MODE_CODE_OK_FOR_BASE_P (NUM, MODE, ADDRESS_SPACE,
29205          OUTER_CODE, INDEX_CODE)
29206     A C expression which is nonzero if register number NUM is suitable
29207     for use as a base register in operand addresses, accessing memory
29208     in mode MODE in address space ADDRESS_SPACE.  This is similar to
29209     `REGNO_MODE_OK_FOR_BASE_P', except that that expression may
29210     examine the context in which the register appears in the memory
29211     reference.  OUTER_CODE is the code of the immediately enclosing
29212     expression (`MEM' if at the top level of the address, `ADDRESS'
29213     for something that occurs in an `address_operand').  INDEX_CODE is
29214     the code of the corresponding index expression if OUTER_CODE is
29215     `PLUS'; `SCRATCH' otherwise.  The mode may be `VOIDmode' for
29216     addresses that appear outside a `MEM', i.e., as an
29217     `address_operand'.
29218
29219 -- Macro: REGNO_OK_FOR_INDEX_P (NUM)
29220     A C expression which is nonzero if register number NUM is suitable
29221     for use as an index register in operand addresses.  It may be
29222     either a suitable hard register or a pseudo register that has been
29223     allocated such a hard register.
29224
29225     The difference between an index register and a base register is
29226     that the index register may be scaled.  If an address involves the
29227     sum of two registers, neither one of them scaled, then either one
29228     may be labeled the "base" and the other the "index"; but whichever
29229     labeling is used must fit the machine's constraints of which
29230     registers may serve in each capacity.  The compiler will try both
29231     labelings, looking for one that is valid, and will reload one or
29232     both registers only if neither labeling works.
29233
29234 -- Target Hook: reg_class_t TARGET_PREFERRED_RENAME_CLASS (reg_class_t
29235          RCLASS)
29236     A target hook that places additional preference on the register
29237     class to use when it is necessary to rename a register in class
29238     RCLASS to another class, or perhaps NO_REGS, if no preferred
29239     register class is found or hook `preferred_rename_class' is not
29240     implemented. Sometimes returning a more restrictive class makes
29241     better code.  For example, on ARM, thumb-2 instructions using
29242     `LO_REGS' may be smaller than instructions using `GENERIC_REGS'.
29243     By returning `LO_REGS' from `preferred_rename_class', code size
29244     can be reduced.
29245
29246 -- Target Hook: reg_class_t TARGET_PREFERRED_RELOAD_CLASS (rtx X,
29247          reg_class_t RCLASS)
29248     A target hook that places additional restrictions on the register
29249     class to use when it is necessary to copy value X into a register
29250     in class RCLASS.  The value is a register class; perhaps RCLASS,
29251     or perhaps another, smaller class.
29252
29253     The default version of this hook always returns value of `rclass'
29254     argument.
29255
29256     Sometimes returning a more restrictive class makes better code.
29257     For example, on the 68000, when X is an integer constant that is
29258     in range for a `moveq' instruction, the value of this macro is
29259     always `DATA_REGS' as long as RCLASS includes the data registers.
29260     Requiring a data register guarantees that a `moveq' will be used.
29261
29262     One case where `TARGET_PREFERRED_RELOAD_CLASS' must not return
29263     RCLASS is if X is a legitimate constant which cannot be loaded
29264     into some register class.  By returning `NO_REGS' you can force X
29265     into a memory location.  For example, rs6000 can load immediate
29266     values into general-purpose registers, but does not have an
29267     instruction for loading an immediate value into a floating-point
29268     register, so `TARGET_PREFERRED_RELOAD_CLASS' returns `NO_REGS' when
29269     X is a floating-point constant.  If the constant can't be loaded
29270     into any kind of register, code generation will be better if
29271     `TARGET_LEGITIMATE_CONSTANT_P' makes the constant illegitimate
29272     instead of using `TARGET_PREFERRED_RELOAD_CLASS'.
29273
29274     If an insn has pseudos in it after register allocation, reload
29275     will go through the alternatives and call repeatedly
29276     `TARGET_PREFERRED_RELOAD_CLASS' to find the best one.  Returning
29277     `NO_REGS', in this case, makes reload add a `!' in front of the
29278     constraint: the x86 back-end uses this feature to discourage usage
29279     of 387 registers when math is done in the SSE registers (and vice
29280     versa).
29281
29282 -- Macro: PREFERRED_RELOAD_CLASS (X, CLASS)
29283     A C expression that places additional restrictions on the register
29284     class to use when it is necessary to copy value X into a register
29285     in class CLASS.  The value is a register class; perhaps CLASS, or
29286     perhaps another, smaller class.  On many machines, the following
29287     definition is safe:
29288
29289          #define PREFERRED_RELOAD_CLASS(X,CLASS) CLASS
29290
29291     Sometimes returning a more restrictive class makes better code.
29292     For example, on the 68000, when X is an integer constant that is
29293     in range for a `moveq' instruction, the value of this macro is
29294     always `DATA_REGS' as long as CLASS includes the data registers.
29295     Requiring a data register guarantees that a `moveq' will be used.
29296
29297     One case where `PREFERRED_RELOAD_CLASS' must not return CLASS is
29298     if X is a legitimate constant which cannot be loaded into some
29299     register class.  By returning `NO_REGS' you can force X into a
29300     memory location.  For example, rs6000 can load immediate values
29301     into general-purpose registers, but does not have an instruction
29302     for loading an immediate value into a floating-point register, so
29303     `PREFERRED_RELOAD_CLASS' returns `NO_REGS' when X is a
29304     floating-point constant.  If the constant can't be loaded into any
29305     kind of register, code generation will be better if
29306     `TARGET_LEGITIMATE_CONSTANT_P' makes the constant illegitimate
29307     instead of using `TARGET_PREFERRED_RELOAD_CLASS'.
29308
29309     If an insn has pseudos in it after register allocation, reload
29310     will go through the alternatives and call repeatedly
29311     `PREFERRED_RELOAD_CLASS' to find the best one.  Returning
29312     `NO_REGS', in this case, makes reload add a `!' in front of the
29313     constraint: the x86 back-end uses this feature to discourage usage
29314     of 387 registers when math is done in the SSE registers (and vice
29315     versa).
29316
29317 -- Target Hook: reg_class_t TARGET_PREFERRED_OUTPUT_RELOAD_CLASS (rtx
29318          X, reg_class_t RCLASS)
29319     Like `TARGET_PREFERRED_RELOAD_CLASS', but for output reloads
29320     instead of input reloads.
29321
29322     The default version of this hook always returns value of `rclass'
29323     argument.
29324
29325     You can also use `TARGET_PREFERRED_OUTPUT_RELOAD_CLASS' to
29326     discourage reload from using some alternatives, like
29327     `TARGET_PREFERRED_RELOAD_CLASS'.
29328
29329 -- Macro: LIMIT_RELOAD_CLASS (MODE, CLASS)
29330     A C expression that places additional restrictions on the register
29331     class to use when it is necessary to be able to hold a value of
29332     mode MODE in a reload register for which class CLASS would
29333     ordinarily be used.
29334
29335     Unlike `PREFERRED_RELOAD_CLASS', this macro should be used when
29336     there are certain modes that simply can't go in certain reload
29337     classes.
29338
29339     The value is a register class; perhaps CLASS, or perhaps another,
29340     smaller class.
29341
29342     Don't define this macro unless the target machine has limitations
29343     which require the macro to do something nontrivial.
29344
29345 -- Target Hook: reg_class_t TARGET_SECONDARY_RELOAD (bool IN_P, rtx X,
29346          reg_class_t RELOAD_CLASS, enum machine_mode RELOAD_MODE,
29347          secondary_reload_info *SRI)
29348     Many machines have some registers that cannot be copied directly
29349     to or from memory or even from other types of registers.  An
29350     example is the `MQ' register, which on most machines, can only be
29351     copied to or from general registers, but not memory.  Below, we
29352     shall be using the term 'intermediate register' when a move
29353     operation cannot be performed directly, but has to be done by
29354     copying the source into the intermediate register first, and then
29355     copying the intermediate register to the destination.  An
29356     intermediate register always has the same mode as source and
29357     destination.  Since it holds the actual value being copied, reload
29358     might apply optimizations to re-use an intermediate register and
29359     eliding the copy from the source when it can determine that the
29360     intermediate register still holds the required value.
29361
29362     Another kind of secondary reload is required on some machines which
29363     allow copying all registers to and from memory, but require a
29364     scratch register for stores to some memory locations (e.g., those
29365     with symbolic address on the RT, and those with certain symbolic
29366     address on the SPARC when compiling PIC).  Scratch registers need
29367     not have the same mode as the value being copied, and usually hold
29368     a different value than that being copied.  Special patterns in the
29369     md file are needed to describe how the copy is performed with the
29370     help of the scratch register; these patterns also describe the
29371     number, register class(es) and mode(s) of the scratch register(s).
29372
29373     In some cases, both an intermediate and a scratch register are
29374     required.
29375
29376     For input reloads, this target hook is called with nonzero IN_P,
29377     and X is an rtx that needs to be copied to a register of class
29378     RELOAD_CLASS in RELOAD_MODE.  For output reloads, this target hook
29379     is called with zero IN_P, and a register of class RELOAD_CLASS
29380     needs to be copied to rtx X in RELOAD_MODE.
29381
29382     If copying a register of RELOAD_CLASS from/to X requires an
29383     intermediate register, the hook `secondary_reload' should return
29384     the register class required for this intermediate register.  If no
29385     intermediate register is required, it should return NO_REGS.  If
29386     more than one intermediate register is required, describe the one
29387     that is closest in the copy chain to the reload register.
29388
29389     If scratch registers are needed, you also have to describe how to
29390     perform the copy from/to the reload register to/from this closest
29391     intermediate register.  Or if no intermediate register is
29392     required, but still a scratch register is needed, describe the
29393     copy  from/to the reload register to/from the reload operand X.
29394
29395     You do this by setting `sri->icode' to the instruction code of a
29396     pattern in the md file which performs the move.  Operands 0 and 1
29397     are the output and input of this copy, respectively.  Operands
29398     from operand 2 onward are for scratch operands.  These scratch
29399     operands must have a mode, and a single-register-class output
29400     constraint.
29401
29402     When an intermediate register is used, the `secondary_reload' hook
29403     will be called again to determine how to copy the intermediate
29404     register to/from the reload operand X, so your hook must also have
29405     code to handle the register class of the intermediate operand.
29406
29407     X might be a pseudo-register or a `subreg' of a pseudo-register,
29408     which could either be in a hard register or in memory.  Use
29409     `true_regnum' to find out; it will return -1 if the pseudo is in
29410     memory and the hard register number if it is in a register.
29411
29412     Scratch operands in memory (constraint `"=m"' / `"=&m"') are
29413     currently not supported.  For the time being, you will have to
29414     continue to use `SECONDARY_MEMORY_NEEDED' for that purpose.
29415
29416     `copy_cost' also uses this target hook to find out how values are
29417     copied.  If you want it to include some extra cost for the need to
29418     allocate (a) scratch register(s), set `sri->extra_cost' to the
29419     additional cost.  Or if two dependent moves are supposed to have a
29420     lower cost than the sum of the individual moves due to expected
29421     fortuitous scheduling and/or special forwarding logic, you can set
29422     `sri->extra_cost' to a negative amount.
29423
29424 -- Macro: SECONDARY_RELOAD_CLASS (CLASS, MODE, X)
29425 -- Macro: SECONDARY_INPUT_RELOAD_CLASS (CLASS, MODE, X)
29426 -- Macro: SECONDARY_OUTPUT_RELOAD_CLASS (CLASS, MODE, X)
29427     These macros are obsolete, new ports should use the target hook
29428     `TARGET_SECONDARY_RELOAD' instead.
29429
29430     These are obsolete macros, replaced by the
29431     `TARGET_SECONDARY_RELOAD' target hook.  Older ports still define
29432     these macros to indicate to the reload phase that it may need to
29433     allocate at least one register for a reload in addition to the
29434     register to contain the data.  Specifically, if copying X to a
29435     register CLASS in MODE requires an intermediate register, you were
29436     supposed to define `SECONDARY_INPUT_RELOAD_CLASS' to return the
29437     largest register class all of whose registers can be used as
29438     intermediate registers or scratch registers.
29439
29440     If copying a register CLASS in MODE to X requires an intermediate
29441     or scratch register, `SECONDARY_OUTPUT_RELOAD_CLASS' was supposed
29442     to be defined be defined to return the largest register class
29443     required.  If the requirements for input and output reloads were
29444     the same, the macro `SECONDARY_RELOAD_CLASS' should have been used
29445     instead of defining both macros identically.
29446
29447     The values returned by these macros are often `GENERAL_REGS'.
29448     Return `NO_REGS' if no spare register is needed; i.e., if X can be
29449     directly copied to or from a register of CLASS in MODE without
29450     requiring a scratch register.  Do not define this macro if it
29451     would always return `NO_REGS'.
29452
29453     If a scratch register is required (either with or without an
29454     intermediate register), you were supposed to define patterns for
29455     `reload_inM' or `reload_outM', as required (*note Standard
29456     Names::.  These patterns, which were normally implemented with a
29457     `define_expand', should be similar to the `movM' patterns, except
29458     that operand 2 is the scratch register.
29459
29460     These patterns need constraints for the reload register and scratch
29461     register that contain a single register class.  If the original
29462     reload register (whose class is CLASS) can meet the constraint
29463     given in the pattern, the value returned by these macros is used
29464     for the class of the scratch register.  Otherwise, two additional
29465     reload registers are required.  Their classes are obtained from
29466     the constraints in the insn pattern.
29467
29468     X might be a pseudo-register or a `subreg' of a pseudo-register,
29469     which could either be in a hard register or in memory.  Use
29470     `true_regnum' to find out; it will return -1 if the pseudo is in
29471     memory and the hard register number if it is in a register.
29472
29473     These macros should not be used in the case where a particular
29474     class of registers can only be copied to memory and not to another
29475     class of registers.  In that case, secondary reload registers are
29476     not needed and would not be helpful.  Instead, a stack location
29477     must be used to perform the copy and the `movM' pattern should use
29478     memory as an intermediate storage.  This case often occurs between
29479     floating-point and general registers.
29480
29481 -- Macro: SECONDARY_MEMORY_NEEDED (CLASS1, CLASS2, M)
29482     Certain machines have the property that some registers cannot be
29483     copied to some other registers without using memory.  Define this
29484     macro on those machines to be a C expression that is nonzero if
29485     objects of mode M in registers of CLASS1 can only be copied to
29486     registers of class CLASS2 by storing a register of CLASS1 into
29487     memory and loading that memory location into a register of CLASS2.
29488
29489     Do not define this macro if its value would always be zero.
29490
29491 -- Macro: SECONDARY_MEMORY_NEEDED_RTX (MODE)
29492     Normally when `SECONDARY_MEMORY_NEEDED' is defined, the compiler
29493     allocates a stack slot for a memory location needed for register
29494     copies.  If this macro is defined, the compiler instead uses the
29495     memory location defined by this macro.
29496
29497     Do not define this macro if you do not define
29498     `SECONDARY_MEMORY_NEEDED'.
29499
29500 -- Macro: SECONDARY_MEMORY_NEEDED_MODE (MODE)
29501     When the compiler needs a secondary memory location to copy
29502     between two registers of mode MODE, it normally allocates
29503     sufficient memory to hold a quantity of `BITS_PER_WORD' bits and
29504     performs the store and load operations in a mode that many bits
29505     wide and whose class is the same as that of MODE.
29506
29507     This is right thing to do on most machines because it ensures that
29508     all bits of the register are copied and prevents accesses to the
29509     registers in a narrower mode, which some machines prohibit for
29510     floating-point registers.
29511
29512     However, this default behavior is not correct on some machines,
29513     such as the DEC Alpha, that store short integers in floating-point
29514     registers differently than in integer registers.  On those
29515     machines, the default widening will not work correctly and you
29516     must define this macro to suppress that widening in some cases.
29517     See the file `alpha.h' for details.
29518
29519     Do not define this macro if you do not define
29520     `SECONDARY_MEMORY_NEEDED' or if widening MODE to a mode that is
29521     `BITS_PER_WORD' bits wide is correct for your machine.
29522
29523 -- Target Hook: bool TARGET_CLASS_LIKELY_SPILLED_P (reg_class_t RCLASS)
29524     A target hook which returns `true' if pseudos that have been
29525     assigned to registers of class RCLASS would likely be spilled
29526     because registers of RCLASS are needed for spill registers.
29527
29528     The default version of this target hook returns `true' if RCLASS
29529     has exactly one register and `false' otherwise.  On most machines,
29530     this default should be used.  For generally register-starved
29531     machines, such as i386, or machines with right register
29532     constraints, such as SH, this hook can be used to avoid excessive
29533     spilling.
29534
29535     This hook is also used by some of the global intra-procedural code
29536     transformations to throtle code motion, to avoid increasing
29537     register pressure.
29538
29539 -- Target Hook: unsigned char TARGET_CLASS_MAX_NREGS (reg_class_t
29540          RCLASS, enum machine_mode MODE)
29541     A target hook returns the maximum number of consecutive registers
29542     of class RCLASS needed to hold a value of mode MODE.
29543
29544     This is closely related to the macro `HARD_REGNO_NREGS'.  In fact,
29545     the value returned by `TARGET_CLASS_MAX_NREGS (RCLASS, MODE)'
29546     target hook should be the maximum value of `HARD_REGNO_NREGS
29547     (REGNO, MODE)' for all REGNO values in the class RCLASS.
29548
29549     This target hook helps control the handling of multiple-word values
29550     in the reload pass.
29551
29552     The default version of this target hook returns the size of MODE
29553     in words.
29554
29555 -- Macro: CLASS_MAX_NREGS (CLASS, MODE)
29556     A C expression for the maximum number of consecutive registers of
29557     class CLASS needed to hold a value of mode MODE.
29558
29559     This is closely related to the macro `HARD_REGNO_NREGS'.  In fact,
29560     the value of the macro `CLASS_MAX_NREGS (CLASS, MODE)' should be
29561     the maximum value of `HARD_REGNO_NREGS (REGNO, MODE)' for all
29562     REGNO values in the class CLASS.
29563
29564     This macro helps control the handling of multiple-word values in
29565     the reload pass.
29566
29567 -- Macro: CANNOT_CHANGE_MODE_CLASS (FROM, TO, CLASS)
29568     If defined, a C expression that returns nonzero for a CLASS for
29569     which a change from mode FROM to mode TO is invalid.
29570
29571     For the example, loading 32-bit integer or floating-point objects
29572     into floating-point registers on the Alpha extends them to 64 bits.
29573     Therefore loading a 64-bit object and then storing it as a 32-bit
29574     object does not store the low-order 32 bits, as would be the case
29575     for a normal register.  Therefore, `alpha.h' defines
29576     `CANNOT_CHANGE_MODE_CLASS' as below:
29577
29578          #define CANNOT_CHANGE_MODE_CLASS(FROM, TO, CLASS) \
29579            (GET_MODE_SIZE (FROM) != GET_MODE_SIZE (TO) \
29580             ? reg_classes_intersect_p (FLOAT_REGS, (CLASS)) : 0)
29581
29582 -- Target Hook: bool TARGET_LRA_P (void)
29583     A target hook which returns true if we use LRA instead of reload
29584     pass.  It means that LRA was ported to the target.    The default
29585     version of this target hook returns always false.
29586
29587 -- Target Hook: int TARGET_REGISTER_PRIORITY (int)
29588     A target hook which returns the register priority number to which
29589     the  register HARD_REGNO belongs to.  The bigger the number, the
29590     more preferable the hard register usage (when all other conditions
29591     are  the same).  This hook can be used to prefer some hard
29592     register over  others in LRA.  For example, some x86-64 register
29593     usage needs  additional prefix which makes instructions longer.
29594     The hook can  return lower priority number for such registers make
29595     them less favorable  and as result making the generated code
29596     smaller.    The default version of this target hook returns always
29597     zero.
29598
29599 -- Target Hook: bool TARGET_DIFFERENT_ADDR_DISPLACEMENT_P (void)
29600     A target hook which returns true if an address with the same
29601     structure  can have different maximal legitimate displacement.
29602     For example, the  displacement can depend on memory mode or on
29603     operand combinations in  the insn.    The default version of this
29604     target hook returns always false.
29605
29606 -- Target Hook: reg_class_t TARGET_SPILL_CLASS (reg_class_t, enum
29607          MACHINE_MODE)
29608     This hook defines a class of registers which could be used for
29609     spilling  pseudos of the given mode and class, or `NO_REGS' if
29610     only memory  should be used.  Not defining this hook is equivalent
29611     to returning  `NO_REGS' for all inputs.
29612
29613
29614File: gccint.info,  Node: Old Constraints,  Next: Stack and Calling,  Prev: Register Classes,  Up: Target Macros
29615
2961617.9 Obsolete Macros for Defining Constraints
29617=============================================
29618
29619Machine-specific constraints can be defined with these macros instead
29620of the machine description constructs described in *note Define
29621Constraints::.  This mechanism is obsolete.  New ports should not use
29622it; old ports should convert to the new mechanism.
29623
29624 -- Macro: CONSTRAINT_LEN (CHAR, STR)
29625     For the constraint at the start of STR, which starts with the
29626     letter C, return the length.  This allows you to have register
29627     class / constant / extra constraints that are longer than a single
29628     letter; you don't need to define this macro if you can do with
29629     single-letter constraints only.  The definition of this macro
29630     should use DEFAULT_CONSTRAINT_LEN for all the characters that you
29631     don't want to handle specially.  There are some sanity checks in
29632     genoutput.c that check the constraint lengths for the md file, so
29633     you can also use this macro to help you while you are
29634     transitioning from a byzantine single-letter-constraint scheme:
29635     when you return a negative length for a constraint you want to
29636     re-use, genoutput will complain about every instance where it is
29637     used in the md file.
29638
29639 -- Macro: REG_CLASS_FROM_LETTER (CHAR)
29640     A C expression which defines the machine-dependent operand
29641     constraint letters for register classes.  If CHAR is such a
29642     letter, the value should be the register class corresponding to
29643     it.  Otherwise, the value should be `NO_REGS'.  The register
29644     letter `r', corresponding to class `GENERAL_REGS', will not be
29645     passed to this macro; you do not need to handle it.
29646
29647 -- Macro: REG_CLASS_FROM_CONSTRAINT (CHAR, STR)
29648     Like `REG_CLASS_FROM_LETTER', but you also get the constraint
29649     string passed in STR, so that you can use suffixes to distinguish
29650     between different variants.
29651
29652 -- Macro: CONST_OK_FOR_LETTER_P (VALUE, C)
29653     A C expression that defines the machine-dependent operand
29654     constraint letters (`I', `J', `K', ... `P') that specify
29655     particular ranges of integer values.  If C is one of those
29656     letters, the expression should check that VALUE, an integer, is in
29657     the appropriate range and return 1 if so, 0 otherwise.  If C is
29658     not one of those letters, the value should be 0 regardless of
29659     VALUE.
29660
29661 -- Macro: CONST_OK_FOR_CONSTRAINT_P (VALUE, C, STR)
29662     Like `CONST_OK_FOR_LETTER_P', but you also get the constraint
29663     string passed in STR, so that you can use suffixes to distinguish
29664     between different variants.
29665
29666 -- Macro: CONST_DOUBLE_OK_FOR_LETTER_P (VALUE, C)
29667     A C expression that defines the machine-dependent operand
29668     constraint letters that specify particular ranges of
29669     `const_double' values (`G' or `H').
29670
29671     If C is one of those letters, the expression should check that
29672     VALUE, an RTX of code `const_double', is in the appropriate range
29673     and return 1 if so, 0 otherwise.  If C is not one of those
29674     letters, the value should be 0 regardless of VALUE.
29675
29676     `const_double' is used for all floating-point constants and for
29677     `DImode' fixed-point constants.  A given letter can accept either
29678     or both kinds of values.  It can use `GET_MODE' to distinguish
29679     between these kinds.
29680
29681 -- Macro: CONST_DOUBLE_OK_FOR_CONSTRAINT_P (VALUE, C, STR)
29682     Like `CONST_DOUBLE_OK_FOR_LETTER_P', but you also get the
29683     constraint string passed in STR, so that you can use suffixes to
29684     distinguish between different variants.
29685
29686 -- Macro: EXTRA_CONSTRAINT (VALUE, C)
29687     A C expression that defines the optional machine-dependent
29688     constraint letters that can be used to segregate specific types of
29689     operands, usually memory references, for the target machine.  Any
29690     letter that is not elsewhere defined and not matched by
29691     `REG_CLASS_FROM_LETTER' / `REG_CLASS_FROM_CONSTRAINT' may be used.
29692     Normally this macro will not be defined.
29693
29694     If it is required for a particular target machine, it should
29695     return 1 if VALUE corresponds to the operand type represented by
29696     the constraint letter C.  If C is not defined as an extra
29697     constraint, the value returned should be 0 regardless of VALUE.
29698
29699     For example, on the ROMP, load instructions cannot have their
29700     output in r0 if the memory reference contains a symbolic address.
29701     Constraint letter `Q' is defined as representing a memory address
29702     that does _not_ contain a symbolic address.  An alternative is
29703     specified with a `Q' constraint on the input and `r' on the
29704     output.  The next alternative specifies `m' on the input and a
29705     register class that does not include r0 on the output.
29706
29707 -- Macro: EXTRA_CONSTRAINT_STR (VALUE, C, STR)
29708     Like `EXTRA_CONSTRAINT', but you also get the constraint string
29709     passed in STR, so that you can use suffixes to distinguish between
29710     different variants.
29711
29712 -- Macro: EXTRA_MEMORY_CONSTRAINT (C, STR)
29713     A C expression that defines the optional machine-dependent
29714     constraint letters, amongst those accepted by `EXTRA_CONSTRAINT',
29715     that should be treated like memory constraints by the reload pass.
29716
29717     It should return 1 if the operand type represented by the
29718     constraint at the start of STR, the first letter of which is the
29719     letter C, comprises a subset of all memory references including
29720     all those whose address is simply a base register.  This allows
29721     the reload pass to reload an operand, if it does not directly
29722     correspond to the operand type of C, by copying its address into a
29723     base register.
29724
29725     For example, on the S/390, some instructions do not accept
29726     arbitrary memory references, but only those that do not make use
29727     of an index register.  The constraint letter `Q' is defined via
29728     `EXTRA_CONSTRAINT' as representing a memory address of this type.
29729     If the letter `Q' is marked as `EXTRA_MEMORY_CONSTRAINT', a `Q'
29730     constraint can handle any memory operand, because the reload pass
29731     knows it can be reloaded by copying the memory address into a base
29732     register if required.  This is analogous to the way an `o'
29733     constraint can handle any memory operand.
29734
29735 -- Macro: EXTRA_ADDRESS_CONSTRAINT (C, STR)
29736     A C expression that defines the optional machine-dependent
29737     constraint letters, amongst those accepted by `EXTRA_CONSTRAINT' /
29738     `EXTRA_CONSTRAINT_STR', that should be treated like address
29739     constraints by the reload pass.
29740
29741     It should return 1 if the operand type represented by the
29742     constraint at the start of STR, which starts with the letter C,
29743     comprises a subset of all memory addresses including all those
29744     that consist of just a base register.  This allows the reload pass
29745     to reload an operand, if it does not directly correspond to the
29746     operand type of STR, by copying it into a base register.
29747
29748     Any constraint marked as `EXTRA_ADDRESS_CONSTRAINT' can only be
29749     used with the `address_operand' predicate.  It is treated
29750     analogously to the `p' constraint.
29751
29752
29753File: gccint.info,  Node: Stack and Calling,  Next: Varargs,  Prev: Old Constraints,  Up: Target Macros
29754
2975517.10 Stack Layout and Calling Conventions
29756==========================================
29757
29758This describes the stack layout and calling conventions.
29759
29760* Menu:
29761
29762* Frame Layout::
29763* Exception Handling::
29764* Stack Checking::
29765* Frame Registers::
29766* Elimination::
29767* Stack Arguments::
29768* Register Arguments::
29769* Scalar Return::
29770* Aggregate Return::
29771* Caller Saves::
29772* Function Entry::
29773* Profiling::
29774* Tail Calls::
29775* Stack Smashing Protection::
29776
29777
29778File: gccint.info,  Node: Frame Layout,  Next: Exception Handling,  Up: Stack and Calling
29779
2978017.10.1 Basic Stack Layout
29781--------------------------
29782
29783Here is the basic stack layout.
29784
29785 -- Macro: STACK_GROWS_DOWNWARD
29786     Define this macro if pushing a word onto the stack moves the stack
29787     pointer to a smaller address.
29788
29789     When we say, "define this macro if ...", it means that the
29790     compiler checks this macro only with `#ifdef' so the precise
29791     definition used does not matter.
29792
29793 -- Macro: STACK_PUSH_CODE
29794     This macro defines the operation used when something is pushed on
29795     the stack.  In RTL, a push operation will be `(set (mem
29796     (STACK_PUSH_CODE (reg sp))) ...)'
29797
29798     The choices are `PRE_DEC', `POST_DEC', `PRE_INC', and `POST_INC'.
29799     Which of these is correct depends on the stack direction and on
29800     whether the stack pointer points to the last item on the stack or
29801     whether it points to the space for the next item on the stack.
29802
29803     The default is `PRE_DEC' when `STACK_GROWS_DOWNWARD' is defined,
29804     which is almost always right, and `PRE_INC' otherwise, which is
29805     often wrong.
29806
29807 -- Macro: FRAME_GROWS_DOWNWARD
29808     Define this macro to nonzero value if the addresses of local
29809     variable slots are at negative offsets from the frame pointer.
29810
29811 -- Macro: ARGS_GROW_DOWNWARD
29812     Define this macro if successive arguments to a function occupy
29813     decreasing addresses on the stack.
29814
29815 -- Macro: STARTING_FRAME_OFFSET
29816     Offset from the frame pointer to the first local variable slot to
29817     be allocated.
29818
29819     If `FRAME_GROWS_DOWNWARD', find the next slot's offset by
29820     subtracting the first slot's length from `STARTING_FRAME_OFFSET'.
29821     Otherwise, it is found by adding the length of the first slot to
29822     the value `STARTING_FRAME_OFFSET'.
29823
29824 -- Macro: STACK_ALIGNMENT_NEEDED
29825     Define to zero to disable final alignment of the stack during
29826     reload.  The nonzero default for this macro is suitable for most
29827     ports.
29828
29829     On ports where `STARTING_FRAME_OFFSET' is nonzero or where there
29830     is a register save block following the local block that doesn't
29831     require alignment to `STACK_BOUNDARY', it may be beneficial to
29832     disable stack alignment and do it in the backend.
29833
29834 -- Macro: STACK_POINTER_OFFSET
29835     Offset from the stack pointer register to the first location at
29836     which outgoing arguments are placed.  If not specified, the
29837     default value of zero is used.  This is the proper value for most
29838     machines.
29839
29840     If `ARGS_GROW_DOWNWARD', this is the offset to the location above
29841     the first location at which outgoing arguments are placed.
29842
29843 -- Macro: FIRST_PARM_OFFSET (FUNDECL)
29844     Offset from the argument pointer register to the first argument's
29845     address.  On some machines it may depend on the data type of the
29846     function.
29847
29848     If `ARGS_GROW_DOWNWARD', this is the offset to the location above
29849     the first argument's address.
29850
29851 -- Macro: STACK_DYNAMIC_OFFSET (FUNDECL)
29852     Offset from the stack pointer register to an item dynamically
29853     allocated on the stack, e.g., by `alloca'.
29854
29855     The default value for this macro is `STACK_POINTER_OFFSET' plus the
29856     length of the outgoing arguments.  The default is correct for most
29857     machines.  See `function.c' for details.
29858
29859 -- Macro: INITIAL_FRAME_ADDRESS_RTX
29860     A C expression whose value is RTL representing the address of the
29861     initial stack frame. This address is passed to `RETURN_ADDR_RTX'
29862     and `DYNAMIC_CHAIN_ADDRESS'.  If you don't define this macro, a
29863     reasonable default value will be used.  Define this macro in order
29864     to make frame pointer elimination work in the presence of
29865     `__builtin_frame_address (count)' and `__builtin_return_address
29866     (count)' for `count' not equal to zero.
29867
29868 -- Macro: DYNAMIC_CHAIN_ADDRESS (FRAMEADDR)
29869     A C expression whose value is RTL representing the address in a
29870     stack frame where the pointer to the caller's frame is stored.
29871     Assume that FRAMEADDR is an RTL expression for the address of the
29872     stack frame itself.
29873
29874     If you don't define this macro, the default is to return the value
29875     of FRAMEADDR--that is, the stack frame address is also the address
29876     of the stack word that points to the previous frame.
29877
29878 -- Macro: SETUP_FRAME_ADDRESSES
29879     If defined, a C expression that produces the machine-specific code
29880     to setup the stack so that arbitrary frames can be accessed.  For
29881     example, on the SPARC, we must flush all of the register windows
29882     to the stack before we can access arbitrary stack frames.  You
29883     will seldom need to define this macro.
29884
29885 -- Target Hook: rtx TARGET_BUILTIN_SETJMP_FRAME_VALUE (void)
29886     This target hook should return an rtx that is used to store the
29887     address of the current frame into the built in `setjmp' buffer.
29888     The default value, `virtual_stack_vars_rtx', is correct for most
29889     machines.  One reason you may need to define this target hook is if
29890     `hard_frame_pointer_rtx' is the appropriate value on your machine.
29891
29892 -- Macro: FRAME_ADDR_RTX (FRAMEADDR)
29893     A C expression whose value is RTL representing the value of the
29894     frame address for the current frame.  FRAMEADDR is the frame
29895     pointer of the current frame.  This is used for
29896     __builtin_frame_address.  You need only define this macro if the
29897     frame address is not the same as the frame pointer.  Most machines
29898     do not need to define it.
29899
29900 -- Macro: RETURN_ADDR_RTX (COUNT, FRAMEADDR)
29901     A C expression whose value is RTL representing the value of the
29902     return address for the frame COUNT steps up from the current
29903     frame, after the prologue.  FRAMEADDR is the frame pointer of the
29904     COUNT frame, or the frame pointer of the COUNT - 1 frame if
29905     `RETURN_ADDR_IN_PREVIOUS_FRAME' is defined.
29906
29907     The value of the expression must always be the correct address when
29908     COUNT is zero, but may be `NULL_RTX' if there is no way to
29909     determine the return address of other frames.
29910
29911 -- Macro: RETURN_ADDR_IN_PREVIOUS_FRAME
29912     Define this if the return address of a particular stack frame is
29913     accessed from the frame pointer of the previous stack frame.
29914
29915 -- Macro: INCOMING_RETURN_ADDR_RTX
29916     A C expression whose value is RTL representing the location of the
29917     incoming return address at the beginning of any function, before
29918     the prologue.  This RTL is either a `REG', indicating that the
29919     return value is saved in `REG', or a `MEM' representing a location
29920     in the stack.
29921
29922     You only need to define this macro if you want to support call
29923     frame debugging information like that provided by DWARF 2.
29924
29925     If this RTL is a `REG', you should also define
29926     `DWARF_FRAME_RETURN_COLUMN' to `DWARF_FRAME_REGNUM (REGNO)'.
29927
29928 -- Macro: DWARF_ALT_FRAME_RETURN_COLUMN
29929     A C expression whose value is an integer giving a DWARF 2 column
29930     number that may be used as an alternative return column.  The
29931     column must not correspond to any gcc hard register (that is, it
29932     must not be in the range of `DWARF_FRAME_REGNUM').
29933
29934     This macro can be useful if `DWARF_FRAME_RETURN_COLUMN' is set to a
29935     general register, but an alternative column needs to be used for
29936     signal frames.  Some targets have also used different frame return
29937     columns over time.
29938
29939 -- Macro: DWARF_ZERO_REG
29940     A C expression whose value is an integer giving a DWARF 2 register
29941     number that is considered to always have the value zero.  This
29942     should only be defined if the target has an architected zero
29943     register, and someone decided it was a good idea to use that
29944     register number to terminate the stack backtrace.  New ports
29945     should avoid this.
29946
29947 -- Target Hook: void TARGET_DWARF_HANDLE_FRAME_UNSPEC (const char
29948          *LABEL, rtx PATTERN, int INDEX)
29949     This target hook allows the backend to emit frame-related insns
29950     that contain UNSPECs or UNSPEC_VOLATILEs.  The DWARF 2 call frame
29951     debugging info engine will invoke it on insns of the form
29952          (set (reg) (unspec [...] UNSPEC_INDEX))
29953     and
29954          (set (reg) (unspec_volatile [...] UNSPECV_INDEX)).
29955     to let the backend emit the call frame instructions.  LABEL is the
29956     CFI label attached to the insn, PATTERN is the pattern of the insn
29957     and INDEX is `UNSPEC_INDEX' or `UNSPECV_INDEX'.
29958
29959 -- Macro: INCOMING_FRAME_SP_OFFSET
29960     A C expression whose value is an integer giving the offset, in
29961     bytes, from the value of the stack pointer register to the top of
29962     the stack frame at the beginning of any function, before the
29963     prologue.  The top of the frame is defined to be the value of the
29964     stack pointer in the previous frame, just before the call
29965     instruction.
29966
29967     You only need to define this macro if you want to support call
29968     frame debugging information like that provided by DWARF 2.
29969
29970 -- Macro: ARG_POINTER_CFA_OFFSET (FUNDECL)
29971     A C expression whose value is an integer giving the offset, in
29972     bytes, from the argument pointer to the canonical frame address
29973     (cfa).  The final value should coincide with that calculated by
29974     `INCOMING_FRAME_SP_OFFSET'.  Which is unfortunately not usable
29975     during virtual register instantiation.
29976
29977     The default value for this macro is `FIRST_PARM_OFFSET (fundecl) +
29978     crtl->args.pretend_args_size', which is correct for most machines;
29979     in general, the arguments are found immediately before the stack
29980     frame.  Note that this is not the case on some targets that save
29981     registers into the caller's frame, such as SPARC and rs6000, and
29982     so such targets need to define this macro.
29983
29984     You only need to define this macro if the default is incorrect,
29985     and you want to support call frame debugging information like that
29986     provided by DWARF 2.
29987
29988 -- Macro: FRAME_POINTER_CFA_OFFSET (FUNDECL)
29989     If defined, a C expression whose value is an integer giving the
29990     offset in bytes from the frame pointer to the canonical frame
29991     address (cfa).  The final value should coincide with that
29992     calculated by `INCOMING_FRAME_SP_OFFSET'.
29993
29994     Normally the CFA is calculated as an offset from the argument
29995     pointer, via `ARG_POINTER_CFA_OFFSET', but if the argument pointer
29996     is variable due to the ABI, this may not be possible.  If this
29997     macro is defined, it implies that the virtual register
29998     instantiation should be based on the frame pointer instead of the
29999     argument pointer.  Only one of `FRAME_POINTER_CFA_OFFSET' and
30000     `ARG_POINTER_CFA_OFFSET' should be defined.
30001
30002 -- Macro: CFA_FRAME_BASE_OFFSET (FUNDECL)
30003     If defined, a C expression whose value is an integer giving the
30004     offset in bytes from the canonical frame address (cfa) to the
30005     frame base used in DWARF 2 debug information.  The default is
30006     zero.  A different value may reduce the size of debug information
30007     on some ports.
30008
30009
30010File: gccint.info,  Node: Exception Handling,  Next: Stack Checking,  Prev: Frame Layout,  Up: Stack and Calling
30011
3001217.10.2 Exception Handling Support
30013----------------------------------
30014
30015 -- Macro: EH_RETURN_DATA_REGNO (N)
30016     A C expression whose value is the Nth register number used for
30017     data by exception handlers, or `INVALID_REGNUM' if fewer than N
30018     registers are usable.
30019
30020     The exception handling library routines communicate with the
30021     exception handlers via a set of agreed upon registers.  Ideally
30022     these registers should be call-clobbered; it is possible to use
30023     call-saved registers, but may negatively impact code size.  The
30024     target must support at least 2 data registers, but should define 4
30025     if there are enough free registers.
30026
30027     You must define this macro if you want to support call frame
30028     exception handling like that provided by DWARF 2.
30029
30030 -- Macro: EH_RETURN_STACKADJ_RTX
30031     A C expression whose value is RTL representing a location in which
30032     to store a stack adjustment to be applied before function return.
30033     This is used to unwind the stack to an exception handler's call
30034     frame.  It will be assigned zero on code paths that return
30035     normally.
30036
30037     Typically this is a call-clobbered hard register that is otherwise
30038     untouched by the epilogue, but could also be a stack slot.
30039
30040     Do not define this macro if the stack pointer is saved and restored
30041     by the regular prolog and epilog code in the call frame itself; in
30042     this case, the exception handling library routines will update the
30043     stack location to be restored in place.  Otherwise, you must define
30044     this macro if you want to support call frame exception handling
30045     like that provided by DWARF 2.
30046
30047 -- Macro: EH_RETURN_HANDLER_RTX
30048     A C expression whose value is RTL representing a location in which
30049     to store the address of an exception handler to which we should
30050     return.  It will not be assigned on code paths that return
30051     normally.
30052
30053     Typically this is the location in the call frame at which the
30054     normal return address is stored.  For targets that return by
30055     popping an address off the stack, this might be a memory address
30056     just below the _target_ call frame rather than inside the current
30057     call frame.  If defined, `EH_RETURN_STACKADJ_RTX' will have already
30058     been assigned, so it may be used to calculate the location of the
30059     target call frame.
30060
30061     Some targets have more complex requirements than storing to an
30062     address calculable during initial code generation.  In that case
30063     the `eh_return' instruction pattern should be used instead.
30064
30065     If you want to support call frame exception handling, you must
30066     define either this macro or the `eh_return' instruction pattern.
30067
30068 -- Macro: RETURN_ADDR_OFFSET
30069     If defined, an integer-valued C expression for which rtl will be
30070     generated to add it to the exception handler address before it is
30071     searched in the exception handling tables, and to subtract it
30072     again from the address before using it to return to the exception
30073     handler.
30074
30075 -- Macro: ASM_PREFERRED_EH_DATA_FORMAT (CODE, GLOBAL)
30076     This macro chooses the encoding of pointers embedded in the
30077     exception handling sections.  If at all possible, this should be
30078     defined such that the exception handling section will not require
30079     dynamic relocations, and so may be read-only.
30080
30081     CODE is 0 for data, 1 for code labels, 2 for function pointers.
30082     GLOBAL is true if the symbol may be affected by dynamic
30083     relocations.  The macro should return a combination of the
30084     `DW_EH_PE_*' defines as found in `dwarf2.h'.
30085
30086     If this macro is not defined, pointers will not be encoded but
30087     represented directly.
30088
30089 -- Macro: ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX (FILE, ENCODING, SIZE,
30090          ADDR, DONE)
30091     This macro allows the target to emit whatever special magic is
30092     required to represent the encoding chosen by
30093     `ASM_PREFERRED_EH_DATA_FORMAT'.  Generic code takes care of
30094     pc-relative and indirect encodings; this must be defined if the
30095     target uses text-relative or data-relative encodings.
30096
30097     This is a C statement that branches to DONE if the format was
30098     handled.  ENCODING is the format chosen, SIZE is the number of
30099     bytes that the format occupies, ADDR is the `SYMBOL_REF' to be
30100     emitted.
30101
30102 -- Macro: MD_FALLBACK_FRAME_STATE_FOR (CONTEXT, FS)
30103     This macro allows the target to add CPU and operating system
30104     specific code to the call-frame unwinder for use when there is no
30105     unwind data available.  The most common reason to implement this
30106     macro is to unwind through signal frames.
30107
30108     This macro is called from `uw_frame_state_for' in `unwind-dw2.c',
30109     `unwind-dw2-xtensa.c' and `unwind-ia64.c'.  CONTEXT is an
30110     `_Unwind_Context'; FS is an `_Unwind_FrameState'.  Examine
30111     `context->ra' for the address of the code being executed and
30112     `context->cfa' for the stack pointer value.  If the frame can be
30113     decoded, the register save addresses should be updated in FS and
30114     the macro should evaluate to `_URC_NO_REASON'.  If the frame
30115     cannot be decoded, the macro should evaluate to
30116     `_URC_END_OF_STACK'.
30117
30118     For proper signal handling in Java this macro is accompanied by
30119     `MAKE_THROW_FRAME', defined in `libjava/include/*-signal.h'
30120     headers.
30121
30122 -- Macro: MD_HANDLE_UNWABI (CONTEXT, FS)
30123     This macro allows the target to add operating system specific code
30124     to the call-frame unwinder to handle the IA-64 `.unwabi' unwinding
30125     directive, usually used for signal or interrupt frames.
30126
30127     This macro is called from `uw_update_context' in libgcc's
30128     `unwind-ia64.c'.  CONTEXT is an `_Unwind_Context'; FS is an
30129     `_Unwind_FrameState'.  Examine `fs->unwabi' for the abi and
30130     context in the `.unwabi' directive.  If the `.unwabi' directive
30131     can be handled, the register save addresses should be updated in
30132     FS.
30133
30134 -- Macro: TARGET_USES_WEAK_UNWIND_INFO
30135     A C expression that evaluates to true if the target requires unwind
30136     info to be given comdat linkage.  Define it to be `1' if comdat
30137     linkage is necessary.  The default is `0'.
30138
30139
30140File: gccint.info,  Node: Stack Checking,  Next: Frame Registers,  Prev: Exception Handling,  Up: Stack and Calling
30141
3014217.10.3 Specifying How Stack Checking is Done
30143---------------------------------------------
30144
30145GCC will check that stack references are within the boundaries of the
30146stack, if the option `-fstack-check' is specified, in one of three ways:
30147
30148  1. If the value of the `STACK_CHECK_BUILTIN' macro is nonzero, GCC
30149     will assume that you have arranged for full stack checking to be
30150     done at appropriate places in the configuration files.  GCC will
30151     not do other special processing.
30152
30153  2. If `STACK_CHECK_BUILTIN' is zero and the value of the
30154     `STACK_CHECK_STATIC_BUILTIN' macro is nonzero, GCC will assume
30155     that you have arranged for static stack checking (checking of the
30156     static stack frame of functions) to be done at appropriate places
30157     in the configuration files.  GCC will only emit code to do dynamic
30158     stack checking (checking on dynamic stack allocations) using the
30159     third approach below.
30160
30161  3. If neither of the above are true, GCC will generate code to
30162     periodically "probe" the stack pointer using the values of the
30163     macros defined below.
30164
30165 If neither STACK_CHECK_BUILTIN nor STACK_CHECK_STATIC_BUILTIN is
30166defined, GCC will change its allocation strategy for large objects if
30167the option `-fstack-check' is specified: they will always be allocated
30168dynamically if their size exceeds `STACK_CHECK_MAX_VAR_SIZE' bytes.
30169
30170 -- Macro: STACK_CHECK_BUILTIN
30171     A nonzero value if stack checking is done by the configuration
30172     files in a machine-dependent manner.  You should define this macro
30173     if stack checking is required by the ABI of your machine or if you
30174     would like to do stack checking in some more efficient way than
30175     the generic approach.  The default value of this macro is zero.
30176
30177 -- Macro: STACK_CHECK_STATIC_BUILTIN
30178     A nonzero value if static stack checking is done by the
30179     configuration files in a machine-dependent manner.  You should
30180     define this macro if you would like to do static stack checking in
30181     some more efficient way than the generic approach.  The default
30182     value of this macro is zero.
30183
30184 -- Macro: STACK_CHECK_PROBE_INTERVAL_EXP
30185     An integer specifying the interval at which GCC must generate
30186     stack probe instructions, defined as 2 raised to this integer.
30187     You will normally define this macro so that the interval be no
30188     larger than the size of the "guard pages" at the end of a stack
30189     area.  The default value of 12 (4096-byte interval) is suitable
30190     for most systems.
30191
30192 -- Macro: STACK_CHECK_MOVING_SP
30193     An integer which is nonzero if GCC should move the stack pointer
30194     page by page when doing probes.  This can be necessary on systems
30195     where the stack pointer contains the bottom address of the memory
30196     area accessible to the executing thread at any point in time.  In
30197     this situation an alternate signal stack is required in order to
30198     be able to recover from a stack overflow.  The default value of
30199     this macro is zero.
30200
30201 -- Macro: STACK_CHECK_PROTECT
30202     The number of bytes of stack needed to recover from a stack
30203     overflow, for languages where such a recovery is supported.  The
30204     default value of 75 words with the `setjmp'/`longjmp'-based
30205     exception handling mechanism and 8192 bytes with other exception
30206     handling mechanisms should be adequate for most machines.
30207
30208 The following macros are relevant only if neither STACK_CHECK_BUILTIN
30209nor STACK_CHECK_STATIC_BUILTIN is defined; you can omit them altogether
30210in the opposite case.
30211
30212 -- Macro: STACK_CHECK_MAX_FRAME_SIZE
30213     The maximum size of a stack frame, in bytes.  GCC will generate
30214     probe instructions in non-leaf functions to ensure at least this
30215     many bytes of stack are available.  If a stack frame is larger
30216     than this size, stack checking will not be reliable and GCC will
30217     issue a warning.  The default is chosen so that GCC only generates
30218     one instruction on most systems.  You should normally not change
30219     the default value of this macro.
30220
30221 -- Macro: STACK_CHECK_FIXED_FRAME_SIZE
30222     GCC uses this value to generate the above warning message.  It
30223     represents the amount of fixed frame used by a function, not
30224     including space for any callee-saved registers, temporaries and
30225     user variables.  You need only specify an upper bound for this
30226     amount and will normally use the default of four words.
30227
30228 -- Macro: STACK_CHECK_MAX_VAR_SIZE
30229     The maximum size, in bytes, of an object that GCC will place in the
30230     fixed area of the stack frame when the user specifies
30231     `-fstack-check'.  GCC computed the default from the values of the
30232     above macros and you will normally not need to override that
30233     default.
30234
30235
30236File: gccint.info,  Node: Frame Registers,  Next: Elimination,  Prev: Stack Checking,  Up: Stack and Calling
30237
3023817.10.4 Registers That Address the Stack Frame
30239----------------------------------------------
30240
30241This discusses registers that address the stack frame.
30242
30243 -- Macro: STACK_POINTER_REGNUM
30244     The register number of the stack pointer register, which must also
30245     be a fixed register according to `FIXED_REGISTERS'.  On most
30246     machines, the hardware determines which register this is.
30247
30248 -- Macro: FRAME_POINTER_REGNUM
30249     The register number of the frame pointer register, which is used to
30250     access automatic variables in the stack frame.  On some machines,
30251     the hardware determines which register this is.  On other
30252     machines, you can choose any register you wish for this purpose.
30253
30254 -- Macro: HARD_FRAME_POINTER_REGNUM
30255     On some machines the offset between the frame pointer and starting
30256     offset of the automatic variables is not known until after register
30257     allocation has been done (for example, because the saved registers
30258     are between these two locations).  On those machines, define
30259     `FRAME_POINTER_REGNUM' the number of a special, fixed register to
30260     be used internally until the offset is known, and define
30261     `HARD_FRAME_POINTER_REGNUM' to be the actual hard register number
30262     used for the frame pointer.
30263
30264     You should define this macro only in the very rare circumstances
30265     when it is not possible to calculate the offset between the frame
30266     pointer and the automatic variables until after register
30267     allocation has been completed.  When this macro is defined, you
30268     must also indicate in your definition of `ELIMINABLE_REGS' how to
30269     eliminate `FRAME_POINTER_REGNUM' into either
30270     `HARD_FRAME_POINTER_REGNUM' or `STACK_POINTER_REGNUM'.
30271
30272     Do not define this macro if it would be the same as
30273     `FRAME_POINTER_REGNUM'.
30274
30275 -- Macro: ARG_POINTER_REGNUM
30276     The register number of the arg pointer register, which is used to
30277     access the function's argument list.  On some machines, this is
30278     the same as the frame pointer register.  On some machines, the
30279     hardware determines which register this is.  On other machines,
30280     you can choose any register you wish for this purpose.  If this is
30281     not the same register as the frame pointer register, then you must
30282     mark it as a fixed register according to `FIXED_REGISTERS', or
30283     arrange to be able to eliminate it (*note Elimination::).
30284
30285 -- Macro: HARD_FRAME_POINTER_IS_FRAME_POINTER
30286     Define this to a preprocessor constant that is nonzero if
30287     `hard_frame_pointer_rtx' and `frame_pointer_rtx' should be the
30288     same.  The default definition is `(HARD_FRAME_POINTER_REGNUM ==
30289     FRAME_POINTER_REGNUM)'; you only need to define this macro if that
30290     definition is not suitable for use in preprocessor conditionals.
30291
30292 -- Macro: HARD_FRAME_POINTER_IS_ARG_POINTER
30293     Define this to a preprocessor constant that is nonzero if
30294     `hard_frame_pointer_rtx' and `arg_pointer_rtx' should be the same.
30295     The default definition is `(HARD_FRAME_POINTER_REGNUM ==
30296     ARG_POINTER_REGNUM)'; you only need to define this macro if that
30297     definition is not suitable for use in preprocessor conditionals.
30298
30299 -- Macro: RETURN_ADDRESS_POINTER_REGNUM
30300     The register number of the return address pointer register, which
30301     is used to access the current function's return address from the
30302     stack.  On some machines, the return address is not at a fixed
30303     offset from the frame pointer or stack pointer or argument
30304     pointer.  This register can be defined to point to the return
30305     address on the stack, and then be converted by `ELIMINABLE_REGS'
30306     into either the frame pointer or stack pointer.
30307
30308     Do not define this macro unless there is no other way to get the
30309     return address from the stack.
30310
30311 -- Macro: STATIC_CHAIN_REGNUM
30312 -- Macro: STATIC_CHAIN_INCOMING_REGNUM
30313     Register numbers used for passing a function's static chain
30314     pointer.  If register windows are used, the register number as
30315     seen by the called function is `STATIC_CHAIN_INCOMING_REGNUM',
30316     while the register number as seen by the calling function is
30317     `STATIC_CHAIN_REGNUM'.  If these registers are the same,
30318     `STATIC_CHAIN_INCOMING_REGNUM' need not be defined.
30319
30320     The static chain register need not be a fixed register.
30321
30322     If the static chain is passed in memory, these macros should not be
30323     defined; instead, the `TARGET_STATIC_CHAIN' hook should be used.
30324
30325 -- Target Hook: rtx TARGET_STATIC_CHAIN (const_tree FNDECL, bool
30326          INCOMING_P)
30327     This hook replaces the use of `STATIC_CHAIN_REGNUM' et al for
30328     targets that may use different static chain locations for different
30329     nested functions.  This may be required if the target has function
30330     attributes that affect the calling conventions of the function and
30331     those calling conventions use different static chain locations.
30332
30333     The default version of this hook uses `STATIC_CHAIN_REGNUM' et al.
30334
30335     If the static chain is passed in memory, this hook should be used
30336     to provide rtx giving `mem' expressions that denote where they are
30337     stored.  Often the `mem' expression as seen by the caller will be
30338     at an offset from the stack pointer and the `mem' expression as
30339     seen by the callee will be at an offset from the frame pointer.  The
30340     variables `stack_pointer_rtx', `frame_pointer_rtx', and
30341     `arg_pointer_rtx' will have been initialized and should be used to
30342     refer to those items.
30343
30344 -- Macro: DWARF_FRAME_REGISTERS
30345     This macro specifies the maximum number of hard registers that can
30346     be saved in a call frame.  This is used to size data structures
30347     used in DWARF2 exception handling.
30348
30349     Prior to GCC 3.0, this macro was needed in order to establish a
30350     stable exception handling ABI in the face of adding new hard
30351     registers for ISA extensions.  In GCC 3.0 and later, the EH ABI is
30352     insulated from changes in the number of hard registers.
30353     Nevertheless, this macro can still be used to reduce the runtime
30354     memory requirements of the exception handling routines, which can
30355     be substantial if the ISA contains a lot of registers that are not
30356     call-saved.
30357
30358     If this macro is not defined, it defaults to
30359     `FIRST_PSEUDO_REGISTER'.
30360
30361 -- Macro: PRE_GCC3_DWARF_FRAME_REGISTERS
30362     This macro is similar to `DWARF_FRAME_REGISTERS', but is provided
30363     for backward compatibility in pre GCC 3.0 compiled code.
30364
30365     If this macro is not defined, it defaults to
30366     `DWARF_FRAME_REGISTERS'.
30367
30368 -- Macro: DWARF_REG_TO_UNWIND_COLUMN (REGNO)
30369     Define this macro if the target's representation for dwarf
30370     registers is different than the internal representation for unwind
30371     column.  Given a dwarf register, this macro should return the
30372     internal unwind column number to use instead.
30373
30374     See the PowerPC's SPE target for an example.
30375
30376 -- Macro: DWARF_FRAME_REGNUM (REGNO)
30377     Define this macro if the target's representation for dwarf
30378     registers used in .eh_frame or .debug_frame is different from that
30379     used in other debug info sections.  Given a GCC hard register
30380     number, this macro should return the .eh_frame register number.
30381     The default is `DBX_REGISTER_NUMBER (REGNO)'.
30382
30383
30384 -- Macro: DWARF2_FRAME_REG_OUT (REGNO, FOR_EH)
30385     Define this macro to map register numbers held in the call frame
30386     info that GCC has collected using `DWARF_FRAME_REGNUM' to those
30387     that should be output in .debug_frame (`FOR_EH' is zero) and
30388     .eh_frame (`FOR_EH' is nonzero).  The default is to return `REGNO'.
30389
30390
30391 -- Macro: REG_VALUE_IN_UNWIND_CONTEXT
30392     Define this macro if the target stores register values as
30393     `_Unwind_Word' type in unwind context.  It should be defined if
30394     target register size is larger than the size of `void *'.  The
30395     default is to store register values as `void *' type.
30396
30397
30398 -- Macro: ASSUME_EXTENDED_UNWIND_CONTEXT
30399     Define this macro to be 1 if the target always uses extended unwind
30400     context with version, args_size and by_value fields.  If it is
30401     undefined, it will be defined to 1 when
30402     `REG_VALUE_IN_UNWIND_CONTEXT' is defined and 0 otherwise.
30403
30404
30405
30406File: gccint.info,  Node: Elimination,  Next: Stack Arguments,  Prev: Frame Registers,  Up: Stack and Calling
30407
3040817.10.5 Eliminating Frame Pointer and Arg Pointer
30409-------------------------------------------------
30410
30411This is about eliminating the frame pointer and arg pointer.
30412
30413 -- Target Hook: bool TARGET_FRAME_POINTER_REQUIRED (void)
30414     This target hook should return `true' if a function must have and
30415     use a frame pointer.  This target hook is called in the reload
30416     pass.  If its return value is `true' the function will have a
30417     frame pointer.
30418
30419     This target hook can in principle examine the current function and
30420     decide according to the facts, but on most machines the constant
30421     `false' or the constant `true' suffices.  Use `false' when the
30422     machine allows code to be generated with no frame pointer, and
30423     doing so saves some time or space.  Use `true' when there is no
30424     possible advantage to avoiding a frame pointer.
30425
30426     In certain cases, the compiler does not know how to produce valid
30427     code without a frame pointer.  The compiler recognizes those cases
30428     and automatically gives the function a frame pointer regardless of
30429     what `TARGET_FRAME_POINTER_REQUIRED' returns.  You don't need to
30430     worry about them.
30431
30432     In a function that does not require a frame pointer, the frame
30433     pointer register can be allocated for ordinary usage, unless you
30434     mark it as a fixed register.  See `FIXED_REGISTERS' for more
30435     information.
30436
30437     Default return value is `false'.
30438
30439 -- Macro: INITIAL_FRAME_POINTER_OFFSET (DEPTH-VAR)
30440     A C statement to store in the variable DEPTH-VAR the difference
30441     between the frame pointer and the stack pointer values immediately
30442     after the function prologue.  The value would be computed from
30443     information such as the result of `get_frame_size ()' and the
30444     tables of registers `regs_ever_live' and `call_used_regs'.
30445
30446     If `ELIMINABLE_REGS' is defined, this macro will be not be used and
30447     need not be defined.  Otherwise, it must be defined even if
30448     `TARGET_FRAME_POINTER_REQUIRED' always returns true; in that case,
30449     you may set DEPTH-VAR to anything.
30450
30451 -- Macro: ELIMINABLE_REGS
30452     If defined, this macro specifies a table of register pairs used to
30453     eliminate unneeded registers that point into the stack frame.  If
30454     it is not defined, the only elimination attempted by the compiler
30455     is to replace references to the frame pointer with references to
30456     the stack pointer.
30457
30458     The definition of this macro is a list of structure
30459     initializations, each of which specifies an original and
30460     replacement register.
30461
30462     On some machines, the position of the argument pointer is not
30463     known until the compilation is completed.  In such a case, a
30464     separate hard register must be used for the argument pointer.
30465     This register can be eliminated by replacing it with either the
30466     frame pointer or the argument pointer, depending on whether or not
30467     the frame pointer has been eliminated.
30468
30469     In this case, you might specify:
30470          #define ELIMINABLE_REGS  \
30471          {{ARG_POINTER_REGNUM, STACK_POINTER_REGNUM}, \
30472           {ARG_POINTER_REGNUM, FRAME_POINTER_REGNUM}, \
30473           {FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM}}
30474
30475     Note that the elimination of the argument pointer with the stack
30476     pointer is specified first since that is the preferred elimination.
30477
30478 -- Target Hook: bool TARGET_CAN_ELIMINATE (const int FROM_REG, const
30479          int TO_REG)
30480     This target hook should returns `true' if the compiler is allowed
30481     to try to replace register number FROM_REG with register number
30482     TO_REG.  This target hook need only be defined if `ELIMINABLE_REGS'
30483     is defined, and will usually be `true', since most of the cases
30484     preventing register elimination are things that the compiler
30485     already knows about.
30486
30487     Default return value is `true'.
30488
30489 -- Macro: INITIAL_ELIMINATION_OFFSET (FROM-REG, TO-REG, OFFSET-VAR)
30490     This macro is similar to `INITIAL_FRAME_POINTER_OFFSET'.  It
30491     specifies the initial difference between the specified pair of
30492     registers.  This macro must be defined if `ELIMINABLE_REGS' is
30493     defined.
30494
30495
30496File: gccint.info,  Node: Stack Arguments,  Next: Register Arguments,  Prev: Elimination,  Up: Stack and Calling
30497
3049817.10.6 Passing Function Arguments on the Stack
30499-----------------------------------------------
30500
30501The macros in this section control how arguments are passed on the
30502stack.  See the following section for other macros that control passing
30503certain arguments in registers.
30504
30505 -- Target Hook: bool TARGET_PROMOTE_PROTOTYPES (const_tree FNTYPE)
30506     This target hook returns `true' if an argument declared in a
30507     prototype as an integral type smaller than `int' should actually be
30508     passed as an `int'.  In addition to avoiding errors in certain
30509     cases of mismatch, it also makes for better code on certain
30510     machines.  The default is to not promote prototypes.
30511
30512 -- Macro: PUSH_ARGS
30513     A C expression.  If nonzero, push insns will be used to pass
30514     outgoing arguments.  If the target machine does not have a push
30515     instruction, set it to zero.  That directs GCC to use an alternate
30516     strategy: to allocate the entire argument block and then store the
30517     arguments into it.  When `PUSH_ARGS' is nonzero, `PUSH_ROUNDING'
30518     must be defined too.
30519
30520 -- Macro: PUSH_ARGS_REVERSED
30521     A C expression.  If nonzero, function arguments will be evaluated
30522     from last to first, rather than from first to last.  If this macro
30523     is not defined, it defaults to `PUSH_ARGS' on targets where the
30524     stack and args grow in opposite directions, and 0 otherwise.
30525
30526 -- Macro: PUSH_ROUNDING (NPUSHED)
30527     A C expression that is the number of bytes actually pushed onto the
30528     stack when an instruction attempts to push NPUSHED bytes.
30529
30530     On some machines, the definition
30531
30532          #define PUSH_ROUNDING(BYTES) (BYTES)
30533
30534     will suffice.  But on other machines, instructions that appear to
30535     push one byte actually push two bytes in an attempt to maintain
30536     alignment.  Then the definition should be
30537
30538          #define PUSH_ROUNDING(BYTES) (((BYTES) + 1) & ~1)
30539
30540     If the value of this macro has a type, it should be an unsigned
30541     type.
30542
30543 -- Macro: ACCUMULATE_OUTGOING_ARGS
30544     A C expression.  If nonzero, the maximum amount of space required
30545     for outgoing arguments will be computed and placed into
30546     `crtl->outgoing_args_size'.  No space will be pushed onto the
30547     stack for each call; instead, the function prologue should
30548     increase the stack frame size by this amount.
30549
30550     Setting both `PUSH_ARGS' and `ACCUMULATE_OUTGOING_ARGS' is not
30551     proper.
30552
30553 -- Macro: REG_PARM_STACK_SPACE (FNDECL)
30554     Define this macro if functions should assume that stack space has
30555     been allocated for arguments even when their values are passed in
30556     registers.
30557
30558     The value of this macro is the size, in bytes, of the area
30559     reserved for arguments passed in registers for the function
30560     represented by FNDECL, which can be zero if GCC is calling a
30561     library function.  The argument FNDECL can be the FUNCTION_DECL,
30562     or the type itself of the function.
30563
30564     This space can be allocated by the caller, or be a part of the
30565     machine-dependent stack frame: `OUTGOING_REG_PARM_STACK_SPACE' says
30566     which.
30567
30568 -- Macro: INCOMING_REG_PARM_STACK_SPACE (FNDECL)
30569     Like `REG_PARM_STACK_SPACE', but for incoming register arguments.
30570     Define this macro if space guaranteed when compiling a function
30571     body is different to space required when making a call, a
30572     situation that can arise with K&R style function definitions.
30573
30574 -- Macro: OUTGOING_REG_PARM_STACK_SPACE (FNTYPE)
30575     Define this to a nonzero value if it is the responsibility of the
30576     caller to allocate the area reserved for arguments passed in
30577     registers when calling a function of FNTYPE.  FNTYPE may be NULL
30578     if the function called is a library function.
30579
30580     If `ACCUMULATE_OUTGOING_ARGS' is defined, this macro controls
30581     whether the space for these arguments counts in the value of
30582     `crtl->outgoing_args_size'.
30583
30584 -- Macro: STACK_PARMS_IN_REG_PARM_AREA
30585     Define this macro if `REG_PARM_STACK_SPACE' is defined, but the
30586     stack parameters don't skip the area specified by it.
30587
30588     Normally, when a parameter is not passed in registers, it is
30589     placed on the stack beyond the `REG_PARM_STACK_SPACE' area.
30590     Defining this macro suppresses this behavior and causes the
30591     parameter to be passed on the stack in its natural location.
30592
30593 -- Target Hook: int TARGET_RETURN_POPS_ARGS (tree FUNDECL, tree
30594          FUNTYPE, int SIZE)
30595     This target hook returns the number of bytes of its own arguments
30596     that a function pops on returning, or 0 if the function pops no
30597     arguments and the caller must therefore pop them all after the
30598     function returns.
30599
30600     FUNDECL is a C variable whose value is a tree node that describes
30601     the function in question.  Normally it is a node of type
30602     `FUNCTION_DECL' that describes the declaration of the function.
30603     From this you can obtain the `DECL_ATTRIBUTES' of the function.
30604
30605     FUNTYPE is a C variable whose value is a tree node that describes
30606     the function in question.  Normally it is a node of type
30607     `FUNCTION_TYPE' that describes the data type of the function.
30608     From this it is possible to obtain the data types of the value and
30609     arguments (if known).
30610
30611     When a call to a library function is being considered, FUNDECL
30612     will contain an identifier node for the library function.  Thus, if
30613     you need to distinguish among various library functions, you can
30614     do so by their names.  Note that "library function" in this
30615     context means a function used to perform arithmetic, whose name is
30616     known specially in the compiler and was not mentioned in the C
30617     code being compiled.
30618
30619     SIZE is the number of bytes of arguments passed on the stack.  If
30620     a variable number of bytes is passed, it is zero, and argument
30621     popping will always be the responsibility of the calling function.
30622
30623     On the VAX, all functions always pop their arguments, so the
30624     definition of this macro is SIZE.  On the 68000, using the standard
30625     calling convention, no functions pop their arguments, so the value
30626     of the macro is always 0 in this case.  But an alternative calling
30627     convention is available in which functions that take a fixed
30628     number of arguments pop them but other functions (such as
30629     `printf') pop nothing (the caller pops all).  When this convention
30630     is in use, FUNTYPE is examined to determine whether a function
30631     takes a fixed number of arguments.
30632
30633 -- Macro: CALL_POPS_ARGS (CUM)
30634     A C expression that should indicate the number of bytes a call
30635     sequence pops off the stack.  It is added to the value of
30636     `RETURN_POPS_ARGS' when compiling a function call.
30637
30638     CUM is the variable in which all arguments to the called function
30639     have been accumulated.
30640
30641     On certain architectures, such as the SH5, a call trampoline is
30642     used that pops certain registers off the stack, depending on the
30643     arguments that have been passed to the function.  Since this is a
30644     property of the call site, not of the called function,
30645     `RETURN_POPS_ARGS' is not appropriate.
30646
30647
30648File: gccint.info,  Node: Register Arguments,  Next: Scalar Return,  Prev: Stack Arguments,  Up: Stack and Calling
30649
3065017.10.7 Passing Arguments in Registers
30651--------------------------------------
30652
30653This section describes the macros which let you control how various
30654types of arguments are passed in registers or how they are arranged in
30655the stack.
30656
30657 -- Target Hook: rtx TARGET_FUNCTION_ARG (cumulative_args_t CA, enum
30658          machine_mode MODE, const_tree TYPE, bool NAMED)
30659     Return an RTX indicating whether a function argument is passed in a
30660     register and if so, which register.
30661
30662     The arguments are CA, which summarizes all the previous arguments;
30663     MODE, the machine mode of the argument; TYPE, the data type of the
30664     argument as a tree node or 0 if that is not known (which happens
30665     for C support library functions); and NAMED, which is `true' for
30666     an ordinary argument and `false' for nameless arguments that
30667     correspond to `...' in the called function's prototype.  TYPE can
30668     be an incomplete type if a syntax error has previously occurred.
30669
30670     The return value is usually either a `reg' RTX for the hard
30671     register in which to pass the argument, or zero to pass the
30672     argument on the stack.
30673
30674     The value of the expression can also be a `parallel' RTX.  This is
30675     used when an argument is passed in multiple locations.  The mode
30676     of the `parallel' should be the mode of the entire argument.  The
30677     `parallel' holds any number of `expr_list' pairs; each one
30678     describes where part of the argument is passed.  In each
30679     `expr_list' the first operand must be a `reg' RTX for the hard
30680     register in which to pass this part of the argument, and the mode
30681     of the register RTX indicates how large this part of the argument
30682     is.  The second operand of the `expr_list' is a `const_int' which
30683     gives the offset in bytes into the entire argument of where this
30684     part starts.  As a special exception the first `expr_list' in the
30685     `parallel' RTX may have a first operand of zero.  This indicates
30686     that the entire argument is also stored on the stack.
30687
30688     The last time this hook is called, it is called with `MODE ==
30689     VOIDmode', and its result is passed to the `call' or `call_value'
30690     pattern as operands 2 and 3 respectively.
30691
30692     The usual way to make the ISO library `stdarg.h' work on a machine
30693     where some arguments are usually passed in registers, is to cause
30694     nameless arguments to be passed on the stack instead.  This is
30695     done by making `TARGET_FUNCTION_ARG' return 0 whenever NAMED is
30696     `false'.
30697
30698     You may use the hook `targetm.calls.must_pass_in_stack' in the
30699     definition of this macro to determine if this argument is of a
30700     type that must be passed in the stack.  If `REG_PARM_STACK_SPACE'
30701     is not defined and `TARGET_FUNCTION_ARG' returns nonzero for such
30702     an argument, the compiler will abort.  If `REG_PARM_STACK_SPACE' is
30703     defined, the argument will be computed in the stack and then
30704     loaded into a register.
30705
30706 -- Target Hook: bool TARGET_MUST_PASS_IN_STACK (enum machine_mode
30707          MODE, const_tree TYPE)
30708     This target hook should return `true' if we should not pass TYPE
30709     solely in registers.  The file `expr.h' defines a definition that
30710     is usually appropriate, refer to `expr.h' for additional
30711     documentation.
30712
30713 -- Target Hook: rtx TARGET_FUNCTION_INCOMING_ARG (cumulative_args_t
30714          CA, enum machine_mode MODE, const_tree TYPE, bool NAMED)
30715     Define this hook if the target machine has "register windows", so
30716     that the register in which a function sees an arguments is not
30717     necessarily the same as the one in which the caller passed the
30718     argument.
30719
30720     For such machines, `TARGET_FUNCTION_ARG' computes the register in
30721     which the caller passes the value, and
30722     `TARGET_FUNCTION_INCOMING_ARG' should be defined in a similar
30723     fashion to tell the function being called where the arguments will
30724     arrive.
30725
30726     If `TARGET_FUNCTION_INCOMING_ARG' is not defined,
30727     `TARGET_FUNCTION_ARG' serves both purposes.
30728
30729 -- Target Hook: int TARGET_ARG_PARTIAL_BYTES (cumulative_args_t CUM,
30730          enum machine_mode MODE, tree TYPE, bool NAMED)
30731     This target hook returns the number of bytes at the beginning of an
30732     argument that must be put in registers.  The value must be zero for
30733     arguments that are passed entirely in registers or that are
30734     entirely pushed on the stack.
30735
30736     On some machines, certain arguments must be passed partially in
30737     registers and partially in memory.  On these machines, typically
30738     the first few words of arguments are passed in registers, and the
30739     rest on the stack.  If a multi-word argument (a `double' or a
30740     structure) crosses that boundary, its first few words must be
30741     passed in registers and the rest must be pushed.  This macro tells
30742     the compiler when this occurs, and how many bytes should go in
30743     registers.
30744
30745     `TARGET_FUNCTION_ARG' for these arguments should return the first
30746     register to be used by the caller for this argument; likewise
30747     `TARGET_FUNCTION_INCOMING_ARG', for the called function.
30748
30749 -- Target Hook: bool TARGET_PASS_BY_REFERENCE (cumulative_args_t CUM,
30750          enum machine_mode MODE, const_tree TYPE, bool NAMED)
30751     This target hook should return `true' if an argument at the
30752     position indicated by CUM should be passed by reference.  This
30753     predicate is queried after target independent reasons for being
30754     passed by reference, such as `TREE_ADDRESSABLE (type)'.
30755
30756     If the hook returns true, a copy of that argument is made in
30757     memory and a pointer to the argument is passed instead of the
30758     argument itself.  The pointer is passed in whatever way is
30759     appropriate for passing a pointer to that type.
30760
30761 -- Target Hook: bool TARGET_CALLEE_COPIES (cumulative_args_t CUM, enum
30762          machine_mode MODE, const_tree TYPE, bool NAMED)
30763     The function argument described by the parameters to this hook is
30764     known to be passed by reference.  The hook should return true if
30765     the function argument should be copied by the callee instead of
30766     copied by the caller.
30767
30768     For any argument for which the hook returns true, if it can be
30769     determined that the argument is not modified, then a copy need not
30770     be generated.
30771
30772     The default version of this hook always returns false.
30773
30774 -- Macro: CUMULATIVE_ARGS
30775     A C type for declaring a variable that is used as the first
30776     argument of `TARGET_FUNCTION_ARG' and other related values.  For
30777     some target machines, the type `int' suffices and can hold the
30778     number of bytes of argument so far.
30779
30780     There is no need to record in `CUMULATIVE_ARGS' anything about the
30781     arguments that have been passed on the stack.  The compiler has
30782     other variables to keep track of that.  For target machines on
30783     which all arguments are passed on the stack, there is no need to
30784     store anything in `CUMULATIVE_ARGS'; however, the data structure
30785     must exist and should not be empty, so use `int'.
30786
30787 -- Macro: OVERRIDE_ABI_FORMAT (FNDECL)
30788     If defined, this macro is called before generating any code for a
30789     function, but after the CFUN descriptor for the function has been
30790     created.  The back end may use this macro to update CFUN to
30791     reflect an ABI other than that which would normally be used by
30792     default.  If the compiler is generating code for a
30793     compiler-generated function, FNDECL may be `NULL'.
30794
30795 -- Macro: INIT_CUMULATIVE_ARGS (CUM, FNTYPE, LIBNAME, FNDECL,
30796          N_NAMED_ARGS)
30797     A C statement (sans semicolon) for initializing the variable CUM
30798     for the state at the beginning of the argument list.  The variable
30799     has type `CUMULATIVE_ARGS'.  The value of FNTYPE is the tree node
30800     for the data type of the function which will receive the args, or
30801     0 if the args are to a compiler support library function.  For
30802     direct calls that are not libcalls, FNDECL contain the declaration
30803     node of the function.  FNDECL is also set when
30804     `INIT_CUMULATIVE_ARGS' is used to find arguments for the function
30805     being compiled.  N_NAMED_ARGS is set to the number of named
30806     arguments, including a structure return address if it is passed as
30807     a parameter, when making a call.  When processing incoming
30808     arguments, N_NAMED_ARGS is set to -1.
30809
30810     When processing a call to a compiler support library function,
30811     LIBNAME identifies which one.  It is a `symbol_ref' rtx which
30812     contains the name of the function, as a string.  LIBNAME is 0 when
30813     an ordinary C function call is being processed.  Thus, each time
30814     this macro is called, either LIBNAME or FNTYPE is nonzero, but
30815     never both of them at once.
30816
30817 -- Macro: INIT_CUMULATIVE_LIBCALL_ARGS (CUM, MODE, LIBNAME)
30818     Like `INIT_CUMULATIVE_ARGS' but only used for outgoing libcalls,
30819     it gets a `MODE' argument instead of FNTYPE, that would be `NULL'.
30820     INDIRECT would always be zero, too.  If this macro is not defined,
30821     `INIT_CUMULATIVE_ARGS (cum, NULL_RTX, libname, 0)' is used instead.
30822
30823 -- Macro: INIT_CUMULATIVE_INCOMING_ARGS (CUM, FNTYPE, LIBNAME)
30824     Like `INIT_CUMULATIVE_ARGS' but overrides it for the purposes of
30825     finding the arguments for the function being compiled.  If this
30826     macro is undefined, `INIT_CUMULATIVE_ARGS' is used instead.
30827
30828     The value passed for LIBNAME is always 0, since library routines
30829     with special calling conventions are never compiled with GCC.  The
30830     argument LIBNAME exists for symmetry with `INIT_CUMULATIVE_ARGS'.
30831
30832 -- Target Hook: void TARGET_FUNCTION_ARG_ADVANCE (cumulative_args_t
30833          CA, enum machine_mode MODE, const_tree TYPE, bool NAMED)
30834     This hook updates the summarizer variable pointed to by CA to
30835     advance past an argument in the argument list.  The values MODE,
30836     TYPE and NAMED describe that argument.  Once this is done, the
30837     variable CUM is suitable for analyzing the _following_ argument
30838     with `TARGET_FUNCTION_ARG', etc.
30839
30840     This hook need not do anything if the argument in question was
30841     passed on the stack.  The compiler knows how to track the amount
30842     of stack space used for arguments without any special help.
30843
30844 -- Macro: FUNCTION_ARG_OFFSET (MODE, TYPE)
30845     If defined, a C expression that is the number of bytes to add to
30846     the offset of the argument passed in memory.  This is needed for
30847     the SPU, which passes `char' and `short' arguments in the preferred
30848     slot that is in the middle of the quad word instead of starting at
30849     the top.
30850
30851 -- Macro: FUNCTION_ARG_PADDING (MODE, TYPE)
30852     If defined, a C expression which determines whether, and in which
30853     direction, to pad out an argument with extra space.  The value
30854     should be of type `enum direction': either `upward' to pad above
30855     the argument, `downward' to pad below, or `none' to inhibit
30856     padding.
30857
30858     The _amount_ of padding is not controlled by this macro, but by the
30859     target hook `TARGET_FUNCTION_ARG_ROUND_BOUNDARY'.  It is always
30860     just enough to reach the next multiple of that boundary.
30861
30862     This macro has a default definition which is right for most
30863     systems.  For little-endian machines, the default is to pad
30864     upward.  For big-endian machines, the default is to pad downward
30865     for an argument of constant size shorter than an `int', and upward
30866     otherwise.
30867
30868 -- Macro: PAD_VARARGS_DOWN
30869     If defined, a C expression which determines whether the default
30870     implementation of va_arg will attempt to pad down before reading
30871     the next argument, if that argument is smaller than its aligned
30872     space as controlled by `PARM_BOUNDARY'.  If this macro is not
30873     defined, all such arguments are padded down if `BYTES_BIG_ENDIAN'
30874     is true.
30875
30876 -- Macro: BLOCK_REG_PADDING (MODE, TYPE, FIRST)
30877     Specify padding for the last element of a block move between
30878     registers and memory.  FIRST is nonzero if this is the only
30879     element.  Defining this macro allows better control of register
30880     function parameters on big-endian machines, without using
30881     `PARALLEL' rtl.  In particular, `MUST_PASS_IN_STACK' need not test
30882     padding and mode of types in registers, as there is no longer a
30883     "wrong" part of a register;  For example, a three byte aggregate
30884     may be passed in the high part of a register if so required.
30885
30886 -- Target Hook: unsigned int TARGET_FUNCTION_ARG_BOUNDARY (enum
30887          machine_mode MODE, const_tree TYPE)
30888     This hook returns the alignment boundary, in bits, of an argument
30889     with the specified mode and type.  The default hook returns
30890     `PARM_BOUNDARY' for all arguments.
30891
30892 -- Target Hook: unsigned int TARGET_FUNCTION_ARG_ROUND_BOUNDARY (enum
30893          machine_mode MODE, const_tree TYPE)
30894     Normally, the size of an argument is rounded up to `PARM_BOUNDARY',
30895     which is the default value for this hook.  You can define this
30896     hook to return a different value if an argument size must be
30897     rounded to a larger value.
30898
30899 -- Macro: FUNCTION_ARG_REGNO_P (REGNO)
30900     A C expression that is nonzero if REGNO is the number of a hard
30901     register in which function arguments are sometimes passed.  This
30902     does _not_ include implicit arguments such as the static chain and
30903     the structure-value address.  On many machines, no registers can be
30904     used for this purpose since all function arguments are pushed on
30905     the stack.
30906
30907 -- Target Hook: bool TARGET_SPLIT_COMPLEX_ARG (const_tree TYPE)
30908     This hook should return true if parameter of type TYPE are passed
30909     as two scalar parameters.  By default, GCC will attempt to pack
30910     complex arguments into the target's word size.  Some ABIs require
30911     complex arguments to be split and treated as their individual
30912     components.  For example, on AIX64, complex floats should be
30913     passed in a pair of floating point registers, even though a
30914     complex float would fit in one 64-bit floating point register.
30915
30916     The default value of this hook is `NULL', which is treated as
30917     always false.
30918
30919 -- Target Hook: tree TARGET_BUILD_BUILTIN_VA_LIST (void)
30920     This hook returns a type node for `va_list' for the target.  The
30921     default version of the hook returns `void*'.
30922
30923 -- Target Hook: int TARGET_ENUM_VA_LIST_P (int IDX, const char
30924          **PNAME, tree *PTREE)
30925     This target hook is used in function `c_common_nodes_and_builtins'
30926     to iterate through the target specific builtin types for va_list.
30927     The variable IDX is used as iterator. PNAME has to be a pointer to
30928     a `const char *' and PTREE a pointer to a `tree' typed variable.
30929     The arguments PNAME and PTREE are used to store the result of this
30930     macro and are set to the name of the va_list builtin type and its
30931     internal type.  If the return value of this macro is zero, then
30932     there is no more element.  Otherwise the IDX should be increased
30933     for the next call of this macro to iterate through all types.
30934
30935 -- Target Hook: tree TARGET_FN_ABI_VA_LIST (tree FNDECL)
30936     This hook returns the va_list type of the calling convention
30937     specified by FNDECL.  The default version of this hook returns
30938     `va_list_type_node'.
30939
30940 -- Target Hook: tree TARGET_CANONICAL_VA_LIST_TYPE (tree TYPE)
30941     This hook returns the va_list type of the calling convention
30942     specified by the type of TYPE. If TYPE is not a valid va_list
30943     type, it returns `NULL_TREE'.
30944
30945 -- Target Hook: tree TARGET_GIMPLIFY_VA_ARG_EXPR (tree VALIST, tree
30946          TYPE, gimple_seq *PRE_P, gimple_seq *POST_P)
30947     This hook performs target-specific gimplification of
30948     `VA_ARG_EXPR'.  The first two parameters correspond to the
30949     arguments to `va_arg'; the latter two are as in
30950     `gimplify.c:gimplify_expr'.
30951
30952 -- Target Hook: bool TARGET_VALID_POINTER_MODE (enum machine_mode MODE)
30953     Define this to return nonzero if the port can handle pointers with
30954     machine mode MODE.  The default version of this hook returns true
30955     for both `ptr_mode' and `Pmode'.
30956
30957 -- Target Hook: bool TARGET_REF_MAY_ALIAS_ERRNO (struct ao_ref_s *REF)
30958     Define this to return nonzero if the memory reference REF  may
30959     alias with the system C library errno location.  The default
30960     version of this hook assumes the system C library errno location
30961     is either a declaration of type int or accessed by dereferencing
30962     a pointer to int.
30963
30964 -- Target Hook: bool TARGET_SCALAR_MODE_SUPPORTED_P (enum machine_mode
30965          MODE)
30966     Define this to return nonzero if the port is prepared to handle
30967     insns involving scalar mode MODE.  For a scalar mode to be
30968     considered supported, all the basic arithmetic and comparisons
30969     must work.
30970
30971     The default version of this hook returns true for any mode
30972     required to handle the basic C types (as defined by the port).
30973     Included here are the double-word arithmetic supported by the code
30974     in `optabs.c'.
30975
30976 -- Target Hook: bool TARGET_VECTOR_MODE_SUPPORTED_P (enum machine_mode
30977          MODE)
30978     Define this to return nonzero if the port is prepared to handle
30979     insns involving vector mode MODE.  At the very least, it must have
30980     move patterns for this mode.
30981
30982 -- Target Hook: bool TARGET_ARRAY_MODE_SUPPORTED_P (enum machine_mode
30983          MODE, unsigned HOST_WIDE_INT NELEMS)
30984     Return true if GCC should try to use a scalar mode to store an
30985     array of NELEMS elements, given that each element has mode MODE.
30986     Returning true here overrides the usual `MAX_FIXED_MODE' limit and
30987     allows GCC to use any defined integer mode.
30988
30989     One use of this hook is to support vector load and store operations
30990     that operate on several homogeneous vectors.  For example, ARM NEON
30991     has operations like:
30992
30993          int8x8x3_t vld3_s8 (const int8_t *)
30994
30995     where the return type is defined as:
30996
30997          typedef struct int8x8x3_t
30998          {
30999            int8x8_t val[3];
31000          } int8x8x3_t;
31001
31002     If this hook allows `val' to have a scalar mode, then `int8x8x3_t'
31003     can have the same mode.  GCC can then store `int8x8x3_t's in
31004     registers rather than forcing them onto the stack.
31005
31006 -- Target Hook: bool TARGET_SMALL_REGISTER_CLASSES_FOR_MODE_P (enum
31007          machine_mode MODE)
31008     Define this to return nonzero for machine modes for which the port
31009     has small register classes.  If this target hook returns nonzero
31010     for a given MODE, the compiler will try to minimize the lifetime
31011     of registers in MODE.  The hook may be called with `VOIDmode' as
31012     argument.  In this case, the hook is expected to return nonzero if
31013     it returns nonzero for any mode.
31014
31015     On some machines, it is risky to let hard registers live across
31016     arbitrary insns.  Typically, these machines have instructions that
31017     require values to be in specific registers (like an accumulator),
31018     and reload will fail if the required hard register is used for
31019     another purpose across such an insn.
31020
31021     Passes before reload do not know which hard registers will be used
31022     in an instruction, but the machine modes of the registers set or
31023     used in the instruction are already known.  And for some machines,
31024     register classes are small for, say, integer registers but not for
31025     floating point registers.  For example, the AMD x86-64
31026     architecture requires specific registers for the legacy x86
31027     integer instructions, but there are many SSE registers for
31028     floating point operations.  On such targets, a good strategy may
31029     be to return nonzero from this hook for `INTEGRAL_MODE_P' machine
31030     modes but zero for the SSE register classes.
31031
31032     The default version of this hook returns false for any mode.  It
31033     is always safe to redefine this hook to return with a nonzero
31034     value.  But if you unnecessarily define it, you will reduce the
31035     amount of optimizations that can be performed in some cases.  If
31036     you do not define this hook to return a nonzero value when it is
31037     required, the compiler will run out of spill registers and print a
31038     fatal error message.
31039
31040
31041File: gccint.info,  Node: Scalar Return,  Next: Aggregate Return,  Prev: Register Arguments,  Up: Stack and Calling
31042
3104317.10.8 How Scalar Function Values Are Returned
31044-----------------------------------------------
31045
31046This section discusses the macros that control returning scalars as
31047values--values that can fit in registers.
31048
31049 -- Target Hook: rtx TARGET_FUNCTION_VALUE (const_tree RET_TYPE,
31050          const_tree FN_DECL_OR_TYPE, bool OUTGOING)
31051     Define this to return an RTX representing the place where a
31052     function returns or receives a value of data type RET_TYPE, a tree
31053     node representing a data type.  FN_DECL_OR_TYPE is a tree node
31054     representing `FUNCTION_DECL' or `FUNCTION_TYPE' of a function
31055     being called.  If OUTGOING is false, the hook should compute the
31056     register in which the caller will see the return value.
31057     Otherwise, the hook should return an RTX representing the place
31058     where a function returns a value.
31059
31060     On many machines, only `TYPE_MODE (RET_TYPE)' is relevant.
31061     (Actually, on most machines, scalar values are returned in the same
31062     place regardless of mode.)  The value of the expression is usually
31063     a `reg' RTX for the hard register where the return value is stored.
31064     The value can also be a `parallel' RTX, if the return value is in
31065     multiple places.  See `TARGET_FUNCTION_ARG' for an explanation of
31066     the `parallel' form.   Note that the callee will populate every
31067     location specified in the `parallel', but if the first element of
31068     the `parallel' contains the whole return value, callers will use
31069     that element as the canonical location and ignore the others.  The
31070     m68k port uses this type of `parallel' to return pointers in both
31071     `%a0' (the canonical location) and `%d0'.
31072
31073     If `TARGET_PROMOTE_FUNCTION_RETURN' returns true, you must apply
31074     the same promotion rules specified in `PROMOTE_MODE' if VALTYPE is
31075     a scalar type.
31076
31077     If the precise function being called is known, FUNC is a tree node
31078     (`FUNCTION_DECL') for it; otherwise, FUNC is a null pointer.  This
31079     makes it possible to use a different value-returning convention
31080     for specific functions when all their calls are known.
31081
31082     Some target machines have "register windows" so that the register
31083     in which a function returns its value is not the same as the one
31084     in which the caller sees the value.  For such machines, you should
31085     return different RTX depending on OUTGOING.
31086
31087     `TARGET_FUNCTION_VALUE' is not used for return values with
31088     aggregate data types, because these are returned in another way.
31089     See `TARGET_STRUCT_VALUE_RTX' and related macros, below.
31090
31091 -- Macro: FUNCTION_VALUE (VALTYPE, FUNC)
31092     This macro has been deprecated.  Use `TARGET_FUNCTION_VALUE' for a
31093     new target instead.
31094
31095 -- Macro: LIBCALL_VALUE (MODE)
31096     A C expression to create an RTX representing the place where a
31097     library function returns a value of mode MODE.
31098
31099     Note that "library function" in this context means a compiler
31100     support routine, used to perform arithmetic, whose name is known
31101     specially by the compiler and was not mentioned in the C code being
31102     compiled.
31103
31104 -- Target Hook: rtx TARGET_LIBCALL_VALUE (enum machine_mode MODE,
31105          const_rtx FUN)
31106     Define this hook if the back-end needs to know the name of the
31107     libcall function in order to determine where the result should be
31108     returned.
31109
31110     The mode of the result is given by MODE and the name of the called
31111     library function is given by FUN.  The hook should return an RTX
31112     representing the place where the library function result will be
31113     returned.
31114
31115     If this hook is not defined, then LIBCALL_VALUE will be used.
31116
31117 -- Macro: FUNCTION_VALUE_REGNO_P (REGNO)
31118     A C expression that is nonzero if REGNO is the number of a hard
31119     register in which the values of called function may come back.
31120
31121     A register whose use for returning values is limited to serving as
31122     the second of a pair (for a value of type `double', say) need not
31123     be recognized by this macro.  So for most machines, this definition
31124     suffices:
31125
31126          #define FUNCTION_VALUE_REGNO_P(N) ((N) == 0)
31127
31128     If the machine has register windows, so that the caller and the
31129     called function use different registers for the return value, this
31130     macro should recognize only the caller's register numbers.
31131
31132     This macro has been deprecated.  Use
31133     `TARGET_FUNCTION_VALUE_REGNO_P' for a new target instead.
31134
31135 -- Target Hook: bool TARGET_FUNCTION_VALUE_REGNO_P (const unsigned int
31136          REGNO)
31137     A target hook that return `true' if REGNO is the number of a hard
31138     register in which the values of called function may come back.
31139
31140     A register whose use for returning values is limited to serving as
31141     the second of a pair (for a value of type `double', say) need not
31142     be recognized by this target hook.
31143
31144     If the machine has register windows, so that the caller and the
31145     called function use different registers for the return value, this
31146     target hook should recognize only the caller's register numbers.
31147
31148     If this hook is not defined, then FUNCTION_VALUE_REGNO_P will be
31149     used.
31150
31151 -- Macro: APPLY_RESULT_SIZE
31152     Define this macro if `untyped_call' and `untyped_return' need more
31153     space than is implied by `FUNCTION_VALUE_REGNO_P' for saving and
31154     restoring an arbitrary return value.
31155
31156 -- Target Hook: bool TARGET_RETURN_IN_MSB (const_tree TYPE)
31157     This hook should return true if values of type TYPE are returned
31158     at the most significant end of a register (in other words, if they
31159     are padded at the least significant end).  You can assume that TYPE
31160     is returned in a register; the caller is required to check this.
31161
31162     Note that the register provided by `TARGET_FUNCTION_VALUE' must be
31163     able to hold the complete return value.  For example, if a 1-, 2-
31164     or 3-byte structure is returned at the most significant end of a
31165     4-byte register, `TARGET_FUNCTION_VALUE' should provide an
31166     `SImode' rtx.
31167
31168
31169File: gccint.info,  Node: Aggregate Return,  Next: Caller Saves,  Prev: Scalar Return,  Up: Stack and Calling
31170
3117117.10.9 How Large Values Are Returned
31172-------------------------------------
31173
31174When a function value's mode is `BLKmode' (and in some other cases),
31175the value is not returned according to `TARGET_FUNCTION_VALUE' (*note
31176Scalar Return::).  Instead, the caller passes the address of a block of
31177memory in which the value should be stored.  This address is called the
31178"structure value address".
31179
31180 This section describes how to control returning structure values in
31181memory.
31182
31183 -- Target Hook: bool TARGET_RETURN_IN_MEMORY (const_tree TYPE,
31184          const_tree FNTYPE)
31185     This target hook should return a nonzero value to say to return the
31186     function value in memory, just as large structures are always
31187     returned.  Here TYPE will be the data type of the value, and FNTYPE
31188     will be the type of the function doing the returning, or `NULL' for
31189     libcalls.
31190
31191     Note that values of mode `BLKmode' must be explicitly handled by
31192     this function.  Also, the option `-fpcc-struct-return' takes
31193     effect regardless of this macro.  On most systems, it is possible
31194     to leave the hook undefined; this causes a default definition to
31195     be used, whose value is the constant 1 for `BLKmode' values, and 0
31196     otherwise.
31197
31198     Do not use this hook to indicate that structures and unions should
31199     always be returned in memory.  You should instead use
31200     `DEFAULT_PCC_STRUCT_RETURN' to indicate this.
31201
31202 -- Macro: DEFAULT_PCC_STRUCT_RETURN
31203     Define this macro to be 1 if all structure and union return values
31204     must be in memory.  Since this results in slower code, this should
31205     be defined only if needed for compatibility with other compilers
31206     or with an ABI.  If you define this macro to be 0, then the
31207     conventions used for structure and union return values are decided
31208     by the `TARGET_RETURN_IN_MEMORY' target hook.
31209
31210     If not defined, this defaults to the value 1.
31211
31212 -- Target Hook: rtx TARGET_STRUCT_VALUE_RTX (tree FNDECL, int INCOMING)
31213     This target hook should return the location of the structure value
31214     address (normally a `mem' or `reg'), or 0 if the address is passed
31215     as an "invisible" first argument.  Note that FNDECL may be `NULL',
31216     for libcalls.  You do not need to define this target hook if the
31217     address is always passed as an "invisible" first argument.
31218
31219     On some architectures the place where the structure value address
31220     is found by the called function is not the same place that the
31221     caller put it.  This can be due to register windows, or it could
31222     be because the function prologue moves it to a different place.
31223     INCOMING is `1' or `2' when the location is needed in the context
31224     of the called function, and `0' in the context of the caller.
31225
31226     If INCOMING is nonzero and the address is to be found on the
31227     stack, return a `mem' which refers to the frame pointer. If
31228     INCOMING is `2', the result is being used to fetch the structure
31229     value address at the beginning of a function.  If you need to emit
31230     adjusting code, you should do it at this point.
31231
31232 -- Macro: PCC_STATIC_STRUCT_RETURN
31233     Define this macro if the usual system convention on the target
31234     machine for returning structures and unions is for the called
31235     function to return the address of a static variable containing the
31236     value.
31237
31238     Do not define this if the usual system convention is for the
31239     caller to pass an address to the subroutine.
31240
31241     This macro has effect in `-fpcc-struct-return' mode, but it does
31242     nothing when you use `-freg-struct-return' mode.
31243
31244 -- Target Hook: enum machine_mode TARGET_GET_RAW_RESULT_MODE (int
31245          REGNO)
31246     This target hook returns the mode to be used when accessing raw
31247     return registers in `__builtin_return'.  Define this macro if the
31248     value in REG_RAW_MODE is not correct.
31249
31250 -- Target Hook: enum machine_mode TARGET_GET_RAW_ARG_MODE (int REGNO)
31251     This target hook returns the mode to be used when accessing raw
31252     argument registers in `__builtin_apply_args'.  Define this macro
31253     if the value in REG_RAW_MODE is not correct.
31254
31255
31256File: gccint.info,  Node: Caller Saves,  Next: Function Entry,  Prev: Aggregate Return,  Up: Stack and Calling
31257
3125817.10.10 Caller-Saves Register Allocation
31259-----------------------------------------
31260
31261If you enable it, GCC can save registers around function calls.  This
31262makes it possible to use call-clobbered registers to hold variables that
31263must live across calls.
31264
31265 -- Macro: CALLER_SAVE_PROFITABLE (REFS, CALLS)
31266     A C expression to determine whether it is worthwhile to consider
31267     placing a pseudo-register in a call-clobbered hard register and
31268     saving and restoring it around each function call.  The expression
31269     should be 1 when this is worth doing, and 0 otherwise.
31270
31271     If you don't define this macro, a default is used which is good on
31272     most machines: `4 * CALLS < REFS'.
31273
31274 -- Macro: HARD_REGNO_CALLER_SAVE_MODE (REGNO, NREGS)
31275     A C expression specifying which mode is required for saving NREGS
31276     of a pseudo-register in call-clobbered hard register REGNO.  If
31277     REGNO is unsuitable for caller save, `VOIDmode' should be
31278     returned.  For most machines this macro need not be defined since
31279     GCC will select the smallest suitable mode.
31280
31281
31282File: gccint.info,  Node: Function Entry,  Next: Profiling,  Prev: Caller Saves,  Up: Stack and Calling
31283
3128417.10.11 Function Entry and Exit
31285--------------------------------
31286
31287This section describes the macros that output function entry
31288("prologue") and exit ("epilogue") code.
31289
31290 -- Target Hook: void TARGET_ASM_FUNCTION_PROLOGUE (FILE *FILE,
31291          HOST_WIDE_INT SIZE)
31292     If defined, a function that outputs the assembler code for entry
31293     to a function.  The prologue is responsible for setting up the
31294     stack frame, initializing the frame pointer register, saving
31295     registers that must be saved, and allocating SIZE additional bytes
31296     of storage for the local variables.  SIZE is an integer.  FILE is
31297     a stdio stream to which the assembler code should be output.
31298
31299     The label for the beginning of the function need not be output by
31300     this macro.  That has already been done when the macro is run.
31301
31302     To determine which registers to save, the macro can refer to the
31303     array `regs_ever_live': element R is nonzero if hard register R is
31304     used anywhere within the function.  This implies the function
31305     prologue should save register R, provided it is not one of the
31306     call-used registers.  (`TARGET_ASM_FUNCTION_EPILOGUE' must
31307     likewise use `regs_ever_live'.)
31308
31309     On machines that have "register windows", the function entry code
31310     does not save on the stack the registers that are in the windows,
31311     even if they are supposed to be preserved by function calls;
31312     instead it takes appropriate steps to "push" the register stack,
31313     if any non-call-used registers are used in the function.
31314
31315     On machines where functions may or may not have frame-pointers, the
31316     function entry code must vary accordingly; it must set up the frame
31317     pointer if one is wanted, and not otherwise.  To determine whether
31318     a frame pointer is in wanted, the macro can refer to the variable
31319     `frame_pointer_needed'.  The variable's value will be 1 at run
31320     time in a function that needs a frame pointer.  *Note
31321     Elimination::.
31322
31323     The function entry code is responsible for allocating any stack
31324     space required for the function.  This stack space consists of the
31325     regions listed below.  In most cases, these regions are allocated
31326     in the order listed, with the last listed region closest to the
31327     top of the stack (the lowest address if `STACK_GROWS_DOWNWARD' is
31328     defined, and the highest address if it is not defined).  You can
31329     use a different order for a machine if doing so is more convenient
31330     or required for compatibility reasons.  Except in cases where
31331     required by standard or by a debugger, there is no reason why the
31332     stack layout used by GCC need agree with that used by other
31333     compilers for a machine.
31334
31335 -- Target Hook: void TARGET_ASM_FUNCTION_END_PROLOGUE (FILE *FILE)
31336     If defined, a function that outputs assembler code at the end of a
31337     prologue.  This should be used when the function prologue is being
31338     emitted as RTL, and you have some extra assembler that needs to be
31339     emitted.  *Note prologue instruction pattern::.
31340
31341 -- Target Hook: void TARGET_ASM_FUNCTION_BEGIN_EPILOGUE (FILE *FILE)
31342     If defined, a function that outputs assembler code at the start of
31343     an epilogue.  This should be used when the function epilogue is
31344     being emitted as RTL, and you have some extra assembler that needs
31345     to be emitted.  *Note epilogue instruction pattern::.
31346
31347 -- Target Hook: void TARGET_ASM_FUNCTION_EPILOGUE (FILE *FILE,
31348          HOST_WIDE_INT SIZE)
31349     If defined, a function that outputs the assembler code for exit
31350     from a function.  The epilogue is responsible for restoring the
31351     saved registers and stack pointer to their values when the
31352     function was called, and returning control to the caller.  This
31353     macro takes the same arguments as the macro
31354     `TARGET_ASM_FUNCTION_PROLOGUE', and the registers to restore are
31355     determined from `regs_ever_live' and `CALL_USED_REGISTERS' in the
31356     same way.
31357
31358     On some machines, there is a single instruction that does all the
31359     work of returning from the function.  On these machines, give that
31360     instruction the name `return' and do not define the macro
31361     `TARGET_ASM_FUNCTION_EPILOGUE' at all.
31362
31363     Do not define a pattern named `return' if you want the
31364     `TARGET_ASM_FUNCTION_EPILOGUE' to be used.  If you want the target
31365     switches to control whether return instructions or epilogues are
31366     used, define a `return' pattern with a validity condition that
31367     tests the target switches appropriately.  If the `return'
31368     pattern's validity condition is false, epilogues will be used.
31369
31370     On machines where functions may or may not have frame-pointers, the
31371     function exit code must vary accordingly.  Sometimes the code for
31372     these two cases is completely different.  To determine whether a
31373     frame pointer is wanted, the macro can refer to the variable
31374     `frame_pointer_needed'.  The variable's value will be 1 when
31375     compiling a function that needs a frame pointer.
31376
31377     Normally, `TARGET_ASM_FUNCTION_PROLOGUE' and
31378     `TARGET_ASM_FUNCTION_EPILOGUE' must treat leaf functions specially.
31379     The C variable `current_function_is_leaf' is nonzero for such a
31380     function.  *Note Leaf Functions::.
31381
31382     On some machines, some functions pop their arguments on exit while
31383     others leave that for the caller to do.  For example, the 68020
31384     when given `-mrtd' pops arguments in functions that take a fixed
31385     number of arguments.
31386
31387     Your definition of the macro `RETURN_POPS_ARGS' decides which
31388     functions pop their own arguments.  `TARGET_ASM_FUNCTION_EPILOGUE'
31389     needs to know what was decided.  The number of bytes of the current
31390     function's arguments that this function should pop is available in
31391     `crtl->args.pops_args'.  *Note Scalar Return::.
31392
31393   * A region of `crtl->args.pretend_args_size' bytes of uninitialized
31394     space just underneath the first argument arriving on the stack.
31395     (This may not be at the very start of the allocated stack region
31396     if the calling sequence has pushed anything else since pushing the
31397     stack arguments.  But usually, on such machines, nothing else has
31398     been pushed yet, because the function prologue itself does all the
31399     pushing.)  This region is used on machines where an argument may
31400     be passed partly in registers and partly in memory, and, in some
31401     cases to support the features in `<stdarg.h>'.
31402
31403   * An area of memory used to save certain registers used by the
31404     function.  The size of this area, which may also include space for
31405     such things as the return address and pointers to previous stack
31406     frames, is machine-specific and usually depends on which registers
31407     have been used in the function.  Machines with register windows
31408     often do not require a save area.
31409
31410   * A region of at least SIZE bytes, possibly rounded up to an
31411     allocation boundary, to contain the local variables of the
31412     function.  On some machines, this region and the save area may
31413     occur in the opposite order, with the save area closer to the top
31414     of the stack.
31415
31416   * Optionally, when `ACCUMULATE_OUTGOING_ARGS' is defined, a region of
31417     `crtl->outgoing_args_size' bytes to be used for outgoing argument
31418     lists of the function.  *Note Stack Arguments::.
31419
31420 -- Macro: EXIT_IGNORE_STACK
31421     Define this macro as a C expression that is nonzero if the return
31422     instruction or the function epilogue ignores the value of the stack
31423     pointer; in other words, if it is safe to delete an instruction to
31424     adjust the stack pointer before a return from the function.  The
31425     default is 0.
31426
31427     Note that this macro's value is relevant only for functions for
31428     which frame pointers are maintained.  It is never safe to delete a
31429     final stack adjustment in a function that has no frame pointer,
31430     and the compiler knows this regardless of `EXIT_IGNORE_STACK'.
31431
31432 -- Macro: EPILOGUE_USES (REGNO)
31433     Define this macro as a C expression that is nonzero for registers
31434     that are used by the epilogue or the `return' pattern.  The stack
31435     and frame pointer registers are already assumed to be used as
31436     needed.
31437
31438 -- Macro: EH_USES (REGNO)
31439     Define this macro as a C expression that is nonzero for registers
31440     that are used by the exception handling mechanism, and so should
31441     be considered live on entry to an exception edge.
31442
31443 -- Target Hook: void TARGET_ASM_OUTPUT_MI_THUNK (FILE *FILE, tree
31444          THUNK_FNDECL, HOST_WIDE_INT DELTA, HOST_WIDE_INT
31445          VCALL_OFFSET, tree FUNCTION)
31446     A function that outputs the assembler code for a thunk function,
31447     used to implement C++ virtual function calls with multiple
31448     inheritance.  The thunk acts as a wrapper around a virtual
31449     function, adjusting the implicit object parameter before handing
31450     control off to the real function.
31451
31452     First, emit code to add the integer DELTA to the location that
31453     contains the incoming first argument.  Assume that this argument
31454     contains a pointer, and is the one used to pass the `this' pointer
31455     in C++.  This is the incoming argument _before_ the function
31456     prologue, e.g. `%o0' on a sparc.  The addition must preserve the
31457     values of all other incoming arguments.
31458
31459     Then, if VCALL_OFFSET is nonzero, an additional adjustment should
31460     be made after adding `delta'.  In particular, if P is the adjusted
31461     pointer, the following adjustment should be made:
31462
31463          p += (*((ptrdiff_t **)p))[vcall_offset/sizeof(ptrdiff_t)]
31464
31465     After the additions, emit code to jump to FUNCTION, which is a
31466     `FUNCTION_DECL'.  This is a direct pure jump, not a call, and does
31467     not touch the return address.  Hence returning from FUNCTION will
31468     return to whoever called the current `thunk'.
31469
31470     The effect must be as if FUNCTION had been called directly with
31471     the adjusted first argument.  This macro is responsible for
31472     emitting all of the code for a thunk function;
31473     `TARGET_ASM_FUNCTION_PROLOGUE' and `TARGET_ASM_FUNCTION_EPILOGUE'
31474     are not invoked.
31475
31476     The THUNK_FNDECL is redundant.  (DELTA and FUNCTION have already
31477     been extracted from it.)  It might possibly be useful on some
31478     targets, but probably not.
31479
31480     If you do not define this macro, the target-independent code in
31481     the C++ front end will generate a less efficient heavyweight thunk
31482     that calls FUNCTION instead of jumping to it.  The generic
31483     approach does not support varargs.
31484
31485 -- Target Hook: bool TARGET_ASM_CAN_OUTPUT_MI_THUNK (const_tree
31486          THUNK_FNDECL, HOST_WIDE_INT DELTA, HOST_WIDE_INT
31487          VCALL_OFFSET, const_tree FUNCTION)
31488     A function that returns true if TARGET_ASM_OUTPUT_MI_THUNK would
31489     be able to output the assembler code for the thunk function
31490     specified by the arguments it is passed, and false otherwise.  In
31491     the latter case, the generic approach will be used by the C++
31492     front end, with the limitations previously exposed.
31493
31494
31495File: gccint.info,  Node: Profiling,  Next: Tail Calls,  Prev: Function Entry,  Up: Stack and Calling
31496
3149717.10.12 Generating Code for Profiling
31498--------------------------------------
31499
31500These macros will help you generate code for profiling.
31501
31502 -- Macro: FUNCTION_PROFILER (FILE, LABELNO)
31503     A C statement or compound statement to output to FILE some
31504     assembler code to call the profiling subroutine `mcount'.
31505
31506     The details of how `mcount' expects to be called are determined by
31507     your operating system environment, not by GCC.  To figure them out,
31508     compile a small program for profiling using the system's installed
31509     C compiler and look at the assembler code that results.
31510
31511     Older implementations of `mcount' expect the address of a counter
31512     variable to be loaded into some register.  The name of this
31513     variable is `LP' followed by the number LABELNO, so you would
31514     generate the name using `LP%d' in a `fprintf'.
31515
31516 -- Macro: PROFILE_HOOK
31517     A C statement or compound statement to output to FILE some assembly
31518     code to call the profiling subroutine `mcount' even the target does
31519     not support profiling.
31520
31521 -- Macro: NO_PROFILE_COUNTERS
31522     Define this macro to be an expression with a nonzero value if the
31523     `mcount' subroutine on your system does not need a counter variable
31524     allocated for each function.  This is true for almost all modern
31525     implementations.  If you define this macro, you must not use the
31526     LABELNO argument to `FUNCTION_PROFILER'.
31527
31528 -- Macro: PROFILE_BEFORE_PROLOGUE
31529     Define this macro if the code for function profiling should come
31530     before the function prologue.  Normally, the profiling code comes
31531     after.
31532
31533
31534File: gccint.info,  Node: Tail Calls,  Next: Stack Smashing Protection,  Prev: Profiling,  Up: Stack and Calling
31535
3153617.10.13 Permitting tail calls
31537------------------------------
31538
31539 -- Target Hook: bool TARGET_FUNCTION_OK_FOR_SIBCALL (tree DECL, tree
31540          EXP)
31541     True if it is ok to do sibling call optimization for the specified
31542     call expression EXP.  DECL will be the called function, or `NULL'
31543     if this is an indirect call.
31544
31545     It is not uncommon for limitations of calling conventions to
31546     prevent tail calls to functions outside the current unit of
31547     translation, or during PIC compilation.  The hook is used to
31548     enforce these restrictions, as the `sibcall' md pattern can not
31549     fail, or fall over to a "normal" call.  The criteria for
31550     successful sibling call optimization may vary greatly between
31551     different architectures.
31552
31553 -- Target Hook: void TARGET_EXTRA_LIVE_ON_ENTRY (bitmap REGS)
31554     Add any hard registers to REGS that are live on entry to the
31555     function.  This hook only needs to be defined to provide registers
31556     that cannot be found by examination of FUNCTION_ARG_REGNO_P, the
31557     callee saved registers, STATIC_CHAIN_INCOMING_REGNUM,
31558     STATIC_CHAIN_REGNUM, TARGET_STRUCT_VALUE_RTX,
31559     FRAME_POINTER_REGNUM, EH_USES, FRAME_POINTER_REGNUM,
31560     ARG_POINTER_REGNUM, and the PIC_OFFSET_TABLE_REGNUM.
31561
31562 -- Target Hook: void TARGET_SET_UP_BY_PROLOGUE (struct
31563          hard_reg_set_container *)
31564     This hook should add additional registers that are computed by the
31565     prologue to the hard regset for shrink-wrapping optimization
31566     purposes.
31567
31568 -- Target Hook: bool TARGET_WARN_FUNC_RETURN (tree)
31569     True if a function's return statements should be checked for
31570     matching the function's return type.  This includes checking for
31571     falling off the end of a non-void function.  Return false if no
31572     such check should be made.
31573
31574
31575File: gccint.info,  Node: Stack Smashing Protection,  Prev: Tail Calls,  Up: Stack and Calling
31576
3157717.10.14 Stack smashing protection
31578----------------------------------
31579
31580 -- Target Hook: tree TARGET_STACK_PROTECT_GUARD (void)
31581     This hook returns a `DECL' node for the external variable to use
31582     for the stack protection guard.  This variable is initialized by
31583     the runtime to some random value and is used to initialize the
31584     guard value that is placed at the top of the local stack frame.
31585     The type of this variable must be `ptr_type_node'.
31586
31587     The default version of this hook creates a variable called
31588     `__stack_chk_guard', which is normally defined in `libgcc2.c'.
31589
31590 -- Target Hook: tree TARGET_STACK_PROTECT_FAIL (void)
31591     This hook returns a `CALL_EXPR' that alerts the runtime that the
31592     stack protect guard variable has been modified.  This expression
31593     should involve a call to a `noreturn' function.
31594
31595     The default version of this hook invokes a function called
31596     `__stack_chk_fail', taking no arguments.  This function is
31597     normally defined in `libgcc2.c'.
31598
31599 -- Common Target Hook: bool TARGET_SUPPORTS_SPLIT_STACK (bool REPORT,
31600          struct gcc_options *OPTS)
31601     Whether this target supports splitting the stack when the options
31602     described in OPTS have been passed.  This is called after options
31603     have been parsed, so the target may reject splitting the stack in
31604     some configurations.  The default version of this hook returns
31605     false.  If REPORT is true, this function may issue a warning or
31606     error; if REPORT is false, it must simply return a value
31607
31608
31609File: gccint.info,  Node: Varargs,  Next: Trampolines,  Prev: Stack and Calling,  Up: Target Macros
31610
3161117.11 Implementing the Varargs Macros
31612=====================================
31613
31614GCC comes with an implementation of `<varargs.h>' and `<stdarg.h>' that
31615work without change on machines that pass arguments on the stack.
31616Other machines require their own implementations of varargs, and the
31617two machine independent header files must have conditionals to include
31618it.
31619
31620 ISO `<stdarg.h>' differs from traditional `<varargs.h>' mainly in the
31621calling convention for `va_start'.  The traditional implementation
31622takes just one argument, which is the variable in which to store the
31623argument pointer.  The ISO implementation of `va_start' takes an
31624additional second argument.  The user is supposed to write the last
31625named argument of the function here.
31626
31627 However, `va_start' should not use this argument.  The way to find the
31628end of the named arguments is with the built-in functions described
31629below.
31630
31631 -- Macro: __builtin_saveregs ()
31632     Use this built-in function to save the argument registers in
31633     memory so that the varargs mechanism can access them.  Both ISO
31634     and traditional versions of `va_start' must use
31635     `__builtin_saveregs', unless you use
31636     `TARGET_SETUP_INCOMING_VARARGS' (see below) instead.
31637
31638     On some machines, `__builtin_saveregs' is open-coded under the
31639     control of the target hook `TARGET_EXPAND_BUILTIN_SAVEREGS'.  On
31640     other machines, it calls a routine written in assembler language,
31641     found in `libgcc2.c'.
31642
31643     Code generated for the call to `__builtin_saveregs' appears at the
31644     beginning of the function, as opposed to where the call to
31645     `__builtin_saveregs' is written, regardless of what the code is.
31646     This is because the registers must be saved before the function
31647     starts to use them for its own purposes.
31648
31649 -- Macro: __builtin_next_arg (LASTARG)
31650     This builtin returns the address of the first anonymous stack
31651     argument, as type `void *'.  If `ARGS_GROW_DOWNWARD', it returns
31652     the address of the location above the first anonymous stack
31653     argument.  Use it in `va_start' to initialize the pointer for
31654     fetching arguments from the stack.  Also use it in `va_start' to
31655     verify that the second parameter LASTARG is the last named argument
31656     of the current function.
31657
31658 -- Macro: __builtin_classify_type (OBJECT)
31659     Since each machine has its own conventions for which data types are
31660     passed in which kind of register, your implementation of `va_arg'
31661     has to embody these conventions.  The easiest way to categorize the
31662     specified data type is to use `__builtin_classify_type' together
31663     with `sizeof' and `__alignof__'.
31664
31665     `__builtin_classify_type' ignores the value of OBJECT, considering
31666     only its data type.  It returns an integer describing what kind of
31667     type that is--integer, floating, pointer, structure, and so on.
31668
31669     The file `typeclass.h' defines an enumeration that you can use to
31670     interpret the values of `__builtin_classify_type'.
31671
31672 These machine description macros help implement varargs:
31673
31674 -- Target Hook: rtx TARGET_EXPAND_BUILTIN_SAVEREGS (void)
31675     If defined, this hook produces the machine-specific code for a
31676     call to `__builtin_saveregs'.  This code will be moved to the very
31677     beginning of the function, before any parameter access are made.
31678     The return value of this function should be an RTX that contains
31679     the value to use as the return of `__builtin_saveregs'.
31680
31681 -- Target Hook: void TARGET_SETUP_INCOMING_VARARGS (cumulative_args_t
31682          ARGS_SO_FAR, enum machine_mode MODE, tree TYPE, int
31683          *PRETEND_ARGS_SIZE, int SECOND_TIME)
31684     This target hook offers an alternative to using
31685     `__builtin_saveregs' and defining the hook
31686     `TARGET_EXPAND_BUILTIN_SAVEREGS'.  Use it to store the anonymous
31687     register arguments into the stack so that all the arguments appear
31688     to have been passed consecutively on the stack.  Once this is
31689     done, you can use the standard implementation of varargs that
31690     works for machines that pass all their arguments on the stack.
31691
31692     The argument ARGS_SO_FAR points to the `CUMULATIVE_ARGS' data
31693     structure, containing the values that are obtained after
31694     processing the named arguments.  The arguments MODE and TYPE
31695     describe the last named argument--its machine mode and its data
31696     type as a tree node.
31697
31698     The target hook should do two things: first, push onto the stack
31699     all the argument registers _not_ used for the named arguments, and
31700     second, store the size of the data thus pushed into the
31701     `int'-valued variable pointed to by PRETEND_ARGS_SIZE.  The value
31702     that you store here will serve as additional offset for setting up
31703     the stack frame.
31704
31705     Because you must generate code to push the anonymous arguments at
31706     compile time without knowing their data types,
31707     `TARGET_SETUP_INCOMING_VARARGS' is only useful on machines that
31708     have just a single category of argument register and use it
31709     uniformly for all data types.
31710
31711     If the argument SECOND_TIME is nonzero, it means that the
31712     arguments of the function are being analyzed for the second time.
31713     This happens for an inline function, which is not actually
31714     compiled until the end of the source file.  The hook
31715     `TARGET_SETUP_INCOMING_VARARGS' should not generate any
31716     instructions in this case.
31717
31718 -- Target Hook: bool TARGET_STRICT_ARGUMENT_NAMING (cumulative_args_t
31719          CA)
31720     Define this hook to return `true' if the location where a function
31721     argument is passed depends on whether or not it is a named
31722     argument.
31723
31724     This hook controls how the NAMED argument to `TARGET_FUNCTION_ARG'
31725     is set for varargs and stdarg functions.  If this hook returns
31726     `true', the NAMED argument is always true for named arguments, and
31727     false for unnamed arguments.  If it returns `false', but
31728     `TARGET_PRETEND_OUTGOING_VARARGS_NAMED' returns `true', then all
31729     arguments are treated as named.  Otherwise, all named arguments
31730     except the last are treated as named.
31731
31732     You need not define this hook if it always returns `false'.
31733
31734 -- Target Hook: bool TARGET_PRETEND_OUTGOING_VARARGS_NAMED
31735          (cumulative_args_t CA)
31736     If you need to conditionally change ABIs so that one works with
31737     `TARGET_SETUP_INCOMING_VARARGS', but the other works like neither
31738     `TARGET_SETUP_INCOMING_VARARGS' nor
31739     `TARGET_STRICT_ARGUMENT_NAMING' was defined, then define this hook
31740     to return `true' if `TARGET_SETUP_INCOMING_VARARGS' is used,
31741     `false' otherwise.  Otherwise, you should not define this hook.
31742
31743
31744File: gccint.info,  Node: Trampolines,  Next: Library Calls,  Prev: Varargs,  Up: Target Macros
31745
3174617.12 Trampolines for Nested Functions
31747======================================
31748
31749A "trampoline" is a small piece of code that is created at run time
31750when the address of a nested function is taken.  It normally resides on
31751the stack, in the stack frame of the containing function.  These macros
31752tell GCC how to generate code to allocate and initialize a trampoline.
31753
31754 The instructions in the trampoline must do two things: load a constant
31755address into the static chain register, and jump to the real address of
31756the nested function.  On CISC machines such as the m68k, this requires
31757two instructions, a move immediate and a jump.  Then the two addresses
31758exist in the trampoline as word-long immediate operands.  On RISC
31759machines, it is often necessary to load each address into a register in
31760two parts.  Then pieces of each address form separate immediate
31761operands.
31762
31763 The code generated to initialize the trampoline must store the variable
31764parts--the static chain value and the function address--into the
31765immediate operands of the instructions.  On a CISC machine, this is
31766simply a matter of copying each address to a memory reference at the
31767proper offset from the start of the trampoline.  On a RISC machine, it
31768may be necessary to take out pieces of the address and store them
31769separately.
31770
31771 -- Target Hook: void TARGET_ASM_TRAMPOLINE_TEMPLATE (FILE *F)
31772     This hook is called by `assemble_trampoline_template' to output,
31773     on the stream F, assembler code for a block of data that contains
31774     the constant parts of a trampoline.  This code should not include a
31775     label--the label is taken care of automatically.
31776
31777     If you do not define this hook, it means no template is needed for
31778     the target.  Do not define this hook on systems where the block
31779     move code to copy the trampoline into place would be larger than
31780     the code to generate it on the spot.
31781
31782 -- Macro: TRAMPOLINE_SECTION
31783     Return the section into which the trampoline template is to be
31784     placed (*note Sections::).  The default value is
31785     `readonly_data_section'.
31786
31787 -- Macro: TRAMPOLINE_SIZE
31788     A C expression for the size in bytes of the trampoline, as an
31789     integer.
31790
31791 -- Macro: TRAMPOLINE_ALIGNMENT
31792     Alignment required for trampolines, in bits.
31793
31794     If you don't define this macro, the value of `FUNCTION_ALIGNMENT'
31795     is used for aligning trampolines.
31796
31797 -- Target Hook: void TARGET_TRAMPOLINE_INIT (rtx M_TRAMP, tree FNDECL,
31798          rtx STATIC_CHAIN)
31799     This hook is called to initialize a trampoline.  M_TRAMP is an RTX
31800     for the memory block for the trampoline; FNDECL is the
31801     `FUNCTION_DECL' for the nested function; STATIC_CHAIN is an RTX
31802     for the static chain value that should be passed to the function
31803     when it is called.
31804
31805     If the target defines `TARGET_ASM_TRAMPOLINE_TEMPLATE', then the
31806     first thing this hook should do is emit a block move into M_TRAMP
31807     from the memory block returned by `assemble_trampoline_template'.
31808     Note that the block move need only cover the constant parts of the
31809     trampoline.  If the target isolates the variable parts of the
31810     trampoline to the end, not all `TRAMPOLINE_SIZE' bytes need be
31811     copied.
31812
31813     If the target requires any other actions, such as flushing caches
31814     or enabling stack execution, these actions should be performed
31815     after initializing the trampoline proper.
31816
31817 -- Target Hook: rtx TARGET_TRAMPOLINE_ADJUST_ADDRESS (rtx ADDR)
31818     This hook should perform any machine-specific adjustment in the
31819     address of the trampoline.  Its argument contains the address of
31820     the memory block that was passed to `TARGET_TRAMPOLINE_INIT'.  In
31821     case the address to be used for a function call should be
31822     different from the address at which the template was stored, the
31823     different address should be returned; otherwise ADDR should be
31824     returned unchanged.  If this hook is not defined, ADDR will be
31825     used for function calls.
31826
31827 Implementing trampolines is difficult on many machines because they
31828have separate instruction and data caches.  Writing into a stack
31829location fails to clear the memory in the instruction cache, so when
31830the program jumps to that location, it executes the old contents.
31831
31832 Here are two possible solutions.  One is to clear the relevant parts of
31833the instruction cache whenever a trampoline is set up.  The other is to
31834make all trampolines identical, by having them jump to a standard
31835subroutine.  The former technique makes trampoline execution faster; the
31836latter makes initialization faster.
31837
31838 To clear the instruction cache when a trampoline is initialized, define
31839the following macro.
31840
31841 -- Macro: CLEAR_INSN_CACHE (BEG, END)
31842     If defined, expands to a C expression clearing the _instruction
31843     cache_ in the specified interval.  The definition of this macro
31844     would typically be a series of `asm' statements.  Both BEG and END
31845     are both pointer expressions.
31846
31847 To use a standard subroutine, define the following macro.  In addition,
31848you must make sure that the instructions in a trampoline fill an entire
31849cache line with identical instructions, or else ensure that the
31850beginning of the trampoline code is always aligned at the same point in
31851its cache line.  Look in `m68k.h' as a guide.
31852
31853 -- Macro: TRANSFER_FROM_TRAMPOLINE
31854     Define this macro if trampolines need a special subroutine to do
31855     their work.  The macro should expand to a series of `asm'
31856     statements which will be compiled with GCC.  They go in a library
31857     function named `__transfer_from_trampoline'.
31858
31859     If you need to avoid executing the ordinary prologue code of a
31860     compiled C function when you jump to the subroutine, you can do so
31861     by placing a special label of your own in the assembler code.  Use
31862     one `asm' statement to generate an assembler label, and another to
31863     make the label global.  Then trampolines can use that label to
31864     jump directly to your special assembler code.
31865
31866
31867File: gccint.info,  Node: Library Calls,  Next: Addressing Modes,  Prev: Trampolines,  Up: Target Macros
31868
3186917.13 Implicit Calls to Library Routines
31870========================================
31871
31872Here is an explanation of implicit calls to library routines.
31873
31874 -- Macro: DECLARE_LIBRARY_RENAMES
31875     This macro, if defined, should expand to a piece of C code that
31876     will get expanded when compiling functions for libgcc.a.  It can
31877     be used to provide alternate names for GCC's internal library
31878     functions if there are ABI-mandated names that the compiler should
31879     provide.
31880
31881 -- Target Hook: void TARGET_INIT_LIBFUNCS (void)
31882     This hook should declare additional library routines or rename
31883     existing ones, using the functions `set_optab_libfunc' and
31884     `init_one_libfunc' defined in `optabs.c'.  `init_optabs' calls
31885     this macro after initializing all the normal library routines.
31886
31887     The default is to do nothing.  Most ports don't need to define
31888     this hook.
31889
31890 -- Target Hook: bool TARGET_LIBFUNC_GNU_PREFIX
31891     If false (the default), internal library routines start with two
31892     underscores.  If set to true, these routines start with `__gnu_'
31893     instead.  E.g., `__muldi3' changes to `__gnu_muldi3'.  This
31894     currently only affects functions defined in `libgcc2.c'.  If this
31895     is set to true, the `tm.h' file must also `#define
31896     LIBGCC2_GNU_PREFIX'.
31897
31898 -- Macro: FLOAT_LIB_COMPARE_RETURNS_BOOL (MODE, COMPARISON)
31899     This macro should return `true' if the library routine that
31900     implements the floating point comparison operator COMPARISON in
31901     mode MODE will return a boolean, and FALSE if it will return a
31902     tristate.
31903
31904     GCC's own floating point libraries return tristates from the
31905     comparison operators, so the default returns false always.  Most
31906     ports don't need to define this macro.
31907
31908 -- Macro: TARGET_LIB_INT_CMP_BIASED
31909     This macro should evaluate to `true' if the integer comparison
31910     functions (like `__cmpdi2') return 0 to indicate that the first
31911     operand is smaller than the second, 1 to indicate that they are
31912     equal, and 2 to indicate that the first operand is greater than
31913     the second.  If this macro evaluates to `false' the comparison
31914     functions return -1, 0, and 1 instead of 0, 1, and 2.  If the
31915     target uses the routines in `libgcc.a', you do not need to define
31916     this macro.
31917
31918 -- Macro: TARGET_EDOM
31919     The value of `EDOM' on the target machine, as a C integer constant
31920     expression.  If you don't define this macro, GCC does not attempt
31921     to deposit the value of `EDOM' into `errno' directly.  Look in
31922     `/usr/include/errno.h' to find the value of `EDOM' on your system.
31923
31924     If you do not define `TARGET_EDOM', then compiled code reports
31925     domain errors by calling the library function and letting it
31926     report the error.  If mathematical functions on your system use
31927     `matherr' when there is an error, then you should leave
31928     `TARGET_EDOM' undefined so that `matherr' is used normally.
31929
31930 -- Macro: GEN_ERRNO_RTX
31931     Define this macro as a C expression to create an rtl expression
31932     that refers to the global "variable" `errno'.  (On certain systems,
31933     `errno' may not actually be a variable.)  If you don't define this
31934     macro, a reasonable default is used.
31935
31936 -- Macro: TARGET_C99_FUNCTIONS
31937     When this macro is nonzero, GCC will implicitly optimize `sin'
31938     calls into `sinf' and similarly for other functions defined by C99
31939     standard.  The default is zero because a number of existing
31940     systems lack support for these functions in their runtime so this
31941     macro needs to be redefined to one on systems that do support the
31942     C99 runtime.
31943
31944 -- Macro: TARGET_HAS_SINCOS
31945     When this macro is nonzero, GCC will implicitly optimize calls to
31946     `sin' and `cos' with the same argument to a call to `sincos'.  The
31947     default is zero.  The target has to provide the following
31948     functions:
31949          void sincos(double x, double *sin, double *cos);
31950          void sincosf(float x, float *sin, float *cos);
31951          void sincosl(long double x, long double *sin, long double *cos);
31952
31953 -- Macro: NEXT_OBJC_RUNTIME
31954     Set this macro to 1 to use the "NeXT" Objective-C message sending
31955     conventions by default.  This calling convention involves passing
31956     the object, the selector and the method arguments all at once to
31957     the method-lookup library function.  This is the usual setting
31958     when targeting Darwin/Mac OS X systems, which have the NeXT
31959     runtime installed.
31960
31961     If the macro is set to 0, the "GNU" Objective-C message sending
31962     convention will be used by default.  This convention passes just
31963     the object and the selector to the method-lookup function, which
31964     returns a pointer to the method.
31965
31966     In either case, it remains possible to select code-generation for
31967     the alternate scheme, by means of compiler command line switches.
31968
31969
31970File: gccint.info,  Node: Addressing Modes,  Next: Anchored Addresses,  Prev: Library Calls,  Up: Target Macros
31971
3197217.14 Addressing Modes
31973======================
31974
31975This is about addressing modes.
31976
31977 -- Macro: HAVE_PRE_INCREMENT
31978 -- Macro: HAVE_PRE_DECREMENT
31979 -- Macro: HAVE_POST_INCREMENT
31980 -- Macro: HAVE_POST_DECREMENT
31981     A C expression that is nonzero if the machine supports
31982     pre-increment, pre-decrement, post-increment, or post-decrement
31983     addressing respectively.
31984
31985 -- Macro: HAVE_PRE_MODIFY_DISP
31986 -- Macro: HAVE_POST_MODIFY_DISP
31987     A C expression that is nonzero if the machine supports pre- or
31988     post-address side-effect generation involving constants other than
31989     the size of the memory operand.
31990
31991 -- Macro: HAVE_PRE_MODIFY_REG
31992 -- Macro: HAVE_POST_MODIFY_REG
31993     A C expression that is nonzero if the machine supports pre- or
31994     post-address side-effect generation involving a register
31995     displacement.
31996
31997 -- Macro: CONSTANT_ADDRESS_P (X)
31998     A C expression that is 1 if the RTX X is a constant which is a
31999     valid address.  On most machines the default definition of
32000     `(CONSTANT_P (X) && GET_CODE (X) != CONST_DOUBLE)' is acceptable,
32001     but a few machines are more restrictive as to which constant
32002     addresses are supported.
32003
32004 -- Macro: CONSTANT_P (X)
32005     `CONSTANT_P', which is defined by target-independent code, accepts
32006     integer-values expressions whose values are not explicitly known,
32007     such as `symbol_ref', `label_ref', and `high' expressions and
32008     `const' arithmetic expressions, in addition to `const_int' and
32009     `const_double' expressions.
32010
32011 -- Macro: MAX_REGS_PER_ADDRESS
32012     A number, the maximum number of registers that can appear in a
32013     valid memory address.  Note that it is up to you to specify a
32014     value equal to the maximum number that
32015     `TARGET_LEGITIMATE_ADDRESS_P' would ever accept.
32016
32017 -- Target Hook: bool TARGET_LEGITIMATE_ADDRESS_P (enum machine_mode
32018          MODE, rtx X, bool STRICT)
32019     A function that returns whether X (an RTX) is a legitimate memory
32020     address on the target machine for a memory operand of mode MODE.
32021
32022     Legitimate addresses are defined in two variants: a strict variant
32023     and a non-strict one.  The STRICT parameter chooses which variant
32024     is desired by the caller.
32025
32026     The strict variant is used in the reload pass.  It must be defined
32027     so that any pseudo-register that has not been allocated a hard
32028     register is considered a memory reference.  This is because in
32029     contexts where some kind of register is required, a
32030     pseudo-register with no hard register must be rejected.  For
32031     non-hard registers, the strict variant should look up the
32032     `reg_renumber' array; it should then proceed using the hard
32033     register number in the array, or treat the pseudo as a memory
32034     reference if the array holds `-1'.
32035
32036     The non-strict variant is used in other passes.  It must be
32037     defined to accept all pseudo-registers in every context where some
32038     kind of register is required.
32039
32040     Normally, constant addresses which are the sum of a `symbol_ref'
32041     and an integer are stored inside a `const' RTX to mark them as
32042     constant.  Therefore, there is no need to recognize such sums
32043     specifically as legitimate addresses.  Normally you would simply
32044     recognize any `const' as legitimate.
32045
32046     Usually `PRINT_OPERAND_ADDRESS' is not prepared to handle constant
32047     sums that are not marked with  `const'.  It assumes that a naked
32048     `plus' indicates indexing.  If so, then you _must_ reject such
32049     naked constant sums as illegitimate addresses, so that none of
32050     them will be given to `PRINT_OPERAND_ADDRESS'.
32051
32052     On some machines, whether a symbolic address is legitimate depends
32053     on the section that the address refers to.  On these machines,
32054     define the target hook `TARGET_ENCODE_SECTION_INFO' to store the
32055     information into the `symbol_ref', and then check for it here.
32056     When you see a `const', you will have to look inside it to find the
32057     `symbol_ref' in order to determine the section.  *Note Assembler
32058     Format::.
32059
32060     Some ports are still using a deprecated legacy substitute for this
32061     hook, the `GO_IF_LEGITIMATE_ADDRESS' macro.  This macro has this
32062     syntax:
32063
32064          #define GO_IF_LEGITIMATE_ADDRESS (MODE, X, LABEL)
32065
32066     and should `goto LABEL' if the address X is a valid address on the
32067     target machine for a memory operand of mode MODE.
32068
32069     Compiler source files that want to use the strict variant of this
32070     macro define the macro `REG_OK_STRICT'.  You should use an `#ifdef
32071     REG_OK_STRICT' conditional to define the strict variant in that
32072     case and the non-strict variant otherwise.
32073
32074     Using the hook is usually simpler because it limits the number of
32075     files that are recompiled when changes are made.
32076
32077 -- Macro: TARGET_MEM_CONSTRAINT
32078     A single character to be used instead of the default `'m''
32079     character for general memory addresses.  This defines the
32080     constraint letter which matches the memory addresses accepted by
32081     `TARGET_LEGITIMATE_ADDRESS_P'.  Define this macro if you want to
32082     support new address formats in your back end without changing the
32083     semantics of the `'m'' constraint.  This is necessary in order to
32084     preserve functionality of inline assembly constructs using the
32085     `'m'' constraint.
32086
32087 -- Macro: FIND_BASE_TERM (X)
32088     A C expression to determine the base term of address X, or to
32089     provide a simplified version of X from which `alias.c' can easily
32090     find the base term.  This macro is used in only two places:
32091     `find_base_value' and `find_base_term' in `alias.c'.
32092
32093     It is always safe for this macro to not be defined.  It exists so
32094     that alias analysis can understand machine-dependent addresses.
32095
32096     The typical use of this macro is to handle addresses containing a
32097     label_ref or symbol_ref within an UNSPEC.
32098
32099 -- Target Hook: rtx TARGET_LEGITIMIZE_ADDRESS (rtx X, rtx OLDX, enum
32100          machine_mode MODE)
32101     This hook is given an invalid memory address X for an operand of
32102     mode MODE and should try to return a valid memory address.
32103
32104     X will always be the result of a call to `break_out_memory_refs',
32105     and OLDX will be the operand that was given to that function to
32106     produce X.
32107
32108     The code of the hook should not alter the substructure of X.  If
32109     it transforms X into a more legitimate form, it should return the
32110     new X.
32111
32112     It is not necessary for this hook to come up with a legitimate
32113     address, with the exception of native TLS addresses (*note
32114     Emulated TLS::).  The compiler has standard ways of doing so in
32115     all cases.  In fact, if the target supports only emulated TLS, it
32116     is safe to omit this hook or make it return X if it cannot find a
32117     valid way to legitimize the address.  But often a machine-dependent
32118     strategy can generate better code.
32119
32120 -- Macro: LEGITIMIZE_RELOAD_ADDRESS (X, MODE, OPNUM, TYPE, IND_LEVELS,
32121          WIN)
32122     A C compound statement that attempts to replace X, which is an
32123     address that needs reloading, with a valid memory address for an
32124     operand of mode MODE.  WIN will be a C statement label elsewhere
32125     in the code.  It is not necessary to define this macro, but it
32126     might be useful for performance reasons.
32127
32128     For example, on the i386, it is sometimes possible to use a single
32129     reload register instead of two by reloading a sum of two pseudo
32130     registers into a register.  On the other hand, for number of RISC
32131     processors offsets are limited so that often an intermediate
32132     address needs to be generated in order to address a stack slot.
32133     By defining `LEGITIMIZE_RELOAD_ADDRESS' appropriately, the
32134     intermediate addresses generated for adjacent some stack slots can
32135     be made identical, and thus be shared.
32136
32137     _Note_: This macro should be used with caution.  It is necessary
32138     to know something of how reload works in order to effectively use
32139     this, and it is quite easy to produce macros that build in too
32140     much knowledge of reload internals.
32141
32142     _Note_: This macro must be able to reload an address created by a
32143     previous invocation of this macro.  If it fails to handle such
32144     addresses then the compiler may generate incorrect code or abort.
32145
32146     The macro definition should use `push_reload' to indicate parts
32147     that need reloading; OPNUM, TYPE and IND_LEVELS are usually
32148     suitable to be passed unaltered to `push_reload'.
32149
32150     The code generated by this macro must not alter the substructure of
32151     X.  If it transforms X into a more legitimate form, it should
32152     assign X (which will always be a C variable) a new value.  This
32153     also applies to parts that you change indirectly by calling
32154     `push_reload'.
32155
32156     The macro definition may use `strict_memory_address_p' to test if
32157     the address has become legitimate.
32158
32159     If you want to change only a part of X, one standard way of doing
32160     this is to use `copy_rtx'.  Note, however, that it unshares only a
32161     single level of rtl.  Thus, if the part to be changed is not at the
32162     top level, you'll need to replace first the top level.  It is not
32163     necessary for this macro to come up with a legitimate address;
32164     but often a machine-dependent strategy can generate better code.
32165
32166 -- Target Hook: bool TARGET_MODE_DEPENDENT_ADDRESS_P (const_rtx ADDR,
32167          addr_space_t ADDRSPACE)
32168     This hook returns `true' if memory address ADDR in address space
32169     ADDRSPACE can have different meanings depending on the machine
32170     mode of the memory reference it is used for or if the address is
32171     valid for some modes but not others.
32172
32173     Autoincrement and autodecrement addresses typically have
32174     mode-dependent effects because the amount of the increment or
32175     decrement is the size of the operand being addressed.  Some
32176     machines have other mode-dependent addresses.  Many RISC machines
32177     have no mode-dependent addresses.
32178
32179     You may assume that ADDR is a valid address for the machine.
32180
32181     The default version of this hook returns `false'.
32182
32183 -- Target Hook: bool TARGET_LEGITIMATE_CONSTANT_P (enum machine_mode
32184          MODE, rtx X)
32185     This hook returns true if X is a legitimate constant for a
32186     MODE-mode immediate operand on the target machine.  You can assume
32187     that X satisfies `CONSTANT_P', so you need not check this.
32188
32189     The default definition returns true.
32190
32191 -- Target Hook: rtx TARGET_DELEGITIMIZE_ADDRESS (rtx X)
32192     This hook is used to undo the possibly obfuscating effects of the
32193     `LEGITIMIZE_ADDRESS' and `LEGITIMIZE_RELOAD_ADDRESS' target
32194     macros.  Some backend implementations of these macros wrap symbol
32195     references inside an `UNSPEC' rtx to represent PIC or similar
32196     addressing modes.  This target hook allows GCC's optimizers to
32197     understand the semantics of these opaque `UNSPEC's by converting
32198     them back into their original form.
32199
32200 -- Target Hook: bool TARGET_CONST_NOT_OK_FOR_DEBUG_P (rtx X)
32201     This hook should return true if X should not be emitted into debug
32202     sections.
32203
32204 -- Target Hook: bool TARGET_CANNOT_FORCE_CONST_MEM (enum machine_mode
32205          MODE, rtx X)
32206     This hook should return true if X is of a form that cannot (or
32207     should not) be spilled to the constant pool.  MODE is the mode of
32208     X.
32209
32210     The default version of this hook returns false.
32211
32212     The primary reason to define this hook is to prevent reload from
32213     deciding that a non-legitimate constant would be better reloaded
32214     from the constant pool instead of spilling and reloading a register
32215     holding the constant.  This restriction is often true of addresses
32216     of TLS symbols for various targets.
32217
32218 -- Target Hook: bool TARGET_USE_BLOCKS_FOR_CONSTANT_P (enum
32219          machine_mode MODE, const_rtx X)
32220     This hook should return true if pool entries for constant X can be
32221     placed in an `object_block' structure.  MODE is the mode of X.
32222
32223     The default version returns false for all constants.
32224
32225 -- Target Hook: bool TARGET_USE_BLOCKS_FOR_DECL_P (const_tree DECL)
32226     This hook should return true if pool entries for DECL should be
32227     placed in an `object_block' structure.
32228
32229     The default version returns true for all decls.
32230
32231 -- Target Hook: tree TARGET_BUILTIN_RECIPROCAL (unsigned FN, bool
32232          MD_FN, bool SQRT)
32233     This hook should return the DECL of a function that implements
32234     reciprocal of the builtin function with builtin function code FN,
32235     or `NULL_TREE' if such a function is not available.  MD_FN is true
32236     when FN is a code of a machine-dependent builtin function.  When
32237     SQRT is true, additional optimizations that apply only to the
32238     reciprocal of a square root function are performed, and only
32239     reciprocals of `sqrt' function are valid.
32240
32241 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_MASK_FOR_LOAD (void)
32242     This hook should return the DECL of a function F that given an
32243     address ADDR as an argument returns a mask M that can be used to
32244     extract from two vectors the relevant data that resides in ADDR in
32245     case ADDR is not properly aligned.
32246
32247     The autovectorizer, when vectorizing a load operation from an
32248     address ADDR that may be unaligned, will generate two vector loads
32249     from the two aligned addresses around ADDR. It then generates a
32250     `REALIGN_LOAD' operation to extract the relevant data from the two
32251     loaded vectors. The first two arguments to `REALIGN_LOAD', V1 and
32252     V2, are the two vectors, each of size VS, and the third argument,
32253     OFF, defines how the data will be extracted from these two
32254     vectors: if OFF is 0, then the returned vector is V2; otherwise,
32255     the returned vector is composed from the last VS-OFF elements of
32256     V1 concatenated to the first OFF elements of V2.
32257
32258     If this hook is defined, the autovectorizer will generate a call
32259     to F (using the DECL tree that this hook returns) and will use the
32260     return value of F as the argument OFF to `REALIGN_LOAD'.
32261     Therefore, the mask M returned by F should comply with the
32262     semantics expected by `REALIGN_LOAD' described above.  If this
32263     hook is not defined, then ADDR will be used as the argument OFF to
32264     `REALIGN_LOAD', in which case the low log2(VS) - 1 bits of ADDR
32265     will be considered.
32266
32267 -- Target Hook: int TARGET_VECTORIZE_BUILTIN_VECTORIZATION_COST (enum
32268          vect_cost_for_stmt TYPE_OF_COST, tree VECTYPE, int MISALIGN)
32269     Returns cost of different scalar or vector statements for
32270     vectorization cost model.  For vector memory operations the cost
32271     may depend on type (VECTYPE) and misalignment value (MISALIGN).
32272
32273 -- Target Hook: bool TARGET_VECTORIZE_VECTOR_ALIGNMENT_REACHABLE
32274          (const_tree TYPE, bool IS_PACKED)
32275     Return true if vector alignment is reachable (by peeling N
32276     iterations) for the given type.
32277
32278 -- Target Hook: bool TARGET_VECTORIZE_VEC_PERM_CONST_OK (enum
32279          MACHINE_MODE, const unsigned char *SEL)
32280     Return true if a vector created for `vec_perm_const' is valid.
32281
32282 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_CONVERSION (unsigned
32283          CODE, tree DEST_TYPE, tree SRC_TYPE)
32284     This hook should return the DECL of a function that implements
32285     conversion of the input vector of type SRC_TYPE to type DEST_TYPE.
32286     The value of CODE is one of the enumerators in `enum tree_code' and
32287     specifies how the conversion is to be applied (truncation,
32288     rounding, etc.).
32289
32290     If this hook is defined, the autovectorizer will use the
32291     `TARGET_VECTORIZE_BUILTIN_CONVERSION' target hook when vectorizing
32292     conversion. Otherwise, it will return `NULL_TREE'.
32293
32294 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_VECTORIZED_FUNCTION
32295          (tree FNDECL, tree VEC_TYPE_OUT, tree VEC_TYPE_IN)
32296     This hook should return the decl of a function that implements the
32297     vectorized variant of the builtin function with builtin function
32298     code CODE or `NULL_TREE' if such a function is not available.  The
32299     value of FNDECL is the builtin function declaration.  The return
32300     type of the vectorized function shall be of vector type
32301     VEC_TYPE_OUT and the argument types should be VEC_TYPE_IN.
32302
32303 -- Target Hook: bool TARGET_VECTORIZE_SUPPORT_VECTOR_MISALIGNMENT
32304          (enum machine_mode MODE, const_tree TYPE, int MISALIGNMENT,
32305          bool IS_PACKED)
32306     This hook should return true if the target supports misaligned
32307     vector store/load of a specific factor denoted in the MISALIGNMENT
32308     parameter.  The vector store/load should be of machine mode MODE
32309     and the elements in the vectors should be of type TYPE.  IS_PACKED
32310     parameter is true if the memory access is defined in a packed
32311     struct.
32312
32313 -- Target Hook: enum machine_mode TARGET_VECTORIZE_PREFERRED_SIMD_MODE
32314          (enum machine_mode MODE)
32315     This hook should return the preferred mode for vectorizing scalar
32316     mode MODE.  The default is equal to `word_mode', because the
32317     vectorizer can do some transformations even in absence of
32318     specialized SIMD hardware.
32319
32320 -- Target Hook: unsigned int
32321TARGET_VECTORIZE_AUTOVECTORIZE_VECTOR_SIZES (void)
32322     This hook should return a mask of sizes that should be iterated
32323     over after trying to autovectorize using the vector size derived
32324     from the mode returned by `TARGET_VECTORIZE_PREFERRED_SIMD_MODE'.
32325     The default is zero which means to not iterate over other vector
32326     sizes.
32327
32328 -- Target Hook: void * TARGET_VECTORIZE_INIT_COST (struct loop
32329          *LOOP_INFO)
32330     This hook should initialize target-specific data structures in
32331     preparation for modeling the costs of vectorizing a loop or basic
32332     block.  The default allocates three unsigned integers for
32333     accumulating costs for the prologue, body, and epilogue of the
32334     loop or basic block.  If LOOP_INFO is non-NULL, it identifies the
32335     loop being vectorized; otherwise a single block is being
32336     vectorized.
32337
32338 -- Target Hook: unsigned TARGET_VECTORIZE_ADD_STMT_COST (void *DATA,
32339          int COUNT, enum vect_cost_for_stmt KIND, struct
32340          _stmt_vec_info *STMT_INFO, int MISALIGN, enum
32341          vect_cost_model_location WHERE)
32342     This hook should update the target-specific DATA in response to
32343     adding COUNT copies of the given KIND of statement to a loop or
32344     basic block.  The default adds the builtin vectorizer cost for the
32345     copies of the statement to the accumulator specified by WHERE,
32346     (the prologue, body, or epilogue) and returns the amount added.
32347     The return value should be viewed as a tentative cost that may
32348     later be revised.
32349
32350 -- Target Hook: void TARGET_VECTORIZE_FINISH_COST (void *DATA,
32351          unsigned *PROLOGUE_COST, unsigned *BODY_COST, unsigned
32352          *EPILOGUE_COST)
32353     This hook should complete calculations of the cost of vectorizing
32354     a loop or basic block based on DATA, and return the prologue,
32355     body, and epilogue costs as unsigned integers.  The default
32356     returns the value of the three accumulators.
32357
32358 -- Target Hook: void TARGET_VECTORIZE_DESTROY_COST_DATA (void *DATA)
32359     This hook should release DATA and any related data structures
32360     allocated by TARGET_VECTORIZE_INIT_COST.  The default releases the
32361     accumulator.
32362
32363 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_TM_LOAD (tree)
32364     This hook should return the built-in decl needed to load a vector
32365     of the given type within a transaction.
32366
32367 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_TM_STORE (tree)
32368     This hook should return the built-in decl needed to store a vector
32369     of the given type within a transaction.
32370
32371 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_GATHER (const_tree
32372          MEM_VECTYPE, const_tree INDEX_TYPE, int SCALE)
32373     Target builtin that implements vector gather operation.
32374     MEM_VECTYPE is the vector type of the load and INDEX_TYPE is
32375     scalar type of the index, scaled by SCALE.  The default is
32376     `NULL_TREE' which means to not vectorize gather loads.
32377
32378
32379File: gccint.info,  Node: Anchored Addresses,  Next: Condition Code,  Prev: Addressing Modes,  Up: Target Macros
32380
3238117.15 Anchored Addresses
32382========================
32383
32384GCC usually addresses every static object as a separate entity.  For
32385example, if we have:
32386
32387     static int a, b, c;
32388     int foo (void) { return a + b + c; }
32389
32390 the code for `foo' will usually calculate three separate symbolic
32391addresses: those of `a', `b' and `c'.  On some targets, it would be
32392better to calculate just one symbolic address and access the three
32393variables relative to it.  The equivalent pseudocode would be something
32394like:
32395
32396     int foo (void)
32397     {
32398       register int *xr = &x;
32399       return xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
32400     }
32401
32402 (which isn't valid C).  We refer to shared addresses like `x' as
32403"section anchors".  Their use is controlled by `-fsection-anchors'.
32404
32405 The hooks below describe the target properties that GCC needs to know
32406in order to make effective use of section anchors.  It won't use
32407section anchors at all unless either `TARGET_MIN_ANCHOR_OFFSET' or
32408`TARGET_MAX_ANCHOR_OFFSET' is set to a nonzero value.
32409
32410 -- Target Hook: HOST_WIDE_INT TARGET_MIN_ANCHOR_OFFSET
32411     The minimum offset that should be applied to a section anchor.  On
32412     most targets, it should be the smallest offset that can be applied
32413     to a base register while still giving a legitimate address for
32414     every mode.  The default value is 0.
32415
32416 -- Target Hook: HOST_WIDE_INT TARGET_MAX_ANCHOR_OFFSET
32417     Like `TARGET_MIN_ANCHOR_OFFSET', but the maximum (inclusive)
32418     offset that should be applied to section anchors.  The default
32419     value is 0.
32420
32421 -- Target Hook: void TARGET_ASM_OUTPUT_ANCHOR (rtx X)
32422     Write the assembly code to define section anchor X, which is a
32423     `SYMBOL_REF' for which `SYMBOL_REF_ANCHOR_P (X)' is true.  The
32424     hook is called with the assembly output position set to the
32425     beginning of `SYMBOL_REF_BLOCK (X)'.
32426
32427     If `ASM_OUTPUT_DEF' is available, the hook's default definition
32428     uses it to define the symbol as `. + SYMBOL_REF_BLOCK_OFFSET (X)'.
32429     If `ASM_OUTPUT_DEF' is not available, the hook's default definition
32430     is `NULL', which disables the use of section anchors altogether.
32431
32432 -- Target Hook: bool TARGET_USE_ANCHORS_FOR_SYMBOL_P (const_rtx X)
32433     Return true if GCC should attempt to use anchors to access
32434     `SYMBOL_REF' X.  You can assume `SYMBOL_REF_HAS_BLOCK_INFO_P (X)'
32435     and `!SYMBOL_REF_ANCHOR_P (X)'.
32436
32437     The default version is correct for most targets, but you might
32438     need to intercept this hook to handle things like target-specific
32439     attributes or target-specific sections.
32440
32441
32442File: gccint.info,  Node: Condition Code,  Next: Costs,  Prev: Anchored Addresses,  Up: Target Macros
32443
3244417.16 Condition Code Status
32445===========================
32446
32447The macros in this section can be split in two families, according to
32448the two ways of representing condition codes in GCC.
32449
32450 The first representation is the so called `(cc0)' representation
32451(*note Jump Patterns::), where all instructions can have an implicit
32452clobber of the condition codes.  The second is the condition code
32453register representation, which provides better schedulability for
32454architectures that do have a condition code register, but on which most
32455instructions do not affect it.  The latter category includes most RISC
32456machines.
32457
32458 The implicit clobbering poses a strong restriction on the placement of
32459the definition and use of the condition code, which need to be in
32460adjacent insns for machines using `(cc0)'.  This can prevent important
32461optimizations on some machines.  For example, on the IBM RS/6000, there
32462is a delay for taken branches unless the condition code register is set
32463three instructions earlier than the conditional branch.  The instruction
32464scheduler cannot perform this optimization if it is not permitted to
32465separate the definition and use of the condition code register.
32466
32467 For this reason, it is possible and suggested to use a register to
32468represent the condition code for new ports.  If there is a specific
32469condition code register in the machine, use a hard register.  If the
32470condition code or comparison result can be placed in any general
32471register, or if there are multiple condition registers, use a pseudo
32472register.  Registers used to store the condition code value will
32473usually have a mode that is in class `MODE_CC'.
32474
32475 Alternatively, you can use `BImode' if the comparison operator is
32476specified already in the compare instruction.  In this case, you are not
32477interested in most macros in this section.
32478
32479* Menu:
32480
32481* CC0 Condition Codes::      Old style representation of condition codes.
32482* MODE_CC Condition Codes::  Modern representation of condition codes.
32483
32484
32485File: gccint.info,  Node: CC0 Condition Codes,  Next: MODE_CC Condition Codes,  Up: Condition Code
32486
3248717.16.1 Representation of condition codes using `(cc0)'
32488-------------------------------------------------------
32489
32490The file `conditions.h' defines a variable `cc_status' to describe how
32491the condition code was computed (in case the interpretation of the
32492condition code depends on the instruction that it was set by).  This
32493variable contains the RTL expressions on which the condition code is
32494currently based, and several standard flags.
32495
32496 Sometimes additional machine-specific flags must be defined in the
32497machine description header file.  It can also add additional
32498machine-specific information by defining `CC_STATUS_MDEP'.
32499
32500 -- Macro: CC_STATUS_MDEP
32501     C code for a data type which is used for declaring the `mdep'
32502     component of `cc_status'.  It defaults to `int'.
32503
32504     This macro is not used on machines that do not use `cc0'.
32505
32506 -- Macro: CC_STATUS_MDEP_INIT
32507     A C expression to initialize the `mdep' field to "empty".  The
32508     default definition does nothing, since most machines don't use the
32509     field anyway.  If you want to use the field, you should probably
32510     define this macro to initialize it.
32511
32512     This macro is not used on machines that do not use `cc0'.
32513
32514 -- Macro: NOTICE_UPDATE_CC (EXP, INSN)
32515     A C compound statement to set the components of `cc_status'
32516     appropriately for an insn INSN whose body is EXP.  It is this
32517     macro's responsibility to recognize insns that set the condition
32518     code as a byproduct of other activity as well as those that
32519     explicitly set `(cc0)'.
32520
32521     This macro is not used on machines that do not use `cc0'.
32522
32523     If there are insns that do not set the condition code but do alter
32524     other machine registers, this macro must check to see whether they
32525     invalidate the expressions that the condition code is recorded as
32526     reflecting.  For example, on the 68000, insns that store in address
32527     registers do not set the condition code, which means that usually
32528     `NOTICE_UPDATE_CC' can leave `cc_status' unaltered for such insns.
32529     But suppose that the previous insn set the condition code based on
32530     location `a4@(102)' and the current insn stores a new value in
32531     `a4'.  Although the condition code is not changed by this, it will
32532     no longer be true that it reflects the contents of `a4@(102)'.
32533     Therefore, `NOTICE_UPDATE_CC' must alter `cc_status' in this case
32534     to say that nothing is known about the condition code value.
32535
32536     The definition of `NOTICE_UPDATE_CC' must be prepared to deal with
32537     the results of peephole optimization: insns whose patterns are
32538     `parallel' RTXs containing various `reg', `mem' or constants which
32539     are just the operands.  The RTL structure of these insns is not
32540     sufficient to indicate what the insns actually do.  What
32541     `NOTICE_UPDATE_CC' should do when it sees one is just to run
32542     `CC_STATUS_INIT'.
32543
32544     A possible definition of `NOTICE_UPDATE_CC' is to call a function
32545     that looks at an attribute (*note Insn Attributes::) named, for
32546     example, `cc'.  This avoids having detailed information about
32547     patterns in two places, the `md' file and in `NOTICE_UPDATE_CC'.
32548
32549
32550File: gccint.info,  Node: MODE_CC Condition Codes,  Prev: CC0 Condition Codes,  Up: Condition Code
32551
3255217.16.2 Representation of condition codes using registers
32553---------------------------------------------------------
32554
32555 -- Macro: SELECT_CC_MODE (OP, X, Y)
32556     On many machines, the condition code may be produced by other
32557     instructions than compares, for example the branch can use
32558     directly the condition code set by a subtract instruction.
32559     However, on some machines when the condition code is set this way
32560     some bits (such as the overflow bit) are not set in the same way
32561     as a test instruction, so that a different branch instruction must
32562     be used for some conditional branches.  When this happens, use the
32563     machine mode of the condition code register to record different
32564     formats of the condition code register.  Modes can also be used to
32565     record which compare instruction (e.g. a signed or an unsigned
32566     comparison) produced the condition codes.
32567
32568     If other modes than `CCmode' are required, add them to
32569     `MACHINE-modes.def' and define `SELECT_CC_MODE' to choose a mode
32570     given an operand of a compare.  This is needed because the modes
32571     have to be chosen not only during RTL generation but also, for
32572     example, by instruction combination.  The result of
32573     `SELECT_CC_MODE' should be consistent with the mode used in the
32574     patterns; for example to support the case of the add on the SPARC
32575     discussed above, we have the pattern
32576
32577          (define_insn ""
32578            [(set (reg:CC_NOOV 0)
32579                  (compare:CC_NOOV
32580                    (plus:SI (match_operand:SI 0 "register_operand" "%r")
32581                             (match_operand:SI 1 "arith_operand" "rI"))
32582                    (const_int 0)))]
32583            ""
32584            "...")
32585
32586     together with a `SELECT_CC_MODE' that returns `CC_NOOVmode' for
32587     comparisons whose argument is a `plus':
32588
32589          #define SELECT_CC_MODE(OP,X,Y) \
32590            (GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT           \
32591             ? ((OP == LT || OP == LE || OP == GT || OP == GE)     \
32592                ? CCFPEmode : CCFPmode)                            \
32593             : ((GET_CODE (X) == PLUS || GET_CODE (X) == MINUS     \
32594                 || GET_CODE (X) == NEG || GET_CODE (x) == ASHIFT) \
32595                ? CC_NOOVmode : CCmode))
32596
32597     Another reason to use modes is to retain information on which
32598     operands were used by the comparison; see `REVERSIBLE_CC_MODE'
32599     later in this section.
32600
32601     You should define this macro if and only if you define extra CC
32602     modes in `MACHINE-modes.def'.
32603
32604 -- Target Hook: void TARGET_CANONICALIZE_COMPARISON (int *CODE, rtx
32605          *OP0, rtx *OP1, bool OP0_PRESERVE_VALUE) (CODE, OP0, OP1,
32606          OP0_PRESERVE_VALUE)
32607     On some machines not all possible comparisons are defined, but you
32608     can convert an invalid comparison into a valid one.  For example,
32609     the Alpha does not have a `GT' comparison, but you can use an `LT'
32610     comparison instead and swap the order of the operands.
32611
32612     On such machines, implement this hook to do any required
32613     conversions.  CODE is the initial comparison code and OP0 and OP1
32614     are the left and right operands of the comparison, respectively.
32615     If OP0_PRESERVE_VALUE is `true' the implementation is not allowed
32616     to change the value of OP0 since the value might be used in RTXs
32617     which aren't comparisons.  E.g. the implementation is not allowed
32618     to swap operands in that case.
32619
32620     GCC will not assume that the comparison resulting from this macro
32621     is valid but will see if the resulting insn matches a pattern in
32622     the `md' file.
32623
32624     You need not to implement this hook if it would never change the
32625     comparison code or operands.
32626
32627 -- Macro: REVERSIBLE_CC_MODE (MODE)
32628     A C expression whose value is one if it is always safe to reverse a
32629     comparison whose mode is MODE.  If `SELECT_CC_MODE' can ever
32630     return MODE for a floating-point inequality comparison, then
32631     `REVERSIBLE_CC_MODE (MODE)' must be zero.
32632
32633     You need not define this macro if it would always returns zero or
32634     if the floating-point format is anything other than
32635     `IEEE_FLOAT_FORMAT'.  For example, here is the definition used on
32636     the SPARC, where floating-point inequality comparisons are given
32637     either `CCFPEmode' or `CCFPmode':
32638
32639          #define REVERSIBLE_CC_MODE(MODE) \
32640             ((MODE) != CCFPEmode && (MODE) != CCFPmode)
32641
32642 -- Macro: REVERSE_CONDITION (CODE, MODE)
32643     A C expression whose value is reversed condition code of the CODE
32644     for comparison done in CC_MODE MODE.  The macro is used only in
32645     case `REVERSIBLE_CC_MODE (MODE)' is nonzero.  Define this macro in
32646     case machine has some non-standard way how to reverse certain
32647     conditionals.  For instance in case all floating point conditions
32648     are non-trapping, compiler may freely convert unordered compares
32649     to ordered ones.  Then definition may look like:
32650
32651          #define REVERSE_CONDITION(CODE, MODE) \
32652             ((MODE) != CCFPmode ? reverse_condition (CODE) \
32653              : reverse_condition_maybe_unordered (CODE))
32654
32655 -- Target Hook: bool TARGET_FIXED_CONDITION_CODE_REGS (unsigned int
32656          *P1, unsigned int *P2)
32657     On targets which do not use `(cc0)', and which use a hard register
32658     rather than a pseudo-register to hold condition codes, the regular
32659     CSE passes are often not able to identify cases in which the hard
32660     register is set to a common value.  Use this hook to enable a
32661     small pass which optimizes such cases.  This hook should return
32662     true to enable this pass, and it should set the integers to which
32663     its arguments point to the hard register numbers used for
32664     condition codes.  When there is only one such register, as is true
32665     on most systems, the integer pointed to by P2 should be set to
32666     `INVALID_REGNUM'.
32667
32668     The default version of this hook returns false.
32669
32670 -- Target Hook: enum machine_mode TARGET_CC_MODES_COMPATIBLE (enum
32671          machine_mode M1, enum machine_mode M2)
32672     On targets which use multiple condition code modes in class
32673     `MODE_CC', it is sometimes the case that a comparison can be
32674     validly done in more than one mode.  On such a system, define this
32675     target hook to take two mode arguments and to return a mode in
32676     which both comparisons may be validly done.  If there is no such
32677     mode, return `VOIDmode'.
32678
32679     The default version of this hook checks whether the modes are the
32680     same.  If they are, it returns that mode.  If they are different,
32681     it returns `VOIDmode'.
32682
32683 -- Target Hook: unsigned int TARGET_FLAGS_REGNUM
32684     If the target has a dedicated flags register, and it needs to use
32685     the post-reload comparison elimination pass, then this value
32686     should be set appropriately.
32687
32688
32689File: gccint.info,  Node: Costs,  Next: Scheduling,  Prev: Condition Code,  Up: Target Macros
32690
3269117.17 Describing Relative Costs of Operations
32692=============================================
32693
32694These macros let you describe the relative speed of various operations
32695on the target machine.
32696
32697 -- Macro: REGISTER_MOVE_COST (MODE, FROM, TO)
32698     A C expression for the cost of moving data of mode MODE from a
32699     register in class FROM to one in class TO.  The classes are
32700     expressed using the enumeration values such as `GENERAL_REGS'.  A
32701     value of 2 is the default; other values are interpreted relative to
32702     that.
32703
32704     It is not required that the cost always equal 2 when FROM is the
32705     same as TO; on some machines it is expensive to move between
32706     registers if they are not general registers.
32707
32708     If reload sees an insn consisting of a single `set' between two
32709     hard registers, and if `REGISTER_MOVE_COST' applied to their
32710     classes returns a value of 2, reload does not check to ensure that
32711     the constraints of the insn are met.  Setting a cost of other than
32712     2 will allow reload to verify that the constraints are met.  You
32713     should do this if the `movM' pattern's constraints do not allow
32714     such copying.
32715
32716     These macros are obsolete, new ports should use the target hook
32717     `TARGET_REGISTER_MOVE_COST' instead.
32718
32719 -- Target Hook: int TARGET_REGISTER_MOVE_COST (enum machine_mode MODE,
32720          reg_class_t FROM, reg_class_t TO)
32721     This target hook should return the cost of moving data of mode MODE
32722     from a register in class FROM to one in class TO.  The classes are
32723     expressed using the enumeration values such as `GENERAL_REGS'.  A
32724     value of 2 is the default; other values are interpreted relative to
32725     that.
32726
32727     It is not required that the cost always equal 2 when FROM is the
32728     same as TO; on some machines it is expensive to move between
32729     registers if they are not general registers.
32730
32731     If reload sees an insn consisting of a single `set' between two
32732     hard registers, and if `TARGET_REGISTER_MOVE_COST' applied to their
32733     classes returns a value of 2, reload does not check to ensure that
32734     the constraints of the insn are met.  Setting a cost of other than
32735     2 will allow reload to verify that the constraints are met.  You
32736     should do this if the `movM' pattern's constraints do not allow
32737     such copying.
32738
32739     The default version of this function returns 2.
32740
32741 -- Macro: MEMORY_MOVE_COST (MODE, CLASS, IN)
32742     A C expression for the cost of moving data of mode MODE between a
32743     register of class CLASS and memory; IN is zero if the value is to
32744     be written to memory, nonzero if it is to be read in.  This cost
32745     is relative to those in `REGISTER_MOVE_COST'.  If moving between
32746     registers and memory is more expensive than between two registers,
32747     you should define this macro to express the relative cost.
32748
32749     If you do not define this macro, GCC uses a default cost of 4 plus
32750     the cost of copying via a secondary reload register, if one is
32751     needed.  If your machine requires a secondary reload register to
32752     copy between memory and a register of CLASS but the reload
32753     mechanism is more complex than copying via an intermediate, define
32754     this macro to reflect the actual cost of the move.
32755
32756     GCC defines the function `memory_move_secondary_cost' if secondary
32757     reloads are needed.  It computes the costs due to copying via a
32758     secondary register.  If your machine copies from memory using a
32759     secondary register in the conventional way but the default base
32760     value of 4 is not correct for your machine, define this macro to
32761     add some other value to the result of that function.  The
32762     arguments to that function are the same as to this macro.
32763
32764     These macros are obsolete, new ports should use the target hook
32765     `TARGET_MEMORY_MOVE_COST' instead.
32766
32767 -- Target Hook: int TARGET_MEMORY_MOVE_COST (enum machine_mode MODE,
32768          reg_class_t RCLASS, bool IN)
32769     This target hook should return the cost of moving data of mode MODE
32770     between a register of class RCLASS and memory; IN is `false' if
32771     the value is to be written to memory, `true' if it is to be read
32772     in.  This cost is relative to those in `TARGET_REGISTER_MOVE_COST'.
32773     If moving between registers and memory is more expensive than
32774     between two registers, you should add this target hook to express
32775     the relative cost.
32776
32777     If you do not add this target hook, GCC uses a default cost of 4
32778     plus the cost of copying via a secondary reload register, if one is
32779     needed.  If your machine requires a secondary reload register to
32780     copy between memory and a register of RCLASS but the reload
32781     mechanism is more complex than copying via an intermediate, use
32782     this target hook to reflect the actual cost of the move.
32783
32784     GCC defines the function `memory_move_secondary_cost' if secondary
32785     reloads are needed.  It computes the costs due to copying via a
32786     secondary register.  If your machine copies from memory using a
32787     secondary register in the conventional way but the default base
32788     value of 4 is not correct for your machine, use this target hook
32789     to add some other value to the result of that function.  The
32790     arguments to that function are the same as to this target hook.
32791
32792 -- Macro: BRANCH_COST (SPEED_P, PREDICTABLE_P)
32793     A C expression for the cost of a branch instruction.  A value of 1
32794     is the default; other values are interpreted relative to that.
32795     Parameter SPEED_P is true when the branch in question should be
32796     optimized for speed.  When it is false, `BRANCH_COST' should
32797     return a value optimal for code size rather than performance.
32798     PREDICTABLE_P is true for well-predicted branches. On many
32799     architectures the `BRANCH_COST' can be reduced then.
32800
32801 Here are additional macros which do not specify precise relative costs,
32802but only that certain actions are more expensive than GCC would
32803ordinarily expect.
32804
32805 -- Macro: SLOW_BYTE_ACCESS
32806     Define this macro as a C expression which is nonzero if accessing
32807     less than a word of memory (i.e. a `char' or a `short') is no
32808     faster than accessing a word of memory, i.e., if such access
32809     require more than one instruction or if there is no difference in
32810     cost between byte and (aligned) word loads.
32811
32812     When this macro is not defined, the compiler will access a field by
32813     finding the smallest containing object; when it is defined, a
32814     fullword load will be used if alignment permits.  Unless bytes
32815     accesses are faster than word accesses, using word accesses is
32816     preferable since it may eliminate subsequent memory access if
32817     subsequent accesses occur to other fields in the same word of the
32818     structure, but to different bytes.
32819
32820 -- Macro: SLOW_UNALIGNED_ACCESS (MODE, ALIGNMENT)
32821     Define this macro to be the value 1 if memory accesses described
32822     by the MODE and ALIGNMENT parameters have a cost many times greater
32823     than aligned accesses, for example if they are emulated in a trap
32824     handler.
32825
32826     When this macro is nonzero, the compiler will act as if
32827     `STRICT_ALIGNMENT' were nonzero when generating code for block
32828     moves.  This can cause significantly more instructions to be
32829     produced.  Therefore, do not set this macro nonzero if unaligned
32830     accesses only add a cycle or two to the time for a memory access.
32831
32832     If the value of this macro is always zero, it need not be defined.
32833     If this macro is defined, it should produce a nonzero value when
32834     `STRICT_ALIGNMENT' is nonzero.
32835
32836 -- Macro: MOVE_RATIO (SPEED)
32837     The threshold of number of scalar memory-to-memory move insns,
32838     _below_ which a sequence of insns should be generated instead of a
32839     string move insn or a library call.  Increasing the value will
32840     always make code faster, but eventually incurs high cost in
32841     increased code size.
32842
32843     Note that on machines where the corresponding move insn is a
32844     `define_expand' that emits a sequence of insns, this macro counts
32845     the number of such sequences.
32846
32847     The parameter SPEED is true if the code is currently being
32848     optimized for speed rather than size.
32849
32850     If you don't define this, a reasonable default is used.
32851
32852 -- Macro: MOVE_BY_PIECES_P (SIZE, ALIGNMENT)
32853     A C expression used to determine whether `move_by_pieces' will be
32854     used to copy a chunk of memory, or whether some other block move
32855     mechanism will be used.  Defaults to 1 if `move_by_pieces_ninsns'
32856     returns less than `MOVE_RATIO'.
32857
32858 -- Macro: MOVE_MAX_PIECES
32859     A C expression used by `move_by_pieces' to determine the largest
32860     unit a load or store used to copy memory is.  Defaults to
32861     `MOVE_MAX'.
32862
32863 -- Macro: CLEAR_RATIO (SPEED)
32864     The threshold of number of scalar move insns, _below_ which a
32865     sequence of insns should be generated to clear memory instead of a
32866     string clear insn or a library call.  Increasing the value will
32867     always make code faster, but eventually incurs high cost in
32868     increased code size.
32869
32870     The parameter SPEED is true if the code is currently being
32871     optimized for speed rather than size.
32872
32873     If you don't define this, a reasonable default is used.
32874
32875 -- Macro: CLEAR_BY_PIECES_P (SIZE, ALIGNMENT)
32876     A C expression used to determine whether `clear_by_pieces' will be
32877     used to clear a chunk of memory, or whether some other block clear
32878     mechanism will be used.  Defaults to 1 if `move_by_pieces_ninsns'
32879     returns less than `CLEAR_RATIO'.
32880
32881 -- Macro: SET_RATIO (SPEED)
32882     The threshold of number of scalar move insns, _below_ which a
32883     sequence of insns should be generated to set memory to a constant
32884     value, instead of a block set insn or a library call.  Increasing
32885     the value will always make code faster, but eventually incurs high
32886     cost in increased code size.
32887
32888     The parameter SPEED is true if the code is currently being
32889     optimized for speed rather than size.
32890
32891     If you don't define this, it defaults to the value of `MOVE_RATIO'.
32892
32893 -- Macro: SET_BY_PIECES_P (SIZE, ALIGNMENT)
32894     A C expression used to determine whether `store_by_pieces' will be
32895     used to set a chunk of memory to a constant value, or whether some
32896     other mechanism will be used.  Used by `__builtin_memset' when
32897     storing values other than constant zero.  Defaults to 1 if
32898     `move_by_pieces_ninsns' returns less than `SET_RATIO'.
32899
32900 -- Macro: STORE_BY_PIECES_P (SIZE, ALIGNMENT)
32901     A C expression used to determine whether `store_by_pieces' will be
32902     used to set a chunk of memory to a constant string value, or
32903     whether some other mechanism will be used.  Used by
32904     `__builtin_strcpy' when called with a constant source string.
32905     Defaults to 1 if `move_by_pieces_ninsns' returns less than
32906     `MOVE_RATIO'.
32907
32908 -- Macro: USE_LOAD_POST_INCREMENT (MODE)
32909     A C expression used to determine whether a load postincrement is a
32910     good thing to use for a given mode.  Defaults to the value of
32911     `HAVE_POST_INCREMENT'.
32912
32913 -- Macro: USE_LOAD_POST_DECREMENT (MODE)
32914     A C expression used to determine whether a load postdecrement is a
32915     good thing to use for a given mode.  Defaults to the value of
32916     `HAVE_POST_DECREMENT'.
32917
32918 -- Macro: USE_LOAD_PRE_INCREMENT (MODE)
32919     A C expression used to determine whether a load preincrement is a
32920     good thing to use for a given mode.  Defaults to the value of
32921     `HAVE_PRE_INCREMENT'.
32922
32923 -- Macro: USE_LOAD_PRE_DECREMENT (MODE)
32924     A C expression used to determine whether a load predecrement is a
32925     good thing to use for a given mode.  Defaults to the value of
32926     `HAVE_PRE_DECREMENT'.
32927
32928 -- Macro: USE_STORE_POST_INCREMENT (MODE)
32929     A C expression used to determine whether a store postincrement is
32930     a good thing to use for a given mode.  Defaults to the value of
32931     `HAVE_POST_INCREMENT'.
32932
32933 -- Macro: USE_STORE_POST_DECREMENT (MODE)
32934     A C expression used to determine whether a store postdecrement is
32935     a good thing to use for a given mode.  Defaults to the value of
32936     `HAVE_POST_DECREMENT'.
32937
32938 -- Macro: USE_STORE_PRE_INCREMENT (MODE)
32939     This macro is used to determine whether a store preincrement is a
32940     good thing to use for a given mode.  Defaults to the value of
32941     `HAVE_PRE_INCREMENT'.
32942
32943 -- Macro: USE_STORE_PRE_DECREMENT (MODE)
32944     This macro is used to determine whether a store predecrement is a
32945     good thing to use for a given mode.  Defaults to the value of
32946     `HAVE_PRE_DECREMENT'.
32947
32948 -- Macro: NO_FUNCTION_CSE
32949     Define this macro if it is as good or better to call a constant
32950     function address than to call an address kept in a register.
32951
32952 -- Macro: LOGICAL_OP_NON_SHORT_CIRCUIT
32953     Define this macro if a non-short-circuit operation produced by
32954     `fold_range_test ()' is optimal.  This macro defaults to true if
32955     `BRANCH_COST' is greater than or equal to the value 2.
32956
32957 -- Target Hook: bool TARGET_RTX_COSTS (rtx X, int CODE, int
32958          OUTER_CODE, int OPNO, int *TOTAL, bool SPEED)
32959     This target hook describes the relative costs of RTL expressions.
32960
32961     The cost may depend on the precise form of the expression, which is
32962     available for examination in X, and the fact that X appears as
32963     operand OPNO of an expression with rtx code OUTER_CODE.  That is,
32964     the hook can assume that there is some rtx Y such that `GET_CODE
32965     (Y) == OUTER_CODE' and such that either (a) `XEXP (Y, OPNO) == X'
32966     or (b) `XVEC (Y, OPNO)' contains X.
32967
32968     CODE is X's expression code--redundant, since it can be obtained
32969     with `GET_CODE (X)'.
32970
32971     In implementing this hook, you can use the construct
32972     `COSTS_N_INSNS (N)' to specify a cost equal to N fast instructions.
32973
32974     On entry to the hook, `*TOTAL' contains a default estimate for the
32975     cost of the expression.  The hook should modify this value as
32976     necessary.  Traditionally, the default costs are `COSTS_N_INSNS
32977     (5)' for multiplications, `COSTS_N_INSNS (7)' for division and
32978     modulus operations, and `COSTS_N_INSNS (1)' for all other
32979     operations.
32980
32981     When optimizing for code size, i.e. when `speed' is false, this
32982     target hook should be used to estimate the relative size cost of
32983     an expression, again relative to `COSTS_N_INSNS'.
32984
32985     The hook returns true when all subexpressions of X have been
32986     processed, and false when `rtx_cost' should recurse.
32987
32988 -- Target Hook: int TARGET_ADDRESS_COST (rtx ADDRESS, enum
32989          machine_mode MODE, addr_space_t AS, bool SPEED)
32990     This hook computes the cost of an addressing mode that contains
32991     ADDRESS.  If not defined, the cost is computed from the ADDRESS
32992     expression and the `TARGET_RTX_COST' hook.
32993
32994     For most CISC machines, the default cost is a good approximation
32995     of the true cost of the addressing mode.  However, on RISC
32996     machines, all instructions normally have the same length and
32997     execution time.  Hence all addresses will have equal costs.
32998
32999     In cases where more than one form of an address is known, the form
33000     with the lowest cost will be used.  If multiple forms have the
33001     same, lowest, cost, the one that is the most complex will be used.
33002
33003     For example, suppose an address that is equal to the sum of a
33004     register and a constant is used twice in the same basic block.
33005     When this macro is not defined, the address will be computed in a
33006     register and memory references will be indirect through that
33007     register.  On machines where the cost of the addressing mode
33008     containing the sum is no higher than that of a simple indirect
33009     reference, this will produce an additional instruction and
33010     possibly require an additional register.  Proper specification of
33011     this macro eliminates this overhead for such machines.
33012
33013     This hook is never called with an invalid address.
33014
33015     On machines where an address involving more than one register is as
33016     cheap as an address computation involving only one register,
33017     defining `TARGET_ADDRESS_COST' to reflect this can cause two
33018     registers to be live over a region of code where only one would
33019     have been if `TARGET_ADDRESS_COST' were not defined in that
33020     manner.  This effect should be considered in the definition of
33021     this macro.  Equivalent costs should probably only be given to
33022     addresses with different numbers of registers on machines with
33023     lots of registers.
33024
33025
33026File: gccint.info,  Node: Scheduling,  Next: Sections,  Prev: Costs,  Up: Target Macros
33027
3302817.18 Adjusting the Instruction Scheduler
33029=========================================
33030
33031The instruction scheduler may need a fair amount of machine-specific
33032adjustment in order to produce good code.  GCC provides several target
33033hooks for this purpose.  It is usually enough to define just a few of
33034them: try the first ones in this list first.
33035
33036 -- Target Hook: int TARGET_SCHED_ISSUE_RATE (void)
33037     This hook returns the maximum number of instructions that can ever
33038     issue at the same time on the target machine.  The default is one.
33039     Although the insn scheduler can define itself the possibility of
33040     issue an insn on the same cycle, the value can serve as an
33041     additional constraint to issue insns on the same simulated
33042     processor cycle (see hooks `TARGET_SCHED_REORDER' and
33043     `TARGET_SCHED_REORDER2').  This value must be constant over the
33044     entire compilation.  If you need it to vary depending on what the
33045     instructions are, you must use `TARGET_SCHED_VARIABLE_ISSUE'.
33046
33047 -- Target Hook: int TARGET_SCHED_VARIABLE_ISSUE (FILE *FILE, int
33048          VERBOSE, rtx INSN, int MORE)
33049     This hook is executed by the scheduler after it has scheduled an
33050     insn from the ready list.  It should return the number of insns
33051     which can still be issued in the current cycle.  The default is
33052     `MORE - 1' for insns other than `CLOBBER' and `USE', which
33053     normally are not counted against the issue rate.  You should
33054     define this hook if some insns take more machine resources than
33055     others, so that fewer insns can follow them in the same cycle.
33056     FILE is either a null pointer, or a stdio stream to write any
33057     debug output to.  VERBOSE is the verbose level provided by
33058     `-fsched-verbose-N'.  INSN is the instruction that was scheduled.
33059
33060 -- Target Hook: int TARGET_SCHED_ADJUST_COST (rtx INSN, rtx LINK, rtx
33061          DEP_INSN, int COST)
33062     This function corrects the value of COST based on the relationship
33063     between INSN and DEP_INSN through the dependence LINK.  It should
33064     return the new value.  The default is to make no adjustment to
33065     COST.  This can be used for example to specify to the scheduler
33066     using the traditional pipeline description that an output- or
33067     anti-dependence does not incur the same cost as a data-dependence.
33068     If the scheduler using the automaton based pipeline description,
33069     the cost of anti-dependence is zero and the cost of
33070     output-dependence is maximum of one and the difference of latency
33071     times of the first and the second insns.  If these values are not
33072     acceptable, you could use the hook to modify them too.  See also
33073     *note Processor pipeline description::.
33074
33075 -- Target Hook: int TARGET_SCHED_ADJUST_PRIORITY (rtx INSN, int
33076          PRIORITY)
33077     This hook adjusts the integer scheduling priority PRIORITY of
33078     INSN.  It should return the new priority.  Increase the priority to
33079     execute INSN earlier, reduce the priority to execute INSN later.
33080     Do not define this hook if you do not need to adjust the
33081     scheduling priorities of insns.
33082
33083 -- Target Hook: int TARGET_SCHED_REORDER (FILE *FILE, int VERBOSE, rtx
33084          *READY, int *N_READYP, int CLOCK)
33085     This hook is executed by the scheduler after it has scheduled the
33086     ready list, to allow the machine description to reorder it (for
33087     example to combine two small instructions together on `VLIW'
33088     machines).  FILE is either a null pointer, or a stdio stream to
33089     write any debug output to.  VERBOSE is the verbose level provided
33090     by `-fsched-verbose-N'.  READY is a pointer to the ready list of
33091     instructions that are ready to be scheduled.  N_READYP is a
33092     pointer to the number of elements in the ready list.  The scheduler
33093     reads the ready list in reverse order, starting with
33094     READY[*N_READYP - 1] and going to READY[0].  CLOCK is the timer
33095     tick of the scheduler.  You may modify the ready list and the
33096     number of ready insns.  The return value is the number of insns
33097     that can issue this cycle; normally this is just `issue_rate'.
33098     See also `TARGET_SCHED_REORDER2'.
33099
33100 -- Target Hook: int TARGET_SCHED_REORDER2 (FILE *FILE, int VERBOSE,
33101          rtx *READY, int *N_READYP, int CLOCK)
33102     Like `TARGET_SCHED_REORDER', but called at a different time.  That
33103     function is called whenever the scheduler starts a new cycle.
33104     This one is called once per iteration over a cycle, immediately
33105     after `TARGET_SCHED_VARIABLE_ISSUE'; it can reorder the ready list
33106     and return the number of insns to be scheduled in the same cycle.
33107     Defining this hook can be useful if there are frequent situations
33108     where scheduling one insn causes other insns to become ready in
33109     the same cycle.  These other insns can then be taken into account
33110     properly.
33111
33112 -- Target Hook: void TARGET_SCHED_DEPENDENCIES_EVALUATION_HOOK (rtx
33113          HEAD, rtx TAIL)
33114     This hook is called after evaluation forward dependencies of insns
33115     in chain given by two parameter values (HEAD and TAIL
33116     correspondingly) but before insns scheduling of the insn chain.
33117     For example, it can be used for better insn classification if it
33118     requires analysis of dependencies.  This hook can use backward and
33119     forward dependencies of the insn scheduler because they are already
33120     calculated.
33121
33122 -- Target Hook: void TARGET_SCHED_INIT (FILE *FILE, int VERBOSE, int
33123          MAX_READY)
33124     This hook is executed by the scheduler at the beginning of each
33125     block of instructions that are to be scheduled.  FILE is either a
33126     null pointer, or a stdio stream to write any debug output to.
33127     VERBOSE is the verbose level provided by `-fsched-verbose-N'.
33128     MAX_READY is the maximum number of insns in the current scheduling
33129     region that can be live at the same time.  This can be used to
33130     allocate scratch space if it is needed, e.g. by
33131     `TARGET_SCHED_REORDER'.
33132
33133 -- Target Hook: void TARGET_SCHED_FINISH (FILE *FILE, int VERBOSE)
33134     This hook is executed by the scheduler at the end of each block of
33135     instructions that are to be scheduled.  It can be used to perform
33136     cleanup of any actions done by the other scheduling hooks.  FILE
33137     is either a null pointer, or a stdio stream to write any debug
33138     output to.  VERBOSE is the verbose level provided by
33139     `-fsched-verbose-N'.
33140
33141 -- Target Hook: void TARGET_SCHED_INIT_GLOBAL (FILE *FILE, int
33142          VERBOSE, int OLD_MAX_UID)
33143     This hook is executed by the scheduler after function level
33144     initializations.  FILE is either a null pointer, or a stdio stream
33145     to write any debug output to.  VERBOSE is the verbose level
33146     provided by `-fsched-verbose-N'.  OLD_MAX_UID is the maximum insn
33147     uid when scheduling begins.
33148
33149 -- Target Hook: void TARGET_SCHED_FINISH_GLOBAL (FILE *FILE, int
33150          VERBOSE)
33151     This is the cleanup hook corresponding to
33152     `TARGET_SCHED_INIT_GLOBAL'.  FILE is either a null pointer, or a
33153     stdio stream to write any debug output to.  VERBOSE is the verbose
33154     level provided by `-fsched-verbose-N'.
33155
33156 -- Target Hook: rtx TARGET_SCHED_DFA_PRE_CYCLE_INSN (void)
33157     The hook returns an RTL insn.  The automaton state used in the
33158     pipeline hazard recognizer is changed as if the insn were scheduled
33159     when the new simulated processor cycle starts.  Usage of the hook
33160     may simplify the automaton pipeline description for some VLIW
33161     processors.  If the hook is defined, it is used only for the
33162     automaton based pipeline description.  The default is not to
33163     change the state when the new simulated processor cycle starts.
33164
33165 -- Target Hook: void TARGET_SCHED_INIT_DFA_PRE_CYCLE_INSN (void)
33166     The hook can be used to initialize data used by the previous hook.
33167
33168 -- Target Hook: rtx TARGET_SCHED_DFA_POST_CYCLE_INSN (void)
33169     The hook is analogous to `TARGET_SCHED_DFA_PRE_CYCLE_INSN' but used
33170     to changed the state as if the insn were scheduled when the new
33171     simulated processor cycle finishes.
33172
33173 -- Target Hook: void TARGET_SCHED_INIT_DFA_POST_CYCLE_INSN (void)
33174     The hook is analogous to `TARGET_SCHED_INIT_DFA_PRE_CYCLE_INSN' but
33175     used to initialize data used by the previous hook.
33176
33177 -- Target Hook: void TARGET_SCHED_DFA_PRE_ADVANCE_CYCLE (void)
33178     The hook to notify target that the current simulated cycle is
33179     about to finish.  The hook is analogous to
33180     `TARGET_SCHED_DFA_PRE_CYCLE_INSN' but used to change the state in
33181     more complicated situations - e.g., when advancing state on a
33182     single insn is not enough.
33183
33184 -- Target Hook: void TARGET_SCHED_DFA_POST_ADVANCE_CYCLE (void)
33185     The hook to notify target that new simulated cycle has just
33186     started.  The hook is analogous to
33187     `TARGET_SCHED_DFA_POST_CYCLE_INSN' but used to change the state in
33188     more complicated situations - e.g., when advancing state on a
33189     single insn is not enough.
33190
33191 -- Target Hook: int TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD
33192          (void)
33193     This hook controls better choosing an insn from the ready insn
33194     queue for the DFA-based insn scheduler.  Usually the scheduler
33195     chooses the first insn from the queue.  If the hook returns a
33196     positive value, an additional scheduler code tries all
33197     permutations of `TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD
33198     ()' subsequent ready insns to choose an insn whose issue will
33199     result in maximal number of issued insns on the same cycle.  For
33200     the VLIW processor, the code could actually solve the problem of
33201     packing simple insns into the VLIW insn.  Of course, if the rules
33202     of VLIW packing are described in the automaton.
33203
33204     This code also could be used for superscalar RISC processors.  Let
33205     us consider a superscalar RISC processor with 3 pipelines.  Some
33206     insns can be executed in pipelines A or B, some insns can be
33207     executed only in pipelines B or C, and one insn can be executed in
33208     pipeline B.  The processor may issue the 1st insn into A and the
33209     2nd one into B.  In this case, the 3rd insn will wait for freeing B
33210     until the next cycle.  If the scheduler issues the 3rd insn the
33211     first, the processor could issue all 3 insns per cycle.
33212
33213     Actually this code demonstrates advantages of the automaton based
33214     pipeline hazard recognizer.  We try quickly and easy many insn
33215     schedules to choose the best one.
33216
33217     The default is no multipass scheduling.
33218
33219 -- Target Hook: int
33220TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD (rtx INSN)
33221     This hook controls what insns from the ready insn queue will be
33222     considered for the multipass insn scheduling.  If the hook returns
33223     zero for INSN, the insn will be not chosen to be issued.
33224
33225     The default is that any ready insns can be chosen to be issued.
33226
33227 -- Target Hook: void TARGET_SCHED_FIRST_CYCLE_MULTIPASS_BEGIN (void
33228          *DATA, char *READY_TRY, int N_READY, bool FIRST_CYCLE_INSN_P)
33229     This hook prepares the target backend for a new round of multipass
33230     scheduling.
33231
33232 -- Target Hook: void TARGET_SCHED_FIRST_CYCLE_MULTIPASS_ISSUE (void
33233          *DATA, char *READY_TRY, int N_READY, rtx INSN, const void
33234          *PREV_DATA)
33235     This hook is called when multipass scheduling evaluates
33236     instruction INSN.
33237
33238 -- Target Hook: void TARGET_SCHED_FIRST_CYCLE_MULTIPASS_BACKTRACK
33239          (const void *DATA, char *READY_TRY, int N_READY)
33240     This is called when multipass scheduling backtracks from
33241     evaluation of an instruction.
33242
33243 -- Target Hook: void TARGET_SCHED_FIRST_CYCLE_MULTIPASS_END (const
33244          void *DATA)
33245     This hook notifies the target about the result of the concluded
33246     current round of multipass scheduling.
33247
33248 -- Target Hook: void TARGET_SCHED_FIRST_CYCLE_MULTIPASS_INIT (void
33249          *DATA)
33250     This hook initializes target-specific data used in multipass
33251     scheduling.
33252
33253 -- Target Hook: void TARGET_SCHED_FIRST_CYCLE_MULTIPASS_FINI (void
33254          *DATA)
33255     This hook finalizes target-specific data used in multipass
33256     scheduling.
33257
33258 -- Target Hook: int TARGET_SCHED_DFA_NEW_CYCLE (FILE *DUMP, int
33259          VERBOSE, rtx INSN, int LAST_CLOCK, int CLOCK, int *SORT_P)
33260     This hook is called by the insn scheduler before issuing INSN on
33261     cycle CLOCK.  If the hook returns nonzero, INSN is not issued on
33262     this processor cycle.  Instead, the processor cycle is advanced.
33263     If *SORT_P is zero, the insn ready queue is not sorted on the new
33264     cycle start as usually.  DUMP and VERBOSE specify the file and
33265     verbosity level to use for debugging output.  LAST_CLOCK and CLOCK
33266     are, respectively, the processor cycle on which the previous insn
33267     has been issued, and the current processor cycle.
33268
33269 -- Target Hook: bool TARGET_SCHED_IS_COSTLY_DEPENDENCE (struct _dep
33270          *_DEP, int COST, int DISTANCE)
33271     This hook is used to define which dependences are considered
33272     costly by the target, so costly that it is not advisable to
33273     schedule the insns that are involved in the dependence too close
33274     to one another.  The parameters to this hook are as follows:  The
33275     first parameter _DEP is the dependence being evaluated.  The
33276     second parameter COST is the cost of the dependence as estimated
33277     by the scheduler, and the third parameter DISTANCE is the distance
33278     in cycles between the two insns.  The hook returns `true' if
33279     considering the distance between the two insns the dependence
33280     between them is considered costly by the target, and `false'
33281     otherwise.
33282
33283     Defining this hook can be useful in multiple-issue out-of-order
33284     machines, where (a) it's practically hopeless to predict the
33285     actual data/resource delays, however: (b) there's a better chance
33286     to predict the actual grouping that will be formed, and (c)
33287     correctly emulating the grouping can be very important.  In such
33288     targets one may want to allow issuing dependent insns closer to
33289     one another--i.e., closer than the dependence distance;  however,
33290     not in cases of "costly dependences", which this hooks allows to
33291     define.
33292
33293 -- Target Hook: void TARGET_SCHED_H_I_D_EXTENDED (void)
33294     This hook is called by the insn scheduler after emitting a new
33295     instruction to the instruction stream.  The hook notifies a target
33296     backend to extend its per instruction data structures.
33297
33298 -- Target Hook: void * TARGET_SCHED_ALLOC_SCHED_CONTEXT (void)
33299     Return a pointer to a store large enough to hold target scheduling
33300     context.
33301
33302 -- Target Hook: void TARGET_SCHED_INIT_SCHED_CONTEXT (void *TC, bool
33303          CLEAN_P)
33304     Initialize store pointed to by TC to hold target scheduling
33305     context.  It CLEAN_P is true then initialize TC as if scheduler is
33306     at the beginning of the block.  Otherwise, copy the current
33307     context into TC.
33308
33309 -- Target Hook: void TARGET_SCHED_SET_SCHED_CONTEXT (void *TC)
33310     Copy target scheduling context pointed to by TC to the current
33311     context.
33312
33313 -- Target Hook: void TARGET_SCHED_CLEAR_SCHED_CONTEXT (void *TC)
33314     Deallocate internal data in target scheduling context pointed to
33315     by TC.
33316
33317 -- Target Hook: void TARGET_SCHED_FREE_SCHED_CONTEXT (void *TC)
33318     Deallocate a store for target scheduling context pointed to by TC.
33319
33320 -- Target Hook: int TARGET_SCHED_SPECULATE_INSN (rtx INSN, int
33321          REQUEST, rtx *NEW_PAT)
33322     This hook is called by the insn scheduler when INSN has only
33323     speculative dependencies and therefore can be scheduled
33324     speculatively.  The hook is used to check if the pattern of INSN
33325     has a speculative version and, in case of successful check, to
33326     generate that speculative pattern.  The hook should return 1, if
33327     the instruction has a speculative form, or -1, if it doesn't.
33328     REQUEST describes the type of requested speculation.  If the
33329     return value equals 1 then NEW_PAT is assigned the generated
33330     speculative pattern.
33331
33332 -- Target Hook: bool TARGET_SCHED_NEEDS_BLOCK_P (int DEP_STATUS)
33333     This hook is called by the insn scheduler during generation of
33334     recovery code for INSN.  It should return `true', if the
33335     corresponding check instruction should branch to recovery code, or
33336     `false' otherwise.
33337
33338 -- Target Hook: rtx TARGET_SCHED_GEN_SPEC_CHECK (rtx INSN, rtx LABEL,
33339          int MUTATE_P)
33340     This hook is called by the insn scheduler to generate a pattern
33341     for recovery check instruction.  If MUTATE_P is zero, then INSN is
33342     a speculative instruction for which the check should be generated.
33343     LABEL is either a label of a basic block, where recovery code
33344     should be emitted, or a null pointer, when requested check doesn't
33345     branch to recovery code (a simple check).  If MUTATE_P is nonzero,
33346     then a pattern for a branchy check corresponding to a simple check
33347     denoted by INSN should be generated.  In this case LABEL can't be
33348     null.
33349
33350 -- Target Hook: bool
33351TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD_SPEC (const_rtx
33352          INSN)
33353     This hook is used as a workaround for
33354     `TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD' not being
33355     called on the first instruction of the ready list.  The hook is
33356     used to discard speculative instructions that stand first in the
33357     ready list from being scheduled on the current cycle.  If the hook
33358     returns `false', INSN will not be chosen to be issued.  For
33359     non-speculative instructions, the hook should always return
33360     `true'.  For example, in the ia64 backend the hook is used to
33361     cancel data speculative insns when the ALAT table is nearly full.
33362
33363 -- Target Hook: void TARGET_SCHED_SET_SCHED_FLAGS (struct
33364          spec_info_def *SPEC_INFO)
33365     This hook is used by the insn scheduler to find out what features
33366     should be enabled/used.  The structure *SPEC_INFO should be filled
33367     in by the target.  The structure describes speculation types that
33368     can be used in the scheduler.
33369
33370 -- Target Hook: int TARGET_SCHED_SMS_RES_MII (struct ddg *G)
33371     This hook is called by the swing modulo scheduler to calculate a
33372     resource-based lower bound which is based on the resources
33373     available in the machine and the resources required by each
33374     instruction.  The target backend can use G to calculate such
33375     bound.  A very simple lower bound will be used in case this hook
33376     is not implemented: the total number of instructions divided by
33377     the issue rate.
33378
33379 -- Target Hook: bool TARGET_SCHED_DISPATCH (rtx INSN, int X)
33380     This hook is called by Haifa Scheduler.  It returns true if
33381     dispatch scheduling is supported in hardware and the condition
33382     specified in the parameter is true.
33383
33384 -- Target Hook: void TARGET_SCHED_DISPATCH_DO (rtx INSN, int X)
33385     This hook is called by Haifa Scheduler.  It performs the operation
33386     specified in its second parameter.
33387
33388 -- Target Hook: bool TARGET_SCHED_EXPOSED_PIPELINE
33389     True if the processor has an exposed pipeline, which means that
33390     not just the order of instructions is important for correctness
33391     when scheduling, but also the latencies of operations.
33392
33393 -- Target Hook: int TARGET_SCHED_REASSOCIATION_WIDTH (unsigned int
33394          OPC, enum machine_mode MODE)
33395     This hook is called by tree reassociator to determine a level of
33396     parallelism required in output calculations chain.
33397
33398
33399File: gccint.info,  Node: Sections,  Next: PIC,  Prev: Scheduling,  Up: Target Macros
33400
3340117.19 Dividing the Output into Sections (Texts, Data, ...)
33402==========================================================
33403
33404An object file is divided into sections containing different types of
33405data.  In the most common case, there are three sections: the "text
33406section", which holds instructions and read-only data; the "data
33407section", which holds initialized writable data; and the "bss section",
33408which holds uninitialized data.  Some systems have other kinds of
33409sections.
33410
33411 `varasm.c' provides several well-known sections, such as
33412`text_section', `data_section' and `bss_section'.  The normal way of
33413controlling a `FOO_section' variable is to define the associated
33414`FOO_SECTION_ASM_OP' macro, as described below.  The macros are only
33415read once, when `varasm.c' initializes itself, so their values must be
33416run-time constants.  They may however depend on command-line flags.
33417
33418 _Note:_ Some run-time files, such `crtstuff.c', also make use of the
33419`FOO_SECTION_ASM_OP' macros, and expect them to be string literals.
33420
33421 Some assemblers require a different string to be written every time a
33422section is selected.  If your assembler falls into this category, you
33423should define the `TARGET_ASM_INIT_SECTIONS' hook and use
33424`get_unnamed_section' to set up the sections.
33425
33426 You must always create a `text_section', either by defining
33427`TEXT_SECTION_ASM_OP' or by initializing `text_section' in
33428`TARGET_ASM_INIT_SECTIONS'.  The same is true of `data_section' and
33429`DATA_SECTION_ASM_OP'.  If you do not create a distinct
33430`readonly_data_section', the default is to reuse `text_section'.
33431
33432 All the other `varasm.c' sections are optional, and are null if the
33433target does not provide them.
33434
33435 -- Macro: TEXT_SECTION_ASM_OP
33436     A C expression whose value is a string, including spacing,
33437     containing the assembler operation that should precede
33438     instructions and read-only data.  Normally `"\t.text"' is right.
33439
33440 -- Macro: HOT_TEXT_SECTION_NAME
33441     If defined, a C string constant for the name of the section
33442     containing most frequently executed functions of the program.  If
33443     not defined, GCC will provide a default definition if the target
33444     supports named sections.
33445
33446 -- Macro: UNLIKELY_EXECUTED_TEXT_SECTION_NAME
33447     If defined, a C string constant for the name of the section
33448     containing unlikely executed functions in the program.
33449
33450 -- Macro: DATA_SECTION_ASM_OP
33451     A C expression whose value is a string, including spacing,
33452     containing the assembler operation to identify the following data
33453     as writable initialized data.  Normally `"\t.data"' is right.
33454
33455 -- Macro: SDATA_SECTION_ASM_OP
33456     If defined, a C expression whose value is a string, including
33457     spacing, containing the assembler operation to identify the
33458     following data as initialized, writable small data.
33459
33460 -- Macro: READONLY_DATA_SECTION_ASM_OP
33461     A C expression whose value is a string, including spacing,
33462     containing the assembler operation to identify the following data
33463     as read-only initialized data.
33464
33465 -- Macro: BSS_SECTION_ASM_OP
33466     If defined, a C expression whose value is a string, including
33467     spacing, containing the assembler operation to identify the
33468     following data as uninitialized global data.  If not defined, and
33469     `ASM_OUTPUT_ALIGNED_BSS' not defined, uninitialized global data
33470     will be output in the data section if `-fno-common' is passed,
33471     otherwise `ASM_OUTPUT_COMMON' will be used.
33472
33473 -- Macro: SBSS_SECTION_ASM_OP
33474     If defined, a C expression whose value is a string, including
33475     spacing, containing the assembler operation to identify the
33476     following data as uninitialized, writable small data.
33477
33478 -- Macro: TLS_COMMON_ASM_OP
33479     If defined, a C expression whose value is a string containing the
33480     assembler operation to identify the following data as thread-local
33481     common data.  The default is `".tls_common"'.
33482
33483 -- Macro: TLS_SECTION_ASM_FLAG
33484     If defined, a C expression whose value is a character constant
33485     containing the flag used to mark a section as a TLS section.  The
33486     default is `'T''.
33487
33488 -- Macro: INIT_SECTION_ASM_OP
33489     If defined, a C expression whose value is a string, including
33490     spacing, containing the assembler operation to identify the
33491     following data as initialization code.  If not defined, GCC will
33492     assume such a section does not exist.  This section has no
33493     corresponding `init_section' variable; it is used entirely in
33494     runtime code.
33495
33496 -- Macro: FINI_SECTION_ASM_OP
33497     If defined, a C expression whose value is a string, including
33498     spacing, containing the assembler operation to identify the
33499     following data as finalization code.  If not defined, GCC will
33500     assume such a section does not exist.  This section has no
33501     corresponding `fini_section' variable; it is used entirely in
33502     runtime code.
33503
33504 -- Macro: INIT_ARRAY_SECTION_ASM_OP
33505     If defined, a C expression whose value is a string, including
33506     spacing, containing the assembler operation to identify the
33507     following data as part of the `.init_array' (or equivalent)
33508     section.  If not defined, GCC will assume such a section does not
33509     exist.  Do not define both this macro and `INIT_SECTION_ASM_OP'.
33510
33511 -- Macro: FINI_ARRAY_SECTION_ASM_OP
33512     If defined, a C expression whose value is a string, including
33513     spacing, containing the assembler operation to identify the
33514     following data as part of the `.fini_array' (or equivalent)
33515     section.  If not defined, GCC will assume such a section does not
33516     exist.  Do not define both this macro and `FINI_SECTION_ASM_OP'.
33517
33518 -- Macro: CRT_CALL_STATIC_FUNCTION (SECTION_OP, FUNCTION)
33519     If defined, an ASM statement that switches to a different section
33520     via SECTION_OP, calls FUNCTION, and switches back to the text
33521     section.  This is used in `crtstuff.c' if `INIT_SECTION_ASM_OP' or
33522     `FINI_SECTION_ASM_OP' to calls to initialization and finalization
33523     functions from the init and fini sections.  By default, this macro
33524     uses a simple function call.  Some ports need hand-crafted
33525     assembly code to avoid dependencies on registers initialized in
33526     the function prologue or to ensure that constant pools don't end
33527     up too far way in the text section.
33528
33529 -- Macro: TARGET_LIBGCC_SDATA_SECTION
33530     If defined, a string which names the section into which small
33531     variables defined in crtstuff and libgcc should go.  This is useful
33532     when the target has options for optimizing access to small data,
33533     and you want the crtstuff and libgcc routines to be conservative
33534     in what they expect of your application yet liberal in what your
33535     application expects.  For example, for targets with a `.sdata'
33536     section (like MIPS), you could compile crtstuff with `-G 0' so
33537     that it doesn't require small data support from your application,
33538     but use this macro to put small data into `.sdata' so that your
33539     application can access these variables whether it uses small data
33540     or not.
33541
33542 -- Macro: FORCE_CODE_SECTION_ALIGN
33543     If defined, an ASM statement that aligns a code section to some
33544     arbitrary boundary.  This is used to force all fragments of the
33545     `.init' and `.fini' sections to have to same alignment and thus
33546     prevent the linker from having to add any padding.
33547
33548 -- Macro: JUMP_TABLES_IN_TEXT_SECTION
33549     Define this macro to be an expression with a nonzero value if jump
33550     tables (for `tablejump' insns) should be output in the text
33551     section, along with the assembler instructions.  Otherwise, the
33552     readonly data section is used.
33553
33554     This macro is irrelevant if there is no separate readonly data
33555     section.
33556
33557 -- Target Hook: void TARGET_ASM_INIT_SECTIONS (void)
33558     Define this hook if you need to do something special to set up the
33559     `varasm.c' sections, or if your target has some special sections
33560     of its own that you need to create.
33561
33562     GCC calls this hook after processing the command line, but before
33563     writing any assembly code, and before calling any of the
33564     section-returning hooks described below.
33565
33566 -- Target Hook: int TARGET_ASM_RELOC_RW_MASK (void)
33567     Return a mask describing how relocations should be treated when
33568     selecting sections.  Bit 1 should be set if global relocations
33569     should be placed in a read-write section; bit 0 should be set if
33570     local relocations should be placed in a read-write section.
33571
33572     The default version of this function returns 3 when `-fpic' is in
33573     effect, and 0 otherwise.  The hook is typically redefined when the
33574     target cannot support (some kinds of) dynamic relocations in
33575     read-only sections even in executables.
33576
33577 -- Target Hook: section * TARGET_ASM_SELECT_SECTION (tree EXP, int
33578          RELOC, unsigned HOST_WIDE_INT ALIGN)
33579     Return the section into which EXP should be placed.  You can
33580     assume that EXP is either a `VAR_DECL' node or a constant of some
33581     sort.  RELOC indicates whether the initial value of EXP requires
33582     link-time relocations.  Bit 0 is set when variable contains local
33583     relocations only, while bit 1 is set for global relocations.
33584     ALIGN is the constant alignment in bits.
33585
33586     The default version of this function takes care of putting
33587     read-only variables in `readonly_data_section'.
33588
33589     See also USE_SELECT_SECTION_FOR_FUNCTIONS.
33590
33591 -- Macro: USE_SELECT_SECTION_FOR_FUNCTIONS
33592     Define this macro if you wish TARGET_ASM_SELECT_SECTION to be
33593     called for `FUNCTION_DECL's as well as for variables and constants.
33594
33595     In the case of a `FUNCTION_DECL', RELOC will be zero if the
33596     function has been determined to be likely to be called, and
33597     nonzero if it is unlikely to be called.
33598
33599 -- Target Hook: void TARGET_ASM_UNIQUE_SECTION (tree DECL, int RELOC)
33600     Build up a unique section name, expressed as a `STRING_CST' node,
33601     and assign it to `DECL_SECTION_NAME (DECL)'.  As with
33602     `TARGET_ASM_SELECT_SECTION', RELOC indicates whether the initial
33603     value of EXP requires link-time relocations.
33604
33605     The default version of this function appends the symbol name to the
33606     ELF section name that would normally be used for the symbol.  For
33607     example, the function `foo' would be placed in `.text.foo'.
33608     Whatever the actual target object format, this is often good
33609     enough.
33610
33611 -- Target Hook: section * TARGET_ASM_FUNCTION_RODATA_SECTION (tree
33612          DECL)
33613     Return the readonly data section associated with
33614     `DECL_SECTION_NAME (DECL)'.  The default version of this function
33615     selects `.gnu.linkonce.r.name' if the function's section is
33616     `.gnu.linkonce.t.name', `.rodata.name' if function is in
33617     `.text.name', and the normal readonly-data section otherwise.
33618
33619 -- Target Hook: const char * TARGET_ASM_MERGEABLE_RODATA_PREFIX
33620     Usually, the compiler uses the prefix `".rodata"' to construct
33621     section names for mergeable constant data.  Define this macro to
33622     override the string if a different section name should be used.
33623
33624 -- Target Hook: section * TARGET_ASM_TM_CLONE_TABLE_SECTION (void)
33625     Return the section that should be used for transactional memory
33626     clone  tables.
33627
33628 -- Target Hook: section * TARGET_ASM_SELECT_RTX_SECTION (enum
33629          machine_mode MODE, rtx X, unsigned HOST_WIDE_INT ALIGN)
33630     Return the section into which a constant X, of mode MODE, should
33631     be placed.  You can assume that X is some kind of constant in RTL.
33632     The argument MODE is redundant except in the case of a `const_int'
33633     rtx.  ALIGN is the constant alignment in bits.
33634
33635     The default version of this function takes care of putting symbolic
33636     constants in `flag_pic' mode in `data_section' and everything else
33637     in `readonly_data_section'.
33638
33639 -- Target Hook: tree TARGET_MANGLE_DECL_ASSEMBLER_NAME (tree DECL,
33640          tree ID)
33641     Define this hook if you need to postprocess the assembler name
33642     generated by target-independent code.  The ID provided to this
33643     hook will be the computed name (e.g., the macro `DECL_NAME' of the
33644     DECL in C, or the mangled name of the DECL in C++).  The return
33645     value of the hook is an `IDENTIFIER_NODE' for the appropriate
33646     mangled name on your target system.  The default implementation of
33647     this hook just returns the ID provided.
33648
33649 -- Target Hook: void TARGET_ENCODE_SECTION_INFO (tree DECL, rtx RTL,
33650          int NEW_DECL_P)
33651     Define this hook if references to a symbol or a constant must be
33652     treated differently depending on something about the variable or
33653     function named by the symbol (such as what section it is in).
33654
33655     The hook is executed immediately after rtl has been created for
33656     DECL, which may be a variable or function declaration or an entry
33657     in the constant pool.  In either case, RTL is the rtl in question.
33658     Do _not_ use `DECL_RTL (DECL)' in this hook; that field may not
33659     have been initialized yet.
33660
33661     In the case of a constant, it is safe to assume that the rtl is a
33662     `mem' whose address is a `symbol_ref'.  Most decls will also have
33663     this form, but that is not guaranteed.  Global register variables,
33664     for instance, will have a `reg' for their rtl.  (Normally the
33665     right thing to do with such unusual rtl is leave it alone.)
33666
33667     The NEW_DECL_P argument will be true if this is the first time
33668     that `TARGET_ENCODE_SECTION_INFO' has been invoked on this decl.
33669     It will be false for subsequent invocations, which will happen for
33670     duplicate declarations.  Whether or not anything must be done for
33671     the duplicate declaration depends on whether the hook examines
33672     `DECL_ATTRIBUTES'.  NEW_DECL_P is always true when the hook is
33673     called for a constant.
33674
33675     The usual thing for this hook to do is to record flags in the
33676     `symbol_ref', using `SYMBOL_REF_FLAG' or `SYMBOL_REF_FLAGS'.
33677     Historically, the name string was modified if it was necessary to
33678     encode more than one bit of information, but this practice is now
33679     discouraged; use `SYMBOL_REF_FLAGS'.
33680
33681     The default definition of this hook, `default_encode_section_info'
33682     in `varasm.c', sets a number of commonly-useful bits in
33683     `SYMBOL_REF_FLAGS'.  Check whether the default does what you need
33684     before overriding it.
33685
33686 -- Target Hook: const char * TARGET_STRIP_NAME_ENCODING (const char
33687          *NAME)
33688     Decode NAME and return the real name part, sans the characters
33689     that `TARGET_ENCODE_SECTION_INFO' may have added.
33690
33691 -- Target Hook: bool TARGET_IN_SMALL_DATA_P (const_tree EXP)
33692     Returns true if EXP should be placed into a "small data" section.
33693     The default version of this hook always returns false.
33694
33695 -- Target Hook: bool TARGET_HAVE_SRODATA_SECTION
33696     Contains the value true if the target places read-only "small
33697     data" into a separate section.  The default value is false.
33698
33699 -- Target Hook: bool TARGET_PROFILE_BEFORE_PROLOGUE (void)
33700     It returns true if target wants profile code emitted before
33701     prologue.
33702
33703     The default version of this hook use the target macro
33704     `PROFILE_BEFORE_PROLOGUE'.
33705
33706 -- Target Hook: bool TARGET_BINDS_LOCAL_P (const_tree EXP)
33707     Returns true if EXP names an object for which name resolution
33708     rules must resolve to the current "module" (dynamic shared library
33709     or executable image).
33710
33711     The default version of this hook implements the name resolution
33712     rules for ELF, which has a looser model of global name binding
33713     than other currently supported object file formats.
33714
33715 -- Target Hook: bool TARGET_HAVE_TLS
33716     Contains the value true if the target supports thread-local
33717     storage.  The default value is false.
33718
33719
33720File: gccint.info,  Node: PIC,  Next: Assembler Format,  Prev: Sections,  Up: Target Macros
33721
3372217.20 Position Independent Code
33723===============================
33724
33725This section describes macros that help implement generation of position
33726independent code.  Simply defining these macros is not enough to
33727generate valid PIC; you must also add support to the hook
33728`TARGET_LEGITIMATE_ADDRESS_P' and to the macro `PRINT_OPERAND_ADDRESS',
33729as well as `LEGITIMIZE_ADDRESS'.  You must modify the definition of
33730`movsi' to do something appropriate when the source operand contains a
33731symbolic address.  You may also need to alter the handling of switch
33732statements so that they use relative addresses.
33733
33734 -- Macro: PIC_OFFSET_TABLE_REGNUM
33735     The register number of the register used to address a table of
33736     static data addresses in memory.  In some cases this register is
33737     defined by a processor's "application binary interface" (ABI).
33738     When this macro is defined, RTL is generated for this register
33739     once, as with the stack pointer and frame pointer registers.  If
33740     this macro is not defined, it is up to the machine-dependent files
33741     to allocate such a register (if necessary).  Note that this
33742     register must be fixed when in use (e.g.  when `flag_pic' is true).
33743
33744 -- Macro: PIC_OFFSET_TABLE_REG_CALL_CLOBBERED
33745     A C expression that is nonzero if the register defined by
33746     `PIC_OFFSET_TABLE_REGNUM' is clobbered by calls.  If not defined,
33747     the default is zero.  Do not define this macro if
33748     `PIC_OFFSET_TABLE_REGNUM' is not defined.
33749
33750 -- Macro: LEGITIMATE_PIC_OPERAND_P (X)
33751     A C expression that is nonzero if X is a legitimate immediate
33752     operand on the target machine when generating position independent
33753     code.  You can assume that X satisfies `CONSTANT_P', so you need
33754     not check this.  You can also assume FLAG_PIC is true, so you need
33755     not check it either.  You need not define this macro if all
33756     constants (including `SYMBOL_REF') can be immediate operands when
33757     generating position independent code.
33758
33759
33760File: gccint.info,  Node: Assembler Format,  Next: Debugging Info,  Prev: PIC,  Up: Target Macros
33761
3376217.21 Defining the Output Assembler Language
33763============================================
33764
33765This section describes macros whose principal purpose is to describe how
33766to write instructions in assembler language--rather than what the
33767instructions do.
33768
33769* Menu:
33770
33771* File Framework::       Structural information for the assembler file.
33772* Data Output::          Output of constants (numbers, strings, addresses).
33773* Uninitialized Data::   Output of uninitialized variables.
33774* Label Output::         Output and generation of labels.
33775* Initialization::       General principles of initialization
33776                         and termination routines.
33777* Macros for Initialization::
33778                         Specific macros that control the handling of
33779                         initialization and termination routines.
33780* Instruction Output::   Output of actual instructions.
33781* Dispatch Tables::      Output of jump tables.
33782* Exception Region Output:: Output of exception region code.
33783* Alignment Output::     Pseudo ops for alignment and skipping data.
33784
33785
33786File: gccint.info,  Node: File Framework,  Next: Data Output,  Up: Assembler Format
33787
3378817.21.1 The Overall Framework of an Assembler File
33789--------------------------------------------------
33790
33791This describes the overall framework of an assembly file.
33792
33793 -- Target Hook: void TARGET_ASM_FILE_START (void)
33794     Output to `asm_out_file' any text which the assembler expects to
33795     find at the beginning of a file.  The default behavior is
33796     controlled by two flags, documented below.  Unless your target's
33797     assembler is quite unusual, if you override the default, you
33798     should call `default_file_start' at some point in your target
33799     hook.  This lets other target files rely on these variables.
33800
33801 -- Target Hook: bool TARGET_ASM_FILE_START_APP_OFF
33802     If this flag is true, the text of the macro `ASM_APP_OFF' will be
33803     printed as the very first line in the assembly file, unless
33804     `-fverbose-asm' is in effect.  (If that macro has been defined to
33805     the empty string, this variable has no effect.)  With the normal
33806     definition of `ASM_APP_OFF', the effect is to notify the GNU
33807     assembler that it need not bother stripping comments or extra
33808     whitespace from its input.  This allows it to work a bit faster.
33809
33810     The default is false.  You should not set it to true unless you
33811     have verified that your port does not generate any extra
33812     whitespace or comments that will cause GAS to issue errors in
33813     NO_APP mode.
33814
33815 -- Target Hook: bool TARGET_ASM_FILE_START_FILE_DIRECTIVE
33816     If this flag is true, `output_file_directive' will be called for
33817     the primary source file, immediately after printing `ASM_APP_OFF'
33818     (if that is enabled).  Most ELF assemblers expect this to be done.
33819     The default is false.
33820
33821 -- Target Hook: void TARGET_ASM_FILE_END (void)
33822     Output to `asm_out_file' any text which the assembler expects to
33823     find at the end of a file.  The default is to output nothing.
33824
33825 -- Function: void file_end_indicate_exec_stack ()
33826     Some systems use a common convention, the `.note.GNU-stack'
33827     special section, to indicate whether or not an object file relies
33828     on the stack being executable.  If your system uses this
33829     convention, you should define `TARGET_ASM_FILE_END' to this
33830     function.  If you need to do other things in that hook, have your
33831     hook function call this function.
33832
33833 -- Target Hook: void TARGET_ASM_LTO_START (void)
33834     Output to `asm_out_file' any text which the assembler expects to
33835     find at the start of an LTO section.  The default is to output
33836     nothing.
33837
33838 -- Target Hook: void TARGET_ASM_LTO_END (void)
33839     Output to `asm_out_file' any text which the assembler expects to
33840     find at the end of an LTO section.  The default is to output
33841     nothing.
33842
33843 -- Target Hook: void TARGET_ASM_CODE_END (void)
33844     Output to `asm_out_file' any text which is needed before emitting
33845     unwind info and debug info at the end of a file.  Some targets emit
33846     here PIC setup thunks that cannot be emitted at the end of file,
33847     because they couldn't have unwind info then.  The default is to
33848     output nothing.
33849
33850 -- Macro: ASM_COMMENT_START
33851     A C string constant describing how to begin a comment in the target
33852     assembler language.  The compiler assumes that the comment will
33853     end at the end of the line.
33854
33855 -- Macro: ASM_APP_ON
33856     A C string constant for text to be output before each `asm'
33857     statement or group of consecutive ones.  Normally this is
33858     `"#APP"', which is a comment that has no effect on most assemblers
33859     but tells the GNU assembler that it must check the lines that
33860     follow for all valid assembler constructs.
33861
33862 -- Macro: ASM_APP_OFF
33863     A C string constant for text to be output after each `asm'
33864     statement or group of consecutive ones.  Normally this is
33865     `"#NO_APP"', which tells the GNU assembler to resume making the
33866     time-saving assumptions that are valid for ordinary compiler
33867     output.
33868
33869 -- Macro: ASM_OUTPUT_SOURCE_FILENAME (STREAM, NAME)
33870     A C statement to output COFF information or DWARF debugging
33871     information which indicates that filename NAME is the current
33872     source file to the stdio stream STREAM.
33873
33874     This macro need not be defined if the standard form of output for
33875     the file format in use is appropriate.
33876
33877 -- Target Hook: void TARGET_ASM_OUTPUT_SOURCE_FILENAME (FILE *FILE,
33878          const char *NAME)
33879     Output COFF information or DWARF debugging information which
33880     indicates that filename NAME is the current source file to the
33881     stdio stream FILE.
33882
33883     This target hook need not be defined if the standard form of
33884     output for the file format in use is appropriate.
33885
33886 -- Target Hook: void TARGET_ASM_OUTPUT_IDENT (const char *NAME)
33887     Output a string based on NAME, suitable for the `#ident'
33888     directive, or the equivalent directive or pragma in non-C-family
33889     languages.  If this hook is not defined, nothing is output for the
33890     `#ident'  directive.
33891
33892 -- Macro: OUTPUT_QUOTED_STRING (STREAM, STRING)
33893     A C statement to output the string STRING to the stdio stream
33894     STREAM.  If you do not call the function `output_quoted_string' in
33895     your config files, GCC will only call it to output filenames to
33896     the assembler source.  So you can use it to canonicalize the format
33897     of the filename using this macro.
33898
33899 -- Target Hook: void TARGET_ASM_NAMED_SECTION (const char *NAME,
33900          unsigned int FLAGS, tree DECL)
33901     Output assembly directives to switch to section NAME.  The section
33902     should have attributes as specified by FLAGS, which is a bit mask
33903     of the `SECTION_*' flags defined in `output.h'.  If DECL is
33904     non-NULL, it is the `VAR_DECL' or `FUNCTION_DECL' with which this
33905     section is associated.
33906
33907 -- Target Hook: section * TARGET_ASM_FUNCTION_SECTION (tree DECL, enum
33908          node_frequency FREQ, bool STARTUP, bool EXIT)
33909     Return preferred text (sub)section for function DECL.  Main
33910     purpose of this function is to separate cold, normal and hot
33911     functions. STARTUP is true when function is known to be used only
33912     at startup (from static constructors or it is `main()').  EXIT is
33913     true when function is known to be used only at exit (from static
33914     destructors).  Return NULL if function should go to default text
33915     section.
33916
33917 -- Target Hook: void TARGET_ASM_FUNCTION_SWITCHED_TEXT_SECTIONS (FILE
33918          *FILE, tree DECL, bool NEW_IS_COLD)
33919     Used by the target to emit any assembler directives or additional
33920     labels needed when a function is partitioned between different
33921     sections.  Output should be written to FILE.  The function  decl
33922     is available as DECL and the new section is `cold' if  NEW_IS_COLD
33923     is `true'.
33924
33925 -- Common Target Hook: bool TARGET_HAVE_NAMED_SECTIONS
33926     This flag is true if the target supports
33927     `TARGET_ASM_NAMED_SECTION'.  It must not be modified by
33928     command-line option processing.
33929
33930 -- Target Hook: bool TARGET_HAVE_SWITCHABLE_BSS_SECTIONS
33931     This flag is true if we can create zeroed data by switching to a
33932     BSS section and then using `ASM_OUTPUT_SKIP' to allocate the space.
33933     This is true on most ELF targets.
33934
33935 -- Target Hook: unsigned int TARGET_SECTION_TYPE_FLAGS (tree DECL,
33936          const char *NAME, int RELOC)
33937     Choose a set of section attributes for use by
33938     `TARGET_ASM_NAMED_SECTION' based on a variable or function decl, a
33939     section name, and whether or not the declaration's initializer may
33940     contain runtime relocations.  DECL may be null, in which case
33941     read-write data should be assumed.
33942
33943     The default version of this function handles choosing code vs data,
33944     read-only vs read-write data, and `flag_pic'.  You should only
33945     need to override this if your target has special flags that might
33946     be set via `__attribute__'.
33947
33948 -- Target Hook: int TARGET_ASM_RECORD_GCC_SWITCHES (print_switch_type
33949          TYPE, const char *TEXT)
33950     Provides the target with the ability to record the gcc command line
33951     switches that have been passed to the compiler, and options that
33952     are enabled.  The TYPE argument specifies what is being recorded.
33953     It can take the following values:
33954
33955    `SWITCH_TYPE_PASSED'
33956          TEXT is a command line switch that has been set by the user.
33957
33958    `SWITCH_TYPE_ENABLED'
33959          TEXT is an option which has been enabled.  This might be as a
33960          direct result of a command line switch, or because it is
33961          enabled by default or because it has been enabled as a side
33962          effect of a different command line switch.  For example, the
33963          `-O2' switch enables various different individual
33964          optimization passes.
33965
33966    `SWITCH_TYPE_DESCRIPTIVE'
33967          TEXT is either NULL or some descriptive text which should be
33968          ignored.  If TEXT is NULL then it is being used to warn the
33969          target hook that either recording is starting or ending.  The
33970          first time TYPE is SWITCH_TYPE_DESCRIPTIVE and TEXT is NULL,
33971          the warning is for start up and the second time the warning
33972          is for wind down.  This feature is to allow the target hook
33973          to make any necessary preparations before it starts to record
33974          switches and to perform any necessary tidying up after it has
33975          finished recording switches.
33976
33977    `SWITCH_TYPE_LINE_START'
33978          This option can be ignored by this target hook.
33979
33980    `SWITCH_TYPE_LINE_END'
33981          This option can be ignored by this target hook.
33982
33983     The hook's return value must be zero.  Other return values may be
33984     supported in the future.
33985
33986     By default this hook is set to NULL, but an example implementation
33987     is provided for ELF based targets.  Called ELF_RECORD_GCC_SWITCHES,
33988     it records the switches as ASCII text inside a new, string
33989     mergeable section in the assembler output file.  The name of the
33990     new section is provided by the
33991     `TARGET_ASM_RECORD_GCC_SWITCHES_SECTION' target hook.
33992
33993 -- Target Hook: const char * TARGET_ASM_RECORD_GCC_SWITCHES_SECTION
33994     This is the name of the section that will be created by the example
33995     ELF implementation of the `TARGET_ASM_RECORD_GCC_SWITCHES' target
33996     hook.
33997
33998
33999File: gccint.info,  Node: Data Output,  Next: Uninitialized Data,  Prev: File Framework,  Up: Assembler Format
34000
3400117.21.2 Output of Data
34002----------------------
34003
34004 -- Target Hook: const char * TARGET_ASM_BYTE_OP
34005 -- Target Hook: const char * TARGET_ASM_ALIGNED_HI_OP
34006 -- Target Hook: const char * TARGET_ASM_ALIGNED_SI_OP
34007 -- Target Hook: const char * TARGET_ASM_ALIGNED_DI_OP
34008 -- Target Hook: const char * TARGET_ASM_ALIGNED_TI_OP
34009 -- Target Hook: const char * TARGET_ASM_UNALIGNED_HI_OP
34010 -- Target Hook: const char * TARGET_ASM_UNALIGNED_SI_OP
34011 -- Target Hook: const char * TARGET_ASM_UNALIGNED_DI_OP
34012 -- Target Hook: const char * TARGET_ASM_UNALIGNED_TI_OP
34013     These hooks specify assembly directives for creating certain kinds
34014     of integer object.  The `TARGET_ASM_BYTE_OP' directive creates a
34015     byte-sized object, the `TARGET_ASM_ALIGNED_HI_OP' one creates an
34016     aligned two-byte object, and so on.  Any of the hooks may be
34017     `NULL', indicating that no suitable directive is available.
34018
34019     The compiler will print these strings at the start of a new line,
34020     followed immediately by the object's initial value.  In most cases,
34021     the string should contain a tab, a pseudo-op, and then another tab.
34022
34023 -- Target Hook: bool TARGET_ASM_INTEGER (rtx X, unsigned int SIZE, int
34024          ALIGNED_P)
34025     The `assemble_integer' function uses this hook to output an
34026     integer object.  X is the object's value, SIZE is its size in
34027     bytes and ALIGNED_P indicates whether it is aligned.  The function
34028     should return `true' if it was able to output the object.  If it
34029     returns false, `assemble_integer' will try to split the object
34030     into smaller parts.
34031
34032     The default implementation of this hook will use the
34033     `TARGET_ASM_BYTE_OP' family of strings, returning `false' when the
34034     relevant string is `NULL'.
34035
34036 -- Target Hook: bool TARGET_ASM_OUTPUT_ADDR_CONST_EXTRA (FILE *FILE,
34037          rtx X)
34038     A target hook to recognize RTX patterns that `output_addr_const'
34039     can't deal with, and output assembly code to FILE corresponding to
34040     the pattern X.  This may be used to allow machine-dependent
34041     `UNSPEC's to appear within constants.
34042
34043     If target hook fails to recognize a pattern, it must return
34044     `false', so that a standard error message is printed.  If it
34045     prints an error message itself, by calling, for example,
34046     `output_operand_lossage', it may just return `true'.
34047
34048 -- Macro: ASM_OUTPUT_ASCII (STREAM, PTR, LEN)
34049     A C statement to output to the stdio stream STREAM an assembler
34050     instruction to assemble a string constant containing the LEN bytes
34051     at PTR.  PTR will be a C expression of type `char *' and LEN a C
34052     expression of type `int'.
34053
34054     If the assembler has a `.ascii' pseudo-op as found in the Berkeley
34055     Unix assembler, do not define the macro `ASM_OUTPUT_ASCII'.
34056
34057 -- Macro: ASM_OUTPUT_FDESC (STREAM, DECL, N)
34058     A C statement to output word N of a function descriptor for DECL.
34059     This must be defined if `TARGET_VTABLE_USES_DESCRIPTORS' is
34060     defined, and is otherwise unused.
34061
34062 -- Macro: CONSTANT_POOL_BEFORE_FUNCTION
34063     You may define this macro as a C expression.  You should define the
34064     expression to have a nonzero value if GCC should output the
34065     constant pool for a function before the code for the function, or
34066     a zero value if GCC should output the constant pool after the
34067     function.  If you do not define this macro, the usual case, GCC
34068     will output the constant pool before the function.
34069
34070 -- Macro: ASM_OUTPUT_POOL_PROLOGUE (FILE, FUNNAME, FUNDECL, SIZE)
34071     A C statement to output assembler commands to define the start of
34072     the constant pool for a function.  FUNNAME is a string giving the
34073     name of the function.  Should the return type of the function be
34074     required, it can be obtained via FUNDECL.  SIZE is the size, in
34075     bytes, of the constant pool that will be written immediately after
34076     this call.
34077
34078     If no constant-pool prefix is required, the usual case, this macro
34079     need not be defined.
34080
34081 -- Macro: ASM_OUTPUT_SPECIAL_POOL_ENTRY (FILE, X, MODE, ALIGN,
34082          LABELNO, JUMPTO)
34083     A C statement (with or without semicolon) to output a constant in
34084     the constant pool, if it needs special treatment.  (This macro
34085     need not do anything for RTL expressions that can be output
34086     normally.)
34087
34088     The argument FILE is the standard I/O stream to output the
34089     assembler code on.  X is the RTL expression for the constant to
34090     output, and MODE is the machine mode (in case X is a `const_int').
34091     ALIGN is the required alignment for the value X; you should output
34092     an assembler directive to force this much alignment.
34093
34094     The argument LABELNO is a number to use in an internal label for
34095     the address of this pool entry.  The definition of this macro is
34096     responsible for outputting the label definition at the proper
34097     place.  Here is how to do this:
34098
34099          `(*targetm.asm_out.internal_label)' (FILE, "LC", LABELNO);
34100
34101     When you output a pool entry specially, you should end with a
34102     `goto' to the label JUMPTO.  This will prevent the same pool entry
34103     from being output a second time in the usual manner.
34104
34105     You need not define this macro if it would do nothing.
34106
34107 -- Macro: ASM_OUTPUT_POOL_EPILOGUE (FILE FUNNAME FUNDECL SIZE)
34108     A C statement to output assembler commands to at the end of the
34109     constant pool for a function.  FUNNAME is a string giving the name
34110     of the function.  Should the return type of the function be
34111     required, you can obtain it via FUNDECL.  SIZE is the size, in
34112     bytes, of the constant pool that GCC wrote immediately before this
34113     call.
34114
34115     If no constant-pool epilogue is required, the usual case, you need
34116     not define this macro.
34117
34118 -- Macro: IS_ASM_LOGICAL_LINE_SEPARATOR (C, STR)
34119     Define this macro as a C expression which is nonzero if C is used
34120     as a logical line separator by the assembler.  STR points to the
34121     position in the string where C was found; this can be used if a
34122     line separator uses multiple characters.
34123
34124     If you do not define this macro, the default is that only the
34125     character `;' is treated as a logical line separator.
34126
34127 -- Target Hook: const char * TARGET_ASM_OPEN_PAREN
34128 -- Target Hook: const char * TARGET_ASM_CLOSE_PAREN
34129     These target hooks are C string constants, describing the syntax
34130     in the assembler for grouping arithmetic expressions.  If not
34131     overridden, they default to normal parentheses, which is correct
34132     for most assemblers.
34133
34134 These macros are provided by `real.h' for writing the definitions of
34135`ASM_OUTPUT_DOUBLE' and the like:
34136
34137 -- Macro: REAL_VALUE_TO_TARGET_SINGLE (X, L)
34138 -- Macro: REAL_VALUE_TO_TARGET_DOUBLE (X, L)
34139 -- Macro: REAL_VALUE_TO_TARGET_LONG_DOUBLE (X, L)
34140 -- Macro: REAL_VALUE_TO_TARGET_DECIMAL32 (X, L)
34141 -- Macro: REAL_VALUE_TO_TARGET_DECIMAL64 (X, L)
34142 -- Macro: REAL_VALUE_TO_TARGET_DECIMAL128 (X, L)
34143     These translate X, of type `REAL_VALUE_TYPE', to the target's
34144     floating point representation, and store its bit pattern in the
34145     variable L.  For `REAL_VALUE_TO_TARGET_SINGLE' and
34146     `REAL_VALUE_TO_TARGET_DECIMAL32', this variable should be a simple
34147     `long int'.  For the others, it should be an array of `long int'.
34148     The number of elements in this array is determined by the size of
34149     the desired target floating point data type: 32 bits of it go in
34150     each `long int' array element.  Each array element holds 32 bits
34151     of the result, even if `long int' is wider than 32 bits on the
34152     host machine.
34153
34154     The array element values are designed so that you can print them
34155     out using `fprintf' in the order they should appear in the target
34156     machine's memory.
34157
34158
34159File: gccint.info,  Node: Uninitialized Data,  Next: Label Output,  Prev: Data Output,  Up: Assembler Format
34160
3416117.21.3 Output of Uninitialized Variables
34162-----------------------------------------
34163
34164Each of the macros in this section is used to do the whole job of
34165outputting a single uninitialized variable.
34166
34167 -- Macro: ASM_OUTPUT_COMMON (STREAM, NAME, SIZE, ROUNDED)
34168     A C statement (sans semicolon) to output to the stdio stream
34169     STREAM the assembler definition of a common-label named NAME whose
34170     size is SIZE bytes.  The variable ROUNDED is the size rounded up
34171     to whatever alignment the caller wants.  It is possible that SIZE
34172     may be zero, for instance if a struct with no other member than a
34173     zero-length array is defined.  In this case, the backend must
34174     output a symbol definition that allocates at least one byte, both
34175     so that the address of the resulting object does not compare equal
34176     to any other, and because some object formats cannot even express
34177     the concept of a zero-sized common symbol, as that is how they
34178     represent an ordinary undefined external.
34179
34180     Use the expression `assemble_name (STREAM, NAME)' to output the
34181     name itself; before and after that, output the additional
34182     assembler syntax for defining the name, and a newline.
34183
34184     This macro controls how the assembler definitions of uninitialized
34185     common global variables are output.
34186
34187 -- Macro: ASM_OUTPUT_ALIGNED_COMMON (STREAM, NAME, SIZE, ALIGNMENT)
34188     Like `ASM_OUTPUT_COMMON' except takes the required alignment as a
34189     separate, explicit argument.  If you define this macro, it is used
34190     in place of `ASM_OUTPUT_COMMON', and gives you more flexibility in
34191     handling the required alignment of the variable.  The alignment is
34192     specified as the number of bits.
34193
34194 -- Macro: ASM_OUTPUT_ALIGNED_DECL_COMMON (STREAM, DECL, NAME, SIZE,
34195          ALIGNMENT)
34196     Like `ASM_OUTPUT_ALIGNED_COMMON' except that DECL of the variable
34197     to be output, if there is one, or `NULL_TREE' if there is no
34198     corresponding variable.  If you define this macro, GCC will use it
34199     in place of both `ASM_OUTPUT_COMMON' and
34200     `ASM_OUTPUT_ALIGNED_COMMON'.  Define this macro when you need to
34201     see the variable's decl in order to chose what to output.
34202
34203 -- Macro: ASM_OUTPUT_ALIGNED_BSS (STREAM, DECL, NAME, SIZE, ALIGNMENT)
34204     A C statement (sans semicolon) to output to the stdio stream
34205     STREAM the assembler definition of uninitialized global DECL named
34206     NAME whose size is SIZE bytes.  The variable ALIGNMENT is the
34207     alignment specified as the number of bits.
34208
34209     Try to use function `asm_output_aligned_bss' defined in file
34210     `varasm.c' when defining this macro.  If unable, use the expression
34211     `assemble_name (STREAM, NAME)' to output the name itself; before
34212     and after that, output the additional assembler syntax for defining
34213     the name, and a newline.
34214
34215     There are two ways of handling global BSS.  One is to define this
34216     macro.  The other is to have `TARGET_ASM_SELECT_SECTION' return a
34217     switchable BSS section (*note
34218     TARGET_HAVE_SWITCHABLE_BSS_SECTIONS::).  You do not need to do
34219     both.
34220
34221     Some languages do not have `common' data, and require a non-common
34222     form of global BSS in order to handle uninitialized globals
34223     efficiently.  C++ is one example of this.  However, if the target
34224     does not support global BSS, the front end may choose to make
34225     globals common in order to save space in the object file.
34226
34227 -- Macro: ASM_OUTPUT_LOCAL (STREAM, NAME, SIZE, ROUNDED)
34228     A C statement (sans semicolon) to output to the stdio stream
34229     STREAM the assembler definition of a local-common-label named NAME
34230     whose size is SIZE bytes.  The variable ROUNDED is the size
34231     rounded up to whatever alignment the caller wants.
34232
34233     Use the expression `assemble_name (STREAM, NAME)' to output the
34234     name itself; before and after that, output the additional
34235     assembler syntax for defining the name, and a newline.
34236
34237     This macro controls how the assembler definitions of uninitialized
34238     static variables are output.
34239
34240 -- Macro: ASM_OUTPUT_ALIGNED_LOCAL (STREAM, NAME, SIZE, ALIGNMENT)
34241     Like `ASM_OUTPUT_LOCAL' except takes the required alignment as a
34242     separate, explicit argument.  If you define this macro, it is used
34243     in place of `ASM_OUTPUT_LOCAL', and gives you more flexibility in
34244     handling the required alignment of the variable.  The alignment is
34245     specified as the number of bits.
34246
34247 -- Macro: ASM_OUTPUT_ALIGNED_DECL_LOCAL (STREAM, DECL, NAME, SIZE,
34248          ALIGNMENT)
34249     Like `ASM_OUTPUT_ALIGNED_DECL' except that DECL of the variable to
34250     be output, if there is one, or `NULL_TREE' if there is no
34251     corresponding variable.  If you define this macro, GCC will use it
34252     in place of both `ASM_OUTPUT_DECL' and `ASM_OUTPUT_ALIGNED_DECL'.
34253     Define this macro when you need to see the variable's decl in
34254     order to chose what to output.
34255
34256
34257File: gccint.info,  Node: Label Output,  Next: Initialization,  Prev: Uninitialized Data,  Up: Assembler Format
34258
3425917.21.4 Output and Generation of Labels
34260---------------------------------------
34261
34262This is about outputting labels.
34263
34264 -- Macro: ASM_OUTPUT_LABEL (STREAM, NAME)
34265     A C statement (sans semicolon) to output to the stdio stream
34266     STREAM the assembler definition of a label named NAME.  Use the
34267     expression `assemble_name (STREAM, NAME)' to output the name
34268     itself; before and after that, output the additional assembler
34269     syntax for defining the name, and a newline.  A default definition
34270     of this macro is provided which is correct for most systems.
34271
34272 -- Macro: ASM_OUTPUT_FUNCTION_LABEL (STREAM, NAME, DECL)
34273     A C statement (sans semicolon) to output to the stdio stream
34274     STREAM the assembler definition of a label named NAME of a
34275     function.  Use the expression `assemble_name (STREAM, NAME)' to
34276     output the name itself; before and after that, output the
34277     additional assembler syntax for defining the name, and a newline.
34278     A default definition of this macro is provided which is correct
34279     for most systems.
34280
34281     If this macro is not defined, then the function name is defined in
34282     the usual manner as a label (by means of `ASM_OUTPUT_LABEL').
34283
34284 -- Macro: ASM_OUTPUT_INTERNAL_LABEL (STREAM, NAME)
34285     Identical to `ASM_OUTPUT_LABEL', except that NAME is known to
34286     refer to a compiler-generated label.  The default definition uses
34287     `assemble_name_raw', which is like `assemble_name' except that it
34288     is more efficient.
34289
34290 -- Macro: SIZE_ASM_OP
34291     A C string containing the appropriate assembler directive to
34292     specify the size of a symbol, without any arguments.  On systems
34293     that use ELF, the default (in `config/elfos.h') is `"\t.size\t"';
34294     on other systems, the default is not to define this macro.
34295
34296     Define this macro only if it is correct to use the default
34297     definitions of `ASM_OUTPUT_SIZE_DIRECTIVE' and
34298     `ASM_OUTPUT_MEASURED_SIZE' for your system.  If you need your own
34299     custom definitions of those macros, or if you do not need explicit
34300     symbol sizes at all, do not define this macro.
34301
34302 -- Macro: ASM_OUTPUT_SIZE_DIRECTIVE (STREAM, NAME, SIZE)
34303     A C statement (sans semicolon) to output to the stdio stream
34304     STREAM a directive telling the assembler that the size of the
34305     symbol NAME is SIZE.  SIZE is a `HOST_WIDE_INT'.  If you define
34306     `SIZE_ASM_OP', a default definition of this macro is provided.
34307
34308 -- Macro: ASM_OUTPUT_MEASURED_SIZE (STREAM, NAME)
34309     A C statement (sans semicolon) to output to the stdio stream
34310     STREAM a directive telling the assembler to calculate the size of
34311     the symbol NAME by subtracting its address from the current
34312     address.
34313
34314     If you define `SIZE_ASM_OP', a default definition of this macro is
34315     provided.  The default assumes that the assembler recognizes a
34316     special `.' symbol as referring to the current address, and can
34317     calculate the difference between this and another symbol.  If your
34318     assembler does not recognize `.' or cannot do calculations with
34319     it, you will need to redefine `ASM_OUTPUT_MEASURED_SIZE' to use
34320     some other technique.
34321
34322 -- Macro: NO_DOLLAR_IN_LABEL
34323     Define this macro if the assembler does not accept the character
34324     `$' in label names.  By default constructors and destructors in
34325     G++ have `$' in the identifiers.  If this macro is defined, `.' is
34326     used instead.
34327
34328 -- Macro: NO_DOT_IN_LABEL
34329     Define this macro if the assembler does not accept the character
34330     `.' in label names.  By default constructors and destructors in G++
34331     have names that use `.'.  If this macro is defined, these names
34332     are rewritten to avoid `.'.
34333
34334 -- Macro: TYPE_ASM_OP
34335     A C string containing the appropriate assembler directive to
34336     specify the type of a symbol, without any arguments.  On systems
34337     that use ELF, the default (in `config/elfos.h') is `"\t.type\t"';
34338     on other systems, the default is not to define this macro.
34339
34340     Define this macro only if it is correct to use the default
34341     definition of `ASM_OUTPUT_TYPE_DIRECTIVE' for your system.  If you
34342     need your own custom definition of this macro, or if you do not
34343     need explicit symbol types at all, do not define this macro.
34344
34345 -- Macro: TYPE_OPERAND_FMT
34346     A C string which specifies (using `printf' syntax) the format of
34347     the second operand to `TYPE_ASM_OP'.  On systems that use ELF, the
34348     default (in `config/elfos.h') is `"@%s"'; on other systems, the
34349     default is not to define this macro.
34350
34351     Define this macro only if it is correct to use the default
34352     definition of `ASM_OUTPUT_TYPE_DIRECTIVE' for your system.  If you
34353     need your own custom definition of this macro, or if you do not
34354     need explicit symbol types at all, do not define this macro.
34355
34356 -- Macro: ASM_OUTPUT_TYPE_DIRECTIVE (STREAM, TYPE)
34357     A C statement (sans semicolon) to output to the stdio stream
34358     STREAM a directive telling the assembler that the type of the
34359     symbol NAME is TYPE.  TYPE is a C string; currently, that string
34360     is always either `"function"' or `"object"', but you should not
34361     count on this.
34362
34363     If you define `TYPE_ASM_OP' and `TYPE_OPERAND_FMT', a default
34364     definition of this macro is provided.
34365
34366 -- Macro: ASM_DECLARE_FUNCTION_NAME (STREAM, NAME, DECL)
34367     A C statement (sans semicolon) to output to the stdio stream
34368     STREAM any text necessary for declaring the name NAME of a
34369     function which is being defined.  This macro is responsible for
34370     outputting the label definition (perhaps using
34371     `ASM_OUTPUT_FUNCTION_LABEL').  The argument DECL is the
34372     `FUNCTION_DECL' tree node representing the function.
34373
34374     If this macro is not defined, then the function name is defined in
34375     the usual manner as a label (by means of
34376     `ASM_OUTPUT_FUNCTION_LABEL').
34377
34378     You may wish to use `ASM_OUTPUT_TYPE_DIRECTIVE' in the definition
34379     of this macro.
34380
34381 -- Macro: ASM_DECLARE_FUNCTION_SIZE (STREAM, NAME, DECL)
34382     A C statement (sans semicolon) to output to the stdio stream
34383     STREAM any text necessary for declaring the size of a function
34384     which is being defined.  The argument NAME is the name of the
34385     function.  The argument DECL is the `FUNCTION_DECL' tree node
34386     representing the function.
34387
34388     If this macro is not defined, then the function size is not
34389     defined.
34390
34391     You may wish to use `ASM_OUTPUT_MEASURED_SIZE' in the definition
34392     of this macro.
34393
34394 -- Macro: ASM_DECLARE_OBJECT_NAME (STREAM, NAME, DECL)
34395     A C statement (sans semicolon) to output to the stdio stream
34396     STREAM any text necessary for declaring the name NAME of an
34397     initialized variable which is being defined.  This macro must
34398     output the label definition (perhaps using `ASM_OUTPUT_LABEL').
34399     The argument DECL is the `VAR_DECL' tree node representing the
34400     variable.
34401
34402     If this macro is not defined, then the variable name is defined in
34403     the usual manner as a label (by means of `ASM_OUTPUT_LABEL').
34404
34405     You may wish to use `ASM_OUTPUT_TYPE_DIRECTIVE' and/or
34406     `ASM_OUTPUT_SIZE_DIRECTIVE' in the definition of this macro.
34407
34408 -- Target Hook: void TARGET_ASM_DECLARE_CONSTANT_NAME (FILE *FILE,
34409          const char *NAME, const_tree EXPR, HOST_WIDE_INT SIZE)
34410     A target hook to output to the stdio stream FILE any text necessary
34411     for declaring the name NAME of a constant which is being defined.
34412     This target hook is responsible for outputting the label
34413     definition (perhaps using `assemble_label').  The argument EXP is
34414     the value of the constant, and SIZE is the size of the constant in
34415     bytes.  The NAME will be an internal label.
34416
34417     The default version of this target hook, define the NAME in the
34418     usual manner as a label (by means of `assemble_label').
34419
34420     You may wish to use `ASM_OUTPUT_TYPE_DIRECTIVE' in this target
34421     hook.
34422
34423 -- Macro: ASM_DECLARE_REGISTER_GLOBAL (STREAM, DECL, REGNO, NAME)
34424     A C statement (sans semicolon) to output to the stdio stream
34425     STREAM any text necessary for claiming a register REGNO for a
34426     global variable DECL with name NAME.
34427
34428     If you don't define this macro, that is equivalent to defining it
34429     to do nothing.
34430
34431 -- Macro: ASM_FINISH_DECLARE_OBJECT (STREAM, DECL, TOPLEVEL, ATEND)
34432     A C statement (sans semicolon) to finish up declaring a variable
34433     name once the compiler has processed its initializer fully and
34434     thus has had a chance to determine the size of an array when
34435     controlled by an initializer.  This is used on systems where it's
34436     necessary to declare something about the size of the object.
34437
34438     If you don't define this macro, that is equivalent to defining it
34439     to do nothing.
34440
34441     You may wish to use `ASM_OUTPUT_SIZE_DIRECTIVE' and/or
34442     `ASM_OUTPUT_MEASURED_SIZE' in the definition of this macro.
34443
34444 -- Target Hook: void TARGET_ASM_GLOBALIZE_LABEL (FILE *STREAM, const
34445          char *NAME)
34446     This target hook is a function to output to the stdio stream
34447     STREAM some commands that will make the label NAME global; that
34448     is, available for reference from other files.
34449
34450     The default implementation relies on a proper definition of
34451     `GLOBAL_ASM_OP'.
34452
34453 -- Target Hook: void TARGET_ASM_GLOBALIZE_DECL_NAME (FILE *STREAM,
34454          tree DECL)
34455     This target hook is a function to output to the stdio stream
34456     STREAM some commands that will make the name associated with DECL
34457     global; that is, available for reference from other files.
34458
34459     The default implementation uses the TARGET_ASM_GLOBALIZE_LABEL
34460     target hook.
34461
34462 -- Macro: ASM_WEAKEN_LABEL (STREAM, NAME)
34463     A C statement (sans semicolon) to output to the stdio stream
34464     STREAM some commands that will make the label NAME weak; that is,
34465     available for reference from other files but only used if no other
34466     definition is available.  Use the expression `assemble_name
34467     (STREAM, NAME)' to output the name itself; before and after that,
34468     output the additional assembler syntax for making that name weak,
34469     and a newline.
34470
34471     If you don't define this macro or `ASM_WEAKEN_DECL', GCC will not
34472     support weak symbols and you should not define the `SUPPORTS_WEAK'
34473     macro.
34474
34475 -- Macro: ASM_WEAKEN_DECL (STREAM, DECL, NAME, VALUE)
34476     Combines (and replaces) the function of `ASM_WEAKEN_LABEL' and
34477     `ASM_OUTPUT_WEAK_ALIAS', allowing access to the associated function
34478     or variable decl.  If VALUE is not `NULL', this C statement should
34479     output to the stdio stream STREAM assembler code which defines
34480     (equates) the weak symbol NAME to have the value VALUE.  If VALUE
34481     is `NULL', it should output commands to make NAME weak.
34482
34483 -- Macro: ASM_OUTPUT_WEAKREF (STREAM, DECL, NAME, VALUE)
34484     Outputs a directive that enables NAME to be used to refer to
34485     symbol VALUE with weak-symbol semantics.  `decl' is the
34486     declaration of `name'.
34487
34488 -- Macro: SUPPORTS_WEAK
34489     A preprocessor constant expression which evaluates to true if the
34490     target supports weak symbols.
34491
34492     If you don't define this macro, `defaults.h' provides a default
34493     definition.  If either `ASM_WEAKEN_LABEL' or `ASM_WEAKEN_DECL' is
34494     defined, the default definition is `1'; otherwise, it is `0'.
34495
34496 -- Macro: TARGET_SUPPORTS_WEAK
34497     A C expression which evaluates to true if the target supports weak
34498     symbols.
34499
34500     If you don't define this macro, `defaults.h' provides a default
34501     definition.  The default definition is `(SUPPORTS_WEAK)'.  Define
34502     this macro if you want to control weak symbol support with a
34503     compiler flag such as `-melf'.
34504
34505 -- Macro: MAKE_DECL_ONE_ONLY (DECL)
34506     A C statement (sans semicolon) to mark DECL to be emitted as a
34507     public symbol such that extra copies in multiple translation units
34508     will be discarded by the linker.  Define this macro if your object
34509     file format provides support for this concept, such as the `COMDAT'
34510     section flags in the Microsoft Windows PE/COFF format, and this
34511     support requires changes to DECL, such as putting it in a separate
34512     section.
34513
34514 -- Macro: SUPPORTS_ONE_ONLY
34515     A C expression which evaluates to true if the target supports
34516     one-only semantics.
34517
34518     If you don't define this macro, `varasm.c' provides a default
34519     definition.  If `MAKE_DECL_ONE_ONLY' is defined, the default
34520     definition is `1'; otherwise, it is `0'.  Define this macro if you
34521     want to control one-only symbol support with a compiler flag, or if
34522     setting the `DECL_ONE_ONLY' flag is enough to mark a declaration to
34523     be emitted as one-only.
34524
34525 -- Target Hook: void TARGET_ASM_ASSEMBLE_VISIBILITY (tree DECL, int
34526          VISIBILITY)
34527     This target hook is a function to output to ASM_OUT_FILE some
34528     commands that will make the symbol(s) associated with DECL have
34529     hidden, protected or internal visibility as specified by
34530     VISIBILITY.
34531
34532 -- Macro: TARGET_WEAK_NOT_IN_ARCHIVE_TOC
34533     A C expression that evaluates to true if the target's linker
34534     expects that weak symbols do not appear in a static archive's
34535     table of contents.  The default is `0'.
34536
34537     Leaving weak symbols out of an archive's table of contents means
34538     that, if a symbol will only have a definition in one translation
34539     unit and will have undefined references from other translation
34540     units, that symbol should not be weak.  Defining this macro to be
34541     nonzero will thus have the effect that certain symbols that would
34542     normally be weak (explicit template instantiations, and vtables
34543     for polymorphic classes with noninline key methods) will instead
34544     be nonweak.
34545
34546     The C++ ABI requires this macro to be zero.  Define this macro for
34547     targets where full C++ ABI compliance is impossible and where
34548     linker restrictions require weak symbols to be left out of a
34549     static archive's table of contents.
34550
34551 -- Macro: ASM_OUTPUT_EXTERNAL (STREAM, DECL, NAME)
34552     A C statement (sans semicolon) to output to the stdio stream
34553     STREAM any text necessary for declaring the name of an external
34554     symbol named NAME which is referenced in this compilation but not
34555     defined.  The value of DECL is the tree node for the declaration.
34556
34557     This macro need not be defined if it does not need to output
34558     anything.  The GNU assembler and most Unix assemblers don't
34559     require anything.
34560
34561 -- Target Hook: void TARGET_ASM_EXTERNAL_LIBCALL (rtx SYMREF)
34562     This target hook is a function to output to ASM_OUT_FILE an
34563     assembler pseudo-op to declare a library function name external.
34564     The name of the library function is given by SYMREF, which is a
34565     `symbol_ref'.
34566
34567 -- Target Hook: void TARGET_ASM_MARK_DECL_PRESERVED (const char
34568          *SYMBOL)
34569     This target hook is a function to output to ASM_OUT_FILE an
34570     assembler directive to annotate SYMBOL as used.  The Darwin target
34571     uses the .no_dead_code_strip directive.
34572
34573 -- Macro: ASM_OUTPUT_LABELREF (STREAM, NAME)
34574     A C statement (sans semicolon) to output to the stdio stream
34575     STREAM a reference in assembler syntax to a label named NAME.
34576     This should add `_' to the front of the name, if that is customary
34577     on your operating system, as it is in most Berkeley Unix systems.
34578     This macro is used in `assemble_name'.
34579
34580 -- Target Hook: tree TARGET_MANGLE_ASSEMBLER_NAME (const char *NAME)
34581     Given a symbol NAME, perform same mangling as `varasm.c''s
34582     `assemble_name', but in memory rather than to a file stream,
34583     returning result as an `IDENTIFIER_NODE'.  Required for correct
34584     LTO symtabs.  The default implementation calls the
34585     `TARGET_STRIP_NAME_ENCODING' hook and then prepends the
34586     `USER_LABEL_PREFIX', if any.
34587
34588 -- Macro: ASM_OUTPUT_SYMBOL_REF (STREAM, SYM)
34589     A C statement (sans semicolon) to output a reference to
34590     `SYMBOL_REF' SYM.  If not defined, `assemble_name' will be used to
34591     output the name of the symbol.  This macro may be used to modify
34592     the way a symbol is referenced depending on information encoded by
34593     `TARGET_ENCODE_SECTION_INFO'.
34594
34595 -- Macro: ASM_OUTPUT_LABEL_REF (STREAM, BUF)
34596     A C statement (sans semicolon) to output a reference to BUF, the
34597     result of `ASM_GENERATE_INTERNAL_LABEL'.  If not defined,
34598     `assemble_name' will be used to output the name of the symbol.
34599     This macro is not used by `output_asm_label', or the `%l'
34600     specifier that calls it; the intention is that this macro should
34601     be set when it is necessary to output a label differently when its
34602     address is being taken.
34603
34604 -- Target Hook: void TARGET_ASM_INTERNAL_LABEL (FILE *STREAM, const
34605          char *PREFIX, unsigned long LABELNO)
34606     A function to output to the stdio stream STREAM a label whose name
34607     is made from the string PREFIX and the number LABELNO.
34608
34609     It is absolutely essential that these labels be distinct from the
34610     labels used for user-level functions and variables.  Otherwise,
34611     certain programs will have name conflicts with internal labels.
34612
34613     It is desirable to exclude internal labels from the symbol table
34614     of the object file.  Most assemblers have a naming convention for
34615     labels that should be excluded; on many systems, the letter `L' at
34616     the beginning of a label has this effect.  You should find out what
34617     convention your system uses, and follow it.
34618
34619     The default version of this function utilizes
34620     `ASM_GENERATE_INTERNAL_LABEL'.
34621
34622 -- Macro: ASM_OUTPUT_DEBUG_LABEL (STREAM, PREFIX, NUM)
34623     A C statement to output to the stdio stream STREAM a debug info
34624     label whose name is made from the string PREFIX and the number
34625     NUM.  This is useful for VLIW targets, where debug info labels may
34626     need to be treated differently than branch target labels.  On some
34627     systems, branch target labels must be at the beginning of
34628     instruction bundles, but debug info labels can occur in the middle
34629     of instruction bundles.
34630
34631     If this macro is not defined, then
34632     `(*targetm.asm_out.internal_label)' will be used.
34633
34634 -- Macro: ASM_GENERATE_INTERNAL_LABEL (STRING, PREFIX, NUM)
34635     A C statement to store into the string STRING a label whose name
34636     is made from the string PREFIX and the number NUM.
34637
34638     This string, when output subsequently by `assemble_name', should
34639     produce the output that `(*targetm.asm_out.internal_label)' would
34640     produce with the same PREFIX and NUM.
34641
34642     If the string begins with `*', then `assemble_name' will output
34643     the rest of the string unchanged.  It is often convenient for
34644     `ASM_GENERATE_INTERNAL_LABEL' to use `*' in this way.  If the
34645     string doesn't start with `*', then `ASM_OUTPUT_LABELREF' gets to
34646     output the string, and may change it.  (Of course,
34647     `ASM_OUTPUT_LABELREF' is also part of your machine description, so
34648     you should know what it does on your machine.)
34649
34650 -- Macro: ASM_FORMAT_PRIVATE_NAME (OUTVAR, NAME, NUMBER)
34651     A C expression to assign to OUTVAR (which is a variable of type
34652     `char *') a newly allocated string made from the string NAME and
34653     the number NUMBER, with some suitable punctuation added.  Use
34654     `alloca' to get space for the string.
34655
34656     The string will be used as an argument to `ASM_OUTPUT_LABELREF' to
34657     produce an assembler label for an internal static variable whose
34658     name is NAME.  Therefore, the string must be such as to result in
34659     valid assembler code.  The argument NUMBER is different each time
34660     this macro is executed; it prevents conflicts between
34661     similarly-named internal static variables in different scopes.
34662
34663     Ideally this string should not be a valid C identifier, to prevent
34664     any conflict with the user's own symbols.  Most assemblers allow
34665     periods or percent signs in assembler symbols; putting at least
34666     one of these between the name and the number will suffice.
34667
34668     If this macro is not defined, a default definition will be provided
34669     which is correct for most systems.
34670
34671 -- Macro: ASM_OUTPUT_DEF (STREAM, NAME, VALUE)
34672     A C statement to output to the stdio stream STREAM assembler code
34673     which defines (equates) the symbol NAME to have the value VALUE.
34674
34675     If `SET_ASM_OP' is defined, a default definition is provided which
34676     is correct for most systems.
34677
34678 -- Macro: ASM_OUTPUT_DEF_FROM_DECLS (STREAM, DECL_OF_NAME,
34679          DECL_OF_VALUE)
34680     A C statement to output to the stdio stream STREAM assembler code
34681     which defines (equates) the symbol whose tree node is DECL_OF_NAME
34682     to have the value of the tree node DECL_OF_VALUE.  This macro will
34683     be used in preference to `ASM_OUTPUT_DEF' if it is defined and if
34684     the tree nodes are available.
34685
34686     If `SET_ASM_OP' is defined, a default definition is provided which
34687     is correct for most systems.
34688
34689 -- Macro: TARGET_DEFERRED_OUTPUT_DEFS (DECL_OF_NAME, DECL_OF_VALUE)
34690     A C statement that evaluates to true if the assembler code which
34691     defines (equates) the symbol whose tree node is DECL_OF_NAME to
34692     have the value of the tree node DECL_OF_VALUE should be emitted
34693     near the end of the current compilation unit.  The default is to
34694     not defer output of defines.  This macro affects defines output by
34695     `ASM_OUTPUT_DEF' and `ASM_OUTPUT_DEF_FROM_DECLS'.
34696
34697 -- Macro: ASM_OUTPUT_WEAK_ALIAS (STREAM, NAME, VALUE)
34698     A C statement to output to the stdio stream STREAM assembler code
34699     which defines (equates) the weak symbol NAME to have the value
34700     VALUE.  If VALUE is `NULL', it defines NAME as an undefined weak
34701     symbol.
34702
34703     Define this macro if the target only supports weak aliases; define
34704     `ASM_OUTPUT_DEF' instead if possible.
34705
34706 -- Macro: OBJC_GEN_METHOD_LABEL (BUF, IS_INST, CLASS_NAME, CAT_NAME,
34707          SEL_NAME)
34708     Define this macro to override the default assembler names used for
34709     Objective-C methods.
34710
34711     The default name is a unique method number followed by the name of
34712     the class (e.g. `_1_Foo').  For methods in categories, the name of
34713     the category is also included in the assembler name (e.g.
34714     `_1_Foo_Bar').
34715
34716     These names are safe on most systems, but make debugging difficult
34717     since the method's selector is not present in the name.
34718     Therefore, particular systems define other ways of computing names.
34719
34720     BUF is an expression of type `char *' which gives you a buffer in
34721     which to store the name; its length is as long as CLASS_NAME,
34722     CAT_NAME and SEL_NAME put together, plus 50 characters extra.
34723
34724     The argument IS_INST specifies whether the method is an instance
34725     method or a class method; CLASS_NAME is the name of the class;
34726     CAT_NAME is the name of the category (or `NULL' if the method is
34727     not in a category); and SEL_NAME is the name of the selector.
34728
34729     On systems where the assembler can handle quoted names, you can
34730     use this macro to provide more human-readable names.
34731
34732
34733File: gccint.info,  Node: Initialization,  Next: Macros for Initialization,  Prev: Label Output,  Up: Assembler Format
34734
3473517.21.5 How Initialization Functions Are Handled
34736------------------------------------------------
34737
34738The compiled code for certain languages includes "constructors" (also
34739called "initialization routines")--functions to initialize data in the
34740program when the program is started.  These functions need to be called
34741before the program is "started"--that is to say, before `main' is
34742called.
34743
34744 Compiling some languages generates "destructors" (also called
34745"termination routines") that should be called when the program
34746terminates.
34747
34748 To make the initialization and termination functions work, the compiler
34749must output something in the assembler code to cause those functions to
34750be called at the appropriate time.  When you port the compiler to a new
34751system, you need to specify how to do this.
34752
34753 There are two major ways that GCC currently supports the execution of
34754initialization and termination functions.  Each way has two variants.
34755Much of the structure is common to all four variations.
34756
34757 The linker must build two lists of these functions--a list of
34758initialization functions, called `__CTOR_LIST__', and a list of
34759termination functions, called `__DTOR_LIST__'.
34760
34761 Each list always begins with an ignored function pointer (which may
34762hold 0, -1, or a count of the function pointers after it, depending on
34763the environment).  This is followed by a series of zero or more function
34764pointers to constructors (or destructors), followed by a function
34765pointer containing zero.
34766
34767 Depending on the operating system and its executable file format,
34768either `crtstuff.c' or `libgcc2.c' traverses these lists at startup
34769time and exit time.  Constructors are called in reverse order of the
34770list; destructors in forward order.
34771
34772 The best way to handle static constructors works only for object file
34773formats which provide arbitrarily-named sections.  A section is set
34774aside for a list of constructors, and another for a list of destructors.
34775Traditionally these are called `.ctors' and `.dtors'.  Each object file
34776that defines an initialization function also puts a word in the
34777constructor section to point to that function.  The linker accumulates
34778all these words into one contiguous `.ctors' section.  Termination
34779functions are handled similarly.
34780
34781 This method will be chosen as the default by `target-def.h' if
34782`TARGET_ASM_NAMED_SECTION' is defined.  A target that does not support
34783arbitrary sections, but does support special designated constructor and
34784destructor sections may define `CTORS_SECTION_ASM_OP' and
34785`DTORS_SECTION_ASM_OP' to achieve the same effect.
34786
34787 When arbitrary sections are available, there are two variants,
34788depending upon how the code in `crtstuff.c' is called.  On systems that
34789support a ".init" section which is executed at program startup, parts
34790of `crtstuff.c' are compiled into that section.  The program is linked
34791by the `gcc' driver like this:
34792
34793     ld -o OUTPUT_FILE crti.o crtbegin.o ... -lgcc crtend.o crtn.o
34794
34795 The prologue of a function (`__init') appears in the `.init' section
34796of `crti.o'; the epilogue appears in `crtn.o'.  Likewise for the
34797function `__fini' in the ".fini" section.  Normally these files are
34798provided by the operating system or by the GNU C library, but are
34799provided by GCC for a few targets.
34800
34801 The objects `crtbegin.o' and `crtend.o' are (for most targets)
34802compiled from `crtstuff.c'.  They contain, among other things, code
34803fragments within the `.init' and `.fini' sections that branch to
34804routines in the `.text' section.  The linker will pull all parts of a
34805section together, which results in a complete `__init' function that
34806invokes the routines we need at startup.
34807
34808 To use this variant, you must define the `INIT_SECTION_ASM_OP' macro
34809properly.
34810
34811 If no init section is available, when GCC compiles any function called
34812`main' (or more accurately, any function designated as a program entry
34813point by the language front end calling `expand_main_function'), it
34814inserts a procedure call to `__main' as the first executable code after
34815the function prologue.  The `__main' function is defined in `libgcc2.c'
34816and runs the global constructors.
34817
34818 In file formats that don't support arbitrary sections, there are again
34819two variants.  In the simplest variant, the GNU linker (GNU `ld') and
34820an `a.out' format must be used.  In this case, `TARGET_ASM_CONSTRUCTOR'
34821is defined to produce a `.stabs' entry of type `N_SETT', referencing
34822the name `__CTOR_LIST__', and with the address of the void function
34823containing the initialization code as its value.  The GNU linker
34824recognizes this as a request to add the value to a "set"; the values
34825are accumulated, and are eventually placed in the executable as a
34826vector in the format described above, with a leading (ignored) count
34827and a trailing zero element.  `TARGET_ASM_DESTRUCTOR' is handled
34828similarly.  Since no init section is available, the absence of
34829`INIT_SECTION_ASM_OP' causes the compilation of `main' to call `__main'
34830as above, starting the initialization process.
34831
34832 The last variant uses neither arbitrary sections nor the GNU linker.
34833This is preferable when you want to do dynamic linking and when using
34834file formats which the GNU linker does not support, such as `ECOFF'.  In
34835this case, `TARGET_HAVE_CTORS_DTORS' is false, initialization and
34836termination functions are recognized simply by their names.  This
34837requires an extra program in the linkage step, called `collect2'.  This
34838program pretends to be the linker, for use with GCC; it does its job by
34839running the ordinary linker, but also arranges to include the vectors of
34840initialization and termination functions.  These functions are called
34841via `__main' as described above.  In order to use this method,
34842`use_collect2' must be defined in the target in `config.gcc'.
34843
34844 The following section describes the specific macros that control and
34845customize the handling of initialization and termination functions.
34846
34847
34848File: gccint.info,  Node: Macros for Initialization,  Next: Instruction Output,  Prev: Initialization,  Up: Assembler Format
34849
3485017.21.6 Macros Controlling Initialization Routines
34851--------------------------------------------------
34852
34853Here are the macros that control how the compiler handles initialization
34854and termination functions:
34855
34856 -- Macro: INIT_SECTION_ASM_OP
34857     If defined, a C string constant, including spacing, for the
34858     assembler operation to identify the following data as
34859     initialization code.  If not defined, GCC will assume such a
34860     section does not exist.  When you are using special sections for
34861     initialization and termination functions, this macro also controls
34862     how `crtstuff.c' and `libgcc2.c' arrange to run the initialization
34863     functions.
34864
34865 -- Macro: HAS_INIT_SECTION
34866     If defined, `main' will not call `__main' as described above.
34867     This macro should be defined for systems that control start-up code
34868     on a symbol-by-symbol basis, such as OSF/1, and should not be
34869     defined explicitly for systems that support `INIT_SECTION_ASM_OP'.
34870
34871 -- Macro: LD_INIT_SWITCH
34872     If defined, a C string constant for a switch that tells the linker
34873     that the following symbol is an initialization routine.
34874
34875 -- Macro: LD_FINI_SWITCH
34876     If defined, a C string constant for a switch that tells the linker
34877     that the following symbol is a finalization routine.
34878
34879 -- Macro: COLLECT_SHARED_INIT_FUNC (STREAM, FUNC)
34880     If defined, a C statement that will write a function that can be
34881     automatically called when a shared library is loaded.  The function
34882     should call FUNC, which takes no arguments.  If not defined, and
34883     the object format requires an explicit initialization function,
34884     then a function called `_GLOBAL__DI' will be generated.
34885
34886     This function and the following one are used by collect2 when
34887     linking a shared library that needs constructors or destructors,
34888     or has DWARF2 exception tables embedded in the code.
34889
34890 -- Macro: COLLECT_SHARED_FINI_FUNC (STREAM, FUNC)
34891     If defined, a C statement that will write a function that can be
34892     automatically called when a shared library is unloaded.  The
34893     function should call FUNC, which takes no arguments.  If not
34894     defined, and the object format requires an explicit finalization
34895     function, then a function called `_GLOBAL__DD' will be generated.
34896
34897 -- Macro: INVOKE__main
34898     If defined, `main' will call `__main' despite the presence of
34899     `INIT_SECTION_ASM_OP'.  This macro should be defined for systems
34900     where the init section is not actually run automatically, but is
34901     still useful for collecting the lists of constructors and
34902     destructors.
34903
34904 -- Macro: SUPPORTS_INIT_PRIORITY
34905     If nonzero, the C++ `init_priority' attribute is supported and the
34906     compiler should emit instructions to control the order of
34907     initialization of objects.  If zero, the compiler will issue an
34908     error message upon encountering an `init_priority' attribute.
34909
34910 -- Target Hook: bool TARGET_HAVE_CTORS_DTORS
34911     This value is true if the target supports some "native" method of
34912     collecting constructors and destructors to be run at startup and
34913     exit.  It is false if we must use `collect2'.
34914
34915 -- Target Hook: void TARGET_ASM_CONSTRUCTOR (rtx SYMBOL, int PRIORITY)
34916     If defined, a function that outputs assembler code to arrange to
34917     call the function referenced by SYMBOL at initialization time.
34918
34919     Assume that SYMBOL is a `SYMBOL_REF' for a function taking no
34920     arguments and with no return value.  If the target supports
34921     initialization priorities, PRIORITY is a value between 0 and
34922     `MAX_INIT_PRIORITY'; otherwise it must be `DEFAULT_INIT_PRIORITY'.
34923
34924     If this macro is not defined by the target, a suitable default will
34925     be chosen if (1) the target supports arbitrary section names, (2)
34926     the target defines `CTORS_SECTION_ASM_OP', or (3) `USE_COLLECT2'
34927     is not defined.
34928
34929 -- Target Hook: void TARGET_ASM_DESTRUCTOR (rtx SYMBOL, int PRIORITY)
34930     This is like `TARGET_ASM_CONSTRUCTOR' but used for termination
34931     functions rather than initialization functions.
34932
34933 If `TARGET_HAVE_CTORS_DTORS' is true, the initialization routine
34934generated for the generated object file will have static linkage.
34935
34936 If your system uses `collect2' as the means of processing
34937constructors, then that program normally uses `nm' to scan an object
34938file for constructor functions to be called.
34939
34940 On certain kinds of systems, you can define this macro to make
34941`collect2' work faster (and, in some cases, make it work at all):
34942
34943 -- Macro: OBJECT_FORMAT_COFF
34944     Define this macro if the system uses COFF (Common Object File
34945     Format) object files, so that `collect2' can assume this format
34946     and scan object files directly for dynamic constructor/destructor
34947     functions.
34948
34949     This macro is effective only in a native compiler; `collect2' as
34950     part of a cross compiler always uses `nm' for the target machine.
34951
34952 -- Macro: REAL_NM_FILE_NAME
34953     Define this macro as a C string constant containing the file name
34954     to use to execute `nm'.  The default is to search the path
34955     normally for `nm'.
34956
34957 -- Macro: NM_FLAGS
34958     `collect2' calls `nm' to scan object files for static constructors
34959     and destructors and LTO info.  By default, `-n' is passed.  Define
34960     `NM_FLAGS' to a C string constant if other options are needed to
34961     get the same output format as GNU `nm -n' produces.
34962
34963 If your system supports shared libraries and has a program to list the
34964dynamic dependencies of a given library or executable, you can define
34965these macros to enable support for running initialization and
34966termination functions in shared libraries:
34967
34968 -- Macro: LDD_SUFFIX
34969     Define this macro to a C string constant containing the name of
34970     the program which lists dynamic dependencies, like `ldd' under
34971     SunOS 4.
34972
34973 -- Macro: PARSE_LDD_OUTPUT (PTR)
34974     Define this macro to be C code that extracts filenames from the
34975     output of the program denoted by `LDD_SUFFIX'.  PTR is a variable
34976     of type `char *' that points to the beginning of a line of output
34977     from `LDD_SUFFIX'.  If the line lists a dynamic dependency, the
34978     code must advance PTR to the beginning of the filename on that
34979     line.  Otherwise, it must set PTR to `NULL'.
34980
34981 -- Macro: SHLIB_SUFFIX
34982     Define this macro to a C string constant containing the default
34983     shared library extension of the target (e.g., `".so"').  `collect2'
34984     strips version information after this suffix when generating global
34985     constructor and destructor names.  This define is only needed on
34986     targets that use `collect2' to process constructors and
34987     destructors.
34988
34989
34990File: gccint.info,  Node: Instruction Output,  Next: Dispatch Tables,  Prev: Macros for Initialization,  Up: Assembler Format
34991
3499217.21.7 Output of Assembler Instructions
34993----------------------------------------
34994
34995This describes assembler instruction output.
34996
34997 -- Macro: REGISTER_NAMES
34998     A C initializer containing the assembler's names for the machine
34999     registers, each one as a C string constant.  This is what
35000     translates register numbers in the compiler into assembler
35001     language.
35002
35003 -- Macro: ADDITIONAL_REGISTER_NAMES
35004     If defined, a C initializer for an array of structures containing
35005     a name and a register number.  This macro defines additional names
35006     for hard registers, thus allowing the `asm' option in declarations
35007     to refer to registers using alternate names.
35008
35009 -- Macro: OVERLAPPING_REGISTER_NAMES
35010     If defined, a C initializer for an array of structures containing a
35011     name, a register number and a count of the number of consecutive
35012     machine registers the name overlaps.  This macro defines additional
35013     names for hard registers, thus allowing the `asm' option in
35014     declarations to refer to registers using alternate names.  Unlike
35015     `ADDITIONAL_REGISTER_NAMES', this macro should be used when the
35016     register name implies multiple underlying registers.
35017
35018     This macro should be used when it is important that a clobber in an
35019     `asm' statement clobbers all the underlying values implied by the
35020     register name.  For example, on ARM, clobbering the
35021     double-precision VFP register "d0" implies clobbering both
35022     single-precision registers "s0" and "s1".
35023
35024 -- Macro: ASM_OUTPUT_OPCODE (STREAM, PTR)
35025     Define this macro if you are using an unusual assembler that
35026     requires different names for the machine instructions.
35027
35028     The definition is a C statement or statements which output an
35029     assembler instruction opcode to the stdio stream STREAM.  The
35030     macro-operand PTR is a variable of type `char *' which points to
35031     the opcode name in its "internal" form--the form that is written
35032     in the machine description.  The definition should output the
35033     opcode name to STREAM, performing any translation you desire, and
35034     increment the variable PTR to point at the end of the opcode so
35035     that it will not be output twice.
35036
35037     In fact, your macro definition may process less than the entire
35038     opcode name, or more than the opcode name; but if you want to
35039     process text that includes `%'-sequences to substitute operands,
35040     you must take care of the substitution yourself.  Just be sure to
35041     increment PTR over whatever text should not be output normally.
35042
35043     If you need to look at the operand values, they can be found as the
35044     elements of `recog_data.operand'.
35045
35046     If the macro definition does nothing, the instruction is output in
35047     the usual way.
35048
35049 -- Macro: FINAL_PRESCAN_INSN (INSN, OPVEC, NOPERANDS)
35050     If defined, a C statement to be executed just prior to the output
35051     of assembler code for INSN, to modify the extracted operands so
35052     they will be output differently.
35053
35054     Here the argument OPVEC is the vector containing the operands
35055     extracted from INSN, and NOPERANDS is the number of elements of
35056     the vector which contain meaningful data for this insn.  The
35057     contents of this vector are what will be used to convert the insn
35058     template into assembler code, so you can change the assembler
35059     output by changing the contents of the vector.
35060
35061     This macro is useful when various assembler syntaxes share a single
35062     file of instruction patterns; by defining this macro differently,
35063     you can cause a large class of instructions to be output
35064     differently (such as with rearranged operands).  Naturally,
35065     variations in assembler syntax affecting individual insn patterns
35066     ought to be handled by writing conditional output routines in
35067     those patterns.
35068
35069     If this macro is not defined, it is equivalent to a null statement.
35070
35071 -- Target Hook: void TARGET_ASM_FINAL_POSTSCAN_INSN (FILE *FILE, rtx
35072          INSN, rtx *OPVEC, int NOPERANDS)
35073     If defined, this target hook is a function which is executed just
35074     after the output of assembler code for INSN, to change the mode of
35075     the assembler if necessary.
35076
35077     Here the argument OPVEC is the vector containing the operands
35078     extracted from INSN, and NOPERANDS is the number of elements of
35079     the vector which contain meaningful data for this insn.  The
35080     contents of this vector are what was used to convert the insn
35081     template into assembler code, so you can change the assembler mode
35082     by checking the contents of the vector.
35083
35084 -- Macro: PRINT_OPERAND (STREAM, X, CODE)
35085     A C compound statement to output to stdio stream STREAM the
35086     assembler syntax for an instruction operand X.  X is an RTL
35087     expression.
35088
35089     CODE is a value that can be used to specify one of several ways of
35090     printing the operand.  It is used when identical operands must be
35091     printed differently depending on the context.  CODE comes from the
35092     `%' specification that was used to request printing of the
35093     operand.  If the specification was just `%DIGIT' then CODE is 0;
35094     if the specification was `%LTR DIGIT' then CODE is the ASCII code
35095     for LTR.
35096
35097     If X is a register, this macro should print the register's name.
35098     The names can be found in an array `reg_names' whose type is `char
35099     *[]'.  `reg_names' is initialized from `REGISTER_NAMES'.
35100
35101     When the machine description has a specification `%PUNCT' (a `%'
35102     followed by a punctuation character), this macro is called with a
35103     null pointer for X and the punctuation character for CODE.
35104
35105 -- Macro: PRINT_OPERAND_PUNCT_VALID_P (CODE)
35106     A C expression which evaluates to true if CODE is a valid
35107     punctuation character for use in the `PRINT_OPERAND' macro.  If
35108     `PRINT_OPERAND_PUNCT_VALID_P' is not defined, it means that no
35109     punctuation characters (except for the standard one, `%') are used
35110     in this way.
35111
35112 -- Macro: PRINT_OPERAND_ADDRESS (STREAM, X)
35113     A C compound statement to output to stdio stream STREAM the
35114     assembler syntax for an instruction operand that is a memory
35115     reference whose address is X.  X is an RTL expression.
35116
35117     On some machines, the syntax for a symbolic address depends on the
35118     section that the address refers to.  On these machines, define the
35119     hook `TARGET_ENCODE_SECTION_INFO' to store the information into the
35120     `symbol_ref', and then check for it here.  *Note Assembler
35121     Format::.
35122
35123 -- Macro: DBR_OUTPUT_SEQEND (FILE)
35124     A C statement, to be executed after all slot-filler instructions
35125     have been output.  If necessary, call `dbr_sequence_length' to
35126     determine the number of slots filled in a sequence (zero if not
35127     currently outputting a sequence), to decide how many no-ops to
35128     output, or whatever.
35129
35130     Don't define this macro if it has nothing to do, but it is helpful
35131     in reading assembly output if the extent of the delay sequence is
35132     made explicit (e.g. with white space).
35133
35134 Note that output routines for instructions with delay slots must be
35135prepared to deal with not being output as part of a sequence (i.e. when
35136the scheduling pass is not run, or when no slot fillers could be
35137found.)  The variable `final_sequence' is null when not processing a
35138sequence, otherwise it contains the `sequence' rtx being output.
35139
35140 -- Macro: REGISTER_PREFIX
35141 -- Macro: LOCAL_LABEL_PREFIX
35142 -- Macro: USER_LABEL_PREFIX
35143 -- Macro: IMMEDIATE_PREFIX
35144     If defined, C string expressions to be used for the `%R', `%L',
35145     `%U', and `%I' options of `asm_fprintf' (see `final.c').  These
35146     are useful when a single `md' file must support multiple assembler
35147     formats.  In that case, the various `tm.h' files can define these
35148     macros differently.
35149
35150 -- Macro: ASM_FPRINTF_EXTENSIONS (FILE, ARGPTR, FORMAT)
35151     If defined this macro should expand to a series of `case'
35152     statements which will be parsed inside the `switch' statement of
35153     the `asm_fprintf' function.  This allows targets to define extra
35154     printf formats which may useful when generating their assembler
35155     statements.  Note that uppercase letters are reserved for future
35156     generic extensions to asm_fprintf, and so are not available to
35157     target specific code.  The output file is given by the parameter
35158     FILE.  The varargs input pointer is ARGPTR and the rest of the
35159     format string, starting the character after the one that is being
35160     switched upon, is pointed to by FORMAT.
35161
35162 -- Macro: ASSEMBLER_DIALECT
35163     If your target supports multiple dialects of assembler language
35164     (such as different opcodes), define this macro as a C expression
35165     that gives the numeric index of the assembler language dialect to
35166     use, with zero as the first variant.
35167
35168     If this macro is defined, you may use constructs of the form
35169          `{option0|option1|option2...}'
35170     in the output templates of patterns (*note Output Template::) or
35171     in the first argument of `asm_fprintf'.  This construct outputs
35172     `option0', `option1', `option2', etc., if the value of
35173     `ASSEMBLER_DIALECT' is zero, one, two, etc.  Any special characters
35174     within these strings retain their usual meaning.  If there are
35175     fewer alternatives within the braces than the value of
35176     `ASSEMBLER_DIALECT', the construct outputs nothing.
35177
35178     If you do not define this macro, the characters `{', `|' and `}'
35179     do not have any special meaning when used in templates or operands
35180     to `asm_fprintf'.
35181
35182     Define the macros `REGISTER_PREFIX', `LOCAL_LABEL_PREFIX',
35183     `USER_LABEL_PREFIX' and `IMMEDIATE_PREFIX' if you can express the
35184     variations in assembler language syntax with that mechanism.
35185     Define `ASSEMBLER_DIALECT' and use the `{option0|option1}' syntax
35186     if the syntax variant are larger and involve such things as
35187     different opcodes or operand order.
35188
35189 -- Macro: ASM_OUTPUT_REG_PUSH (STREAM, REGNO)
35190     A C expression to output to STREAM some assembler code which will
35191     push hard register number REGNO onto the stack.  The code need not
35192     be optimal, since this macro is used only when profiling.
35193
35194 -- Macro: ASM_OUTPUT_REG_POP (STREAM, REGNO)
35195     A C expression to output to STREAM some assembler code which will
35196     pop hard register number REGNO off of the stack.  The code need
35197     not be optimal, since this macro is used only when profiling.
35198
35199
35200File: gccint.info,  Node: Dispatch Tables,  Next: Exception Region Output,  Prev: Instruction Output,  Up: Assembler Format
35201
3520217.21.8 Output of Dispatch Tables
35203---------------------------------
35204
35205This concerns dispatch tables.
35206
35207 -- Macro: ASM_OUTPUT_ADDR_DIFF_ELT (STREAM, BODY, VALUE, REL)
35208     A C statement to output to the stdio stream STREAM an assembler
35209     pseudo-instruction to generate a difference between two labels.
35210     VALUE and REL are the numbers of two internal labels.  The
35211     definitions of these labels are output using
35212     `(*targetm.asm_out.internal_label)', and they must be printed in
35213     the same way here.  For example,
35214
35215          fprintf (STREAM, "\t.word L%d-L%d\n",
35216                   VALUE, REL)
35217
35218     You must provide this macro on machines where the addresses in a
35219     dispatch table are relative to the table's own address.  If
35220     defined, GCC will also use this macro on all machines when
35221     producing PIC.  BODY is the body of the `ADDR_DIFF_VEC'; it is
35222     provided so that the mode and flags can be read.
35223
35224 -- Macro: ASM_OUTPUT_ADDR_VEC_ELT (STREAM, VALUE)
35225     This macro should be provided on machines where the addresses in a
35226     dispatch table are absolute.
35227
35228     The definition should be a C statement to output to the stdio
35229     stream STREAM an assembler pseudo-instruction to generate a
35230     reference to a label.  VALUE is the number of an internal label
35231     whose definition is output using
35232     `(*targetm.asm_out.internal_label)'.  For example,
35233
35234          fprintf (STREAM, "\t.word L%d\n", VALUE)
35235
35236 -- Macro: ASM_OUTPUT_CASE_LABEL (STREAM, PREFIX, NUM, TABLE)
35237     Define this if the label before a jump-table needs to be output
35238     specially.  The first three arguments are the same as for
35239     `(*targetm.asm_out.internal_label)'; the fourth argument is the
35240     jump-table which follows (a `jump_insn' containing an `addr_vec'
35241     or `addr_diff_vec').
35242
35243     This feature is used on system V to output a `swbeg' statement for
35244     the table.
35245
35246     If this macro is not defined, these labels are output with
35247     `(*targetm.asm_out.internal_label)'.
35248
35249 -- Macro: ASM_OUTPUT_CASE_END (STREAM, NUM, TABLE)
35250     Define this if something special must be output at the end of a
35251     jump-table.  The definition should be a C statement to be executed
35252     after the assembler code for the table is written.  It should write
35253     the appropriate code to stdio stream STREAM.  The argument TABLE
35254     is the jump-table insn, and NUM is the label-number of the
35255     preceding label.
35256
35257     If this macro is not defined, nothing special is output at the end
35258     of the jump-table.
35259
35260 -- Target Hook: void TARGET_ASM_EMIT_UNWIND_LABEL (FILE *STREAM, tree
35261          DECL, int FOR_EH, int EMPTY)
35262     This target hook emits a label at the beginning of each FDE.  It
35263     should be defined on targets where FDEs need special labels, and it
35264     should write the appropriate label, for the FDE associated with the
35265     function declaration DECL, to the stdio stream STREAM.  The third
35266     argument, FOR_EH, is a boolean: true if this is for an exception
35267     table.  The fourth argument, EMPTY, is a boolean: true if this is
35268     a placeholder label for an omitted FDE.
35269
35270     The default is that FDEs are not given nonlocal labels.
35271
35272 -- Target Hook: void TARGET_ASM_EMIT_EXCEPT_TABLE_LABEL (FILE *STREAM)
35273     This target hook emits a label at the beginning of the exception
35274     table.  It should be defined on targets where it is desirable for
35275     the table to be broken up according to function.
35276
35277     The default is that no label is emitted.
35278
35279 -- Target Hook: void TARGET_ASM_EMIT_EXCEPT_PERSONALITY (rtx
35280          PERSONALITY)
35281     If the target implements `TARGET_ASM_UNWIND_EMIT', this hook may
35282     be used to emit a directive to install a personality hook into the
35283     unwind info.  This hook should not be used if dwarf2 unwind info
35284     is used.
35285
35286 -- Target Hook: void TARGET_ASM_UNWIND_EMIT (FILE *STREAM, rtx INSN)
35287     This target hook emits assembly directives required to unwind the
35288     given instruction.  This is only used when
35289     `TARGET_EXCEPT_UNWIND_INFO' returns `UI_TARGET'.
35290
35291 -- Target Hook: bool TARGET_ASM_UNWIND_EMIT_BEFORE_INSN
35292     True if the `TARGET_ASM_UNWIND_EMIT' hook should be called before
35293     the assembly for INSN has been emitted, false if the hook should
35294     be called afterward.
35295
35296
35297File: gccint.info,  Node: Exception Region Output,  Next: Alignment Output,  Prev: Dispatch Tables,  Up: Assembler Format
35298
3529917.21.9 Assembler Commands for Exception Regions
35300------------------------------------------------
35301
35302This describes commands marking the start and the end of an exception
35303region.
35304
35305 -- Macro: EH_FRAME_SECTION_NAME
35306     If defined, a C string constant for the name of the section
35307     containing exception handling frame unwind information.  If not
35308     defined, GCC will provide a default definition if the target
35309     supports named sections.  `crtstuff.c' uses this macro to switch
35310     to the appropriate section.
35311
35312     You should define this symbol if your target supports DWARF 2 frame
35313     unwind information and the default definition does not work.
35314
35315 -- Macro: EH_FRAME_IN_DATA_SECTION
35316     If defined, DWARF 2 frame unwind information will be placed in the
35317     data section even though the target supports named sections.  This
35318     might be necessary, for instance, if the system linker does garbage
35319     collection and sections cannot be marked as not to be collected.
35320
35321     Do not define this macro unless `TARGET_ASM_NAMED_SECTION' is also
35322     defined.
35323
35324 -- Macro: EH_TABLES_CAN_BE_READ_ONLY
35325     Define this macro to 1 if your target is such that no frame unwind
35326     information encoding used with non-PIC code will ever require a
35327     runtime relocation, but the linker may not support merging
35328     read-only and read-write sections into a single read-write section.
35329
35330 -- Macro: MASK_RETURN_ADDR
35331     An rtx used to mask the return address found via
35332     `RETURN_ADDR_RTX', so that it does not contain any extraneous set
35333     bits in it.
35334
35335 -- Macro: DWARF2_UNWIND_INFO
35336     Define this macro to 0 if your target supports DWARF 2 frame unwind
35337     information, but it does not yet work with exception handling.
35338     Otherwise, if your target supports this information (if it defines
35339     `INCOMING_RETURN_ADDR_RTX' and `OBJECT_FORMAT_ELF'), GCC will
35340     provide a default definition of 1.
35341
35342 -- Common Target Hook: enum unwind_info_type TARGET_EXCEPT_UNWIND_INFO
35343          (struct gcc_options *OPTS)
35344     This hook defines the mechanism that will be used for exception
35345     handling by the target.  If the target has ABI specified unwind
35346     tables, the hook should return `UI_TARGET'.  If the target is to
35347     use the `setjmp'/`longjmp'-based exception handling scheme, the
35348     hook should return `UI_SJLJ'.  If the target supports DWARF 2
35349     frame unwind information, the hook should return `UI_DWARF2'.
35350
35351     A target may, if exceptions are disabled, choose to return
35352     `UI_NONE'.  This may end up simplifying other parts of
35353     target-specific code.  The default implementation of this hook
35354     never returns `UI_NONE'.
35355
35356     Note that the value returned by this hook should be constant.  It
35357     should not depend on anything except the command-line switches
35358     described by OPTS.  In particular, the setting `UI_SJLJ' must be
35359     fixed at compiler start-up as C pre-processor macros and builtin
35360     functions related to exception handling are set up depending on
35361     this setting.
35362
35363     The default implementation of the hook first honors the
35364     `--enable-sjlj-exceptions' configure option, then
35365     `DWARF2_UNWIND_INFO', and finally defaults to `UI_SJLJ'.  If
35366     `DWARF2_UNWIND_INFO' depends on command-line options, the target
35367     must define this hook so that OPTS is used correctly.
35368
35369 -- Common Target Hook: bool TARGET_UNWIND_TABLES_DEFAULT
35370     This variable should be set to `true' if the target ABI requires
35371     unwinding tables even when exceptions are not used.  It must not
35372     be modified by command-line option processing.
35373
35374 -- Macro: DONT_USE_BUILTIN_SETJMP
35375     Define this macro to 1 if the `setjmp'/`longjmp'-based scheme
35376     should use the `setjmp'/`longjmp' functions from the C library
35377     instead of the `__builtin_setjmp'/`__builtin_longjmp' machinery.
35378
35379 -- Macro: JMP_BUF_SIZE
35380     This macro has no effect unless `DONT_USE_BUILTIN_SETJMP' is also
35381     defined.  Define this macro if the default size of `jmp_buf' buffer
35382     for the `setjmp'/`longjmp'-based exception handling mechanism is
35383     not large enough, or if it is much too large.  The default size is
35384     `FIRST_PSEUDO_REGISTER * sizeof(void *)'.
35385
35386 -- Macro: DWARF_CIE_DATA_ALIGNMENT
35387     This macro need only be defined if the target might save registers
35388     in the function prologue at an offset to the stack pointer that is
35389     not aligned to `UNITS_PER_WORD'.  The definition should be the
35390     negative minimum alignment if `STACK_GROWS_DOWNWARD' is defined,
35391     and the positive minimum alignment otherwise.  *Note SDB and
35392     DWARF::.  Only applicable if the target supports DWARF 2 frame
35393     unwind information.
35394
35395 -- Target Hook: bool TARGET_TERMINATE_DW2_EH_FRAME_INFO
35396     Contains the value true if the target should add a zero word onto
35397     the end of a Dwarf-2 frame info section when used for exception
35398     handling.  Default value is false if `EH_FRAME_SECTION_NAME' is
35399     defined, and true otherwise.
35400
35401 -- Target Hook: rtx TARGET_DWARF_REGISTER_SPAN (rtx REG)
35402     Given a register, this hook should return a parallel of registers
35403     to represent where to find the register pieces.  Define this hook
35404     if the register and its mode are represented in Dwarf in
35405     non-contiguous locations, or if the register should be represented
35406     in more than one register in Dwarf.  Otherwise, this hook should
35407     return `NULL_RTX'.  If not defined, the default is to return
35408     `NULL_RTX'.
35409
35410 -- Target Hook: void TARGET_INIT_DWARF_REG_SIZES_EXTRA (tree ADDRESS)
35411     If some registers are represented in Dwarf-2 unwind information in
35412     multiple pieces, define this hook to fill in information about the
35413     sizes of those pieces in the table used by the unwinder at runtime.
35414     It will be called by `expand_builtin_init_dwarf_reg_sizes' after
35415     filling in a single size corresponding to each hard register;
35416     ADDRESS is the address of the table.
35417
35418 -- Target Hook: bool TARGET_ASM_TTYPE (rtx SYM)
35419     This hook is used to output a reference from a frame unwinding
35420     table to the type_info object identified by SYM.  It should return
35421     `true' if the reference was output.  Returning `false' will cause
35422     the reference to be output using the normal Dwarf2 routines.
35423
35424 -- Target Hook: bool TARGET_ARM_EABI_UNWINDER
35425     This flag should be set to `true' on targets that use an ARM EABI
35426     based unwinding library, and `false' on other targets.  This
35427     effects the format of unwinding tables, and how the unwinder in
35428     entered after running a cleanup.  The default is `false'.
35429
35430
35431File: gccint.info,  Node: Alignment Output,  Prev: Exception Region Output,  Up: Assembler Format
35432
3543317.21.10 Assembler Commands for Alignment
35434-----------------------------------------
35435
35436This describes commands for alignment.
35437
35438 -- Macro: JUMP_ALIGN (LABEL)
35439     The alignment (log base 2) to put in front of LABEL, which is a
35440     common destination of jumps and has no fallthru incoming edge.
35441
35442     This macro need not be defined if you don't want any special
35443     alignment to be done at such a time.  Most machine descriptions do
35444     not currently define the macro.
35445
35446     Unless it's necessary to inspect the LABEL parameter, it is better
35447     to set the variable ALIGN_JUMPS in the target's
35448     `TARGET_OPTION_OVERRIDE'.  Otherwise, you should try to honor the
35449     user's selection in ALIGN_JUMPS in a `JUMP_ALIGN' implementation.
35450
35451 -- Target Hook: int TARGET_ASM_JUMP_ALIGN_MAX_SKIP (rtx LABEL)
35452     The maximum number of bytes to skip before LABEL when applying
35453     `JUMP_ALIGN'.  This works only if `ASM_OUTPUT_MAX_SKIP_ALIGN' is
35454     defined.
35455
35456 -- Macro: LABEL_ALIGN_AFTER_BARRIER (LABEL)
35457     The alignment (log base 2) to put in front of LABEL, which follows
35458     a `BARRIER'.
35459
35460     This macro need not be defined if you don't want any special
35461     alignment to be done at such a time.  Most machine descriptions do
35462     not currently define the macro.
35463
35464 -- Target Hook: int TARGET_ASM_LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP (rtx
35465          LABEL)
35466     The maximum number of bytes to skip before LABEL when applying
35467     `LABEL_ALIGN_AFTER_BARRIER'.  This works only if
35468     `ASM_OUTPUT_MAX_SKIP_ALIGN' is defined.
35469
35470 -- Macro: LOOP_ALIGN (LABEL)
35471     The alignment (log base 2) to put in front of LABEL, which follows
35472     a `NOTE_INSN_LOOP_BEG' note.
35473
35474     This macro need not be defined if you don't want any special
35475     alignment to be done at such a time.  Most machine descriptions do
35476     not currently define the macro.
35477
35478     Unless it's necessary to inspect the LABEL parameter, it is better
35479     to set the variable `align_loops' in the target's
35480     `TARGET_OPTION_OVERRIDE'.  Otherwise, you should try to honor the
35481     user's selection in `align_loops' in a `LOOP_ALIGN' implementation.
35482
35483 -- Target Hook: int TARGET_ASM_LOOP_ALIGN_MAX_SKIP (rtx LABEL)
35484     The maximum number of bytes to skip when applying `LOOP_ALIGN' to
35485     LABEL.  This works only if `ASM_OUTPUT_MAX_SKIP_ALIGN' is defined.
35486
35487 -- Macro: LABEL_ALIGN (LABEL)
35488     The alignment (log base 2) to put in front of LABEL.  If
35489     `LABEL_ALIGN_AFTER_BARRIER' / `LOOP_ALIGN' specify a different
35490     alignment, the maximum of the specified values is used.
35491
35492     Unless it's necessary to inspect the LABEL parameter, it is better
35493     to set the variable `align_labels' in the target's
35494     `TARGET_OPTION_OVERRIDE'.  Otherwise, you should try to honor the
35495     user's selection in `align_labels' in a `LABEL_ALIGN'
35496     implementation.
35497
35498 -- Target Hook: int TARGET_ASM_LABEL_ALIGN_MAX_SKIP (rtx LABEL)
35499     The maximum number of bytes to skip when applying `LABEL_ALIGN' to
35500     LABEL.  This works only if `ASM_OUTPUT_MAX_SKIP_ALIGN' is defined.
35501
35502 -- Macro: ASM_OUTPUT_SKIP (STREAM, NBYTES)
35503     A C statement to output to the stdio stream STREAM an assembler
35504     instruction to advance the location counter by NBYTES bytes.
35505     Those bytes should be zero when loaded.  NBYTES will be a C
35506     expression of type `unsigned HOST_WIDE_INT'.
35507
35508 -- Macro: ASM_NO_SKIP_IN_TEXT
35509     Define this macro if `ASM_OUTPUT_SKIP' should not be used in the
35510     text section because it fails to put zeros in the bytes that are
35511     skipped.  This is true on many Unix systems, where the pseudo-op
35512     to skip bytes produces no-op instructions rather than zeros when
35513     used in the text section.
35514
35515 -- Macro: ASM_OUTPUT_ALIGN (STREAM, POWER)
35516     A C statement to output to the stdio stream STREAM an assembler
35517     command to advance the location counter to a multiple of 2 to the
35518     POWER bytes.  POWER will be a C expression of type `int'.
35519
35520 -- Macro: ASM_OUTPUT_ALIGN_WITH_NOP (STREAM, POWER)
35521     Like `ASM_OUTPUT_ALIGN', except that the "nop" instruction is used
35522     for padding, if necessary.
35523
35524 -- Macro: ASM_OUTPUT_MAX_SKIP_ALIGN (STREAM, POWER, MAX_SKIP)
35525     A C statement to output to the stdio stream STREAM an assembler
35526     command to advance the location counter to a multiple of 2 to the
35527     POWER bytes, but only if MAX_SKIP or fewer bytes are needed to
35528     satisfy the alignment request.  POWER and MAX_SKIP will be a C
35529     expression of type `int'.
35530
35531
35532File: gccint.info,  Node: Debugging Info,  Next: Floating Point,  Prev: Assembler Format,  Up: Target Macros
35533
3553417.22 Controlling Debugging Information Format
35535==============================================
35536
35537This describes how to specify debugging information.
35538
35539* Menu:
35540
35541* All Debuggers::      Macros that affect all debugging formats uniformly.
35542* DBX Options::        Macros enabling specific options in DBX format.
35543* DBX Hooks::          Hook macros for varying DBX format.
35544* File Names and DBX:: Macros controlling output of file names in DBX format.
35545* SDB and DWARF::      Macros for SDB (COFF) and DWARF formats.
35546* VMS Debug::          Macros for VMS debug format.
35547
35548
35549File: gccint.info,  Node: All Debuggers,  Next: DBX Options,  Up: Debugging Info
35550
3555117.22.1 Macros Affecting All Debugging Formats
35552----------------------------------------------
35553
35554These macros affect all debugging formats.
35555
35556 -- Macro: DBX_REGISTER_NUMBER (REGNO)
35557     A C expression that returns the DBX register number for the
35558     compiler register number REGNO.  In the default macro provided,
35559     the value of this expression will be REGNO itself.  But sometimes
35560     there are some registers that the compiler knows about and DBX
35561     does not, or vice versa.  In such cases, some register may need to
35562     have one number in the compiler and another for DBX.
35563
35564     If two registers have consecutive numbers inside GCC, and they can
35565     be used as a pair to hold a multiword value, then they _must_ have
35566     consecutive numbers after renumbering with `DBX_REGISTER_NUMBER'.
35567     Otherwise, debuggers will be unable to access such a pair, because
35568     they expect register pairs to be consecutive in their own
35569     numbering scheme.
35570
35571     If you find yourself defining `DBX_REGISTER_NUMBER' in way that
35572     does not preserve register pairs, then what you must do instead is
35573     redefine the actual register numbering scheme.
35574
35575 -- Macro: DEBUGGER_AUTO_OFFSET (X)
35576     A C expression that returns the integer offset value for an
35577     automatic variable having address X (an RTL expression).  The
35578     default computation assumes that X is based on the frame-pointer
35579     and gives the offset from the frame-pointer.  This is required for
35580     targets that produce debugging output for DBX or COFF-style
35581     debugging output for SDB and allow the frame-pointer to be
35582     eliminated when the `-g' options is used.
35583
35584 -- Macro: DEBUGGER_ARG_OFFSET (OFFSET, X)
35585     A C expression that returns the integer offset value for an
35586     argument having address X (an RTL expression).  The nominal offset
35587     is OFFSET.
35588
35589 -- Macro: PREFERRED_DEBUGGING_TYPE
35590     A C expression that returns the type of debugging output GCC should
35591     produce when the user specifies just `-g'.  Define this if you
35592     have arranged for GCC to support more than one format of debugging
35593     output.  Currently, the allowable values are `DBX_DEBUG',
35594     `SDB_DEBUG', `DWARF_DEBUG', `DWARF2_DEBUG', `XCOFF_DEBUG',
35595     `VMS_DEBUG', and `VMS_AND_DWARF2_DEBUG'.
35596
35597     When the user specifies `-ggdb', GCC normally also uses the value
35598     of this macro to select the debugging output format, but with two
35599     exceptions.  If `DWARF2_DEBUGGING_INFO' is defined, GCC uses the
35600     value `DWARF2_DEBUG'.  Otherwise, if `DBX_DEBUGGING_INFO' is
35601     defined, GCC uses `DBX_DEBUG'.
35602
35603     The value of this macro only affects the default debugging output;
35604     the user can always get a specific type of output by using
35605     `-gstabs', `-gcoff', `-gdwarf-2', `-gxcoff', or `-gvms'.
35606
35607
35608File: gccint.info,  Node: DBX Options,  Next: DBX Hooks,  Prev: All Debuggers,  Up: Debugging Info
35609
3561017.22.2 Specific Options for DBX Output
35611---------------------------------------
35612
35613These are specific options for DBX output.
35614
35615 -- Macro: DBX_DEBUGGING_INFO
35616     Define this macro if GCC should produce debugging output for DBX
35617     in response to the `-g' option.
35618
35619 -- Macro: XCOFF_DEBUGGING_INFO
35620     Define this macro if GCC should produce XCOFF format debugging
35621     output in response to the `-g' option.  This is a variant of DBX
35622     format.
35623
35624 -- Macro: DEFAULT_GDB_EXTENSIONS
35625     Define this macro to control whether GCC should by default generate
35626     GDB's extended version of DBX debugging information (assuming
35627     DBX-format debugging information is enabled at all).  If you don't
35628     define the macro, the default is 1: always generate the extended
35629     information if there is any occasion to.
35630
35631 -- Macro: DEBUG_SYMS_TEXT
35632     Define this macro if all `.stabs' commands should be output while
35633     in the text section.
35634
35635 -- Macro: ASM_STABS_OP
35636     A C string constant, including spacing, naming the assembler
35637     pseudo op to use instead of `"\t.stabs\t"' to define an ordinary
35638     debugging symbol.  If you don't define this macro, `"\t.stabs\t"'
35639     is used.  This macro applies only to DBX debugging information
35640     format.
35641
35642 -- Macro: ASM_STABD_OP
35643     A C string constant, including spacing, naming the assembler
35644     pseudo op to use instead of `"\t.stabd\t"' to define a debugging
35645     symbol whose value is the current location.  If you don't define
35646     this macro, `"\t.stabd\t"' is used.  This macro applies only to
35647     DBX debugging information format.
35648
35649 -- Macro: ASM_STABN_OP
35650     A C string constant, including spacing, naming the assembler
35651     pseudo op to use instead of `"\t.stabn\t"' to define a debugging
35652     symbol with no name.  If you don't define this macro,
35653     `"\t.stabn\t"' is used.  This macro applies only to DBX debugging
35654     information format.
35655
35656 -- Macro: DBX_NO_XREFS
35657     Define this macro if DBX on your system does not support the
35658     construct `xsTAGNAME'.  On some systems, this construct is used to
35659     describe a forward reference to a structure named TAGNAME.  On
35660     other systems, this construct is not supported at all.
35661
35662 -- Macro: DBX_CONTIN_LENGTH
35663     A symbol name in DBX-format debugging information is normally
35664     continued (split into two separate `.stabs' directives) when it
35665     exceeds a certain length (by default, 80 characters).  On some
35666     operating systems, DBX requires this splitting; on others,
35667     splitting must not be done.  You can inhibit splitting by defining
35668     this macro with the value zero.  You can override the default
35669     splitting-length by defining this macro as an expression for the
35670     length you desire.
35671
35672 -- Macro: DBX_CONTIN_CHAR
35673     Normally continuation is indicated by adding a `\' character to
35674     the end of a `.stabs' string when a continuation follows.  To use
35675     a different character instead, define this macro as a character
35676     constant for the character you want to use.  Do not define this
35677     macro if backslash is correct for your system.
35678
35679 -- Macro: DBX_STATIC_STAB_DATA_SECTION
35680     Define this macro if it is necessary to go to the data section
35681     before outputting the `.stabs' pseudo-op for a non-global static
35682     variable.
35683
35684 -- Macro: DBX_TYPE_DECL_STABS_CODE
35685     The value to use in the "code" field of the `.stabs' directive for
35686     a typedef.  The default is `N_LSYM'.
35687
35688 -- Macro: DBX_STATIC_CONST_VAR_CODE
35689     The value to use in the "code" field of the `.stabs' directive for
35690     a static variable located in the text section.  DBX format does not
35691     provide any "right" way to do this.  The default is `N_FUN'.
35692
35693 -- Macro: DBX_REGPARM_STABS_CODE
35694     The value to use in the "code" field of the `.stabs' directive for
35695     a parameter passed in registers.  DBX format does not provide any
35696     "right" way to do this.  The default is `N_RSYM'.
35697
35698 -- Macro: DBX_REGPARM_STABS_LETTER
35699     The letter to use in DBX symbol data to identify a symbol as a
35700     parameter passed in registers.  DBX format does not customarily
35701     provide any way to do this.  The default is `'P''.
35702
35703 -- Macro: DBX_FUNCTION_FIRST
35704     Define this macro if the DBX information for a function and its
35705     arguments should precede the assembler code for the function.
35706     Normally, in DBX format, the debugging information entirely
35707     follows the assembler code.
35708
35709 -- Macro: DBX_BLOCKS_FUNCTION_RELATIVE
35710     Define this macro, with value 1, if the value of a symbol
35711     describing the scope of a block (`N_LBRAC' or `N_RBRAC') should be
35712     relative to the start of the enclosing function.  Normally, GCC
35713     uses an absolute address.
35714
35715 -- Macro: DBX_LINES_FUNCTION_RELATIVE
35716     Define this macro, with value 1, if the value of a symbol
35717     indicating the current line number (`N_SLINE') should be relative
35718     to the start of the enclosing function.  Normally, GCC uses an
35719     absolute address.
35720
35721 -- Macro: DBX_USE_BINCL
35722     Define this macro if GCC should generate `N_BINCL' and `N_EINCL'
35723     stabs for included header files, as on Sun systems.  This macro
35724     also directs GCC to output a type number as a pair of a file
35725     number and a type number within the file.  Normally, GCC does not
35726     generate `N_BINCL' or `N_EINCL' stabs, and it outputs a single
35727     number for a type number.
35728
35729
35730File: gccint.info,  Node: DBX Hooks,  Next: File Names and DBX,  Prev: DBX Options,  Up: Debugging Info
35731
3573217.22.3 Open-Ended Hooks for DBX Format
35733---------------------------------------
35734
35735These are hooks for DBX format.
35736
35737 -- Macro: DBX_OUTPUT_SOURCE_LINE (STREAM, LINE, COUNTER)
35738     A C statement to output DBX debugging information before code for
35739     line number LINE of the current source file to the stdio stream
35740     STREAM.  COUNTER is the number of time the macro was invoked,
35741     including the current invocation; it is intended to generate
35742     unique labels in the assembly output.
35743
35744     This macro should not be defined if the default output is correct,
35745     or if it can be made correct by defining
35746     `DBX_LINES_FUNCTION_RELATIVE'.
35747
35748 -- Macro: NO_DBX_FUNCTION_END
35749     Some stabs encapsulation formats (in particular ECOFF), cannot
35750     handle the `.stabs "",N_FUN,,0,0,Lscope-function-1' gdb dbx
35751     extension construct.  On those machines, define this macro to turn
35752     this feature off without disturbing the rest of the gdb extensions.
35753
35754 -- Macro: NO_DBX_BNSYM_ENSYM
35755     Some assemblers cannot handle the `.stabd BNSYM/ENSYM,0,0' gdb dbx
35756     extension construct.  On those machines, define this macro to turn
35757     this feature off without disturbing the rest of the gdb extensions.
35758
35759
35760File: gccint.info,  Node: File Names and DBX,  Next: SDB and DWARF,  Prev: DBX Hooks,  Up: Debugging Info
35761
3576217.22.4 File Names in DBX Format
35763--------------------------------
35764
35765This describes file names in DBX format.
35766
35767 -- Macro: DBX_OUTPUT_MAIN_SOURCE_FILENAME (STREAM, NAME)
35768     A C statement to output DBX debugging information to the stdio
35769     stream STREAM, which indicates that file NAME is the main source
35770     file--the file specified as the input file for compilation.  This
35771     macro is called only once, at the beginning of compilation.
35772
35773     This macro need not be defined if the standard form of output for
35774     DBX debugging information is appropriate.
35775
35776     It may be necessary to refer to a label equal to the beginning of
35777     the text section.  You can use `assemble_name (stream,
35778     ltext_label_name)' to do so.  If you do this, you must also set
35779     the variable USED_LTEXT_LABEL_NAME to `true'.
35780
35781 -- Macro: NO_DBX_MAIN_SOURCE_DIRECTORY
35782     Define this macro, with value 1, if GCC should not emit an
35783     indication of the current directory for compilation and current
35784     source language at the beginning of the file.
35785
35786 -- Macro: NO_DBX_GCC_MARKER
35787     Define this macro, with value 1, if GCC should not emit an
35788     indication that this object file was compiled by GCC.  The default
35789     is to emit an `N_OPT' stab at the beginning of every source file,
35790     with `gcc2_compiled.' for the string and value 0.
35791
35792 -- Macro: DBX_OUTPUT_MAIN_SOURCE_FILE_END (STREAM, NAME)
35793     A C statement to output DBX debugging information at the end of
35794     compilation of the main source file NAME.  Output should be
35795     written to the stdio stream STREAM.
35796
35797     If you don't define this macro, nothing special is output at the
35798     end of compilation, which is correct for most machines.
35799
35800 -- Macro: DBX_OUTPUT_NULL_N_SO_AT_MAIN_SOURCE_FILE_END
35801     Define this macro _instead of_ defining
35802     `DBX_OUTPUT_MAIN_SOURCE_FILE_END', if what needs to be output at
35803     the end of compilation is an `N_SO' stab with an empty string,
35804     whose value is the highest absolute text address in the file.
35805
35806
35807File: gccint.info,  Node: SDB and DWARF,  Next: VMS Debug,  Prev: File Names and DBX,  Up: Debugging Info
35808
3580917.22.5 Macros for SDB and DWARF Output
35810---------------------------------------
35811
35812Here are macros for SDB and DWARF output.
35813
35814 -- Macro: SDB_DEBUGGING_INFO
35815     Define this macro if GCC should produce COFF-style debugging output
35816     for SDB in response to the `-g' option.
35817
35818 -- Macro: DWARF2_DEBUGGING_INFO
35819     Define this macro if GCC should produce dwarf version 2 format
35820     debugging output in response to the `-g' option.
35821
35822      -- Target Hook: int TARGET_DWARF_CALLING_CONVENTION (const_tree
35823               FUNCTION)
35824          Define this to enable the dwarf attribute
35825          `DW_AT_calling_convention' to be emitted for each function.
35826          Instead of an integer return the enum value for the `DW_CC_'
35827          tag.
35828
35829     To support optional call frame debugging information, you must also
35830     define `INCOMING_RETURN_ADDR_RTX' and either set
35831     `RTX_FRAME_RELATED_P' on the prologue insns if you use RTL for the
35832     prologue, or call `dwarf2out_def_cfa' and `dwarf2out_reg_save' as
35833     appropriate from `TARGET_ASM_FUNCTION_PROLOGUE' if you don't.
35834
35835 -- Macro: DWARF2_FRAME_INFO
35836     Define this macro to a nonzero value if GCC should always output
35837     Dwarf 2 frame information.  If `TARGET_EXCEPT_UNWIND_INFO' (*note
35838     Exception Region Output::) returns `UI_DWARF2', and exceptions are
35839     enabled, GCC will output this information not matter how you
35840     define `DWARF2_FRAME_INFO'.
35841
35842 -- Target Hook: enum unwind_info_type TARGET_DEBUG_UNWIND_INFO (void)
35843     This hook defines the mechanism that will be used for describing
35844     frame unwind information to the debugger.  Normally the hook will
35845     return `UI_DWARF2' if DWARF 2 debug information is enabled, and
35846     return `UI_NONE' otherwise.
35847
35848     A target may return `UI_DWARF2' even when DWARF 2 debug information
35849     is disabled in order to always output DWARF 2 frame information.
35850
35851     A target may return `UI_TARGET' if it has ABI specified unwind
35852     tables.  This will suppress generation of the normal debug frame
35853     unwind information.
35854
35855 -- Macro: DWARF2_ASM_LINE_DEBUG_INFO
35856     Define this macro to be a nonzero value if the assembler can
35857     generate Dwarf 2 line debug info sections.  This will result in
35858     much more compact line number tables, and hence is desirable if it
35859     works.
35860
35861 -- Target Hook: bool TARGET_WANT_DEBUG_PUB_SECTIONS
35862     True if the `.debug_pubtypes' and `.debug_pubnames' sections
35863     should be emitted.  These sections are not used on most platforms,
35864     and in particular GDB does not use them.
35865
35866 -- Target Hook: bool TARGET_FORCE_AT_COMP_DIR
35867     True if the `DW_AT_comp_dir' attribute should be emitted for each
35868     compilation unit.  This attribute is required for the darwin
35869     linker  to emit debug information.
35870
35871 -- Target Hook: bool TARGET_DELAY_SCHED2
35872     True if sched2 is not to be run at its normal place.  This usually
35873     means it will be run as part of machine-specific reorg.
35874
35875 -- Target Hook: bool TARGET_DELAY_VARTRACK
35876     True if vartrack is not to be run at its normal place.  This
35877     usually means it will be run as part of machine-specific reorg.
35878
35879 -- Macro: ASM_OUTPUT_DWARF_DELTA (STREAM, SIZE, LABEL1, LABEL2)
35880     A C statement to issue assembly directives that create a difference
35881     LAB1 minus LAB2, using an integer of the given SIZE.
35882
35883 -- Macro: ASM_OUTPUT_DWARF_VMS_DELTA (STREAM, SIZE, LABEL1, LABEL2)
35884     A C statement to issue assembly directives that create a difference
35885     between the two given labels in system defined units, e.g.
35886     instruction slots on IA64 VMS, using an integer of the given size.
35887
35888 -- Macro: ASM_OUTPUT_DWARF_OFFSET (STREAM, SIZE, LABEL, SECTION)
35889     A C statement to issue assembly directives that create a
35890     section-relative reference to the given LABEL, using an integer of
35891     the given SIZE.  The label is known to be defined in the given
35892     SECTION.
35893
35894 -- Macro: ASM_OUTPUT_DWARF_PCREL (STREAM, SIZE, LABEL)
35895     A C statement to issue assembly directives that create a
35896     self-relative reference to the given LABEL, using an integer of
35897     the given SIZE.
35898
35899 -- Macro: ASM_OUTPUT_DWARF_TABLE_REF (LABEL)
35900     A C statement to issue assembly directives that create a reference
35901     to the DWARF table identifier LABEL from the current section.  This
35902     is used on some systems to avoid garbage collecting a DWARF table
35903     which is referenced by a function.
35904
35905 -- Target Hook: void TARGET_ASM_OUTPUT_DWARF_DTPREL (FILE *FILE, int
35906          SIZE, rtx X)
35907     If defined, this target hook is a function which outputs a
35908     DTP-relative reference to the given TLS symbol of the specified
35909     size.
35910
35911 -- Macro: PUT_SDB_...
35912     Define these macros to override the assembler syntax for the
35913     special SDB assembler directives.  See `sdbout.c' for a list of
35914     these macros and their arguments.  If the standard syntax is used,
35915     you need not define them yourself.
35916
35917 -- Macro: SDB_DELIM
35918     Some assemblers do not support a semicolon as a delimiter, even
35919     between SDB assembler directives.  In that case, define this macro
35920     to be the delimiter to use (usually `\n').  It is not necessary to
35921     define a new set of `PUT_SDB_OP' macros if this is the only change
35922     required.
35923
35924 -- Macro: SDB_ALLOW_UNKNOWN_REFERENCES
35925     Define this macro to allow references to unknown structure, union,
35926     or enumeration tags to be emitted.  Standard COFF does not allow
35927     handling of unknown references, MIPS ECOFF has support for it.
35928
35929 -- Macro: SDB_ALLOW_FORWARD_REFERENCES
35930     Define this macro to allow references to structure, union, or
35931     enumeration tags that have not yet been seen to be handled.  Some
35932     assemblers choke if forward tags are used, while some require it.
35933
35934 -- Macro: SDB_OUTPUT_SOURCE_LINE (STREAM, LINE)
35935     A C statement to output SDB debugging information before code for
35936     line number LINE of the current source file to the stdio stream
35937     STREAM.  The default is to emit an `.ln' directive.
35938
35939
35940File: gccint.info,  Node: VMS Debug,  Prev: SDB and DWARF,  Up: Debugging Info
35941
3594217.22.6 Macros for VMS Debug Format
35943-----------------------------------
35944
35945Here are macros for VMS debug format.
35946
35947 -- Macro: VMS_DEBUGGING_INFO
35948     Define this macro if GCC should produce debugging output for VMS
35949     in response to the `-g' option.  The default behavior for VMS is
35950     to generate minimal debug info for a traceback in the absence of
35951     `-g' unless explicitly overridden with `-g0'.  This behavior is
35952     controlled by `TARGET_OPTION_OPTIMIZATION' and
35953     `TARGET_OPTION_OVERRIDE'.
35954
35955
35956File: gccint.info,  Node: Floating Point,  Next: Mode Switching,  Prev: Debugging Info,  Up: Target Macros
35957
3595817.23 Cross Compilation and Floating Point
35959==========================================
35960
35961While all modern machines use twos-complement representation for
35962integers, there are a variety of representations for floating point
35963numbers.  This means that in a cross-compiler the representation of
35964floating point numbers in the compiled program may be different from
35965that used in the machine doing the compilation.
35966
35967 Because different representation systems may offer different amounts of
35968range and precision, all floating point constants must be represented in
35969the target machine's format.  Therefore, the cross compiler cannot
35970safely use the host machine's floating point arithmetic; it must emulate
35971the target's arithmetic.  To ensure consistency, GCC always uses
35972emulation to work with floating point values, even when the host and
35973target floating point formats are identical.
35974
35975 The following macros are provided by `real.h' for the compiler to use.
35976All parts of the compiler which generate or optimize floating-point
35977calculations must use these macros.  They may evaluate their operands
35978more than once, so operands must not have side effects.
35979
35980 -- Macro: REAL_VALUE_TYPE
35981     The C data type to be used to hold a floating point value in the
35982     target machine's format.  Typically this is a `struct' containing
35983     an array of `HOST_WIDE_INT', but all code should treat it as an
35984     opaque quantity.
35985
35986 -- Macro: int REAL_VALUES_EQUAL (REAL_VALUE_TYPE X, REAL_VALUE_TYPE Y)
35987     Compares for equality the two values, X and Y.  If the target
35988     floating point format supports negative zeroes and/or NaNs,
35989     `REAL_VALUES_EQUAL (-0.0, 0.0)' is true, and `REAL_VALUES_EQUAL
35990     (NaN, NaN)' is false.
35991
35992 -- Macro: int REAL_VALUES_LESS (REAL_VALUE_TYPE X, REAL_VALUE_TYPE Y)
35993     Tests whether X is less than Y.
35994
35995 -- Macro: HOST_WIDE_INT REAL_VALUE_FIX (REAL_VALUE_TYPE X)
35996     Truncates X to a signed integer, rounding toward zero.
35997
35998 -- Macro: unsigned HOST_WIDE_INT REAL_VALUE_UNSIGNED_FIX
35999          (REAL_VALUE_TYPE X)
36000     Truncates X to an unsigned integer, rounding toward zero.  If X is
36001     negative, returns zero.
36002
36003 -- Macro: REAL_VALUE_TYPE REAL_VALUE_ATOF (const char *STRING, enum
36004          machine_mode MODE)
36005     Converts STRING into a floating point number in the target
36006     machine's representation for mode MODE.  This routine can handle
36007     both decimal and hexadecimal floating point constants, using the
36008     syntax defined by the C language for both.
36009
36010 -- Macro: int REAL_VALUE_NEGATIVE (REAL_VALUE_TYPE X)
36011     Returns 1 if X is negative (including negative zero), 0 otherwise.
36012
36013 -- Macro: int REAL_VALUE_ISINF (REAL_VALUE_TYPE X)
36014     Determines whether X represents infinity (positive or negative).
36015
36016 -- Macro: int REAL_VALUE_ISNAN (REAL_VALUE_TYPE X)
36017     Determines whether X represents a "NaN" (not-a-number).
36018
36019 -- Macro: void REAL_ARITHMETIC (REAL_VALUE_TYPE OUTPUT, enum tree_code
36020          CODE, REAL_VALUE_TYPE X, REAL_VALUE_TYPE Y)
36021     Calculates an arithmetic operation on the two floating point values
36022     X and Y, storing the result in OUTPUT (which must be a variable).
36023
36024     The operation to be performed is specified by CODE.  Only the
36025     following codes are supported: `PLUS_EXPR', `MINUS_EXPR',
36026     `MULT_EXPR', `RDIV_EXPR', `MAX_EXPR', `MIN_EXPR'.
36027
36028     If `REAL_ARITHMETIC' is asked to evaluate division by zero and the
36029     target's floating point format cannot represent infinity, it will
36030     call `abort'.  Callers should check for this situation first, using
36031     `MODE_HAS_INFINITIES'.  *Note Storage Layout::.
36032
36033 -- Macro: REAL_VALUE_TYPE REAL_VALUE_NEGATE (REAL_VALUE_TYPE X)
36034     Returns the negative of the floating point value X.
36035
36036 -- Macro: REAL_VALUE_TYPE REAL_VALUE_ABS (REAL_VALUE_TYPE X)
36037     Returns the absolute value of X.
36038
36039 -- Macro: void REAL_VALUE_TO_INT (HOST_WIDE_INT LOW, HOST_WIDE_INT
36040          HIGH, REAL_VALUE_TYPE X)
36041     Converts a floating point value X into a double-precision integer
36042     which is then stored into LOW and HIGH.  If the value is not
36043     integral, it is truncated.
36044
36045 -- Macro: void REAL_VALUE_FROM_INT (REAL_VALUE_TYPE X, HOST_WIDE_INT
36046          LOW, HOST_WIDE_INT HIGH, enum machine_mode MODE)
36047     Converts a double-precision integer found in LOW and HIGH, into a
36048     floating point value which is then stored into X.  The value is
36049     truncated to fit in mode MODE.
36050
36051
36052File: gccint.info,  Node: Mode Switching,  Next: Target Attributes,  Prev: Floating Point,  Up: Target Macros
36053
3605417.24 Mode Switching Instructions
36055=================================
36056
36057The following macros control mode switching optimizations:
36058
36059 -- Macro: OPTIMIZE_MODE_SWITCHING (ENTITY)
36060     Define this macro if the port needs extra instructions inserted
36061     for mode switching in an optimizing compilation.
36062
36063     For an example, the SH4 can perform both single and double
36064     precision floating point operations, but to perform a single
36065     precision operation, the FPSCR PR bit has to be cleared, while for
36066     a double precision operation, this bit has to be set.  Changing
36067     the PR bit requires a general purpose register as a scratch
36068     register, hence these FPSCR sets have to be inserted before
36069     reload, i.e. you can't put this into instruction emitting or
36070     `TARGET_MACHINE_DEPENDENT_REORG'.
36071
36072     You can have multiple entities that are mode-switched, and select
36073     at run time which entities actually need it.
36074     `OPTIMIZE_MODE_SWITCHING' should return nonzero for any ENTITY
36075     that needs mode-switching.  If you define this macro, you also
36076     have to define `NUM_MODES_FOR_MODE_SWITCHING', `MODE_NEEDED',
36077     `MODE_PRIORITY_TO_MODE' and `EMIT_MODE_SET'.  `MODE_AFTER',
36078     `MODE_ENTRY', and `MODE_EXIT' are optional.
36079
36080 -- Macro: NUM_MODES_FOR_MODE_SWITCHING
36081     If you define `OPTIMIZE_MODE_SWITCHING', you have to define this as
36082     initializer for an array of integers.  Each initializer element N
36083     refers to an entity that needs mode switching, and specifies the
36084     number of different modes that might need to be set for this
36085     entity.  The position of the initializer in the
36086     initializer--starting counting at zero--determines the integer
36087     that is used to refer to the mode-switched entity in question.  In
36088     macros that take mode arguments / yield a mode result, modes are
36089     represented as numbers 0 ... N - 1.  N is used to specify that no
36090     mode switch is needed / supplied.
36091
36092 -- Macro: MODE_NEEDED (ENTITY, INSN)
36093     ENTITY is an integer specifying a mode-switched entity.  If
36094     `OPTIMIZE_MODE_SWITCHING' is defined, you must define this macro to
36095     return an integer value not larger than the corresponding element
36096     in `NUM_MODES_FOR_MODE_SWITCHING', to denote the mode that ENTITY
36097     must be switched into prior to the execution of INSN.
36098
36099 -- Macro: MODE_AFTER (ENTITY, MODE, INSN)
36100     ENTITY is an integer specifying a mode-switched entity.  If this
36101     macro is defined, it is evaluated for every INSN during mode
36102     switching.  It determines the mode that an insn results in (if
36103     different from the incoming mode).
36104
36105 -- Macro: MODE_ENTRY (ENTITY)
36106     If this macro is defined, it is evaluated for every ENTITY that
36107     needs mode switching.  It should evaluate to an integer, which is
36108     a mode that ENTITY is assumed to be switched to at function entry.
36109     If `MODE_ENTRY' is defined then `MODE_EXIT' must be defined.
36110
36111 -- Macro: MODE_EXIT (ENTITY)
36112     If this macro is defined, it is evaluated for every ENTITY that
36113     needs mode switching.  It should evaluate to an integer, which is
36114     a mode that ENTITY is assumed to be switched to at function exit.
36115     If `MODE_EXIT' is defined then `MODE_ENTRY' must be defined.
36116
36117 -- Macro: MODE_PRIORITY_TO_MODE (ENTITY, N)
36118     This macro specifies the order in which modes for ENTITY are
36119     processed.  0 is the highest priority,
36120     `NUM_MODES_FOR_MODE_SWITCHING[ENTITY] - 1' the lowest.  The value
36121     of the macro should be an integer designating a mode for ENTITY.
36122     For any fixed ENTITY, `mode_priority_to_mode' (ENTITY, N) shall be
36123     a bijection in 0 ...  `num_modes_for_mode_switching[ENTITY] - 1'.
36124
36125 -- Macro: EMIT_MODE_SET (ENTITY, MODE, HARD_REGS_LIVE)
36126     Generate one or more insns to set ENTITY to MODE.  HARD_REG_LIVE
36127     is the set of hard registers live at the point where the insn(s)
36128     are to be inserted.
36129
36130
36131File: gccint.info,  Node: Target Attributes,  Next: Emulated TLS,  Prev: Mode Switching,  Up: Target Macros
36132
3613317.25 Defining target-specific uses of `__attribute__'
36134======================================================
36135
36136Target-specific attributes may be defined for functions, data and types.
36137These are described using the following target hooks; they also need to
36138be documented in `extend.texi'.
36139
36140 -- Target Hook: const struct attribute_spec * TARGET_ATTRIBUTE_TABLE
36141     If defined, this target hook points to an array of `struct
36142     attribute_spec' (defined in `tree.h') specifying the machine
36143     specific attributes for this target and some of the restrictions
36144     on the entities to which these attributes are applied and the
36145     arguments they take.
36146
36147 -- Target Hook: bool TARGET_ATTRIBUTE_TAKES_IDENTIFIER_P (const_tree
36148          NAME)
36149     If defined, this target hook is a function which returns true if
36150     the machine-specific attribute named NAME expects an identifier
36151     given as its first argument to be passed on as a plain identifier,
36152     not subjected to name lookup.  If this is not defined, the default
36153     is false for all machine-specific attributes.
36154
36155 -- Target Hook: int TARGET_COMP_TYPE_ATTRIBUTES (const_tree TYPE1,
36156          const_tree TYPE2)
36157     If defined, this target hook is a function which returns zero if
36158     the attributes on TYPE1 and TYPE2 are incompatible, one if they
36159     are compatible, and two if they are nearly compatible (which
36160     causes a warning to be generated).  If this is not defined,
36161     machine-specific attributes are supposed always to be compatible.
36162
36163 -- Target Hook: void TARGET_SET_DEFAULT_TYPE_ATTRIBUTES (tree TYPE)
36164     If defined, this target hook is a function which assigns default
36165     attributes to the newly defined TYPE.
36166
36167 -- Target Hook: tree TARGET_MERGE_TYPE_ATTRIBUTES (tree TYPE1, tree
36168          TYPE2)
36169     Define this target hook if the merging of type attributes needs
36170     special handling.  If defined, the result is a list of the combined
36171     `TYPE_ATTRIBUTES' of TYPE1 and TYPE2.  It is assumed that
36172     `comptypes' has already been called and returned 1.  This function
36173     may call `merge_attributes' to handle machine-independent merging.
36174
36175 -- Target Hook: tree TARGET_MERGE_DECL_ATTRIBUTES (tree OLDDECL, tree
36176          NEWDECL)
36177     Define this target hook if the merging of decl attributes needs
36178     special handling.  If defined, the result is a list of the combined
36179     `DECL_ATTRIBUTES' of OLDDECL and NEWDECL.  NEWDECL is a duplicate
36180     declaration of OLDDECL.  Examples of when this is needed are when
36181     one attribute overrides another, or when an attribute is nullified
36182     by a subsequent definition.  This function may call
36183     `merge_attributes' to handle machine-independent merging.
36184
36185     If the only target-specific handling you require is `dllimport'
36186     for Microsoft Windows targets, you should define the macro
36187     `TARGET_DLLIMPORT_DECL_ATTRIBUTES' to `1'.  The compiler will then
36188     define a function called `merge_dllimport_decl_attributes' which
36189     can then be defined as the expansion of
36190     `TARGET_MERGE_DECL_ATTRIBUTES'.  You can also add
36191     `handle_dll_attribute' in the attribute table for your port to
36192     perform initial processing of the `dllimport' and `dllexport'
36193     attributes.  This is done in `i386/cygwin.h' and `i386/i386.c',
36194     for example.
36195
36196 -- Target Hook: bool TARGET_VALID_DLLIMPORT_ATTRIBUTE_P (const_tree
36197          DECL)
36198     DECL is a variable or function with `__attribute__((dllimport))'
36199     specified.  Use this hook if the target needs to add extra
36200     validation checks to `handle_dll_attribute'.
36201
36202 -- Macro: TARGET_DECLSPEC
36203     Define this macro to a nonzero value if you want to treat
36204     `__declspec(X)' as equivalent to `__attribute((X))'.  By default,
36205     this behavior is enabled only for targets that define
36206     `TARGET_DLLIMPORT_DECL_ATTRIBUTES'.  The current implementation of
36207     `__declspec' is via a built-in macro, but you should not rely on
36208     this implementation detail.
36209
36210 -- Target Hook: void TARGET_INSERT_ATTRIBUTES (tree NODE, tree
36211          *ATTR_PTR)
36212     Define this target hook if you want to be able to add attributes
36213     to a decl when it is being created.  This is normally useful for
36214     back ends which wish to implement a pragma by using the attributes
36215     which correspond to the pragma's effect.  The NODE argument is the
36216     decl which is being created.  The ATTR_PTR argument is a pointer
36217     to the attribute list for this decl.  The list itself should not
36218     be modified, since it may be shared with other decls, but
36219     attributes may be chained on the head of the list and `*ATTR_PTR'
36220     modified to point to the new attributes, or a copy of the list may
36221     be made if further changes are needed.
36222
36223 -- Target Hook: bool TARGET_FUNCTION_ATTRIBUTE_INLINABLE_P (const_tree
36224          FNDECL)
36225     This target hook returns `true' if it is ok to inline FNDECL into
36226     the current function, despite its having target-specific
36227     attributes, `false' otherwise.  By default, if a function has a
36228     target specific attribute attached to it, it will not be inlined.
36229
36230 -- Target Hook: bool TARGET_OPTION_VALID_ATTRIBUTE_P (tree FNDECL,
36231          tree NAME, tree ARGS, int FLAGS)
36232     This hook is called to parse `attribute(target("..."))', which
36233     allows setting target-specific options on individual functions.
36234     These function-specific options may differ from the options
36235     specified on the command line.  The hook should return `true' if
36236     the options are valid.
36237
36238     The hook should set the `DECL_FUNCTION_SPECIFIC_TARGET' field in
36239     the function declaration to hold a pointer to a target-specific
36240     `struct cl_target_option' structure.
36241
36242 -- Target Hook: void TARGET_OPTION_SAVE (struct cl_target_option *PTR)
36243     This hook is called to save any additional target-specific
36244     information in the `struct cl_target_option' structure for
36245     function-specific options.  *Note Option file format::.
36246
36247 -- Target Hook: void TARGET_OPTION_RESTORE (struct cl_target_option
36248          *PTR)
36249     This hook is called to restore any additional target-specific
36250     information in the `struct cl_target_option' structure for
36251     function-specific options.
36252
36253 -- Target Hook: void TARGET_OPTION_PRINT (FILE *FILE, int INDENT,
36254          struct cl_target_option *PTR)
36255     This hook is called to print any additional target-specific
36256     information in the `struct cl_target_option' structure for
36257     function-specific options.
36258
36259 -- Target Hook: bool TARGET_OPTION_PRAGMA_PARSE (tree ARGS, tree
36260          POP_TARGET)
36261     This target hook parses the options for `#pragma GCC target', which
36262     sets the target-specific options for functions that occur later in
36263     the input stream.  The options accepted should be the same as
36264     those handled by the `TARGET_OPTION_VALID_ATTRIBUTE_P' hook.
36265
36266 -- Target Hook: void TARGET_OPTION_OVERRIDE (void)
36267     Sometimes certain combinations of command options do not make
36268     sense on a particular target machine.  You can override the hook
36269     `TARGET_OPTION_OVERRIDE' to take account of this.  This hooks is
36270     called once just after all the command options have been parsed.
36271
36272     Don't use this hook to turn on various extra optimizations for
36273     `-O'.  That is what `TARGET_OPTION_OPTIMIZATION' is for.
36274
36275     If you need to do something whenever the optimization level is
36276     changed via the optimize attribute or pragma, see
36277     `TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE'
36278
36279 -- Target Hook: bool TARGET_OPTION_FUNCTION_VERSIONS (tree DECL1, tree
36280          DECL2)
36281     This target hook returns `true' if DECL1 and DECL2 are versions of
36282     the same function.  DECL1 and DECL2 are function versions if and
36283     only if they have the same function signature and different target
36284     specific attributes, that is, they are compiled for different
36285     target machines.
36286
36287 -- Target Hook: bool TARGET_CAN_INLINE_P (tree CALLER, tree CALLEE)
36288     This target hook returns `false' if the CALLER function cannot
36289     inline CALLEE, based on target specific information.  By default,
36290     inlining is not allowed if the callee function has function
36291     specific target options and the caller does not use the same
36292     options.
36293
36294
36295File: gccint.info,  Node: Emulated TLS,  Next: MIPS Coprocessors,  Prev: Target Attributes,  Up: Target Macros
36296
3629717.26 Emulating TLS
36298===================
36299
36300For targets whose psABI does not provide Thread Local Storage via
36301specific relocations and instruction sequences, an emulation layer is
36302used.  A set of target hooks allows this emulation layer to be
36303configured for the requirements of a particular target.  For instance
36304the psABI may in fact specify TLS support in terms of an emulation
36305layer.
36306
36307 The emulation layer works by creating a control object for every TLS
36308object.  To access the TLS object, a lookup function is provided which,
36309when given the address of the control object, will return the address
36310of the current thread's instance of the TLS object.
36311
36312 -- Target Hook: const char * TARGET_EMUTLS_GET_ADDRESS
36313     Contains the name of the helper function that uses a TLS control
36314     object to locate a TLS instance.  The default causes libgcc's
36315     emulated TLS helper function to be used.
36316
36317 -- Target Hook: const char * TARGET_EMUTLS_REGISTER_COMMON
36318     Contains the name of the helper function that should be used at
36319     program startup to register TLS objects that are implicitly
36320     initialized to zero.  If this is `NULL', all TLS objects will have
36321     explicit initializers.  The default causes libgcc's emulated TLS
36322     registration function to be used.
36323
36324 -- Target Hook: const char * TARGET_EMUTLS_VAR_SECTION
36325     Contains the name of the section in which TLS control variables
36326     should be placed.  The default of `NULL' allows these to be placed
36327     in any section.
36328
36329 -- Target Hook: const char * TARGET_EMUTLS_TMPL_SECTION
36330     Contains the name of the section in which TLS initializers should
36331     be placed.  The default of `NULL' allows these to be placed in any
36332     section.
36333
36334 -- Target Hook: const char * TARGET_EMUTLS_VAR_PREFIX
36335     Contains the prefix to be prepended to TLS control variable names.
36336     The default of `NULL' uses a target-specific prefix.
36337
36338 -- Target Hook: const char * TARGET_EMUTLS_TMPL_PREFIX
36339     Contains the prefix to be prepended to TLS initializer objects.
36340     The default of `NULL' uses a target-specific prefix.
36341
36342 -- Target Hook: tree TARGET_EMUTLS_VAR_FIELDS (tree TYPE, tree *NAME)
36343     Specifies a function that generates the FIELD_DECLs for a TLS
36344     control object type.  TYPE is the RECORD_TYPE the fields are for
36345     and NAME should be filled with the structure tag, if the default of
36346     `__emutls_object' is unsuitable.  The default creates a type
36347     suitable for libgcc's emulated TLS function.
36348
36349 -- Target Hook: tree TARGET_EMUTLS_VAR_INIT (tree VAR, tree DECL, tree
36350          TMPL_ADDR)
36351     Specifies a function that generates the CONSTRUCTOR to initialize a
36352     TLS control object.  VAR is the TLS control object, DECL is the
36353     TLS object and TMPL_ADDR is the address of the initializer.  The
36354     default initializes libgcc's emulated TLS control object.
36355
36356 -- Target Hook: bool TARGET_EMUTLS_VAR_ALIGN_FIXED
36357     Specifies whether the alignment of TLS control variable objects is
36358     fixed and should not be increased as some backends may do to
36359     optimize single objects.  The default is false.
36360
36361 -- Target Hook: bool TARGET_EMUTLS_DEBUG_FORM_TLS_ADDRESS
36362     Specifies whether a DWARF `DW_OP_form_tls_address' location
36363     descriptor may be used to describe emulated TLS control objects.
36364
36365
36366File: gccint.info,  Node: MIPS Coprocessors,  Next: PCH Target,  Prev: Emulated TLS,  Up: Target Macros
36367
3636817.27 Defining coprocessor specifics for MIPS targets.
36369======================================================
36370
36371The MIPS specification allows MIPS implementations to have as many as 4
36372coprocessors, each with as many as 32 private registers.  GCC supports
36373accessing these registers and transferring values between the registers
36374and memory using asm-ized variables.  For example:
36375
36376       register unsigned int cp0count asm ("c0r1");
36377       unsigned int d;
36378
36379       d = cp0count + 3;
36380
36381 ("c0r1" is the default name of register 1 in coprocessor 0; alternate
36382names may be added as described below, or the default names may be
36383overridden entirely in `SUBTARGET_CONDITIONAL_REGISTER_USAGE'.)
36384
36385 Coprocessor registers are assumed to be epilogue-used; sets to them
36386will be preserved even if it does not appear that the register is used
36387again later in the function.
36388
36389 Another note: according to the MIPS spec, coprocessor 1 (if present) is
36390the FPU.  One accesses COP1 registers through standard mips
36391floating-point support; they are not included in this mechanism.
36392
36393 There is one macro used in defining the MIPS coprocessor interface
36394which you may want to override in subtargets; it is described below.
36395
36396
36397File: gccint.info,  Node: PCH Target,  Next: C++ ABI,  Prev: MIPS Coprocessors,  Up: Target Macros
36398
3639917.28 Parameters for Precompiled Header Validity Checking
36400=========================================================
36401
36402 -- Target Hook: void * TARGET_GET_PCH_VALIDITY (size_t *SZ)
36403     This hook returns a pointer to the data needed by
36404     `TARGET_PCH_VALID_P' and sets `*SZ' to the size of the data in
36405     bytes.
36406
36407 -- Target Hook: const char * TARGET_PCH_VALID_P (const void *DATA,
36408          size_t SZ)
36409     This hook checks whether the options used to create a PCH file are
36410     compatible with the current settings.  It returns `NULL' if so and
36411     a suitable error message if not.  Error messages will be presented
36412     to the user and must be localized using `_(MSG)'.
36413
36414     DATA is the data that was returned by `TARGET_GET_PCH_VALIDITY'
36415     when the PCH file was created and SZ is the size of that data in
36416     bytes.  It's safe to assume that the data was created by the same
36417     version of the compiler, so no format checking is needed.
36418
36419     The default definition of `default_pch_valid_p' should be suitable
36420     for most targets.
36421
36422 -- Target Hook: const char * TARGET_CHECK_PCH_TARGET_FLAGS (int
36423          PCH_FLAGS)
36424     If this hook is nonnull, the default implementation of
36425     `TARGET_PCH_VALID_P' will use it to check for compatible values of
36426     `target_flags'.  PCH_FLAGS specifies the value that `target_flags'
36427     had when the PCH file was created.  The return value is the same
36428     as for `TARGET_PCH_VALID_P'.
36429
36430 -- Target Hook: void TARGET_PREPARE_PCH_SAVE (void)
36431     Called before writing out a PCH file.  If the target has some
36432     garbage-collected data that needs to be in a particular state on
36433     PCH loads, it can use this hook to enforce that state.  Very few
36434     targets need to do anything here.
36435
36436
36437File: gccint.info,  Node: C++ ABI,  Next: Named Address Spaces,  Prev: PCH Target,  Up: Target Macros
36438
3643917.29 C++ ABI parameters
36440========================
36441
36442 -- Target Hook: tree TARGET_CXX_GUARD_TYPE (void)
36443     Define this hook to override the integer type used for guard
36444     variables.  These are used to implement one-time construction of
36445     static objects.  The default is long_long_integer_type_node.
36446
36447 -- Target Hook: bool TARGET_CXX_GUARD_MASK_BIT (void)
36448     This hook determines how guard variables are used.  It should
36449     return `false' (the default) if the first byte should be used.  A
36450     return value of `true' indicates that only the least significant
36451     bit should be used.
36452
36453 -- Target Hook: tree TARGET_CXX_GET_COOKIE_SIZE (tree TYPE)
36454     This hook returns the size of the cookie to use when allocating an
36455     array whose elements have the indicated TYPE.  Assumes that it is
36456     already known that a cookie is needed.  The default is `max(sizeof
36457     (size_t), alignof(type))', as defined in section 2.7 of the
36458     IA64/Generic C++ ABI.
36459
36460 -- Target Hook: bool TARGET_CXX_COOKIE_HAS_SIZE (void)
36461     This hook should return `true' if the element size should be
36462     stored in array cookies.  The default is to return `false'.
36463
36464 -- Target Hook: int TARGET_CXX_IMPORT_EXPORT_CLASS (tree TYPE, int
36465          IMPORT_EXPORT)
36466     If defined by a backend this hook allows the decision made to
36467     export class TYPE to be overruled.  Upon entry IMPORT_EXPORT will
36468     contain 1 if the class is going to be exported, -1 if it is going
36469     to be imported and 0 otherwise.  This function should return the
36470     modified value and perform any other actions necessary to support
36471     the backend's targeted operating system.
36472
36473 -- Target Hook: bool TARGET_CXX_CDTOR_RETURNS_THIS (void)
36474     This hook should return `true' if constructors and destructors
36475     return the address of the object created/destroyed.  The default
36476     is to return `false'.
36477
36478 -- Target Hook: bool TARGET_CXX_KEY_METHOD_MAY_BE_INLINE (void)
36479     This hook returns true if the key method for a class (i.e., the
36480     method which, if defined in the current translation unit, causes
36481     the virtual table to be emitted) may be an inline function.  Under
36482     the standard Itanium C++ ABI the key method may be an inline
36483     function so long as the function is not declared inline in the
36484     class definition.  Under some variants of the ABI, an inline
36485     function can never be the key method.  The default is to return
36486     `true'.
36487
36488 -- Target Hook: void TARGET_CXX_DETERMINE_CLASS_DATA_VISIBILITY (tree
36489          DECL)
36490     DECL is a virtual table, virtual table table, typeinfo object, or
36491     other similar implicit class data object that will be emitted with
36492     external linkage in this translation unit.  No ELF visibility has
36493     been explicitly specified.  If the target needs to specify a
36494     visibility other than that of the containing class, use this hook
36495     to set `DECL_VISIBILITY' and `DECL_VISIBILITY_SPECIFIED'.
36496
36497 -- Target Hook: bool TARGET_CXX_CLASS_DATA_ALWAYS_COMDAT (void)
36498     This hook returns true (the default) if virtual tables and other
36499     similar implicit class data objects are always COMDAT if they have
36500     external linkage.  If this hook returns false, then class data for
36501     classes whose virtual table will be emitted in only one translation
36502     unit will not be COMDAT.
36503
36504 -- Target Hook: bool TARGET_CXX_LIBRARY_RTTI_COMDAT (void)
36505     This hook returns true (the default) if the RTTI information for
36506     the basic types which is defined in the C++ runtime should always
36507     be COMDAT, false if it should not be COMDAT.
36508
36509 -- Target Hook: bool TARGET_CXX_USE_AEABI_ATEXIT (void)
36510     This hook returns true if `__aeabi_atexit' (as defined by the ARM
36511     EABI) should be used to register static destructors when
36512     `-fuse-cxa-atexit' is in effect.  The default is to return false
36513     to use `__cxa_atexit'.
36514
36515 -- Target Hook: bool TARGET_CXX_USE_ATEXIT_FOR_CXA_ATEXIT (void)
36516     This hook returns true if the target `atexit' function can be used
36517     in the same manner as `__cxa_atexit' to register C++ static
36518     destructors. This requires that `atexit'-registered functions in
36519     shared libraries are run in the correct order when the libraries
36520     are unloaded. The default is to return false.
36521
36522 -- Target Hook: void TARGET_CXX_ADJUST_CLASS_AT_DEFINITION (tree TYPE)
36523     TYPE is a C++ class (i.e., RECORD_TYPE or UNION_TYPE) that has
36524     just been defined.  Use this hook to make adjustments to the class
36525     (eg, tweak visibility or perform any other required target
36526     modifications).
36527
36528 -- Target Hook: tree TARGET_CXX_DECL_MANGLING_CONTEXT (const_tree DECL)
36529     Return target-specific mangling context of DECL or `NULL_TREE'.
36530
36531
36532File: gccint.info,  Node: Named Address Spaces,  Next: Misc,  Prev: C++ ABI,  Up: Target Macros
36533
3653417.30 Adding support for named address spaces
36535=============================================
36536
36537The draft technical report of the ISO/IEC JTC1 S22 WG14 N1275 standards
36538committee, `Programming Languages - C - Extensions to support embedded
36539processors', specifies a syntax for embedded processors to specify
36540alternate address spaces.  You can configure a GCC port to support
36541section 5.1 of the draft report to add support for address spaces other
36542than the default address space.  These address spaces are new keywords
36543that are similar to the `volatile' and `const' type attributes.
36544
36545 Pointers to named address spaces can have a different size than
36546pointers to the generic address space.
36547
36548 For example, the SPU port uses the `__ea' address space to refer to
36549memory in the host processor, rather than memory local to the SPU
36550processor.  Access to memory in the `__ea' address space involves
36551issuing DMA operations to move data between the host processor and the
36552local processor memory address space.  Pointers in the `__ea' address
36553space are either 32 bits or 64 bits based on the `-mea32' or `-mea64'
36554switches (native SPU pointers are always 32 bits).
36555
36556 Internally, address spaces are represented as a small integer in the
36557range 0 to 15 with address space 0 being reserved for the generic
36558address space.
36559
36560 To register a named address space qualifier keyword with the C front
36561end, the target may call the `c_register_addr_space' routine.  For
36562example, the SPU port uses the following to declare `__ea' as the
36563keyword for named address space #1:
36564     #define ADDR_SPACE_EA 1
36565     c_register_addr_space ("__ea", ADDR_SPACE_EA);
36566
36567 -- Target Hook: enum machine_mode TARGET_ADDR_SPACE_POINTER_MODE
36568          (addr_space_t ADDRESS_SPACE)
36569     Define this to return the machine mode to use for pointers to
36570     ADDRESS_SPACE if the target supports named address spaces.  The
36571     default version of this hook returns `ptr_mode' for the generic
36572     address space only.
36573
36574 -- Target Hook: enum machine_mode TARGET_ADDR_SPACE_ADDRESS_MODE
36575          (addr_space_t ADDRESS_SPACE)
36576     Define this to return the machine mode to use for addresses in
36577     ADDRESS_SPACE if the target supports named address spaces.  The
36578     default version of this hook returns `Pmode' for the generic
36579     address space only.
36580
36581 -- Target Hook: bool TARGET_ADDR_SPACE_VALID_POINTER_MODE (enum
36582          machine_mode MODE, addr_space_t AS)
36583     Define this to return nonzero if the port can handle pointers with
36584     machine mode MODE to address space AS.  This target hook is the
36585     same as the `TARGET_VALID_POINTER_MODE' target hook, except that
36586     it includes explicit named address space support.  The default
36587     version of this hook returns true for the modes returned by either
36588     the `TARGET_ADDR_SPACE_POINTER_MODE' or
36589     `TARGET_ADDR_SPACE_ADDRESS_MODE' target hooks for the given
36590     address space.
36591
36592 -- Target Hook: bool TARGET_ADDR_SPACE_LEGITIMATE_ADDRESS_P (enum
36593          machine_mode MODE, rtx EXP, bool STRICT, addr_space_t AS)
36594     Define this to return true if EXP is a valid address for mode MODE
36595     in the named address space AS.  The STRICT parameter says whether
36596     strict addressing is in effect after reload has finished.  This
36597     target hook is the same as the `TARGET_LEGITIMATE_ADDRESS_P'
36598     target hook, except that it includes explicit named address space
36599     support.
36600
36601 -- Target Hook: rtx TARGET_ADDR_SPACE_LEGITIMIZE_ADDRESS (rtx X, rtx
36602          OLDX, enum machine_mode MODE, addr_space_t AS)
36603     Define this to modify an invalid address X to be a valid address
36604     with mode MODE in the named address space AS.  This target hook is
36605     the same as the `TARGET_LEGITIMIZE_ADDRESS' target hook, except
36606     that it includes explicit named address space support.
36607
36608 -- Target Hook: bool TARGET_ADDR_SPACE_SUBSET_P (addr_space_t SUBSET,
36609          addr_space_t SUPERSET)
36610     Define this to return whether the SUBSET named address space is
36611     contained within the SUPERSET named address space.  Pointers to a
36612     named address space that is a subset of another named address space
36613     will be converted automatically without a cast if used together in
36614     arithmetic operations.  Pointers to a superset address space can be
36615     converted to pointers to a subset address space via explicit casts.
36616
36617 -- Target Hook: rtx TARGET_ADDR_SPACE_CONVERT (rtx OP, tree FROM_TYPE,
36618          tree TO_TYPE)
36619     Define this to convert the pointer expression represented by the
36620     RTL OP with type FROM_TYPE that points to a named address space to
36621     a new pointer expression with type TO_TYPE that points to a
36622     different named address space.  When this hook it called, it is
36623     guaranteed that one of the two address spaces is a subset of the
36624     other, as determined by the `TARGET_ADDR_SPACE_SUBSET_P' target
36625     hook.
36626
36627
36628File: gccint.info,  Node: Misc,  Prev: Named Address Spaces,  Up: Target Macros
36629
3663017.31 Miscellaneous Parameters
36631==============================
36632
36633Here are several miscellaneous parameters.
36634
36635 -- Macro: HAS_LONG_COND_BRANCH
36636     Define this boolean macro to indicate whether or not your
36637     architecture has conditional branches that can span all of memory.
36638     It is used in conjunction with an optimization that partitions hot
36639     and cold basic blocks into separate sections of the executable.
36640     If this macro is set to false, gcc will convert any conditional
36641     branches that attempt to cross between sections into unconditional
36642     branches or indirect jumps.
36643
36644 -- Macro: HAS_LONG_UNCOND_BRANCH
36645     Define this boolean macro to indicate whether or not your
36646     architecture has unconditional branches that can span all of
36647     memory.  It is used in conjunction with an optimization that
36648     partitions hot and cold basic blocks into separate sections of the
36649     executable.  If this macro is set to false, gcc will convert any
36650     unconditional branches that attempt to cross between sections into
36651     indirect jumps.
36652
36653 -- Macro: CASE_VECTOR_MODE
36654     An alias for a machine mode name.  This is the machine mode that
36655     elements of a jump-table should have.
36656
36657 -- Macro: CASE_VECTOR_SHORTEN_MODE (MIN_OFFSET, MAX_OFFSET, BODY)
36658     Optional: return the preferred mode for an `addr_diff_vec' when
36659     the minimum and maximum offset are known.  If you define this, it
36660     enables extra code in branch shortening to deal with
36661     `addr_diff_vec'.  To make this work, you also have to define
36662     `INSN_ALIGN' and make the alignment for `addr_diff_vec' explicit.
36663     The BODY argument is provided so that the offset_unsigned and scale
36664     flags can be updated.
36665
36666 -- Macro: CASE_VECTOR_PC_RELATIVE
36667     Define this macro to be a C expression to indicate when jump-tables
36668     should contain relative addresses.  You need not define this macro
36669     if jump-tables never contain relative addresses, or jump-tables
36670     should contain relative addresses only when `-fPIC' or `-fPIC' is
36671     in effect.
36672
36673 -- Target Hook: unsigned int TARGET_CASE_VALUES_THRESHOLD (void)
36674     This function return the smallest number of different values for
36675     which it is best to use a jump-table instead of a tree of
36676     conditional branches.  The default is four for machines with a
36677     `casesi' instruction and five otherwise.  This is best for most
36678     machines.
36679
36680 -- Macro: WORD_REGISTER_OPERATIONS
36681     Define this macro if operations between registers with integral
36682     mode smaller than a word are always performed on the entire
36683     register.  Most RISC machines have this property and most CISC
36684     machines do not.
36685
36686 -- Macro: LOAD_EXTEND_OP (MEM_MODE)
36687     Define this macro to be a C expression indicating when insns that
36688     read memory in MEM_MODE, an integral mode narrower than a word,
36689     set the bits outside of MEM_MODE to be either the sign-extension
36690     or the zero-extension of the data read.  Return `SIGN_EXTEND' for
36691     values of MEM_MODE for which the insn sign-extends, `ZERO_EXTEND'
36692     for which it zero-extends, and `UNKNOWN' for other modes.
36693
36694     This macro is not called with MEM_MODE non-integral or with a width
36695     greater than or equal to `BITS_PER_WORD', so you may return any
36696     value in this case.  Do not define this macro if it would always
36697     return `UNKNOWN'.  On machines where this macro is defined, you
36698     will normally define it as the constant `SIGN_EXTEND' or
36699     `ZERO_EXTEND'.
36700
36701     You may return a non-`UNKNOWN' value even if for some hard
36702     registers the sign extension is not performed, if for the
36703     `REGNO_REG_CLASS' of these hard registers
36704     `CANNOT_CHANGE_MODE_CLASS' returns nonzero when the FROM mode is
36705     MEM_MODE and the TO mode is any integral mode larger than this but
36706     not larger than `word_mode'.
36707
36708     You must return `UNKNOWN' if for some hard registers that allow
36709     this mode, `CANNOT_CHANGE_MODE_CLASS' says that they cannot change
36710     to `word_mode', but that they can change to another integral mode
36711     that is larger then MEM_MODE but still smaller than `word_mode'.
36712
36713 -- Macro: SHORT_IMMEDIATES_SIGN_EXTEND
36714     Define this macro if loading short immediate values into registers
36715     sign extends.
36716
36717 -- Target Hook: unsigned int TARGET_MIN_DIVISIONS_FOR_RECIP_MUL (enum
36718          machine_mode MODE)
36719     When `-ffast-math' is in effect, GCC tries to optimize divisions
36720     by the same divisor, by turning them into multiplications by the
36721     reciprocal.  This target hook specifies the minimum number of
36722     divisions that should be there for GCC to perform the optimization
36723     for a variable of mode MODE.  The default implementation returns 3
36724     if the machine has an instruction for the division, and 2 if it
36725     does not.
36726
36727 -- Macro: MOVE_MAX
36728     The maximum number of bytes that a single instruction can move
36729     quickly between memory and registers or between two memory
36730     locations.
36731
36732 -- Macro: MAX_MOVE_MAX
36733     The maximum number of bytes that a single instruction can move
36734     quickly between memory and registers or between two memory
36735     locations.  If this is undefined, the default is `MOVE_MAX'.
36736     Otherwise, it is the constant value that is the largest value that
36737     `MOVE_MAX' can have at run-time.
36738
36739 -- Macro: SHIFT_COUNT_TRUNCATED
36740     A C expression that is nonzero if on this machine the number of
36741     bits actually used for the count of a shift operation is equal to
36742     the number of bits needed to represent the size of the object
36743     being shifted.  When this macro is nonzero, the compiler will
36744     assume that it is safe to omit a sign-extend, zero-extend, and
36745     certain bitwise `and' instructions that truncates the count of a
36746     shift operation.  On machines that have instructions that act on
36747     bit-fields at variable positions, which may include `bit test'
36748     instructions, a nonzero `SHIFT_COUNT_TRUNCATED' also enables
36749     deletion of truncations of the values that serve as arguments to
36750     bit-field instructions.
36751
36752     If both types of instructions truncate the count (for shifts) and
36753     position (for bit-field operations), or if no variable-position
36754     bit-field instructions exist, you should define this macro.
36755
36756     However, on some machines, such as the 80386 and the 680x0,
36757     truncation only applies to shift operations and not the (real or
36758     pretended) bit-field operations.  Define `SHIFT_COUNT_TRUNCATED'
36759     to be zero on such machines.  Instead, add patterns to the `md'
36760     file that include the implied truncation of the shift instructions.
36761
36762     You need not define this macro if it would always have the value
36763     of zero.
36764
36765 -- Target Hook: unsigned HOST_WIDE_INT TARGET_SHIFT_TRUNCATION_MASK
36766          (enum machine_mode MODE)
36767     This function describes how the standard shift patterns for MODE
36768     deal with shifts by negative amounts or by more than the width of
36769     the mode.  *Note shift patterns::.
36770
36771     On many machines, the shift patterns will apply a mask M to the
36772     shift count, meaning that a fixed-width shift of X by Y is
36773     equivalent to an arbitrary-width shift of X by Y & M.  If this is
36774     true for mode MODE, the function should return M, otherwise it
36775     should return 0.  A return value of 0 indicates that no particular
36776     behavior is guaranteed.
36777
36778     Note that, unlike `SHIFT_COUNT_TRUNCATED', this function does
36779     _not_ apply to general shift rtxes; it applies only to instructions
36780     that are generated by the named shift patterns.
36781
36782     The default implementation of this function returns
36783     `GET_MODE_BITSIZE (MODE) - 1' if `SHIFT_COUNT_TRUNCATED' and 0
36784     otherwise.  This definition is always safe, but if
36785     `SHIFT_COUNT_TRUNCATED' is false, and some shift patterns
36786     nevertheless truncate the shift count, you may get better code by
36787     overriding it.
36788
36789 -- Macro: TRULY_NOOP_TRUNCATION (OUTPREC, INPREC)
36790     A C expression which is nonzero if on this machine it is safe to
36791     "convert" an integer of INPREC bits to one of OUTPREC bits (where
36792     OUTPREC is smaller than INPREC) by merely operating on it as if it
36793     had only OUTPREC bits.
36794
36795     On many machines, this expression can be 1.
36796
36797     When `TRULY_NOOP_TRUNCATION' returns 1 for a pair of sizes for
36798     modes for which `MODES_TIEABLE_P' is 0, suboptimal code can result.
36799     If this is the case, making `TRULY_NOOP_TRUNCATION' return 0 in
36800     such cases may improve things.
36801
36802 -- Target Hook: int TARGET_MODE_REP_EXTENDED (enum machine_mode MODE,
36803          enum machine_mode REP_MODE)
36804     The representation of an integral mode can be such that the values
36805     are always extended to a wider integral mode.  Return
36806     `SIGN_EXTEND' if values of MODE are represented in sign-extended
36807     form to REP_MODE.  Return `UNKNOWN' otherwise.  (Currently, none
36808     of the targets use zero-extended representation this way so unlike
36809     `LOAD_EXTEND_OP', `TARGET_MODE_REP_EXTENDED' is expected to return
36810     either `SIGN_EXTEND' or `UNKNOWN'.  Also no target extends MODE to
36811     REP_MODE so that REP_MODE is not the next widest integral mode and
36812     currently we take advantage of this fact.)
36813
36814     Similarly to `LOAD_EXTEND_OP' you may return a non-`UNKNOWN' value
36815     even if the extension is not performed on certain hard registers
36816     as long as for the `REGNO_REG_CLASS' of these hard registers
36817     `CANNOT_CHANGE_MODE_CLASS' returns nonzero.
36818
36819     Note that `TARGET_MODE_REP_EXTENDED' and `LOAD_EXTEND_OP' describe
36820     two related properties.  If you define `TARGET_MODE_REP_EXTENDED
36821     (mode, word_mode)' you probably also want to define
36822     `LOAD_EXTEND_OP (mode)' to return the same type of extension.
36823
36824     In order to enforce the representation of `mode',
36825     `TRULY_NOOP_TRUNCATION' should return false when truncating to
36826     `mode'.
36827
36828 -- Macro: STORE_FLAG_VALUE
36829     A C expression describing the value returned by a comparison
36830     operator with an integral mode and stored by a store-flag
36831     instruction (`cstoreMODE4') when the condition is true.  This
36832     description must apply to _all_ the `cstoreMODE4' patterns and all
36833     the comparison operators whose results have a `MODE_INT' mode.
36834
36835     A value of 1 or -1 means that the instruction implementing the
36836     comparison operator returns exactly 1 or -1 when the comparison is
36837     true and 0 when the comparison is false.  Otherwise, the value
36838     indicates which bits of the result are guaranteed to be 1 when the
36839     comparison is true.  This value is interpreted in the mode of the
36840     comparison operation, which is given by the mode of the first
36841     operand in the `cstoreMODE4' pattern.  Either the low bit or the
36842     sign bit of `STORE_FLAG_VALUE' be on.  Presently, only those bits
36843     are used by the compiler.
36844
36845     If `STORE_FLAG_VALUE' is neither 1 or -1, the compiler will
36846     generate code that depends only on the specified bits.  It can also
36847     replace comparison operators with equivalent operations if they
36848     cause the required bits to be set, even if the remaining bits are
36849     undefined.  For example, on a machine whose comparison operators
36850     return an `SImode' value and where `STORE_FLAG_VALUE' is defined as
36851     `0x80000000', saying that just the sign bit is relevant, the
36852     expression
36853
36854          (ne:SI (and:SI X (const_int POWER-OF-2)) (const_int 0))
36855
36856     can be converted to
36857
36858          (ashift:SI X (const_int N))
36859
36860     where N is the appropriate shift count to move the bit being
36861     tested into the sign bit.
36862
36863     There is no way to describe a machine that always sets the
36864     low-order bit for a true value, but does not guarantee the value
36865     of any other bits, but we do not know of any machine that has such
36866     an instruction.  If you are trying to port GCC to such a machine,
36867     include an instruction to perform a logical-and of the result with
36868     1 in the pattern for the comparison operators and let us know at
36869     <gcc@gcc.gnu.org>.
36870
36871     Often, a machine will have multiple instructions that obtain a
36872     value from a comparison (or the condition codes).  Here are rules
36873     to guide the choice of value for `STORE_FLAG_VALUE', and hence the
36874     instructions to be used:
36875
36876        * Use the shortest sequence that yields a valid definition for
36877          `STORE_FLAG_VALUE'.  It is more efficient for the compiler to
36878          "normalize" the value (convert it to, e.g., 1 or 0) than for
36879          the comparison operators to do so because there may be
36880          opportunities to combine the normalization with other
36881          operations.
36882
36883        * For equal-length sequences, use a value of 1 or -1, with -1
36884          being slightly preferred on machines with expensive jumps and
36885          1 preferred on other machines.
36886
36887        * As a second choice, choose a value of `0x80000001' if
36888          instructions exist that set both the sign and low-order bits
36889          but do not define the others.
36890
36891        * Otherwise, use a value of `0x80000000'.
36892
36893     Many machines can produce both the value chosen for
36894     `STORE_FLAG_VALUE' and its negation in the same number of
36895     instructions.  On those machines, you should also define a pattern
36896     for those cases, e.g., one matching
36897
36898          (set A (neg:M (ne:M B C)))
36899
36900     Some machines can also perform `and' or `plus' operations on
36901     condition code values with less instructions than the corresponding
36902     `cstoreMODE4' insn followed by `and' or `plus'.  On those
36903     machines, define the appropriate patterns.  Use the names `incscc'
36904     and `decscc', respectively, for the patterns which perform `plus'
36905     or `minus' operations on condition code values.  See `rs6000.md'
36906     for some examples.  The GNU Superoptimizer can be used to find
36907     such instruction sequences on other machines.
36908
36909     If this macro is not defined, the default value, 1, is used.  You
36910     need not define `STORE_FLAG_VALUE' if the machine has no store-flag
36911     instructions, or if the value generated by these instructions is 1.
36912
36913 -- Macro: FLOAT_STORE_FLAG_VALUE (MODE)
36914     A C expression that gives a nonzero `REAL_VALUE_TYPE' value that is
36915     returned when comparison operators with floating-point results are
36916     true.  Define this macro on machines that have comparison
36917     operations that return floating-point values.  If there are no
36918     such operations, do not define this macro.
36919
36920 -- Macro: VECTOR_STORE_FLAG_VALUE (MODE)
36921     A C expression that gives a rtx representing the nonzero true
36922     element for vector comparisons.  The returned rtx should be valid
36923     for the inner mode of MODE which is guaranteed to be a vector
36924     mode.  Define this macro on machines that have vector comparison
36925     operations that return a vector result.  If there are no such
36926     operations, do not define this macro.  Typically, this macro is
36927     defined as `const1_rtx' or `constm1_rtx'.  This macro may return
36928     `NULL_RTX' to prevent the compiler optimizing such vector
36929     comparison operations for the given mode.
36930
36931 -- Macro: CLZ_DEFINED_VALUE_AT_ZERO (MODE, VALUE)
36932 -- Macro: CTZ_DEFINED_VALUE_AT_ZERO (MODE, VALUE)
36933     A C expression that indicates whether the architecture defines a
36934     value for `clz' or `ctz' with a zero operand.  A result of `0'
36935     indicates the value is undefined.  If the value is defined for
36936     only the RTL expression, the macro should evaluate to `1'; if the
36937     value applies also to the corresponding optab entry (which is
36938     normally the case if it expands directly into the corresponding
36939     RTL), then the macro should evaluate to `2'.  In the cases where
36940     the value is defined, VALUE should be set to this value.
36941
36942     If this macro is not defined, the value of `clz' or `ctz' at zero
36943     is assumed to be undefined.
36944
36945     This macro must be defined if the target's expansion for `ffs'
36946     relies on a particular value to get correct results.  Otherwise it
36947     is not necessary, though it may be used to optimize some corner
36948     cases, and to provide a default expansion for the `ffs' optab.
36949
36950     Note that regardless of this macro the "definedness" of `clz' and
36951     `ctz' at zero do _not_ extend to the builtin functions visible to
36952     the user.  Thus one may be free to adjust the value at will to
36953     match the target expansion of these operations without fear of
36954     breaking the API.
36955
36956 -- Macro: Pmode
36957     An alias for the machine mode for pointers.  On most machines,
36958     define this to be the integer mode corresponding to the width of a
36959     hardware pointer; `SImode' on 32-bit machine or `DImode' on 64-bit
36960     machines.  On some machines you must define this to be one of the
36961     partial integer modes, such as `PSImode'.
36962
36963     The width of `Pmode' must be at least as large as the value of
36964     `POINTER_SIZE'.  If it is not equal, you must define the macro
36965     `POINTERS_EXTEND_UNSIGNED' to specify how pointers are extended to
36966     `Pmode'.
36967
36968 -- Macro: FUNCTION_MODE
36969     An alias for the machine mode used for memory references to
36970     functions being called, in `call' RTL expressions.  On most CISC
36971     machines, where an instruction can begin at any byte address, this
36972     should be `QImode'.  On most RISC machines, where all instructions
36973     have fixed size and alignment, this should be a mode with the same
36974     size and alignment as the machine instruction words - typically
36975     `SImode' or `HImode'.
36976
36977 -- Macro: STDC_0_IN_SYSTEM_HEADERS
36978     In normal operation, the preprocessor expands `__STDC__' to the
36979     constant 1, to signify that GCC conforms to ISO Standard C.  On
36980     some hosts, like Solaris, the system compiler uses a different
36981     convention, where `__STDC__' is normally 0, but is 1 if the user
36982     specifies strict conformance to the C Standard.
36983
36984     Defining `STDC_0_IN_SYSTEM_HEADERS' makes GNU CPP follows the host
36985     convention when processing system header files, but when
36986     processing user files `__STDC__' will always expand to 1.
36987
36988 -- C Target Hook: const char * TARGET_C_PREINCLUDE (void)
36989     Define this hook to return the name of a header file to be
36990     included at the start of all compilations, as if it had been
36991     included with `#include <FILE>'.  If this hook returns `NULL', or
36992     is not defined, or the header is not found, or if the user
36993     specifies `-ffreestanding' or `-nostdinc', no header is included.
36994
36995     This hook can be used together with a header provided by the
36996     system C library to implement ISO C requirements for certain
36997     macros to be predefined that describe properties of the whole
36998     implementation rather than just the compiler.
36999
37000 -- Macro: NO_IMPLICIT_EXTERN_C
37001     Define this macro if the system header files support C++ as well
37002     as C.  This macro inhibits the usual method of using system header
37003     files in C++, which is to pretend that the file's contents are
37004     enclosed in `extern "C" {...}'.
37005
37006 -- Macro: REGISTER_TARGET_PRAGMAS ()
37007     Define this macro if you want to implement any target-specific
37008     pragmas.  If defined, it is a C expression which makes a series of
37009     calls to `c_register_pragma' or `c_register_pragma_with_expansion'
37010     for each pragma.  The macro may also do any setup required for the
37011     pragmas.
37012
37013     The primary reason to define this macro is to provide
37014     compatibility with other compilers for the same target.  In
37015     general, we discourage definition of target-specific pragmas for
37016     GCC.
37017
37018     If the pragma can be implemented by attributes then you should
37019     consider defining the target hook `TARGET_INSERT_ATTRIBUTES' as
37020     well.
37021
37022     Preprocessor macros that appear on pragma lines are not expanded.
37023     All `#pragma' directives that do not match any registered pragma
37024     are silently ignored, unless the user specifies
37025     `-Wunknown-pragmas'.
37026
37027 -- Function: void c_register_pragma (const char *SPACE, const char
37028          *NAME, void (*CALLBACK) (struct cpp_reader *))
37029 -- Function: void c_register_pragma_with_expansion (const char *SPACE,
37030          const char *NAME, void (*CALLBACK) (struct cpp_reader *))
37031     Each call to `c_register_pragma' or
37032     `c_register_pragma_with_expansion' establishes one pragma.  The
37033     CALLBACK routine will be called when the preprocessor encounters a
37034     pragma of the form
37035
37036          #pragma [SPACE] NAME ...
37037
37038     SPACE is the case-sensitive namespace of the pragma, or `NULL' to
37039     put the pragma in the global namespace.  The callback routine
37040     receives PFILE as its first argument, which can be passed on to
37041     cpplib's functions if necessary.  You can lex tokens after the
37042     NAME by calling `pragma_lex'.  Tokens that are not read by the
37043     callback will be silently ignored.  The end of the line is
37044     indicated by a token of type `CPP_EOF'.  Macro expansion occurs on
37045     the arguments of pragmas registered with
37046     `c_register_pragma_with_expansion' but not on the arguments of
37047     pragmas registered with `c_register_pragma'.
37048
37049     Note that the use of `pragma_lex' is specific to the C and C++
37050     compilers.  It will not work in the Java or Fortran compilers, or
37051     any other language compilers for that matter.  Thus if
37052     `pragma_lex' is going to be called from target-specific code, it
37053     must only be done so when building the C and C++ compilers.  This
37054     can be done by defining the variables `c_target_objs' and
37055     `cxx_target_objs' in the target entry in the `config.gcc' file.
37056     These variables should name the target-specific, language-specific
37057     object file which contains the code that uses `pragma_lex'.  Note
37058     it will also be necessary to add a rule to the makefile fragment
37059     pointed to by `tmake_file' that shows how to build this object
37060     file.
37061
37062 -- Macro: HANDLE_PRAGMA_PACK_WITH_EXPANSION
37063     Define this macro if macros should be expanded in the arguments of
37064     `#pragma pack'.
37065
37066 -- Macro: TARGET_DEFAULT_PACK_STRUCT
37067     If your target requires a structure packing default other than 0
37068     (meaning the machine default), define this macro to the necessary
37069     value (in bytes).  This must be a value that would also be valid
37070     to use with `#pragma pack()' (that is, a small power of two).
37071
37072 -- Macro: DOLLARS_IN_IDENTIFIERS
37073     Define this macro to control use of the character `$' in
37074     identifier names for the C family of languages.  0 means `$' is
37075     not allowed by default; 1 means it is allowed.  1 is the default;
37076     there is no need to define this macro in that case.
37077
37078 -- Macro: INSN_SETS_ARE_DELAYED (INSN)
37079     Define this macro as a C expression that is nonzero if it is safe
37080     for the delay slot scheduler to place instructions in the delay
37081     slot of INSN, even if they appear to use a resource set or
37082     clobbered in INSN.  INSN is always a `jump_insn' or an `insn'; GCC
37083     knows that every `call_insn' has this behavior.  On machines where
37084     some `insn' or `jump_insn' is really a function call and hence has
37085     this behavior, you should define this macro.
37086
37087     You need not define this macro if it would always return zero.
37088
37089 -- Macro: INSN_REFERENCES_ARE_DELAYED (INSN)
37090     Define this macro as a C expression that is nonzero if it is safe
37091     for the delay slot scheduler to place instructions in the delay
37092     slot of INSN, even if they appear to set or clobber a resource
37093     referenced in INSN.  INSN is always a `jump_insn' or an `insn'.
37094     On machines where some `insn' or `jump_insn' is really a function
37095     call and its operands are registers whose use is actually in the
37096     subroutine it calls, you should define this macro.  Doing so
37097     allows the delay slot scheduler to move instructions which copy
37098     arguments into the argument registers into the delay slot of INSN.
37099
37100     You need not define this macro if it would always return zero.
37101
37102 -- Macro: MULTIPLE_SYMBOL_SPACES
37103     Define this macro as a C expression that is nonzero if, in some
37104     cases, global symbols from one translation unit may not be bound
37105     to undefined symbols in another translation unit without user
37106     intervention.  For instance, under Microsoft Windows symbols must
37107     be explicitly imported from shared libraries (DLLs).
37108
37109     You need not define this macro if it would always evaluate to zero.
37110
37111 -- Target Hook: tree TARGET_MD_ASM_CLOBBERS (tree OUTPUTS, tree
37112          INPUTS, tree CLOBBERS)
37113     This target hook should add to CLOBBERS `STRING_CST' trees for any
37114     hard regs the port wishes to automatically clobber for an asm.  It
37115     should return the result of the last `tree_cons' used to add a
37116     clobber.  The OUTPUTS, INPUTS and CLOBBER lists are the
37117     corresponding parameters to the asm and may be inspected to avoid
37118     clobbering a register that is an input or output of the asm.  You
37119     can use `tree_overlaps_hard_reg_set', declared in `tree.h', to test
37120     for overlap with regards to asm-declared registers.
37121
37122 -- Macro: MATH_LIBRARY
37123     Define this macro as a C string constant for the linker argument
37124     to link in the system math library, minus the initial `"-l"', or
37125     `""' if the target does not have a separate math library.
37126
37127     You need only define this macro if the default of `"m"' is wrong.
37128
37129 -- Macro: LIBRARY_PATH_ENV
37130     Define this macro as a C string constant for the environment
37131     variable that specifies where the linker should look for libraries.
37132
37133     You need only define this macro if the default of `"LIBRARY_PATH"'
37134     is wrong.
37135
37136 -- Macro: TARGET_POSIX_IO
37137     Define this macro if the target supports the following POSIX file
37138     functions, access, mkdir and  file locking with fcntl / F_SETLKW.
37139     Defining `TARGET_POSIX_IO' will enable the test coverage code to
37140     use file locking when exiting a program, which avoids race
37141     conditions if the program has forked. It will also create
37142     directories at run-time for cross-profiling.
37143
37144 -- Macro: MAX_CONDITIONAL_EXECUTE
37145     A C expression for the maximum number of instructions to execute
37146     via conditional execution instructions instead of a branch.  A
37147     value of `BRANCH_COST'+1 is the default if the machine does not
37148     use cc0, and 1 if it does use cc0.
37149
37150 -- Macro: IFCVT_MODIFY_TESTS (CE_INFO, TRUE_EXPR, FALSE_EXPR)
37151     Used if the target needs to perform machine-dependent
37152     modifications on the conditionals used for turning basic blocks
37153     into conditionally executed code.  CE_INFO points to a data
37154     structure, `struct ce_if_block', which contains information about
37155     the currently processed blocks.  TRUE_EXPR and FALSE_EXPR are the
37156     tests that are used for converting the then-block and the
37157     else-block, respectively.  Set either TRUE_EXPR or FALSE_EXPR to a
37158     null pointer if the tests cannot be converted.
37159
37160 -- Macro: IFCVT_MODIFY_MULTIPLE_TESTS (CE_INFO, BB, TRUE_EXPR,
37161          FALSE_EXPR)
37162     Like `IFCVT_MODIFY_TESTS', but used when converting more
37163     complicated if-statements into conditions combined by `and' and
37164     `or' operations.  BB contains the basic block that contains the
37165     test that is currently being processed and about to be turned into
37166     a condition.
37167
37168 -- Macro: IFCVT_MODIFY_INSN (CE_INFO, PATTERN, INSN)
37169     A C expression to modify the PATTERN of an INSN that is to be
37170     converted to conditional execution format.  CE_INFO points to a
37171     data structure, `struct ce_if_block', which contains information
37172     about the currently processed blocks.
37173
37174 -- Macro: IFCVT_MODIFY_FINAL (CE_INFO)
37175     A C expression to perform any final machine dependent
37176     modifications in converting code to conditional execution.  The
37177     involved basic blocks can be found in the `struct ce_if_block'
37178     structure that is pointed to by CE_INFO.
37179
37180 -- Macro: IFCVT_MODIFY_CANCEL (CE_INFO)
37181     A C expression to cancel any machine dependent modifications in
37182     converting code to conditional execution.  The involved basic
37183     blocks can be found in the `struct ce_if_block' structure that is
37184     pointed to by CE_INFO.
37185
37186 -- Macro: IFCVT_MACHDEP_INIT (CE_INFO)
37187     A C expression to initialize any machine specific data for
37188     if-conversion of the if-block in the `struct ce_if_block'
37189     structure that is pointed to by CE_INFO.
37190
37191 -- Target Hook: void TARGET_MACHINE_DEPENDENT_REORG (void)
37192     If non-null, this hook performs a target-specific pass over the
37193     instruction stream.  The compiler will run it at all optimization
37194     levels, just before the point at which it normally does
37195     delayed-branch scheduling.
37196
37197     The exact purpose of the hook varies from target to target.  Some
37198     use it to do transformations that are necessary for correctness,
37199     such as laying out in-function constant pools or avoiding hardware
37200     hazards.  Others use it as an opportunity to do some
37201     machine-dependent optimizations.
37202
37203     You need not implement the hook if it has nothing to do.  The
37204     default definition is null.
37205
37206 -- Target Hook: void TARGET_INIT_BUILTINS (void)
37207     Define this hook if you have any machine-specific built-in
37208     functions that need to be defined.  It should be a function that
37209     performs the necessary setup.
37210
37211     Machine specific built-in functions can be useful to expand
37212     special machine instructions that would otherwise not normally be
37213     generated because they have no equivalent in the source language
37214     (for example, SIMD vector instructions or prefetch instructions).
37215
37216     To create a built-in function, call the function
37217     `lang_hooks.builtin_function' which is defined by the language
37218     front end.  You can use any type nodes set up by
37219     `build_common_tree_nodes'; only language front ends that use those
37220     two functions will call `TARGET_INIT_BUILTINS'.
37221
37222 -- Target Hook: tree TARGET_BUILTIN_DECL (unsigned CODE, bool
37223          INITIALIZE_P)
37224     Define this hook if you have any machine-specific built-in
37225     functions that need to be defined.  It should be a function that
37226     returns the builtin function declaration for the builtin function
37227     code CODE.  If there is no such builtin and it cannot be
37228     initialized at this time if INITIALIZE_P is true the function
37229     should return `NULL_TREE'.  If CODE is out of range the function
37230     should return `error_mark_node'.
37231
37232 -- Target Hook: rtx TARGET_EXPAND_BUILTIN (tree EXP, rtx TARGET, rtx
37233          SUBTARGET, enum machine_mode MODE, int IGNORE)
37234     Expand a call to a machine specific built-in function that was set
37235     up by `TARGET_INIT_BUILTINS'.  EXP is the expression for the
37236     function call; the result should go to TARGET if that is
37237     convenient, and have mode MODE if that is convenient.  SUBTARGET
37238     may be used as the target for computing one of EXP's operands.
37239     IGNORE is nonzero if the value is to be ignored.  This function
37240     should return the result of the call to the built-in function.
37241
37242 -- Target Hook: tree TARGET_RESOLVE_OVERLOADED_BUILTIN (unsigned int
37243          LOC, tree FNDECL, void *ARGLIST)
37244     Select a replacement for a machine specific built-in function that
37245     was set up by `TARGET_INIT_BUILTINS'.  This is done _before_
37246     regular type checking, and so allows the target to implement a
37247     crude form of function overloading.  FNDECL is the declaration of
37248     the built-in function.  ARGLIST is the list of arguments passed to
37249     the built-in function.  The result is a complete expression that
37250     implements the operation, usually another `CALL_EXPR'.  ARGLIST
37251     really has type `VEC(tree,gc)*'
37252
37253 -- Target Hook: tree TARGET_FOLD_BUILTIN (tree FNDECL, int N_ARGS,
37254          tree *ARGP, bool IGNORE)
37255     Fold a call to a machine specific built-in function that was set
37256     up by `TARGET_INIT_BUILTINS'.  FNDECL is the declaration of the
37257     built-in function.  N_ARGS is the number of arguments passed to
37258     the function; the arguments themselves are pointed to by ARGP.
37259     The result is another tree containing a simplified expression for
37260     the call's result.  If IGNORE is true the value will be ignored.
37261
37262 -- Target Hook: int TARGET_COMPARE_VERSION_PRIORITY (tree DECL1, tree
37263          DECL2)
37264     This hook is used to compare the target attributes in two
37265     functions to determine which function's features get higher
37266     priority.  This is used during function multi-versioning to figure
37267     out the order in which two versions must be dispatched.  A
37268     function version with a higher priority is checked for dispatching
37269     earlier.  DECL1 and DECL2 are  the two function decls that will be
37270     compared.
37271
37272 -- Target Hook: tree TARGET_GET_FUNCTION_VERSIONS_DISPATCHER (void
37273          *DECL)
37274     This hook is used to get the dispatcher function for a set of
37275     function versions.  The dispatcher function is called to invoke
37276     the right function version at run-time. DECL is one version from a
37277     set of semantically identical versions.
37278
37279 -- Target Hook: tree TARGET_GENERATE_VERSION_DISPATCHER_BODY (void
37280          *ARG)
37281     This hook is used to generate the dispatcher logic to invoke the
37282     right function version at run-time for a given set of function
37283     versions.  ARG points to the callgraph node of the dispatcher
37284     function whose body must be generated.
37285
37286 -- Target Hook: const char * TARGET_INVALID_WITHIN_DOLOOP (const_rtx
37287          INSN)
37288     Take an instruction in INSN and return NULL if it is valid within a
37289     low-overhead loop, otherwise return a string explaining why doloop
37290     could not be applied.
37291
37292     Many targets use special registers for low-overhead looping. For
37293     any instruction that clobbers these this function should return a
37294     string indicating the reason why the doloop could not be applied.
37295     By default, the RTL loop optimizer does not use a present doloop
37296     pattern for loops containing function calls or branch on table
37297     instructions.
37298
37299 -- Target Hook: bool TARGET_LEGITIMATE_COMBINED_INSN (rtx INSN)
37300     Take an instruction in INSN and return `false' if the instruction
37301     is not appropriate as a combination of two or more instructions.
37302     The default is to accept all instructions.
37303
37304 -- Macro: MD_CAN_REDIRECT_BRANCH (BRANCH1, BRANCH2)
37305     Take a branch insn in BRANCH1 and another in BRANCH2.  Return true
37306     if redirecting BRANCH1 to the destination of BRANCH2 is possible.
37307
37308     On some targets, branches may have a limited range.  Optimizing the
37309     filling of delay slots can result in branches being redirected,
37310     and this may in turn cause a branch offset to overflow.
37311
37312 -- Target Hook: bool TARGET_CAN_FOLLOW_JUMP (const_rtx FOLLOWER,
37313          const_rtx FOLLOWEE)
37314     FOLLOWER and FOLLOWEE are JUMP_INSN instructions;  return true if
37315     FOLLOWER may be modified to follow FOLLOWEE;  false, if it can't.
37316     For example, on some targets, certain kinds of branches can't be
37317     made to  follow through a hot/cold partitioning.
37318
37319 -- Target Hook: bool TARGET_COMMUTATIVE_P (const_rtx X, int OUTER_CODE)
37320     This target hook returns `true' if X is considered to be
37321     commutative.  Usually, this is just COMMUTATIVE_P (X), but the HP
37322     PA doesn't consider PLUS to be commutative inside a MEM.
37323     OUTER_CODE is the rtx code of the enclosing rtl, if known,
37324     otherwise it is UNKNOWN.
37325
37326 -- Target Hook: rtx TARGET_ALLOCATE_INITIAL_VALUE (rtx HARD_REG)
37327     When the initial value of a hard register has been copied in a
37328     pseudo register, it is often not necessary to actually allocate
37329     another register to this pseudo register, because the original
37330     hard register or a stack slot it has been saved into can be used.
37331     `TARGET_ALLOCATE_INITIAL_VALUE' is called at the start of register
37332     allocation once for each hard register that had its initial value
37333     copied by using `get_func_hard_reg_initial_val' or
37334     `get_hard_reg_initial_val'.  Possible values are `NULL_RTX', if
37335     you don't want to do any special allocation, a `REG' rtx--that
37336     would typically be the hard register itself, if it is known not to
37337     be clobbered--or a `MEM'.  If you are returning a `MEM', this is
37338     only a hint for the allocator; it might decide to use another
37339     register anyways.  You may use `current_function_is_leaf' or
37340     `REG_N_SETS' in the hook to determine if the hard register in
37341     question will not be clobbered.  The default value of this hook is
37342     `NULL', which disables any special allocation.
37343
37344 -- Target Hook: int TARGET_UNSPEC_MAY_TRAP_P (const_rtx X, unsigned
37345          FLAGS)
37346     This target hook returns nonzero if X, an `unspec' or
37347     `unspec_volatile' operation, might cause a trap.  Targets can use
37348     this hook to enhance precision of analysis for `unspec' and
37349     `unspec_volatile' operations.  You may call `may_trap_p_1' to
37350     analyze inner elements of X in which case FLAGS should be passed
37351     along.
37352
37353 -- Target Hook: void TARGET_SET_CURRENT_FUNCTION (tree DECL)
37354     The compiler invokes this hook whenever it changes its current
37355     function context (`cfun').  You can define this function if the
37356     back end needs to perform any initialization or reset actions on a
37357     per-function basis.  For example, it may be used to implement
37358     function attributes that affect register usage or code generation
37359     patterns.  The argument DECL is the declaration for the new
37360     function context, and may be null to indicate that the compiler
37361     has left a function context and is returning to processing at the
37362     top level.  The default hook function does nothing.
37363
37364     GCC sets `cfun' to a dummy function context during initialization
37365     of some parts of the back end.  The hook function is not invoked
37366     in this situation; you need not worry about the hook being invoked
37367     recursively, or when the back end is in a partially-initialized
37368     state.  `cfun' might be `NULL' to indicate processing at top level,
37369     outside of any function scope.
37370
37371 -- Macro: TARGET_OBJECT_SUFFIX
37372     Define this macro to be a C string representing the suffix for
37373     object files on your target machine.  If you do not define this
37374     macro, GCC will use `.o' as the suffix for object files.
37375
37376 -- Macro: TARGET_EXECUTABLE_SUFFIX
37377     Define this macro to be a C string representing the suffix to be
37378     automatically added to executable files on your target machine.
37379     If you do not define this macro, GCC will use the null string as
37380     the suffix for executable files.
37381
37382 -- Macro: COLLECT_EXPORT_LIST
37383     If defined, `collect2' will scan the individual object files
37384     specified on its command line and create an export list for the
37385     linker.  Define this macro for systems like AIX, where the linker
37386     discards object files that are not referenced from `main' and uses
37387     export lists.
37388
37389 -- Macro: MODIFY_JNI_METHOD_CALL (MDECL)
37390     Define this macro to a C expression representing a variant of the
37391     method call MDECL, if Java Native Interface (JNI) methods must be
37392     invoked differently from other methods on your target.  For
37393     example, on 32-bit Microsoft Windows, JNI methods must be invoked
37394     using the `stdcall' calling convention and this macro is then
37395     defined as this expression:
37396
37397          build_type_attribute_variant (MDECL,
37398                                        build_tree_list
37399                                        (get_identifier ("stdcall"),
37400                                         NULL))
37401
37402 -- Target Hook: bool TARGET_CANNOT_MODIFY_JUMPS_P (void)
37403     This target hook returns `true' past the point in which new jump
37404     instructions could be created.  On machines that require a
37405     register for every jump such as the SHmedia ISA of SH5, this point
37406     would typically be reload, so this target hook should be defined
37407     to a function such as:
37408
37409          static bool
37410          cannot_modify_jumps_past_reload_p ()
37411          {
37412            return (reload_completed || reload_in_progress);
37413          }
37414
37415 -- Target Hook: reg_class_t TARGET_BRANCH_TARGET_REGISTER_CLASS (void)
37416     This target hook returns a register class for which branch target
37417     register optimizations should be applied.  All registers in this
37418     class should be usable interchangeably.  After reload, registers
37419     in this class will be re-allocated and loads will be hoisted out
37420     of loops and be subjected to inter-block scheduling.
37421
37422 -- Target Hook: bool TARGET_BRANCH_TARGET_REGISTER_CALLEE_SAVED (bool
37423          AFTER_PROLOGUE_EPILOGUE_GEN)
37424     Branch target register optimization will by default exclude
37425     callee-saved registers that are not already live during the
37426     current function; if this target hook returns true, they will be
37427     included.  The target code must than make sure that all target
37428     registers in the class returned by
37429     `TARGET_BRANCH_TARGET_REGISTER_CLASS' that might need saving are
37430     saved.  AFTER_PROLOGUE_EPILOGUE_GEN indicates if prologues and
37431     epilogues have already been generated.  Note, even if you only
37432     return true when AFTER_PROLOGUE_EPILOGUE_GEN is false, you still
37433     are likely to have to make special provisions in
37434     `INITIAL_ELIMINATION_OFFSET' to reserve space for caller-saved
37435     target registers.
37436
37437 -- Target Hook: bool TARGET_HAVE_CONDITIONAL_EXECUTION (void)
37438     This target hook returns true if the target supports conditional
37439     execution.  This target hook is required only when the target has
37440     several different modes and they have different conditional
37441     execution capability, such as ARM.
37442
37443 -- Target Hook: unsigned TARGET_LOOP_UNROLL_ADJUST (unsigned NUNROLL,
37444          struct loop *LOOP)
37445     This target hook returns a new value for the number of times LOOP
37446     should be unrolled. The parameter NUNROLL is the number of times
37447     the loop is to be unrolled. The parameter LOOP is a pointer to the
37448     loop, which is going to be checked for unrolling. This target hook
37449     is required only when the target has special constraints like
37450     maximum number of memory accesses.
37451
37452 -- Macro: POWI_MAX_MULTS
37453     If defined, this macro is interpreted as a signed integer C
37454     expression that specifies the maximum number of floating point
37455     multiplications that should be emitted when expanding
37456     exponentiation by an integer constant inline.  When this value is
37457     defined, exponentiation requiring more than this number of
37458     multiplications is implemented by calling the system library's
37459     `pow', `powf' or `powl' routines.  The default value places no
37460     upper bound on the multiplication count.
37461
37462 -- Macro: void TARGET_EXTRA_INCLUDES (const char *SYSROOT, const char
37463          *IPREFIX, int STDINC)
37464     This target hook should register any extra include files for the
37465     target.  The parameter STDINC indicates if normal include files
37466     are present.  The parameter SYSROOT is the system root directory.
37467     The parameter IPREFIX is the prefix for the gcc directory.
37468
37469 -- Macro: void TARGET_EXTRA_PRE_INCLUDES (const char *SYSROOT, const
37470          char *IPREFIX, int STDINC)
37471     This target hook should register any extra include files for the
37472     target before any standard headers.  The parameter STDINC
37473     indicates if normal include files are present.  The parameter
37474     SYSROOT is the system root directory.  The parameter IPREFIX is
37475     the prefix for the gcc directory.
37476
37477 -- Macro: void TARGET_OPTF (char *PATH)
37478     This target hook should register special include paths for the
37479     target.  The parameter PATH is the include to register.  On Darwin
37480     systems, this is used for Framework includes, which have semantics
37481     that are different from `-I'.
37482
37483 -- Macro: bool TARGET_USE_LOCAL_THUNK_ALIAS_P (tree FNDECL)
37484     This target macro returns `true' if it is safe to use a local alias
37485     for a virtual function FNDECL when constructing thunks, `false'
37486     otherwise.  By default, the macro returns `true' for all
37487     functions, if a target supports aliases (i.e. defines
37488     `ASM_OUTPUT_DEF'), `false' otherwise,
37489
37490 -- Macro: TARGET_FORMAT_TYPES
37491     If defined, this macro is the name of a global variable containing
37492     target-specific format checking information for the `-Wformat'
37493     option.  The default is to have no target-specific format checks.
37494
37495 -- Macro: TARGET_N_FORMAT_TYPES
37496     If defined, this macro is the number of entries in
37497     `TARGET_FORMAT_TYPES'.
37498
37499 -- Macro: TARGET_OVERRIDES_FORMAT_ATTRIBUTES
37500     If defined, this macro is the name of a global variable containing
37501     target-specific format overrides for the `-Wformat' option. The
37502     default is to have no target-specific format overrides. If defined,
37503     `TARGET_FORMAT_TYPES' must be defined, too.
37504
37505 -- Macro: TARGET_OVERRIDES_FORMAT_ATTRIBUTES_COUNT
37506     If defined, this macro specifies the number of entries in
37507     `TARGET_OVERRIDES_FORMAT_ATTRIBUTES'.
37508
37509 -- Macro: TARGET_OVERRIDES_FORMAT_INIT
37510     If defined, this macro specifies the optional initialization
37511     routine for target specific customizations of the system printf
37512     and scanf formatter settings.
37513
37514 -- Target Hook: bool TARGET_RELAXED_ORDERING
37515     If set to `true', means that the target's memory model does not
37516     guarantee that loads which do not depend on one another will access
37517     main memory in the order of the instruction stream; if ordering is
37518     important, an explicit memory barrier must be used.  This is true
37519     of many recent processors which implement a policy of "relaxed,"
37520     "weak," or "release" memory consistency, such as Alpha, PowerPC,
37521     and ia64.  The default is `false'.
37522
37523 -- Target Hook: const char * TARGET_INVALID_ARG_FOR_UNPROTOTYPED_FN
37524          (const_tree TYPELIST, const_tree FUNCDECL, const_tree VAL)
37525     If defined, this macro returns the diagnostic message when it is
37526     illegal to pass argument VAL to function FUNCDECL with prototype
37527     TYPELIST.
37528
37529 -- Target Hook: const char * TARGET_INVALID_CONVERSION (const_tree
37530          FROMTYPE, const_tree TOTYPE)
37531     If defined, this macro returns the diagnostic message when it is
37532     invalid to convert from FROMTYPE to TOTYPE, or `NULL' if validity
37533     should be determined by the front end.
37534
37535 -- Target Hook: const char * TARGET_INVALID_UNARY_OP (int OP,
37536          const_tree TYPE)
37537     If defined, this macro returns the diagnostic message when it is
37538     invalid to apply operation OP (where unary plus is denoted by
37539     `CONVERT_EXPR') to an operand of type TYPE, or `NULL' if validity
37540     should be determined by the front end.
37541
37542 -- Target Hook: const char * TARGET_INVALID_BINARY_OP (int OP,
37543          const_tree TYPE1, const_tree TYPE2)
37544     If defined, this macro returns the diagnostic message when it is
37545     invalid to apply operation OP to operands of types TYPE1 and
37546     TYPE2, or `NULL' if validity should be determined by the front end.
37547
37548 -- Target Hook: const char * TARGET_INVALID_PARAMETER_TYPE (const_tree
37549          TYPE)
37550     If defined, this macro returns the diagnostic message when it is
37551     invalid for functions to include parameters of type TYPE, or
37552     `NULL' if validity should be determined by the front end.  This is
37553     currently used only by the C and C++ front ends.
37554
37555 -- Target Hook: const char * TARGET_INVALID_RETURN_TYPE (const_tree
37556          TYPE)
37557     If defined, this macro returns the diagnostic message when it is
37558     invalid for functions to have return type TYPE, or `NULL' if
37559     validity should be determined by the front end.  This is currently
37560     used only by the C and C++ front ends.
37561
37562 -- Target Hook: tree TARGET_PROMOTED_TYPE (const_tree TYPE)
37563     If defined, this target hook returns the type to which values of
37564     TYPE should be promoted when they appear in expressions, analogous
37565     to the integer promotions, or `NULL_TREE' to use the front end's
37566     normal promotion rules.  This hook is useful when there are
37567     target-specific types with special promotion rules.  This is
37568     currently used only by the C and C++ front ends.
37569
37570 -- Target Hook: tree TARGET_CONVERT_TO_TYPE (tree TYPE, tree EXPR)
37571     If defined, this hook returns the result of converting EXPR to
37572     TYPE.  It should return the converted expression, or `NULL_TREE'
37573     to apply the front end's normal conversion rules.  This hook is
37574     useful when there are target-specific types with special
37575     conversion rules.  This is currently used only by the C and C++
37576     front ends.
37577
37578 -- Macro: TARGET_USE_JCR_SECTION
37579     This macro determines whether to use the JCR section to register
37580     Java classes. By default, TARGET_USE_JCR_SECTION is defined to 1
37581     if both SUPPORTS_WEAK and TARGET_HAVE_NAMED_SECTIONS are true,
37582     else 0.
37583
37584 -- Macro: OBJC_JBLEN
37585     This macro determines the size of the objective C jump buffer for
37586     the NeXT runtime. By default, OBJC_JBLEN is defined to an
37587     innocuous value.
37588
37589 -- Macro: LIBGCC2_UNWIND_ATTRIBUTE
37590     Define this macro if any target-specific attributes need to be
37591     attached to the functions in `libgcc' that provide low-level
37592     support for call stack unwinding.  It is used in declarations in
37593     `unwind-generic.h' and the associated definitions of those
37594     functions.
37595
37596 -- Target Hook: void TARGET_UPDATE_STACK_BOUNDARY (void)
37597     Define this macro to update the current function stack boundary if
37598     necessary.
37599
37600 -- Target Hook: rtx TARGET_GET_DRAP_RTX (void)
37601     This hook should return an rtx for Dynamic Realign Argument
37602     Pointer (DRAP) if a different argument pointer register is needed
37603     to access the function's argument list due to stack realignment.
37604     Return `NULL' if no DRAP is needed.
37605
37606 -- Target Hook: bool TARGET_ALLOCATE_STACK_SLOTS_FOR_ARGS (void)
37607     When optimization is disabled, this hook indicates whether or not
37608     arguments should be allocated to stack slots.  Normally, GCC
37609     allocates stacks slots for arguments when not optimizing in order
37610     to make debugging easier.  However, when a function is declared
37611     with `__attribute__((naked))', there is no stack frame, and the
37612     compiler cannot safely move arguments from the registers in which
37613     they are passed to the stack.  Therefore, this hook should return
37614     true in general, but false for naked functions.  The default
37615     implementation always returns true.
37616
37617 -- Target Hook: unsigned HOST_WIDE_INT TARGET_CONST_ANCHOR
37618     On some architectures it can take multiple instructions to
37619     synthesize a constant.  If there is another constant already in a
37620     register that is close enough in value then it is preferable that
37621     the new constant is computed from this register using immediate
37622     addition or subtraction.  We accomplish this through CSE.  Besides
37623     the value of the constant we also add a lower and an upper
37624     constant anchor to the available expressions.  These are then
37625     queried when encountering new constants.  The anchors are computed
37626     by rounding the constant up and down to a multiple of the value of
37627     `TARGET_CONST_ANCHOR'.  `TARGET_CONST_ANCHOR' should be the
37628     maximum positive value accepted by immediate-add plus one.  We
37629     currently assume that the value of `TARGET_CONST_ANCHOR' is a
37630     power of 2.  For example, on MIPS, where add-immediate takes a
37631     16-bit signed value, `TARGET_CONST_ANCHOR' is set to `0x8000'.
37632     The default value is zero, which disables this optimization.
37633
37634 -- Target Hook: unsigned HOST_WIDE_INT TARGET_ASAN_SHADOW_OFFSET (void)
37635     Return the offset bitwise ored into shifted address to get
37636     corresponding Address Sanitizer shadow memory address.  NULL if
37637     Address Sanitizer is not supported by the target.
37638
37639 -- Target Hook: unsigned HOST_WIDE_INT TARGET_MEMMODEL_CHECK (unsigned
37640          HOST_WIDE_INT VAL)
37641     Validate target specific memory model mask bits. When NULL no
37642     target specific memory model bits are allowed.
37643
37644 -- Target Hook: unsigned char TARGET_ATOMIC_TEST_AND_SET_TRUEVAL
37645     This value should be set if the result written by
37646     `atomic_test_and_set' is not exactly 1, i.e. the `bool' `true'.
37647
37648
37649File: gccint.info,  Node: Host Config,  Next: Fragments,  Prev: Target Macros,  Up: Top
37650
3765118 Host Configuration
37652*********************
37653
37654Most details about the machine and system on which the compiler is
37655actually running are detected by the `configure' script.  Some things
37656are impossible for `configure' to detect; these are described in two
37657ways, either by macros defined in a file named `xm-MACHINE.h' or by
37658hook functions in the file specified by the OUT_HOST_HOOK_OBJ variable
37659in `config.gcc'.  (The intention is that very few hosts will need a
37660header file but nearly every fully supported host will need to override
37661some hooks.)
37662
37663 If you need to define only a few macros, and they have simple
37664definitions, consider using the `xm_defines' variable in your
37665`config.gcc' entry instead of creating a host configuration header.
37666*Note System Config::.
37667
37668* Menu:
37669
37670* Host Common::         Things every host probably needs implemented.
37671* Filesystem::          Your host can't have the letter `a' in filenames?
37672* Host Misc::           Rare configuration options for hosts.
37673
37674
37675File: gccint.info,  Node: Host Common,  Next: Filesystem,  Up: Host Config
37676
3767718.1 Host Common
37678================
37679
37680Some things are just not portable, even between similar operating
37681systems, and are too difficult for autoconf to detect.  They get
37682implemented using hook functions in the file specified by the
37683HOST_HOOK_OBJ variable in `config.gcc'.
37684
37685 -- Host Hook: void HOST_HOOKS_EXTRA_SIGNALS (void)
37686     This host hook is used to set up handling for extra signals.  The
37687     most common thing to do in this hook is to detect stack overflow.
37688
37689 -- Host Hook: void * HOST_HOOKS_GT_PCH_GET_ADDRESS (size_t SIZE, int
37690          FD)
37691     This host hook returns the address of some space that is likely to
37692     be free in some subsequent invocation of the compiler.  We intend
37693     to load the PCH data at this address such that the data need not
37694     be relocated.  The area should be able to hold SIZE bytes.  If the
37695     host uses `mmap', FD is an open file descriptor that can be used
37696     for probing.
37697
37698 -- Host Hook: int HOST_HOOKS_GT_PCH_USE_ADDRESS (void * ADDRESS,
37699          size_t SIZE, int FD, size_t OFFSET)
37700     This host hook is called when a PCH file is about to be loaded.
37701     We want to load SIZE bytes from FD at OFFSET into memory at
37702     ADDRESS.  The given address will be the result of a previous
37703     invocation of `HOST_HOOKS_GT_PCH_GET_ADDRESS'.  Return -1 if we
37704     couldn't allocate SIZE bytes at ADDRESS.  Return 0 if the memory
37705     is allocated but the data is not loaded.  Return 1 if the hook has
37706     performed everything.
37707
37708     If the implementation uses reserved address space, free any
37709     reserved space beyond SIZE, regardless of the return value.  If no
37710     PCH will be loaded, this hook may be called with SIZE zero, in
37711     which case all reserved address space should be freed.
37712
37713     Do not try to handle values of ADDRESS that could not have been
37714     returned by this executable; just return -1.  Such values usually
37715     indicate an out-of-date PCH file (built by some other GCC
37716     executable), and such a PCH file won't work.
37717
37718 -- Host Hook: size_t HOST_HOOKS_GT_PCH_ALLOC_GRANULARITY (void);
37719     This host hook returns the alignment required for allocating
37720     virtual memory.  Usually this is the same as getpagesize, but on
37721     some hosts the alignment for reserving memory differs from the
37722     pagesize for committing memory.
37723
37724
37725File: gccint.info,  Node: Filesystem,  Next: Host Misc,  Prev: Host Common,  Up: Host Config
37726
3772718.2 Host Filesystem
37728====================
37729
37730GCC needs to know a number of things about the semantics of the host
37731machine's filesystem.  Filesystems with Unix and MS-DOS semantics are
37732automatically detected.  For other systems, you can define the
37733following macros in `xm-MACHINE.h'.
37734
37735`HAVE_DOS_BASED_FILE_SYSTEM'
37736     This macro is automatically defined by `system.h' if the host file
37737     system obeys the semantics defined by MS-DOS instead of Unix.  DOS
37738     file systems are case insensitive, file specifications may begin
37739     with a drive letter, and both forward slash and backslash (`/' and
37740     `\') are directory separators.
37741
37742`DIR_SEPARATOR'
37743`DIR_SEPARATOR_2'
37744     If defined, these macros expand to character constants specifying
37745     separators for directory names within a file specification.
37746     `system.h' will automatically give them appropriate values on Unix
37747     and MS-DOS file systems.  If your file system is neither of these,
37748     define one or both appropriately in `xm-MACHINE.h'.
37749
37750     However, operating systems like VMS, where constructing a pathname
37751     is more complicated than just stringing together directory names
37752     separated by a special character, should not define either of these
37753     macros.
37754
37755`PATH_SEPARATOR'
37756     If defined, this macro should expand to a character constant
37757     specifying the separator for elements of search paths.  The default
37758     value is a colon (`:').  DOS-based systems usually, but not
37759     always, use semicolon (`;').
37760
37761`VMS'
37762     Define this macro if the host system is VMS.
37763
37764`HOST_OBJECT_SUFFIX'
37765     Define this macro to be a C string representing the suffix for
37766     object files on your host machine.  If you do not define this
37767     macro, GCC will use `.o' as the suffix for object files.
37768
37769`HOST_EXECUTABLE_SUFFIX'
37770     Define this macro to be a C string representing the suffix for
37771     executable files on your host machine.  If you do not define this
37772     macro, GCC will use the null string as the suffix for executable
37773     files.
37774
37775`HOST_BIT_BUCKET'
37776     A pathname defined by the host operating system, which can be
37777     opened as a file and written to, but all the information written
37778     is discarded.  This is commonly known as a "bit bucket" or "null
37779     device".  If you do not define this macro, GCC will use
37780     `/dev/null' as the bit bucket.  If the host does not support a bit
37781     bucket, define this macro to an invalid filename.
37782
37783`UPDATE_PATH_HOST_CANONICALIZE (PATH)'
37784     If defined, a C statement (sans semicolon) that performs
37785     host-dependent canonicalization when a path used in a compilation
37786     driver or preprocessor is canonicalized.  PATH is a malloc-ed path
37787     to be canonicalized.  If the C statement does canonicalize PATH
37788     into a different buffer, the old path should be freed and the new
37789     buffer should have been allocated with malloc.
37790
37791`DUMPFILE_FORMAT'
37792     Define this macro to be a C string representing the format to use
37793     for constructing the index part of debugging dump file names.  The
37794     resultant string must fit in fifteen bytes.  The full filename
37795     will be the concatenation of: the prefix of the assembler file
37796     name, the string resulting from applying this format to an index
37797     number, and a string unique to each dump file kind, e.g. `rtl'.
37798
37799     If you do not define this macro, GCC will use `.%02d.'.  You should
37800     define this macro if using the default will create an invalid file
37801     name.
37802
37803`DELETE_IF_ORDINARY'
37804     Define this macro to be a C statement (sans semicolon) that
37805     performs host-dependent removal of ordinary temp files in the
37806     compilation driver.
37807
37808     If you do not define this macro, GCC will use the default version.
37809     You should define this macro if the default version does not
37810     reliably remove the temp file as, for example, on VMS which allows
37811     multiple versions of a file.
37812
37813`HOST_LACKS_INODE_NUMBERS'
37814     Define this macro if the host filesystem does not report
37815     meaningful inode numbers in struct stat.
37816
37817
37818File: gccint.info,  Node: Host Misc,  Prev: Filesystem,  Up: Host Config
37819
3782018.3 Host Misc
37821==============
37822
37823`FATAL_EXIT_CODE'
37824     A C expression for the status code to be returned when the compiler
37825     exits after serious errors.  The default is the system-provided
37826     macro `EXIT_FAILURE', or `1' if the system doesn't define that
37827     macro.  Define this macro only if these defaults are incorrect.
37828
37829`SUCCESS_EXIT_CODE'
37830     A C expression for the status code to be returned when the compiler
37831     exits without serious errors.  (Warnings are not serious errors.)
37832     The default is the system-provided macro `EXIT_SUCCESS', or `0' if
37833     the system doesn't define that macro.  Define this macro only if
37834     these defaults are incorrect.
37835
37836`USE_C_ALLOCA'
37837     Define this macro if GCC should use the C implementation of
37838     `alloca' provided by `libiberty.a'.  This only affects how some
37839     parts of the compiler itself allocate memory.  It does not change
37840     code generation.
37841
37842     When GCC is built with a compiler other than itself, the C `alloca'
37843     is always used.  This is because most other implementations have
37844     serious bugs.  You should define this macro only on a system where
37845     no stack-based `alloca' can possibly work.  For instance, if a
37846     system has a small limit on the size of the stack, GCC's builtin
37847     `alloca' will not work reliably.
37848
37849`COLLECT2_HOST_INITIALIZATION'
37850     If defined, a C statement (sans semicolon) that performs
37851     host-dependent initialization when `collect2' is being initialized.
37852
37853`GCC_DRIVER_HOST_INITIALIZATION'
37854     If defined, a C statement (sans semicolon) that performs
37855     host-dependent initialization when a compilation driver is being
37856     initialized.
37857
37858`HOST_LONG_LONG_FORMAT'
37859     If defined, the string used to indicate an argument of type `long
37860     long' to functions like `printf'.  The default value is `"ll"'.
37861
37862`HOST_LONG_FORMAT'
37863     If defined, the string used to indicate an argument of type `long'
37864     to functions like `printf'.  The default value is `"l"'.
37865
37866`HOST_PTR_PRINTF'
37867     If defined, the string used to indicate an argument of type `void
37868     *' to functions like `printf'.  The default value is `"%p"'.
37869
37870 In addition, if `configure' generates an incorrect definition of any
37871of the macros in `auto-host.h', you can override that definition in a
37872host configuration header.  If you need to do this, first see if it is
37873possible to fix `configure'.
37874
37875
37876File: gccint.info,  Node: Fragments,  Next: Collect2,  Prev: Host Config,  Up: Top
37877
3787819 Makefile Fragments
37879*********************
37880
37881When you configure GCC using the `configure' script, it will construct
37882the file `Makefile' from the template file `Makefile.in'.  When it does
37883this, it can incorporate makefile fragments from the `config'
37884directory.  These are used to set Makefile parameters that are not
37885amenable to being calculated by autoconf.  The list of fragments to
37886incorporate is set by `config.gcc' (and occasionally `config.build' and
37887`config.host'); *Note System Config::.
37888
37889 Fragments are named either `t-TARGET' or `x-HOST', depending on
37890whether they are relevant to configuring GCC to produce code for a
37891particular target, or to configuring GCC to run on a particular host.
37892Here TARGET and HOST are mnemonics which usually have some relationship
37893to the canonical system name, but no formal connection.
37894
37895 If these files do not exist, it means nothing needs to be added for a
37896given target or host.  Most targets need a few `t-TARGET' fragments,
37897but needing `x-HOST' fragments is rare.
37898
37899* Menu:
37900
37901* Target Fragment:: Writing `t-TARGET' files.
37902* Host Fragment::   Writing `x-HOST' files.
37903
37904
37905File: gccint.info,  Node: Target Fragment,  Next: Host Fragment,  Up: Fragments
37906
3790719.1 Target Makefile Fragments
37908==============================
37909
37910Target makefile fragments can set these Makefile variables.
37911
37912`LIBGCC2_CFLAGS'
37913     Compiler flags to use when compiling `libgcc2.c'.
37914
37915`LIB2FUNCS_EXTRA'
37916     A list of source file names to be compiled or assembled and
37917     inserted into `libgcc.a'.
37918
37919`CRTSTUFF_T_CFLAGS'
37920     Special flags used when compiling `crtstuff.c'.  *Note
37921     Initialization::.
37922
37923`CRTSTUFF_T_CFLAGS_S'
37924     Special flags used when compiling `crtstuff.c' for shared linking.
37925     Used if you use `crtbeginS.o' and `crtendS.o' in `EXTRA-PARTS'.
37926     *Note Initialization::.
37927
37928`MULTILIB_OPTIONS'
37929     For some targets, invoking GCC in different ways produces objects
37930     that can not be linked together.  For example, for some targets GCC
37931     produces both big and little endian code.  For these targets, you
37932     must arrange for multiple versions of `libgcc.a' to be compiled,
37933     one for each set of incompatible options.  When GCC invokes the
37934     linker, it arranges to link in the right version of `libgcc.a',
37935     based on the command line options used.
37936
37937     The `MULTILIB_OPTIONS' macro lists the set of options for which
37938     special versions of `libgcc.a' must be built.  Write options that
37939     are mutually incompatible side by side, separated by a slash.
37940     Write options that may be used together separated by a space.  The
37941     build procedure will build all combinations of compatible options.
37942
37943     For example, if you set `MULTILIB_OPTIONS' to `m68000/m68020
37944     msoft-float', `Makefile' will build special versions of `libgcc.a'
37945     using the following sets of options:  `-m68000', `-m68020',
37946     `-msoft-float', `-m68000 -msoft-float', and `-m68020 -msoft-float'.
37947
37948`MULTILIB_DIRNAMES'
37949     If `MULTILIB_OPTIONS' is used, this variable specifies the
37950     directory names that should be used to hold the various libraries.
37951     Write one element in `MULTILIB_DIRNAMES' for each element in
37952     `MULTILIB_OPTIONS'.  If `MULTILIB_DIRNAMES' is not used, the
37953     default value will be `MULTILIB_OPTIONS', with all slashes treated
37954     as spaces.
37955
37956     `MULTILIB_DIRNAMES' describes the multilib directories using GCC
37957     conventions and is applied to directories that are part of the GCC
37958     installation.  When multilib-enabled, the compiler will add a
37959     subdirectory of the form PREFIX/MULTILIB before each directory in
37960     the search path for libraries and crt files.
37961
37962     For example, if `MULTILIB_OPTIONS' is set to `m68000/m68020
37963     msoft-float', then the default value of `MULTILIB_DIRNAMES' is
37964     `m68000 m68020 msoft-float'.  You may specify a different value if
37965     you desire a different set of directory names.
37966
37967`MULTILIB_MATCHES'
37968     Sometimes the same option may be written in two different ways.
37969     If an option is listed in `MULTILIB_OPTIONS', GCC needs to know
37970     about any synonyms.  In that case, set `MULTILIB_MATCHES' to a
37971     list of items of the form `option=option' to describe all relevant
37972     synonyms.  For example, `m68000=mc68000 m68020=mc68020'.
37973
37974`MULTILIB_EXCEPTIONS'
37975     Sometimes when there are multiple sets of `MULTILIB_OPTIONS' being
37976     specified, there are combinations that should not be built.  In
37977     that case, set `MULTILIB_EXCEPTIONS' to be all of the switch
37978     exceptions in shell case syntax that should not be built.
37979
37980     For example the ARM processor cannot execute both hardware floating
37981     point instructions and the reduced size THUMB instructions at the
37982     same time, so there is no need to build libraries with both of
37983     these options enabled.  Therefore `MULTILIB_EXCEPTIONS' is set to:
37984          *mthumb/*mhard-float*
37985
37986`MULTILIB_REQUIRED'
37987     Sometimes when there are only a few combinations are required, it
37988     would be a big effort to come up with a `MULTILIB_EXCEPTIONS' list
37989     to cover all undesired ones.  In such a case, just listing all the
37990     required combinations in `MULTILIB_REQUIRED' would be more
37991     straightforward.
37992
37993     The way to specify the entries in `MULTILIB_REQUIRED' is same with
37994     the way used for `MULTILIB_EXCEPTIONS', only this time what are
37995     required will be specified.  Suppose there are multiple sets of
37996     `MULTILIB_OPTIONS' and only two combinations are required, one for
37997     ARMv7-M and one for ARMv7-R with hard floating-point ABI and FPU,
37998     the `MULTILIB_REQUIRED' can be set to:
37999          `MULTILIB_REQUIRED' =  mthumb/march=armv7-m
38000          `MULTILIB_REQUIRED' += march=armv7-r/mfloat-abi=hard/mfpu=vfpv3-d16
38001
38002     The `MULTILIB_REQUIRED' can be used together with
38003     `MULTILIB_EXCEPTIONS'.  The option combinations generated from
38004     `MULTILIB_OPTIONS' will be filtered by `MULTILIB_EXCEPTIONS' and
38005     then by `MULTILIB_REQUIRED'.
38006
38007`MULTILIB_REUSE'
38008     Sometimes it is desirable to reuse one existing multilib for
38009     different sets of options.  Such kind of reuse can minimize the
38010     number of multilib variants.  And for some targets it is better to
38011     reuse an existing multilib than to fall back to default multilib
38012     when there is no corresponding multilib.  This can be done by
38013     adding reuse rules to `MULTILIB_REUSE'.
38014
38015     A reuse rule is comprised of two parts connected by equality sign.
38016     The left part is option set used to build multilib and the right
38017     part is option set that will reuse this multilib.  The order of
38018     options in the left part matters and should be same with those
38019     specified in `MULTILIB_REQUIRED' or aligned with order in
38020     `MULTILIB_OPTIONS'.  There is no such limitation for options in
38021     right part as we don't build multilib from them.  But the equality
38022     sign in both parts should be replaced with period.
38023
38024     The `MULTILIB_REUSE' is different from `MULTILIB_MATCHES' in that
38025     it sets up relations between two option sets rather than two
38026     options.  Here is an example to demo how we reuse libraries built
38027     in Thumb mode for applications built in ARM mode:
38028          `MULTILIB_REUSE' = mthumb/march.armv7-r=marm/march.armv7-r
38029
38030     Before the advent of `MULTILIB_REUSE', GCC select multilib by
38031     comparing command line options with options used to build
38032     multilib.  The `MULTILIB_REUSE' is complementary to that way.
38033     Only when the original comparison matches nothing it will work to
38034     see if it is OK to reuse some existing multilib.
38035
38036`MULTILIB_EXTRA_OPTS'
38037     Sometimes it is desirable that when building multiple versions of
38038     `libgcc.a' certain options should always be passed on to the
38039     compiler.  In that case, set `MULTILIB_EXTRA_OPTS' to be the list
38040     of options to be used for all builds.  If you set this, you should
38041     probably set `CRTSTUFF_T_CFLAGS' to a dash followed by it.
38042
38043`MULTILIB_OSDIRNAMES'
38044     If `MULTILIB_OPTIONS' is used, this variable specifies a list of
38045     subdirectory names, that are used to modify the search path
38046     depending on the chosen multilib.  Unlike `MULTILIB_DIRNAMES',
38047     `MULTILIB_OSDIRNAMES' describes the multilib directories using
38048     operating systems conventions, and is applied to the directories
38049     such as `lib' or those in the `LIBRARY_PATH' environment variable.
38050     The format is either the same as of `MULTILIB_DIRNAMES', or a set
38051     of mappings.  When it is the same as `MULTILIB_DIRNAMES', it
38052     describes the multilib directories using operating system
38053     conventions, rather than GCC conventions.  When it is a set of
38054     mappings of the form GCCDIR=OSDIR, the left side gives the GCC
38055     convention and the right gives the equivalent OS defined location.
38056     If the OSDIR part begins with a `!', GCC will not search in the
38057     non-multilib directory and use exclusively the multilib directory.
38058     Otherwise, the compiler will examine the search path for libraries
38059     and crt files twice; the first time it will add MULTILIB to each
38060     directory in the search path, the second it will not.
38061
38062     For configurations that support both multilib and multiarch,
38063     `MULTILIB_OSDIRNAMES' also encodes the multiarch name, thus
38064     subsuming `MULTIARCH_DIRNAME'.  The multiarch name is appended to
38065     each directory name, separated by a colon (e.g.
38066     `../lib32:i386-linux-gnu').
38067
38068     Each multiarch subdirectory will be searched before the
38069     corresponding OS multilib directory, for example
38070     `/lib/i386-linux-gnu' before `/lib/../lib32'.  The multiarch name
38071     will also be used to modify the system header search path, as
38072     explained for `MULTIARCH_DIRNAME'.
38073
38074`MULTIARCH_DIRNAME'
38075     This variable specifies the multiarch name for configurations that
38076     are multiarch-enabled but not multilibbed configurations.
38077
38078     The multiarch name is used to augment the search path for
38079     libraries, crt files and system header files with additional
38080     locations.  The compiler will add a multiarch subdirectory of the
38081     form PREFIX/MULTIARCH before each directory in the library and crt
38082     search path.  It will also add two directories
38083     `LOCAL_INCLUDE_DIR'/MULTIARCH and
38084     `NATIVE_SYSTEM_HEADER_DIR'/MULTIARCH) to the system header search
38085     path, respectively before `LOCAL_INCLUDE_DIR' and
38086     `NATIVE_SYSTEM_HEADER_DIR'.
38087
38088     `MULTIARCH_DIRNAME' is not used for configurations that support
38089     both multilib and multiarch.  In that case, multiarch names are
38090     encoded in `MULTILIB_OSDIRNAMES' instead.
38091
38092     More documentation about multiarch can be found at
38093     `http://wiki.debian.org/Multiarch'.
38094
38095`SPECS'
38096     Unfortunately, setting `MULTILIB_EXTRA_OPTS' is not enough, since
38097     it does not affect the build of target libraries, at least not the
38098     build of the default multilib.  One possible work-around is to use
38099     `DRIVER_SELF_SPECS' to bring options from the `specs' file as if
38100     they had been passed in the compiler driver command line.
38101     However, you don't want to be adding these options after the
38102     toolchain is installed, so you can instead tweak the `specs' file
38103     that will be used during the toolchain build, while you still
38104     install the original, built-in `specs'.  The trick is to set
38105     `SPECS' to some other filename (say `specs.install'), that will
38106     then be created out of the built-in specs, and introduce a
38107     `Makefile' rule to generate the `specs' file that's going to be
38108     used at build time out of your `specs.install'.
38109
38110`T_CFLAGS'
38111     These are extra flags to pass to the C compiler.  They are used
38112     both when building GCC, and when compiling things with the
38113     just-built GCC.  This variable is deprecated and should not be
38114     used.
38115
38116
38117File: gccint.info,  Node: Host Fragment,  Prev: Target Fragment,  Up: Fragments
38118
3811919.2 Host Makefile Fragments
38120============================
38121
38122The use of `x-HOST' fragments is discouraged.  You should only use it
38123for makefile dependencies.
38124
38125
38126File: gccint.info,  Node: Collect2,  Next: Header Dirs,  Prev: Fragments,  Up: Top
38127
3812820 `collect2'
38129*************
38130
38131GCC uses a utility called `collect2' on nearly all systems to arrange
38132to call various initialization functions at start time.
38133
38134 The program `collect2' works by linking the program once and looking
38135through the linker output file for symbols with particular names
38136indicating they are constructor functions.  If it finds any, it creates
38137a new temporary `.c' file containing a table of them, compiles it, and
38138links the program a second time including that file.
38139
38140 The actual calls to the constructors are carried out by a subroutine
38141called `__main', which is called (automatically) at the beginning of
38142the body of `main' (provided `main' was compiled with GNU CC).  Calling
38143`__main' is necessary, even when compiling C code, to allow linking C
38144and C++ object code together.  (If you use `-nostdlib', you get an
38145unresolved reference to `__main', since it's defined in the standard
38146GCC library.  Include `-lgcc' at the end of your compiler command line
38147to resolve this reference.)
38148
38149 The program `collect2' is installed as `ld' in the directory where the
38150passes of the compiler are installed.  When `collect2' needs to find
38151the _real_ `ld', it tries the following file names:
38152
38153   * a hard coded linker file name, if GCC was configured with the
38154     `--with-ld' option.
38155
38156   * `real-ld' in the directories listed in the compiler's search
38157     directories.
38158
38159   * `real-ld' in the directories listed in the environment variable
38160     `PATH'.
38161
38162   * The file specified in the `REAL_LD_FILE_NAME' configuration macro,
38163     if specified.
38164
38165   * `ld' in the compiler's search directories, except that `collect2'
38166     will not execute itself recursively.
38167
38168   * `ld' in `PATH'.
38169
38170 "The compiler's search directories" means all the directories where
38171`gcc' searches for passes of the compiler.  This includes directories
38172that you specify with `-B'.
38173
38174 Cross-compilers search a little differently:
38175
38176   * `real-ld' in the compiler's search directories.
38177
38178   * `TARGET-real-ld' in `PATH'.
38179
38180   * The file specified in the `REAL_LD_FILE_NAME' configuration macro,
38181     if specified.
38182
38183   * `ld' in the compiler's search directories.
38184
38185   * `TARGET-ld' in `PATH'.
38186
38187 `collect2' explicitly avoids running `ld' using the file name under
38188which `collect2' itself was invoked.  In fact, it remembers up a list
38189of such names--in case one copy of `collect2' finds another copy (or
38190version) of `collect2' installed as `ld' in a second place in the
38191search path.
38192
38193 `collect2' searches for the utilities `nm' and `strip' using the same
38194algorithm as above for `ld'.
38195
38196
38197File: gccint.info,  Node: Header Dirs,  Next: Type Information,  Prev: Collect2,  Up: Top
38198
3819921 Standard Header File Directories
38200***********************************
38201
38202`GCC_INCLUDE_DIR' means the same thing for native and cross.  It is
38203where GCC stores its private include files, and also where GCC stores
38204the fixed include files.  A cross compiled GCC runs `fixincludes' on
38205the header files in `$(tooldir)/include'.  (If the cross compilation
38206header files need to be fixed, they must be installed before GCC is
38207built.  If the cross compilation header files are already suitable for
38208GCC, nothing special need be done).
38209
38210 `GPLUSPLUS_INCLUDE_DIR' means the same thing for native and cross.  It
38211is where `g++' looks first for header files.  The C++ library installs
38212only target independent header files in that directory.
38213
38214 `LOCAL_INCLUDE_DIR' is used only by native compilers.  GCC doesn't
38215install anything there.  It is normally `/usr/local/include'.  This is
38216where local additions to a packaged system should place header files.
38217
38218 `CROSS_INCLUDE_DIR' is used only by cross compilers.  GCC doesn't
38219install anything there.
38220
38221 `TOOL_INCLUDE_DIR' is used for both native and cross compilers.  It is
38222the place for other packages to install header files that GCC will use.
38223For a cross-compiler, this is the equivalent of `/usr/include'.  When
38224you build a cross-compiler, `fixincludes' processes any header files in
38225this directory.
38226
38227
38228File: gccint.info,  Node: Type Information,  Next: Plugins,  Prev: Header Dirs,  Up: Top
38229
3823022 Memory Management and Type Information
38231*****************************************
38232
38233GCC uses some fairly sophisticated memory management techniques, which
38234involve determining information about GCC's data structures from GCC's
38235source code and using this information to perform garbage collection and
38236implement precompiled headers.
38237
38238 A full C++ parser would be too complicated for this task, so a limited
38239subset of C++ is interpreted and special markers are used to determine
38240what parts of the source to look at.  All `struct', `union' and
38241`template' structure declarations that define data structures that are
38242allocated under control of the garbage collector must be marked.  All
38243global variables that hold pointers to garbage-collected memory must
38244also be marked.  Finally, all global variables that need to be saved
38245and restored by a precompiled header must be marked.  (The precompiled
38246header mechanism can only save static variables if they're scalar.
38247Complex data structures must be allocated in garbage-collected memory
38248to be saved in a precompiled header.)
38249
38250 The full format of a marker is
38251     GTY (([OPTION] [(PARAM)], [OPTION] [(PARAM)] ...))
38252 but in most cases no options are needed.  The outer double parentheses
38253are still necessary, though: `GTY(())'.  Markers can appear:
38254
38255   * In a structure definition, before the open brace;
38256
38257   * In a global variable declaration, after the keyword `static' or
38258     `extern'; and
38259
38260   * In a structure field definition, before the name of the field.
38261
38262 Here are some examples of marking simple data structures and globals.
38263
38264     struct GTY(()) TAG
38265     {
38266       FIELDS...
38267     };
38268
38269     typedef struct GTY(()) TAG
38270     {
38271       FIELDS...
38272     } *TYPENAME;
38273
38274     static GTY(()) struct TAG *LIST;   /* points to GC memory */
38275     static GTY(()) int COUNTER;        /* save counter in a PCH */
38276
38277 The parser understands simple typedefs such as `typedef struct TAG
38278*NAME;' and `typedef int NAME;'.  These don't need to be marked.
38279
38280 Since `gengtype''s understanding of C++ is limited, there are several
38281constructs and declarations that are not supported inside
38282classes/structures marked for automatic GC code generation.  The
38283following C++ constructs produce a `gengtype' error on
38284structures/classes marked for automatic GC code generation:
38285
38286   * Type definitions inside classes/structures are not supported.
38287
38288   * Enumerations inside classes/structures are not supported.
38289
38290 If you have a class or structure using any of the above constructs,
38291you need to mark that class as `GTY ((user))' and provide your own
38292marking routines (see section *note User GC:: for details).
38293
38294 It is always valid to include function definitions inside classes.
38295Those are always ignored by `gengtype', as it only cares about data
38296members.
38297
38298* Menu:
38299
38300* GTY Options::         What goes inside a `GTY(())'.
38301* User GC::		Adding user-provided GC marking routines.
38302* GGC Roots::           Making global variables GGC roots.
38303* Files::               How the generated files work.
38304* Invoking the garbage collector::   How to invoke the garbage collector.
38305* Troubleshooting::     When something does not work as expected.
38306
38307
38308File: gccint.info,  Node: GTY Options,  Next: User GC,  Up: Type Information
38309
3831022.1 The Inside of a `GTY(())'
38311==============================
38312
38313Sometimes the C code is not enough to fully describe the type
38314structure.  Extra information can be provided with `GTY' options and
38315additional markers.  Some options take a parameter, which may be either
38316a string or a type name, depending on the parameter.  If an option
38317takes no parameter, it is acceptable either to omit the parameter
38318entirely, or to provide an empty string as a parameter.  For example,
38319`GTY ((skip))' and `GTY ((skip ("")))' are equivalent.
38320
38321 When the parameter is a string, often it is a fragment of C code.  Four
38322special escapes may be used in these strings, to refer to pieces of the
38323data structure being marked:
38324
38325`%h'
38326     The current structure.
38327
38328`%1'
38329     The structure that immediately contains the current structure.
38330
38331`%0'
38332     The outermost structure that contains the current structure.
38333
38334`%a'
38335     A partial expression of the form `[i1][i2]...' that indexes the
38336     array item currently being marked.
38337
38338 For instance, suppose that you have a structure of the form
38339     struct A {
38340       ...
38341     };
38342     struct B {
38343       struct A foo[12];
38344     };
38345 and `b' is a variable of type `struct B'.  When marking `b.foo[11]',
38346`%h' would expand to `b.foo[11]', `%0' and `%1' would both expand to
38347`b', and `%a' would expand to `[11]'.
38348
38349 As in ordinary C, adjacent strings will be concatenated; this is
38350helpful when you have a complicated expression.
38351     GTY ((chain_next ("TREE_CODE (&%h.generic) == INTEGER_TYPE"
38352                       " ? TYPE_NEXT_VARIANT (&%h.generic)"
38353                       " : TREE_CHAIN (&%h.generic)")))
38354
38355 The available options are:
38356
38357`length ("EXPRESSION")'
38358     There are two places the type machinery will need to be explicitly
38359     told the length of an array of non-atomic objects.  The first case
38360     is when a structure ends in a variable-length array, like this:
38361          struct GTY(()) rtvec_def {
38362            int num_elem;         /* number of elements */
38363            rtx GTY ((length ("%h.num_elem"))) elem[1];
38364          };
38365
38366     In this case, the `length' option is used to override the specified
38367     array length (which should usually be `1').  The parameter of the
38368     option is a fragment of C code that calculates the length.
38369
38370     The second case is when a structure or a global variable contains a
38371     pointer to an array, like this:
38372          struct gimple_omp_for_iter * GTY((length ("%h.collapse"))) iter;
38373     In this case, `iter' has been allocated by writing something like
38374            x->iter = ggc_alloc_cleared_vec_gimple_omp_for_iter (collapse);
38375     and the `collapse' provides the length of the field.
38376
38377     This second use of `length' also works on global variables, like: static GTY((length("reg_known_value_size"))) rtx *reg_known_value;
38378
38379     Note that the `length' option is only meant for use with arrays of
38380     non-atomic objects, that is, objects that contain pointers
38381     pointing to other GTY-managed objects.  For other GC-allocated
38382     arrays and strings you should use `atomic'.
38383
38384`skip'
38385     If `skip' is applied to a field, the type machinery will ignore it.
38386     This is somewhat dangerous; the only safe use is in a union when
38387     one field really isn't ever used.
38388
38389`desc ("EXPRESSION")'
38390`tag ("CONSTANT")'
38391`default'
38392     The type machinery needs to be told which field of a `union' is
38393     currently active.  This is done by giving each field a constant
38394     `tag' value, and then specifying a discriminator using `desc'.
38395     The value of the expression given by `desc' is compared against
38396     each `tag' value, each of which should be different.  If no `tag'
38397     is matched, the field marked with `default' is used if there is
38398     one, otherwise no field in the union will be marked.
38399
38400     In the `desc' option, the "current structure" is the union that it
38401     discriminates.  Use `%1' to mean the structure containing it.
38402     There are no escapes available to the `tag' option, since it is a
38403     constant.
38404
38405     For example,
38406          struct GTY(()) tree_binding
38407          {
38408            struct tree_common common;
38409            union tree_binding_u {
38410              tree GTY ((tag ("0"))) scope;
38411              struct cp_binding_level * GTY ((tag ("1"))) level;
38412            } GTY ((desc ("BINDING_HAS_LEVEL_P ((tree)&%0)"))) xscope;
38413            tree value;
38414          };
38415
38416     In this example, the value of BINDING_HAS_LEVEL_P when applied to a
38417     `struct tree_binding *' is presumed to be 0 or 1.  If 1, the type
38418     mechanism will treat the field `level' as being present and if 0,
38419     will treat the field `scope' as being present.
38420
38421`param_is (TYPE)'
38422`use_param'
38423     Sometimes it's convenient to define some data structure to work on
38424     generic pointers (that is, `PTR') and then use it with a specific
38425     type.  `param_is' specifies the real type pointed to, and
38426     `use_param' says where in the generic data structure that type
38427     should be put.
38428
38429     For instance, to have a `htab_t' that points to trees, one would
38430     write the definition of `htab_t' like this:
38431          typedef struct GTY(()) {
38432            ...
38433            void ** GTY ((use_param, ...)) entries;
38434            ...
38435          } htab_t;
38436     and then declare variables like this:
38437            static htab_t GTY ((param_is (union tree_node))) ict;
38438
38439`paramN_is (TYPE)'
38440`use_paramN'
38441     In more complicated cases, the data structure might need to work on
38442     several different types, which might not necessarily all be
38443     pointers.  For this, `param1_is' through `param9_is' may be used to
38444     specify the real type of a field identified by `use_param1' through
38445     `use_param9'.
38446
38447`use_params'
38448     When a structure contains another structure that is parameterized,
38449     there's no need to do anything special, the inner structure
38450     inherits the parameters of the outer one.  When a structure
38451     contains a pointer to a parameterized structure, the type
38452     machinery won't automatically detect this (it could, it just
38453     doesn't yet), so it's necessary to tell it that the pointed-to
38454     structure should use the same parameters as the outer structure.
38455     This is done by marking the pointer with the `use_params' option.
38456
38457`deletable'
38458     `deletable', when applied to a global variable, indicates that when
38459     garbage collection runs, there's no need to mark anything pointed
38460     to by this variable, it can just be set to `NULL' instead.  This
38461     is used to keep a list of free structures around for re-use.
38462
38463`if_marked ("EXPRESSION")'
38464     Suppose you want some kinds of object to be unique, and so you put
38465     them in a hash table.  If garbage collection marks the hash table,
38466     these objects will never be freed, even if the last other
38467     reference to them goes away.  GGC has special handling to deal
38468     with this: if you use the `if_marked' option on a global hash
38469     table, GGC will call the routine whose name is the parameter to
38470     the option on each hash table entry.  If the routine returns
38471     nonzero, the hash table entry will be marked as usual.  If the
38472     routine returns zero, the hash table entry will be deleted.
38473
38474     The routine `ggc_marked_p' can be used to determine if an element
38475     has been marked already; in fact, the usual case is to use
38476     `if_marked ("ggc_marked_p")'.
38477
38478`mark_hook ("HOOK-ROUTINE-NAME")'
38479     If provided for a structure or union type, the given
38480     HOOK-ROUTINE-NAME (between double-quotes) is the name of a routine
38481     called when the garbage collector has just marked the data as
38482     reachable. This routine should not change the data, or call any ggc
38483     routine. Its only argument is a pointer to the just marked (const)
38484     structure or union.
38485
38486`maybe_undef'
38487     When applied to a field, `maybe_undef' indicates that it's OK if
38488     the structure that this fields points to is never defined, so long
38489     as this field is always `NULL'.  This is used to avoid requiring
38490     backends to define certain optional structures.  It doesn't work
38491     with language frontends.
38492
38493`nested_ptr (TYPE, "TO EXPRESSION", "FROM EXPRESSION")'
38494     The type machinery expects all pointers to point to the start of an
38495     object.  Sometimes for abstraction purposes it's convenient to have
38496     a pointer which points inside an object.  So long as it's possible
38497     to convert the original object to and from the pointer, such
38498     pointers can still be used.  TYPE is the type of the original
38499     object, the TO EXPRESSION returns the pointer given the original
38500     object, and the FROM EXPRESSION returns the original object given
38501     the pointer.  The pointer will be available using the `%h' escape.
38502
38503`chain_next ("EXPRESSION")'
38504`chain_prev ("EXPRESSION")'
38505`chain_circular ("EXPRESSION")'
38506     It's helpful for the type machinery to know if objects are often
38507     chained together in long lists; this lets it generate code that
38508     uses less stack space by iterating along the list instead of
38509     recursing down it.  `chain_next' is an expression for the next
38510     item in the list, `chain_prev' is an expression for the previous
38511     item.  For singly linked lists, use only `chain_next'; for doubly
38512     linked lists, use both.  The machinery requires that taking the
38513     next item of the previous item gives the original item.
38514     `chain_circular' is similar to `chain_next', but can be used for
38515     circular single linked lists.
38516
38517`reorder ("FUNCTION NAME")'
38518     Some data structures depend on the relative ordering of pointers.
38519     If the precompiled header machinery needs to change that ordering,
38520     it will call the function referenced by the `reorder' option,
38521     before changing the pointers in the object that's pointed to by
38522     the field the option applies to.  The function must take four
38523     arguments, with the signature
38524     `void *, void *, gt_pointer_operator, void *'.  The first
38525     parameter is a pointer to the structure that contains the object
38526     being updated, or the object itself if there is no containing
38527     structure.  The second parameter is a cookie that should be
38528     ignored.  The third parameter is a routine that, given a pointer,
38529     will update it to its correct new value.  The fourth parameter is
38530     a cookie that must be passed to the second parameter.
38531
38532     PCH cannot handle data structures that depend on the absolute
38533     values of pointers.  `reorder' functions can be expensive.  When
38534     possible, it is better to depend on properties of the data, like
38535     an ID number or the hash of a string instead.
38536
38537`variable_size'
38538     The type machinery expects the types to be of constant size.  When
38539     this is not true, for example, with structs that have array fields
38540     or unions, the type machinery cannot tell how many bytes need to
38541     be allocated at each allocation.  The `variable_size' is used to
38542     mark such types.  The type machinery then provides allocators that
38543     take a parameter indicating an exact size of object being
38544     allocated.  Note that the size must be provided in bytes whereas
38545     the `length' option works with array lengths in number of elements.
38546
38547     For example,
38548          struct GTY((variable_size)) sorted_fields_type {
38549            int len;
38550            tree GTY((length ("%h.len"))) elts[1];
38551          };
38552
38553     Then the objects of `struct sorted_fields_type' are allocated in GC
38554     memory as follows:
38555            field_vec = ggc_alloc_sorted_fields_type (size);
38556
38557     If FIELD_VEC->ELTS stores N elements, then SIZE could be
38558     calculated as follows:
38559            size_t size = sizeof (struct sorted_fields_type) + n * sizeof (tree);
38560
38561`atomic'
38562     The `atomic' option can only be used with pointers.  It informs
38563     the GC machinery that the memory that the pointer points to does
38564     not contain any pointers, and hence it should be treated by the GC
38565     and PCH machinery as an "atomic" block of memory that does not
38566     need to be examined when scanning memory for pointers.  In
38567     particular, the machinery will not scan that memory for pointers
38568     to mark them as reachable (when marking pointers for GC) or to
38569     relocate them (when writing a PCH file).
38570
38571     The `atomic' option differs from the `skip' option.  `atomic'
38572     keeps the memory under Garbage Collection, but makes the GC ignore
38573     the contents of the memory.  `skip' is more drastic in that it
38574     causes the pointer and the memory to be completely ignored by the
38575     Garbage Collector.  So, memory marked as `atomic' is automatically
38576     freed when no longer reachable, while memory marked as `skip' is
38577     not.
38578
38579     The `atomic' option must be used with great care, because all
38580     sorts of problem can occur if used incorrectly, that is, if the
38581     memory the pointer points to does actually contain a pointer.
38582
38583     Here is an example of how to use it:
38584          struct GTY(()) my_struct {
38585            int number_of_elements;
38586            unsigned int * GTY ((atomic)) elements;
38587          };
38588     In this case, `elements' is a pointer under GC, and the memory it
38589     points to needs to be allocated using the Garbage Collector, and
38590     will be freed automatically by the Garbage Collector when it is no
38591     longer referenced.  But the memory that the pointer points to is
38592     an array of `unsigned int' elements, and the GC must not try to
38593     scan it to find pointers to mark or relocate, which is why it is
38594     marked with the `atomic' option.
38595
38596     Note that, currently, global variables can not be marked with
38597     `atomic'; only fields of a struct can.  This is a known
38598     limitation.  It would be useful to be able to mark global pointers
38599     with `atomic' to make the PCH machinery aware of them so that they
38600     are saved and restored correctly to PCH files.
38601
38602`special ("NAME")'
38603     The `special' option is used to mark types that have to be dealt
38604     with by special case machinery.  The parameter is the name of the
38605     special case.  See `gengtype.c' for further details.  Avoid adding
38606     new special cases unless there is no other alternative.
38607
38608`user'
38609     The `user' option indicates that the code to mark structure fields
38610     is completely handled by user-provided routines.  See section
38611     *note User GC:: for details on what functions need to be provided.
38612
38613
38614File: gccint.info,  Node: User GC,  Next: GGC Roots,  Prev: GTY Options,  Up: Type Information
38615
3861622.2 Support for user-provided GC marking routines
38617==================================================
38618
38619The garbage collector supports types for which no automatic marking
38620code is generated.  For these types, the user is required to provide
38621three functions: one to act as a marker for garbage collection, and two
38622functions to act as marker and pointer walker for pre-compiled headers.
38623
38624 Given a structure `struct GTY((user)) my_struct', the following
38625functions should be defined to mark `my_struct':
38626
38627     void gt_ggc_mx (my_struct *p)
38628     {
38629       /* This marks field 'fld'.  */
38630       gt_ggc_mx (p->fld);
38631     }
38632
38633     void gt_pch_nx (my_struct *p)
38634     {
38635       /* This marks field 'fld'.  */
38636       gt_pch_nx (tp->fld);
38637     }
38638
38639     void gt_pch_nx (my_struct *p, gt_pointer_operator op, void *cookie)
38640     {
38641       /* For every field 'fld', call the given pointer operator.  */
38642       op (&(tp->fld), cookie);
38643     }
38644
38645 In general, each marker `M' should call `M' for every pointer field in
38646the structure.  Fields that are not allocated in GC or are not pointers
38647must be ignored.
38648
38649 For embedded lists (e.g., structures with a `next' or `prev' pointer),
38650the marker must follow the chain and mark every element in it.
38651
38652 Note that the rules for the pointer walker `gt_pch_nx (my_struct *,
38653gt_pointer_operator, void *)' are slightly different.  In this case,
38654the operation `op' must be applied to the _address_ of every pointer
38655field.
38656
3865722.2.1 User-provided marking routines for template types
38658--------------------------------------------------------
38659
38660When a template type `TP' is marked with `GTY', all instances of that
38661type are considered user-provided types.  This means that the
38662individual instances of `TP' do not need to be marked with `GTY'.  The
38663user needs to provide template functions to mark all the fields of the
38664type.
38665
38666 The following code snippets represent all the functions that need to
38667be provided. Note that type `TP' may reference to more than one type.
38668In these snippets, there is only one type `T', but there could be more.
38669
38670     template<typename T>
38671     void gt_ggc_mx (TP<T> *tp)
38672     {
38673       extern void gt_ggc_mx (T&);
38674
38675       /* This marks field 'fld' of type 'T'.  */
38676       gt_ggc_mx (tp->fld);
38677     }
38678
38679     template<typename T>
38680     void gt_pch_nx (TP<T> *tp)
38681     {
38682       extern void gt_pch_nx (T&);
38683
38684       /* This marks field 'fld' of type 'T'.  */
38685       gt_pch_nx (tp->fld);
38686     }
38687
38688     template<typename T>
38689     void gt_pch_nx (TP<T *> *tp, gt_pointer_operator op, void *cookie)
38690     {
38691       /* For every field 'fld' of 'tp' with type 'T *', call the given
38692          pointer operator.  */
38693       op (&(tp->fld), cookie);
38694     }
38695
38696     template<typename T>
38697     void gt_pch_nx (TP<T> *tp, gt_pointer_operator, void *cookie)
38698     {
38699       extern void gt_pch_nx (T *, gt_pointer_operator, void *);
38700
38701       /* For every field 'fld' of 'tp' with type 'T', call the pointer
38702          walker for all the fields of T.  */
38703       gt_pch_nx (&(tp->fld), op, cookie);
38704     }
38705
38706 Support for user-defined types is currently limited. The following
38707restrictions apply:
38708
38709  1. Type `TP' and all the argument types `T' must be marked with `GTY'.
38710
38711  2. Type `TP' can only have type names in its argument list.
38712
38713  3. The pointer walker functions are different for `TP<T>' and `TP<T
38714     *>'. In the case of `TP<T>', references to `T' must be handled by
38715     calling `gt_pch_nx' (which will, in turn, walk all the pointers
38716     inside fields of `T').  In the case of `TP<T *>', references to `T
38717     *' must be handled by calling the `op' function on the address of
38718     the pointer (see the code snippets above).
38719
38720
38721File: gccint.info,  Node: GGC Roots,  Next: Files,  Prev: User GC,  Up: Type Information
38722
3872322.3 Marking Roots for the Garbage Collector
38724============================================
38725
38726In addition to keeping track of types, the type machinery also locates
38727the global variables ("roots") that the garbage collector starts at.
38728Roots must be declared using one of the following syntaxes:
38729
38730   * `extern GTY(([OPTIONS])) TYPE NAME;'
38731
38732   * `static GTY(([OPTIONS])) TYPE NAME;'
38733 The syntax
38734   * `GTY(([OPTIONS])) TYPE NAME;'
38735 is _not_ accepted.  There should be an `extern' declaration of such a
38736variable in a header somewhere--mark that, not the definition.  Or, if
38737the variable is only used in one file, make it `static'.
38738
38739
38740File: gccint.info,  Node: Files,  Next: Invoking the garbage collector,  Prev: GGC Roots,  Up: Type Information
38741
3874222.4 Source Files Containing Type Information
38743=============================================
38744
38745Whenever you add `GTY' markers to a source file that previously had
38746none, or create a new source file containing `GTY' markers, there are
38747three things you need to do:
38748
38749  1. You need to add the file to the list of source files the type
38750     machinery scans.  There are four cases:
38751
38752       a. For a back-end file, this is usually done automatically; if
38753          not, you should add it to `target_gtfiles' in the appropriate
38754          port's entries in `config.gcc'.
38755
38756       b. For files shared by all front ends, add the filename to the
38757          `GTFILES' variable in `Makefile.in'.
38758
38759       c. For files that are part of one front end, add the filename to
38760          the `gtfiles' variable defined in the appropriate
38761          `config-lang.in'.  Headers should appear before non-headers
38762          in this list.
38763
38764       d. For files that are part of some but not all front ends, add
38765          the filename to the `gtfiles' variable of _all_ the front ends
38766          that use it.
38767
38768  2. If the file was a header file, you'll need to check that it's
38769     included in the right place to be visible to the generated files.
38770     For a back-end header file, this should be done automatically.
38771     For a front-end header file, it needs to be included by the same
38772     file that includes `gtype-LANG.h'.  For other header files, it
38773     needs to be included in `gtype-desc.c', which is a generated file,
38774     so add it to `ifiles' in `open_base_file' in `gengtype.c'.
38775
38776     For source files that aren't header files, the machinery will
38777     generate a header file that should be included in the source file
38778     you just changed.  The file will be called `gt-PATH.h' where PATH
38779     is the pathname relative to the `gcc' directory with slashes
38780     replaced by -, so for example the header file to be included in
38781     `cp/parser.c' is called `gt-cp-parser.c'.  The generated header
38782     file should be included after everything else in the source file.
38783     Don't forget to mention this file as a dependency in the
38784     `Makefile'!
38785
38786
38787 For language frontends, there is another file that needs to be included
38788somewhere.  It will be called `gtype-LANG.h', where LANG is the name of
38789the subdirectory the language is contained in.
38790
38791 Plugins can add additional root tables.  Run the `gengtype' utility in
38792plugin mode as `gengtype -P pluginout.h SOURCE-DIR FILE-LIST PLUGIN*.C'
38793with your plugin files PLUGIN*.C using `GTY' to generate the
38794PLUGINOUT.H file.  The GCC build tree is needed to be present in that
38795mode.
38796
38797
38798File: gccint.info,  Node: Invoking the garbage collector,  Next: Troubleshooting,  Prev: Files,  Up: Type Information
38799
3880022.5 How to invoke the garbage collector
38801========================================
38802
38803The GCC garbage collector GGC is only invoked explicitly. In contrast
38804with many other garbage collectors, it is not implicitly invoked by
38805allocation routines when a lot of memory has been consumed. So the only
38806way to have GGC reclaim storage is to call the `ggc_collect' function
38807explicitly.  This call is an expensive operation, as it may have to
38808scan the entire heap.  Beware that local variables (on the GCC call
38809stack) are not followed by such an invocation (as many other garbage
38810collectors do): you should reference all your data from static or
38811external `GTY'-ed variables, and it is advised to call `ggc_collect'
38812with a shallow call stack.  The GGC is an exact mark and sweep garbage
38813collector (so it does not scan the call stack for pointers).  In
38814practice GCC passes don't often call `ggc_collect' themselves, because
38815it is called by the pass manager between passes.
38816
38817 At the time of the `ggc_collect' call all pointers in the GC-marked
38818structures must be valid or `NULL'.  In practice this means that there
38819should not be uninitialized pointer fields in the structures even if
38820your code never reads or writes those fields at a particular instance.
38821One way to ensure this is to use cleared versions of allocators unless
38822all the fields are initialized manually immediately after allocation.
38823
38824
38825File: gccint.info,  Node: Troubleshooting,  Prev: Invoking the garbage collector,  Up: Type Information
38826
3882722.6 Troubleshooting the garbage collector
38828==========================================
38829
38830With the current garbage collector implementation, most issues should
38831show up as GCC compilation errors.  Some of the most commonly
38832encountered issues are described below.
38833
38834   * Gengtype does not produce allocators for a `GTY'-marked type.
38835     Gengtype checks if there is at least one possible path from GC
38836     roots to at least one instance of each type before outputting
38837     allocators.  If there is no such path, the `GTY' markers will be
38838     ignored and no allocators will be output.  Solve this by making
38839     sure that there exists at least one such path.  If creating it is
38840     unfeasible or raises a "code smell", consider if you really must
38841     use GC for allocating such type.
38842
38843   * Link-time errors about undefined `gt_ggc_r_foo_bar' and
38844     similarly-named symbols.  Check if your `foo_bar' source file has
38845     `#include "gt-foo_bar.h"' as its very last line.
38846
38847
38848
38849File: gccint.info,  Node: Plugins,  Next: LTO,  Prev: Type Information,  Up: Top
38850
3885123 Plugins
38852**********
38853
38854GCC plugin is a loadable module that provides extra features to the
38855compiler, which they can further pass around as a shareable module.
38856
38857 GCC plugins provide developers with a rich subset of the GCC API to
38858allow them to extend GCC as they see fit.  Whether it is writing an
38859additional optimization pass, transforming code, or analyzing
38860information, plugins can be quite useful.
38861
38862* Menu:
38863
38864* Plugins loading::      How can we load plugins.
38865* Plugin API::           The APIs for plugins.
38866* Plugins pass::         How a plugin interact with the pass manager.
38867* Plugins GC::           How a plugin Interact with GCC Garbage Collector.
38868* Plugins description::  Giving information about a plugin itself.
38869* Plugins attr::         Registering custom attributes or pragmas.
38870* Plugins recording::    Recording information about pass execution.
38871* Plugins gate::         Controlling which passes are being run.
38872* Plugins tracking::     Keeping track of available passes.
38873* Plugins building::     How can we build a plugin.
38874
38875
38876File: gccint.info,  Node: Plugins loading,  Next: Plugin API,  Up: Plugins
38877
3887823.1 Loading Plugins
38879====================
38880
38881Plugins are supported on platforms that support `-ldl -rdynamic'.  They
38882are loaded by the compiler using `dlopen' and invoked at pre-determined
38883locations in the compilation process.
38884
38885 Plugins are loaded with
38886
38887 `-fplugin=/path/to/NAME.so' `-fplugin-arg-NAME-KEY1[=VALUE1]'
38888
38889 The plugin arguments are parsed by GCC and passed to respective
38890plugins as key-value pairs. Multiple plugins can be invoked by
38891specifying multiple `-fplugin' arguments.
38892
38893 A plugin can be simply given by its short name (no dots or slashes).
38894When simply passing `-fplugin=NAME', the plugin is loaded from the
38895`plugin' directory, so `-fplugin=NAME' is the same as `-fplugin=`gcc
38896-print-file-name=plugin`/NAME.so', using backquote shell syntax to
38897query the `plugin' directory.
38898
38899
38900File: gccint.info,  Node: Plugin API,  Next: Plugins pass,  Prev: Plugins loading,  Up: Plugins
38901
3890223.2 Plugin API
38903===============
38904
38905Plugins are activated by the compiler at specific events as defined in
38906`gcc-plugin.h'.  For each event of interest, the plugin should call
38907`register_callback' specifying the name of the event and address of the
38908callback function that will handle that event.
38909
38910 The header `gcc-plugin.h' must be the first gcc header to be included.
38911
3891223.2.1 Plugin license check
38913---------------------------
38914
38915Every plugin should define the global symbol `plugin_is_GPL_compatible'
38916to assert that it has been licensed under a GPL-compatible license.  If
38917this symbol does not exist, the compiler will emit a fatal error and
38918exit with the error message:
38919
38920     fatal error: plugin NAME is not licensed under a GPL-compatible license
38921     NAME: undefined symbol: plugin_is_GPL_compatible
38922     compilation terminated
38923
38924 The declared type of the symbol should be int, to match a forward
38925declaration in `gcc-plugin.h' that suppresses C++ mangling.  It does
38926not need to be in any allocated section, though.  The compiler merely
38927asserts that the symbol exists in the global scope.  Something like
38928this is enough:
38929
38930     int plugin_is_GPL_compatible;
38931
3893223.2.2 Plugin initialization
38933----------------------------
38934
38935Every plugin should export a function called `plugin_init' that is
38936called right after the plugin is loaded. This function is responsible
38937for registering all the callbacks required by the plugin and do any
38938other required initialization.
38939
38940 This function is called from `compile_file' right before invoking the
38941parser.  The arguments to `plugin_init' are:
38942
38943   * `plugin_info': Plugin invocation information.
38944
38945   * `version': GCC version.
38946
38947 The `plugin_info' struct is defined as follows:
38948
38949     struct plugin_name_args
38950     {
38951       char *base_name;              /* Short name of the plugin
38952                                        (filename without .so suffix). */
38953       const char *full_name;        /* Path to the plugin as specified with
38954                                        -fplugin=. */
38955       int argc;                     /* Number of arguments specified with
38956                                        -fplugin-arg-.... */
38957       struct plugin_argument *argv; /* Array of ARGC key-value pairs. */
38958       const char *version;          /* Version string provided by plugin. */
38959       const char *help;             /* Help string provided by plugin. */
38960     }
38961
38962 If initialization fails, `plugin_init' must return a non-zero value.
38963Otherwise, it should return 0.
38964
38965 The version of the GCC compiler loading the plugin is described by the
38966following structure:
38967
38968     struct plugin_gcc_version
38969     {
38970       const char *basever;
38971       const char *datestamp;
38972       const char *devphase;
38973       const char *revision;
38974       const char *configuration_arguments;
38975     };
38976
38977 The function `plugin_default_version_check' takes two pointers to such
38978structure and compare them field by field. It can be used by the
38979plugin's `plugin_init' function.
38980
38981 The version of GCC used to compile the plugin can be found in the
38982symbol `gcc_version' defined in the header `plugin-version.h'. The
38983recommended version check to perform looks like
38984
38985     #include "plugin-version.h"
38986     ...
38987
38988     int
38989     plugin_init (struct plugin_name_args *plugin_info,
38990                  struct plugin_gcc_version *version)
38991     {
38992       if (!plugin_default_version_check (version, &gcc_version))
38993         return 1;
38994
38995     }
38996
38997 but you can also check the individual fields if you want a less strict
38998check.
38999
3900023.2.3 Plugin callbacks
39001-----------------------
39002
39003Callback functions have the following prototype:
39004
39005     /* The prototype for a plugin callback function.
39006          gcc_data  - event-specific data provided by GCC
39007          user_data - plugin-specific data provided by the plug-in.  */
39008     typedef void (*plugin_callback_func)(void *gcc_data, void *user_data);
39009
39010 Callbacks can be invoked at the following pre-determined events:
39011
39012     enum plugin_event
39013     {
39014       PLUGIN_PASS_MANAGER_SETUP,    /* To hook into pass manager.  */
39015       PLUGIN_FINISH_TYPE,           /* After finishing parsing a type.  */
39016       PLUGIN_FINISH_DECL,           /* After finishing parsing a declaration. */
39017       PLUGIN_FINISH_UNIT,           /* Useful for summary processing.  */
39018       PLUGIN_PRE_GENERICIZE,        /* Allows to see low level AST in C and C++ frontends.  */
39019       PLUGIN_FINISH,                /* Called before GCC exits.  */
39020       PLUGIN_INFO,                  /* Information about the plugin. */
39021       PLUGIN_GGC_START,             /* Called at start of GCC Garbage Collection. */
39022       PLUGIN_GGC_MARKING,           /* Extend the GGC marking. */
39023       PLUGIN_GGC_END,               /* Called at end of GGC. */
39024       PLUGIN_REGISTER_GGC_ROOTS,    /* Register an extra GGC root table. */
39025       PLUGIN_REGISTER_GGC_CACHES,   /* Register an extra GGC cache table. */
39026       PLUGIN_ATTRIBUTES,            /* Called during attribute registration */
39027       PLUGIN_START_UNIT,            /* Called before processing a translation unit.  */
39028       PLUGIN_PRAGMAS,               /* Called during pragma registration. */
39029       /* Called before first pass from all_passes.  */
39030       PLUGIN_ALL_PASSES_START,
39031       /* Called after last pass from all_passes.  */
39032       PLUGIN_ALL_PASSES_END,
39033       /* Called before first ipa pass.  */
39034       PLUGIN_ALL_IPA_PASSES_START,
39035       /* Called after last ipa pass.  */
39036       PLUGIN_ALL_IPA_PASSES_END,
39037       /* Allows to override pass gate decision for current_pass.  */
39038       PLUGIN_OVERRIDE_GATE,
39039       /* Called before executing a pass.  */
39040       PLUGIN_PASS_EXECUTION,
39041       /* Called before executing subpasses of a GIMPLE_PASS in
39042          execute_ipa_pass_list.  */
39043       PLUGIN_EARLY_GIMPLE_PASSES_START,
39044       /* Called after executing subpasses of a GIMPLE_PASS in
39045          execute_ipa_pass_list.  */
39046       PLUGIN_EARLY_GIMPLE_PASSES_END,
39047       /* Called when a pass is first instantiated.  */
39048       PLUGIN_NEW_PASS,
39049
39050       PLUGIN_EVENT_FIRST_DYNAMIC    /* Dummy event used for indexing callback
39051                                        array.  */
39052     };
39053
39054 In addition, plugins can also look up the enumerator of a named event,
39055and / or generate new events dynamically, by calling the function
39056`get_named_event_id'.
39057
39058 To register a callback, the plugin calls `register_callback' with the
39059arguments:
39060
39061   * `char *name': Plugin name.
39062
39063   * `int event': The event code.
39064
39065   * `plugin_callback_func callback': The function that handles `event'.
39066
39067   * `void *user_data': Pointer to plugin-specific data.
39068
39069 For the PLUGIN_PASS_MANAGER_SETUP, PLUGIN_INFO,
39070PLUGIN_REGISTER_GGC_ROOTS and PLUGIN_REGISTER_GGC_CACHES pseudo-events
39071the `callback' should be null, and the `user_data' is specific.
39072
39073 When the PLUGIN_PRAGMAS event is triggered (with a null pointer as
39074data from GCC), plugins may register their own pragmas using functions
39075like `c_register_pragma' or `c_register_pragma_with_expansion'.
39076
39077
39078File: gccint.info,  Node: Plugins pass,  Next: Plugins GC,  Prev: Plugin API,  Up: Plugins
39079
3908023.3 Interacting with the pass manager
39081======================================
39082
39083There needs to be a way to add/reorder/remove passes dynamically. This
39084is useful for both analysis plugins (plugging in after a certain pass
39085such as CFG or an IPA pass) and optimization plugins.
39086
39087 Basic support for inserting new passes or replacing existing passes is
39088provided. A plugin registers a new pass with GCC by calling
39089`register_callback' with the `PLUGIN_PASS_MANAGER_SETUP' event and a
39090pointer to a `struct register_pass_info' object defined as follows
39091
39092     enum pass_positioning_ops
39093     {
39094       PASS_POS_INSERT_AFTER,  // Insert after the reference pass.
39095       PASS_POS_INSERT_BEFORE, // Insert before the reference pass.
39096       PASS_POS_REPLACE        // Replace the reference pass.
39097     };
39098
39099     struct register_pass_info
39100     {
39101       struct opt_pass *pass;            /* New pass provided by the plugin.  */
39102       const char *reference_pass_name;  /* Name of the reference pass for hooking
39103                                            up the new pass.  */
39104       int ref_pass_instance_number;     /* Insert the pass at the specified
39105                                            instance number of the reference pass.  */
39106                                         /* Do it for every instance if it is 0.  */
39107       enum pass_positioning_ops pos_op; /* how to insert the new pass.  */
39108     };
39109
39110
39111     /* Sample plugin code that registers a new pass.  */
39112     int
39113     plugin_init (struct plugin_name_args *plugin_info,
39114                  struct plugin_gcc_version *version)
39115     {
39116       struct register_pass_info pass_info;
39117
39118       ...
39119
39120       /* Code to fill in the pass_info object with new pass information.  */
39121
39122       ...
39123
39124       /* Register the new pass.  */
39125       register_callback (plugin_info->base_name, PLUGIN_PASS_MANAGER_SETUP, NULL, &pass_info);
39126
39127       ...
39128     }
39129
39130
39131File: gccint.info,  Node: Plugins GC,  Next: Plugins description,  Prev: Plugins pass,  Up: Plugins
39132
3913323.4 Interacting with the GCC Garbage Collector
39134===============================================
39135
39136Some plugins may want to be informed when GGC (the GCC Garbage
39137Collector) is running. They can register callbacks for the
39138`PLUGIN_GGC_START' and `PLUGIN_GGC_END' events (for which the callback
39139is called with a null `gcc_data') to be notified of the start or end of
39140the GCC garbage collection.
39141
39142 Some plugins may need to have GGC mark additional data. This can be
39143done by registering a callback (called with a null `gcc_data') for the
39144`PLUGIN_GGC_MARKING' event. Such callbacks can call the `ggc_set_mark'
39145routine, preferably through the `ggc_mark' macro (and conversely, these
39146routines should usually not be used in plugins outside of the
39147`PLUGIN_GGC_MARKING' event).
39148
39149 Some plugins may need to add extra GGC root tables, e.g. to handle
39150their own `GTY'-ed data. This can be done with the
39151`PLUGIN_REGISTER_GGC_ROOTS' pseudo-event with a null callback and the
39152extra root table (of type `struct ggc_root_tab*') as `user_data'.
39153Plugins that want to use the `if_marked' hash table option can add the
39154extra GGC cache tables generated by `gengtype' using the
39155`PLUGIN_REGISTER_GGC_CACHES' pseudo-event with a null callback and the
39156extra cache table (of type `struct ggc_cache_tab*') as `user_data'.
39157Running the `gengtype -p SOURCE-DIR FILE-LIST PLUGIN*.C ...' utility
39158generates these extra root tables.
39159
39160 You should understand the details of memory management inside GCC
39161before using `PLUGIN_GGC_MARKING', `PLUGIN_REGISTER_GGC_ROOTS' or
39162`PLUGIN_REGISTER_GGC_CACHES'.
39163
39164
39165File: gccint.info,  Node: Plugins description,  Next: Plugins attr,  Prev: Plugins GC,  Up: Plugins
39166
3916723.5 Giving information about a plugin
39168======================================
39169
39170A plugin should give some information to the user about itself. This
39171uses the following structure:
39172
39173     struct plugin_info
39174     {
39175       const char *version;
39176       const char *help;
39177     };
39178
39179 Such a structure is passed as the `user_data' by the plugin's init
39180routine using `register_callback' with the `PLUGIN_INFO' pseudo-event
39181and a null callback.
39182
39183
39184File: gccint.info,  Node: Plugins attr,  Next: Plugins recording,  Prev: Plugins description,  Up: Plugins
39185
3918623.6 Registering custom attributes or pragmas
39187=============================================
39188
39189For analysis (or other) purposes it is useful to be able to add custom
39190attributes or pragmas.
39191
39192 The `PLUGIN_ATTRIBUTES' callback is called during attribute
39193registration. Use the `register_attribute' function to register custom
39194attributes.
39195
39196     /* Attribute handler callback */
39197     static tree
39198     handle_user_attribute (tree *node, tree name, tree args,
39199                            int flags, bool *no_add_attrs)
39200     {
39201       return NULL_TREE;
39202     }
39203
39204     /* Attribute definition */
39205     static struct attribute_spec user_attr =
39206       { "user", 1, 1, false,  false, false, handle_user_attribute, false };
39207
39208     /* Plugin callback called during attribute registration.
39209     Registered with register_callback (plugin_name, PLUGIN_ATTRIBUTES, register_attributes, NULL)
39210     */
39211     static void
39212     register_attributes (void *event_data, void *data)
39213     {
39214       warning (0, G_("Callback to register attributes"));
39215       register_attribute (&user_attr);
39216     }
39217
39218 The `PLUGIN_PRAGMAS' callback is called during pragmas registration.
39219Use the `c_register_pragma' or `c_register_pragma_with_expansion'
39220functions to register custom pragmas.
39221
39222     /* Plugin callback called during pragmas registration. Registered with
39223          register_callback (plugin_name, PLUGIN_PRAGMAS,
39224                             register_my_pragma, NULL);
39225     */
39226     static void
39227     register_my_pragma (void *event_data, void *data)
39228     {
39229       warning (0, G_("Callback to register pragmas"));
39230       c_register_pragma ("GCCPLUGIN", "sayhello", handle_pragma_sayhello);
39231     }
39232
39233 It is suggested to pass `"GCCPLUGIN"' (or a short name identifying
39234your plugin) as the "space" argument of your pragma.
39235
39236
39237File: gccint.info,  Node: Plugins recording,  Next: Plugins gate,  Prev: Plugins attr,  Up: Plugins
39238
3923923.7 Recording information about pass execution
39240===============================================
39241
39242The event PLUGIN_PASS_EXECUTION passes the pointer to the executed pass
39243(the same as current_pass) as `gcc_data' to the callback.  You can also
39244inspect cfun to find out about which function this pass is executed for.
39245Note that this event will only be invoked if the gate check (if
39246applicable, modified by PLUGIN_OVERRIDE_GATE) succeeds.  You can use
39247other hooks, like `PLUGIN_ALL_PASSES_START', `PLUGIN_ALL_PASSES_END',
39248`PLUGIN_ALL_IPA_PASSES_START', `PLUGIN_ALL_IPA_PASSES_END',
39249`PLUGIN_EARLY_GIMPLE_PASSES_START', and/or
39250`PLUGIN_EARLY_GIMPLE_PASSES_END' to manipulate global state in your
39251plugin(s) in order to get context for the pass execution.
39252
39253
39254File: gccint.info,  Node: Plugins gate,  Next: Plugins tracking,  Prev: Plugins recording,  Up: Plugins
39255
3925623.8 Controlling which passes are being run
39257===========================================
39258
39259After the original gate function for a pass is called, its result - the
39260gate status - is stored as an integer.  Then the event
39261`PLUGIN_OVERRIDE_GATE' is invoked, with a pointer to the gate status in
39262the `gcc_data' parameter to the callback function.  A nonzero value of
39263the gate status means that the pass is to be executed.  You can both
39264read and write the gate status via the passed pointer.
39265
39266
39267File: gccint.info,  Node: Plugins tracking,  Next: Plugins building,  Prev: Plugins gate,  Up: Plugins
39268
3926923.9 Keeping track of available passes
39270======================================
39271
39272When your plugin is loaded, you can inspect the various pass lists to
39273determine what passes are available.  However, other plugins might add
39274new passes.  Also, future changes to GCC might cause generic passes to
39275be added after plugin loading.  When a pass is first added to one of
39276the pass lists, the event `PLUGIN_NEW_PASS' is invoked, with the
39277callback parameter `gcc_data' pointing to the new pass.
39278
39279
39280File: gccint.info,  Node: Plugins building,  Prev: Plugins tracking,  Up: Plugins
39281
3928223.10 Building GCC plugins
39283==========================
39284
39285If plugins are enabled, GCC installs the headers needed to build a
39286plugin (somewhere in the installation tree, e.g. under `/usr/local').
39287In particular a `plugin/include' directory is installed, containing all
39288the header files needed to build plugins.
39289
39290 On most systems, you can query this `plugin' directory by invoking
39291`gcc -print-file-name=plugin' (replace if needed `gcc' with the
39292appropriate program path).
39293
39294 Inside plugins, this `plugin' directory name can be queried by calling
39295`default_plugin_dir_name ()'.
39296
39297 Plugins may know, when they are compiled, the GCC version for which
39298`plugin-version.h' is provided.  The constant macros
39299`GCCPLUGIN_VERSION_MAJOR', `GCCPLUGIN_VERSION_MINOR',
39300`GCCPLUGIN_VERSION_PATCHLEVEL', `GCCPLUGIN_VERSION' are integer
39301numbers, so a plugin could ensure it is built for GCC 4.7 with
39302     #if GCCPLUGIN_VERSION != 4007
39303     #error this GCC plugin is for GCC 4.7
39304     #endif
39305
39306 The following GNU Makefile excerpt shows how to build a simple plugin:
39307
39308     GCC=gcc
39309     PLUGIN_SOURCE_FILES= plugin1.c plugin2.c
39310     PLUGIN_OBJECT_FILES= $(patsubst %.c,%.o,$(PLUGIN_SOURCE_FILES))
39311     GCCPLUGINS_DIR:= $(shell $(GCC) -print-file-name=plugin)
39312     CFLAGS+= -I$(GCCPLUGINS_DIR)/include -fPIC -O2
39313
39314     plugin.so: $(PLUGIN_OBJECT_FILES)
39315        $(GCC) -shared $^ -o $@
39316
39317 A single source file plugin may be built with `gcc -I`gcc
39318-print-file-name=plugin`/include -fPIC -shared -O2 plugin.c -o
39319plugin.so', using backquote shell syntax to query the `plugin'
39320directory.
39321
39322 When a plugin needs to use `gengtype', be sure that both `gengtype'
39323and `gtype.state' have the same version as the GCC for which the plugin
39324is built.
39325
39326
39327File: gccint.info,  Node: LTO,  Next: Funding,  Prev: Plugins,  Up: Top
39328
3932924 Link Time Optimization
39330*************************
39331
39332Link Time Optimization (LTO) gives GCC the capability of dumping its
39333internal representation (GIMPLE) to disk, so that all the different
39334compilation units that make up a single executable can be optimized as
39335a single module.  This expands the scope of inter-procedural
39336optimizations to encompass the whole program (or, rather, everything
39337that is visible at link time).
39338
39339* Menu:
39340
39341* LTO Overview::            Overview of LTO.
39342* LTO object file layout::  LTO file sections in ELF.
39343* IPA::                     Using summary information in IPA passes.
39344* WHOPR::                   Whole program assumptions,
39345                            linker plugin and symbol visibilities.
39346* Internal flags::          Internal flags controlling `lto1'.
39347
39348
39349File: gccint.info,  Node: LTO Overview,  Next: LTO object file layout,  Up: LTO
39350
3935124.1 Design Overview
39352====================
39353
39354Link time optimization is implemented as a GCC front end for a bytecode
39355representation of GIMPLE that is emitted in special sections of `.o'
39356files.  Currently, LTO support is enabled in most ELF-based systems, as
39357well as darwin, cygwin and mingw systems.
39358
39359 Since GIMPLE bytecode is saved alongside final object code, object
39360files generated with LTO support are larger than regular object files.
39361This "fat" object format makes it easy to integrate LTO into existing
39362build systems, as one can, for instance, produce archives of the files.
39363Additionally, one might be able to ship one set of fat objects which
39364could be used both for development and the production of optimized
39365builds.  A, perhaps surprising, side effect of this feature is that any
39366mistake in the toolchain that leads to LTO information not being used
39367(e.g. an older `libtool' calling `ld' directly).  This is both an
39368advantage, as the system is more robust, and a disadvantage, as the
39369user is not informed that the optimization has been disabled.
39370
39371 The current implementation only produces "fat" objects, effectively
39372doubling compilation time and increasing file sizes up to 5x the
39373original size.  This hides the problem that some tools, such as `ar'
39374and `nm', need to understand symbol tables of LTO sections.  These
39375tools were extended to use the plugin infrastructure, and with these
39376problems solved, GCC will also support "slim" objects consisting of the
39377intermediate code alone.
39378
39379 At the highest level, LTO splits the compiler in two.  The first half
39380(the "writer") produces a streaming representation of all the internal
39381data structures needed to optimize and generate code.  This includes
39382declarations, types, the callgraph and the GIMPLE representation of
39383function bodies.
39384
39385 When `-flto' is given during compilation of a source file, the pass
39386manager executes all the passes in `all_lto_gen_passes'.  Currently,
39387this phase is composed of two IPA passes:
39388
39389   * `pass_ipa_lto_gimple_out' This pass executes the function
39390     `lto_output' in `lto-streamer-out.c', which traverses the call
39391     graph encoding every reachable declaration, type and function.
39392     This generates a memory representation of all the file sections
39393     described below.
39394
39395   * `pass_ipa_lto_finish_out' This pass executes the function
39396     `produce_asm_for_decls' in `lto-streamer-out.c', which takes the
39397     memory image built in the previous pass and encodes it in the
39398     corresponding ELF file sections.
39399
39400 The second half of LTO support is the "reader".  This is implemented
39401as the GCC front end `lto1' in `lto/lto.c'.  When `collect2' detects a
39402link set of `.o'/`.a' files with LTO information and the `-flto' is
39403enabled, it invokes `lto1' which reads the set of files and aggregates
39404them into a single translation unit for optimization.  The main entry
39405point for the reader is `lto/lto.c':`lto_main'.
39406
3940724.1.1 LTO modes of operation
39408-----------------------------
39409
39410One of the main goals of the GCC link-time infrastructure was to allow
39411effective compilation of large programs.  For this reason GCC
39412implements two link-time compilation modes.
39413
39414  1. _LTO mode_, in which the whole program is read into the compiler
39415     at link-time and optimized in a similar way as if it were a single
39416     source-level compilation unit.
39417
39418  2. _WHOPR or partitioned mode_, designed to utilize multiple CPUs
39419     and/or a distributed compilation environment to quickly link large
39420     applications.  WHOPR stands for WHOle Program optimizeR (not to be
39421     confused with the semantics of `-fwhole-program').  It partitions
39422     the aggregated callgraph from many different `.o' files and
39423     distributes the compilation of the sub-graphs to different CPUs.
39424
39425     Note that distributed compilation is not implemented yet, but since
39426     the parallelism is facilitated via generating a `Makefile', it
39427     would be easy to implement.
39428
39429 WHOPR splits LTO into three main stages:
39430  1. Local generation (LGEN) This stage executes in parallel.  Every
39431     file in the program is compiled into the intermediate language and
39432     packaged together with the local call-graph and summary
39433     information.  This stage is the same for both the LTO and WHOPR
39434     compilation mode.
39435
39436  2. Whole Program Analysis (WPA) WPA is performed sequentially.  The
39437     global call-graph is generated, and a global analysis procedure
39438     makes transformation decisions.  The global call-graph is
39439     partitioned to facilitate parallel optimization during phase 3.
39440     The results of the WPA stage are stored into new object files
39441     which contain the partitions of program expressed in the
39442     intermediate language and the optimization decisions.
39443
39444  3. Local transformations (LTRANS) This stage executes in parallel.
39445     All the decisions made during phase 2 are implemented locally in
39446     each partitioned object file, and the final object code is
39447     generated.  Optimizations which cannot be decided efficiently
39448     during the phase 2 may be performed on the local call-graph
39449     partitions.
39450
39451 WHOPR can be seen as an extension of the usual LTO mode of
39452compilation.  In LTO, WPA and LTRANS are executed within a single
39453execution of the compiler, after the whole program has been read into
39454memory.
39455
39456 When compiling in WHOPR mode, the callgraph is partitioned during the
39457WPA stage.  The whole program is split into a given number of
39458partitions of roughly the same size.  The compiler tries to minimize
39459the number of references which cross partition boundaries.  The main
39460advantage of WHOPR is to allow the parallel execution of LTRANS stages,
39461which are the most time-consuming part of the compilation process.
39462Additionally, it avoids the need to load the whole program into memory.
39463
39464
39465File: gccint.info,  Node: LTO object file layout,  Next: IPA,  Prev: LTO Overview,  Up: LTO
39466
3946724.2 LTO file sections
39468======================
39469
39470LTO information is stored in several ELF sections inside object files.
39471Data structures and enum codes for sections are defined in
39472`lto-streamer.h'.
39473
39474 These sections are emitted from `lto-streamer-out.c' and mapped in all
39475at once from `lto/lto.c':`lto_file_read'.  The individual functions
39476dealing with the reading/writing of each section are described below.
39477
39478   * Command line options (`.gnu.lto_.opts')
39479
39480     This section contains the command line options used to generate the
39481     object files.  This is used at link time to determine the
39482     optimization level and other settings when they are not explicitly
39483     specified at the linker command line.
39484
39485     Currently, GCC does not support combining LTO object files compiled
39486     with different set of the command line options into a single
39487     binary.  At link time, the options given on the command line and
39488     the options saved on all the files in a link-time set are applied
39489     globally.  No attempt is made at validating the combination of
39490     flags (other than the usual validation done by option processing).
39491     This is implemented in `lto/lto.c':`lto_read_all_file_options'.
39492
39493   * Symbol table (`.gnu.lto_.symtab')
39494
39495     This table replaces the ELF symbol table for functions and
39496     variables represented in the LTO IL.  Symbols used and exported by
39497     the optimized assembly code of "fat" objects might not match the
39498     ones used and exported by the intermediate code.  This table is
39499     necessary because the intermediate code is less optimized and thus
39500     requires a separate symbol table.
39501
39502     Additionally, the binary code in the "fat" object will lack a call
39503     to a function, since the call was optimized out at compilation time
39504     after the intermediate language was streamed out.  In some special
39505     cases, the same optimization may not happen during link-time
39506     optimization.  This would lead to an undefined symbol if only one
39507     symbol table was used.
39508
39509     The symbol table is emitted in
39510     `lto-streamer-out.c':`produce_symtab'.
39511
39512   * Global declarations and types (`.gnu.lto_.decls')
39513
39514     This section contains an intermediate language dump of all
39515     declarations and types required to represent the callgraph, static
39516     variables and top-level debug info.
39517
39518     The contents of this section are emitted in
39519     `lto-streamer-out.c':`produce_asm_for_decls'.  Types and symbols
39520     are emitted in a topological order that preserves the sharing of
39521     pointers when the file is read back in
39522     (`lto.c':`read_cgraph_and_symbols').
39523
39524   * The callgraph (`.gnu.lto_.cgraph')
39525
39526     This section contains the basic data structure used by the GCC
39527     inter-procedural optimization infrastructure.  This section stores
39528     an annotated multi-graph which represents the functions and call
39529     sites as well as the variables, aliases and top-level `asm'
39530     statements.
39531
39532     This section is emitted in `lto-streamer-out.c':`output_cgraph'
39533     and read in `lto-cgraph.c':`input_cgraph'.
39534
39535   * IPA references (`.gnu.lto_.refs')
39536
39537     This section contains references between function and static
39538     variables.  It is emitted by `lto-cgraph.c':`output_refs' and read
39539     by `lto-cgraph.c':`input_refs'.
39540
39541   * Function bodies (`.gnu.lto_.function_body.<name>')
39542
39543     This section contains function bodies in the intermediate language
39544     representation.  Every function body is in a separate section to
39545     allow copying of the section independently to different object
39546     files or reading the function on demand.
39547
39548     Functions are emitted in `lto-streamer-out.c':`output_function'
39549     and read in `lto-streamer-in.c':`input_function'.
39550
39551   * Static variable initializers (`.gnu.lto_.vars')
39552
39553     This section contains all the symbols in the global variable pool.
39554     It is emitted by `lto-cgraph.c':`output_varpool' and read in
39555     `lto-cgraph.c':`input_cgraph'.
39556
39557   * Summaries and optimization summaries used by IPA passes
39558     (`.gnu.lto_.<xxx>', where `<xxx>' is one of `jmpfuncs',
39559     `pureconst' or `reference')
39560
39561     These sections are used by IPA passes that need to emit summary
39562     information during LTO generation to be read and aggregated at
39563     link time.  Each pass is responsible for implementing two pass
39564     manager hooks: one for writing the summary and another for reading
39565     it in.  The format of these sections is entirely up to each
39566     individual pass.  The only requirement is that the writer and
39567     reader hooks agree on the format.
39568
39569
39570File: gccint.info,  Node: IPA,  Next: WHOPR,  Prev: LTO object file layout,  Up: LTO
39571
3957224.3 Using summary information in IPA passes
39573============================================
39574
39575Programs are represented internally as a _callgraph_ (a multi-graph
39576where nodes are functions and edges are call sites) and a _varpool_ (a
39577list of static and external variables in the program).
39578
39579 The inter-procedural optimization is organized as a sequence of
39580individual passes, which operate on the callgraph and the varpool.  To
39581make the implementation of WHOPR possible, every inter-procedural
39582optimization pass is split into several stages that are executed at
39583different times during WHOPR compilation:
39584
39585   * LGEN time
39586       1. _Generate summary_ (`generate_summary' in `struct
39587          ipa_opt_pass_d').  This stage analyzes every function body
39588          and variable initializer is examined and stores relevant
39589          information into a pass-specific data structure.
39590
39591       2. _Write summary_ (`write_summary' in `struct ipa_opt_pass_d').
39592          This stage writes all the pass-specific information generated
39593          by `generate_summary'.  Summaries go into their own
39594          `LTO_section_*' sections that have to be declared in
39595          `lto-streamer.h':`enum lto_section_type'.  A new section is
39596          created by calling `create_output_block' and data can be
39597          written using the `lto_output_*' routines.
39598
39599   * WPA time
39600       1. _Read summary_ (`read_summary' in `struct ipa_opt_pass_d').
39601          This stage reads all the pass-specific information in exactly
39602          the same order that it was written by `write_summary'.
39603
39604       2. _Execute_ (`execute' in `struct opt_pass').  This performs
39605          inter-procedural propagation.  This must be done without
39606          actual access to the individual function bodies or variable
39607          initializers.  Typically, this results in a transitive
39608          closure operation over the summary information of all the
39609          nodes in the callgraph.
39610
39611       3. _Write optimization summary_ (`write_optimization_summary' in
39612          `struct ipa_opt_pass_d').  This writes the result of the
39613          inter-procedural propagation into the object file.  This can
39614          use the same data structures and helper routines used in
39615          `write_summary'.
39616
39617   * LTRANS time
39618       1. _Read optimization summary_ (`read_optimization_summary' in
39619          `struct ipa_opt_pass_d').  The counterpart to
39620          `write_optimization_summary'.  This reads the interprocedural
39621          optimization decisions in exactly the same format emitted by
39622          `write_optimization_summary'.
39623
39624       2. _Transform_ (`function_transform' and `variable_transform' in
39625          `struct ipa_opt_pass_d').  The actual function bodies and
39626          variable initializers are updated based on the information
39627          passed down from the _Execute_ stage.
39628
39629 The implementation of the inter-procedural passes are shared between
39630LTO, WHOPR and classic non-LTO compilation.
39631
39632   * During the traditional file-by-file mode every pass executes its
39633     own _Generate summary_, _Execute_, and _Transform_ stages within
39634     the single execution context of the compiler.
39635
39636   * In LTO compilation mode, every pass uses _Generate summary_ and
39637     _Write summary_ stages at compilation time, while the _Read
39638     summary_, _Execute_, and _Transform_ stages are executed at link
39639     time.
39640
39641   * In WHOPR mode all stages are used.
39642
39643 To simplify development, the GCC pass manager differentiates between
39644normal inter-procedural passes and small inter-procedural passes.  A
39645_small inter-procedural pass_ (`SIMPLE_IPA_PASS') is a pass that does
39646everything at once and thus it can not be executed during WPA in WHOPR
39647mode.  It defines only the _Execute_ stage and during this stage it
39648accesses and modifies the function bodies.  Such passes are useful for
39649optimization at LGEN or LTRANS time and are used, for example, to
39650implement early optimization before writing object files.  The simple
39651inter-procedural passes can also be used for easier prototyping and
39652development of a new inter-procedural pass.
39653
3965424.3.1 Virtual clones
39655---------------------
39656
39657One of the main challenges of introducing the WHOPR compilation mode
39658was addressing the interactions between optimization passes.  In LTO
39659compilation mode, the passes are executed in a sequence, each of which
39660consists of analysis (or _Generate summary_), propagation (or
39661_Execute_) and _Transform_ stages.  Once the work of one pass is
39662finished, the next pass sees the updated program representation and can
39663execute.  This makes the individual passes dependent on each other.
39664
39665 In WHOPR mode all passes first execute their _Generate summary_ stage.
39666Then summary writing marks the end of the LGEN stage.  At WPA time, the
39667summaries are read back into memory and all passes run the _Execute_
39668stage.  Optimization summaries are streamed and sent to LTRANS, where
39669all the passes execute the _Transform_ stage.
39670
39671 Most optimization passes split naturally into analysis, propagation
39672and transformation stages.  But some do not.  The main problem arises
39673when one pass performs changes and the following pass gets confused by
39674seeing different callgraphs between the _Transform_ stage and the
39675_Generate summary_ or _Execute_ stage.  This means that the passes are
39676required to communicate their decisions with each other.
39677
39678 To facilitate this communication, the GCC callgraph infrastructure
39679implements _virtual clones_, a method of representing the changes
39680performed by the optimization passes in the callgraph without needing
39681to update function bodies.
39682
39683 A _virtual clone_ in the callgraph is a function that has no
39684associated body, just a description of how to create its body based on
39685a different function (which itself may be a virtual clone).
39686
39687 The description of function modifications includes adjustments to the
39688function's signature (which allows, for example, removing or adding
39689function arguments), substitutions to perform on the function body,
39690and, for inlined functions, a pointer to the function that it will be
39691inlined into.
39692
39693 It is also possible to redirect any edge of the callgraph from a
39694function to its virtual clone.  This implies updating of the call site
39695to adjust for the new function signature.
39696
39697 Most of the transformations performed by inter-procedural
39698optimizations can be represented via virtual clones.  For instance, a
39699constant propagation pass can produce a virtual clone of the function
39700which replaces one of its arguments by a constant.  The inliner can
39701represent its decisions by producing a clone of a function whose body
39702will be later integrated into a given function.
39703
39704 Using _virtual clones_, the program can be easily updated during the
39705_Execute_ stage, solving most of pass interactions problems that would
39706otherwise occur during _Transform_.
39707
39708 Virtual clones are later materialized in the LTRANS stage and turned
39709into real functions.  Passes executed after the virtual clone were
39710introduced also perform their _Transform_ stage on new functions, so
39711for a pass there is no significant difference between operating on a
39712real function or a virtual clone introduced before its _Execute_ stage.
39713
39714 Optimization passes then work on virtual clones introduced before
39715their _Execute_ stage as if they were real functions.  The only
39716difference is that clones are not visible during the _Generate Summary_
39717stage.
39718
39719 To keep function summaries updated, the callgraph interface allows an
39720optimizer to register a callback that is called every time a new clone
39721is introduced as well as when the actual function or variable is
39722generated or when a function or variable is removed.  These hooks are
39723registered in the _Generate summary_ stage and allow the pass to keep
39724its information intact until the _Execute_ stage.  The same hooks can
39725also be registered during the _Execute_ stage to keep the optimization
39726summaries updated for the _Transform_ stage.
39727
3972824.3.2 IPA references
39729---------------------
39730
39731GCC represents IPA references in the callgraph.  For a function or
39732variable `A', the _IPA reference_ is a list of all locations where the
39733address of `A' is taken and, when `A' is a variable, a list of all
39734direct stores and reads to/from `A'.  References represent an oriented
39735multi-graph on the union of nodes of the callgraph and the varpool.  See
39736`ipa-reference.c':`ipa_reference_write_optimization_summary' and
39737`ipa-reference.c':`ipa_reference_read_optimization_summary' for details.
39738
3973924.3.3 Jump functions
39740---------------------
39741
39742Suppose that an optimization pass sees a function `A' and it knows the
39743values of (some of) its arguments.  The _jump function_ describes the
39744value of a parameter of a given function call in function `A' based on
39745this knowledge.
39746
39747 Jump functions are used by several optimizations, such as the
39748inter-procedural constant propagation pass and the devirtualization
39749pass.  The inliner also uses jump functions to perform inlining of
39750callbacks.
39751
39752
39753File: gccint.info,  Node: WHOPR,  Next: Internal flags,  Prev: IPA,  Up: LTO
39754
3975524.4 Whole program assumptions, linker plugin and symbol visibilities
39756=====================================================================
39757
39758Link-time optimization gives relatively minor benefits when used alone.
39759The problem is that propagation of inter-procedural information does
39760not work well across functions and variables that are called or
39761referenced by other compilation units (such as from a dynamically
39762linked library).  We say that such functions and variables are
39763_externally visible_.
39764
39765 To make the situation even more difficult, many applications organize
39766themselves as a set of shared libraries, and the default ELF visibility
39767rules allow one to overwrite any externally visible symbol with a
39768different symbol at runtime.  This basically disables any optimizations
39769across such functions and variables, because the compiler cannot be
39770sure that the function body it is seeing is the same function body that
39771will be used at runtime.  Any function or variable not declared
39772`static' in the sources degrades the quality of inter-procedural
39773optimization.
39774
39775 To avoid this problem the compiler must assume that it sees the whole
39776program when doing link-time optimization.  Strictly speaking, the
39777whole program is rarely visible even at link-time.  Standard system
39778libraries are usually linked dynamically or not provided with the
39779link-time information.  In GCC, the whole program option
39780(`-fwhole-program') asserts that every function and variable defined in
39781the current compilation unit is static, except for function `main'
39782(note: at link time, the current unit is the union of all objects
39783compiled with LTO).  Since some functions and variables need to be
39784referenced externally, for example by another DSO or from an assembler
39785file, GCC also provides the function and variable attribute
39786`externally_visible' which can be used to disable the effect of
39787`-fwhole-program' on a specific symbol.
39788
39789 The whole program mode assumptions are slightly more complex in C++,
39790where inline functions in headers are put into _COMDAT_ sections.
39791COMDAT function and variables can be defined by multiple object files
39792and their bodies are unified at link-time and dynamic link-time.
39793COMDAT functions are changed to local only when their address is not
39794taken and thus un-sharing them with a library is not harmful.  COMDAT
39795variables always remain externally visible, however for readonly
39796variables it is assumed that their initializers cannot be overwritten
39797by a different value.
39798
39799 GCC provides the function and variable attribute `visibility' that can
39800be used to specify the visibility of externally visible symbols (or
39801alternatively an `-fdefault-visibility' command line option).  ELF
39802defines the `default', `protected', `hidden' and `internal'
39803visibilities.
39804
39805 The most commonly used is visibility is `hidden'.  It specifies that
39806the symbol cannot be referenced from outside of the current shared
39807library.  Unfortunately, this information cannot be used directly by
39808the link-time optimization in the compiler since the whole shared
39809library also might contain non-LTO objects and those are not visible to
39810the compiler.
39811
39812 GCC solves this problem using linker plugins.  A _linker plugin_ is an
39813interface to the linker that allows an external program to claim the
39814ownership of a given object file.  The linker then performs the linking
39815procedure by querying the plugin about the symbol table of the claimed
39816objects and once the linking decisions are complete, the plugin is
39817allowed to provide the final object file before the actual linking is
39818made.  The linker plugin obtains the symbol resolution information
39819which specifies which symbols provided by the claimed objects are bound
39820from the rest of a binary being linked.
39821
39822 Currently, the linker plugin  works only in combination with the Gold
39823linker, but a GNU ld implementation is under development.
39824
39825 GCC is designed to be independent of the rest of the toolchain and
39826aims to support linkers without plugin support.  For this reason it
39827does not use the linker plugin by default.  Instead, the object files
39828are examined by `collect2' before being passed to the linker and
39829objects found to have LTO sections are passed to `lto1' first.  This
39830mode does not work for library archives.  The decision on what object
39831files from the archive are needed depends on the actual linking and
39832thus GCC would have to implement the linker itself.  The resolution
39833information is missing too and thus GCC needs to make an educated guess
39834based on `-fwhole-program'.  Without the linker plugin GCC also assumes
39835that symbols are declared `hidden' and not referred by non-LTO code by
39836default.
39837
39838
39839File: gccint.info,  Node: Internal flags,  Prev: WHOPR,  Up: LTO
39840
3984124.5 Internal flags controlling `lto1'
39842======================================
39843
39844The following flags are passed into `lto1' and are not meant to be used
39845directly from the command line.
39846
39847   * -fwpa This option runs the serial part of the link-time optimizer
39848     performing the inter-procedural propagation (WPA mode).  The
39849     compiler reads in summary information from all inputs and performs
39850     an analysis based on summary information only.  It generates
39851     object files for subsequent runs of the link-time optimizer where
39852     individual object files are optimized using both summary
39853     information from the WPA mode and the actual function bodies.  It
39854     then drives the LTRANS phase.
39855
39856   * -fltrans This option runs the link-time optimizer in the
39857     local-transformation (LTRANS) mode, which reads in output from a
39858     previous run of the LTO in WPA mode.  In the LTRANS mode, LTO
39859     optimizes an object and produces the final assembly.
39860
39861   * -fltrans-output-list=FILE This option specifies a file to which
39862     the names of LTRANS output files are written.  This option is only
39863     meaningful in conjunction with `-fwpa'.
39864
39865
39866File: gccint.info,  Node: Funding,  Next: GNU Project,  Prev: LTO,  Up: Top
39867
39868Funding Free Software
39869*********************
39870
39871If you want to have more free software a few years from now, it makes
39872sense for you to help encourage people to contribute funds for its
39873development.  The most effective approach known is to encourage
39874commercial redistributors to donate.
39875
39876 Users of free software systems can boost the pace of development by
39877encouraging for-a-fee distributors to donate part of their selling price
39878to free software developers--the Free Software Foundation, and others.
39879
39880 The way to convince distributors to do this is to demand it and expect
39881it from them.  So when you compare distributors, judge them partly by
39882how much they give to free software development.  Show distributors
39883they must compete to be the one who gives the most.
39884
39885 To make this approach work, you must insist on numbers that you can
39886compare, such as, "We will donate ten dollars to the Frobnitz project
39887for each disk sold."  Don't be satisfied with a vague promise, such as
39888"A portion of the profits are donated," since it doesn't give a basis
39889for comparison.
39890
39891 Even a precise fraction "of the profits from this disk" is not very
39892meaningful, since creative accounting and unrelated business decisions
39893can greatly alter what fraction of the sales price counts as profit.
39894If the price you pay is $50, ten percent of the profit is probably less
39895than a dollar; it might be a few cents, or nothing at all.
39896
39897 Some redistributors do development work themselves.  This is useful
39898too; but to keep everyone honest, you need to inquire how much they do,
39899and what kind.  Some kinds of development make much more long-term
39900difference than others.  For example, maintaining a separate version of
39901a program contributes very little; maintaining the standard version of a
39902program for the whole community contributes much.  Easy new ports
39903contribute little, since someone else would surely do them; difficult
39904ports such as adding a new CPU to the GNU Compiler Collection
39905contribute more; major new features or packages contribute the most.
39906
39907 By establishing the idea that supporting further development is "the
39908proper thing to do" when distributing free software for a fee, we can
39909assure a steady flow of resources into making more free software.
39910
39911     Copyright (C) 1994 Free Software Foundation, Inc.
39912     Verbatim copying and redistribution of this section is permitted
39913     without royalty; alteration is not permitted.
39914
39915
39916File: gccint.info,  Node: GNU Project,  Next: Copying,  Prev: Funding,  Up: Top
39917
39918The GNU Project and GNU/Linux
39919*****************************
39920
39921The GNU Project was launched in 1984 to develop a complete Unix-like
39922operating system which is free software: the GNU system.  (GNU is a
39923recursive acronym for "GNU's Not Unix"; it is pronounced "guh-NEW".)
39924Variants of the GNU operating system, which use the kernel Linux, are
39925now widely used; though these systems are often referred to as "Linux",
39926they are more accurately called GNU/Linux systems.
39927
39928 For more information, see:
39929     `http://www.gnu.org/'
39930     `http://www.gnu.org/gnu/linux-and-gnu.html'
39931
39932
39933File: gccint.info,  Node: Copying,  Next: GNU Free Documentation License,  Prev: GNU Project,  Up: Top
39934
39935GNU General Public License
39936**************************
39937
39938                        Version 3, 29 June 2007
39939
39940     Copyright (C) 2007 Free Software Foundation, Inc. `http://fsf.org/'
39941
39942     Everyone is permitted to copy and distribute verbatim copies of this
39943     license document, but changing it is not allowed.
39944
39945Preamble
39946========
39947
39948The GNU General Public License is a free, copyleft license for software
39949and other kinds of works.
39950
39951 The licenses for most software and other practical works are designed
39952to take away your freedom to share and change the works.  By contrast,
39953the GNU General Public License is intended to guarantee your freedom to
39954share and change all versions of a program-to make sure it remains free
39955software for all its users.  We, the Free Software Foundation, use the
39956GNU General Public License for most of our software; it applies also to
39957any other work released this way by its authors.  You can apply it to
39958your programs, too.
39959
39960 When we speak of free software, we are referring to freedom, not
39961price.  Our General Public Licenses are designed to make sure that you
39962have the freedom to distribute copies of free software (and charge for
39963them if you wish), that you receive source code or can get it if you
39964want it, that you can change the software or use pieces of it in new
39965free programs, and that you know you can do these things.
39966
39967 To protect your rights, we need to prevent others from denying you
39968these rights or asking you to surrender the rights.  Therefore, you
39969have certain responsibilities if you distribute copies of the software,
39970or if you modify it: responsibilities to respect the freedom of others.
39971
39972 For example, if you distribute copies of such a program, whether
39973gratis or for a fee, you must pass on to the recipients the same
39974freedoms that you received.  You must make sure that they, too, receive
39975or can get the source code.  And you must show them these terms so they
39976know their rights.
39977
39978 Developers that use the GNU GPL protect your rights with two steps:
39979(1) assert copyright on the software, and (2) offer you this License
39980giving you legal permission to copy, distribute and/or modify it.
39981
39982 For the developers' and authors' protection, the GPL clearly explains
39983that there is no warranty for this free software.  For both users' and
39984authors' sake, the GPL requires that modified versions be marked as
39985changed, so that their problems will not be attributed erroneously to
39986authors of previous versions.
39987
39988 Some devices are designed to deny users access to install or run
39989modified versions of the software inside them, although the
39990manufacturer can do so.  This is fundamentally incompatible with the
39991aim of protecting users' freedom to change the software.  The
39992systematic pattern of such abuse occurs in the area of products for
39993individuals to use, which is precisely where it is most unacceptable.
39994Therefore, we have designed this version of the GPL to prohibit the
39995practice for those products.  If such problems arise substantially in
39996other domains, we stand ready to extend this provision to those domains
39997in future versions of the GPL, as needed to protect the freedom of
39998users.
39999
40000 Finally, every program is threatened constantly by software patents.
40001States should not allow patents to restrict development and use of
40002software on general-purpose computers, but in those that do, we wish to
40003avoid the special danger that patents applied to a free program could
40004make it effectively proprietary.  To prevent this, the GPL assures that
40005patents cannot be used to render the program non-free.
40006
40007 The precise terms and conditions for copying, distribution and
40008modification follow.
40009
40010TERMS AND CONDITIONS
40011====================
40012
40013  0. Definitions.
40014
40015     "This License" refers to version 3 of the GNU General Public
40016     License.
40017
40018     "Copyright" also means copyright-like laws that apply to other
40019     kinds of works, such as semiconductor masks.
40020
40021     "The Program" refers to any copyrightable work licensed under this
40022     License.  Each licensee is addressed as "you".  "Licensees" and
40023     "recipients" may be individuals or organizations.
40024
40025     To "modify" a work means to copy from or adapt all or part of the
40026     work in a fashion requiring copyright permission, other than the
40027     making of an exact copy.  The resulting work is called a "modified
40028     version" of the earlier work or a work "based on" the earlier work.
40029
40030     A "covered work" means either the unmodified Program or a work
40031     based on the Program.
40032
40033     To "propagate" a work means to do anything with it that, without
40034     permission, would make you directly or secondarily liable for
40035     infringement under applicable copyright law, except executing it
40036     on a computer or modifying a private copy.  Propagation includes
40037     copying, distribution (with or without modification), making
40038     available to the public, and in some countries other activities as
40039     well.
40040
40041     To "convey" a work means any kind of propagation that enables other
40042     parties to make or receive copies.  Mere interaction with a user
40043     through a computer network, with no transfer of a copy, is not
40044     conveying.
40045
40046     An interactive user interface displays "Appropriate Legal Notices"
40047     to the extent that it includes a convenient and prominently visible
40048     feature that (1) displays an appropriate copyright notice, and (2)
40049     tells the user that there is no warranty for the work (except to
40050     the extent that warranties are provided), that licensees may
40051     convey the work under this License, and how to view a copy of this
40052     License.  If the interface presents a list of user commands or
40053     options, such as a menu, a prominent item in the list meets this
40054     criterion.
40055
40056  1. Source Code.
40057
40058     The "source code" for a work means the preferred form of the work
40059     for making modifications to it.  "Object code" means any
40060     non-source form of a work.
40061
40062     A "Standard Interface" means an interface that either is an
40063     official standard defined by a recognized standards body, or, in
40064     the case of interfaces specified for a particular programming
40065     language, one that is widely used among developers working in that
40066     language.
40067
40068     The "System Libraries" of an executable work include anything,
40069     other than the work as a whole, that (a) is included in the normal
40070     form of packaging a Major Component, but which is not part of that
40071     Major Component, and (b) serves only to enable use of the work
40072     with that Major Component, or to implement a Standard Interface
40073     for which an implementation is available to the public in source
40074     code form.  A "Major Component", in this context, means a major
40075     essential component (kernel, window system, and so on) of the
40076     specific operating system (if any) on which the executable work
40077     runs, or a compiler used to produce the work, or an object code
40078     interpreter used to run it.
40079
40080     The "Corresponding Source" for a work in object code form means all
40081     the source code needed to generate, install, and (for an executable
40082     work) run the object code and to modify the work, including
40083     scripts to control those activities.  However, it does not include
40084     the work's System Libraries, or general-purpose tools or generally
40085     available free programs which are used unmodified in performing
40086     those activities but which are not part of the work.  For example,
40087     Corresponding Source includes interface definition files
40088     associated with source files for the work, and the source code for
40089     shared libraries and dynamically linked subprograms that the work
40090     is specifically designed to require, such as by intimate data
40091     communication or control flow between those subprograms and other
40092     parts of the work.
40093
40094     The Corresponding Source need not include anything that users can
40095     regenerate automatically from other parts of the Corresponding
40096     Source.
40097
40098     The Corresponding Source for a work in source code form is that
40099     same work.
40100
40101  2. Basic Permissions.
40102
40103     All rights granted under this License are granted for the term of
40104     copyright on the Program, and are irrevocable provided the stated
40105     conditions are met.  This License explicitly affirms your unlimited
40106     permission to run the unmodified Program.  The output from running
40107     a covered work is covered by this License only if the output,
40108     given its content, constitutes a covered work.  This License
40109     acknowledges your rights of fair use or other equivalent, as
40110     provided by copyright law.
40111
40112     You may make, run and propagate covered works that you do not
40113     convey, without conditions so long as your license otherwise
40114     remains in force.  You may convey covered works to others for the
40115     sole purpose of having them make modifications exclusively for
40116     you, or provide you with facilities for running those works,
40117     provided that you comply with the terms of this License in
40118     conveying all material for which you do not control copyright.
40119     Those thus making or running the covered works for you must do so
40120     exclusively on your behalf, under your direction and control, on
40121     terms that prohibit them from making any copies of your
40122     copyrighted material outside their relationship with you.
40123
40124     Conveying under any other circumstances is permitted solely under
40125     the conditions stated below.  Sublicensing is not allowed; section
40126     10 makes it unnecessary.
40127
40128  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
40129
40130     No covered work shall be deemed part of an effective technological
40131     measure under any applicable law fulfilling obligations under
40132     article 11 of the WIPO copyright treaty adopted on 20 December
40133     1996, or similar laws prohibiting or restricting circumvention of
40134     such measures.
40135
40136     When you convey a covered work, you waive any legal power to forbid
40137     circumvention of technological measures to the extent such
40138     circumvention is effected by exercising rights under this License
40139     with respect to the covered work, and you disclaim any intention
40140     to limit operation or modification of the work as a means of
40141     enforcing, against the work's users, your or third parties' legal
40142     rights to forbid circumvention of technological measures.
40143
40144  4. Conveying Verbatim Copies.
40145
40146     You may convey verbatim copies of the Program's source code as you
40147     receive it, in any medium, provided that you conspicuously and
40148     appropriately publish on each copy an appropriate copyright notice;
40149     keep intact all notices stating that this License and any
40150     non-permissive terms added in accord with section 7 apply to the
40151     code; keep intact all notices of the absence of any warranty; and
40152     give all recipients a copy of this License along with the Program.
40153
40154     You may charge any price or no price for each copy that you convey,
40155     and you may offer support or warranty protection for a fee.
40156
40157  5. Conveying Modified Source Versions.
40158
40159     You may convey a work based on the Program, or the modifications to
40160     produce it from the Program, in the form of source code under the
40161     terms of section 4, provided that you also meet all of these
40162     conditions:
40163
40164       a. The work must carry prominent notices stating that you
40165          modified it, and giving a relevant date.
40166
40167       b. The work must carry prominent notices stating that it is
40168          released under this License and any conditions added under
40169          section 7.  This requirement modifies the requirement in
40170          section 4 to "keep intact all notices".
40171
40172       c. You must license the entire work, as a whole, under this
40173          License to anyone who comes into possession of a copy.  This
40174          License will therefore apply, along with any applicable
40175          section 7 additional terms, to the whole of the work, and all
40176          its parts, regardless of how they are packaged.  This License
40177          gives no permission to license the work in any other way, but
40178          it does not invalidate such permission if you have separately
40179          received it.
40180
40181       d. If the work has interactive user interfaces, each must display
40182          Appropriate Legal Notices; however, if the Program has
40183          interactive interfaces that do not display Appropriate Legal
40184          Notices, your work need not make them do so.
40185
40186     A compilation of a covered work with other separate and independent
40187     works, which are not by their nature extensions of the covered
40188     work, and which are not combined with it such as to form a larger
40189     program, in or on a volume of a storage or distribution medium, is
40190     called an "aggregate" if the compilation and its resulting
40191     copyright are not used to limit the access or legal rights of the
40192     compilation's users beyond what the individual works permit.
40193     Inclusion of a covered work in an aggregate does not cause this
40194     License to apply to the other parts of the aggregate.
40195
40196  6. Conveying Non-Source Forms.
40197
40198     You may convey a covered work in object code form under the terms
40199     of sections 4 and 5, provided that you also convey the
40200     machine-readable Corresponding Source under the terms of this
40201     License, in one of these ways:
40202
40203       a. Convey the object code in, or embodied in, a physical product
40204          (including a physical distribution medium), accompanied by the
40205          Corresponding Source fixed on a durable physical medium
40206          customarily used for software interchange.
40207
40208       b. Convey the object code in, or embodied in, a physical product
40209          (including a physical distribution medium), accompanied by a
40210          written offer, valid for at least three years and valid for
40211          as long as you offer spare parts or customer support for that
40212          product model, to give anyone who possesses the object code
40213          either (1) a copy of the Corresponding Source for all the
40214          software in the product that is covered by this License, on a
40215          durable physical medium customarily used for software
40216          interchange, for a price no more than your reasonable cost of
40217          physically performing this conveying of source, or (2) access
40218          to copy the Corresponding Source from a network server at no
40219          charge.
40220
40221       c. Convey individual copies of the object code with a copy of
40222          the written offer to provide the Corresponding Source.  This
40223          alternative is allowed only occasionally and noncommercially,
40224          and only if you received the object code with such an offer,
40225          in accord with subsection 6b.
40226
40227       d. Convey the object code by offering access from a designated
40228          place (gratis or for a charge), and offer equivalent access
40229          to the Corresponding Source in the same way through the same
40230          place at no further charge.  You need not require recipients
40231          to copy the Corresponding Source along with the object code.
40232          If the place to copy the object code is a network server, the
40233          Corresponding Source may be on a different server (operated
40234          by you or a third party) that supports equivalent copying
40235          facilities, provided you maintain clear directions next to
40236          the object code saying where to find the Corresponding Source.
40237          Regardless of what server hosts the Corresponding Source, you
40238          remain obligated to ensure that it is available for as long
40239          as needed to satisfy these requirements.
40240
40241       e. Convey the object code using peer-to-peer transmission,
40242          provided you inform other peers where the object code and
40243          Corresponding Source of the work are being offered to the
40244          general public at no charge under subsection 6d.
40245
40246
40247     A separable portion of the object code, whose source code is
40248     excluded from the Corresponding Source as a System Library, need
40249     not be included in conveying the object code work.
40250
40251     A "User Product" is either (1) a "consumer product", which means
40252     any tangible personal property which is normally used for personal,
40253     family, or household purposes, or (2) anything designed or sold for
40254     incorporation into a dwelling.  In determining whether a product
40255     is a consumer product, doubtful cases shall be resolved in favor of
40256     coverage.  For a particular product received by a particular user,
40257     "normally used" refers to a typical or common use of that class of
40258     product, regardless of the status of the particular user or of the
40259     way in which the particular user actually uses, or expects or is
40260     expected to use, the product.  A product is a consumer product
40261     regardless of whether the product has substantial commercial,
40262     industrial or non-consumer uses, unless such uses represent the
40263     only significant mode of use of the product.
40264
40265     "Installation Information" for a User Product means any methods,
40266     procedures, authorization keys, or other information required to
40267     install and execute modified versions of a covered work in that
40268     User Product from a modified version of its Corresponding Source.
40269     The information must suffice to ensure that the continued
40270     functioning of the modified object code is in no case prevented or
40271     interfered with solely because modification has been made.
40272
40273     If you convey an object code work under this section in, or with,
40274     or specifically for use in, a User Product, and the conveying
40275     occurs as part of a transaction in which the right of possession
40276     and use of the User Product is transferred to the recipient in
40277     perpetuity or for a fixed term (regardless of how the transaction
40278     is characterized), the Corresponding Source conveyed under this
40279     section must be accompanied by the Installation Information.  But
40280     this requirement does not apply if neither you nor any third party
40281     retains the ability to install modified object code on the User
40282     Product (for example, the work has been installed in ROM).
40283
40284     The requirement to provide Installation Information does not
40285     include a requirement to continue to provide support service,
40286     warranty, or updates for a work that has been modified or
40287     installed by the recipient, or for the User Product in which it
40288     has been modified or installed.  Access to a network may be denied
40289     when the modification itself materially and adversely affects the
40290     operation of the network or violates the rules and protocols for
40291     communication across the network.
40292
40293     Corresponding Source conveyed, and Installation Information
40294     provided, in accord with this section must be in a format that is
40295     publicly documented (and with an implementation available to the
40296     public in source code form), and must require no special password
40297     or key for unpacking, reading or copying.
40298
40299  7. Additional Terms.
40300
40301     "Additional permissions" are terms that supplement the terms of
40302     this License by making exceptions from one or more of its
40303     conditions.  Additional permissions that are applicable to the
40304     entire Program shall be treated as though they were included in
40305     this License, to the extent that they are valid under applicable
40306     law.  If additional permissions apply only to part of the Program,
40307     that part may be used separately under those permissions, but the
40308     entire Program remains governed by this License without regard to
40309     the additional permissions.
40310
40311     When you convey a copy of a covered work, you may at your option
40312     remove any additional permissions from that copy, or from any part
40313     of it.  (Additional permissions may be written to require their own
40314     removal in certain cases when you modify the work.)  You may place
40315     additional permissions on material, added by you to a covered work,
40316     for which you have or can give appropriate copyright permission.
40317
40318     Notwithstanding any other provision of this License, for material
40319     you add to a covered work, you may (if authorized by the copyright
40320     holders of that material) supplement the terms of this License
40321     with terms:
40322
40323       a. Disclaiming warranty or limiting liability differently from
40324          the terms of sections 15 and 16 of this License; or
40325
40326       b. Requiring preservation of specified reasonable legal notices
40327          or author attributions in that material or in the Appropriate
40328          Legal Notices displayed by works containing it; or
40329
40330       c. Prohibiting misrepresentation of the origin of that material,
40331          or requiring that modified versions of such material be
40332          marked in reasonable ways as different from the original
40333          version; or
40334
40335       d. Limiting the use for publicity purposes of names of licensors
40336          or authors of the material; or
40337
40338       e. Declining to grant rights under trademark law for use of some
40339          trade names, trademarks, or service marks; or
40340
40341       f. Requiring indemnification of licensors and authors of that
40342          material by anyone who conveys the material (or modified
40343          versions of it) with contractual assumptions of liability to
40344          the recipient, for any liability that these contractual
40345          assumptions directly impose on those licensors and authors.
40346
40347     All other non-permissive additional terms are considered "further
40348     restrictions" within the meaning of section 10.  If the Program as
40349     you received it, or any part of it, contains a notice stating that
40350     it is governed by this License along with a term that is a further
40351     restriction, you may remove that term.  If a license document
40352     contains a further restriction but permits relicensing or
40353     conveying under this License, you may add to a covered work
40354     material governed by the terms of that license document, provided
40355     that the further restriction does not survive such relicensing or
40356     conveying.
40357
40358     If you add terms to a covered work in accord with this section, you
40359     must place, in the relevant source files, a statement of the
40360     additional terms that apply to those files, or a notice indicating
40361     where to find the applicable terms.
40362
40363     Additional terms, permissive or non-permissive, may be stated in
40364     the form of a separately written license, or stated as exceptions;
40365     the above requirements apply either way.
40366
40367  8. Termination.
40368
40369     You may not propagate or modify a covered work except as expressly
40370     provided under this License.  Any attempt otherwise to propagate or
40371     modify it is void, and will automatically terminate your rights
40372     under this License (including any patent licenses granted under
40373     the third paragraph of section 11).
40374
40375     However, if you cease all violation of this License, then your
40376     license from a particular copyright holder is reinstated (a)
40377     provisionally, unless and until the copyright holder explicitly
40378     and finally terminates your license, and (b) permanently, if the
40379     copyright holder fails to notify you of the violation by some
40380     reasonable means prior to 60 days after the cessation.
40381
40382     Moreover, your license from a particular copyright holder is
40383     reinstated permanently if the copyright holder notifies you of the
40384     violation by some reasonable means, this is the first time you have
40385     received notice of violation of this License (for any work) from
40386     that copyright holder, and you cure the violation prior to 30 days
40387     after your receipt of the notice.
40388
40389     Termination of your rights under this section does not terminate
40390     the licenses of parties who have received copies or rights from
40391     you under this License.  If your rights have been terminated and
40392     not permanently reinstated, you do not qualify to receive new
40393     licenses for the same material under section 10.
40394
40395  9. Acceptance Not Required for Having Copies.
40396
40397     You are not required to accept this License in order to receive or
40398     run a copy of the Program.  Ancillary propagation of a covered work
40399     occurring solely as a consequence of using peer-to-peer
40400     transmission to receive a copy likewise does not require
40401     acceptance.  However, nothing other than this License grants you
40402     permission to propagate or modify any covered work.  These actions
40403     infringe copyright if you do not accept this License.  Therefore,
40404     by modifying or propagating a covered work, you indicate your
40405     acceptance of this License to do so.
40406
40407 10. Automatic Licensing of Downstream Recipients.
40408
40409     Each time you convey a covered work, the recipient automatically
40410     receives a license from the original licensors, to run, modify and
40411     propagate that work, subject to this License.  You are not
40412     responsible for enforcing compliance by third parties with this
40413     License.
40414
40415     An "entity transaction" is a transaction transferring control of an
40416     organization, or substantially all assets of one, or subdividing an
40417     organization, or merging organizations.  If propagation of a
40418     covered work results from an entity transaction, each party to that
40419     transaction who receives a copy of the work also receives whatever
40420     licenses to the work the party's predecessor in interest had or
40421     could give under the previous paragraph, plus a right to
40422     possession of the Corresponding Source of the work from the
40423     predecessor in interest, if the predecessor has it or can get it
40424     with reasonable efforts.
40425
40426     You may not impose any further restrictions on the exercise of the
40427     rights granted or affirmed under this License.  For example, you
40428     may not impose a license fee, royalty, or other charge for
40429     exercise of rights granted under this License, and you may not
40430     initiate litigation (including a cross-claim or counterclaim in a
40431     lawsuit) alleging that any patent claim is infringed by making,
40432     using, selling, offering for sale, or importing the Program or any
40433     portion of it.
40434
40435 11. Patents.
40436
40437     A "contributor" is a copyright holder who authorizes use under this
40438     License of the Program or a work on which the Program is based.
40439     The work thus licensed is called the contributor's "contributor
40440     version".
40441
40442     A contributor's "essential patent claims" are all patent claims
40443     owned or controlled by the contributor, whether already acquired or
40444     hereafter acquired, that would be infringed by some manner,
40445     permitted by this License, of making, using, or selling its
40446     contributor version, but do not include claims that would be
40447     infringed only as a consequence of further modification of the
40448     contributor version.  For purposes of this definition, "control"
40449     includes the right to grant patent sublicenses in a manner
40450     consistent with the requirements of this License.
40451
40452     Each contributor grants you a non-exclusive, worldwide,
40453     royalty-free patent license under the contributor's essential
40454     patent claims, to make, use, sell, offer for sale, import and
40455     otherwise run, modify and propagate the contents of its
40456     contributor version.
40457
40458     In the following three paragraphs, a "patent license" is any
40459     express agreement or commitment, however denominated, not to
40460     enforce a patent (such as an express permission to practice a
40461     patent or covenant not to sue for patent infringement).  To
40462     "grant" such a patent license to a party means to make such an
40463     agreement or commitment not to enforce a patent against the party.
40464
40465     If you convey a covered work, knowingly relying on a patent
40466     license, and the Corresponding Source of the work is not available
40467     for anyone to copy, free of charge and under the terms of this
40468     License, through a publicly available network server or other
40469     readily accessible means, then you must either (1) cause the
40470     Corresponding Source to be so available, or (2) arrange to deprive
40471     yourself of the benefit of the patent license for this particular
40472     work, or (3) arrange, in a manner consistent with the requirements
40473     of this License, to extend the patent license to downstream
40474     recipients.  "Knowingly relying" means you have actual knowledge
40475     that, but for the patent license, your conveying the covered work
40476     in a country, or your recipient's use of the covered work in a
40477     country, would infringe one or more identifiable patents in that
40478     country that you have reason to believe are valid.
40479
40480     If, pursuant to or in connection with a single transaction or
40481     arrangement, you convey, or propagate by procuring conveyance of, a
40482     covered work, and grant a patent license to some of the parties
40483     receiving the covered work authorizing them to use, propagate,
40484     modify or convey a specific copy of the covered work, then the
40485     patent license you grant is automatically extended to all
40486     recipients of the covered work and works based on it.
40487
40488     A patent license is "discriminatory" if it does not include within
40489     the scope of its coverage, prohibits the exercise of, or is
40490     conditioned on the non-exercise of one or more of the rights that
40491     are specifically granted under this License.  You may not convey a
40492     covered work if you are a party to an arrangement with a third
40493     party that is in the business of distributing software, under
40494     which you make payment to the third party based on the extent of
40495     your activity of conveying the work, and under which the third
40496     party grants, to any of the parties who would receive the covered
40497     work from you, a discriminatory patent license (a) in connection
40498     with copies of the covered work conveyed by you (or copies made
40499     from those copies), or (b) primarily for and in connection with
40500     specific products or compilations that contain the covered work,
40501     unless you entered into that arrangement, or that patent license
40502     was granted, prior to 28 March 2007.
40503
40504     Nothing in this License shall be construed as excluding or limiting
40505     any implied license or other defenses to infringement that may
40506     otherwise be available to you under applicable patent law.
40507
40508 12. No Surrender of Others' Freedom.
40509
40510     If conditions are imposed on you (whether by court order,
40511     agreement or otherwise) that contradict the conditions of this
40512     License, they do not excuse you from the conditions of this
40513     License.  If you cannot convey a covered work so as to satisfy
40514     simultaneously your obligations under this License and any other
40515     pertinent obligations, then as a consequence you may not convey it
40516     at all.  For example, if you agree to terms that obligate you to
40517     collect a royalty for further conveying from those to whom you
40518     convey the Program, the only way you could satisfy both those
40519     terms and this License would be to refrain entirely from conveying
40520     the Program.
40521
40522 13. Use with the GNU Affero General Public License.
40523
40524     Notwithstanding any other provision of this License, you have
40525     permission to link or combine any covered work with a work licensed
40526     under version 3 of the GNU Affero General Public License into a
40527     single combined work, and to convey the resulting work.  The terms
40528     of this License will continue to apply to the part which is the
40529     covered work, but the special requirements of the GNU Affero
40530     General Public License, section 13, concerning interaction through
40531     a network will apply to the combination as such.
40532
40533 14. Revised Versions of this License.
40534
40535     The Free Software Foundation may publish revised and/or new
40536     versions of the GNU General Public License from time to time.
40537     Such new versions will be similar in spirit to the present
40538     version, but may differ in detail to address new problems or
40539     concerns.
40540
40541     Each version is given a distinguishing version number.  If the
40542     Program specifies that a certain numbered version of the GNU
40543     General Public License "or any later version" applies to it, you
40544     have the option of following the terms and conditions either of
40545     that numbered version or of any later version published by the
40546     Free Software Foundation.  If the Program does not specify a
40547     version number of the GNU General Public License, you may choose
40548     any version ever published by the Free Software Foundation.
40549
40550     If the Program specifies that a proxy can decide which future
40551     versions of the GNU General Public License can be used, that
40552     proxy's public statement of acceptance of a version permanently
40553     authorizes you to choose that version for the Program.
40554
40555     Later license versions may give you additional or different
40556     permissions.  However, no additional obligations are imposed on any
40557     author or copyright holder as a result of your choosing to follow a
40558     later version.
40559
40560 15. Disclaimer of Warranty.
40561
40562     THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
40563     APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE
40564     COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS"
40565     WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
40566     INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
40567     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE
40568     RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.
40569     SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
40570     NECESSARY SERVICING, REPAIR OR CORRECTION.
40571
40572 16. Limitation of Liability.
40573
40574     IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
40575     WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES
40576     AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU
40577     FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
40578     CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE
40579     THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA
40580     BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
40581     PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
40582     PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF
40583     THE POSSIBILITY OF SUCH DAMAGES.
40584
40585 17. Interpretation of Sections 15 and 16.
40586
40587     If the disclaimer of warranty and limitation of liability provided
40588     above cannot be given local legal effect according to their terms,
40589     reviewing courts shall apply local law that most closely
40590     approximates an absolute waiver of all civil liability in
40591     connection with the Program, unless a warranty or assumption of
40592     liability accompanies a copy of the Program in return for a fee.
40593
40594
40595END OF TERMS AND CONDITIONS
40596===========================
40597
40598How to Apply These Terms to Your New Programs
40599=============================================
40600
40601If you develop a new program, and you want it to be of the greatest
40602possible use to the public, the best way to achieve this is to make it
40603free software which everyone can redistribute and change under these
40604terms.
40605
40606 To do so, attach the following notices to the program.  It is safest
40607to attach them to the start of each source file to most effectively
40608state the exclusion of warranty; and each file should have at least the
40609"copyright" line and a pointer to where the full notice is found.
40610
40611     ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES.
40612     Copyright (C) YEAR NAME OF AUTHOR
40613
40614     This program is free software: you can redistribute it and/or modify
40615     it under the terms of the GNU General Public License as published by
40616     the Free Software Foundation, either version 3 of the License, or (at
40617     your option) any later version.
40618
40619     This program is distributed in the hope that it will be useful, but
40620     WITHOUT ANY WARRANTY; without even the implied warranty of
40621     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
40622     General Public License for more details.
40623
40624     You should have received a copy of the GNU General Public License
40625     along with this program.  If not, see `http://www.gnu.org/licenses/'.
40626
40627 Also add information on how to contact you by electronic and paper
40628mail.
40629
40630 If the program does terminal interaction, make it output a short
40631notice like this when it starts in an interactive mode:
40632
40633     PROGRAM Copyright (C) YEAR NAME OF AUTHOR
40634     This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
40635     This is free software, and you are welcome to redistribute it
40636     under certain conditions; type `show c' for details.
40637
40638 The hypothetical commands `show w' and `show c' should show the
40639appropriate parts of the General Public License.  Of course, your
40640program's commands might be different; for a GUI interface, you would
40641use an "about box".
40642
40643 You should also get your employer (if you work as a programmer) or
40644school, if any, to sign a "copyright disclaimer" for the program, if
40645necessary.  For more information on this, and how to apply and follow
40646the GNU GPL, see `http://www.gnu.org/licenses/'.
40647
40648 The GNU General Public License does not permit incorporating your
40649program into proprietary programs.  If your program is a subroutine
40650library, you may consider it more useful to permit linking proprietary
40651applications with the library.  If this is what you want to do, use the
40652GNU Lesser General Public License instead of this License.  But first,
40653please read `http://www.gnu.org/philosophy/why-not-lgpl.html'.
40654
40655
40656File: gccint.info,  Node: GNU Free Documentation License,  Next: Contributors,  Prev: Copying,  Up: Top
40657
40658GNU Free Documentation License
40659******************************
40660
40661                     Version 1.3, 3 November 2008
40662
40663     Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
40664     `http://fsf.org/'
40665
40666     Everyone is permitted to copy and distribute verbatim copies
40667     of this license document, but changing it is not allowed.
40668
40669  0. PREAMBLE
40670
40671     The purpose of this License is to make a manual, textbook, or other
40672     functional and useful document "free" in the sense of freedom: to
40673     assure everyone the effective freedom to copy and redistribute it,
40674     with or without modifying it, either commercially or
40675     noncommercially.  Secondarily, this License preserves for the
40676     author and publisher a way to get credit for their work, while not
40677     being considered responsible for modifications made by others.
40678
40679     This License is a kind of "copyleft", which means that derivative
40680     works of the document must themselves be free in the same sense.
40681     It complements the GNU General Public License, which is a copyleft
40682     license designed for free software.
40683
40684     We have designed this License in order to use it for manuals for
40685     free software, because free software needs free documentation: a
40686     free program should come with manuals providing the same freedoms
40687     that the software does.  But this License is not limited to
40688     software manuals; it can be used for any textual work, regardless
40689     of subject matter or whether it is published as a printed book.
40690     We recommend this License principally for works whose purpose is
40691     instruction or reference.
40692
40693  1. APPLICABILITY AND DEFINITIONS
40694
40695     This License applies to any manual or other work, in any medium,
40696     that contains a notice placed by the copyright holder saying it
40697     can be distributed under the terms of this License.  Such a notice
40698     grants a world-wide, royalty-free license, unlimited in duration,
40699     to use that work under the conditions stated herein.  The
40700     "Document", below, refers to any such manual or work.  Any member
40701     of the public is a licensee, and is addressed as "you".  You
40702     accept the license if you copy, modify or distribute the work in a
40703     way requiring permission under copyright law.
40704
40705     A "Modified Version" of the Document means any work containing the
40706     Document or a portion of it, either copied verbatim, or with
40707     modifications and/or translated into another language.
40708
40709     A "Secondary Section" is a named appendix or a front-matter section
40710     of the Document that deals exclusively with the relationship of the
40711     publishers or authors of the Document to the Document's overall
40712     subject (or to related matters) and contains nothing that could
40713     fall directly within that overall subject.  (Thus, if the Document
40714     is in part a textbook of mathematics, a Secondary Section may not
40715     explain any mathematics.)  The relationship could be a matter of
40716     historical connection with the subject or with related matters, or
40717     of legal, commercial, philosophical, ethical or political position
40718     regarding them.
40719
40720     The "Invariant Sections" are certain Secondary Sections whose
40721     titles are designated, as being those of Invariant Sections, in
40722     the notice that says that the Document is released under this
40723     License.  If a section does not fit the above definition of
40724     Secondary then it is not allowed to be designated as Invariant.
40725     The Document may contain zero Invariant Sections.  If the Document
40726     does not identify any Invariant Sections then there are none.
40727
40728     The "Cover Texts" are certain short passages of text that are
40729     listed, as Front-Cover Texts or Back-Cover Texts, in the notice
40730     that says that the Document is released under this License.  A
40731     Front-Cover Text may be at most 5 words, and a Back-Cover Text may
40732     be at most 25 words.
40733
40734     A "Transparent" copy of the Document means a machine-readable copy,
40735     represented in a format whose specification is available to the
40736     general public, that is suitable for revising the document
40737     straightforwardly with generic text editors or (for images
40738     composed of pixels) generic paint programs or (for drawings) some
40739     widely available drawing editor, and that is suitable for input to
40740     text formatters or for automatic translation to a variety of
40741     formats suitable for input to text formatters.  A copy made in an
40742     otherwise Transparent file format whose markup, or absence of
40743     markup, has been arranged to thwart or discourage subsequent
40744     modification by readers is not Transparent.  An image format is
40745     not Transparent if used for any substantial amount of text.  A
40746     copy that is not "Transparent" is called "Opaque".
40747
40748     Examples of suitable formats for Transparent copies include plain
40749     ASCII without markup, Texinfo input format, LaTeX input format,
40750     SGML or XML using a publicly available DTD, and
40751     standard-conforming simple HTML, PostScript or PDF designed for
40752     human modification.  Examples of transparent image formats include
40753     PNG, XCF and JPG.  Opaque formats include proprietary formats that
40754     can be read and edited only by proprietary word processors, SGML or
40755     XML for which the DTD and/or processing tools are not generally
40756     available, and the machine-generated HTML, PostScript or PDF
40757     produced by some word processors for output purposes only.
40758
40759     The "Title Page" means, for a printed book, the title page itself,
40760     plus such following pages as are needed to hold, legibly, the
40761     material this License requires to appear in the title page.  For
40762     works in formats which do not have any title page as such, "Title
40763     Page" means the text near the most prominent appearance of the
40764     work's title, preceding the beginning of the body of the text.
40765
40766     The "publisher" means any person or entity that distributes copies
40767     of the Document to the public.
40768
40769     A section "Entitled XYZ" means a named subunit of the Document
40770     whose title either is precisely XYZ or contains XYZ in parentheses
40771     following text that translates XYZ in another language.  (Here XYZ
40772     stands for a specific section name mentioned below, such as
40773     "Acknowledgements", "Dedications", "Endorsements", or "History".)
40774     To "Preserve the Title" of such a section when you modify the
40775     Document means that it remains a section "Entitled XYZ" according
40776     to this definition.
40777
40778     The Document may include Warranty Disclaimers next to the notice
40779     which states that this License applies to the Document.  These
40780     Warranty Disclaimers are considered to be included by reference in
40781     this License, but only as regards disclaiming warranties: any other
40782     implication that these Warranty Disclaimers may have is void and
40783     has no effect on the meaning of this License.
40784
40785  2. VERBATIM COPYING
40786
40787     You may copy and distribute the Document in any medium, either
40788     commercially or noncommercially, provided that this License, the
40789     copyright notices, and the license notice saying this License
40790     applies to the Document are reproduced in all copies, and that you
40791     add no other conditions whatsoever to those of this License.  You
40792     may not use technical measures to obstruct or control the reading
40793     or further copying of the copies you make or distribute.  However,
40794     you may accept compensation in exchange for copies.  If you
40795     distribute a large enough number of copies you must also follow
40796     the conditions in section 3.
40797
40798     You may also lend copies, under the same conditions stated above,
40799     and you may publicly display copies.
40800
40801  3. COPYING IN QUANTITY
40802
40803     If you publish printed copies (or copies in media that commonly
40804     have printed covers) of the Document, numbering more than 100, and
40805     the Document's license notice requires Cover Texts, you must
40806     enclose the copies in covers that carry, clearly and legibly, all
40807     these Cover Texts: Front-Cover Texts on the front cover, and
40808     Back-Cover Texts on the back cover.  Both covers must also clearly
40809     and legibly identify you as the publisher of these copies.  The
40810     front cover must present the full title with all words of the
40811     title equally prominent and visible.  You may add other material
40812     on the covers in addition.  Copying with changes limited to the
40813     covers, as long as they preserve the title of the Document and
40814     satisfy these conditions, can be treated as verbatim copying in
40815     other respects.
40816
40817     If the required texts for either cover are too voluminous to fit
40818     legibly, you should put the first ones listed (as many as fit
40819     reasonably) on the actual cover, and continue the rest onto
40820     adjacent pages.
40821
40822     If you publish or distribute Opaque copies of the Document
40823     numbering more than 100, you must either include a
40824     machine-readable Transparent copy along with each Opaque copy, or
40825     state in or with each Opaque copy a computer-network location from
40826     which the general network-using public has access to download
40827     using public-standard network protocols a complete Transparent
40828     copy of the Document, free of added material.  If you use the
40829     latter option, you must take reasonably prudent steps, when you
40830     begin distribution of Opaque copies in quantity, to ensure that
40831     this Transparent copy will remain thus accessible at the stated
40832     location until at least one year after the last time you
40833     distribute an Opaque copy (directly or through your agents or
40834     retailers) of that edition to the public.
40835
40836     It is requested, but not required, that you contact the authors of
40837     the Document well before redistributing any large number of
40838     copies, to give them a chance to provide you with an updated
40839     version of the Document.
40840
40841  4. MODIFICATIONS
40842
40843     You may copy and distribute a Modified Version of the Document
40844     under the conditions of sections 2 and 3 above, provided that you
40845     release the Modified Version under precisely this License, with
40846     the Modified Version filling the role of the Document, thus
40847     licensing distribution and modification of the Modified Version to
40848     whoever possesses a copy of it.  In addition, you must do these
40849     things in the Modified Version:
40850
40851       A. Use in the Title Page (and on the covers, if any) a title
40852          distinct from that of the Document, and from those of
40853          previous versions (which should, if there were any, be listed
40854          in the History section of the Document).  You may use the
40855          same title as a previous version if the original publisher of
40856          that version gives permission.
40857
40858       B. List on the Title Page, as authors, one or more persons or
40859          entities responsible for authorship of the modifications in
40860          the Modified Version, together with at least five of the
40861          principal authors of the Document (all of its principal
40862          authors, if it has fewer than five), unless they release you
40863          from this requirement.
40864
40865       C. State on the Title page the name of the publisher of the
40866          Modified Version, as the publisher.
40867
40868       D. Preserve all the copyright notices of the Document.
40869
40870       E. Add an appropriate copyright notice for your modifications
40871          adjacent to the other copyright notices.
40872
40873       F. Include, immediately after the copyright notices, a license
40874          notice giving the public permission to use the Modified
40875          Version under the terms of this License, in the form shown in
40876          the Addendum below.
40877
40878       G. Preserve in that license notice the full lists of Invariant
40879          Sections and required Cover Texts given in the Document's
40880          license notice.
40881
40882       H. Include an unaltered copy of this License.
40883
40884       I. Preserve the section Entitled "History", Preserve its Title,
40885          and add to it an item stating at least the title, year, new
40886          authors, and publisher of the Modified Version as given on
40887          the Title Page.  If there is no section Entitled "History" in
40888          the Document, create one stating the title, year, authors,
40889          and publisher of the Document as given on its Title Page,
40890          then add an item describing the Modified Version as stated in
40891          the previous sentence.
40892
40893       J. Preserve the network location, if any, given in the Document
40894          for public access to a Transparent copy of the Document, and
40895          likewise the network locations given in the Document for
40896          previous versions it was based on.  These may be placed in
40897          the "History" section.  You may omit a network location for a
40898          work that was published at least four years before the
40899          Document itself, or if the original publisher of the version
40900          it refers to gives permission.
40901
40902       K. For any section Entitled "Acknowledgements" or "Dedications",
40903          Preserve the Title of the section, and preserve in the
40904          section all the substance and tone of each of the contributor
40905          acknowledgements and/or dedications given therein.
40906
40907       L. Preserve all the Invariant Sections of the Document,
40908          unaltered in their text and in their titles.  Section numbers
40909          or the equivalent are not considered part of the section
40910          titles.
40911
40912       M. Delete any section Entitled "Endorsements".  Such a section
40913          may not be included in the Modified Version.
40914
40915       N. Do not retitle any existing section to be Entitled
40916          "Endorsements" or to conflict in title with any Invariant
40917          Section.
40918
40919       O. Preserve any Warranty Disclaimers.
40920
40921     If the Modified Version includes new front-matter sections or
40922     appendices that qualify as Secondary Sections and contain no
40923     material copied from the Document, you may at your option
40924     designate some or all of these sections as invariant.  To do this,
40925     add their titles to the list of Invariant Sections in the Modified
40926     Version's license notice.  These titles must be distinct from any
40927     other section titles.
40928
40929     You may add a section Entitled "Endorsements", provided it contains
40930     nothing but endorsements of your Modified Version by various
40931     parties--for example, statements of peer review or that the text
40932     has been approved by an organization as the authoritative
40933     definition of a standard.
40934
40935     You may add a passage of up to five words as a Front-Cover Text,
40936     and a passage of up to 25 words as a Back-Cover Text, to the end
40937     of the list of Cover Texts in the Modified Version.  Only one
40938     passage of Front-Cover Text and one of Back-Cover Text may be
40939     added by (or through arrangements made by) any one entity.  If the
40940     Document already includes a cover text for the same cover,
40941     previously added by you or by arrangement made by the same entity
40942     you are acting on behalf of, you may not add another; but you may
40943     replace the old one, on explicit permission from the previous
40944     publisher that added the old one.
40945
40946     The author(s) and publisher(s) of the Document do not by this
40947     License give permission to use their names for publicity for or to
40948     assert or imply endorsement of any Modified Version.
40949
40950  5. COMBINING DOCUMENTS
40951
40952     You may combine the Document with other documents released under
40953     this License, under the terms defined in section 4 above for
40954     modified versions, provided that you include in the combination
40955     all of the Invariant Sections of all of the original documents,
40956     unmodified, and list them all as Invariant Sections of your
40957     combined work in its license notice, and that you preserve all
40958     their Warranty Disclaimers.
40959
40960     The combined work need only contain one copy of this License, and
40961     multiple identical Invariant Sections may be replaced with a single
40962     copy.  If there are multiple Invariant Sections with the same name
40963     but different contents, make the title of each such section unique
40964     by adding at the end of it, in parentheses, the name of the
40965     original author or publisher of that section if known, or else a
40966     unique number.  Make the same adjustment to the section titles in
40967     the list of Invariant Sections in the license notice of the
40968     combined work.
40969
40970     In the combination, you must combine any sections Entitled
40971     "History" in the various original documents, forming one section
40972     Entitled "History"; likewise combine any sections Entitled
40973     "Acknowledgements", and any sections Entitled "Dedications".  You
40974     must delete all sections Entitled "Endorsements."
40975
40976  6. COLLECTIONS OF DOCUMENTS
40977
40978     You may make a collection consisting of the Document and other
40979     documents released under this License, and replace the individual
40980     copies of this License in the various documents with a single copy
40981     that is included in the collection, provided that you follow the
40982     rules of this License for verbatim copying of each of the
40983     documents in all other respects.
40984
40985     You may extract a single document from such a collection, and
40986     distribute it individually under this License, provided you insert
40987     a copy of this License into the extracted document, and follow
40988     this License in all other respects regarding verbatim copying of
40989     that document.
40990
40991  7. AGGREGATION WITH INDEPENDENT WORKS
40992
40993     A compilation of the Document or its derivatives with other
40994     separate and independent documents or works, in or on a volume of
40995     a storage or distribution medium, is called an "aggregate" if the
40996     copyright resulting from the compilation is not used to limit the
40997     legal rights of the compilation's users beyond what the individual
40998     works permit.  When the Document is included in an aggregate, this
40999     License does not apply to the other works in the aggregate which
41000     are not themselves derivative works of the Document.
41001
41002     If the Cover Text requirement of section 3 is applicable to these
41003     copies of the Document, then if the Document is less than one half
41004     of the entire aggregate, the Document's Cover Texts may be placed
41005     on covers that bracket the Document within the aggregate, or the
41006     electronic equivalent of covers if the Document is in electronic
41007     form.  Otherwise they must appear on printed covers that bracket
41008     the whole aggregate.
41009
41010  8. TRANSLATION
41011
41012     Translation is considered a kind of modification, so you may
41013     distribute translations of the Document under the terms of section
41014     4.  Replacing Invariant Sections with translations requires special
41015     permission from their copyright holders, but you may include
41016     translations of some or all Invariant Sections in addition to the
41017     original versions of these Invariant Sections.  You may include a
41018     translation of this License, and all the license notices in the
41019     Document, and any Warranty Disclaimers, provided that you also
41020     include the original English version of this License and the
41021     original versions of those notices and disclaimers.  In case of a
41022     disagreement between the translation and the original version of
41023     this License or a notice or disclaimer, the original version will
41024     prevail.
41025
41026     If a section in the Document is Entitled "Acknowledgements",
41027     "Dedications", or "History", the requirement (section 4) to
41028     Preserve its Title (section 1) will typically require changing the
41029     actual title.
41030
41031  9. TERMINATION
41032
41033     You may not copy, modify, sublicense, or distribute the Document
41034     except as expressly provided under this License.  Any attempt
41035     otherwise to copy, modify, sublicense, or distribute it is void,
41036     and will automatically terminate your rights under this License.
41037
41038     However, if you cease all violation of this License, then your
41039     license from a particular copyright holder is reinstated (a)
41040     provisionally, unless and until the copyright holder explicitly
41041     and finally terminates your license, and (b) permanently, if the
41042     copyright holder fails to notify you of the violation by some
41043     reasonable means prior to 60 days after the cessation.
41044
41045     Moreover, your license from a particular copyright holder is
41046     reinstated permanently if the copyright holder notifies you of the
41047     violation by some reasonable means, this is the first time you have
41048     received notice of violation of this License (for any work) from
41049     that copyright holder, and you cure the violation prior to 30 days
41050     after your receipt of the notice.
41051
41052     Termination of your rights under this section does not terminate
41053     the licenses of parties who have received copies or rights from
41054     you under this License.  If your rights have been terminated and
41055     not permanently reinstated, receipt of a copy of some or all of
41056     the same material does not give you any rights to use it.
41057
41058 10. FUTURE REVISIONS OF THIS LICENSE
41059
41060     The Free Software Foundation may publish new, revised versions of
41061     the GNU Free Documentation License from time to time.  Such new
41062     versions will be similar in spirit to the present version, but may
41063     differ in detail to address new problems or concerns.  See
41064     `http://www.gnu.org/copyleft/'.
41065
41066     Each version of the License is given a distinguishing version
41067     number.  If the Document specifies that a particular numbered
41068     version of this License "or any later version" applies to it, you
41069     have the option of following the terms and conditions either of
41070     that specified version or of any later version that has been
41071     published (not as a draft) by the Free Software Foundation.  If
41072     the Document does not specify a version number of this License,
41073     you may choose any version ever published (not as a draft) by the
41074     Free Software Foundation.  If the Document specifies that a proxy
41075     can decide which future versions of this License can be used, that
41076     proxy's public statement of acceptance of a version permanently
41077     authorizes you to choose that version for the Document.
41078
41079 11. RELICENSING
41080
41081     "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
41082     World Wide Web server that publishes copyrightable works and also
41083     provides prominent facilities for anybody to edit those works.  A
41084     public wiki that anybody can edit is an example of such a server.
41085     A "Massive Multiauthor Collaboration" (or "MMC") contained in the
41086     site means any set of copyrightable works thus published on the MMC
41087     site.
41088
41089     "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
41090     license published by Creative Commons Corporation, a not-for-profit
41091     corporation with a principal place of business in San Francisco,
41092     California, as well as future copyleft versions of that license
41093     published by that same organization.
41094
41095     "Incorporate" means to publish or republish a Document, in whole or
41096     in part, as part of another Document.
41097
41098     An MMC is "eligible for relicensing" if it is licensed under this
41099     License, and if all works that were first published under this
41100     License somewhere other than this MMC, and subsequently
41101     incorporated in whole or in part into the MMC, (1) had no cover
41102     texts or invariant sections, and (2) were thus incorporated prior
41103     to November 1, 2008.
41104
41105     The operator of an MMC Site may republish an MMC contained in the
41106     site under CC-BY-SA on the same site at any time before August 1,
41107     2009, provided the MMC is eligible for relicensing.
41108
41109
41110ADDENDUM: How to use this License for your documents
41111====================================================
41112
41113To use this License in a document you have written, include a copy of
41114the License in the document and put the following copyright and license
41115notices just after the title page:
41116
41117       Copyright (C)  YEAR  YOUR NAME.
41118       Permission is granted to copy, distribute and/or modify this document
41119       under the terms of the GNU Free Documentation License, Version 1.3
41120       or any later version published by the Free Software Foundation;
41121       with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
41122       Texts.  A copy of the license is included in the section entitled ``GNU
41123       Free Documentation License''.
41124
41125 If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
41126replace the "with...Texts." line with this:
41127
41128         with the Invariant Sections being LIST THEIR TITLES, with
41129         the Front-Cover Texts being LIST, and with the Back-Cover Texts
41130         being LIST.
41131
41132 If you have Invariant Sections without Cover Texts, or some other
41133combination of the three, merge those two alternatives to suit the
41134situation.
41135
41136 If your document contains nontrivial examples of program code, we
41137recommend releasing these examples in parallel under your choice of
41138free software license, such as the GNU General Public License, to
41139permit their use in free software.
41140
41141
41142File: gccint.info,  Node: Contributors,  Next: Option Index,  Prev: GNU Free Documentation License,  Up: Top
41143
41144Contributors to GCC
41145*******************
41146
41147The GCC project would like to thank its many contributors.  Without
41148them the project would not have been nearly as successful as it has
41149been.  Any omissions in this list are accidental.  Feel free to contact
41150<law@redhat.com> or <gerald@pfeifer.com> if you have been left out or
41151some of your contributions are not listed.  Please keep this list in
41152alphabetical order.
41153
41154   * Analog Devices helped implement the support for complex data types
41155     and iterators.
41156
41157   * John David Anglin for threading-related fixes and improvements to
41158     libstdc++-v3, and the HP-UX port.
41159
41160   * James van Artsdalen wrote the code that makes efficient use of the
41161     Intel 80387 register stack.
41162
41163   * Abramo and Roberto Bagnara for the SysV68 Motorola 3300 Delta
41164     Series port.
41165
41166   * Alasdair Baird for various bug fixes.
41167
41168   * Giovanni Bajo for analyzing lots of complicated C++ problem
41169     reports.
41170
41171   * Peter Barada for his work to improve code generation for new
41172     ColdFire cores.
41173
41174   * Gerald Baumgartner added the signature extension to the C++ front
41175     end.
41176
41177   * Godmar Back for his Java improvements and encouragement.
41178
41179   * Scott Bambrough for help porting the Java compiler.
41180
41181   * Wolfgang Bangerth for processing tons of bug reports.
41182
41183   * Jon Beniston for his Microsoft Windows port of Java and port to
41184     Lattice Mico32.
41185
41186   * Daniel Berlin for better DWARF2 support, faster/better
41187     optimizations, improved alias analysis, plus migrating GCC to
41188     Bugzilla.
41189
41190   * Geoff Berry for his Java object serialization work and various
41191     patches.
41192
41193   * David Binderman tests weekly snapshots of GCC trunk against Fedora
41194     Rawhide for several architectures.
41195
41196   * Uros Bizjak for the implementation of x87 math built-in functions
41197     and for various middle end and i386 back end improvements and bug
41198     fixes.
41199
41200   * Eric Blake for helping to make GCJ and libgcj conform to the
41201     specifications.
41202
41203   * Janne Blomqvist for contributions to GNU Fortran.
41204
41205   * Segher Boessenkool for various fixes.
41206
41207   * Hans-J. Boehm for his garbage collector, IA-64 libffi port, and
41208     other Java work.
41209
41210   * Neil Booth for work on cpplib, lang hooks, debug hooks and other
41211     miscellaneous clean-ups.
41212
41213   * Steven Bosscher for integrating the GNU Fortran front end into GCC
41214     and for contributing to the tree-ssa branch.
41215
41216   * Eric Botcazou for fixing middle- and backend bugs left and right.
41217
41218   * Per Bothner for his direction via the steering committee and
41219     various improvements to the infrastructure for supporting new
41220     languages.  Chill front end implementation.  Initial
41221     implementations of cpplib, fix-header, config.guess, libio, and
41222     past C++ library (libg++) maintainer.  Dreaming up, designing and
41223     implementing much of GCJ.
41224
41225   * Devon Bowen helped port GCC to the Tahoe.
41226
41227   * Don Bowman for mips-vxworks contributions.
41228
41229   * Dave Brolley for work on cpplib and Chill.
41230
41231   * Paul Brook for work on the ARM architecture and maintaining GNU
41232     Fortran.
41233
41234   * Robert Brown implemented the support for Encore 32000 systems.
41235
41236   * Christian Bruel for improvements to local store elimination.
41237
41238   * Herman A.J. ten Brugge for various fixes.
41239
41240   * Joerg Brunsmann for Java compiler hacking and help with the GCJ
41241     FAQ.
41242
41243   * Joe Buck for his direction via the steering committee.
41244
41245   * Craig Burley for leadership of the G77 Fortran effort.
41246
41247   * Stephan Buys for contributing Doxygen notes for libstdc++.
41248
41249   * Paolo Carlini for libstdc++ work: lots of efficiency improvements
41250     to the C++ strings, streambufs and formatted I/O, hard detective
41251     work on the frustrating localization issues, and keeping up with
41252     the problem reports.
41253
41254   * John Carr for his alias work, SPARC hacking, infrastructure
41255     improvements, previous contributions to the steering committee,
41256     loop optimizations, etc.
41257
41258   * Stephane Carrez for 68HC11 and 68HC12 ports.
41259
41260   * Steve Chamberlain for support for the Renesas SH and H8 processors
41261     and the PicoJava processor, and for GCJ config fixes.
41262
41263   * Glenn Chambers for help with the GCJ FAQ.
41264
41265   * John-Marc Chandonia for various libgcj patches.
41266
41267   * Denis Chertykov for contributing and maintaining the AVR port, the
41268     first GCC port for an 8-bit architecture.
41269
41270   * Scott Christley for his Objective-C contributions.
41271
41272   * Eric Christopher for his Java porting help and clean-ups.
41273
41274   * Branko Cibej for more warning contributions.
41275
41276   * The GNU Classpath project for all of their merged runtime code.
41277
41278   * Nick Clifton for arm, mcore, fr30, v850, m32r, rx work, `--help',
41279     and other random hacking.
41280
41281   * Michael Cook for libstdc++ cleanup patches to reduce warnings.
41282
41283   * R. Kelley Cook for making GCC buildable from a read-only directory
41284     as well as other miscellaneous build process and documentation
41285     clean-ups.
41286
41287   * Ralf Corsepius for SH testing and minor bug fixing.
41288
41289   * Stan Cox for care and feeding of the x86 port and lots of behind
41290     the scenes hacking.
41291
41292   * Alex Crain provided changes for the 3b1.
41293
41294   * Ian Dall for major improvements to the NS32k port.
41295
41296   * Paul Dale for his work to add uClinux platform support to the m68k
41297     backend.
41298
41299   * Dario Dariol contributed the four varieties of sample programs
41300     that print a copy of their source.
41301
41302   * Russell Davidson for fstream and stringstream fixes in libstdc++.
41303
41304   * Bud Davis for work on the G77 and GNU Fortran compilers.
41305
41306   * Mo DeJong for GCJ and libgcj bug fixes.
41307
41308   * DJ Delorie for the DJGPP port, build and libiberty maintenance,
41309     various bug fixes, and the M32C, MeP, and RL78 ports.
41310
41311   * Arnaud Desitter for helping to debug GNU Fortran.
41312
41313   * Gabriel Dos Reis for contributions to G++, contributions and
41314     maintenance of GCC diagnostics infrastructure, libstdc++-v3,
41315     including `valarray<>', `complex<>', maintaining the numerics
41316     library (including that pesky `<limits>' :-) and keeping
41317     up-to-date anything to do with numbers.
41318
41319   * Ulrich Drepper for his work on glibc, testing of GCC using glibc,
41320     ISO C99 support, CFG dumping support, etc., plus support of the
41321     C++ runtime libraries including for all kinds of C interface
41322     issues, contributing and maintaining `complex<>', sanity checking
41323     and disbursement, configuration architecture, libio maintenance,
41324     and early math work.
41325
41326   * Zdenek Dvorak for a new loop unroller and various fixes.
41327
41328   * Michael Eager for his work on the Xilinx MicroBlaze port.
41329
41330   * Richard Earnshaw for his ongoing work with the ARM.
41331
41332   * David Edelsohn for his direction via the steering committee,
41333     ongoing work with the RS6000/PowerPC port, help cleaning up Haifa
41334     loop changes, doing the entire AIX port of libstdc++ with his bare
41335     hands, and for ensuring GCC properly keeps working on AIX.
41336
41337   * Kevin Ediger for the floating point formatting of num_put::do_put
41338     in libstdc++.
41339
41340   * Phil Edwards for libstdc++ work including configuration hackery,
41341     documentation maintainer, chief breaker of the web pages, the
41342     occasional iostream bug fix, and work on shared library symbol
41343     versioning.
41344
41345   * Paul Eggert for random hacking all over GCC.
41346
41347   * Mark Elbrecht for various DJGPP improvements, and for libstdc++
41348     configuration support for locales and fstream-related fixes.
41349
41350   * Vadim Egorov for libstdc++ fixes in strings, streambufs, and
41351     iostreams.
41352
41353   * Christian Ehrhardt for dealing with bug reports.
41354
41355   * Ben Elliston for his work to move the Objective-C runtime into its
41356     own subdirectory and for his work on autoconf.
41357
41358   * Revital Eres for work on the PowerPC 750CL port.
41359
41360   * Marc Espie for OpenBSD support.
41361
41362   * Doug Evans for much of the global optimization framework, arc,
41363     m32r, and SPARC work.
41364
41365   * Christopher Faylor for his work on the Cygwin port and for caring
41366     and feeding the gcc.gnu.org box and saving its users tons of spam.
41367
41368   * Fred Fish for BeOS support and Ada fixes.
41369
41370   * Ivan Fontes Garcia for the Portuguese translation of the GCJ FAQ.
41371
41372   * Peter Gerwinski for various bug fixes and the Pascal front end.
41373
41374   * Kaveh R. Ghazi for his direction via the steering committee,
41375     amazing work to make `-W -Wall -W* -Werror' useful, and testing
41376     GCC on a plethora of platforms.  Kaveh extends his gratitude to
41377     the CAIP Center at Rutgers University for providing him with
41378     computing resources to work on Free Software from the late 1980s
41379     to 2010.
41380
41381   * John Gilmore for a donation to the FSF earmarked improving GNU
41382     Java.
41383
41384   * Judy Goldberg for c++ contributions.
41385
41386   * Torbjorn Granlund for various fixes and the c-torture testsuite,
41387     multiply- and divide-by-constant optimization, improved long long
41388     support, improved leaf function register allocation, and his
41389     direction via the steering committee.
41390
41391   * Anthony Green for his `-Os' contributions, the moxie port, and
41392     Java front end work.
41393
41394   * Stu Grossman for gdb hacking, allowing GCJ developers to debug
41395     Java code.
41396
41397   * Michael K. Gschwind contributed the port to the PDP-11.
41398
41399   * Richard Guenther for his ongoing middle-end contributions and bug
41400     fixes and for release management.
41401
41402   * Ron Guilmette implemented the `protoize' and `unprotoize' tools,
41403     the support for Dwarf symbolic debugging information, and much of
41404     the support for System V Release 4.  He has also worked heavily on
41405     the Intel 386 and 860 support.
41406
41407   * Sumanth Gundapaneni for contributing the CR16 port.
41408
41409   * Mostafa Hagog for Swing Modulo Scheduling (SMS) and post reload
41410     GCSE.
41411
41412   * Bruno Haible for improvements in the runtime overhead for EH, new
41413     warnings and assorted bug fixes.
41414
41415   * Andrew Haley for his amazing Java compiler and library efforts.
41416
41417   * Chris Hanson assisted in making GCC work on HP-UX for the 9000
41418     series 300.
41419
41420   * Michael Hayes for various thankless work he's done trying to get
41421     the c30/c40 ports functional.  Lots of loop and unroll
41422     improvements and fixes.
41423
41424   * Dara Hazeghi for wading through myriads of target-specific bug
41425     reports.
41426
41427   * Kate Hedstrom for staking the G77 folks with an initial testsuite.
41428
41429   * Richard Henderson for his ongoing SPARC, alpha, ia32, and ia64
41430     work, loop opts, and generally fixing lots of old problems we've
41431     ignored for years, flow rewrite and lots of further stuff,
41432     including reviewing tons of patches.
41433
41434   * Aldy Hernandez for working on the PowerPC port, SIMD support, and
41435     various fixes.
41436
41437   * Nobuyuki Hikichi of Software Research Associates, Tokyo,
41438     contributed the support for the Sony NEWS machine.
41439
41440   * Kazu Hirata for caring and feeding the Renesas H8/300 port and
41441     various fixes.
41442
41443   * Katherine Holcomb for work on GNU Fortran.
41444
41445   * Manfred Hollstein for his ongoing work to keep the m88k alive, lots
41446     of testing and bug fixing, particularly of GCC configury code.
41447
41448   * Steve Holmgren for MachTen patches.
41449
41450   * Mat Hostetter for work on the TILE-Gx and TILEPro ports.
41451
41452   * Jan Hubicka for his x86 port improvements.
41453
41454   * Falk Hueffner for working on C and optimization bug reports.
41455
41456   * Bernardo Innocenti for his m68k work, including merging of
41457     ColdFire improvements and uClinux support.
41458
41459   * Christian Iseli for various bug fixes.
41460
41461   * Kamil Iskra for general m68k hacking.
41462
41463   * Lee Iverson for random fixes and MIPS testing.
41464
41465   * Andreas Jaeger for testing and benchmarking of GCC and various bug
41466     fixes.
41467
41468   * Jakub Jelinek for his SPARC work and sibling call optimizations as
41469     well as lots of bug fixes and test cases, and for improving the
41470     Java build system.
41471
41472   * Janis Johnson for ia64 testing and fixes, her quality improvement
41473     sidetracks, and web page maintenance.
41474
41475   * Kean Johnston for SCO OpenServer support and various fixes.
41476
41477   * Tim Josling for the sample language treelang based originally on
41478     Richard Kenner's "toy" language.
41479
41480   * Nicolai Josuttis for additional libstdc++ documentation.
41481
41482   * Klaus Kaempf for his ongoing work to make alpha-vms a viable
41483     target.
41484
41485   * Steven G. Kargl for work on GNU Fortran.
41486
41487   * David Kashtan of SRI adapted GCC to VMS.
41488
41489   * Ryszard Kabatek for many, many libstdc++ bug fixes and
41490     optimizations of strings, especially member functions, and for
41491     auto_ptr fixes.
41492
41493   * Geoffrey Keating for his ongoing work to make the PPC work for
41494     GNU/Linux and his automatic regression tester.
41495
41496   * Brendan Kehoe for his ongoing work with G++ and for a lot of early
41497     work in just about every part of libstdc++.
41498
41499   * Oliver M. Kellogg of Deutsche Aerospace contributed the port to the
41500     MIL-STD-1750A.
41501
41502   * Richard Kenner of the New York University Ultracomputer Research
41503     Laboratory wrote the machine descriptions for the AMD 29000, the
41504     DEC Alpha, the IBM RT PC, and the IBM RS/6000 as well as the
41505     support for instruction attributes.  He also made changes to
41506     better support RISC processors including changes to common
41507     subexpression elimination, strength reduction, function calling
41508     sequence handling, and condition code support, in addition to
41509     generalizing the code for frame pointer elimination and delay slot
41510     scheduling.  Richard Kenner was also the head maintainer of GCC
41511     for several years.
41512
41513   * Mumit Khan for various contributions to the Cygwin and Mingw32
41514     ports and maintaining binary releases for Microsoft Windows hosts,
41515     and for massive libstdc++ porting work to Cygwin/Mingw32.
41516
41517   * Robin Kirkham for cpu32 support.
41518
41519   * Mark Klein for PA improvements.
41520
41521   * Thomas Koenig for various bug fixes.
41522
41523   * Bruce Korb for the new and improved fixincludes code.
41524
41525   * Benjamin Kosnik for his G++ work and for leading the libstdc++-v3
41526     effort.
41527
41528   * Charles LaBrec contributed the support for the Integrated Solutions
41529     68020 system.
41530
41531   * Asher Langton and Mike Kumbera for contributing Cray pointer
41532     support to GNU Fortran, and for other GNU Fortran improvements.
41533
41534   * Jeff Law for his direction via the steering committee,
41535     coordinating the entire egcs project and GCC 2.95, rolling out
41536     snapshots and releases, handling merges from GCC2, reviewing tons
41537     of patches that might have fallen through the cracks else, and
41538     random but extensive hacking.
41539
41540   * Walter Lee for work on the TILE-Gx and TILEPro ports.
41541
41542   * Marc Lehmann for his direction via the steering committee and
41543     helping with analysis and improvements of x86 performance.
41544
41545   * Victor Leikehman for work on GNU Fortran.
41546
41547   * Ted Lemon wrote parts of the RTL reader and printer.
41548
41549   * Kriang Lerdsuwanakij for C++ improvements including template as
41550     template parameter support, and many C++ fixes.
41551
41552   * Warren Levy for tremendous work on libgcj (Java Runtime Library)
41553     and random work on the Java front end.
41554
41555   * Alain Lichnewsky ported GCC to the MIPS CPU.
41556
41557   * Oskar Liljeblad for hacking on AWT and his many Java bug reports
41558     and patches.
41559
41560   * Robert Lipe for OpenServer support, new testsuites, testing, etc.
41561
41562   * Chen Liqin for various S+core related fixes/improvement, and for
41563     maintaining the S+core port.
41564
41565   * Weiwen Liu for testing and various bug fixes.
41566
41567   * Manuel Lo'pez-Iba'n~ez for improving `-Wconversion' and many other
41568     diagnostics fixes and improvements.
41569
41570   * Dave Love for his ongoing work with the Fortran front end and
41571     runtime libraries.
41572
41573   * Martin von Lo"wis for internal consistency checking infrastructure,
41574     various C++ improvements including namespace support, and tons of
41575     assistance with libstdc++/compiler merges.
41576
41577   * H.J. Lu for his previous contributions to the steering committee,
41578     many x86 bug reports, prototype patches, and keeping the GNU/Linux
41579     ports working.
41580
41581   * Greg McGary for random fixes and (someday) bounded pointers.
41582
41583   * Andrew MacLeod for his ongoing work in building a real EH system,
41584     various code generation improvements, work on the global
41585     optimizer, etc.
41586
41587   * Vladimir Makarov for hacking some ugly i960 problems, PowerPC
41588     hacking improvements to compile-time performance, overall
41589     knowledge and direction in the area of instruction scheduling, and
41590     design and implementation of the automaton based instruction
41591     scheduler.
41592
41593   * Bob Manson for his behind the scenes work on dejagnu.
41594
41595   * Philip Martin for lots of libstdc++ string and vector iterator
41596     fixes and improvements, and string clean up and testsuites.
41597
41598   * All of the Mauve project contributors, for Java test code.
41599
41600   * Bryce McKinlay for numerous GCJ and libgcj fixes and improvements.
41601
41602   * Adam Megacz for his work on the Microsoft Windows port of GCJ.
41603
41604   * Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS,
41605     powerpc, haifa, ECOFF debug support, and other assorted hacking.
41606
41607   * Jason Merrill for his direction via the steering committee and
41608     leading the G++ effort.
41609
41610   * Martin Michlmayr for testing GCC on several architectures using the
41611     entire Debian archive.
41612
41613   * David Miller for his direction via the steering committee, lots of
41614     SPARC work, improvements in jump.c and interfacing with the Linux
41615     kernel developers.
41616
41617   * Gary Miller ported GCC to Charles River Data Systems machines.
41618
41619   * Alfred Minarik for libstdc++ string and ios bug fixes, and turning
41620     the entire libstdc++ testsuite namespace-compatible.
41621
41622   * Mark Mitchell for his direction via the steering committee,
41623     mountains of C++ work, load/store hoisting out of loops, alias
41624     analysis improvements, ISO C `restrict' support, and serving as
41625     release manager from 2000 to 2011.
41626
41627   * Alan Modra for various GNU/Linux bits and testing.
41628
41629   * Toon Moene for his direction via the steering committee, Fortran
41630     maintenance, and his ongoing work to make us make Fortran run fast.
41631
41632   * Jason Molenda for major help in the care and feeding of all the
41633     services on the gcc.gnu.org (formerly egcs.cygnus.com)
41634     machine--mail, web services, ftp services, etc etc.  Doing all
41635     this work on scrap paper and the backs of envelopes would have
41636     been... difficult.
41637
41638   * Catherine Moore for fixing various ugly problems we have sent her
41639     way, including the haifa bug which was killing the Alpha & PowerPC
41640     Linux kernels.
41641
41642   * Mike Moreton for his various Java patches.
41643
41644   * David Mosberger-Tang for various Alpha improvements, and for the
41645     initial IA-64 port.
41646
41647   * Stephen Moshier contributed the floating point emulator that
41648     assists in cross-compilation and permits support for floating
41649     point numbers wider than 64 bits and for ISO C99 support.
41650
41651   * Bill Moyer for his behind the scenes work on various issues.
41652
41653   * Philippe De Muyter for his work on the m68k port.
41654
41655   * Joseph S. Myers for his work on the PDP-11 port, format checking
41656     and ISO C99 support, and continuous emphasis on (and contributions
41657     to) documentation.
41658
41659   * Nathan Myers for his work on libstdc++-v3: architecture and
41660     authorship through the first three snapshots, including
41661     implementation of locale infrastructure, string, shadow C headers,
41662     and the initial project documentation (DESIGN, CHECKLIST, and so
41663     forth).  Later, more work on MT-safe string and shadow headers.
41664
41665   * Felix Natter for documentation on porting libstdc++.
41666
41667   * Nathanael Nerode for cleaning up the configuration/build process.
41668
41669   * NeXT, Inc. donated the front end that supports the Objective-C
41670     language.
41671
41672   * Hans-Peter Nilsson for the CRIS and MMIX ports, improvements to
41673     the search engine setup, various documentation fixes and other
41674     small fixes.
41675
41676   * Geoff Noer for his work on getting cygwin native builds working.
41677
41678   * Diego Novillo for his work on Tree SSA, OpenMP, SPEC performance
41679     tracking web pages, GIMPLE tuples, and assorted fixes.
41680
41681   * David O'Brien for the FreeBSD/alpha, FreeBSD/AMD x86-64,
41682     FreeBSD/ARM, FreeBSD/PowerPC, and FreeBSD/SPARC64 ports and
41683     related infrastructure improvements.
41684
41685   * Alexandre Oliva for various build infrastructure improvements,
41686     scripts and amazing testing work, including keeping libtool issues
41687     sane and happy.
41688
41689   * Stefan Olsson for work on mt_alloc.
41690
41691   * Melissa O'Neill for various NeXT fixes.
41692
41693   * Rainer Orth for random MIPS work, including improvements to GCC's
41694     o32 ABI support, improvements to dejagnu's MIPS support, Java
41695     configuration clean-ups and porting work, and maintaining the
41696     IRIX, Solaris 2, and Tru64 UNIX ports.
41697
41698   * Hartmut Penner for work on the s390 port.
41699
41700   * Paul Petersen wrote the machine description for the Alliant FX/8.
41701
41702   * Alexandre Petit-Bianco for implementing much of the Java compiler
41703     and continued Java maintainership.
41704
41705   * Matthias Pfaller for major improvements to the NS32k port.
41706
41707   * Gerald Pfeifer for his direction via the steering committee,
41708     pointing out lots of problems we need to solve, maintenance of the
41709     web pages, and taking care of documentation maintenance in general.
41710
41711   * Andrew Pinski for processing bug reports by the dozen.
41712
41713   * Ovidiu Predescu for his work on the Objective-C front end and
41714     runtime libraries.
41715
41716   * Jerry Quinn for major performance improvements in C++ formatted
41717     I/O.
41718
41719   * Ken Raeburn for various improvements to checker, MIPS ports and
41720     various cleanups in the compiler.
41721
41722   * Rolf W. Rasmussen for hacking on AWT.
41723
41724   * David Reese of Sun Microsystems contributed to the Solaris on
41725     PowerPC port.
41726
41727   * Volker Reichelt for keeping up with the problem reports.
41728
41729   * Joern Rennecke for maintaining the sh port, loop, regmove & reload
41730     hacking and developing and maintaining the Epiphany port.
41731
41732   * Loren J. Rittle for improvements to libstdc++-v3 including the
41733     FreeBSD port, threading fixes, thread-related configury changes,
41734     critical threading documentation, and solutions to really tricky
41735     I/O problems, as well as keeping GCC properly working on FreeBSD
41736     and continuous testing.
41737
41738   * Craig Rodrigues for processing tons of bug reports.
41739
41740   * Ola Ro"nnerup for work on mt_alloc.
41741
41742   * Gavin Romig-Koch for lots of behind the scenes MIPS work.
41743
41744   * David Ronis inspired and encouraged Craig to rewrite the G77
41745     documentation in texinfo format by contributing a first pass at a
41746     translation of the old `g77-0.5.16/f/DOC' file.
41747
41748   * Ken Rose for fixes to GCC's delay slot filling code.
41749
41750   * Paul Rubin wrote most of the preprocessor.
41751
41752   * Pe'tur Runo'lfsson for major performance improvements in C++
41753     formatted I/O and large file support in C++ filebuf.
41754
41755   * Chip Salzenberg for libstdc++ patches and improvements to locales,
41756     traits, Makefiles, libio, libtool hackery, and "long long" support.
41757
41758   * Juha Sarlin for improvements to the H8 code generator.
41759
41760   * Greg Satz assisted in making GCC work on HP-UX for the 9000 series
41761     300.
41762
41763   * Roger Sayle for improvements to constant folding and GCC's RTL
41764     optimizers as well as for fixing numerous bugs.
41765
41766   * Bradley Schatz for his work on the GCJ FAQ.
41767
41768   * Peter Schauer wrote the code to allow debugging to work on the
41769     Alpha.
41770
41771   * William Schelter did most of the work on the Intel 80386 support.
41772
41773   * Tobias Schlu"ter for work on GNU Fortran.
41774
41775   * Bernd Schmidt for various code generation improvements and major
41776     work in the reload pass, serving as release manager for GCC
41777     2.95.3, and work on the Blackfin and C6X ports.
41778
41779   * Peter Schmid for constant testing of libstdc++--especially
41780     application testing, going above and beyond what was requested for
41781     the release criteria--and libstdc++ header file tweaks.
41782
41783   * Jason Schroeder for jcf-dump patches.
41784
41785   * Andreas Schwab for his work on the m68k port.
41786
41787   * Lars Segerlund for work on GNU Fortran.
41788
41789   * Dodji Seketeli for numerous C++ bug fixes and debug info
41790     improvements.
41791
41792   * Joel Sherrill for his direction via the steering committee, RTEMS
41793     contributions and RTEMS testing.
41794
41795   * Nathan Sidwell for many C++ fixes/improvements.
41796
41797   * Jeffrey Siegal for helping RMS with the original design of GCC,
41798     some code which handles the parse tree and RTL data structures,
41799     constant folding and help with the original VAX & m68k ports.
41800
41801   * Kenny Simpson for prompting libstdc++ fixes due to defect reports
41802     from the LWG (thereby keeping GCC in line with updates from the
41803     ISO).
41804
41805   * Franz Sirl for his ongoing work with making the PPC port stable
41806     for GNU/Linux.
41807
41808   * Andrey Slepuhin for assorted AIX hacking.
41809
41810   * Trevor Smigiel for contributing the SPU port.
41811
41812   * Christopher Smith did the port for Convex machines.
41813
41814   * Danny Smith for his major efforts on the Mingw (and Cygwin) ports.
41815
41816   * Randy Smith finished the Sun FPA support.
41817
41818   * Scott Snyder for queue, iterator, istream, and string fixes and
41819     libstdc++ testsuite entries.  Also for providing the patch to G77
41820     to add rudimentary support for `INTEGER*1', `INTEGER*2', and
41821     `LOGICAL*1'.
41822
41823   * Zdenek Sojka for running automated regression testing of GCC and
41824     reporting numerous bugs.
41825
41826   * Jayant Sonar for contributing the CR16 port.
41827
41828   * Brad Spencer for contributions to the GLIBCPP_FORCE_NEW technique.
41829
41830   * Richard Stallman, for writing the original GCC and launching the
41831     GNU project.
41832
41833   * Jan Stein of the Chalmers Computer Society provided support for
41834     Genix, as well as part of the 32000 machine description.
41835
41836   * Nigel Stephens for various mips16 related fixes/improvements.
41837
41838   * Jonathan Stone wrote the machine description for the Pyramid
41839     computer.
41840
41841   * Graham Stott for various infrastructure improvements.
41842
41843   * John Stracke for his Java HTTP protocol fixes.
41844
41845   * Mike Stump for his Elxsi port, G++ contributions over the years
41846     and more recently his vxworks contributions
41847
41848   * Jeff Sturm for Java porting help, bug fixes, and encouragement.
41849
41850   * Shigeya Suzuki for this fixes for the bsdi platforms.
41851
41852   * Ian Lance Taylor for the Go frontend, the initial mips16 and mips64
41853     support, general configury hacking, fixincludes, etc.
41854
41855   * Holger Teutsch provided the support for the Clipper CPU.
41856
41857   * Gary Thomas for his ongoing work to make the PPC work for
41858     GNU/Linux.
41859
41860   * Philipp Thomas for random bug fixes throughout the compiler
41861
41862   * Jason Thorpe for thread support in libstdc++ on NetBSD.
41863
41864   * Kresten Krab Thorup wrote the run time support for the Objective-C
41865     language and the fantastic Java bytecode interpreter.
41866
41867   * Michael Tiemann for random bug fixes, the first instruction
41868     scheduler, initial C++ support, function integration, NS32k, SPARC
41869     and M88k machine description work, delay slot scheduling.
41870
41871   * Andreas Tobler for his work porting libgcj to Darwin.
41872
41873   * Teemu Torma for thread safe exception handling support.
41874
41875   * Leonard Tower wrote parts of the parser, RTL generator, and RTL
41876     definitions, and of the VAX machine description.
41877
41878   * Daniel Towner and Hariharan Sandanagobalane contributed and
41879     maintain the picoChip port.
41880
41881   * Tom Tromey for internationalization support and for his many Java
41882     contributions and libgcj maintainership.
41883
41884   * Lassi Tuura for improvements to config.guess to determine HP
41885     processor types.
41886
41887   * Petter Urkedal for libstdc++ CXXFLAGS, math, and algorithms fixes.
41888
41889   * Andy Vaught for the design and initial implementation of the GNU
41890     Fortran front end.
41891
41892   * Brent Verner for work with the libstdc++ cshadow files and their
41893     associated configure steps.
41894
41895   * Todd Vierling for contributions for NetBSD ports.
41896
41897   * Jonathan Wakely for contributing libstdc++ Doxygen notes and XHTML
41898     guidance.
41899
41900   * Dean Wakerley for converting the install documentation from HTML
41901     to texinfo in time for GCC 3.0.
41902
41903   * Krister Walfridsson for random bug fixes.
41904
41905   * Feng Wang for contributions to GNU Fortran.
41906
41907   * Stephen M. Webb for time and effort on making libstdc++ shadow
41908     files work with the tricky Solaris 8+ headers, and for pushing the
41909     build-time header tree.
41910
41911   * John Wehle for various improvements for the x86 code generator,
41912     related infrastructure improvements to help x86 code generation,
41913     value range propagation and other work, WE32k port.
41914
41915   * Ulrich Weigand for work on the s390 port.
41916
41917   * Zack Weinberg for major work on cpplib and various other bug fixes.
41918
41919   * Matt Welsh for help with Linux Threads support in GCJ.
41920
41921   * Urban Widmark for help fixing java.io.
41922
41923   * Mark Wielaard for new Java library code and his work integrating
41924     with Classpath.
41925
41926   * Dale Wiles helped port GCC to the Tahoe.
41927
41928   * Bob Wilson from Tensilica, Inc. for the Xtensa port.
41929
41930   * Jim Wilson for his direction via the steering committee, tackling
41931     hard problems in various places that nobody else wanted to work
41932     on, strength reduction and other loop optimizations.
41933
41934   * Paul Woegerer and Tal Agmon for the CRX port.
41935
41936   * Carlo Wood for various fixes.
41937
41938   * Tom Wood for work on the m88k port.
41939
41940   * Canqun Yang for work on GNU Fortran.
41941
41942   * Masanobu Yuhara of Fujitsu Laboratories implemented the machine
41943     description for the Tron architecture (specifically, the Gmicro).
41944
41945   * Kevin Zachmann helped port GCC to the Tahoe.
41946
41947   * Ayal Zaks for Swing Modulo Scheduling (SMS).
41948
41949   * Xiaoqiang Zhang for work on GNU Fortran.
41950
41951   * Gilles Zunino for help porting Java to Irix.
41952
41953
41954 The following people are recognized for their contributions to GNAT,
41955the Ada front end of GCC:
41956   * Bernard Banner
41957
41958   * Romain Berrendonner
41959
41960   * Geert Bosch
41961
41962   * Emmanuel Briot
41963
41964   * Joel Brobecker
41965
41966   * Ben Brosgol
41967
41968   * Vincent Celier
41969
41970   * Arnaud Charlet
41971
41972   * Chien Chieng
41973
41974   * Cyrille Comar
41975
41976   * Cyrille Crozes
41977
41978   * Robert Dewar
41979
41980   * Gary Dismukes
41981
41982   * Robert Duff
41983
41984   * Ed Falis
41985
41986   * Ramon Fernandez
41987
41988   * Sam Figueroa
41989
41990   * Vasiliy Fofanov
41991
41992   * Michael Friess
41993
41994   * Franco Gasperoni
41995
41996   * Ted Giering
41997
41998   * Matthew Gingell
41999
42000   * Laurent Guerby
42001
42002   * Jerome Guitton
42003
42004   * Olivier Hainque
42005
42006   * Jerome Hugues
42007
42008   * Hristian Kirtchev
42009
42010   * Jerome Lambourg
42011
42012   * Bruno Leclerc
42013
42014   * Albert Lee
42015
42016   * Sean McNeil
42017
42018   * Javier Miranda
42019
42020   * Laurent Nana
42021
42022   * Pascal Obry
42023
42024   * Dong-Ik Oh
42025
42026   * Laurent Pautet
42027
42028   * Brett Porter
42029
42030   * Thomas Quinot
42031
42032   * Nicolas Roche
42033
42034   * Pat Rogers
42035
42036   * Jose Ruiz
42037
42038   * Douglas Rupp
42039
42040   * Sergey Rybin
42041
42042   * Gail Schenker
42043
42044   * Ed Schonberg
42045
42046   * Nicolas Setton
42047
42048   * Samuel Tardieu
42049
42050
42051 The following people are recognized for their contributions of new
42052features, bug reports, testing and integration of classpath/libgcj for
42053GCC version 4.1:
42054   * Lillian Angel for `JTree' implementation and lots Free Swing
42055     additions and bug fixes.
42056
42057   * Wolfgang Baer for `GapContent' bug fixes.
42058
42059   * Anthony Balkissoon for `JList', Free Swing 1.5 updates and mouse
42060     event fixes, lots of Free Swing work including `JTable' editing.
42061
42062   * Stuart Ballard for RMI constant fixes.
42063
42064   * Goffredo Baroncelli for `HTTPURLConnection' fixes.
42065
42066   * Gary Benson for `MessageFormat' fixes.
42067
42068   * Daniel Bonniot for `Serialization' fixes.
42069
42070   * Chris Burdess for lots of gnu.xml and http protocol fixes, `StAX'
42071     and `DOM xml:id' support.
42072
42073   * Ka-Hing Cheung for `TreePath' and `TreeSelection' fixes.
42074
42075   * Archie Cobbs for build fixes, VM interface updates,
42076     `URLClassLoader' updates.
42077
42078   * Kelley Cook for build fixes.
42079
42080   * Martin Cordova for Suggestions for better `SocketTimeoutException'.
42081
42082   * David Daney for `BitSet' bug fixes, `HttpURLConnection' rewrite
42083     and improvements.
42084
42085   * Thomas Fitzsimmons for lots of upgrades to the gtk+ AWT and Cairo
42086     2D support. Lots of imageio framework additions, lots of AWT and
42087     Free Swing bug fixes.
42088
42089   * Jeroen Frijters for `ClassLoader' and nio cleanups, serialization
42090     fixes, better `Proxy' support, bug fixes and IKVM integration.
42091
42092   * Santiago Gala for `AccessControlContext' fixes.
42093
42094   * Nicolas Geoffray for `VMClassLoader' and `AccessController'
42095     improvements.
42096
42097   * David Gilbert for `basic' and `metal' icon and plaf support and
42098     lots of documenting, Lots of Free Swing and metal theme additions.
42099     `MetalIconFactory' implementation.
42100
42101   * Anthony Green for `MIDI' framework, `ALSA' and `DSSI' providers.
42102
42103   * Andrew Haley for `Serialization' and `URLClassLoader' fixes, gcj
42104     build speedups.
42105
42106   * Kim Ho for `JFileChooser' implementation.
42107
42108   * Andrew John Hughes for `Locale' and net fixes, URI RFC2986
42109     updates, `Serialization' fixes, `Properties' XML support and
42110     generic branch work, VMIntegration guide update.
42111
42112   * Bastiaan Huisman for `TimeZone' bug fixing.
42113
42114   * Andreas Jaeger for mprec updates.
42115
42116   * Paul Jenner for better `-Werror' support.
42117
42118   * Ito Kazumitsu for `NetworkInterface' implementation and updates.
42119
42120   * Roman Kennke for `BoxLayout', `GrayFilter' and `SplitPane', plus
42121     bug fixes all over. Lots of Free Swing work including styled text.
42122
42123   * Simon Kitching for `String' cleanups and optimization suggestions.
42124
42125   * Michael Koch for configuration fixes, `Locale' updates, bug and
42126     build fixes.
42127
42128   * Guilhem Lavaux for configuration, thread and channel fixes and
42129     Kaffe integration. JCL native `Pointer' updates. Logger bug fixes.
42130
42131   * David Lichteblau for JCL support library global/local reference
42132     cleanups.
42133
42134   * Aaron Luchko for JDWP updates and documentation fixes.
42135
42136   * Ziga Mahkovec for `Graphics2D' upgraded to Cairo 0.5 and new regex
42137     features.
42138
42139   * Sven de Marothy for BMP imageio support, CSS and `TextLayout'
42140     fixes. `GtkImage' rewrite, 2D, awt, free swing and date/time fixes
42141     and implementing the Qt4 peers.
42142
42143   * Casey Marshall for crypto algorithm fixes, `FileChannel' lock,
42144     `SystemLogger' and `FileHandler' rotate implementations, NIO
42145     `FileChannel.map' support, security and policy updates.
42146
42147   * Bryce McKinlay for RMI work.
42148
42149   * Audrius Meskauskas for lots of Free Corba, RMI and HTML work plus
42150     testing and documenting.
42151
42152   * Kalle Olavi Niemitalo for build fixes.
42153
42154   * Rainer Orth for build fixes.
42155
42156   * Andrew Overholt for `File' locking fixes.
42157
42158   * Ingo Proetel for `Image', `Logger' and `URLClassLoader' updates.
42159
42160   * Olga Rodimina for `MenuSelectionManager' implementation.
42161
42162   * Jan Roehrich for `BasicTreeUI' and `JTree' fixes.
42163
42164   * Julian Scheid for documentation updates and gjdoc support.
42165
42166   * Christian Schlichtherle for zip fixes and cleanups.
42167
42168   * Robert Schuster for documentation updates and beans fixes,
42169     `TreeNode' enumerations and `ActionCommand' and various fixes, XML
42170     and URL, AWT and Free Swing bug fixes.
42171
42172   * Keith Seitz for lots of JDWP work.
42173
42174   * Christian Thalinger for 64-bit cleanups, Configuration and VM
42175     interface fixes and `CACAO' integration, `fdlibm' updates.
42176
42177   * Gael Thomas for `VMClassLoader' boot packages support suggestions.
42178
42179   * Andreas Tobler for Darwin and Solaris testing and fixing, `Qt4'
42180     support for Darwin/OS X, `Graphics2D' support, `gtk+' updates.
42181
42182   * Dalibor Topic for better `DEBUG' support, build cleanups and Kaffe
42183     integration. `Qt4' build infrastructure, `SHA1PRNG' and
42184     `GdkPixbugDecoder' updates.
42185
42186   * Tom Tromey for Eclipse integration, generics work, lots of bug
42187     fixes and gcj integration including coordinating The Big Merge.
42188
42189   * Mark Wielaard for bug fixes, packaging and release management,
42190     `Clipboard' implementation, system call interrupts and network
42191     timeouts and `GdkPixpufDecoder' fixes.
42192
42193
42194 In addition to the above, all of which also contributed time and
42195energy in testing GCC, we would like to thank the following for their
42196contributions to testing:
42197
42198   * Michael Abd-El-Malek
42199
42200   * Thomas Arend
42201
42202   * Bonzo Armstrong
42203
42204   * Steven Ashe
42205
42206   * Chris Baldwin
42207
42208   * David Billinghurst
42209
42210   * Jim Blandy
42211
42212   * Stephane Bortzmeyer
42213
42214   * Horst von Brand
42215
42216   * Frank Braun
42217
42218   * Rodney Brown
42219
42220   * Sidney Cadot
42221
42222   * Bradford Castalia
42223
42224   * Robert Clark
42225
42226   * Jonathan Corbet
42227
42228   * Ralph Doncaster
42229
42230   * Richard Emberson
42231
42232   * Levente Farkas
42233
42234   * Graham Fawcett
42235
42236   * Mark Fernyhough
42237
42238   * Robert A. French
42239
42240   * Jo"rgen Freyh
42241
42242   * Mark K. Gardner
42243
42244   * Charles-Antoine Gauthier
42245
42246   * Yung Shing Gene
42247
42248   * David Gilbert
42249
42250   * Simon Gornall
42251
42252   * Fred Gray
42253
42254   * John Griffin
42255
42256   * Patrik Hagglund
42257
42258   * Phil Hargett
42259
42260   * Amancio Hasty
42261
42262   * Takafumi Hayashi
42263
42264   * Bryan W. Headley
42265
42266   * Kevin B. Hendricks
42267
42268   * Joep Jansen
42269
42270   * Christian Joensson
42271
42272   * Michel Kern
42273
42274   * David Kidd
42275
42276   * Tobias Kuipers
42277
42278   * Anand Krishnaswamy
42279
42280   * A. O. V. Le Blanc
42281
42282   * llewelly
42283
42284   * Damon Love
42285
42286   * Brad Lucier
42287
42288   * Matthias Klose
42289
42290   * Martin Knoblauch
42291
42292   * Rick Lutowski
42293
42294   * Jesse Macnish
42295
42296   * Stefan Morrell
42297
42298   * Anon A. Mous
42299
42300   * Matthias Mueller
42301
42302   * Pekka Nikander
42303
42304   * Rick Niles
42305
42306   * Jon Olson
42307
42308   * Magnus Persson
42309
42310   * Chris Pollard
42311
42312   * Richard Polton
42313
42314   * Derk Reefman
42315
42316   * David Rees
42317
42318   * Paul Reilly
42319
42320   * Tom Reilly
42321
42322   * Torsten Rueger
42323
42324   * Danny Sadinoff
42325
42326   * Marc Schifer
42327
42328   * Erik Schnetter
42329
42330   * Wayne K. Schroll
42331
42332   * David Schuler
42333
42334   * Vin Shelton
42335
42336   * Tim Souder
42337
42338   * Adam Sulmicki
42339
42340   * Bill Thorson
42341
42342   * George Talbot
42343
42344   * Pedro A. M. Vazquez
42345
42346   * Gregory Warnes
42347
42348   * Ian Watson
42349
42350   * David E. Young
42351
42352   * And many others
42353
42354 And finally we'd like to thank everyone who uses the compiler, provides
42355feedback and generally reminds us why we're doing this work in the first
42356place.
42357
42358
42359File: gccint.info,  Node: Option Index,  Next: Concept Index,  Prev: Contributors,  Up: Top
42360
42361Option Index
42362************
42363
42364GCC's command line options are indexed here without any initial `-' or
42365`--'.  Where an option has both positive and negative forms (such as
42366`-fOPTION' and `-fno-OPTION'), relevant entries in the manual are
42367indexed under the most appropriate form; it may sometimes be useful to
42368look up both forms.
42369
42370�[index�]
42371* Menu:
42372
42373* fltrans:                               Internal flags.       (line 18)
42374* fltrans-output-list:                   Internal flags.       (line 23)
42375* fwpa:                                  Internal flags.       (line  9)
42376* msoft-float:                           Soft float library routines.
42377                                                               (line  6)
42378
42379
42380File: gccint.info,  Node: Concept Index,  Prev: Option Index,  Up: Top
42381
42382Concept Index
42383*************
42384
42385�[index�]
42386* Menu:
42387
42388* ! in constraint:                       Multi-Alternative.  (line   47)
42389* # in constraint:                       Modifiers.          (line   67)
42390* # in template:                         Output Template.    (line   66)
42391* #pragma:                               Misc.               (line  379)
42392* % in constraint:                       Modifiers.          (line   45)
42393* % in GTY option:                       GTY Options.        (line   18)
42394* % in template:                         Output Template.    (line    6)
42395* & in constraint:                       Modifiers.          (line   25)
42396* (nil):                                 RTL Objects.        (line   73)
42397* * in constraint:                       Modifiers.          (line   72)
42398* * in template:                         Output Statement.   (line   29)
42399* + in constraint:                       Modifiers.          (line   12)
42400* -fsection-anchors <1>:                 Anchored Addresses. (line    6)
42401* -fsection-anchors:                     Special Accessors.  (line  120)
42402* /c in RTL dump:                        Flags.              (line  221)
42403* /f in RTL dump:                        Flags.              (line  229)
42404* /i in RTL dump:                        Flags.              (line  274)
42405* /j in RTL dump:                        Flags.              (line  286)
42406* /s in RTL dump:                        Flags.              (line  245)
42407* /u in RTL dump:                        Flags.              (line  296)
42408* /v in RTL dump:                        Flags.              (line  328)
42409* 0 in constraint:                       Simple Constraints. (line  130)
42410* < in constraint:                       Simple Constraints. (line   48)
42411* = in constraint:                       Modifiers.          (line    8)
42412* > in constraint:                       Simple Constraints. (line   61)
42413* ? in constraint:                       Multi-Alternative.  (line   41)
42414* \:                                     Output Template.    (line   46)
42415* __absvdi2:                             Integer library routines.
42416                                                             (line  107)
42417* __absvsi2:                             Integer library routines.
42418                                                             (line  106)
42419* __addda3:                              Fixed-point fractional library routines.
42420                                                             (line   45)
42421* __adddf3:                              Soft float library routines.
42422                                                             (line   23)
42423* __adddq3:                              Fixed-point fractional library routines.
42424                                                             (line   33)
42425* __addha3:                              Fixed-point fractional library routines.
42426                                                             (line   43)
42427* __addhq3:                              Fixed-point fractional library routines.
42428                                                             (line   30)
42429* __addqq3:                              Fixed-point fractional library routines.
42430                                                             (line   29)
42431* __addsa3:                              Fixed-point fractional library routines.
42432                                                             (line   44)
42433* __addsf3:                              Soft float library routines.
42434                                                             (line   22)
42435* __addsq3:                              Fixed-point fractional library routines.
42436                                                             (line   31)
42437* __addta3:                              Fixed-point fractional library routines.
42438                                                             (line   47)
42439* __addtf3:                              Soft float library routines.
42440                                                             (line   25)
42441* __adduda3:                             Fixed-point fractional library routines.
42442                                                             (line   53)
42443* __addudq3:                             Fixed-point fractional library routines.
42444                                                             (line   41)
42445* __adduha3:                             Fixed-point fractional library routines.
42446                                                             (line   49)
42447* __adduhq3:                             Fixed-point fractional library routines.
42448                                                             (line   37)
42449* __adduqq3:                             Fixed-point fractional library routines.
42450                                                             (line   35)
42451* __addusa3:                             Fixed-point fractional library routines.
42452                                                             (line   51)
42453* __addusq3:                             Fixed-point fractional library routines.
42454                                                             (line   39)
42455* __adduta3:                             Fixed-point fractional library routines.
42456                                                             (line   55)
42457* __addvdi3:                             Integer library routines.
42458                                                             (line  111)
42459* __addvsi3:                             Integer library routines.
42460                                                             (line  110)
42461* __addxf3:                              Soft float library routines.
42462                                                             (line   27)
42463* __ashlda3:                             Fixed-point fractional library routines.
42464                                                             (line  351)
42465* __ashldi3:                             Integer library routines.
42466                                                             (line   14)
42467* __ashldq3:                             Fixed-point fractional library routines.
42468                                                             (line  340)
42469* __ashlha3:                             Fixed-point fractional library routines.
42470                                                             (line  349)
42471* __ashlhq3:                             Fixed-point fractional library routines.
42472                                                             (line  337)
42473* __ashlqq3:                             Fixed-point fractional library routines.
42474                                                             (line  336)
42475* __ashlsa3:                             Fixed-point fractional library routines.
42476                                                             (line  350)
42477* __ashlsi3:                             Integer library routines.
42478                                                             (line   13)
42479* __ashlsq3:                             Fixed-point fractional library routines.
42480                                                             (line  338)
42481* __ashlta3:                             Fixed-point fractional library routines.
42482                                                             (line  353)
42483* __ashlti3:                             Integer library routines.
42484                                                             (line   15)
42485* __ashluda3:                            Fixed-point fractional library routines.
42486                                                             (line  359)
42487* __ashludq3:                            Fixed-point fractional library routines.
42488                                                             (line  348)
42489* __ashluha3:                            Fixed-point fractional library routines.
42490                                                             (line  355)
42491* __ashluhq3:                            Fixed-point fractional library routines.
42492                                                             (line  344)
42493* __ashluqq3:                            Fixed-point fractional library routines.
42494                                                             (line  342)
42495* __ashlusa3:                            Fixed-point fractional library routines.
42496                                                             (line  357)
42497* __ashlusq3:                            Fixed-point fractional library routines.
42498                                                             (line  346)
42499* __ashluta3:                            Fixed-point fractional library routines.
42500                                                             (line  361)
42501* __ashrda3:                             Fixed-point fractional library routines.
42502                                                             (line  371)
42503* __ashrdi3:                             Integer library routines.
42504                                                             (line   19)
42505* __ashrdq3:                             Fixed-point fractional library routines.
42506                                                             (line  368)
42507* __ashrha3:                             Fixed-point fractional library routines.
42508                                                             (line  369)
42509* __ashrhq3:                             Fixed-point fractional library routines.
42510                                                             (line  365)
42511* __ashrqq3:                             Fixed-point fractional library routines.
42512                                                             (line  364)
42513* __ashrsa3:                             Fixed-point fractional library routines.
42514                                                             (line  370)
42515* __ashrsi3:                             Integer library routines.
42516                                                             (line   18)
42517* __ashrsq3:                             Fixed-point fractional library routines.
42518                                                             (line  366)
42519* __ashrta3:                             Fixed-point fractional library routines.
42520                                                             (line  373)
42521* __ashrti3:                             Integer library routines.
42522                                                             (line   20)
42523* __bid_adddd3:                          Decimal float library routines.
42524                                                             (line   25)
42525* __bid_addsd3:                          Decimal float library routines.
42526                                                             (line   21)
42527* __bid_addtd3:                          Decimal float library routines.
42528                                                             (line   29)
42529* __bid_divdd3:                          Decimal float library routines.
42530                                                             (line   68)
42531* __bid_divsd3:                          Decimal float library routines.
42532                                                             (line   64)
42533* __bid_divtd3:                          Decimal float library routines.
42534                                                             (line   72)
42535* __bid_eqdd2:                           Decimal float library routines.
42536                                                             (line  259)
42537* __bid_eqsd2:                           Decimal float library routines.
42538                                                             (line  257)
42539* __bid_eqtd2:                           Decimal float library routines.
42540                                                             (line  261)
42541* __bid_extendddtd2:                     Decimal float library routines.
42542                                                             (line   92)
42543* __bid_extendddtf:                      Decimal float library routines.
42544                                                             (line  140)
42545* __bid_extendddxf:                      Decimal float library routines.
42546                                                             (line  134)
42547* __bid_extenddfdd:                      Decimal float library routines.
42548                                                             (line  147)
42549* __bid_extenddftd:                      Decimal float library routines.
42550                                                             (line  107)
42551* __bid_extendsddd2:                     Decimal float library routines.
42552                                                             (line   88)
42553* __bid_extendsddf:                      Decimal float library routines.
42554                                                             (line  128)
42555* __bid_extendsdtd2:                     Decimal float library routines.
42556                                                             (line   90)
42557* __bid_extendsdtf:                      Decimal float library routines.
42558                                                             (line  138)
42559* __bid_extendsdxf:                      Decimal float library routines.
42560                                                             (line  132)
42561* __bid_extendsfdd:                      Decimal float library routines.
42562                                                             (line  103)
42563* __bid_extendsfsd:                      Decimal float library routines.
42564                                                             (line  145)
42565* __bid_extendsftd:                      Decimal float library routines.
42566                                                             (line  105)
42567* __bid_extendtftd:                      Decimal float library routines.
42568                                                             (line  149)
42569* __bid_extendxftd:                      Decimal float library routines.
42570                                                             (line  109)
42571* __bid_fixdddi:                         Decimal float library routines.
42572                                                             (line  170)
42573* __bid_fixddsi:                         Decimal float library routines.
42574                                                             (line  162)
42575* __bid_fixsddi:                         Decimal float library routines.
42576                                                             (line  168)
42577* __bid_fixsdsi:                         Decimal float library routines.
42578                                                             (line  160)
42579* __bid_fixtddi:                         Decimal float library routines.
42580                                                             (line  172)
42581* __bid_fixtdsi:                         Decimal float library routines.
42582                                                             (line  164)
42583* __bid_fixunsdddi:                      Decimal float library routines.
42584                                                             (line  187)
42585* __bid_fixunsddsi:                      Decimal float library routines.
42586                                                             (line  178)
42587* __bid_fixunssddi:                      Decimal float library routines.
42588                                                             (line  185)
42589* __bid_fixunssdsi:                      Decimal float library routines.
42590                                                             (line  176)
42591* __bid_fixunstddi:                      Decimal float library routines.
42592                                                             (line  189)
42593* __bid_fixunstdsi:                      Decimal float library routines.
42594                                                             (line  180)
42595* __bid_floatdidd:                       Decimal float library routines.
42596                                                             (line  205)
42597* __bid_floatdisd:                       Decimal float library routines.
42598                                                             (line  203)
42599* __bid_floatditd:                       Decimal float library routines.
42600                                                             (line  207)
42601* __bid_floatsidd:                       Decimal float library routines.
42602                                                             (line  196)
42603* __bid_floatsisd:                       Decimal float library routines.
42604                                                             (line  194)
42605* __bid_floatsitd:                       Decimal float library routines.
42606                                                             (line  198)
42607* __bid_floatunsdidd:                    Decimal float library routines.
42608                                                             (line  223)
42609* __bid_floatunsdisd:                    Decimal float library routines.
42610                                                             (line  221)
42611* __bid_floatunsditd:                    Decimal float library routines.
42612                                                             (line  225)
42613* __bid_floatunssidd:                    Decimal float library routines.
42614                                                             (line  214)
42615* __bid_floatunssisd:                    Decimal float library routines.
42616                                                             (line  212)
42617* __bid_floatunssitd:                    Decimal float library routines.
42618                                                             (line  216)
42619* __bid_gedd2:                           Decimal float library routines.
42620                                                             (line  277)
42621* __bid_gesd2:                           Decimal float library routines.
42622                                                             (line  275)
42623* __bid_getd2:                           Decimal float library routines.
42624                                                             (line  279)
42625* __bid_gtdd2:                           Decimal float library routines.
42626                                                             (line  304)
42627* __bid_gtsd2:                           Decimal float library routines.
42628                                                             (line  302)
42629* __bid_gttd2:                           Decimal float library routines.
42630                                                             (line  306)
42631* __bid_ledd2:                           Decimal float library routines.
42632                                                             (line  295)
42633* __bid_lesd2:                           Decimal float library routines.
42634                                                             (line  293)
42635* __bid_letd2:                           Decimal float library routines.
42636                                                             (line  297)
42637* __bid_ltdd2:                           Decimal float library routines.
42638                                                             (line  286)
42639* __bid_ltsd2:                           Decimal float library routines.
42640                                                             (line  284)
42641* __bid_lttd2:                           Decimal float library routines.
42642                                                             (line  288)
42643* __bid_muldd3:                          Decimal float library routines.
42644                                                             (line   54)
42645* __bid_mulsd3:                          Decimal float library routines.
42646                                                             (line   50)
42647* __bid_multd3:                          Decimal float library routines.
42648                                                             (line   58)
42649* __bid_nedd2:                           Decimal float library routines.
42650                                                             (line  268)
42651* __bid_negdd2:                          Decimal float library routines.
42652                                                             (line   78)
42653* __bid_negsd2:                          Decimal float library routines.
42654                                                             (line   76)
42655* __bid_negtd2:                          Decimal float library routines.
42656                                                             (line   80)
42657* __bid_nesd2:                           Decimal float library routines.
42658                                                             (line  266)
42659* __bid_netd2:                           Decimal float library routines.
42660                                                             (line  270)
42661* __bid_subdd3:                          Decimal float library routines.
42662                                                             (line   39)
42663* __bid_subsd3:                          Decimal float library routines.
42664                                                             (line   35)
42665* __bid_subtd3:                          Decimal float library routines.
42666                                                             (line   43)
42667* __bid_truncdddf:                       Decimal float library routines.
42668                                                             (line  153)
42669* __bid_truncddsd2:                      Decimal float library routines.
42670                                                             (line   94)
42671* __bid_truncddsf:                       Decimal float library routines.
42672                                                             (line  124)
42673* __bid_truncdfsd:                       Decimal float library routines.
42674                                                             (line  111)
42675* __bid_truncsdsf:                       Decimal float library routines.
42676                                                             (line  151)
42677* __bid_trunctddd2:                      Decimal float library routines.
42678                                                             (line   98)
42679* __bid_trunctddf:                       Decimal float library routines.
42680                                                             (line  130)
42681* __bid_trunctdsd2:                      Decimal float library routines.
42682                                                             (line   96)
42683* __bid_trunctdsf:                       Decimal float library routines.
42684                                                             (line  126)
42685* __bid_trunctdtf:                       Decimal float library routines.
42686                                                             (line  155)
42687* __bid_trunctdxf:                       Decimal float library routines.
42688                                                             (line  136)
42689* __bid_trunctfdd:                       Decimal float library routines.
42690                                                             (line  119)
42691* __bid_trunctfsd:                       Decimal float library routines.
42692                                                             (line  115)
42693* __bid_truncxfdd:                       Decimal float library routines.
42694                                                             (line  117)
42695* __bid_truncxfsd:                       Decimal float library routines.
42696                                                             (line  113)
42697* __bid_unorddd2:                        Decimal float library routines.
42698                                                             (line  235)
42699* __bid_unordsd2:                        Decimal float library routines.
42700                                                             (line  233)
42701* __bid_unordtd2:                        Decimal float library routines.
42702                                                             (line  237)
42703* __bswapdi2:                            Integer library routines.
42704                                                             (line  162)
42705* __bswapsi2:                            Integer library routines.
42706                                                             (line  161)
42707* __builtin_classify_type:               Varargs.            (line   51)
42708* __builtin_next_arg:                    Varargs.            (line   42)
42709* __builtin_saveregs:                    Varargs.            (line   24)
42710* __clear_cache:                         Miscellaneous routines.
42711                                                             (line   10)
42712* __clzdi2:                              Integer library routines.
42713                                                             (line  131)
42714* __clzsi2:                              Integer library routines.
42715                                                             (line  130)
42716* __clzti2:                              Integer library routines.
42717                                                             (line  132)
42718* __cmpda2:                              Fixed-point fractional library routines.
42719                                                             (line  451)
42720* __cmpdf2:                              Soft float library routines.
42721                                                             (line  164)
42722* __cmpdi2:                              Integer library routines.
42723                                                             (line   87)
42724* __cmpdq2:                              Fixed-point fractional library routines.
42725                                                             (line  441)
42726* __cmpha2:                              Fixed-point fractional library routines.
42727                                                             (line  449)
42728* __cmphq2:                              Fixed-point fractional library routines.
42729                                                             (line  438)
42730* __cmpqq2:                              Fixed-point fractional library routines.
42731                                                             (line  437)
42732* __cmpsa2:                              Fixed-point fractional library routines.
42733                                                             (line  450)
42734* __cmpsf2:                              Soft float library routines.
42735                                                             (line  163)
42736* __cmpsq2:                              Fixed-point fractional library routines.
42737                                                             (line  439)
42738* __cmpta2:                              Fixed-point fractional library routines.
42739                                                             (line  453)
42740* __cmptf2:                              Soft float library routines.
42741                                                             (line  165)
42742* __cmpti2:                              Integer library routines.
42743                                                             (line   88)
42744* __cmpuda2:                             Fixed-point fractional library routines.
42745                                                             (line  458)
42746* __cmpudq2:                             Fixed-point fractional library routines.
42747                                                             (line  448)
42748* __cmpuha2:                             Fixed-point fractional library routines.
42749                                                             (line  455)
42750* __cmpuhq2:                             Fixed-point fractional library routines.
42751                                                             (line  444)
42752* __cmpuqq2:                             Fixed-point fractional library routines.
42753                                                             (line  443)
42754* __cmpusa2:                             Fixed-point fractional library routines.
42755                                                             (line  456)
42756* __cmpusq2:                             Fixed-point fractional library routines.
42757                                                             (line  446)
42758* __cmputa2:                             Fixed-point fractional library routines.
42759                                                             (line  460)
42760* __CTOR_LIST__:                         Initialization.     (line   25)
42761* __ctzdi2:                              Integer library routines.
42762                                                             (line  138)
42763* __ctzsi2:                              Integer library routines.
42764                                                             (line  137)
42765* __ctzti2:                              Integer library routines.
42766                                                             (line  139)
42767* __divda3:                              Fixed-point fractional library routines.
42768                                                             (line  227)
42769* __divdc3:                              Soft float library routines.
42770                                                             (line  252)
42771* __divdf3:                              Soft float library routines.
42772                                                             (line   48)
42773* __divdi3:                              Integer library routines.
42774                                                             (line   25)
42775* __divdq3:                              Fixed-point fractional library routines.
42776                                                             (line  223)
42777* __divha3:                              Fixed-point fractional library routines.
42778                                                             (line  225)
42779* __divhq3:                              Fixed-point fractional library routines.
42780                                                             (line  220)
42781* __divqq3:                              Fixed-point fractional library routines.
42782                                                             (line  219)
42783* __divsa3:                              Fixed-point fractional library routines.
42784                                                             (line  226)
42785* __divsc3:                              Soft float library routines.
42786                                                             (line  250)
42787* __divsf3:                              Soft float library routines.
42788                                                             (line   47)
42789* __divsi3:                              Integer library routines.
42790                                                             (line   24)
42791* __divsq3:                              Fixed-point fractional library routines.
42792                                                             (line  221)
42793* __divta3:                              Fixed-point fractional library routines.
42794                                                             (line  229)
42795* __divtc3:                              Soft float library routines.
42796                                                             (line  254)
42797* __divtf3:                              Soft float library routines.
42798                                                             (line   50)
42799* __divti3:                              Integer library routines.
42800                                                             (line   26)
42801* __divxc3:                              Soft float library routines.
42802                                                             (line  256)
42803* __divxf3:                              Soft float library routines.
42804                                                             (line   52)
42805* __dpd_adddd3:                          Decimal float library routines.
42806                                                             (line   23)
42807* __dpd_addsd3:                          Decimal float library routines.
42808                                                             (line   19)
42809* __dpd_addtd3:                          Decimal float library routines.
42810                                                             (line   27)
42811* __dpd_divdd3:                          Decimal float library routines.
42812                                                             (line   66)
42813* __dpd_divsd3:                          Decimal float library routines.
42814                                                             (line   62)
42815* __dpd_divtd3:                          Decimal float library routines.
42816                                                             (line   70)
42817* __dpd_eqdd2:                           Decimal float library routines.
42818                                                             (line  258)
42819* __dpd_eqsd2:                           Decimal float library routines.
42820                                                             (line  256)
42821* __dpd_eqtd2:                           Decimal float library routines.
42822                                                             (line  260)
42823* __dpd_extendddtd2:                     Decimal float library routines.
42824                                                             (line   91)
42825* __dpd_extendddtf:                      Decimal float library routines.
42826                                                             (line  139)
42827* __dpd_extendddxf:                      Decimal float library routines.
42828                                                             (line  133)
42829* __dpd_extenddfdd:                      Decimal float library routines.
42830                                                             (line  146)
42831* __dpd_extenddftd:                      Decimal float library routines.
42832                                                             (line  106)
42833* __dpd_extendsddd2:                     Decimal float library routines.
42834                                                             (line   87)
42835* __dpd_extendsddf:                      Decimal float library routines.
42836                                                             (line  127)
42837* __dpd_extendsdtd2:                     Decimal float library routines.
42838                                                             (line   89)
42839* __dpd_extendsdtf:                      Decimal float library routines.
42840                                                             (line  137)
42841* __dpd_extendsdxf:                      Decimal float library routines.
42842                                                             (line  131)
42843* __dpd_extendsfdd:                      Decimal float library routines.
42844                                                             (line  102)
42845* __dpd_extendsfsd:                      Decimal float library routines.
42846                                                             (line  144)
42847* __dpd_extendsftd:                      Decimal float library routines.
42848                                                             (line  104)
42849* __dpd_extendtftd:                      Decimal float library routines.
42850                                                             (line  148)
42851* __dpd_extendxftd:                      Decimal float library routines.
42852                                                             (line  108)
42853* __dpd_fixdddi:                         Decimal float library routines.
42854                                                             (line  169)
42855* __dpd_fixddsi:                         Decimal float library routines.
42856                                                             (line  161)
42857* __dpd_fixsddi:                         Decimal float library routines.
42858                                                             (line  167)
42859* __dpd_fixsdsi:                         Decimal float library routines.
42860                                                             (line  159)
42861* __dpd_fixtddi:                         Decimal float library routines.
42862                                                             (line  171)
42863* __dpd_fixtdsi:                         Decimal float library routines.
42864                                                             (line  163)
42865* __dpd_fixunsdddi:                      Decimal float library routines.
42866                                                             (line  186)
42867* __dpd_fixunsddsi:                      Decimal float library routines.
42868                                                             (line  177)
42869* __dpd_fixunssddi:                      Decimal float library routines.
42870                                                             (line  184)
42871* __dpd_fixunssdsi:                      Decimal float library routines.
42872                                                             (line  175)
42873* __dpd_fixunstddi:                      Decimal float library routines.
42874                                                             (line  188)
42875* __dpd_fixunstdsi:                      Decimal float library routines.
42876                                                             (line  179)
42877* __dpd_floatdidd:                       Decimal float library routines.
42878                                                             (line  204)
42879* __dpd_floatdisd:                       Decimal float library routines.
42880                                                             (line  202)
42881* __dpd_floatditd:                       Decimal float library routines.
42882                                                             (line  206)
42883* __dpd_floatsidd:                       Decimal float library routines.
42884                                                             (line  195)
42885* __dpd_floatsisd:                       Decimal float library routines.
42886                                                             (line  193)
42887* __dpd_floatsitd:                       Decimal float library routines.
42888                                                             (line  197)
42889* __dpd_floatunsdidd:                    Decimal float library routines.
42890                                                             (line  222)
42891* __dpd_floatunsdisd:                    Decimal float library routines.
42892                                                             (line  220)
42893* __dpd_floatunsditd:                    Decimal float library routines.
42894                                                             (line  224)
42895* __dpd_floatunssidd:                    Decimal float library routines.
42896                                                             (line  213)
42897* __dpd_floatunssisd:                    Decimal float library routines.
42898                                                             (line  211)
42899* __dpd_floatunssitd:                    Decimal float library routines.
42900                                                             (line  215)
42901* __dpd_gedd2:                           Decimal float library routines.
42902                                                             (line  276)
42903* __dpd_gesd2:                           Decimal float library routines.
42904                                                             (line  274)
42905* __dpd_getd2:                           Decimal float library routines.
42906                                                             (line  278)
42907* __dpd_gtdd2:                           Decimal float library routines.
42908                                                             (line  303)
42909* __dpd_gtsd2:                           Decimal float library routines.
42910                                                             (line  301)
42911* __dpd_gttd2:                           Decimal float library routines.
42912                                                             (line  305)
42913* __dpd_ledd2:                           Decimal float library routines.
42914                                                             (line  294)
42915* __dpd_lesd2:                           Decimal float library routines.
42916                                                             (line  292)
42917* __dpd_letd2:                           Decimal float library routines.
42918                                                             (line  296)
42919* __dpd_ltdd2:                           Decimal float library routines.
42920                                                             (line  285)
42921* __dpd_ltsd2:                           Decimal float library routines.
42922                                                             (line  283)
42923* __dpd_lttd2:                           Decimal float library routines.
42924                                                             (line  287)
42925* __dpd_muldd3:                          Decimal float library routines.
42926                                                             (line   52)
42927* __dpd_mulsd3:                          Decimal float library routines.
42928                                                             (line   48)
42929* __dpd_multd3:                          Decimal float library routines.
42930                                                             (line   56)
42931* __dpd_nedd2:                           Decimal float library routines.
42932                                                             (line  267)
42933* __dpd_negdd2:                          Decimal float library routines.
42934                                                             (line   77)
42935* __dpd_negsd2:                          Decimal float library routines.
42936                                                             (line   75)
42937* __dpd_negtd2:                          Decimal float library routines.
42938                                                             (line   79)
42939* __dpd_nesd2:                           Decimal float library routines.
42940                                                             (line  265)
42941* __dpd_netd2:                           Decimal float library routines.
42942                                                             (line  269)
42943* __dpd_subdd3:                          Decimal float library routines.
42944                                                             (line   37)
42945* __dpd_subsd3:                          Decimal float library routines.
42946                                                             (line   33)
42947* __dpd_subtd3:                          Decimal float library routines.
42948                                                             (line   41)
42949* __dpd_truncdddf:                       Decimal float library routines.
42950                                                             (line  152)
42951* __dpd_truncddsd2:                      Decimal float library routines.
42952                                                             (line   93)
42953* __dpd_truncddsf:                       Decimal float library routines.
42954                                                             (line  123)
42955* __dpd_truncdfsd:                       Decimal float library routines.
42956                                                             (line  110)
42957* __dpd_truncsdsf:                       Decimal float library routines.
42958                                                             (line  150)
42959* __dpd_trunctddd2:                      Decimal float library routines.
42960                                                             (line   97)
42961* __dpd_trunctddf:                       Decimal float library routines.
42962                                                             (line  129)
42963* __dpd_trunctdsd2:                      Decimal float library routines.
42964                                                             (line   95)
42965* __dpd_trunctdsf:                       Decimal float library routines.
42966                                                             (line  125)
42967* __dpd_trunctdtf:                       Decimal float library routines.
42968                                                             (line  154)
42969* __dpd_trunctdxf:                       Decimal float library routines.
42970                                                             (line  135)
42971* __dpd_trunctfdd:                       Decimal float library routines.
42972                                                             (line  118)
42973* __dpd_trunctfsd:                       Decimal float library routines.
42974                                                             (line  114)
42975* __dpd_truncxfdd:                       Decimal float library routines.
42976                                                             (line  116)
42977* __dpd_truncxfsd:                       Decimal float library routines.
42978                                                             (line  112)
42979* __dpd_unorddd2:                        Decimal float library routines.
42980                                                             (line  234)
42981* __dpd_unordsd2:                        Decimal float library routines.
42982                                                             (line  232)
42983* __dpd_unordtd2:                        Decimal float library routines.
42984                                                             (line  236)
42985* __DTOR_LIST__:                         Initialization.     (line   25)
42986* __eqdf2:                               Soft float library routines.
42987                                                             (line  194)
42988* __eqsf2:                               Soft float library routines.
42989                                                             (line  193)
42990* __eqtf2:                               Soft float library routines.
42991                                                             (line  195)
42992* __extenddftf2:                         Soft float library routines.
42993                                                             (line   68)
42994* __extenddfxf2:                         Soft float library routines.
42995                                                             (line   69)
42996* __extendsfdf2:                         Soft float library routines.
42997                                                             (line   65)
42998* __extendsftf2:                         Soft float library routines.
42999                                                             (line   66)
43000* __extendsfxf2:                         Soft float library routines.
43001                                                             (line   67)
43002* __ffsdi2:                              Integer library routines.
43003                                                             (line  144)
43004* __ffsti2:                              Integer library routines.
43005                                                             (line  145)
43006* __fixdfdi:                             Soft float library routines.
43007                                                             (line   88)
43008* __fixdfsi:                             Soft float library routines.
43009                                                             (line   81)
43010* __fixdfti:                             Soft float library routines.
43011                                                             (line   94)
43012* __fixsfdi:                             Soft float library routines.
43013                                                             (line   87)
43014* __fixsfsi:                             Soft float library routines.
43015                                                             (line   80)
43016* __fixsfti:                             Soft float library routines.
43017                                                             (line   93)
43018* __fixtfdi:                             Soft float library routines.
43019                                                             (line   89)
43020* __fixtfsi:                             Soft float library routines.
43021                                                             (line   82)
43022* __fixtfti:                             Soft float library routines.
43023                                                             (line   95)
43024* __fixunsdfdi:                          Soft float library routines.
43025                                                             (line  108)
43026* __fixunsdfsi:                          Soft float library routines.
43027                                                             (line  101)
43028* __fixunsdfti:                          Soft float library routines.
43029                                                             (line  115)
43030* __fixunssfdi:                          Soft float library routines.
43031                                                             (line  107)
43032* __fixunssfsi:                          Soft float library routines.
43033                                                             (line  100)
43034* __fixunssfti:                          Soft float library routines.
43035                                                             (line  114)
43036* __fixunstfdi:                          Soft float library routines.
43037                                                             (line  109)
43038* __fixunstfsi:                          Soft float library routines.
43039                                                             (line  102)
43040* __fixunstfti:                          Soft float library routines.
43041                                                             (line  116)
43042* __fixunsxfdi:                          Soft float library routines.
43043                                                             (line  110)
43044* __fixunsxfsi:                          Soft float library routines.
43045                                                             (line  103)
43046* __fixunsxfti:                          Soft float library routines.
43047                                                             (line  117)
43048* __fixxfdi:                             Soft float library routines.
43049                                                             (line   90)
43050* __fixxfsi:                             Soft float library routines.
43051                                                             (line   83)
43052* __fixxfti:                             Soft float library routines.
43053                                                             (line   96)
43054* __floatdidf:                           Soft float library routines.
43055                                                             (line  128)
43056* __floatdisf:                           Soft float library routines.
43057                                                             (line  127)
43058* __floatditf:                           Soft float library routines.
43059                                                             (line  129)
43060* __floatdixf:                           Soft float library routines.
43061                                                             (line  130)
43062* __floatsidf:                           Soft float library routines.
43063                                                             (line  122)
43064* __floatsisf:                           Soft float library routines.
43065                                                             (line  121)
43066* __floatsitf:                           Soft float library routines.
43067                                                             (line  123)
43068* __floatsixf:                           Soft float library routines.
43069                                                             (line  124)
43070* __floattidf:                           Soft float library routines.
43071                                                             (line  134)
43072* __floattisf:                           Soft float library routines.
43073                                                             (line  133)
43074* __floattitf:                           Soft float library routines.
43075                                                             (line  135)
43076* __floattixf:                           Soft float library routines.
43077                                                             (line  136)
43078* __floatundidf:                         Soft float library routines.
43079                                                             (line  146)
43080* __floatundisf:                         Soft float library routines.
43081                                                             (line  145)
43082* __floatunditf:                         Soft float library routines.
43083                                                             (line  147)
43084* __floatundixf:                         Soft float library routines.
43085                                                             (line  148)
43086* __floatunsidf:                         Soft float library routines.
43087                                                             (line  140)
43088* __floatunsisf:                         Soft float library routines.
43089                                                             (line  139)
43090* __floatunsitf:                         Soft float library routines.
43091                                                             (line  141)
43092* __floatunsixf:                         Soft float library routines.
43093                                                             (line  142)
43094* __floatuntidf:                         Soft float library routines.
43095                                                             (line  152)
43096* __floatuntisf:                         Soft float library routines.
43097                                                             (line  151)
43098* __floatuntitf:                         Soft float library routines.
43099                                                             (line  153)
43100* __floatuntixf:                         Soft float library routines.
43101                                                             (line  154)
43102* __fractdadf:                           Fixed-point fractional library routines.
43103                                                             (line  636)
43104* __fractdadi:                           Fixed-point fractional library routines.
43105                                                             (line  633)
43106* __fractdadq:                           Fixed-point fractional library routines.
43107                                                             (line  616)
43108* __fractdaha2:                          Fixed-point fractional library routines.
43109                                                             (line  617)
43110* __fractdahi:                           Fixed-point fractional library routines.
43111                                                             (line  631)
43112* __fractdahq:                           Fixed-point fractional library routines.
43113                                                             (line  614)
43114* __fractdaqi:                           Fixed-point fractional library routines.
43115                                                             (line  630)
43116* __fractdaqq:                           Fixed-point fractional library routines.
43117                                                             (line  613)
43118* __fractdasa2:                          Fixed-point fractional library routines.
43119                                                             (line  618)
43120* __fractdasf:                           Fixed-point fractional library routines.
43121                                                             (line  635)
43122* __fractdasi:                           Fixed-point fractional library routines.
43123                                                             (line  632)
43124* __fractdasq:                           Fixed-point fractional library routines.
43125                                                             (line  615)
43126* __fractdata2:                          Fixed-point fractional library routines.
43127                                                             (line  619)
43128* __fractdati:                           Fixed-point fractional library routines.
43129                                                             (line  634)
43130* __fractdauda:                          Fixed-point fractional library routines.
43131                                                             (line  627)
43132* __fractdaudq:                          Fixed-point fractional library routines.
43133                                                             (line  624)
43134* __fractdauha:                          Fixed-point fractional library routines.
43135                                                             (line  625)
43136* __fractdauhq:                          Fixed-point fractional library routines.
43137                                                             (line  621)
43138* __fractdauqq:                          Fixed-point fractional library routines.
43139                                                             (line  620)
43140* __fractdausa:                          Fixed-point fractional library routines.
43141                                                             (line  626)
43142* __fractdausq:                          Fixed-point fractional library routines.
43143                                                             (line  622)
43144* __fractdauta:                          Fixed-point fractional library routines.
43145                                                             (line  629)
43146* __fractdfda:                           Fixed-point fractional library routines.
43147                                                             (line 1025)
43148* __fractdfdq:                           Fixed-point fractional library routines.
43149                                                             (line 1022)
43150* __fractdfha:                           Fixed-point fractional library routines.
43151                                                             (line 1023)
43152* __fractdfhq:                           Fixed-point fractional library routines.
43153                                                             (line 1020)
43154* __fractdfqq:                           Fixed-point fractional library routines.
43155                                                             (line 1019)
43156* __fractdfsa:                           Fixed-point fractional library routines.
43157                                                             (line 1024)
43158* __fractdfsq:                           Fixed-point fractional library routines.
43159                                                             (line 1021)
43160* __fractdfta:                           Fixed-point fractional library routines.
43161                                                             (line 1026)
43162* __fractdfuda:                          Fixed-point fractional library routines.
43163                                                             (line 1033)
43164* __fractdfudq:                          Fixed-point fractional library routines.
43165                                                             (line 1030)
43166* __fractdfuha:                          Fixed-point fractional library routines.
43167                                                             (line 1031)
43168* __fractdfuhq:                          Fixed-point fractional library routines.
43169                                                             (line 1028)
43170* __fractdfuqq:                          Fixed-point fractional library routines.
43171                                                             (line 1027)
43172* __fractdfusa:                          Fixed-point fractional library routines.
43173                                                             (line 1032)
43174* __fractdfusq:                          Fixed-point fractional library routines.
43175                                                             (line 1029)
43176* __fractdfuta:                          Fixed-point fractional library routines.
43177                                                             (line 1034)
43178* __fractdida:                           Fixed-point fractional library routines.
43179                                                             (line  975)
43180* __fractdidq:                           Fixed-point fractional library routines.
43181                                                             (line  972)
43182* __fractdiha:                           Fixed-point fractional library routines.
43183                                                             (line  973)
43184* __fractdihq:                           Fixed-point fractional library routines.
43185                                                             (line  970)
43186* __fractdiqq:                           Fixed-point fractional library routines.
43187                                                             (line  969)
43188* __fractdisa:                           Fixed-point fractional library routines.
43189                                                             (line  974)
43190* __fractdisq:                           Fixed-point fractional library routines.
43191                                                             (line  971)
43192* __fractdita:                           Fixed-point fractional library routines.
43193                                                             (line  976)
43194* __fractdiuda:                          Fixed-point fractional library routines.
43195                                                             (line  983)
43196* __fractdiudq:                          Fixed-point fractional library routines.
43197                                                             (line  980)
43198* __fractdiuha:                          Fixed-point fractional library routines.
43199                                                             (line  981)
43200* __fractdiuhq:                          Fixed-point fractional library routines.
43201                                                             (line  978)
43202* __fractdiuqq:                          Fixed-point fractional library routines.
43203                                                             (line  977)
43204* __fractdiusa:                          Fixed-point fractional library routines.
43205                                                             (line  982)
43206* __fractdiusq:                          Fixed-point fractional library routines.
43207                                                             (line  979)
43208* __fractdiuta:                          Fixed-point fractional library routines.
43209                                                             (line  984)
43210* __fractdqda:                           Fixed-point fractional library routines.
43211                                                             (line  544)
43212* __fractdqdf:                           Fixed-point fractional library routines.
43213                                                             (line  566)
43214* __fractdqdi:                           Fixed-point fractional library routines.
43215                                                             (line  563)
43216* __fractdqha:                           Fixed-point fractional library routines.
43217                                                             (line  542)
43218* __fractdqhi:                           Fixed-point fractional library routines.
43219                                                             (line  561)
43220* __fractdqhq2:                          Fixed-point fractional library routines.
43221                                                             (line  540)
43222* __fractdqqi:                           Fixed-point fractional library routines.
43223                                                             (line  560)
43224* __fractdqqq2:                          Fixed-point fractional library routines.
43225                                                             (line  539)
43226* __fractdqsa:                           Fixed-point fractional library routines.
43227                                                             (line  543)
43228* __fractdqsf:                           Fixed-point fractional library routines.
43229                                                             (line  565)
43230* __fractdqsi:                           Fixed-point fractional library routines.
43231                                                             (line  562)
43232* __fractdqsq2:                          Fixed-point fractional library routines.
43233                                                             (line  541)
43234* __fractdqta:                           Fixed-point fractional library routines.
43235                                                             (line  545)
43236* __fractdqti:                           Fixed-point fractional library routines.
43237                                                             (line  564)
43238* __fractdquda:                          Fixed-point fractional library routines.
43239                                                             (line  557)
43240* __fractdqudq:                          Fixed-point fractional library routines.
43241                                                             (line  552)
43242* __fractdquha:                          Fixed-point fractional library routines.
43243                                                             (line  554)
43244* __fractdquhq:                          Fixed-point fractional library routines.
43245                                                             (line  548)
43246* __fractdquqq:                          Fixed-point fractional library routines.
43247                                                             (line  547)
43248* __fractdqusa:                          Fixed-point fractional library routines.
43249                                                             (line  555)
43250* __fractdqusq:                          Fixed-point fractional library routines.
43251                                                             (line  550)
43252* __fractdquta:                          Fixed-point fractional library routines.
43253                                                             (line  559)
43254* __fracthada2:                          Fixed-point fractional library routines.
43255                                                             (line  572)
43256* __fracthadf:                           Fixed-point fractional library routines.
43257                                                             (line  590)
43258* __fracthadi:                           Fixed-point fractional library routines.
43259                                                             (line  587)
43260* __fracthadq:                           Fixed-point fractional library routines.
43261                                                             (line  570)
43262* __fracthahi:                           Fixed-point fractional library routines.
43263                                                             (line  585)
43264* __fracthahq:                           Fixed-point fractional library routines.
43265                                                             (line  568)
43266* __fracthaqi:                           Fixed-point fractional library routines.
43267                                                             (line  584)
43268* __fracthaqq:                           Fixed-point fractional library routines.
43269                                                             (line  567)
43270* __fracthasa2:                          Fixed-point fractional library routines.
43271                                                             (line  571)
43272* __fracthasf:                           Fixed-point fractional library routines.
43273                                                             (line  589)
43274* __fracthasi:                           Fixed-point fractional library routines.
43275                                                             (line  586)
43276* __fracthasq:                           Fixed-point fractional library routines.
43277                                                             (line  569)
43278* __fracthata2:                          Fixed-point fractional library routines.
43279                                                             (line  573)
43280* __fracthati:                           Fixed-point fractional library routines.
43281                                                             (line  588)
43282* __fracthauda:                          Fixed-point fractional library routines.
43283                                                             (line  581)
43284* __fracthaudq:                          Fixed-point fractional library routines.
43285                                                             (line  578)
43286* __fracthauha:                          Fixed-point fractional library routines.
43287                                                             (line  579)
43288* __fracthauhq:                          Fixed-point fractional library routines.
43289                                                             (line  575)
43290* __fracthauqq:                          Fixed-point fractional library routines.
43291                                                             (line  574)
43292* __fracthausa:                          Fixed-point fractional library routines.
43293                                                             (line  580)
43294* __fracthausq:                          Fixed-point fractional library routines.
43295                                                             (line  576)
43296* __fracthauta:                          Fixed-point fractional library routines.
43297                                                             (line  583)
43298* __fracthida:                           Fixed-point fractional library routines.
43299                                                             (line  943)
43300* __fracthidq:                           Fixed-point fractional library routines.
43301                                                             (line  940)
43302* __fracthiha:                           Fixed-point fractional library routines.
43303                                                             (line  941)
43304* __fracthihq:                           Fixed-point fractional library routines.
43305                                                             (line  938)
43306* __fracthiqq:                           Fixed-point fractional library routines.
43307                                                             (line  937)
43308* __fracthisa:                           Fixed-point fractional library routines.
43309                                                             (line  942)
43310* __fracthisq:                           Fixed-point fractional library routines.
43311                                                             (line  939)
43312* __fracthita:                           Fixed-point fractional library routines.
43313                                                             (line  944)
43314* __fracthiuda:                          Fixed-point fractional library routines.
43315                                                             (line  951)
43316* __fracthiudq:                          Fixed-point fractional library routines.
43317                                                             (line  948)
43318* __fracthiuha:                          Fixed-point fractional library routines.
43319                                                             (line  949)
43320* __fracthiuhq:                          Fixed-point fractional library routines.
43321                                                             (line  946)
43322* __fracthiuqq:                          Fixed-point fractional library routines.
43323                                                             (line  945)
43324* __fracthiusa:                          Fixed-point fractional library routines.
43325                                                             (line  950)
43326* __fracthiusq:                          Fixed-point fractional library routines.
43327                                                             (line  947)
43328* __fracthiuta:                          Fixed-point fractional library routines.
43329                                                             (line  952)
43330* __fracthqda:                           Fixed-point fractional library routines.
43331                                                             (line  498)
43332* __fracthqdf:                           Fixed-point fractional library routines.
43333                                                             (line  514)
43334* __fracthqdi:                           Fixed-point fractional library routines.
43335                                                             (line  511)
43336* __fracthqdq2:                          Fixed-point fractional library routines.
43337                                                             (line  495)
43338* __fracthqha:                           Fixed-point fractional library routines.
43339                                                             (line  496)
43340* __fracthqhi:                           Fixed-point fractional library routines.
43341                                                             (line  509)
43342* __fracthqqi:                           Fixed-point fractional library routines.
43343                                                             (line  508)
43344* __fracthqqq2:                          Fixed-point fractional library routines.
43345                                                             (line  493)
43346* __fracthqsa:                           Fixed-point fractional library routines.
43347                                                             (line  497)
43348* __fracthqsf:                           Fixed-point fractional library routines.
43349                                                             (line  513)
43350* __fracthqsi:                           Fixed-point fractional library routines.
43351                                                             (line  510)
43352* __fracthqsq2:                          Fixed-point fractional library routines.
43353                                                             (line  494)
43354* __fracthqta:                           Fixed-point fractional library routines.
43355                                                             (line  499)
43356* __fracthqti:                           Fixed-point fractional library routines.
43357                                                             (line  512)
43358* __fracthquda:                          Fixed-point fractional library routines.
43359                                                             (line  506)
43360* __fracthqudq:                          Fixed-point fractional library routines.
43361                                                             (line  503)
43362* __fracthquha:                          Fixed-point fractional library routines.
43363                                                             (line  504)
43364* __fracthquhq:                          Fixed-point fractional library routines.
43365                                                             (line  501)
43366* __fracthquqq:                          Fixed-point fractional library routines.
43367                                                             (line  500)
43368* __fracthqusa:                          Fixed-point fractional library routines.
43369                                                             (line  505)
43370* __fracthqusq:                          Fixed-point fractional library routines.
43371                                                             (line  502)
43372* __fracthquta:                          Fixed-point fractional library routines.
43373                                                             (line  507)
43374* __fractqida:                           Fixed-point fractional library routines.
43375                                                             (line  925)
43376* __fractqidq:                           Fixed-point fractional library routines.
43377                                                             (line  922)
43378* __fractqiha:                           Fixed-point fractional library routines.
43379                                                             (line  923)
43380* __fractqihq:                           Fixed-point fractional library routines.
43381                                                             (line  920)
43382* __fractqiqq:                           Fixed-point fractional library routines.
43383                                                             (line  919)
43384* __fractqisa:                           Fixed-point fractional library routines.
43385                                                             (line  924)
43386* __fractqisq:                           Fixed-point fractional library routines.
43387                                                             (line  921)
43388* __fractqita:                           Fixed-point fractional library routines.
43389                                                             (line  926)
43390* __fractqiuda:                          Fixed-point fractional library routines.
43391                                                             (line  934)
43392* __fractqiudq:                          Fixed-point fractional library routines.
43393                                                             (line  931)
43394* __fractqiuha:                          Fixed-point fractional library routines.
43395                                                             (line  932)
43396* __fractqiuhq:                          Fixed-point fractional library routines.
43397                                                             (line  928)
43398* __fractqiuqq:                          Fixed-point fractional library routines.
43399                                                             (line  927)
43400* __fractqiusa:                          Fixed-point fractional library routines.
43401                                                             (line  933)
43402* __fractqiusq:                          Fixed-point fractional library routines.
43403                                                             (line  929)
43404* __fractqiuta:                          Fixed-point fractional library routines.
43405                                                             (line  936)
43406* __fractqqda:                           Fixed-point fractional library routines.
43407                                                             (line  474)
43408* __fractqqdf:                           Fixed-point fractional library routines.
43409                                                             (line  492)
43410* __fractqqdi:                           Fixed-point fractional library routines.
43411                                                             (line  489)
43412* __fractqqdq2:                          Fixed-point fractional library routines.
43413                                                             (line  471)
43414* __fractqqha:                           Fixed-point fractional library routines.
43415                                                             (line  472)
43416* __fractqqhi:                           Fixed-point fractional library routines.
43417                                                             (line  487)
43418* __fractqqhq2:                          Fixed-point fractional library routines.
43419                                                             (line  469)
43420* __fractqqqi:                           Fixed-point fractional library routines.
43421                                                             (line  486)
43422* __fractqqsa:                           Fixed-point fractional library routines.
43423                                                             (line  473)
43424* __fractqqsf:                           Fixed-point fractional library routines.
43425                                                             (line  491)
43426* __fractqqsi:                           Fixed-point fractional library routines.
43427                                                             (line  488)
43428* __fractqqsq2:                          Fixed-point fractional library routines.
43429                                                             (line  470)
43430* __fractqqta:                           Fixed-point fractional library routines.
43431                                                             (line  475)
43432* __fractqqti:                           Fixed-point fractional library routines.
43433                                                             (line  490)
43434* __fractqquda:                          Fixed-point fractional library routines.
43435                                                             (line  483)
43436* __fractqqudq:                          Fixed-point fractional library routines.
43437                                                             (line  480)
43438* __fractqquha:                          Fixed-point fractional library routines.
43439                                                             (line  481)
43440* __fractqquhq:                          Fixed-point fractional library routines.
43441                                                             (line  477)
43442* __fractqquqq:                          Fixed-point fractional library routines.
43443                                                             (line  476)
43444* __fractqqusa:                          Fixed-point fractional library routines.
43445                                                             (line  482)
43446* __fractqqusq:                          Fixed-point fractional library routines.
43447                                                             (line  478)
43448* __fractqquta:                          Fixed-point fractional library routines.
43449                                                             (line  485)
43450* __fractsada2:                          Fixed-point fractional library routines.
43451                                                             (line  596)
43452* __fractsadf:                           Fixed-point fractional library routines.
43453                                                             (line  612)
43454* __fractsadi:                           Fixed-point fractional library routines.
43455                                                             (line  609)
43456* __fractsadq:                           Fixed-point fractional library routines.
43457                                                             (line  594)
43458* __fractsaha2:                          Fixed-point fractional library routines.
43459                                                             (line  595)
43460* __fractsahi:                           Fixed-point fractional library routines.
43461                                                             (line  607)
43462* __fractsahq:                           Fixed-point fractional library routines.
43463                                                             (line  592)
43464* __fractsaqi:                           Fixed-point fractional library routines.
43465                                                             (line  606)
43466* __fractsaqq:                           Fixed-point fractional library routines.
43467                                                             (line  591)
43468* __fractsasf:                           Fixed-point fractional library routines.
43469                                                             (line  611)
43470* __fractsasi:                           Fixed-point fractional library routines.
43471                                                             (line  608)
43472* __fractsasq:                           Fixed-point fractional library routines.
43473                                                             (line  593)
43474* __fractsata2:                          Fixed-point fractional library routines.
43475                                                             (line  597)
43476* __fractsati:                           Fixed-point fractional library routines.
43477                                                             (line  610)
43478* __fractsauda:                          Fixed-point fractional library routines.
43479                                                             (line  604)
43480* __fractsaudq:                          Fixed-point fractional library routines.
43481                                                             (line  601)
43482* __fractsauha:                          Fixed-point fractional library routines.
43483                                                             (line  602)
43484* __fractsauhq:                          Fixed-point fractional library routines.
43485                                                             (line  599)
43486* __fractsauqq:                          Fixed-point fractional library routines.
43487                                                             (line  598)
43488* __fractsausa:                          Fixed-point fractional library routines.
43489                                                             (line  603)
43490* __fractsausq:                          Fixed-point fractional library routines.
43491                                                             (line  600)
43492* __fractsauta:                          Fixed-point fractional library routines.
43493                                                             (line  605)
43494* __fractsfda:                           Fixed-point fractional library routines.
43495                                                             (line 1009)
43496* __fractsfdq:                           Fixed-point fractional library routines.
43497                                                             (line 1006)
43498* __fractsfha:                           Fixed-point fractional library routines.
43499                                                             (line 1007)
43500* __fractsfhq:                           Fixed-point fractional library routines.
43501                                                             (line 1004)
43502* __fractsfqq:                           Fixed-point fractional library routines.
43503                                                             (line 1003)
43504* __fractsfsa:                           Fixed-point fractional library routines.
43505                                                             (line 1008)
43506* __fractsfsq:                           Fixed-point fractional library routines.
43507                                                             (line 1005)
43508* __fractsfta:                           Fixed-point fractional library routines.
43509                                                             (line 1010)
43510* __fractsfuda:                          Fixed-point fractional library routines.
43511                                                             (line 1017)
43512* __fractsfudq:                          Fixed-point fractional library routines.
43513                                                             (line 1014)
43514* __fractsfuha:                          Fixed-point fractional library routines.
43515                                                             (line 1015)
43516* __fractsfuhq:                          Fixed-point fractional library routines.
43517                                                             (line 1012)
43518* __fractsfuqq:                          Fixed-point fractional library routines.
43519                                                             (line 1011)
43520* __fractsfusa:                          Fixed-point fractional library routines.
43521                                                             (line 1016)
43522* __fractsfusq:                          Fixed-point fractional library routines.
43523                                                             (line 1013)
43524* __fractsfuta:                          Fixed-point fractional library routines.
43525                                                             (line 1018)
43526* __fractsida:                           Fixed-point fractional library routines.
43527                                                             (line  959)
43528* __fractsidq:                           Fixed-point fractional library routines.
43529                                                             (line  956)
43530* __fractsiha:                           Fixed-point fractional library routines.
43531                                                             (line  957)
43532* __fractsihq:                           Fixed-point fractional library routines.
43533                                                             (line  954)
43534* __fractsiqq:                           Fixed-point fractional library routines.
43535                                                             (line  953)
43536* __fractsisa:                           Fixed-point fractional library routines.
43537                                                             (line  958)
43538* __fractsisq:                           Fixed-point fractional library routines.
43539                                                             (line  955)
43540* __fractsita:                           Fixed-point fractional library routines.
43541                                                             (line  960)
43542* __fractsiuda:                          Fixed-point fractional library routines.
43543                                                             (line  967)
43544* __fractsiudq:                          Fixed-point fractional library routines.
43545                                                             (line  964)
43546* __fractsiuha:                          Fixed-point fractional library routines.
43547                                                             (line  965)
43548* __fractsiuhq:                          Fixed-point fractional library routines.
43549                                                             (line  962)
43550* __fractsiuqq:                          Fixed-point fractional library routines.
43551                                                             (line  961)
43552* __fractsiusa:                          Fixed-point fractional library routines.
43553                                                             (line  966)
43554* __fractsiusq:                          Fixed-point fractional library routines.
43555                                                             (line  963)
43556* __fractsiuta:                          Fixed-point fractional library routines.
43557                                                             (line  968)
43558* __fractsqda:                           Fixed-point fractional library routines.
43559                                                             (line  520)
43560* __fractsqdf:                           Fixed-point fractional library routines.
43561                                                             (line  538)
43562* __fractsqdi:                           Fixed-point fractional library routines.
43563                                                             (line  535)
43564* __fractsqdq2:                          Fixed-point fractional library routines.
43565                                                             (line  517)
43566* __fractsqha:                           Fixed-point fractional library routines.
43567                                                             (line  518)
43568* __fractsqhi:                           Fixed-point fractional library routines.
43569                                                             (line  533)
43570* __fractsqhq2:                          Fixed-point fractional library routines.
43571                                                             (line  516)
43572* __fractsqqi:                           Fixed-point fractional library routines.
43573                                                             (line  532)
43574* __fractsqqq2:                          Fixed-point fractional library routines.
43575                                                             (line  515)
43576* __fractsqsa:                           Fixed-point fractional library routines.
43577                                                             (line  519)
43578* __fractsqsf:                           Fixed-point fractional library routines.
43579                                                             (line  537)
43580* __fractsqsi:                           Fixed-point fractional library routines.
43581                                                             (line  534)
43582* __fractsqta:                           Fixed-point fractional library routines.
43583                                                             (line  521)
43584* __fractsqti:                           Fixed-point fractional library routines.
43585                                                             (line  536)
43586* __fractsquda:                          Fixed-point fractional library routines.
43587                                                             (line  529)
43588* __fractsqudq:                          Fixed-point fractional library routines.
43589                                                             (line  526)
43590* __fractsquha:                          Fixed-point fractional library routines.
43591                                                             (line  527)
43592* __fractsquhq:                          Fixed-point fractional library routines.
43593                                                             (line  523)
43594* __fractsquqq:                          Fixed-point fractional library routines.
43595                                                             (line  522)
43596* __fractsqusa:                          Fixed-point fractional library routines.
43597                                                             (line  528)
43598* __fractsqusq:                          Fixed-point fractional library routines.
43599                                                             (line  524)
43600* __fractsquta:                          Fixed-point fractional library routines.
43601                                                             (line  531)
43602* __fracttada2:                          Fixed-point fractional library routines.
43603                                                             (line  643)
43604* __fracttadf:                           Fixed-point fractional library routines.
43605                                                             (line  664)
43606* __fracttadi:                           Fixed-point fractional library routines.
43607                                                             (line  661)
43608* __fracttadq:                           Fixed-point fractional library routines.
43609                                                             (line  640)
43610* __fracttaha2:                          Fixed-point fractional library routines.
43611                                                             (line  641)
43612* __fracttahi:                           Fixed-point fractional library routines.
43613                                                             (line  659)
43614* __fracttahq:                           Fixed-point fractional library routines.
43615                                                             (line  638)
43616* __fracttaqi:                           Fixed-point fractional library routines.
43617                                                             (line  658)
43618* __fracttaqq:                           Fixed-point fractional library routines.
43619                                                             (line  637)
43620* __fracttasa2:                          Fixed-point fractional library routines.
43621                                                             (line  642)
43622* __fracttasf:                           Fixed-point fractional library routines.
43623                                                             (line  663)
43624* __fracttasi:                           Fixed-point fractional library routines.
43625                                                             (line  660)
43626* __fracttasq:                           Fixed-point fractional library routines.
43627                                                             (line  639)
43628* __fracttati:                           Fixed-point fractional library routines.
43629                                                             (line  662)
43630* __fracttauda:                          Fixed-point fractional library routines.
43631                                                             (line  655)
43632* __fracttaudq:                          Fixed-point fractional library routines.
43633                                                             (line  650)
43634* __fracttauha:                          Fixed-point fractional library routines.
43635                                                             (line  652)
43636* __fracttauhq:                          Fixed-point fractional library routines.
43637                                                             (line  646)
43638* __fracttauqq:                          Fixed-point fractional library routines.
43639                                                             (line  645)
43640* __fracttausa:                          Fixed-point fractional library routines.
43641                                                             (line  653)
43642* __fracttausq:                          Fixed-point fractional library routines.
43643                                                             (line  648)
43644* __fracttauta:                          Fixed-point fractional library routines.
43645                                                             (line  657)
43646* __fracttida:                           Fixed-point fractional library routines.
43647                                                             (line  991)
43648* __fracttidq:                           Fixed-point fractional library routines.
43649                                                             (line  988)
43650* __fracttiha:                           Fixed-point fractional library routines.
43651                                                             (line  989)
43652* __fracttihq:                           Fixed-point fractional library routines.
43653                                                             (line  986)
43654* __fracttiqq:                           Fixed-point fractional library routines.
43655                                                             (line  985)
43656* __fracttisa:                           Fixed-point fractional library routines.
43657                                                             (line  990)
43658* __fracttisq:                           Fixed-point fractional library routines.
43659                                                             (line  987)
43660* __fracttita:                           Fixed-point fractional library routines.
43661                                                             (line  992)
43662* __fracttiuda:                          Fixed-point fractional library routines.
43663                                                             (line 1000)
43664* __fracttiudq:                          Fixed-point fractional library routines.
43665                                                             (line  997)
43666* __fracttiuha:                          Fixed-point fractional library routines.
43667                                                             (line  998)
43668* __fracttiuhq:                          Fixed-point fractional library routines.
43669                                                             (line  994)
43670* __fracttiuqq:                          Fixed-point fractional library routines.
43671                                                             (line  993)
43672* __fracttiusa:                          Fixed-point fractional library routines.
43673                                                             (line  999)
43674* __fracttiusq:                          Fixed-point fractional library routines.
43675                                                             (line  995)
43676* __fracttiuta:                          Fixed-point fractional library routines.
43677                                                             (line 1002)
43678* __fractudada:                          Fixed-point fractional library routines.
43679                                                             (line  858)
43680* __fractudadf:                          Fixed-point fractional library routines.
43681                                                             (line  881)
43682* __fractudadi:                          Fixed-point fractional library routines.
43683                                                             (line  878)
43684* __fractudadq:                          Fixed-point fractional library routines.
43685                                                             (line  855)
43686* __fractudaha:                          Fixed-point fractional library routines.
43687                                                             (line  856)
43688* __fractudahi:                          Fixed-point fractional library routines.
43689                                                             (line  876)
43690* __fractudahq:                          Fixed-point fractional library routines.
43691                                                             (line  852)
43692* __fractudaqi:                          Fixed-point fractional library routines.
43693                                                             (line  875)
43694* __fractudaqq:                          Fixed-point fractional library routines.
43695                                                             (line  851)
43696* __fractudasa:                          Fixed-point fractional library routines.
43697                                                             (line  857)
43698* __fractudasf:                          Fixed-point fractional library routines.
43699                                                             (line  880)
43700* __fractudasi:                          Fixed-point fractional library routines.
43701                                                             (line  877)
43702* __fractudasq:                          Fixed-point fractional library routines.
43703                                                             (line  853)
43704* __fractudata:                          Fixed-point fractional library routines.
43705                                                             (line  860)
43706* __fractudati:                          Fixed-point fractional library routines.
43707                                                             (line  879)
43708* __fractudaudq:                         Fixed-point fractional library routines.
43709                                                             (line  868)
43710* __fractudauha2:                        Fixed-point fractional library routines.
43711                                                             (line  870)
43712* __fractudauhq:                         Fixed-point fractional library routines.
43713                                                             (line  864)
43714* __fractudauqq:                         Fixed-point fractional library routines.
43715                                                             (line  862)
43716* __fractudausa2:                        Fixed-point fractional library routines.
43717                                                             (line  872)
43718* __fractudausq:                         Fixed-point fractional library routines.
43719                                                             (line  866)
43720* __fractudauta2:                        Fixed-point fractional library routines.
43721                                                             (line  874)
43722* __fractudqda:                          Fixed-point fractional library routines.
43723                                                             (line  766)
43724* __fractudqdf:                          Fixed-point fractional library routines.
43725                                                             (line  791)
43726* __fractudqdi:                          Fixed-point fractional library routines.
43727                                                             (line  787)
43728* __fractudqdq:                          Fixed-point fractional library routines.
43729                                                             (line  761)
43730* __fractudqha:                          Fixed-point fractional library routines.
43731                                                             (line  763)
43732* __fractudqhi:                          Fixed-point fractional library routines.
43733                                                             (line  785)
43734* __fractudqhq:                          Fixed-point fractional library routines.
43735                                                             (line  757)
43736* __fractudqqi:                          Fixed-point fractional library routines.
43737                                                             (line  784)
43738* __fractudqqq:                          Fixed-point fractional library routines.
43739                                                             (line  756)
43740* __fractudqsa:                          Fixed-point fractional library routines.
43741                                                             (line  764)
43742* __fractudqsf:                          Fixed-point fractional library routines.
43743                                                             (line  790)
43744* __fractudqsi:                          Fixed-point fractional library routines.
43745                                                             (line  786)
43746* __fractudqsq:                          Fixed-point fractional library routines.
43747                                                             (line  759)
43748* __fractudqta:                          Fixed-point fractional library routines.
43749                                                             (line  768)
43750* __fractudqti:                          Fixed-point fractional library routines.
43751                                                             (line  789)
43752* __fractudquda:                         Fixed-point fractional library routines.
43753                                                             (line  780)
43754* __fractudquha:                         Fixed-point fractional library routines.
43755                                                             (line  776)
43756* __fractudquhq2:                        Fixed-point fractional library routines.
43757                                                             (line  772)
43758* __fractudquqq2:                        Fixed-point fractional library routines.
43759                                                             (line  770)
43760* __fractudqusa:                         Fixed-point fractional library routines.
43761                                                             (line  778)
43762* __fractudqusq2:                        Fixed-point fractional library routines.
43763                                                             (line  774)
43764* __fractudquta:                         Fixed-point fractional library routines.
43765                                                             (line  782)
43766* __fractuhada:                          Fixed-point fractional library routines.
43767                                                             (line  799)
43768* __fractuhadf:                          Fixed-point fractional library routines.
43769                                                             (line  822)
43770* __fractuhadi:                          Fixed-point fractional library routines.
43771                                                             (line  819)
43772* __fractuhadq:                          Fixed-point fractional library routines.
43773                                                             (line  796)
43774* __fractuhaha:                          Fixed-point fractional library routines.
43775                                                             (line  797)
43776* __fractuhahi:                          Fixed-point fractional library routines.
43777                                                             (line  817)
43778* __fractuhahq:                          Fixed-point fractional library routines.
43779                                                             (line  793)
43780* __fractuhaqi:                          Fixed-point fractional library routines.
43781                                                             (line  816)
43782* __fractuhaqq:                          Fixed-point fractional library routines.
43783                                                             (line  792)
43784* __fractuhasa:                          Fixed-point fractional library routines.
43785                                                             (line  798)
43786* __fractuhasf:                          Fixed-point fractional library routines.
43787                                                             (line  821)
43788* __fractuhasi:                          Fixed-point fractional library routines.
43789                                                             (line  818)
43790* __fractuhasq:                          Fixed-point fractional library routines.
43791                                                             (line  794)
43792* __fractuhata:                          Fixed-point fractional library routines.
43793                                                             (line  801)
43794* __fractuhati:                          Fixed-point fractional library routines.
43795                                                             (line  820)
43796* __fractuhauda2:                        Fixed-point fractional library routines.
43797                                                             (line  813)
43798* __fractuhaudq:                         Fixed-point fractional library routines.
43799                                                             (line  809)
43800* __fractuhauhq:                         Fixed-point fractional library routines.
43801                                                             (line  805)
43802* __fractuhauqq:                         Fixed-point fractional library routines.
43803                                                             (line  803)
43804* __fractuhausa2:                        Fixed-point fractional library routines.
43805                                                             (line  811)
43806* __fractuhausq:                         Fixed-point fractional library routines.
43807                                                             (line  807)
43808* __fractuhauta2:                        Fixed-point fractional library routines.
43809                                                             (line  815)
43810* __fractuhqda:                          Fixed-point fractional library routines.
43811                                                             (line  702)
43812* __fractuhqdf:                          Fixed-point fractional library routines.
43813                                                             (line  723)
43814* __fractuhqdi:                          Fixed-point fractional library routines.
43815                                                             (line  720)
43816* __fractuhqdq:                          Fixed-point fractional library routines.
43817                                                             (line  699)
43818* __fractuhqha:                          Fixed-point fractional library routines.
43819                                                             (line  700)
43820* __fractuhqhi:                          Fixed-point fractional library routines.
43821                                                             (line  718)
43822* __fractuhqhq:                          Fixed-point fractional library routines.
43823                                                             (line  697)
43824* __fractuhqqi:                          Fixed-point fractional library routines.
43825                                                             (line  717)
43826* __fractuhqqq:                          Fixed-point fractional library routines.
43827                                                             (line  696)
43828* __fractuhqsa:                          Fixed-point fractional library routines.
43829                                                             (line  701)
43830* __fractuhqsf:                          Fixed-point fractional library routines.
43831                                                             (line  722)
43832* __fractuhqsi:                          Fixed-point fractional library routines.
43833                                                             (line  719)
43834* __fractuhqsq:                          Fixed-point fractional library routines.
43835                                                             (line  698)
43836* __fractuhqta:                          Fixed-point fractional library routines.
43837                                                             (line  703)
43838* __fractuhqti:                          Fixed-point fractional library routines.
43839                                                             (line  721)
43840* __fractuhquda:                         Fixed-point fractional library routines.
43841                                                             (line  714)
43842* __fractuhqudq2:                        Fixed-point fractional library routines.
43843                                                             (line  709)
43844* __fractuhquha:                         Fixed-point fractional library routines.
43845                                                             (line  711)
43846* __fractuhquqq2:                        Fixed-point fractional library routines.
43847                                                             (line  705)
43848* __fractuhqusa:                         Fixed-point fractional library routines.
43849                                                             (line  712)
43850* __fractuhqusq2:                        Fixed-point fractional library routines.
43851                                                             (line  707)
43852* __fractuhquta:                         Fixed-point fractional library routines.
43853                                                             (line  716)
43854* __fractunsdadi:                        Fixed-point fractional library routines.
43855                                                             (line 1555)
43856* __fractunsdahi:                        Fixed-point fractional library routines.
43857                                                             (line 1553)
43858* __fractunsdaqi:                        Fixed-point fractional library routines.
43859                                                             (line 1552)
43860* __fractunsdasi:                        Fixed-point fractional library routines.
43861                                                             (line 1554)
43862* __fractunsdati:                        Fixed-point fractional library routines.
43863                                                             (line 1556)
43864* __fractunsdida:                        Fixed-point fractional library routines.
43865                                                             (line 1707)
43866* __fractunsdidq:                        Fixed-point fractional library routines.
43867                                                             (line 1704)
43868* __fractunsdiha:                        Fixed-point fractional library routines.
43869                                                             (line 1705)
43870* __fractunsdihq:                        Fixed-point fractional library routines.
43871                                                             (line 1702)
43872* __fractunsdiqq:                        Fixed-point fractional library routines.
43873                                                             (line 1701)
43874* __fractunsdisa:                        Fixed-point fractional library routines.
43875                                                             (line 1706)
43876* __fractunsdisq:                        Fixed-point fractional library routines.
43877                                                             (line 1703)
43878* __fractunsdita:                        Fixed-point fractional library routines.
43879                                                             (line 1708)
43880* __fractunsdiuda:                       Fixed-point fractional library routines.
43881                                                             (line 1720)
43882* __fractunsdiudq:                       Fixed-point fractional library routines.
43883                                                             (line 1715)
43884* __fractunsdiuha:                       Fixed-point fractional library routines.
43885                                                             (line 1717)
43886* __fractunsdiuhq:                       Fixed-point fractional library routines.
43887                                                             (line 1711)
43888* __fractunsdiuqq:                       Fixed-point fractional library routines.
43889                                                             (line 1710)
43890* __fractunsdiusa:                       Fixed-point fractional library routines.
43891                                                             (line 1718)
43892* __fractunsdiusq:                       Fixed-point fractional library routines.
43893                                                             (line 1713)
43894* __fractunsdiuta:                       Fixed-point fractional library routines.
43895                                                             (line 1722)
43896* __fractunsdqdi:                        Fixed-point fractional library routines.
43897                                                             (line 1539)
43898* __fractunsdqhi:                        Fixed-point fractional library routines.
43899                                                             (line 1537)
43900* __fractunsdqqi:                        Fixed-point fractional library routines.
43901                                                             (line 1536)
43902* __fractunsdqsi:                        Fixed-point fractional library routines.
43903                                                             (line 1538)
43904* __fractunsdqti:                        Fixed-point fractional library routines.
43905                                                             (line 1541)
43906* __fractunshadi:                        Fixed-point fractional library routines.
43907                                                             (line 1545)
43908* __fractunshahi:                        Fixed-point fractional library routines.
43909                                                             (line 1543)
43910* __fractunshaqi:                        Fixed-point fractional library routines.
43911                                                             (line 1542)
43912* __fractunshasi:                        Fixed-point fractional library routines.
43913                                                             (line 1544)
43914* __fractunshati:                        Fixed-point fractional library routines.
43915                                                             (line 1546)
43916* __fractunshida:                        Fixed-point fractional library routines.
43917                                                             (line 1663)
43918* __fractunshidq:                        Fixed-point fractional library routines.
43919                                                             (line 1660)
43920* __fractunshiha:                        Fixed-point fractional library routines.
43921                                                             (line 1661)
43922* __fractunshihq:                        Fixed-point fractional library routines.
43923                                                             (line 1658)
43924* __fractunshiqq:                        Fixed-point fractional library routines.
43925                                                             (line 1657)
43926* __fractunshisa:                        Fixed-point fractional library routines.
43927                                                             (line 1662)
43928* __fractunshisq:                        Fixed-point fractional library routines.
43929                                                             (line 1659)
43930* __fractunshita:                        Fixed-point fractional library routines.
43931                                                             (line 1664)
43932* __fractunshiuda:                       Fixed-point fractional library routines.
43933                                                             (line 1676)
43934* __fractunshiudq:                       Fixed-point fractional library routines.
43935                                                             (line 1671)
43936* __fractunshiuha:                       Fixed-point fractional library routines.
43937                                                             (line 1673)
43938* __fractunshiuhq:                       Fixed-point fractional library routines.
43939                                                             (line 1667)
43940* __fractunshiuqq:                       Fixed-point fractional library routines.
43941                                                             (line 1666)
43942* __fractunshiusa:                       Fixed-point fractional library routines.
43943                                                             (line 1674)
43944* __fractunshiusq:                       Fixed-point fractional library routines.
43945                                                             (line 1669)
43946* __fractunshiuta:                       Fixed-point fractional library routines.
43947                                                             (line 1678)
43948* __fractunshqdi:                        Fixed-point fractional library routines.
43949                                                             (line 1529)
43950* __fractunshqhi:                        Fixed-point fractional library routines.
43951                                                             (line 1527)
43952* __fractunshqqi:                        Fixed-point fractional library routines.
43953                                                             (line 1526)
43954* __fractunshqsi:                        Fixed-point fractional library routines.
43955                                                             (line 1528)
43956* __fractunshqti:                        Fixed-point fractional library routines.
43957                                                             (line 1530)
43958* __fractunsqida:                        Fixed-point fractional library routines.
43959                                                             (line 1641)
43960* __fractunsqidq:                        Fixed-point fractional library routines.
43961                                                             (line 1638)
43962* __fractunsqiha:                        Fixed-point fractional library routines.
43963                                                             (line 1639)
43964* __fractunsqihq:                        Fixed-point fractional library routines.
43965                                                             (line 1636)
43966* __fractunsqiqq:                        Fixed-point fractional library routines.
43967                                                             (line 1635)
43968* __fractunsqisa:                        Fixed-point fractional library routines.
43969                                                             (line 1640)
43970* __fractunsqisq:                        Fixed-point fractional library routines.
43971                                                             (line 1637)
43972* __fractunsqita:                        Fixed-point fractional library routines.
43973                                                             (line 1642)
43974* __fractunsqiuda:                       Fixed-point fractional library routines.
43975                                                             (line 1654)
43976* __fractunsqiudq:                       Fixed-point fractional library routines.
43977                                                             (line 1649)
43978* __fractunsqiuha:                       Fixed-point fractional library routines.
43979                                                             (line 1651)
43980* __fractunsqiuhq:                       Fixed-point fractional library routines.
43981                                                             (line 1645)
43982* __fractunsqiuqq:                       Fixed-point fractional library routines.
43983                                                             (line 1644)
43984* __fractunsqiusa:                       Fixed-point fractional library routines.
43985                                                             (line 1652)
43986* __fractunsqiusq:                       Fixed-point fractional library routines.
43987                                                             (line 1647)
43988* __fractunsqiuta:                       Fixed-point fractional library routines.
43989                                                             (line 1656)
43990* __fractunsqqdi:                        Fixed-point fractional library routines.
43991                                                             (line 1524)
43992* __fractunsqqhi:                        Fixed-point fractional library routines.
43993                                                             (line 1522)
43994* __fractunsqqqi:                        Fixed-point fractional library routines.
43995                                                             (line 1521)
43996* __fractunsqqsi:                        Fixed-point fractional library routines.
43997                                                             (line 1523)
43998* __fractunsqqti:                        Fixed-point fractional library routines.
43999                                                             (line 1525)
44000* __fractunssadi:                        Fixed-point fractional library routines.
44001                                                             (line 1550)
44002* __fractunssahi:                        Fixed-point fractional library routines.
44003                                                             (line 1548)
44004* __fractunssaqi:                        Fixed-point fractional library routines.
44005                                                             (line 1547)
44006* __fractunssasi:                        Fixed-point fractional library routines.
44007                                                             (line 1549)
44008* __fractunssati:                        Fixed-point fractional library routines.
44009                                                             (line 1551)
44010* __fractunssida:                        Fixed-point fractional library routines.
44011                                                             (line 1685)
44012* __fractunssidq:                        Fixed-point fractional library routines.
44013                                                             (line 1682)
44014* __fractunssiha:                        Fixed-point fractional library routines.
44015                                                             (line 1683)
44016* __fractunssihq:                        Fixed-point fractional library routines.
44017                                                             (line 1680)
44018* __fractunssiqq:                        Fixed-point fractional library routines.
44019                                                             (line 1679)
44020* __fractunssisa:                        Fixed-point fractional library routines.
44021                                                             (line 1684)
44022* __fractunssisq:                        Fixed-point fractional library routines.
44023                                                             (line 1681)
44024* __fractunssita:                        Fixed-point fractional library routines.
44025                                                             (line 1686)
44026* __fractunssiuda:                       Fixed-point fractional library routines.
44027                                                             (line 1698)
44028* __fractunssiudq:                       Fixed-point fractional library routines.
44029                                                             (line 1693)
44030* __fractunssiuha:                       Fixed-point fractional library routines.
44031                                                             (line 1695)
44032* __fractunssiuhq:                       Fixed-point fractional library routines.
44033                                                             (line 1689)
44034* __fractunssiuqq:                       Fixed-point fractional library routines.
44035                                                             (line 1688)
44036* __fractunssiusa:                       Fixed-point fractional library routines.
44037                                                             (line 1696)
44038* __fractunssiusq:                       Fixed-point fractional library routines.
44039                                                             (line 1691)
44040* __fractunssiuta:                       Fixed-point fractional library routines.
44041                                                             (line 1700)
44042* __fractunssqdi:                        Fixed-point fractional library routines.
44043                                                             (line 1534)
44044* __fractunssqhi:                        Fixed-point fractional library routines.
44045                                                             (line 1532)
44046* __fractunssqqi:                        Fixed-point fractional library routines.
44047                                                             (line 1531)
44048* __fractunssqsi:                        Fixed-point fractional library routines.
44049                                                             (line 1533)
44050* __fractunssqti:                        Fixed-point fractional library routines.
44051                                                             (line 1535)
44052* __fractunstadi:                        Fixed-point fractional library routines.
44053                                                             (line 1560)
44054* __fractunstahi:                        Fixed-point fractional library routines.
44055                                                             (line 1558)
44056* __fractunstaqi:                        Fixed-point fractional library routines.
44057                                                             (line 1557)
44058* __fractunstasi:                        Fixed-point fractional library routines.
44059                                                             (line 1559)
44060* __fractunstati:                        Fixed-point fractional library routines.
44061                                                             (line 1562)
44062* __fractunstida:                        Fixed-point fractional library routines.
44063                                                             (line 1730)
44064* __fractunstidq:                        Fixed-point fractional library routines.
44065                                                             (line 1727)
44066* __fractunstiha:                        Fixed-point fractional library routines.
44067                                                             (line 1728)
44068* __fractunstihq:                        Fixed-point fractional library routines.
44069                                                             (line 1724)
44070* __fractunstiqq:                        Fixed-point fractional library routines.
44071                                                             (line 1723)
44072* __fractunstisa:                        Fixed-point fractional library routines.
44073                                                             (line 1729)
44074* __fractunstisq:                        Fixed-point fractional library routines.
44075                                                             (line 1725)
44076* __fractunstita:                        Fixed-point fractional library routines.
44077                                                             (line 1732)
44078* __fractunstiuda:                       Fixed-point fractional library routines.
44079                                                             (line 1746)
44080* __fractunstiudq:                       Fixed-point fractional library routines.
44081                                                             (line 1740)
44082* __fractunstiuha:                       Fixed-point fractional library routines.
44083                                                             (line 1742)
44084* __fractunstiuhq:                       Fixed-point fractional library routines.
44085                                                             (line 1736)
44086* __fractunstiuqq:                       Fixed-point fractional library routines.
44087                                                             (line 1734)
44088* __fractunstiusa:                       Fixed-point fractional library routines.
44089                                                             (line 1744)
44090* __fractunstiusq:                       Fixed-point fractional library routines.
44091                                                             (line 1738)
44092* __fractunstiuta:                       Fixed-point fractional library routines.
44093                                                             (line 1748)
44094* __fractunsudadi:                       Fixed-point fractional library routines.
44095                                                             (line 1622)
44096* __fractunsudahi:                       Fixed-point fractional library routines.
44097                                                             (line 1618)
44098* __fractunsudaqi:                       Fixed-point fractional library routines.
44099                                                             (line 1616)
44100* __fractunsudasi:                       Fixed-point fractional library routines.
44101                                                             (line 1620)
44102* __fractunsudati:                       Fixed-point fractional library routines.
44103                                                             (line 1624)
44104* __fractunsudqdi:                       Fixed-point fractional library routines.
44105                                                             (line 1596)
44106* __fractunsudqhi:                       Fixed-point fractional library routines.
44107                                                             (line 1592)
44108* __fractunsudqqi:                       Fixed-point fractional library routines.
44109                                                             (line 1590)
44110* __fractunsudqsi:                       Fixed-point fractional library routines.
44111                                                             (line 1594)
44112* __fractunsudqti:                       Fixed-point fractional library routines.
44113                                                             (line 1598)
44114* __fractunsuhadi:                       Fixed-point fractional library routines.
44115                                                             (line 1606)
44116* __fractunsuhahi:                       Fixed-point fractional library routines.
44117                                                             (line 1602)
44118* __fractunsuhaqi:                       Fixed-point fractional library routines.
44119                                                             (line 1600)
44120* __fractunsuhasi:                       Fixed-point fractional library routines.
44121                                                             (line 1604)
44122* __fractunsuhati:                       Fixed-point fractional library routines.
44123                                                             (line 1608)
44124* __fractunsuhqdi:                       Fixed-point fractional library routines.
44125                                                             (line 1576)
44126* __fractunsuhqhi:                       Fixed-point fractional library routines.
44127                                                             (line 1574)
44128* __fractunsuhqqi:                       Fixed-point fractional library routines.
44129                                                             (line 1573)
44130* __fractunsuhqsi:                       Fixed-point fractional library routines.
44131                                                             (line 1575)
44132* __fractunsuhqti:                       Fixed-point fractional library routines.
44133                                                             (line 1578)
44134* __fractunsuqqdi:                       Fixed-point fractional library routines.
44135                                                             (line 1570)
44136* __fractunsuqqhi:                       Fixed-point fractional library routines.
44137                                                             (line 1566)
44138* __fractunsuqqqi:                       Fixed-point fractional library routines.
44139                                                             (line 1564)
44140* __fractunsuqqsi:                       Fixed-point fractional library routines.
44141                                                             (line 1568)
44142* __fractunsuqqti:                       Fixed-point fractional library routines.
44143                                                             (line 1572)
44144* __fractunsusadi:                       Fixed-point fractional library routines.
44145                                                             (line 1612)
44146* __fractunsusahi:                       Fixed-point fractional library routines.
44147                                                             (line 1610)
44148* __fractunsusaqi:                       Fixed-point fractional library routines.
44149                                                             (line 1609)
44150* __fractunsusasi:                       Fixed-point fractional library routines.
44151                                                             (line 1611)
44152* __fractunsusati:                       Fixed-point fractional library routines.
44153                                                             (line 1614)
44154* __fractunsusqdi:                       Fixed-point fractional library routines.
44155                                                             (line 1586)
44156* __fractunsusqhi:                       Fixed-point fractional library routines.
44157                                                             (line 1582)
44158* __fractunsusqqi:                       Fixed-point fractional library routines.
44159                                                             (line 1580)
44160* __fractunsusqsi:                       Fixed-point fractional library routines.
44161                                                             (line 1584)
44162* __fractunsusqti:                       Fixed-point fractional library routines.
44163                                                             (line 1588)
44164* __fractunsutadi:                       Fixed-point fractional library routines.
44165                                                             (line 1632)
44166* __fractunsutahi:                       Fixed-point fractional library routines.
44167                                                             (line 1628)
44168* __fractunsutaqi:                       Fixed-point fractional library routines.
44169                                                             (line 1626)
44170* __fractunsutasi:                       Fixed-point fractional library routines.
44171                                                             (line 1630)
44172* __fractunsutati:                       Fixed-point fractional library routines.
44173                                                             (line 1634)
44174* __fractuqqda:                          Fixed-point fractional library routines.
44175                                                             (line  672)
44176* __fractuqqdf:                          Fixed-point fractional library routines.
44177                                                             (line  695)
44178* __fractuqqdi:                          Fixed-point fractional library routines.
44179                                                             (line  692)
44180* __fractuqqdq:                          Fixed-point fractional library routines.
44181                                                             (line  669)
44182* __fractuqqha:                          Fixed-point fractional library routines.
44183                                                             (line  670)
44184* __fractuqqhi:                          Fixed-point fractional library routines.
44185                                                             (line  690)
44186* __fractuqqhq:                          Fixed-point fractional library routines.
44187                                                             (line  666)
44188* __fractuqqqi:                          Fixed-point fractional library routines.
44189                                                             (line  689)
44190* __fractuqqqq:                          Fixed-point fractional library routines.
44191                                                             (line  665)
44192* __fractuqqsa:                          Fixed-point fractional library routines.
44193                                                             (line  671)
44194* __fractuqqsf:                          Fixed-point fractional library routines.
44195                                                             (line  694)
44196* __fractuqqsi:                          Fixed-point fractional library routines.
44197                                                             (line  691)
44198* __fractuqqsq:                          Fixed-point fractional library routines.
44199                                                             (line  667)
44200* __fractuqqta:                          Fixed-point fractional library routines.
44201                                                             (line  674)
44202* __fractuqqti:                          Fixed-point fractional library routines.
44203                                                             (line  693)
44204* __fractuqquda:                         Fixed-point fractional library routines.
44205                                                             (line  686)
44206* __fractuqqudq2:                        Fixed-point fractional library routines.
44207                                                             (line  680)
44208* __fractuqquha:                         Fixed-point fractional library routines.
44209                                                             (line  682)
44210* __fractuqquhq2:                        Fixed-point fractional library routines.
44211                                                             (line  676)
44212* __fractuqqusa:                         Fixed-point fractional library routines.
44213                                                             (line  684)
44214* __fractuqqusq2:                        Fixed-point fractional library routines.
44215                                                             (line  678)
44216* __fractuqquta:                         Fixed-point fractional library routines.
44217                                                             (line  688)
44218* __fractusada:                          Fixed-point fractional library routines.
44219                                                             (line  829)
44220* __fractusadf:                          Fixed-point fractional library routines.
44221                                                             (line  850)
44222* __fractusadi:                          Fixed-point fractional library routines.
44223                                                             (line  847)
44224* __fractusadq:                          Fixed-point fractional library routines.
44225                                                             (line  826)
44226* __fractusaha:                          Fixed-point fractional library routines.
44227                                                             (line  827)
44228* __fractusahi:                          Fixed-point fractional library routines.
44229                                                             (line  845)
44230* __fractusahq:                          Fixed-point fractional library routines.
44231                                                             (line  824)
44232* __fractusaqi:                          Fixed-point fractional library routines.
44233                                                             (line  844)
44234* __fractusaqq:                          Fixed-point fractional library routines.
44235                                                             (line  823)
44236* __fractusasa:                          Fixed-point fractional library routines.
44237                                                             (line  828)
44238* __fractusasf:                          Fixed-point fractional library routines.
44239                                                             (line  849)
44240* __fractusasi:                          Fixed-point fractional library routines.
44241                                                             (line  846)
44242* __fractusasq:                          Fixed-point fractional library routines.
44243                                                             (line  825)
44244* __fractusata:                          Fixed-point fractional library routines.
44245                                                             (line  830)
44246* __fractusati:                          Fixed-point fractional library routines.
44247                                                             (line  848)
44248* __fractusauda2:                        Fixed-point fractional library routines.
44249                                                             (line  841)
44250* __fractusaudq:                         Fixed-point fractional library routines.
44251                                                             (line  837)
44252* __fractusauha2:                        Fixed-point fractional library routines.
44253                                                             (line  839)
44254* __fractusauhq:                         Fixed-point fractional library routines.
44255                                                             (line  833)
44256* __fractusauqq:                         Fixed-point fractional library routines.
44257                                                             (line  832)
44258* __fractusausq:                         Fixed-point fractional library routines.
44259                                                             (line  835)
44260* __fractusauta2:                        Fixed-point fractional library routines.
44261                                                             (line  843)
44262* __fractusqda:                          Fixed-point fractional library routines.
44263                                                             (line  731)
44264* __fractusqdf:                          Fixed-point fractional library routines.
44265                                                             (line  754)
44266* __fractusqdi:                          Fixed-point fractional library routines.
44267                                                             (line  751)
44268* __fractusqdq:                          Fixed-point fractional library routines.
44269                                                             (line  728)
44270* __fractusqha:                          Fixed-point fractional library routines.
44271                                                             (line  729)
44272* __fractusqhi:                          Fixed-point fractional library routines.
44273                                                             (line  749)
44274* __fractusqhq:                          Fixed-point fractional library routines.
44275                                                             (line  725)
44276* __fractusqqi:                          Fixed-point fractional library routines.
44277                                                             (line  748)
44278* __fractusqqq:                          Fixed-point fractional library routines.
44279                                                             (line  724)
44280* __fractusqsa:                          Fixed-point fractional library routines.
44281                                                             (line  730)
44282* __fractusqsf:                          Fixed-point fractional library routines.
44283                                                             (line  753)
44284* __fractusqsi:                          Fixed-point fractional library routines.
44285                                                             (line  750)
44286* __fractusqsq:                          Fixed-point fractional library routines.
44287                                                             (line  726)
44288* __fractusqta:                          Fixed-point fractional library routines.
44289                                                             (line  733)
44290* __fractusqti:                          Fixed-point fractional library routines.
44291                                                             (line  752)
44292* __fractusquda:                         Fixed-point fractional library routines.
44293                                                             (line  745)
44294* __fractusqudq2:                        Fixed-point fractional library routines.
44295                                                             (line  739)
44296* __fractusquha:                         Fixed-point fractional library routines.
44297                                                             (line  741)
44298* __fractusquhq2:                        Fixed-point fractional library routines.
44299                                                             (line  737)
44300* __fractusquqq2:                        Fixed-point fractional library routines.
44301                                                             (line  735)
44302* __fractusqusa:                         Fixed-point fractional library routines.
44303                                                             (line  743)
44304* __fractusquta:                         Fixed-point fractional library routines.
44305                                                             (line  747)
44306* __fractutada:                          Fixed-point fractional library routines.
44307                                                             (line  893)
44308* __fractutadf:                          Fixed-point fractional library routines.
44309                                                             (line  918)
44310* __fractutadi:                          Fixed-point fractional library routines.
44311                                                             (line  914)
44312* __fractutadq:                          Fixed-point fractional library routines.
44313                                                             (line  888)
44314* __fractutaha:                          Fixed-point fractional library routines.
44315                                                             (line  890)
44316* __fractutahi:                          Fixed-point fractional library routines.
44317                                                             (line  912)
44318* __fractutahq:                          Fixed-point fractional library routines.
44319                                                             (line  884)
44320* __fractutaqi:                          Fixed-point fractional library routines.
44321                                                             (line  911)
44322* __fractutaqq:                          Fixed-point fractional library routines.
44323                                                             (line  883)
44324* __fractutasa:                          Fixed-point fractional library routines.
44325                                                             (line  891)
44326* __fractutasf:                          Fixed-point fractional library routines.
44327                                                             (line  917)
44328* __fractutasi:                          Fixed-point fractional library routines.
44329                                                             (line  913)
44330* __fractutasq:                          Fixed-point fractional library routines.
44331                                                             (line  886)
44332* __fractutata:                          Fixed-point fractional library routines.
44333                                                             (line  895)
44334* __fractutati:                          Fixed-point fractional library routines.
44335                                                             (line  916)
44336* __fractutauda2:                        Fixed-point fractional library routines.
44337                                                             (line  909)
44338* __fractutaudq:                         Fixed-point fractional library routines.
44339                                                             (line  903)
44340* __fractutauha2:                        Fixed-point fractional library routines.
44341                                                             (line  905)
44342* __fractutauhq:                         Fixed-point fractional library routines.
44343                                                             (line  899)
44344* __fractutauqq:                         Fixed-point fractional library routines.
44345                                                             (line  897)
44346* __fractutausa2:                        Fixed-point fractional library routines.
44347                                                             (line  907)
44348* __fractutausq:                         Fixed-point fractional library routines.
44349                                                             (line  901)
44350* __gedf2:                               Soft float library routines.
44351                                                             (line  206)
44352* __gesf2:                               Soft float library routines.
44353                                                             (line  205)
44354* __getf2:                               Soft float library routines.
44355                                                             (line  207)
44356* __gtdf2:                               Soft float library routines.
44357                                                             (line  224)
44358* __gtsf2:                               Soft float library routines.
44359                                                             (line  223)
44360* __gttf2:                               Soft float library routines.
44361                                                             (line  225)
44362* __ledf2:                               Soft float library routines.
44363                                                             (line  218)
44364* __lesf2:                               Soft float library routines.
44365                                                             (line  217)
44366* __letf2:                               Soft float library routines.
44367                                                             (line  219)
44368* __lshrdi3:                             Integer library routines.
44369                                                             (line   31)
44370* __lshrsi3:                             Integer library routines.
44371                                                             (line   30)
44372* __lshrti3:                             Integer library routines.
44373                                                             (line   32)
44374* __lshruda3:                            Fixed-point fractional library routines.
44375                                                             (line  390)
44376* __lshrudq3:                            Fixed-point fractional library routines.
44377                                                             (line  384)
44378* __lshruha3:                            Fixed-point fractional library routines.
44379                                                             (line  386)
44380* __lshruhq3:                            Fixed-point fractional library routines.
44381                                                             (line  380)
44382* __lshruqq3:                            Fixed-point fractional library routines.
44383                                                             (line  378)
44384* __lshrusa3:                            Fixed-point fractional library routines.
44385                                                             (line  388)
44386* __lshrusq3:                            Fixed-point fractional library routines.
44387                                                             (line  382)
44388* __lshruta3:                            Fixed-point fractional library routines.
44389                                                             (line  392)
44390* __ltdf2:                               Soft float library routines.
44391                                                             (line  212)
44392* __ltsf2:                               Soft float library routines.
44393                                                             (line  211)
44394* __lttf2:                               Soft float library routines.
44395                                                             (line  213)
44396* __main:                                Collect2.           (line   15)
44397* __moddi3:                              Integer library routines.
44398                                                             (line   37)
44399* __modsi3:                              Integer library routines.
44400                                                             (line   36)
44401* __modti3:                              Integer library routines.
44402                                                             (line   38)
44403* __morestack_current_segment:           Miscellaneous routines.
44404                                                             (line   46)
44405* __morestack_initial_sp:                Miscellaneous routines.
44406                                                             (line   47)
44407* __morestack_segments:                  Miscellaneous routines.
44408                                                             (line   45)
44409* __mulda3:                              Fixed-point fractional library routines.
44410                                                             (line  171)
44411* __muldc3:                              Soft float library routines.
44412                                                             (line  241)
44413* __muldf3:                              Soft float library routines.
44414                                                             (line   40)
44415* __muldi3:                              Integer library routines.
44416                                                             (line   43)
44417* __muldq3:                              Fixed-point fractional library routines.
44418                                                             (line  159)
44419* __mulha3:                              Fixed-point fractional library routines.
44420                                                             (line  169)
44421* __mulhq3:                              Fixed-point fractional library routines.
44422                                                             (line  156)
44423* __mulqq3:                              Fixed-point fractional library routines.
44424                                                             (line  155)
44425* __mulsa3:                              Fixed-point fractional library routines.
44426                                                             (line  170)
44427* __mulsc3:                              Soft float library routines.
44428                                                             (line  239)
44429* __mulsf3:                              Soft float library routines.
44430                                                             (line   39)
44431* __mulsi3:                              Integer library routines.
44432                                                             (line   42)
44433* __mulsq3:                              Fixed-point fractional library routines.
44434                                                             (line  157)
44435* __multa3:                              Fixed-point fractional library routines.
44436                                                             (line  173)
44437* __multc3:                              Soft float library routines.
44438                                                             (line  243)
44439* __multf3:                              Soft float library routines.
44440                                                             (line   42)
44441* __multi3:                              Integer library routines.
44442                                                             (line   44)
44443* __muluda3:                             Fixed-point fractional library routines.
44444                                                             (line  179)
44445* __muludq3:                             Fixed-point fractional library routines.
44446                                                             (line  167)
44447* __muluha3:                             Fixed-point fractional library routines.
44448                                                             (line  175)
44449* __muluhq3:                             Fixed-point fractional library routines.
44450                                                             (line  163)
44451* __muluqq3:                             Fixed-point fractional library routines.
44452                                                             (line  161)
44453* __mulusa3:                             Fixed-point fractional library routines.
44454                                                             (line  177)
44455* __mulusq3:                             Fixed-point fractional library routines.
44456                                                             (line  165)
44457* __muluta3:                             Fixed-point fractional library routines.
44458                                                             (line  181)
44459* __mulvdi3:                             Integer library routines.
44460                                                             (line  115)
44461* __mulvsi3:                             Integer library routines.
44462                                                             (line  114)
44463* __mulxc3:                              Soft float library routines.
44464                                                             (line  245)
44465* __mulxf3:                              Soft float library routines.
44466                                                             (line   44)
44467* __nedf2:                               Soft float library routines.
44468                                                             (line  200)
44469* __negda2:                              Fixed-point fractional library routines.
44470                                                             (line  299)
44471* __negdf2:                              Soft float library routines.
44472                                                             (line   56)
44473* __negdi2:                              Integer library routines.
44474                                                             (line   47)
44475* __negdq2:                              Fixed-point fractional library routines.
44476                                                             (line  289)
44477* __negha2:                              Fixed-point fractional library routines.
44478                                                             (line  297)
44479* __neghq2:                              Fixed-point fractional library routines.
44480                                                             (line  287)
44481* __negqq2:                              Fixed-point fractional library routines.
44482                                                             (line  286)
44483* __negsa2:                              Fixed-point fractional library routines.
44484                                                             (line  298)
44485* __negsf2:                              Soft float library routines.
44486                                                             (line   55)
44487* __negsq2:                              Fixed-point fractional library routines.
44488                                                             (line  288)
44489* __negta2:                              Fixed-point fractional library routines.
44490                                                             (line  300)
44491* __negtf2:                              Soft float library routines.
44492                                                             (line   57)
44493* __negti2:                              Integer library routines.
44494                                                             (line   48)
44495* __neguda2:                             Fixed-point fractional library routines.
44496                                                             (line  305)
44497* __negudq2:                             Fixed-point fractional library routines.
44498                                                             (line  296)
44499* __neguha2:                             Fixed-point fractional library routines.
44500                                                             (line  302)
44501* __neguhq2:                             Fixed-point fractional library routines.
44502                                                             (line  292)
44503* __neguqq2:                             Fixed-point fractional library routines.
44504                                                             (line  291)
44505* __negusa2:                             Fixed-point fractional library routines.
44506                                                             (line  303)
44507* __negusq2:                             Fixed-point fractional library routines.
44508                                                             (line  294)
44509* __neguta2:                             Fixed-point fractional library routines.
44510                                                             (line  307)
44511* __negvdi2:                             Integer library routines.
44512                                                             (line  119)
44513* __negvsi2:                             Integer library routines.
44514                                                             (line  118)
44515* __negxf2:                              Soft float library routines.
44516                                                             (line   58)
44517* __nesf2:                               Soft float library routines.
44518                                                             (line  199)
44519* __netf2:                               Soft float library routines.
44520                                                             (line  201)
44521* __paritydi2:                           Integer library routines.
44522                                                             (line  151)
44523* __paritysi2:                           Integer library routines.
44524                                                             (line  150)
44525* __parityti2:                           Integer library routines.
44526                                                             (line  152)
44527* __popcountdi2:                         Integer library routines.
44528                                                             (line  157)
44529* __popcountsi2:                         Integer library routines.
44530                                                             (line  156)
44531* __popcountti2:                         Integer library routines.
44532                                                             (line  158)
44533* __powidf2:                             Soft float library routines.
44534                                                             (line  233)
44535* __powisf2:                             Soft float library routines.
44536                                                             (line  232)
44537* __powitf2:                             Soft float library routines.
44538                                                             (line  234)
44539* __powixf2:                             Soft float library routines.
44540                                                             (line  235)
44541* __satfractdadq:                        Fixed-point fractional library routines.
44542                                                             (line 1153)
44543* __satfractdaha2:                       Fixed-point fractional library routines.
44544                                                             (line 1154)
44545* __satfractdahq:                        Fixed-point fractional library routines.
44546                                                             (line 1151)
44547* __satfractdaqq:                        Fixed-point fractional library routines.
44548                                                             (line 1150)
44549* __satfractdasa2:                       Fixed-point fractional library routines.
44550                                                             (line 1155)
44551* __satfractdasq:                        Fixed-point fractional library routines.
44552                                                             (line 1152)
44553* __satfractdata2:                       Fixed-point fractional library routines.
44554                                                             (line 1156)
44555* __satfractdauda:                       Fixed-point fractional library routines.
44556                                                             (line 1166)
44557* __satfractdaudq:                       Fixed-point fractional library routines.
44558                                                             (line 1162)
44559* __satfractdauha:                       Fixed-point fractional library routines.
44560                                                             (line 1164)
44561* __satfractdauhq:                       Fixed-point fractional library routines.
44562                                                             (line 1159)
44563* __satfractdauqq:                       Fixed-point fractional library routines.
44564                                                             (line 1158)
44565* __satfractdausa:                       Fixed-point fractional library routines.
44566                                                             (line 1165)
44567* __satfractdausq:                       Fixed-point fractional library routines.
44568                                                             (line 1160)
44569* __satfractdauta:                       Fixed-point fractional library routines.
44570                                                             (line 1168)
44571* __satfractdfda:                        Fixed-point fractional library routines.
44572                                                             (line 1506)
44573* __satfractdfdq:                        Fixed-point fractional library routines.
44574                                                             (line 1503)
44575* __satfractdfha:                        Fixed-point fractional library routines.
44576                                                             (line 1504)
44577* __satfractdfhq:                        Fixed-point fractional library routines.
44578                                                             (line 1501)
44579* __satfractdfqq:                        Fixed-point fractional library routines.
44580                                                             (line 1500)
44581* __satfractdfsa:                        Fixed-point fractional library routines.
44582                                                             (line 1505)
44583* __satfractdfsq:                        Fixed-point fractional library routines.
44584                                                             (line 1502)
44585* __satfractdfta:                        Fixed-point fractional library routines.
44586                                                             (line 1507)
44587* __satfractdfuda:                       Fixed-point fractional library routines.
44588                                                             (line 1515)
44589* __satfractdfudq:                       Fixed-point fractional library routines.
44590                                                             (line 1512)
44591* __satfractdfuha:                       Fixed-point fractional library routines.
44592                                                             (line 1513)
44593* __satfractdfuhq:                       Fixed-point fractional library routines.
44594                                                             (line 1509)
44595* __satfractdfuqq:                       Fixed-point fractional library routines.
44596                                                             (line 1508)
44597* __satfractdfusa:                       Fixed-point fractional library routines.
44598                                                             (line 1514)
44599* __satfractdfusq:                       Fixed-point fractional library routines.
44600                                                             (line 1510)
44601* __satfractdfuta:                       Fixed-point fractional library routines.
44602                                                             (line 1517)
44603* __satfractdida:                        Fixed-point fractional library routines.
44604                                                             (line 1456)
44605* __satfractdidq:                        Fixed-point fractional library routines.
44606                                                             (line 1453)
44607* __satfractdiha:                        Fixed-point fractional library routines.
44608                                                             (line 1454)
44609* __satfractdihq:                        Fixed-point fractional library routines.
44610                                                             (line 1451)
44611* __satfractdiqq:                        Fixed-point fractional library routines.
44612                                                             (line 1450)
44613* __satfractdisa:                        Fixed-point fractional library routines.
44614                                                             (line 1455)
44615* __satfractdisq:                        Fixed-point fractional library routines.
44616                                                             (line 1452)
44617* __satfractdita:                        Fixed-point fractional library routines.
44618                                                             (line 1457)
44619* __satfractdiuda:                       Fixed-point fractional library routines.
44620                                                             (line 1464)
44621* __satfractdiudq:                       Fixed-point fractional library routines.
44622                                                             (line 1461)
44623* __satfractdiuha:                       Fixed-point fractional library routines.
44624                                                             (line 1462)
44625* __satfractdiuhq:                       Fixed-point fractional library routines.
44626                                                             (line 1459)
44627* __satfractdiuqq:                       Fixed-point fractional library routines.
44628                                                             (line 1458)
44629* __satfractdiusa:                       Fixed-point fractional library routines.
44630                                                             (line 1463)
44631* __satfractdiusq:                       Fixed-point fractional library routines.
44632                                                             (line 1460)
44633* __satfractdiuta:                       Fixed-point fractional library routines.
44634                                                             (line 1465)
44635* __satfractdqda:                        Fixed-point fractional library routines.
44636                                                             (line 1098)
44637* __satfractdqha:                        Fixed-point fractional library routines.
44638                                                             (line 1096)
44639* __satfractdqhq2:                       Fixed-point fractional library routines.
44640                                                             (line 1094)
44641* __satfractdqqq2:                       Fixed-point fractional library routines.
44642                                                             (line 1093)
44643* __satfractdqsa:                        Fixed-point fractional library routines.
44644                                                             (line 1097)
44645* __satfractdqsq2:                       Fixed-point fractional library routines.
44646                                                             (line 1095)
44647* __satfractdqta:                        Fixed-point fractional library routines.
44648                                                             (line 1099)
44649* __satfractdquda:                       Fixed-point fractional library routines.
44650                                                             (line 1111)
44651* __satfractdqudq:                       Fixed-point fractional library routines.
44652                                                             (line 1106)
44653* __satfractdquha:                       Fixed-point fractional library routines.
44654                                                             (line 1108)
44655* __satfractdquhq:                       Fixed-point fractional library routines.
44656                                                             (line 1102)
44657* __satfractdquqq:                       Fixed-point fractional library routines.
44658                                                             (line 1101)
44659* __satfractdqusa:                       Fixed-point fractional library routines.
44660                                                             (line 1109)
44661* __satfractdqusq:                       Fixed-point fractional library routines.
44662                                                             (line 1104)
44663* __satfractdquta:                       Fixed-point fractional library routines.
44664                                                             (line 1113)
44665* __satfracthada2:                       Fixed-point fractional library routines.
44666                                                             (line 1119)
44667* __satfracthadq:                        Fixed-point fractional library routines.
44668                                                             (line 1117)
44669* __satfracthahq:                        Fixed-point fractional library routines.
44670                                                             (line 1115)
44671* __satfracthaqq:                        Fixed-point fractional library routines.
44672                                                             (line 1114)
44673* __satfracthasa2:                       Fixed-point fractional library routines.
44674                                                             (line 1118)
44675* __satfracthasq:                        Fixed-point fractional library routines.
44676                                                             (line 1116)
44677* __satfracthata2:                       Fixed-point fractional library routines.
44678                                                             (line 1120)
44679* __satfracthauda:                       Fixed-point fractional library routines.
44680                                                             (line 1132)
44681* __satfracthaudq:                       Fixed-point fractional library routines.
44682                                                             (line 1127)
44683* __satfracthauha:                       Fixed-point fractional library routines.
44684                                                             (line 1129)
44685* __satfracthauhq:                       Fixed-point fractional library routines.
44686                                                             (line 1123)
44687* __satfracthauqq:                       Fixed-point fractional library routines.
44688                                                             (line 1122)
44689* __satfracthausa:                       Fixed-point fractional library routines.
44690                                                             (line 1130)
44691* __satfracthausq:                       Fixed-point fractional library routines.
44692                                                             (line 1125)
44693* __satfracthauta:                       Fixed-point fractional library routines.
44694                                                             (line 1134)
44695* __satfracthida:                        Fixed-point fractional library routines.
44696                                                             (line 1424)
44697* __satfracthidq:                        Fixed-point fractional library routines.
44698                                                             (line 1421)
44699* __satfracthiha:                        Fixed-point fractional library routines.
44700                                                             (line 1422)
44701* __satfracthihq:                        Fixed-point fractional library routines.
44702                                                             (line 1419)
44703* __satfracthiqq:                        Fixed-point fractional library routines.
44704                                                             (line 1418)
44705* __satfracthisa:                        Fixed-point fractional library routines.
44706                                                             (line 1423)
44707* __satfracthisq:                        Fixed-point fractional library routines.
44708                                                             (line 1420)
44709* __satfracthita:                        Fixed-point fractional library routines.
44710                                                             (line 1425)
44711* __satfracthiuda:                       Fixed-point fractional library routines.
44712                                                             (line 1432)
44713* __satfracthiudq:                       Fixed-point fractional library routines.
44714                                                             (line 1429)
44715* __satfracthiuha:                       Fixed-point fractional library routines.
44716                                                             (line 1430)
44717* __satfracthiuhq:                       Fixed-point fractional library routines.
44718                                                             (line 1427)
44719* __satfracthiuqq:                       Fixed-point fractional library routines.
44720                                                             (line 1426)
44721* __satfracthiusa:                       Fixed-point fractional library routines.
44722                                                             (line 1431)
44723* __satfracthiusq:                       Fixed-point fractional library routines.
44724                                                             (line 1428)
44725* __satfracthiuta:                       Fixed-point fractional library routines.
44726                                                             (line 1433)
44727* __satfracthqda:                        Fixed-point fractional library routines.
44728                                                             (line 1064)
44729* __satfracthqdq2:                       Fixed-point fractional library routines.
44730                                                             (line 1061)
44731* __satfracthqha:                        Fixed-point fractional library routines.
44732                                                             (line 1062)
44733* __satfracthqqq2:                       Fixed-point fractional library routines.
44734                                                             (line 1059)
44735* __satfracthqsa:                        Fixed-point fractional library routines.
44736                                                             (line 1063)
44737* __satfracthqsq2:                       Fixed-point fractional library routines.
44738                                                             (line 1060)
44739* __satfracthqta:                        Fixed-point fractional library routines.
44740                                                             (line 1065)
44741* __satfracthquda:                       Fixed-point fractional library routines.
44742                                                             (line 1072)
44743* __satfracthqudq:                       Fixed-point fractional library routines.
44744                                                             (line 1069)
44745* __satfracthquha:                       Fixed-point fractional library routines.
44746                                                             (line 1070)
44747* __satfracthquhq:                       Fixed-point fractional library routines.
44748                                                             (line 1067)
44749* __satfracthquqq:                       Fixed-point fractional library routines.
44750                                                             (line 1066)
44751* __satfracthqusa:                       Fixed-point fractional library routines.
44752                                                             (line 1071)
44753* __satfracthqusq:                       Fixed-point fractional library routines.
44754                                                             (line 1068)
44755* __satfracthquta:                       Fixed-point fractional library routines.
44756                                                             (line 1073)
44757* __satfractqida:                        Fixed-point fractional library routines.
44758                                                             (line 1402)
44759* __satfractqidq:                        Fixed-point fractional library routines.
44760                                                             (line 1399)
44761* __satfractqiha:                        Fixed-point fractional library routines.
44762                                                             (line 1400)
44763* __satfractqihq:                        Fixed-point fractional library routines.
44764                                                             (line 1397)
44765* __satfractqiqq:                        Fixed-point fractional library routines.
44766                                                             (line 1396)
44767* __satfractqisa:                        Fixed-point fractional library routines.
44768                                                             (line 1401)
44769* __satfractqisq:                        Fixed-point fractional library routines.
44770                                                             (line 1398)
44771* __satfractqita:                        Fixed-point fractional library routines.
44772                                                             (line 1403)
44773* __satfractqiuda:                       Fixed-point fractional library routines.
44774                                                             (line 1415)
44775* __satfractqiudq:                       Fixed-point fractional library routines.
44776                                                             (line 1410)
44777* __satfractqiuha:                       Fixed-point fractional library routines.
44778                                                             (line 1412)
44779* __satfractqiuhq:                       Fixed-point fractional library routines.
44780                                                             (line 1406)
44781* __satfractqiuqq:                       Fixed-point fractional library routines.
44782                                                             (line 1405)
44783* __satfractqiusa:                       Fixed-point fractional library routines.
44784                                                             (line 1413)
44785* __satfractqiusq:                       Fixed-point fractional library routines.
44786                                                             (line 1408)
44787* __satfractqiuta:                       Fixed-point fractional library routines.
44788                                                             (line 1417)
44789* __satfractqqda:                        Fixed-point fractional library routines.
44790                                                             (line 1043)
44791* __satfractqqdq2:                       Fixed-point fractional library routines.
44792                                                             (line 1040)
44793* __satfractqqha:                        Fixed-point fractional library routines.
44794                                                             (line 1041)
44795* __satfractqqhq2:                       Fixed-point fractional library routines.
44796                                                             (line 1038)
44797* __satfractqqsa:                        Fixed-point fractional library routines.
44798                                                             (line 1042)
44799* __satfractqqsq2:                       Fixed-point fractional library routines.
44800                                                             (line 1039)
44801* __satfractqqta:                        Fixed-point fractional library routines.
44802                                                             (line 1044)
44803* __satfractqquda:                       Fixed-point fractional library routines.
44804                                                             (line 1056)
44805* __satfractqqudq:                       Fixed-point fractional library routines.
44806                                                             (line 1051)
44807* __satfractqquha:                       Fixed-point fractional library routines.
44808                                                             (line 1053)
44809* __satfractqquhq:                       Fixed-point fractional library routines.
44810                                                             (line 1047)
44811* __satfractqquqq:                       Fixed-point fractional library routines.
44812                                                             (line 1046)
44813* __satfractqqusa:                       Fixed-point fractional library routines.
44814                                                             (line 1054)
44815* __satfractqqusq:                       Fixed-point fractional library routines.
44816                                                             (line 1049)
44817* __satfractqquta:                       Fixed-point fractional library routines.
44818                                                             (line 1058)
44819* __satfractsada2:                       Fixed-point fractional library routines.
44820                                                             (line 1140)
44821* __satfractsadq:                        Fixed-point fractional library routines.
44822                                                             (line 1138)
44823* __satfractsaha2:                       Fixed-point fractional library routines.
44824                                                             (line 1139)
44825* __satfractsahq:                        Fixed-point fractional library routines.
44826                                                             (line 1136)
44827* __satfractsaqq:                        Fixed-point fractional library routines.
44828                                                             (line 1135)
44829* __satfractsasq:                        Fixed-point fractional library routines.
44830                                                             (line 1137)
44831* __satfractsata2:                       Fixed-point fractional library routines.
44832                                                             (line 1141)
44833* __satfractsauda:                       Fixed-point fractional library routines.
44834                                                             (line 1148)
44835* __satfractsaudq:                       Fixed-point fractional library routines.
44836                                                             (line 1145)
44837* __satfractsauha:                       Fixed-point fractional library routines.
44838                                                             (line 1146)
44839* __satfractsauhq:                       Fixed-point fractional library routines.
44840                                                             (line 1143)
44841* __satfractsauqq:                       Fixed-point fractional library routines.
44842                                                             (line 1142)
44843* __satfractsausa:                       Fixed-point fractional library routines.
44844                                                             (line 1147)
44845* __satfractsausq:                       Fixed-point fractional library routines.
44846                                                             (line 1144)
44847* __satfractsauta:                       Fixed-point fractional library routines.
44848                                                             (line 1149)
44849* __satfractsfda:                        Fixed-point fractional library routines.
44850                                                             (line 1490)
44851* __satfractsfdq:                        Fixed-point fractional library routines.
44852                                                             (line 1487)
44853* __satfractsfha:                        Fixed-point fractional library routines.
44854                                                             (line 1488)
44855* __satfractsfhq:                        Fixed-point fractional library routines.
44856                                                             (line 1485)
44857* __satfractsfqq:                        Fixed-point fractional library routines.
44858                                                             (line 1484)
44859* __satfractsfsa:                        Fixed-point fractional library routines.
44860                                                             (line 1489)
44861* __satfractsfsq:                        Fixed-point fractional library routines.
44862                                                             (line 1486)
44863* __satfractsfta:                        Fixed-point fractional library routines.
44864                                                             (line 1491)
44865* __satfractsfuda:                       Fixed-point fractional library routines.
44866                                                             (line 1498)
44867* __satfractsfudq:                       Fixed-point fractional library routines.
44868                                                             (line 1495)
44869* __satfractsfuha:                       Fixed-point fractional library routines.
44870                                                             (line 1496)
44871* __satfractsfuhq:                       Fixed-point fractional library routines.
44872                                                             (line 1493)
44873* __satfractsfuqq:                       Fixed-point fractional library routines.
44874                                                             (line 1492)
44875* __satfractsfusa:                       Fixed-point fractional library routines.
44876                                                             (line 1497)
44877* __satfractsfusq:                       Fixed-point fractional library routines.
44878                                                             (line 1494)
44879* __satfractsfuta:                       Fixed-point fractional library routines.
44880                                                             (line 1499)
44881* __satfractsida:                        Fixed-point fractional library routines.
44882                                                             (line 1440)
44883* __satfractsidq:                        Fixed-point fractional library routines.
44884                                                             (line 1437)
44885* __satfractsiha:                        Fixed-point fractional library routines.
44886                                                             (line 1438)
44887* __satfractsihq:                        Fixed-point fractional library routines.
44888                                                             (line 1435)
44889* __satfractsiqq:                        Fixed-point fractional library routines.
44890                                                             (line 1434)
44891* __satfractsisa:                        Fixed-point fractional library routines.
44892                                                             (line 1439)
44893* __satfractsisq:                        Fixed-point fractional library routines.
44894                                                             (line 1436)
44895* __satfractsita:                        Fixed-point fractional library routines.
44896                                                             (line 1441)
44897* __satfractsiuda:                       Fixed-point fractional library routines.
44898                                                             (line 1448)
44899* __satfractsiudq:                       Fixed-point fractional library routines.
44900                                                             (line 1445)
44901* __satfractsiuha:                       Fixed-point fractional library routines.
44902                                                             (line 1446)
44903* __satfractsiuhq:                       Fixed-point fractional library routines.
44904                                                             (line 1443)
44905* __satfractsiuqq:                       Fixed-point fractional library routines.
44906                                                             (line 1442)
44907* __satfractsiusa:                       Fixed-point fractional library routines.
44908                                                             (line 1447)
44909* __satfractsiusq:                       Fixed-point fractional library routines.
44910                                                             (line 1444)
44911* __satfractsiuta:                       Fixed-point fractional library routines.
44912                                                             (line 1449)
44913* __satfractsqda:                        Fixed-point fractional library routines.
44914                                                             (line 1079)
44915* __satfractsqdq2:                       Fixed-point fractional library routines.
44916                                                             (line 1076)
44917* __satfractsqha:                        Fixed-point fractional library routines.
44918                                                             (line 1077)
44919* __satfractsqhq2:                       Fixed-point fractional library routines.
44920                                                             (line 1075)
44921* __satfractsqqq2:                       Fixed-point fractional library routines.
44922                                                             (line 1074)
44923* __satfractsqsa:                        Fixed-point fractional library routines.
44924                                                             (line 1078)
44925* __satfractsqta:                        Fixed-point fractional library routines.
44926                                                             (line 1080)
44927* __satfractsquda:                       Fixed-point fractional library routines.
44928                                                             (line 1090)
44929* __satfractsqudq:                       Fixed-point fractional library routines.
44930                                                             (line 1086)
44931* __satfractsquha:                       Fixed-point fractional library routines.
44932                                                             (line 1088)
44933* __satfractsquhq:                       Fixed-point fractional library routines.
44934                                                             (line 1083)
44935* __satfractsquqq:                       Fixed-point fractional library routines.
44936                                                             (line 1082)
44937* __satfractsqusa:                       Fixed-point fractional library routines.
44938                                                             (line 1089)
44939* __satfractsqusq:                       Fixed-point fractional library routines.
44940                                                             (line 1084)
44941* __satfractsquta:                       Fixed-point fractional library routines.
44942                                                             (line 1092)
44943* __satfracttada2:                       Fixed-point fractional library routines.
44944                                                             (line 1175)
44945* __satfracttadq:                        Fixed-point fractional library routines.
44946                                                             (line 1172)
44947* __satfracttaha2:                       Fixed-point fractional library routines.
44948                                                             (line 1173)
44949* __satfracttahq:                        Fixed-point fractional library routines.
44950                                                             (line 1170)
44951* __satfracttaqq:                        Fixed-point fractional library routines.
44952                                                             (line 1169)
44953* __satfracttasa2:                       Fixed-point fractional library routines.
44954                                                             (line 1174)
44955* __satfracttasq:                        Fixed-point fractional library routines.
44956                                                             (line 1171)
44957* __satfracttauda:                       Fixed-point fractional library routines.
44958                                                             (line 1187)
44959* __satfracttaudq:                       Fixed-point fractional library routines.
44960                                                             (line 1182)
44961* __satfracttauha:                       Fixed-point fractional library routines.
44962                                                             (line 1184)
44963* __satfracttauhq:                       Fixed-point fractional library routines.
44964                                                             (line 1178)
44965* __satfracttauqq:                       Fixed-point fractional library routines.
44966                                                             (line 1177)
44967* __satfracttausa:                       Fixed-point fractional library routines.
44968                                                             (line 1185)
44969* __satfracttausq:                       Fixed-point fractional library routines.
44970                                                             (line 1180)
44971* __satfracttauta:                       Fixed-point fractional library routines.
44972                                                             (line 1189)
44973* __satfracttida:                        Fixed-point fractional library routines.
44974                                                             (line 1472)
44975* __satfracttidq:                        Fixed-point fractional library routines.
44976                                                             (line 1469)
44977* __satfracttiha:                        Fixed-point fractional library routines.
44978                                                             (line 1470)
44979* __satfracttihq:                        Fixed-point fractional library routines.
44980                                                             (line 1467)
44981* __satfracttiqq:                        Fixed-point fractional library routines.
44982                                                             (line 1466)
44983* __satfracttisa:                        Fixed-point fractional library routines.
44984                                                             (line 1471)
44985* __satfracttisq:                        Fixed-point fractional library routines.
44986                                                             (line 1468)
44987* __satfracttita:                        Fixed-point fractional library routines.
44988                                                             (line 1473)
44989* __satfracttiuda:                       Fixed-point fractional library routines.
44990                                                             (line 1481)
44991* __satfracttiudq:                       Fixed-point fractional library routines.
44992                                                             (line 1478)
44993* __satfracttiuha:                       Fixed-point fractional library routines.
44994                                                             (line 1479)
44995* __satfracttiuhq:                       Fixed-point fractional library routines.
44996                                                             (line 1475)
44997* __satfracttiuqq:                       Fixed-point fractional library routines.
44998                                                             (line 1474)
44999* __satfracttiusa:                       Fixed-point fractional library routines.
45000                                                             (line 1480)
45001* __satfracttiusq:                       Fixed-point fractional library routines.
45002                                                             (line 1476)
45003* __satfracttiuta:                       Fixed-point fractional library routines.
45004                                                             (line 1483)
45005* __satfractudada:                       Fixed-point fractional library routines.
45006                                                             (line 1351)
45007* __satfractudadq:                       Fixed-point fractional library routines.
45008                                                             (line 1347)
45009* __satfractudaha:                       Fixed-point fractional library routines.
45010                                                             (line 1349)
45011* __satfractudahq:                       Fixed-point fractional library routines.
45012                                                             (line 1344)
45013* __satfractudaqq:                       Fixed-point fractional library routines.
45014                                                             (line 1343)
45015* __satfractudasa:                       Fixed-point fractional library routines.
45016                                                             (line 1350)
45017* __satfractudasq:                       Fixed-point fractional library routines.
45018                                                             (line 1345)
45019* __satfractudata:                       Fixed-point fractional library routines.
45020                                                             (line 1353)
45021* __satfractudaudq:                      Fixed-point fractional library routines.
45022                                                             (line 1361)
45023* __satfractudauha2:                     Fixed-point fractional library routines.
45024                                                             (line 1363)
45025* __satfractudauhq:                      Fixed-point fractional library routines.
45026                                                             (line 1357)
45027* __satfractudauqq:                      Fixed-point fractional library routines.
45028                                                             (line 1355)
45029* __satfractudausa2:                     Fixed-point fractional library routines.
45030                                                             (line 1365)
45031* __satfractudausq:                      Fixed-point fractional library routines.
45032                                                             (line 1359)
45033* __satfractudauta2:                     Fixed-point fractional library routines.
45034                                                             (line 1367)
45035* __satfractudqda:                       Fixed-point fractional library routines.
45036                                                             (line 1276)
45037* __satfractudqdq:                       Fixed-point fractional library routines.
45038                                                             (line 1271)
45039* __satfractudqha:                       Fixed-point fractional library routines.
45040                                                             (line 1273)
45041* __satfractudqhq:                       Fixed-point fractional library routines.
45042                                                             (line 1267)
45043* __satfractudqqq:                       Fixed-point fractional library routines.
45044                                                             (line 1266)
45045* __satfractudqsa:                       Fixed-point fractional library routines.
45046                                                             (line 1274)
45047* __satfractudqsq:                       Fixed-point fractional library routines.
45048                                                             (line 1269)
45049* __satfractudqta:                       Fixed-point fractional library routines.
45050                                                             (line 1278)
45051* __satfractudquda:                      Fixed-point fractional library routines.
45052                                                             (line 1290)
45053* __satfractudquha:                      Fixed-point fractional library routines.
45054                                                             (line 1286)
45055* __satfractudquhq2:                     Fixed-point fractional library routines.
45056                                                             (line 1282)
45057* __satfractudquqq2:                     Fixed-point fractional library routines.
45058                                                             (line 1280)
45059* __satfractudqusa:                      Fixed-point fractional library routines.
45060                                                             (line 1288)
45061* __satfractudqusq2:                     Fixed-point fractional library routines.
45062                                                             (line 1284)
45063* __satfractudquta:                      Fixed-point fractional library routines.
45064                                                             (line 1292)
45065* __satfractuhada:                       Fixed-point fractional library routines.
45066                                                             (line 1304)
45067* __satfractuhadq:                       Fixed-point fractional library routines.
45068                                                             (line 1299)
45069* __satfractuhaha:                       Fixed-point fractional library routines.
45070                                                             (line 1301)
45071* __satfractuhahq:                       Fixed-point fractional library routines.
45072                                                             (line 1295)
45073* __satfractuhaqq:                       Fixed-point fractional library routines.
45074                                                             (line 1294)
45075* __satfractuhasa:                       Fixed-point fractional library routines.
45076                                                             (line 1302)
45077* __satfractuhasq:                       Fixed-point fractional library routines.
45078                                                             (line 1297)
45079* __satfractuhata:                       Fixed-point fractional library routines.
45080                                                             (line 1306)
45081* __satfractuhauda2:                     Fixed-point fractional library routines.
45082                                                             (line 1318)
45083* __satfractuhaudq:                      Fixed-point fractional library routines.
45084                                                             (line 1314)
45085* __satfractuhauhq:                      Fixed-point fractional library routines.
45086                                                             (line 1310)
45087* __satfractuhauqq:                      Fixed-point fractional library routines.
45088                                                             (line 1308)
45089* __satfractuhausa2:                     Fixed-point fractional library routines.
45090                                                             (line 1316)
45091* __satfractuhausq:                      Fixed-point fractional library routines.
45092                                                             (line 1312)
45093* __satfractuhauta2:                     Fixed-point fractional library routines.
45094                                                             (line 1320)
45095* __satfractuhqda:                       Fixed-point fractional library routines.
45096                                                             (line 1224)
45097* __satfractuhqdq:                       Fixed-point fractional library routines.
45098                                                             (line 1221)
45099* __satfractuhqha:                       Fixed-point fractional library routines.
45100                                                             (line 1222)
45101* __satfractuhqhq:                       Fixed-point fractional library routines.
45102                                                             (line 1219)
45103* __satfractuhqqq:                       Fixed-point fractional library routines.
45104                                                             (line 1218)
45105* __satfractuhqsa:                       Fixed-point fractional library routines.
45106                                                             (line 1223)
45107* __satfractuhqsq:                       Fixed-point fractional library routines.
45108                                                             (line 1220)
45109* __satfractuhqta:                       Fixed-point fractional library routines.
45110                                                             (line 1225)
45111* __satfractuhquda:                      Fixed-point fractional library routines.
45112                                                             (line 1236)
45113* __satfractuhqudq2:                     Fixed-point fractional library routines.
45114                                                             (line 1231)
45115* __satfractuhquha:                      Fixed-point fractional library routines.
45116                                                             (line 1233)
45117* __satfractuhquqq2:                     Fixed-point fractional library routines.
45118                                                             (line 1227)
45119* __satfractuhqusa:                      Fixed-point fractional library routines.
45120                                                             (line 1234)
45121* __satfractuhqusq2:                     Fixed-point fractional library routines.
45122                                                             (line 1229)
45123* __satfractuhquta:                      Fixed-point fractional library routines.
45124                                                             (line 1238)
45125* __satfractunsdida:                     Fixed-point fractional library routines.
45126                                                             (line 1834)
45127* __satfractunsdidq:                     Fixed-point fractional library routines.
45128                                                             (line 1831)
45129* __satfractunsdiha:                     Fixed-point fractional library routines.
45130                                                             (line 1832)
45131* __satfractunsdihq:                     Fixed-point fractional library routines.
45132                                                             (line 1828)
45133* __satfractunsdiqq:                     Fixed-point fractional library routines.
45134                                                             (line 1827)
45135* __satfractunsdisa:                     Fixed-point fractional library routines.
45136                                                             (line 1833)
45137* __satfractunsdisq:                     Fixed-point fractional library routines.
45138                                                             (line 1829)
45139* __satfractunsdita:                     Fixed-point fractional library routines.
45140                                                             (line 1836)
45141* __satfractunsdiuda:                    Fixed-point fractional library routines.
45142                                                             (line 1850)
45143* __satfractunsdiudq:                    Fixed-point fractional library routines.
45144                                                             (line 1844)
45145* __satfractunsdiuha:                    Fixed-point fractional library routines.
45146                                                             (line 1846)
45147* __satfractunsdiuhq:                    Fixed-point fractional library routines.
45148                                                             (line 1840)
45149* __satfractunsdiuqq:                    Fixed-point fractional library routines.
45150                                                             (line 1838)
45151* __satfractunsdiusa:                    Fixed-point fractional library routines.
45152                                                             (line 1848)
45153* __satfractunsdiusq:                    Fixed-point fractional library routines.
45154                                                             (line 1842)
45155* __satfractunsdiuta:                    Fixed-point fractional library routines.
45156                                                             (line 1852)
45157* __satfractunshida:                     Fixed-point fractional library routines.
45158                                                             (line 1786)
45159* __satfractunshidq:                     Fixed-point fractional library routines.
45160                                                             (line 1783)
45161* __satfractunshiha:                     Fixed-point fractional library routines.
45162                                                             (line 1784)
45163* __satfractunshihq:                     Fixed-point fractional library routines.
45164                                                             (line 1780)
45165* __satfractunshiqq:                     Fixed-point fractional library routines.
45166                                                             (line 1779)
45167* __satfractunshisa:                     Fixed-point fractional library routines.
45168                                                             (line 1785)
45169* __satfractunshisq:                     Fixed-point fractional library routines.
45170                                                             (line 1781)
45171* __satfractunshita:                     Fixed-point fractional library routines.
45172                                                             (line 1788)
45173* __satfractunshiuda:                    Fixed-point fractional library routines.
45174                                                             (line 1802)
45175* __satfractunshiudq:                    Fixed-point fractional library routines.
45176                                                             (line 1796)
45177* __satfractunshiuha:                    Fixed-point fractional library routines.
45178                                                             (line 1798)
45179* __satfractunshiuhq:                    Fixed-point fractional library routines.
45180                                                             (line 1792)
45181* __satfractunshiuqq:                    Fixed-point fractional library routines.
45182                                                             (line 1790)
45183* __satfractunshiusa:                    Fixed-point fractional library routines.
45184                                                             (line 1800)
45185* __satfractunshiusq:                    Fixed-point fractional library routines.
45186                                                             (line 1794)
45187* __satfractunshiuta:                    Fixed-point fractional library routines.
45188                                                             (line 1804)
45189* __satfractunsqida:                     Fixed-point fractional library routines.
45190                                                             (line 1760)
45191* __satfractunsqidq:                     Fixed-point fractional library routines.
45192                                                             (line 1757)
45193* __satfractunsqiha:                     Fixed-point fractional library routines.
45194                                                             (line 1758)
45195* __satfractunsqihq:                     Fixed-point fractional library routines.
45196                                                             (line 1754)
45197* __satfractunsqiqq:                     Fixed-point fractional library routines.
45198                                                             (line 1753)
45199* __satfractunsqisa:                     Fixed-point fractional library routines.
45200                                                             (line 1759)
45201* __satfractunsqisq:                     Fixed-point fractional library routines.
45202                                                             (line 1755)
45203* __satfractunsqita:                     Fixed-point fractional library routines.
45204                                                             (line 1762)
45205* __satfractunsqiuda:                    Fixed-point fractional library routines.
45206                                                             (line 1776)
45207* __satfractunsqiudq:                    Fixed-point fractional library routines.
45208                                                             (line 1770)
45209* __satfractunsqiuha:                    Fixed-point fractional library routines.
45210                                                             (line 1772)
45211* __satfractunsqiuhq:                    Fixed-point fractional library routines.
45212                                                             (line 1766)
45213* __satfractunsqiuqq:                    Fixed-point fractional library routines.
45214                                                             (line 1764)
45215* __satfractunsqiusa:                    Fixed-point fractional library routines.
45216                                                             (line 1774)
45217* __satfractunsqiusq:                    Fixed-point fractional library routines.
45218                                                             (line 1768)
45219* __satfractunsqiuta:                    Fixed-point fractional library routines.
45220                                                             (line 1778)
45221* __satfractunssida:                     Fixed-point fractional library routines.
45222                                                             (line 1811)
45223* __satfractunssidq:                     Fixed-point fractional library routines.
45224                                                             (line 1808)
45225* __satfractunssiha:                     Fixed-point fractional library routines.
45226                                                             (line 1809)
45227* __satfractunssihq:                     Fixed-point fractional library routines.
45228                                                             (line 1806)
45229* __satfractunssiqq:                     Fixed-point fractional library routines.
45230                                                             (line 1805)
45231* __satfractunssisa:                     Fixed-point fractional library routines.
45232                                                             (line 1810)
45233* __satfractunssisq:                     Fixed-point fractional library routines.
45234                                                             (line 1807)
45235* __satfractunssita:                     Fixed-point fractional library routines.
45236                                                             (line 1812)
45237* __satfractunssiuda:                    Fixed-point fractional library routines.
45238                                                             (line 1824)
45239* __satfractunssiudq:                    Fixed-point fractional library routines.
45240                                                             (line 1819)
45241* __satfractunssiuha:                    Fixed-point fractional library routines.
45242                                                             (line 1821)
45243* __satfractunssiuhq:                    Fixed-point fractional library routines.
45244                                                             (line 1815)
45245* __satfractunssiuqq:                    Fixed-point fractional library routines.
45246                                                             (line 1814)
45247* __satfractunssiusa:                    Fixed-point fractional library routines.
45248                                                             (line 1822)
45249* __satfractunssiusq:                    Fixed-point fractional library routines.
45250                                                             (line 1817)
45251* __satfractunssiuta:                    Fixed-point fractional library routines.
45252                                                             (line 1826)
45253* __satfractunstida:                     Fixed-point fractional library routines.
45254                                                             (line 1864)
45255* __satfractunstidq:                     Fixed-point fractional library routines.
45256                                                             (line 1859)
45257* __satfractunstiha:                     Fixed-point fractional library routines.
45258                                                             (line 1861)
45259* __satfractunstihq:                     Fixed-point fractional library routines.
45260                                                             (line 1855)
45261* __satfractunstiqq:                     Fixed-point fractional library routines.
45262                                                             (line 1854)
45263* __satfractunstisa:                     Fixed-point fractional library routines.
45264                                                             (line 1862)
45265* __satfractunstisq:                     Fixed-point fractional library routines.
45266                                                             (line 1857)
45267* __satfractunstita:                     Fixed-point fractional library routines.
45268                                                             (line 1866)
45269* __satfractunstiuda:                    Fixed-point fractional library routines.
45270                                                             (line 1880)
45271* __satfractunstiudq:                    Fixed-point fractional library routines.
45272                                                             (line 1874)
45273* __satfractunstiuha:                    Fixed-point fractional library routines.
45274                                                             (line 1876)
45275* __satfractunstiuhq:                    Fixed-point fractional library routines.
45276                                                             (line 1870)
45277* __satfractunstiuqq:                    Fixed-point fractional library routines.
45278                                                             (line 1868)
45279* __satfractunstiusa:                    Fixed-point fractional library routines.
45280                                                             (line 1878)
45281* __satfractunstiusq:                    Fixed-point fractional library routines.
45282                                                             (line 1872)
45283* __satfractunstiuta:                    Fixed-point fractional library routines.
45284                                                             (line 1882)
45285* __satfractuqqda:                       Fixed-point fractional library routines.
45286                                                             (line 1201)
45287* __satfractuqqdq:                       Fixed-point fractional library routines.
45288                                                             (line 1196)
45289* __satfractuqqha:                       Fixed-point fractional library routines.
45290                                                             (line 1198)
45291* __satfractuqqhq:                       Fixed-point fractional library routines.
45292                                                             (line 1192)
45293* __satfractuqqqq:                       Fixed-point fractional library routines.
45294                                                             (line 1191)
45295* __satfractuqqsa:                       Fixed-point fractional library routines.
45296                                                             (line 1199)
45297* __satfractuqqsq:                       Fixed-point fractional library routines.
45298                                                             (line 1194)
45299* __satfractuqqta:                       Fixed-point fractional library routines.
45300                                                             (line 1203)
45301* __satfractuqquda:                      Fixed-point fractional library routines.
45302                                                             (line 1215)
45303* __satfractuqqudq2:                     Fixed-point fractional library routines.
45304                                                             (line 1209)
45305* __satfractuqquha:                      Fixed-point fractional library routines.
45306                                                             (line 1211)
45307* __satfractuqquhq2:                     Fixed-point fractional library routines.
45308                                                             (line 1205)
45309* __satfractuqqusa:                      Fixed-point fractional library routines.
45310                                                             (line 1213)
45311* __satfractuqqusq2:                     Fixed-point fractional library routines.
45312                                                             (line 1207)
45313* __satfractuqquta:                      Fixed-point fractional library routines.
45314                                                             (line 1217)
45315* __satfractusada:                       Fixed-point fractional library routines.
45316                                                             (line 1327)
45317* __satfractusadq:                       Fixed-point fractional library routines.
45318                                                             (line 1324)
45319* __satfractusaha:                       Fixed-point fractional library routines.
45320                                                             (line 1325)
45321* __satfractusahq:                       Fixed-point fractional library routines.
45322                                                             (line 1322)
45323* __satfractusaqq:                       Fixed-point fractional library routines.
45324                                                             (line 1321)
45325* __satfractusasa:                       Fixed-point fractional library routines.
45326                                                             (line 1326)
45327* __satfractusasq:                       Fixed-point fractional library routines.
45328                                                             (line 1323)
45329* __satfractusata:                       Fixed-point fractional library routines.
45330                                                             (line 1328)
45331* __satfractusauda2:                     Fixed-point fractional library routines.
45332                                                             (line 1339)
45333* __satfractusaudq:                      Fixed-point fractional library routines.
45334                                                             (line 1335)
45335* __satfractusauha2:                     Fixed-point fractional library routines.
45336                                                             (line 1337)
45337* __satfractusauhq:                      Fixed-point fractional library routines.
45338                                                             (line 1331)
45339* __satfractusauqq:                      Fixed-point fractional library routines.
45340                                                             (line 1330)
45341* __satfractusausq:                      Fixed-point fractional library routines.
45342                                                             (line 1333)
45343* __satfractusauta2:                     Fixed-point fractional library routines.
45344                                                             (line 1341)
45345* __satfractusqda:                       Fixed-point fractional library routines.
45346                                                             (line 1248)
45347* __satfractusqdq:                       Fixed-point fractional library routines.
45348                                                             (line 1244)
45349* __satfractusqha:                       Fixed-point fractional library routines.
45350                                                             (line 1246)
45351* __satfractusqhq:                       Fixed-point fractional library routines.
45352                                                             (line 1241)
45353* __satfractusqqq:                       Fixed-point fractional library routines.
45354                                                             (line 1240)
45355* __satfractusqsa:                       Fixed-point fractional library routines.
45356                                                             (line 1247)
45357* __satfractusqsq:                       Fixed-point fractional library routines.
45358                                                             (line 1242)
45359* __satfractusqta:                       Fixed-point fractional library routines.
45360                                                             (line 1250)
45361* __satfractusquda:                      Fixed-point fractional library routines.
45362                                                             (line 1262)
45363* __satfractusqudq2:                     Fixed-point fractional library routines.
45364                                                             (line 1256)
45365* __satfractusquha:                      Fixed-point fractional library routines.
45366                                                             (line 1258)
45367* __satfractusquhq2:                     Fixed-point fractional library routines.
45368                                                             (line 1254)
45369* __satfractusquqq2:                     Fixed-point fractional library routines.
45370                                                             (line 1252)
45371* __satfractusqusa:                      Fixed-point fractional library routines.
45372                                                             (line 1260)
45373* __satfractusquta:                      Fixed-point fractional library routines.
45374                                                             (line 1264)
45375* __satfractutada:                       Fixed-point fractional library routines.
45376                                                             (line 1379)
45377* __satfractutadq:                       Fixed-point fractional library routines.
45378                                                             (line 1374)
45379* __satfractutaha:                       Fixed-point fractional library routines.
45380                                                             (line 1376)
45381* __satfractutahq:                       Fixed-point fractional library routines.
45382                                                             (line 1370)
45383* __satfractutaqq:                       Fixed-point fractional library routines.
45384                                                             (line 1369)
45385* __satfractutasa:                       Fixed-point fractional library routines.
45386                                                             (line 1377)
45387* __satfractutasq:                       Fixed-point fractional library routines.
45388                                                             (line 1372)
45389* __satfractutata:                       Fixed-point fractional library routines.
45390                                                             (line 1381)
45391* __satfractutauda2:                     Fixed-point fractional library routines.
45392                                                             (line 1395)
45393* __satfractutaudq:                      Fixed-point fractional library routines.
45394                                                             (line 1389)
45395* __satfractutauha2:                     Fixed-point fractional library routines.
45396                                                             (line 1391)
45397* __satfractutauhq:                      Fixed-point fractional library routines.
45398                                                             (line 1385)
45399* __satfractutauqq:                      Fixed-point fractional library routines.
45400                                                             (line 1383)
45401* __satfractutausa2:                     Fixed-point fractional library routines.
45402                                                             (line 1393)
45403* __satfractutausq:                      Fixed-point fractional library routines.
45404                                                             (line 1387)
45405* __splitstack_find:                     Miscellaneous routines.
45406                                                             (line   18)
45407* __ssaddda3:                            Fixed-point fractional library routines.
45408                                                             (line   67)
45409* __ssadddq3:                            Fixed-point fractional library routines.
45410                                                             (line   63)
45411* __ssaddha3:                            Fixed-point fractional library routines.
45412                                                             (line   65)
45413* __ssaddhq3:                            Fixed-point fractional library routines.
45414                                                             (line   60)
45415* __ssaddqq3:                            Fixed-point fractional library routines.
45416                                                             (line   59)
45417* __ssaddsa3:                            Fixed-point fractional library routines.
45418                                                             (line   66)
45419* __ssaddsq3:                            Fixed-point fractional library routines.
45420                                                             (line   61)
45421* __ssaddta3:                            Fixed-point fractional library routines.
45422                                                             (line   69)
45423* __ssashlda3:                           Fixed-point fractional library routines.
45424                                                             (line  402)
45425* __ssashldq3:                           Fixed-point fractional library routines.
45426                                                             (line  399)
45427* __ssashlha3:                           Fixed-point fractional library routines.
45428                                                             (line  400)
45429* __ssashlhq3:                           Fixed-point fractional library routines.
45430                                                             (line  396)
45431* __ssashlsa3:                           Fixed-point fractional library routines.
45432                                                             (line  401)
45433* __ssashlsq3:                           Fixed-point fractional library routines.
45434                                                             (line  397)
45435* __ssashlta3:                           Fixed-point fractional library routines.
45436                                                             (line  404)
45437* __ssdivda3:                            Fixed-point fractional library routines.
45438                                                             (line  261)
45439* __ssdivdq3:                            Fixed-point fractional library routines.
45440                                                             (line  257)
45441* __ssdivha3:                            Fixed-point fractional library routines.
45442                                                             (line  259)
45443* __ssdivhq3:                            Fixed-point fractional library routines.
45444                                                             (line  254)
45445* __ssdivqq3:                            Fixed-point fractional library routines.
45446                                                             (line  253)
45447* __ssdivsa3:                            Fixed-point fractional library routines.
45448                                                             (line  260)
45449* __ssdivsq3:                            Fixed-point fractional library routines.
45450                                                             (line  255)
45451* __ssdivta3:                            Fixed-point fractional library routines.
45452                                                             (line  263)
45453* __ssmulda3:                            Fixed-point fractional library routines.
45454                                                             (line  193)
45455* __ssmuldq3:                            Fixed-point fractional library routines.
45456                                                             (line  189)
45457* __ssmulha3:                            Fixed-point fractional library routines.
45458                                                             (line  191)
45459* __ssmulhq3:                            Fixed-point fractional library routines.
45460                                                             (line  186)
45461* __ssmulqq3:                            Fixed-point fractional library routines.
45462                                                             (line  185)
45463* __ssmulsa3:                            Fixed-point fractional library routines.
45464                                                             (line  192)
45465* __ssmulsq3:                            Fixed-point fractional library routines.
45466                                                             (line  187)
45467* __ssmulta3:                            Fixed-point fractional library routines.
45468                                                             (line  195)
45469* __ssnegda2:                            Fixed-point fractional library routines.
45470                                                             (line  316)
45471* __ssnegdq2:                            Fixed-point fractional library routines.
45472                                                             (line  313)
45473* __ssnegha2:                            Fixed-point fractional library routines.
45474                                                             (line  314)
45475* __ssneghq2:                            Fixed-point fractional library routines.
45476                                                             (line  311)
45477* __ssnegqq2:                            Fixed-point fractional library routines.
45478                                                             (line  310)
45479* __ssnegsa2:                            Fixed-point fractional library routines.
45480                                                             (line  315)
45481* __ssnegsq2:                            Fixed-point fractional library routines.
45482                                                             (line  312)
45483* __ssnegta2:                            Fixed-point fractional library routines.
45484                                                             (line  317)
45485* __sssubda3:                            Fixed-point fractional library routines.
45486                                                             (line  129)
45487* __sssubdq3:                            Fixed-point fractional library routines.
45488                                                             (line  125)
45489* __sssubha3:                            Fixed-point fractional library routines.
45490                                                             (line  127)
45491* __sssubhq3:                            Fixed-point fractional library routines.
45492                                                             (line  122)
45493* __sssubqq3:                            Fixed-point fractional library routines.
45494                                                             (line  121)
45495* __sssubsa3:                            Fixed-point fractional library routines.
45496                                                             (line  128)
45497* __sssubsq3:                            Fixed-point fractional library routines.
45498                                                             (line  123)
45499* __sssubta3:                            Fixed-point fractional library routines.
45500                                                             (line  131)
45501* __subda3:                              Fixed-point fractional library routines.
45502                                                             (line  107)
45503* __subdf3:                              Soft float library routines.
45504                                                             (line   31)
45505* __subdq3:                              Fixed-point fractional library routines.
45506                                                             (line   95)
45507* __subha3:                              Fixed-point fractional library routines.
45508                                                             (line  105)
45509* __subhq3:                              Fixed-point fractional library routines.
45510                                                             (line   92)
45511* __subqq3:                              Fixed-point fractional library routines.
45512                                                             (line   91)
45513* __subsa3:                              Fixed-point fractional library routines.
45514                                                             (line  106)
45515* __subsf3:                              Soft float library routines.
45516                                                             (line   30)
45517* __subsq3:                              Fixed-point fractional library routines.
45518                                                             (line   93)
45519* __subta3:                              Fixed-point fractional library routines.
45520                                                             (line  109)
45521* __subtf3:                              Soft float library routines.
45522                                                             (line   33)
45523* __subuda3:                             Fixed-point fractional library routines.
45524                                                             (line  115)
45525* __subudq3:                             Fixed-point fractional library routines.
45526                                                             (line  103)
45527* __subuha3:                             Fixed-point fractional library routines.
45528                                                             (line  111)
45529* __subuhq3:                             Fixed-point fractional library routines.
45530                                                             (line   99)
45531* __subuqq3:                             Fixed-point fractional library routines.
45532                                                             (line   97)
45533* __subusa3:                             Fixed-point fractional library routines.
45534                                                             (line  113)
45535* __subusq3:                             Fixed-point fractional library routines.
45536                                                             (line  101)
45537* __subuta3:                             Fixed-point fractional library routines.
45538                                                             (line  117)
45539* __subvdi3:                             Integer library routines.
45540                                                             (line  123)
45541* __subvsi3:                             Integer library routines.
45542                                                             (line  122)
45543* __subxf3:                              Soft float library routines.
45544                                                             (line   35)
45545* __truncdfsf2:                          Soft float library routines.
45546                                                             (line   76)
45547* __trunctfdf2:                          Soft float library routines.
45548                                                             (line   73)
45549* __trunctfsf2:                          Soft float library routines.
45550                                                             (line   75)
45551* __truncxfdf2:                          Soft float library routines.
45552                                                             (line   72)
45553* __truncxfsf2:                          Soft float library routines.
45554                                                             (line   74)
45555* __ucmpdi2:                             Integer library routines.
45556                                                             (line   93)
45557* __ucmpti2:                             Integer library routines.
45558                                                             (line   95)
45559* __udivdi3:                             Integer library routines.
45560                                                             (line   54)
45561* __udivmoddi4:                          Integer library routines.
45562                                                             (line   61)
45563* __udivmodti4:                          Integer library routines.
45564                                                             (line   63)
45565* __udivsi3:                             Integer library routines.
45566                                                             (line   52)
45567* __udivti3:                             Integer library routines.
45568                                                             (line   56)
45569* __udivuda3:                            Fixed-point fractional library routines.
45570                                                             (line  246)
45571* __udivudq3:                            Fixed-point fractional library routines.
45572                                                             (line  240)
45573* __udivuha3:                            Fixed-point fractional library routines.
45574                                                             (line  242)
45575* __udivuhq3:                            Fixed-point fractional library routines.
45576                                                             (line  236)
45577* __udivuqq3:                            Fixed-point fractional library routines.
45578                                                             (line  234)
45579* __udivusa3:                            Fixed-point fractional library routines.
45580                                                             (line  244)
45581* __udivusq3:                            Fixed-point fractional library routines.
45582                                                             (line  238)
45583* __udivuta3:                            Fixed-point fractional library routines.
45584                                                             (line  248)
45585* __umoddi3:                             Integer library routines.
45586                                                             (line   71)
45587* __umodsi3:                             Integer library routines.
45588                                                             (line   69)
45589* __umodti3:                             Integer library routines.
45590                                                             (line   73)
45591* __unorddf2:                            Soft float library routines.
45592                                                             (line  173)
45593* __unordsf2:                            Soft float library routines.
45594                                                             (line  172)
45595* __unordtf2:                            Soft float library routines.
45596                                                             (line  174)
45597* __usadduda3:                           Fixed-point fractional library routines.
45598                                                             (line   85)
45599* __usaddudq3:                           Fixed-point fractional library routines.
45600                                                             (line   79)
45601* __usadduha3:                           Fixed-point fractional library routines.
45602                                                             (line   81)
45603* __usadduhq3:                           Fixed-point fractional library routines.
45604                                                             (line   75)
45605* __usadduqq3:                           Fixed-point fractional library routines.
45606                                                             (line   73)
45607* __usaddusa3:                           Fixed-point fractional library routines.
45608                                                             (line   83)
45609* __usaddusq3:                           Fixed-point fractional library routines.
45610                                                             (line   77)
45611* __usadduta3:                           Fixed-point fractional library routines.
45612                                                             (line   87)
45613* __usashluda3:                          Fixed-point fractional library routines.
45614                                                             (line  421)
45615* __usashludq3:                          Fixed-point fractional library routines.
45616                                                             (line  415)
45617* __usashluha3:                          Fixed-point fractional library routines.
45618                                                             (line  417)
45619* __usashluhq3:                          Fixed-point fractional library routines.
45620                                                             (line  411)
45621* __usashluqq3:                          Fixed-point fractional library routines.
45622                                                             (line  409)
45623* __usashlusa3:                          Fixed-point fractional library routines.
45624                                                             (line  419)
45625* __usashlusq3:                          Fixed-point fractional library routines.
45626                                                             (line  413)
45627* __usashluta3:                          Fixed-point fractional library routines.
45628                                                             (line  423)
45629* __usdivuda3:                           Fixed-point fractional library routines.
45630                                                             (line  280)
45631* __usdivudq3:                           Fixed-point fractional library routines.
45632                                                             (line  274)
45633* __usdivuha3:                           Fixed-point fractional library routines.
45634                                                             (line  276)
45635* __usdivuhq3:                           Fixed-point fractional library routines.
45636                                                             (line  270)
45637* __usdivuqq3:                           Fixed-point fractional library routines.
45638                                                             (line  268)
45639* __usdivusa3:                           Fixed-point fractional library routines.
45640                                                             (line  278)
45641* __usdivusq3:                           Fixed-point fractional library routines.
45642                                                             (line  272)
45643* __usdivuta3:                           Fixed-point fractional library routines.
45644                                                             (line  282)
45645* __usmuluda3:                           Fixed-point fractional library routines.
45646                                                             (line  212)
45647* __usmuludq3:                           Fixed-point fractional library routines.
45648                                                             (line  206)
45649* __usmuluha3:                           Fixed-point fractional library routines.
45650                                                             (line  208)
45651* __usmuluhq3:                           Fixed-point fractional library routines.
45652                                                             (line  202)
45653* __usmuluqq3:                           Fixed-point fractional library routines.
45654                                                             (line  200)
45655* __usmulusa3:                           Fixed-point fractional library routines.
45656                                                             (line  210)
45657* __usmulusq3:                           Fixed-point fractional library routines.
45658                                                             (line  204)
45659* __usmuluta3:                           Fixed-point fractional library routines.
45660                                                             (line  214)
45661* __usneguda2:                           Fixed-point fractional library routines.
45662                                                             (line  331)
45663* __usnegudq2:                           Fixed-point fractional library routines.
45664                                                             (line  326)
45665* __usneguha2:                           Fixed-point fractional library routines.
45666                                                             (line  328)
45667* __usneguhq2:                           Fixed-point fractional library routines.
45668                                                             (line  322)
45669* __usneguqq2:                           Fixed-point fractional library routines.
45670                                                             (line  321)
45671* __usnegusa2:                           Fixed-point fractional library routines.
45672                                                             (line  329)
45673* __usnegusq2:                           Fixed-point fractional library routines.
45674                                                             (line  324)
45675* __usneguta2:                           Fixed-point fractional library routines.
45676                                                             (line  333)
45677* __ussubuda3:                           Fixed-point fractional library routines.
45678                                                             (line  148)
45679* __ussubudq3:                           Fixed-point fractional library routines.
45680                                                             (line  142)
45681* __ussubuha3:                           Fixed-point fractional library routines.
45682                                                             (line  144)
45683* __ussubuhq3:                           Fixed-point fractional library routines.
45684                                                             (line  138)
45685* __ussubuqq3:                           Fixed-point fractional library routines.
45686                                                             (line  136)
45687* __ussubusa3:                           Fixed-point fractional library routines.
45688                                                             (line  146)
45689* __ussubusq3:                           Fixed-point fractional library routines.
45690                                                             (line  140)
45691* __ussubuta3:                           Fixed-point fractional library routines.
45692                                                             (line  150)
45693* abort:                                 Portability.        (line   21)
45694* abs:                                   Arithmetic.         (line  200)
45695* abs and attributes:                    Expressions.        (line   85)
45696* ABS_EXPR:                              Unary and Binary Expressions.
45697                                                             (line    6)
45698* absence_set:                           Processor pipeline description.
45699                                                             (line  224)
45700* absM2 instruction pattern:             Standard Names.     (line  535)
45701* absolute value:                        Arithmetic.         (line  200)
45702* access to operands:                    Accessors.          (line    6)
45703* access to special operands:            Special Accessors.  (line    6)
45704* accessors:                             Accessors.          (line    6)
45705* ACCUM_TYPE_SIZE:                       Type Layout.        (line   88)
45706* ACCUMULATE_OUTGOING_ARGS:              Stack Arguments.    (line   49)
45707* ACCUMULATE_OUTGOING_ARGS and stack frames: Function Entry. (line  135)
45708* ADA_LONG_TYPE_SIZE:                    Type Layout.        (line   26)
45709* Adding a new GIMPLE statement code:    Adding a new GIMPLE statement code.
45710                                                             (line    6)
45711* ADDITIONAL_REGISTER_NAMES:             Instruction Output. (line   15)
45712* addM3 instruction pattern:             Standard Names.     (line  263)
45713* addMODEcc instruction pattern:         Standard Names.     (line 1050)
45714* addr_diff_vec:                         Side Effects.       (line  308)
45715* addr_diff_vec, length of:              Insn Lengths.       (line   26)
45716* ADDR_EXPR:                             Storage References. (line    6)
45717* addr_vec:                              Side Effects.       (line  303)
45718* addr_vec, length of:                   Insn Lengths.       (line   26)
45719* address constraints:                   Simple Constraints. (line  164)
45720* address_operand <1>:                   Simple Constraints. (line  168)
45721* address_operand:                       Machine-Independent Predicates.
45722                                                             (line   63)
45723* addressing modes:                      Addressing Modes.   (line    6)
45724* ADJUST_FIELD_ALIGN:                    Storage Layout.     (line  197)
45725* ADJUST_INSN_LENGTH:                    Insn Lengths.       (line   35)
45726* ADJUST_REG_ALLOC_ORDER:                Allocation Order.   (line   23)
45727* aggregates as return values:           Aggregate Return.   (line    6)
45728* alias:                                 Alias analysis.     (line    6)
45729* ALL_REGS:                              Register Classes.   (line   17)
45730* allocate_stack instruction pattern:    Standard Names.     (line 1375)
45731* alternate entry points:                Insns.              (line  146)
45732* anchored addresses:                    Anchored Addresses. (line    6)
45733* and:                                   Arithmetic.         (line  158)
45734* and and attributes:                    Expressions.        (line   50)
45735* and, canonicalization of:              Insn Canonicalizations.
45736                                                             (line   52)
45737* andM3 instruction pattern:             Standard Names.     (line  269)
45738* annotations:                           Annotations.        (line    6)
45739* APPLY_RESULT_SIZE:                     Scalar Return.      (line  112)
45740* ARG_POINTER_CFA_OFFSET:                Frame Layout.       (line  194)
45741* ARG_POINTER_REGNUM:                    Frame Registers.    (line   41)
45742* ARG_POINTER_REGNUM and virtual registers: Regs and Memory. (line   65)
45743* arg_pointer_rtx:                       Frame Registers.    (line  104)
45744* ARGS_GROW_DOWNWARD:                    Frame Layout.       (line   35)
45745* argument passing:                      Interface.          (line   36)
45746* arguments in registers:                Register Arguments. (line    6)
45747* arguments on stack:                    Stack Arguments.    (line    6)
45748* arithmetic library:                    Soft float library routines.
45749                                                             (line    6)
45750* arithmetic shift:                      Arithmetic.         (line  173)
45751* arithmetic shift with signed saturation: Arithmetic.       (line  173)
45752* arithmetic shift with unsigned saturation: Arithmetic.     (line  173)
45753* arithmetic, in RTL:                    Arithmetic.         (line    6)
45754* ARITHMETIC_TYPE_P:                     Types for C++.      (line   61)
45755* array:                                 Types.              (line    6)
45756* ARRAY_RANGE_REF:                       Storage References. (line    6)
45757* ARRAY_REF:                             Storage References. (line    6)
45758* ARRAY_TYPE:                            Types.              (line    6)
45759* AS_NEEDS_DASH_FOR_PIPED_INPUT:         Driver.             (line   89)
45760* ashift:                                Arithmetic.         (line  173)
45761* ashift and attributes:                 Expressions.        (line   85)
45762* ashiftrt:                              Arithmetic.         (line  190)
45763* ashiftrt and attributes:               Expressions.        (line   85)
45764* ashlM3 instruction pattern:            Standard Names.     (line  510)
45765* ashrM3 instruction pattern:            Standard Names.     (line  520)
45766* ASM_APP_OFF:                           File Framework.     (line   78)
45767* ASM_APP_ON:                            File Framework.     (line   71)
45768* ASM_COMMENT_START:                     File Framework.     (line   66)
45769* ASM_DECLARE_FUNCTION_NAME:             Label Output.       (line  111)
45770* ASM_DECLARE_FUNCTION_SIZE:             Label Output.       (line  126)
45771* ASM_DECLARE_OBJECT_NAME:               Label Output.       (line  139)
45772* ASM_DECLARE_REGISTER_GLOBAL:           Label Output.       (line  168)
45773* ASM_FINAL_SPEC:                        Driver.             (line   82)
45774* ASM_FINISH_DECLARE_OBJECT:             Label Output.       (line  176)
45775* ASM_FORMAT_PRIVATE_NAME:               Label Output.       (line  395)
45776* asm_fprintf:                           Instruction Output. (line  151)
45777* ASM_FPRINTF_EXTENSIONS:                Instruction Output. (line  162)
45778* ASM_GENERATE_INTERNAL_LABEL:           Label Output.       (line  379)
45779* asm_input:                             Side Effects.       (line  290)
45780* asm_input and /v:                      Flags.              (line   76)
45781* ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX:     Exception Handling. (line   82)
45782* ASM_NO_SKIP_IN_TEXT:                   Alignment Output.   (line   79)
45783* asm_noperands:                         Insns.              (line  314)
45784* asm_operands and /v:                   Flags.              (line   76)
45785* asm_operands, RTL sharing:             Sharing.            (line   45)
45786* asm_operands, usage:                   Assembler.          (line    6)
45787* ASM_OUTPUT_ADDR_DIFF_ELT:              Dispatch Tables.    (line    9)
45788* ASM_OUTPUT_ADDR_VEC_ELT:               Dispatch Tables.    (line   26)
45789* ASM_OUTPUT_ALIGN:                      Alignment Output.   (line   86)
45790* ASM_OUTPUT_ALIGN_WITH_NOP:             Alignment Output.   (line   91)
45791* ASM_OUTPUT_ALIGNED_BSS:                Uninitialized Data. (line   46)
45792* ASM_OUTPUT_ALIGNED_COMMON:             Uninitialized Data. (line   30)
45793* ASM_OUTPUT_ALIGNED_DECL_COMMON:        Uninitialized Data. (line   38)
45794* ASM_OUTPUT_ALIGNED_DECL_LOCAL:         Uninitialized Data. (line   91)
45795* ASM_OUTPUT_ALIGNED_LOCAL:              Uninitialized Data. (line   83)
45796* ASM_OUTPUT_ASCII:                      Data Output.        (line   51)
45797* ASM_OUTPUT_CASE_END:                   Dispatch Tables.    (line   51)
45798* ASM_OUTPUT_CASE_LABEL:                 Dispatch Tables.    (line   38)
45799* ASM_OUTPUT_COMMON:                     Uninitialized Data. (line   10)
45800* ASM_OUTPUT_DEBUG_LABEL:                Label Output.       (line  367)
45801* ASM_OUTPUT_DEF:                        Label Output.       (line  416)
45802* ASM_OUTPUT_DEF_FROM_DECLS:             Label Output.       (line  424)
45803* ASM_OUTPUT_DWARF_DELTA:                SDB and DWARF.      (line   74)
45804* ASM_OUTPUT_DWARF_OFFSET:               SDB and DWARF.      (line   83)
45805* ASM_OUTPUT_DWARF_PCREL:                SDB and DWARF.      (line   89)
45806* ASM_OUTPUT_DWARF_TABLE_REF:            SDB and DWARF.      (line   94)
45807* ASM_OUTPUT_DWARF_VMS_DELTA:            SDB and DWARF.      (line   78)
45808* ASM_OUTPUT_EXTERNAL:                   Label Output.       (line  296)
45809* ASM_OUTPUT_FDESC:                      Data Output.        (line   60)
45810* ASM_OUTPUT_FUNCTION_LABEL:             Label Output.       (line   17)
45811* ASM_OUTPUT_INTERNAL_LABEL:             Label Output.       (line   29)
45812* ASM_OUTPUT_LABEL:                      Label Output.       (line    9)
45813* ASM_OUTPUT_LABEL_REF:                  Label Output.       (line  340)
45814* ASM_OUTPUT_LABELREF:                   Label Output.       (line  318)
45815* ASM_OUTPUT_LOCAL:                      Uninitialized Data. (line   70)
45816* ASM_OUTPUT_MAX_SKIP_ALIGN:             Alignment Output.   (line   95)
45817* ASM_OUTPUT_MEASURED_SIZE:              Label Output.       (line   53)
45818* ASM_OUTPUT_OPCODE:                     Instruction Output. (line   36)
45819* ASM_OUTPUT_POOL_EPILOGUE:              Data Output.        (line  110)
45820* ASM_OUTPUT_POOL_PROLOGUE:              Data Output.        (line   73)
45821* ASM_OUTPUT_REG_POP:                    Instruction Output. (line  206)
45822* ASM_OUTPUT_REG_PUSH:                   Instruction Output. (line  201)
45823* ASM_OUTPUT_SIZE_DIRECTIVE:             Label Output.       (line   47)
45824* ASM_OUTPUT_SKIP:                       Alignment Output.   (line   73)
45825* ASM_OUTPUT_SOURCE_FILENAME:            File Framework.     (line   85)
45826* ASM_OUTPUT_SPECIAL_POOL_ENTRY:         Data Output.        (line   85)
45827* ASM_OUTPUT_SYMBOL_REF:                 Label Output.       (line  333)
45828* ASM_OUTPUT_TYPE_DIRECTIVE:             Label Output.       (line  101)
45829* ASM_OUTPUT_WEAK_ALIAS:                 Label Output.       (line  442)
45830* ASM_OUTPUT_WEAKREF:                    Label Output.       (line  228)
45831* ASM_PREFERRED_EH_DATA_FORMAT:          Exception Handling. (line   67)
45832* ASM_SPEC:                              Driver.             (line   74)
45833* ASM_STABD_OP:                          DBX Options.        (line   36)
45834* ASM_STABN_OP:                          DBX Options.        (line   43)
45835* ASM_STABS_OP:                          DBX Options.        (line   29)
45836* ASM_WEAKEN_DECL:                       Label Output.       (line  220)
45837* ASM_WEAKEN_LABEL:                      Label Output.       (line  207)
45838* assemble_name:                         Label Output.       (line    8)
45839* assemble_name_raw:                     Label Output.       (line   28)
45840* assembler format:                      File Framework.     (line    6)
45841* assembler instructions in RTL:         Assembler.          (line    6)
45842* ASSEMBLER_DIALECT:                     Instruction Output. (line  174)
45843* assigning attribute values to insns:   Tagging Insns.      (line    6)
45844* ASSUME_EXTENDED_UNWIND_CONTEXT:        Frame Registers.    (line  164)
45845* asterisk in template:                  Output Statement.   (line   29)
45846* atan2M3 instruction pattern:           Standard Names.     (line  618)
45847* atomic:                                GTY Options.        (line  254)
45848* atomic_add_fetchMODE instruction pattern: Standard Names.  (line 1808)
45849* atomic_addMODE instruction pattern:    Standard Names.     (line 1779)
45850* atomic_and_fetchMODE instruction pattern: Standard Names.  (line 1808)
45851* atomic_andMODE instruction pattern:    Standard Names.     (line 1779)
45852* atomic_compare_and_swapMODE instruction pattern: Standard Names.
45853                                                             (line 1715)
45854* atomic_exchangeMODE instruction pattern: Standard Names.   (line 1767)
45855* atomic_fetch_addMODE instruction pattern: Standard Names.  (line 1793)
45856* atomic_fetch_andMODE instruction pattern: Standard Names.  (line 1793)
45857* atomic_fetch_nandMODE instruction pattern: Standard Names. (line 1793)
45858* atomic_fetch_orMODE instruction pattern: Standard Names.   (line 1793)
45859* atomic_fetch_subMODE instruction pattern: Standard Names.  (line 1793)
45860* atomic_fetch_xorMODE instruction pattern: Standard Names.  (line 1793)
45861* atomic_loadMODE instruction pattern:   Standard Names.     (line 1746)
45862* atomic_nand_fetchMODE instruction pattern: Standard Names. (line 1808)
45863* atomic_nandMODE instruction pattern:   Standard Names.     (line 1779)
45864* atomic_or_fetchMODE instruction pattern: Standard Names.   (line 1808)
45865* atomic_orMODE instruction pattern:     Standard Names.     (line 1779)
45866* atomic_storeMODE instruction pattern:  Standard Names.     (line 1756)
45867* atomic_sub_fetchMODE instruction pattern: Standard Names.  (line 1808)
45868* atomic_subMODE instruction pattern:    Standard Names.     (line 1779)
45869* atomic_test_and_set instruction pattern: Standard Names.   (line 1825)
45870* atomic_xor_fetchMODE instruction pattern: Standard Names.  (line 1808)
45871* atomic_xorMODE instruction pattern:    Standard Names.     (line 1779)
45872* attr <1>:                              Tagging Insns.      (line   54)
45873* attr:                                  Expressions.        (line  165)
45874* attr_flag:                             Expressions.        (line  140)
45875* attribute expressions:                 Expressions.        (line    6)
45876* attribute specifications:              Attr Example.       (line    6)
45877* attribute specifications example:      Attr Example.       (line    6)
45878* ATTRIBUTE_ALIGNED_VALUE:               Storage Layout.     (line  179)
45879* attributes:                            Attributes.         (line    6)
45880* attributes, defining:                  Defining Attributes.
45881                                                             (line    6)
45882* attributes, target-specific:           Target Attributes.  (line    6)
45883* autoincrement addressing, availability: Portability.       (line   21)
45884* autoincrement/decrement addressing:    Simple Constraints. (line   30)
45885* automata_option:                       Processor pipeline description.
45886                                                             (line  305)
45887* automaton based pipeline description:  Processor pipeline description.
45888                                                             (line    6)
45889* automaton based scheduler:             Processor pipeline description.
45890                                                             (line    6)
45891* AVOID_CCMODE_COPIES:                   Values in Registers.
45892                                                             (line  153)
45893* backslash:                             Output Template.    (line   46)
45894* barrier:                               Insns.              (line  166)
45895* barrier and /f:                        Flags.              (line  107)
45896* barrier and /v:                        Flags.              (line   44)
45897* BASE_REG_CLASS:                        Register Classes.   (line  114)
45898* basic block:                           Basic Blocks.       (line    6)
45899* Basic Statements:                      Basic Statements.   (line    6)
45900* basic-block.h:                         Control Flow.       (line    6)
45901* BASIC_BLOCK:                           Basic Blocks.       (line   14)
45902* basic_block:                           Basic Blocks.       (line    6)
45903* BB_HEAD, BB_END:                       Maintaining the CFG.
45904                                                             (line   77)
45905* bb_seq:                                GIMPLE sequences.   (line   73)
45906* BIGGEST_ALIGNMENT:                     Storage Layout.     (line  169)
45907* BIGGEST_FIELD_ALIGNMENT:               Storage Layout.     (line  190)
45908* BImode:                                Machine Modes.      (line   22)
45909* BIND_EXPR:                             Unary and Binary Expressions.
45910                                                             (line    6)
45911* BINFO_TYPE:                            Classes.            (line    6)
45912* bit-fields:                            Bit-Fields.         (line    6)
45913* BIT_AND_EXPR:                          Unary and Binary Expressions.
45914                                                             (line    6)
45915* BIT_IOR_EXPR:                          Unary and Binary Expressions.
45916                                                             (line    6)
45917* BIT_NOT_EXPR:                          Unary and Binary Expressions.
45918                                                             (line    6)
45919* BIT_XOR_EXPR:                          Unary and Binary Expressions.
45920                                                             (line    6)
45921* BITFIELD_NBYTES_LIMITED:               Storage Layout.     (line  394)
45922* BITS_BIG_ENDIAN:                       Storage Layout.     (line   12)
45923* BITS_BIG_ENDIAN, effect on sign_extract: Bit-Fields.       (line    8)
45924* BITS_PER_UNIT:                         Storage Layout.     (line   51)
45925* BITS_PER_WORD:                         Storage Layout.     (line   56)
45926* bitwise complement:                    Arithmetic.         (line  154)
45927* bitwise exclusive-or:                  Arithmetic.         (line  168)
45928* bitwise inclusive-or:                  Arithmetic.         (line  163)
45929* bitwise logical-and:                   Arithmetic.         (line  158)
45930* BLKmode:                               Machine Modes.      (line  183)
45931* BLKmode, and function return values:   Calls.              (line   23)
45932* BLOCK_FOR_INSN, gimple_bb:             Maintaining the CFG.
45933                                                             (line   29)
45934* BLOCK_REG_PADDING:                     Register Arguments. (line  230)
45935* blockage instruction pattern:          Standard Names.     (line 1578)
45936* Blocks:                                Blocks.             (line    6)
45937* bool:                                  Misc.               (line  857)
45938* BOOL_TYPE_SIZE:                        Type Layout.        (line   44)
45939* BOOLEAN_TYPE:                          Types.              (line    6)
45940* branch prediction:                     Profile information.
45941                                                             (line   24)
45942* BRANCH_COST:                           Costs.              (line  105)
45943* break_out_memory_refs:                 Addressing Modes.   (line  135)
45944* BREAK_STMT:                            Statements for C++. (line    6)
45945* BSS_SECTION_ASM_OP:                    Sections.           (line   68)
45946* bswap:                                 Arithmetic.         (line  247)
45947* bswapM2 instruction pattern:           Standard Names.     (line  528)
45948* btruncM2 instruction pattern:          Standard Names.     (line  636)
45949* build0:                                Macros and Functions.
45950                                                             (line   16)
45951* build1:                                Macros and Functions.
45952                                                             (line   17)
45953* build2:                                Macros and Functions.
45954                                                             (line   18)
45955* build3:                                Macros and Functions.
45956                                                             (line   19)
45957* build4:                                Macros and Functions.
45958                                                             (line   20)
45959* build5:                                Macros and Functions.
45960                                                             (line   21)
45961* build6:                                Macros and Functions.
45962                                                             (line   22)
45963* builtin_longjmp instruction pattern:   Standard Names.     (line 1475)
45964* builtin_setjmp_receiver instruction pattern: Standard Names.
45965                                                             (line 1465)
45966* builtin_setjmp_setup instruction pattern: Standard Names.  (line 1454)
45967* byte_mode:                             Machine Modes.      (line  336)
45968* BYTES_BIG_ENDIAN:                      Storage Layout.     (line   24)
45969* BYTES_BIG_ENDIAN, effect on subreg:    Regs and Memory.    (line  221)
45970* C statements for assembler output:     Output Statement.   (line    6)
45971* C99 math functions, implicit usage:    Library Calls.      (line   70)
45972* C_COMMON_OVERRIDE_OPTIONS:             Run-time Target.    (line  137)
45973* c_register_pragma:                     Misc.               (line  402)
45974* c_register_pragma_with_expansion:      Misc.               (line  404)
45975* call <1>:                              Side Effects.       (line   92)
45976* call:                                  Flags.              (line  221)
45977* call instruction pattern:              Standard Names.     (line 1107)
45978* call usage:                            Calls.              (line   10)
45979* call, in call_insn:                    Flags.              (line   33)
45980* call, in mem:                          Flags.              (line   81)
45981* call-clobbered register:               Register Basics.    (line   35)
45982* call-saved register:                   Register Basics.    (line   35)
45983* call-used register:                    Register Basics.    (line   35)
45984* CALL_EXPR:                             Unary and Binary Expressions.
45985                                                             (line    6)
45986* call_insn:                             Insns.              (line   95)
45987* call_insn and /c:                      Flags.              (line   33)
45988* call_insn and /f:                      Flags.              (line  107)
45989* call_insn and /i:                      Flags.              (line   24)
45990* call_insn and /j:                      Flags.              (line  161)
45991* call_insn and /s:                      Flags.              (line   49)
45992* call_insn and /u:                      Flags.              (line   19)
45993* call_insn and /u or /i:                Flags.              (line   29)
45994* call_insn and /v:                      Flags.              (line   44)
45995* CALL_INSN_FUNCTION_USAGE:              Insns.              (line  101)
45996* call_pop instruction pattern:          Standard Names.     (line 1135)
45997* CALL_POPS_ARGS:                        Stack Arguments.    (line  139)
45998* CALL_REALLY_USED_REGISTERS:            Register Basics.    (line   46)
45999* CALL_USED_REGISTERS:                   Register Basics.    (line   35)
46000* call_used_regs:                        Register Basics.    (line   59)
46001* call_value instruction pattern:        Standard Names.     (line 1127)
46002* call_value_pop instruction pattern:    Standard Names.     (line 1135)
46003* CALLER_SAVE_PROFITABLE:                Caller Saves.       (line   11)
46004* calling conventions:                   Stack and Calling.  (line    6)
46005* calling functions in RTL:              Calls.              (line    6)
46006* can_create_pseudo_p:                   Standard Names.     (line   75)
46007* can_fallthru:                          Basic Blocks.       (line   67)
46008* canadian:                              Configure Terms.    (line    6)
46009* CANNOT_CHANGE_MODE_CLASS:              Register Classes.   (line  538)
46010* CANNOT_CHANGE_MODE_CLASS and subreg semantics: Regs and Memory.
46011                                                             (line  280)
46012* canonicalization of instructions:      Insn Canonicalizations.
46013                                                             (line    6)
46014* canonicalize_funcptr_for_compare instruction pattern: Standard Names.
46015                                                             (line 1306)
46016* CASE_VECTOR_MODE:                      Misc.               (line   27)
46017* CASE_VECTOR_PC_RELATIVE:               Misc.               (line   40)
46018* CASE_VECTOR_SHORTEN_MODE:              Misc.               (line   31)
46019* casesi instruction pattern:            Standard Names.     (line 1229)
46020* cbranchMODE4 instruction pattern:      Standard Names.     (line 1096)
46021* cc0 <1>:                               CC0 Condition Codes.
46022                                                             (line    6)
46023* cc0:                                   Regs and Memory.    (line  307)
46024* cc0, RTL sharing:                      Sharing.            (line   27)
46025* cc0_rtx:                               Regs and Memory.    (line  333)
46026* CC1_SPEC:                              Driver.             (line   56)
46027* CC1PLUS_SPEC:                          Driver.             (line   64)
46028* cc_status:                             CC0 Condition Codes.
46029                                                             (line    6)
46030* CC_STATUS_MDEP:                        CC0 Condition Codes.
46031                                                             (line   17)
46032* CC_STATUS_MDEP_INIT:                   CC0 Condition Codes.
46033                                                             (line   23)
46034* CCmode <1>:                            MODE_CC Condition Codes.
46035                                                             (line    6)
46036* CCmode:                                Machine Modes.      (line  176)
46037* CDImode:                               Machine Modes.      (line  202)
46038* CEIL_DIV_EXPR:                         Unary and Binary Expressions.
46039                                                             (line    6)
46040* CEIL_MOD_EXPR:                         Unary and Binary Expressions.
46041                                                             (line    6)
46042* ceilM2 instruction pattern:            Standard Names.     (line  652)
46043* CFA_FRAME_BASE_OFFSET:                 Frame Layout.       (line  226)
46044* CFG verification:                      Maintaining the CFG.
46045                                                             (line  119)
46046* CFG, Control Flow Graph:               Control Flow.       (line    6)
46047* cfghooks.h:                            Maintaining the CFG.
46048                                                             (line    6)
46049* cgraph_finalize_function:              Parsing pass.       (line   52)
46050* chain_circular:                        GTY Options.        (line  196)
46051* chain_next:                            GTY Options.        (line  196)
46052* chain_prev:                            GTY Options.        (line  196)
46053* change_address:                        Standard Names.     (line   47)
46054* CHAR_TYPE_SIZE:                        Type Layout.        (line   39)
46055* check_stack instruction pattern:       Standard Names.     (line 1393)
46056* CHImode:                               Machine Modes.      (line  202)
46057* class definitions, register:           Register Classes.   (line    6)
46058* class preference constraints:          Class Preferences.  (line    6)
46059* class, scope:                          Classes.            (line    6)
46060* CLASS_MAX_NREGS:                       Register Classes.   (line  526)
46061* CLASS_TYPE_P:                          Types for C++.      (line   65)
46062* classes of RTX codes:                  RTL Classes.        (line    6)
46063* CLASSTYPE_DECLARED_CLASS:              Classes.            (line    6)
46064* CLASSTYPE_HAS_MUTABLE:                 Classes.            (line   85)
46065* CLASSTYPE_NON_POD_P:                   Classes.            (line   90)
46066* CLEANUP_DECL:                          Statements for C++. (line    6)
46067* CLEANUP_EXPR:                          Statements for C++. (line    6)
46068* CLEANUP_POINT_EXPR:                    Unary and Binary Expressions.
46069                                                             (line    6)
46070* CLEANUP_STMT:                          Statements for C++. (line    6)
46071* Cleanups:                              Cleanups.           (line    6)
46072* CLEAR_BY_PIECES_P:                     Costs.              (line  188)
46073* clear_cache instruction pattern:       Standard Names.     (line 1885)
46074* CLEAR_INSN_CACHE:                      Trampolines.        (line   99)
46075* CLEAR_RATIO:                           Costs.              (line  176)
46076* clobber:                               Side Effects.       (line  106)
46077* clrsb:                                 Arithmetic.         (line  216)
46078* clz:                                   Arithmetic.         (line  223)
46079* CLZ_DEFINED_VALUE_AT_ZERO:             Misc.               (line  305)
46080* clzM2 instruction pattern:             Standard Names.     (line  717)
46081* cmpmemM instruction pattern:           Standard Names.     (line  850)
46082* cmpstrM instruction pattern:           Standard Names.     (line  829)
46083* cmpstrnM instruction pattern:          Standard Names.     (line  816)
46084* code generation RTL sequences:         Expander Definitions.
46085                                                             (line    6)
46086* code iterators in .md files:           Code Iterators.     (line    6)
46087* CODE_LABEL:                            Basic Blocks.       (line   50)
46088* code_label:                            Insns.              (line  125)
46089* code_label and /i:                     Flags.              (line   59)
46090* code_label and /v:                     Flags.              (line   44)
46091* CODE_LABEL_NUMBER:                     Insns.              (line  125)
46092* codes, RTL expression:                 RTL Objects.        (line   47)
46093* COImode:                               Machine Modes.      (line  202)
46094* COLLECT2_HOST_INITIALIZATION:          Host Misc.          (line   32)
46095* COLLECT_EXPORT_LIST:                   Misc.               (line  756)
46096* COLLECT_SHARED_FINI_FUNC:              Macros for Initialization.
46097                                                             (line   44)
46098* COLLECT_SHARED_INIT_FUNC:              Macros for Initialization.
46099                                                             (line   33)
46100* commit_edge_insertions:                Maintaining the CFG.
46101                                                             (line  107)
46102* compare:                               Arithmetic.         (line   43)
46103* compare, canonicalization of:          Insn Canonicalizations.
46104                                                             (line   37)
46105* comparison_operator:                   Machine-Independent Predicates.
46106                                                             (line  111)
46107* compiler passes and files:             Passes.             (line    6)
46108* complement, bitwise:                   Arithmetic.         (line  154)
46109* COMPLEX_CST:                           Constant expressions.
46110                                                             (line    6)
46111* COMPLEX_EXPR:                          Unary and Binary Expressions.
46112                                                             (line    6)
46113* COMPLEX_TYPE:                          Types.              (line    6)
46114* COMPONENT_REF:                         Storage References. (line    6)
46115* Compound Expressions:                  Compound Expressions.
46116                                                             (line    6)
46117* Compound Lvalues:                      Compound Lvalues.   (line    6)
46118* COMPOUND_EXPR:                         Unary and Binary Expressions.
46119                                                             (line    6)
46120* COMPOUND_LITERAL_EXPR:                 Unary and Binary Expressions.
46121                                                             (line    6)
46122* COMPOUND_LITERAL_EXPR_DECL:            Unary and Binary Expressions.
46123                                                             (line  375)
46124* COMPOUND_LITERAL_EXPR_DECL_EXPR:       Unary and Binary Expressions.
46125                                                             (line  375)
46126* computed jump:                         Edges.              (line  128)
46127* computing the length of an insn:       Insn Lengths.       (line    6)
46128* concat:                                Regs and Memory.    (line  385)
46129* concatn:                               Regs and Memory.    (line  391)
46130* cond:                                  Comparisons.        (line   90)
46131* cond and attributes:                   Expressions.        (line   37)
46132* cond_exec:                             Side Effects.       (line  254)
46133* COND_EXPR:                             Unary and Binary Expressions.
46134                                                             (line    6)
46135* condition code register:               Regs and Memory.    (line  307)
46136* condition code status:                 Condition Code.     (line    6)
46137* condition codes:                       Comparisons.        (line   20)
46138* conditional execution:                 Conditional Execution.
46139                                                             (line    6)
46140* Conditional Expressions:               Conditional Expressions.
46141                                                             (line    6)
46142* conditions, in patterns:               Patterns.           (line   43)
46143* configuration file <1>:                Host Misc.          (line    6)
46144* configuration file:                    Filesystem.         (line    6)
46145* configure terms:                       Configure Terms.    (line    6)
46146* CONJ_EXPR:                             Unary and Binary Expressions.
46147                                                             (line    6)
46148* const:                                 Constants.          (line  110)
46149* CONST0_RTX:                            Constants.          (line  130)
46150* const0_rtx:                            Constants.          (line   21)
46151* CONST1_RTX:                            Constants.          (line  130)
46152* const1_rtx:                            Constants.          (line   21)
46153* CONST2_RTX:                            Constants.          (line  130)
46154* const2_rtx:                            Constants.          (line   21)
46155* CONST_DECL:                            Declarations.       (line    6)
46156* const_double:                          Constants.          (line   37)
46157* const_double, RTL sharing:             Sharing.            (line   29)
46158* CONST_DOUBLE_LOW:                      Constants.          (line   50)
46159* CONST_DOUBLE_OK_FOR_CONSTRAINT_P:      Old Constraints.    (line   69)
46160* CONST_DOUBLE_OK_FOR_LETTER_P:          Old Constraints.    (line   54)
46161* const_double_operand:                  Machine-Independent Predicates.
46162                                                             (line   21)
46163* const_fixed:                           Constants.          (line   63)
46164* const_int:                             Constants.          (line    8)
46165* const_int and attribute tests:         Expressions.        (line   47)
46166* const_int and attributes:              Expressions.        (line   10)
46167* const_int, RTL sharing:                Sharing.            (line   23)
46168* const_int_operand:                     Machine-Independent Predicates.
46169                                                             (line   16)
46170* CONST_OK_FOR_CONSTRAINT_P:             Old Constraints.    (line   49)
46171* CONST_OK_FOR_LETTER_P:                 Old Constraints.    (line   40)
46172* const_string:                          Constants.          (line   82)
46173* const_string and attributes:           Expressions.        (line   20)
46174* const_true_rtx:                        Constants.          (line   31)
46175* const_vector:                          Constants.          (line   70)
46176* const_vector, RTL sharing:             Sharing.            (line   32)
46177* constant attributes:                   Constant Attributes.
46178                                                             (line    6)
46179* constant definitions:                  Constant Definitions.
46180                                                             (line    6)
46181* CONSTANT_ADDRESS_P:                    Addressing Modes.   (line   29)
46182* CONSTANT_ALIGNMENT:                    Storage Layout.     (line  237)
46183* CONSTANT_P:                            Addressing Modes.   (line   36)
46184* CONSTANT_POOL_ADDRESS_P:               Flags.              (line   10)
46185* CONSTANT_POOL_BEFORE_FUNCTION:         Data Output.        (line   65)
46186* constants in constraints:              Simple Constraints. (line   70)
46187* constm1_rtx:                           Constants.          (line   21)
46188* constraint modifier characters:        Modifiers.          (line    6)
46189* constraint, matching:                  Simple Constraints. (line  142)
46190* CONSTRAINT_LEN:                        Old Constraints.    (line   12)
46191* constraint_num:                        C Constraint Interface.
46192                                                             (line   38)
46193* constraint_satisfied_p:                C Constraint Interface.
46194                                                             (line   54)
46195* constraints:                           Constraints.        (line    6)
46196* constraints, defining:                 Define Constraints. (line    6)
46197* constraints, defining, obsolete method: Old Constraints.   (line    6)
46198* constraints, machine specific:         Machine Constraints.
46199                                                             (line    6)
46200* constraints, testing:                  C Constraint Interface.
46201                                                             (line    6)
46202* CONSTRUCTOR:                           Unary and Binary Expressions.
46203                                                             (line    6)
46204* constructors, automatic calls:         Collect2.           (line   15)
46205* constructors, output of:               Initialization.     (line    6)
46206* container:                             Containers.         (line    6)
46207* CONTINUE_STMT:                         Statements for C++. (line    6)
46208* contributors:                          Contributors.       (line    6)
46209* controlling register usage:            Register Basics.    (line   73)
46210* controlling the compilation driver:    Driver.             (line    6)
46211* conventions, run-time:                 Interface.          (line    6)
46212* conversions:                           Conversions.        (line    6)
46213* CONVERT_EXPR:                          Unary and Binary Expressions.
46214                                                             (line    6)
46215* copy_rtx:                              Addressing Modes.   (line  190)
46216* copy_rtx_if_shared:                    Sharing.            (line   64)
46217* copysignM3 instruction pattern:        Standard Names.     (line  698)
46218* cosM2 instruction pattern:             Standard Names.     (line  564)
46219* costs of instructions:                 Costs.              (line    6)
46220* CP_INTEGRAL_TYPE:                      Types for C++.      (line   57)
46221* cp_namespace_decls:                    Namespaces.         (line   49)
46222* CP_TYPE_CONST_NON_VOLATILE_P:          Types for C++.      (line   33)
46223* CP_TYPE_CONST_P:                       Types for C++.      (line   24)
46224* cp_type_quals:                         Types for C++.      (line    6)
46225* CP_TYPE_RESTRICT_P:                    Types for C++.      (line   30)
46226* CP_TYPE_VOLATILE_P:                    Types for C++.      (line   27)
46227* CPLUSPLUS_CPP_SPEC:                    Driver.             (line   51)
46228* CPP_SPEC:                              Driver.             (line   44)
46229* CQImode:                               Machine Modes.      (line  202)
46230* cross compilation and floating point:  Floating Point.     (line    6)
46231* CRT_CALL_STATIC_FUNCTION:              Sections.           (line  121)
46232* crtl->args.pops_args:                  Function Entry.     (line  106)
46233* crtl->args.pretend_args_size:          Function Entry.     (line  112)
46234* crtl->outgoing_args_size:              Stack Arguments.    (line   48)
46235* CRTSTUFF_T_CFLAGS:                     Target Fragment.    (line   15)
46236* CRTSTUFF_T_CFLAGS_S:                   Target Fragment.    (line   19)
46237* CSImode:                               Machine Modes.      (line  202)
46238* cstoreMODE4 instruction pattern:       Standard Names.     (line 1057)
46239* CTImode:                               Machine Modes.      (line  202)
46240* ctrapMM4 instruction pattern:          Standard Names.     (line 1547)
46241* ctz:                                   Arithmetic.         (line  231)
46242* CTZ_DEFINED_VALUE_AT_ZERO:             Misc.               (line  306)
46243* ctzM2 instruction pattern:             Standard Names.     (line  726)
46244* CUMULATIVE_ARGS:                       Register Arguments. (line  128)
46245* current_function_is_leaf:              Leaf Functions.     (line   51)
46246* current_function_uses_only_leaf_regs:  Leaf Functions.     (line   51)
46247* current_insn_predicate:                Conditional Execution.
46248                                                             (line   26)
46249* DAmode:                                Machine Modes.      (line  152)
46250* data bypass:                           Processor pipeline description.
46251                                                             (line  106)
46252* data dependence delays:                Processor pipeline description.
46253                                                             (line    6)
46254* Data Dependency Analysis:              Dependency analysis.
46255                                                             (line    6)
46256* data structures:                       Per-Function Data.  (line    6)
46257* DATA_ALIGNMENT:                        Storage Layout.     (line  224)
46258* DATA_SECTION_ASM_OP:                   Sections.           (line   53)
46259* DBR_OUTPUT_SEQEND:                     Instruction Output. (line  135)
46260* dbr_sequence_length:                   Instruction Output. (line  134)
46261* DBX_BLOCKS_FUNCTION_RELATIVE:          DBX Options.        (line  103)
46262* DBX_CONTIN_CHAR:                       DBX Options.        (line   66)
46263* DBX_CONTIN_LENGTH:                     DBX Options.        (line   56)
46264* DBX_DEBUGGING_INFO:                    DBX Options.        (line    9)
46265* DBX_FUNCTION_FIRST:                    DBX Options.        (line   97)
46266* DBX_LINES_FUNCTION_RELATIVE:           DBX Options.        (line  109)
46267* DBX_NO_XREFS:                          DBX Options.        (line   50)
46268* DBX_OUTPUT_MAIN_SOURCE_FILE_END:       File Names and DBX. (line   34)
46269* DBX_OUTPUT_MAIN_SOURCE_FILENAME:       File Names and DBX. (line    9)
46270* DBX_OUTPUT_NULL_N_SO_AT_MAIN_SOURCE_FILE_END: File Names and DBX.
46271                                                             (line   42)
46272* DBX_OUTPUT_SOURCE_LINE:                DBX Hooks.          (line    9)
46273* DBX_REGISTER_NUMBER:                   All Debuggers.      (line    9)
46274* DBX_REGPARM_STABS_CODE:                DBX Options.        (line   87)
46275* DBX_REGPARM_STABS_LETTER:              DBX Options.        (line   92)
46276* DBX_STATIC_CONST_VAR_CODE:             DBX Options.        (line   82)
46277* DBX_STATIC_STAB_DATA_SECTION:          DBX Options.        (line   73)
46278* DBX_TYPE_DECL_STABS_CODE:              DBX Options.        (line   78)
46279* DBX_USE_BINCL:                         DBX Options.        (line  115)
46280* DCmode:                                Machine Modes.      (line  197)
46281* DDmode:                                Machine Modes.      (line   90)
46282* De Morgan's law:                       Insn Canonicalizations.
46283                                                             (line   52)
46284* dead_or_set_p:                         define_peephole.    (line   65)
46285* debug_expr:                            Debug Information.  (line   22)
46286* DEBUG_EXPR_DECL:                       Declarations.       (line    6)
46287* debug_insn:                            Insns.              (line  245)
46288* DEBUG_SYMS_TEXT:                       DBX Options.        (line   25)
46289* DEBUGGER_ARG_OFFSET:                   All Debuggers.      (line   37)
46290* DEBUGGER_AUTO_OFFSET:                  All Debuggers.      (line   28)
46291* decimal float library:                 Decimal float library routines.
46292                                                             (line    6)
46293* DECL_ALIGN:                            Declarations.       (line    6)
46294* DECL_ANTICIPATED:                      Functions for C++.  (line   42)
46295* DECL_ARGUMENTS:                        Function Basics.    (line   36)
46296* DECL_ARRAY_DELETE_OPERATOR_P:          Functions for C++.  (line  158)
46297* DECL_ARTIFICIAL <1>:                   Function Properties.
46298                                                             (line   47)
46299* DECL_ARTIFICIAL <2>:                   Function Basics.    (line    6)
46300* DECL_ARTIFICIAL:                       Working with declarations.
46301                                                             (line   24)
46302* DECL_ASSEMBLER_NAME:                   Function Basics.    (line    6)
46303* DECL_ATTRIBUTES:                       Attributes.         (line   22)
46304* DECL_BASE_CONSTRUCTOR_P:               Functions for C++.  (line   88)
46305* DECL_COMPLETE_CONSTRUCTOR_P:           Functions for C++.  (line   84)
46306* DECL_COMPLETE_DESTRUCTOR_P:            Functions for C++.  (line   98)
46307* DECL_CONST_MEMFUNC_P:                  Functions for C++.  (line   71)
46308* DECL_CONSTRUCTOR_P:                    Functions for C++.  (line   77)
46309* DECL_CONTEXT:                          Namespaces.         (line   31)
46310* DECL_CONV_FN_P:                        Functions for C++.  (line  105)
46311* DECL_COPY_CONSTRUCTOR_P:               Functions for C++.  (line   92)
46312* DECL_DESTRUCTOR_P:                     Functions for C++.  (line   95)
46313* DECL_EXTERN_C_FUNCTION_P:              Functions for C++.  (line   46)
46314* DECL_EXTERNAL <1>:                     Function Properties.
46315                                                             (line   25)
46316* DECL_EXTERNAL:                         Declarations.       (line    6)
46317* DECL_FUNCTION_MEMBER_P:                Functions for C++.  (line   61)
46318* DECL_FUNCTION_SPECIFIC_OPTIMIZATION <1>: Function Properties.
46319                                                             (line   61)
46320* DECL_FUNCTION_SPECIFIC_OPTIMIZATION:   Function Basics.    (line    6)
46321* DECL_FUNCTION_SPECIFIC_TARGET <1>:     Function Properties.
46322                                                             (line   55)
46323* DECL_FUNCTION_SPECIFIC_TARGET:         Function Basics.    (line    6)
46324* DECL_GLOBAL_CTOR_P:                    Functions for C++.  (line  108)
46325* DECL_GLOBAL_DTOR_P:                    Functions for C++.  (line  112)
46326* DECL_INITIAL <1>:                      Function Basics.    (line   51)
46327* DECL_INITIAL:                          Declarations.       (line    6)
46328* DECL_LINKONCE_P:                       Functions for C++.  (line   50)
46329* DECL_LOCAL_FUNCTION_P:                 Functions for C++.  (line   38)
46330* DECL_MAIN_P:                           Functions for C++.  (line   34)
46331* DECL_NAME <1>:                         Namespaces.         (line   20)
46332* DECL_NAME <2>:                         Function Basics.    (line    6)
46333* DECL_NAME:                             Working with declarations.
46334                                                             (line    7)
46335* DECL_NAMESPACE_ALIAS:                  Namespaces.         (line   35)
46336* DECL_NAMESPACE_STD_P:                  Namespaces.         (line   45)
46337* DECL_NON_THUNK_FUNCTION_P:             Functions for C++.  (line  138)
46338* DECL_NONCONVERTING_P:                  Functions for C++.  (line   80)
46339* DECL_NONSTATIC_MEMBER_FUNCTION_P:      Functions for C++.  (line   68)
46340* DECL_OVERLOADED_OPERATOR_P:            Functions for C++.  (line  102)
46341* DECL_PURE_P:                           Function Properties.
46342                                                             (line   40)
46343* DECL_RESULT:                           Function Basics.    (line   41)
46344* DECL_SAVED_TREE:                       Function Basics.    (line   44)
46345* DECL_SIZE:                             Declarations.       (line    6)
46346* DECL_STATIC_FUNCTION_P:                Functions for C++.  (line   65)
46347* DECL_STMT:                             Statements for C++. (line    6)
46348* DECL_STMT_DECL:                        Statements for C++. (line    6)
46349* DECL_THUNK_P:                          Functions for C++.  (line  116)
46350* DECL_VIRTUAL_P:                        Function Properties.
46351                                                             (line   44)
46352* DECL_VOLATILE_MEMFUNC_P:               Functions for C++.  (line   74)
46353* declaration:                           Declarations.       (line    6)
46354* declarations, RTL:                     RTL Declarations.   (line    6)
46355* DECLARE_LIBRARY_RENAMES:               Library Calls.      (line    9)
46356* decrement_and_branch_until_zero instruction pattern: Standard Names.
46357                                                             (line 1267)
46358* default:                               GTY Options.        (line   82)
46359* default_file_start:                    File Framework.     (line    8)
46360* DEFAULT_GDB_EXTENSIONS:                DBX Options.        (line   18)
46361* DEFAULT_PCC_STRUCT_RETURN:             Aggregate Return.   (line   35)
46362* DEFAULT_SIGNED_CHAR:                   Type Layout.        (line  161)
46363* define_address_constraint:             Define Constraints. (line  107)
46364* define_asm_attributes:                 Tagging Insns.      (line   73)
46365* define_attr:                           Defining Attributes.
46366                                                             (line    6)
46367* define_automaton:                      Processor pipeline description.
46368                                                             (line   53)
46369* define_bypass:                         Processor pipeline description.
46370                                                             (line  197)
46371* define_c_enum:                         Constant Definitions.
46372                                                             (line   49)
46373* define_code_attr:                      Code Iterators.     (line    6)
46374* define_code_iterator:                  Code Iterators.     (line    6)
46375* define_cond_exec:                      Conditional Execution.
46376                                                             (line   13)
46377* define_constants:                      Constant Definitions.
46378                                                             (line    6)
46379* define_constraint:                     Define Constraints. (line   48)
46380* define_cpu_unit:                       Processor pipeline description.
46381                                                             (line   68)
46382* define_delay:                          Delay Slots.        (line   25)
46383* define_enum:                           Constant Definitions.
46384                                                             (line  118)
46385* define_enum_attr <1>:                  Constant Definitions.
46386                                                             (line  136)
46387* define_enum_attr:                      Defining Attributes.
46388                                                             (line   76)
46389* define_expand:                         Expander Definitions.
46390                                                             (line   11)
46391* define_insn:                           Patterns.           (line    6)
46392* define_insn example:                   Example.            (line    6)
46393* define_insn_and_split:                 Insn Splitting.     (line  170)
46394* define_insn_reservation:               Processor pipeline description.
46395                                                             (line  106)
46396* define_int_attr:                       Int Iterators.      (line    6)
46397* define_int_iterator:                   Int Iterators.      (line    6)
46398* define_memory_constraint:              Define Constraints. (line   88)
46399* define_mode_attr:                      Substitutions.      (line    6)
46400* define_mode_iterator:                  Defining Mode Iterators.
46401                                                             (line    6)
46402* define_peephole:                       define_peephole.    (line    6)
46403* define_peephole2:                      define_peephole2.   (line    6)
46404* define_predicate:                      Defining Predicates.
46405                                                             (line    6)
46406* define_query_cpu_unit:                 Processor pipeline description.
46407                                                             (line   90)
46408* define_register_constraint:            Define Constraints. (line   28)
46409* define_reservation:                    Processor pipeline description.
46410                                                             (line  186)
46411* define_special_predicate:              Defining Predicates.
46412                                                             (line    6)
46413* define_split:                          Insn Splitting.     (line   32)
46414* define_subst <1>:                      Subst Iterators.    (line    6)
46415* define_subst <2>:                      Define Subst Output Template.
46416                                                             (line    6)
46417* define_subst <3>:                      Define Subst Pattern Matching.
46418                                                             (line    6)
46419* define_subst <4>:                      Define Subst Example.
46420                                                             (line    6)
46421* define_subst:                          Define Subst.       (line    6)
46422* define_subst_attr:                     Subst Iterators.    (line    6)
46423* defining attributes and their values:  Defining Attributes.
46424                                                             (line    6)
46425* defining constraints:                  Define Constraints. (line    6)
46426* defining constraints, obsolete method: Old Constraints.    (line    6)
46427* defining jump instruction patterns:    Jump Patterns.      (line    6)
46428* defining looping instruction patterns: Looping Patterns.   (line    6)
46429* defining peephole optimizers:          Peephole Definitions.
46430                                                             (line    6)
46431* defining predicates:                   Defining Predicates.
46432                                                             (line    6)
46433* defining RTL sequences for code generation: Expander Definitions.
46434                                                             (line    6)
46435* delay slots, defining:                 Delay Slots.        (line    6)
46436* deletable:                             GTY Options.        (line  150)
46437* DELETE_IF_ORDINARY:                    Filesystem.         (line   79)
46438* Dependent Patterns:                    Dependent Patterns. (line    6)
46439* desc:                                  GTY Options.        (line   82)
46440* destructors, output of:                Initialization.     (line    6)
46441* deterministic finite state automaton:  Processor pipeline description.
46442                                                             (line    6)
46443* DF_SIZE:                               Type Layout.        (line  137)
46444* DFmode:                                Machine Modes.      (line   73)
46445* digits in constraint:                  Simple Constraints. (line  130)
46446* DImode:                                Machine Modes.      (line   45)
46447* DIR_SEPARATOR:                         Filesystem.         (line   18)
46448* DIR_SEPARATOR_2:                       Filesystem.         (line   19)
46449* directory options .md:                 Including Patterns. (line   44)
46450* disabling certain registers:           Register Basics.    (line   73)
46451* dispatch table:                        Dispatch Tables.    (line    8)
46452* div:                                   Arithmetic.         (line  116)
46453* div and attributes:                    Expressions.        (line   85)
46454* division:                              Arithmetic.         (line  116)
46455* divM3 instruction pattern:             Standard Names.     (line  269)
46456* divmodM4 instruction pattern:          Standard Names.     (line  490)
46457* DO_BODY:                               Statements for C++. (line    6)
46458* DO_COND:                               Statements for C++. (line    6)
46459* DO_STMT:                               Statements for C++. (line    6)
46460* DOLLARS_IN_IDENTIFIERS:                Misc.               (line  446)
46461* doloop_begin instruction pattern:      Standard Names.     (line 1299)
46462* doloop_end instruction pattern:        Standard Names.     (line 1277)
46463* DONE:                                  Expander Definitions.
46464                                                             (line   77)
46465* DONT_USE_BUILTIN_SETJMP:               Exception Region Output.
46466                                                             (line   79)
46467* DOUBLE_TYPE_SIZE:                      Type Layout.        (line   53)
46468* DQmode:                                Machine Modes.      (line  115)
46469* driver:                                Driver.             (line    6)
46470* DRIVER_SELF_SPECS:                     Driver.             (line    9)
46471* DUMPFILE_FORMAT:                       Filesystem.         (line   67)
46472* DWARF2_ASM_LINE_DEBUG_INFO:            SDB and DWARF.      (line   50)
46473* DWARF2_DEBUGGING_INFO:                 SDB and DWARF.      (line   13)
46474* DWARF2_FRAME_INFO:                     SDB and DWARF.      (line   30)
46475* DWARF2_FRAME_REG_OUT:                  Frame Registers.    (line  150)
46476* DWARF2_UNWIND_INFO:                    Exception Region Output.
46477                                                             (line   40)
46478* DWARF_ALT_FRAME_RETURN_COLUMN:         Frame Layout.       (line  152)
46479* DWARF_CIE_DATA_ALIGNMENT:              Exception Region Output.
46480                                                             (line   91)
46481* DWARF_FRAME_REGISTERS:                 Frame Registers.    (line  110)
46482* DWARF_FRAME_REGNUM:                    Frame Registers.    (line  142)
46483* DWARF_REG_TO_UNWIND_COLUMN:            Frame Registers.    (line  134)
46484* DWARF_ZERO_REG:                        Frame Layout.       (line  163)
46485* DYNAMIC_CHAIN_ADDRESS:                 Frame Layout.       (line   92)
46486* E in constraint:                       Simple Constraints. (line   89)
46487* earlyclobber operand:                  Modifiers.          (line   25)
46488* edge:                                  Edges.              (line    6)
46489* edge in the flow graph:                Edges.              (line    6)
46490* edge iterators:                        Edges.              (line   15)
46491* edge splitting:                        Maintaining the CFG.
46492                                                             (line  107)
46493* EDGE_ABNORMAL:                         Edges.              (line  128)
46494* EDGE_ABNORMAL, EDGE_ABNORMAL_CALL:     Edges.              (line  172)
46495* EDGE_ABNORMAL, EDGE_EH:                Edges.              (line   96)
46496* EDGE_ABNORMAL, EDGE_SIBCALL:           Edges.              (line  122)
46497* EDGE_FALLTHRU, force_nonfallthru:      Edges.              (line   86)
46498* EDOM, implicit usage:                  Library Calls.      (line   52)
46499* EH_FRAME_IN_DATA_SECTION:              Exception Region Output.
46500                                                             (line   20)
46501* EH_FRAME_SECTION_NAME:                 Exception Region Output.
46502                                                             (line   10)
46503* eh_return instruction pattern:         Standard Names.     (line 1481)
46504* EH_RETURN_DATA_REGNO:                  Exception Handling. (line    7)
46505* EH_RETURN_HANDLER_RTX:                 Exception Handling. (line   39)
46506* EH_RETURN_STACKADJ_RTX:                Exception Handling. (line   22)
46507* EH_TABLES_CAN_BE_READ_ONLY:            Exception Region Output.
46508                                                             (line   29)
46509* EH_USES:                               Function Entry.     (line  158)
46510* ei_edge:                               Edges.              (line   43)
46511* ei_end_p:                              Edges.              (line   27)
46512* ei_last:                               Edges.              (line   23)
46513* ei_next:                               Edges.              (line   35)
46514* ei_one_before_end_p:                   Edges.              (line   31)
46515* ei_prev:                               Edges.              (line   39)
46516* ei_safe_safe:                          Edges.              (line   47)
46517* ei_start:                              Edges.              (line   19)
46518* ELIMINABLE_REGS:                       Elimination.        (line   47)
46519* ELSE_CLAUSE:                           Statements for C++. (line    6)
46520* Embedded C:                            Fixed-point fractional library routines.
46521                                                             (line    6)
46522* EMIT_MODE_SET:                         Mode Switching.     (line   75)
46523* Empty Statements:                      Empty Statements.   (line    6)
46524* EMPTY_CLASS_EXPR:                      Statements for C++. (line    6)
46525* EMPTY_FIELD_BOUNDARY:                  Storage Layout.     (line  307)
46526* Emulated TLS:                          Emulated TLS.       (line    6)
46527* enabled:                               Disable Insn Alternatives.
46528                                                             (line    6)
46529* ENDFILE_SPEC:                          Driver.             (line  156)
46530* endianness:                            Portability.        (line   21)
46531* ENTRY_BLOCK_PTR, EXIT_BLOCK_PTR:       Basic Blocks.       (line   10)
46532* enum machine_mode:                     Machine Modes.      (line    6)
46533* enum reg_class:                        Register Classes.   (line   72)
46534* ENUMERAL_TYPE:                         Types.              (line    6)
46535* enumerations:                          Constant Definitions.
46536                                                             (line   49)
46537* epilogue:                              Function Entry.     (line    6)
46538* epilogue instruction pattern:          Standard Names.     (line 1519)
46539* EPILOGUE_USES:                         Function Entry.     (line  152)
46540* eq:                                    Comparisons.        (line   52)
46541* eq and attributes:                     Expressions.        (line   85)
46542* eq_attr:                               Expressions.        (line  106)
46543* EQ_EXPR:                               Unary and Binary Expressions.
46544                                                             (line    6)
46545* equal:                                 Comparisons.        (line   52)
46546* errno, implicit usage:                 Library Calls.      (line   64)
46547* EXACT_DIV_EXPR:                        Unary and Binary Expressions.
46548                                                             (line    6)
46549* examining SSA_NAMEs:                   SSA.                (line  216)
46550* exception handling <1>:                Exception Handling. (line    6)
46551* exception handling:                    Edges.              (line   96)
46552* exception_receiver instruction pattern: Standard Names.    (line 1445)
46553* exclamation point:                     Multi-Alternative.  (line   47)
46554* exclusion_set:                         Processor pipeline description.
46555                                                             (line  224)
46556* exclusive-or, bitwise:                 Arithmetic.         (line  168)
46557* EXIT_EXPR:                             Unary and Binary Expressions.
46558                                                             (line    6)
46559* EXIT_IGNORE_STACK:                     Function Entry.     (line  140)
46560* expander definitions:                  Expander Definitions.
46561                                                             (line    6)
46562* expM2 instruction pattern:             Standard Names.     (line  593)
46563* EXPR_FILENAME:                         Working with declarations.
46564                                                             (line   14)
46565* EXPR_LINENO:                           Working with declarations.
46566                                                             (line   20)
46567* expr_list:                             Insns.              (line  552)
46568* EXPR_STMT:                             Statements for C++. (line    6)
46569* EXPR_STMT_EXPR:                        Statements for C++. (line    6)
46570* expression:                            Expression trees.   (line    6)
46571* expression codes:                      RTL Objects.        (line   47)
46572* extendMN2 instruction pattern:         Standard Names.     (line  908)
46573* extensible constraints:                Simple Constraints. (line  173)
46574* EXTRA_ADDRESS_CONSTRAINT:              Old Constraints.    (line  123)
46575* EXTRA_CONSTRAINT:                      Old Constraints.    (line   74)
46576* EXTRA_CONSTRAINT_STR:                  Old Constraints.    (line   95)
46577* EXTRA_MEMORY_CONSTRAINT:               Old Constraints.    (line  100)
46578* EXTRA_SPECS:                           Driver.             (line  183)
46579* extv instruction pattern:              Standard Names.     (line  999)
46580* extvM instruction pattern:             Standard Names.     (line  944)
46581* extvmisalignM instruction pattern:     Standard Names.     (line  954)
46582* extzv instruction pattern:             Standard Names.     (line 1017)
46583* extzvM instruction pattern:            Standard Names.     (line  968)
46584* extzvmisalignM instruction pattern:    Standard Names.     (line  971)
46585* F in constraint:                       Simple Constraints. (line   94)
46586* FAIL:                                  Expander Definitions.
46587                                                             (line   83)
46588* fall-thru:                             Edges.              (line   69)
46589* FATAL_EXIT_CODE:                       Host Misc.          (line    6)
46590* FDL, GNU Free Documentation License:   GNU Free Documentation License.
46591                                                             (line    6)
46592* features, optional, in system conventions: Run-time Target.
46593                                                             (line   59)
46594* ffs:                                   Arithmetic.         (line  211)
46595* ffsM2 instruction pattern:             Standard Names.     (line  707)
46596* FIELD_DECL:                            Declarations.       (line    6)
46597* file_end_indicate_exec_stack:          File Framework.     (line   41)
46598* files and passes of the compiler:      Passes.             (line    6)
46599* files, generated:                      Files.              (line    6)
46600* final_absence_set:                     Processor pipeline description.
46601                                                             (line  224)
46602* FINAL_PRESCAN_INSN:                    Instruction Output. (line   61)
46603* final_presence_set:                    Processor pipeline description.
46604                                                             (line  224)
46605* final_sequence:                        Instruction Output. (line  145)
46606* FIND_BASE_TERM:                        Addressing Modes.   (line  119)
46607* FINI_ARRAY_SECTION_ASM_OP:             Sections.           (line  114)
46608* FINI_SECTION_ASM_OP:                   Sections.           (line   99)
46609* finite state automaton minimization:   Processor pipeline description.
46610                                                             (line  305)
46611* FIRST_PARM_OFFSET:                     Frame Layout.       (line   67)
46612* FIRST_PARM_OFFSET and virtual registers: Regs and Memory.  (line   65)
46613* FIRST_PSEUDO_REGISTER:                 Register Basics.    (line    9)
46614* FIRST_STACK_REG:                       Stack Registers.    (line   27)
46615* FIRST_VIRTUAL_REGISTER:                Regs and Memory.    (line   51)
46616* fix:                                   Conversions.        (line   66)
46617* FIX_TRUNC_EXPR:                        Unary and Binary Expressions.
46618                                                             (line    6)
46619* fix_truncMN2 instruction pattern:      Standard Names.     (line  895)
46620* fixed register:                        Register Basics.    (line   15)
46621* fixed-point fractional library:        Fixed-point fractional library routines.
46622                                                             (line    6)
46623* FIXED_CONVERT_EXPR:                    Unary and Binary Expressions.
46624                                                             (line    6)
46625* FIXED_CST:                             Constant expressions.
46626                                                             (line    6)
46627* FIXED_POINT_TYPE:                      Types.              (line    6)
46628* FIXED_REGISTERS:                       Register Basics.    (line   15)
46629* fixed_regs:                            Register Basics.    (line   59)
46630* fixMN2 instruction pattern:            Standard Names.     (line  875)
46631* fixuns_truncMN2 instruction pattern:   Standard Names.     (line  899)
46632* fixunsMN2 instruction pattern:         Standard Names.     (line  884)
46633* flags in RTL expression:               Flags.              (line    6)
46634* float:                                 Conversions.        (line   58)
46635* FLOAT_EXPR:                            Unary and Binary Expressions.
46636                                                             (line    6)
46637* float_extend:                          Conversions.        (line   33)
46638* FLOAT_LIB_COMPARE_RETURNS_BOOL:        Library Calls.      (line   33)
46639* FLOAT_STORE_FLAG_VALUE:                Misc.               (line  287)
46640* float_truncate:                        Conversions.        (line   53)
46641* FLOAT_TYPE_SIZE:                       Type Layout.        (line   49)
46642* FLOAT_WORDS_BIG_ENDIAN:                Storage Layout.     (line   42)
46643* FLOAT_WORDS_BIG_ENDIAN, (lack of) effect on subreg: Regs and Memory.
46644                                                             (line  226)
46645* floating point and cross compilation:  Floating Point.     (line    6)
46646* floatMN2 instruction pattern:          Standard Names.     (line  867)
46647* floatunsMN2 instruction pattern:       Standard Names.     (line  871)
46648* FLOOR_DIV_EXPR:                        Unary and Binary Expressions.
46649                                                             (line    6)
46650* FLOOR_MOD_EXPR:                        Unary and Binary Expressions.
46651                                                             (line    6)
46652* floorM2 instruction pattern:           Standard Names.     (line  628)
46653* flow-insensitive alias analysis:       Alias analysis.     (line    6)
46654* flow-sensitive alias analysis:         Alias analysis.     (line    6)
46655* fma:                                   Arithmetic.         (line  111)
46656* fmaM4 instruction pattern:             Standard Names.     (line  279)
46657* fmodM3 instruction pattern:            Standard Names.     (line  546)
46658* fmsM4 instruction pattern:             Standard Names.     (line  286)
46659* fnmaM4 instruction pattern:            Standard Names.     (line  292)
46660* fnmsM4 instruction pattern:            Standard Names.     (line  298)
46661* FOR_BODY:                              Statements for C++. (line    6)
46662* FOR_COND:                              Statements for C++. (line    6)
46663* FOR_EXPR:                              Statements for C++. (line    6)
46664* FOR_INIT_STMT:                         Statements for C++. (line    6)
46665* FOR_STMT:                              Statements for C++. (line    6)
46666* FORCE_CODE_SECTION_ALIGN:              Sections.           (line  145)
46667* force_reg:                             Standard Names.     (line   36)
46668* fract_convert:                         Conversions.        (line   82)
46669* FRACT_TYPE_SIZE:                       Type Layout.        (line   68)
46670* fractional types:                      Fixed-point fractional library routines.
46671                                                             (line    6)
46672* fractMN2 instruction pattern:          Standard Names.     (line  917)
46673* fractunsMN2 instruction pattern:       Standard Names.     (line  932)
46674* frame layout:                          Frame Layout.       (line    6)
46675* FRAME_ADDR_RTX:                        Frame Layout.       (line  116)
46676* FRAME_GROWS_DOWNWARD:                  Frame Layout.       (line   31)
46677* FRAME_GROWS_DOWNWARD and virtual registers: Regs and Memory.
46678                                                             (line   69)
46679* FRAME_POINTER_CFA_OFFSET:              Frame Layout.       (line  212)
46680* frame_pointer_needed:                  Function Entry.     (line   34)
46681* FRAME_POINTER_REGNUM:                  Frame Registers.    (line   14)
46682* FRAME_POINTER_REGNUM and virtual registers: Regs and Memory.
46683                                                             (line   74)
46684* frame_pointer_rtx:                     Frame Registers.    (line  104)
46685* frame_related:                         Flags.              (line  229)
46686* frame_related, in insn, call_insn, jump_insn, barrier, and set: Flags.
46687                                                             (line  107)
46688* frame_related, in mem:                 Flags.              (line   85)
46689* frame_related, in reg:                 Flags.              (line   94)
46690* frame_related, in symbol_ref:          Flags.              (line  165)
46691* frequency, count, BB_FREQ_BASE:        Profile information.
46692                                                             (line   30)
46693* ftruncM2 instruction pattern:          Standard Names.     (line  890)
46694* function <1>:                          Functions for C++.  (line    6)
46695* function:                              Functions.          (line    6)
46696* function call conventions:             Interface.          (line    6)
46697* function entry and exit:               Function Entry.     (line    6)
46698* function entry point, alternate function entry point: Edges.
46699                                                             (line  181)
46700* function properties:                   Function Properties.
46701                                                             (line    6)
46702* function-call insns:                   Calls.              (line    6)
46703* FUNCTION_ARG_OFFSET:                   Register Arguments. (line  198)
46704* FUNCTION_ARG_PADDING:                  Register Arguments. (line  205)
46705* FUNCTION_ARG_REGNO_P:                  Register Arguments. (line  253)
46706* FUNCTION_BOUNDARY:                     Storage Layout.     (line  166)
46707* FUNCTION_DECL <1>:                     Functions for C++.  (line    6)
46708* FUNCTION_DECL:                         Functions.          (line    6)
46709* FUNCTION_MODE:                         Misc.               (line  342)
46710* FUNCTION_PROFILER:                     Profiling.          (line    9)
46711* FUNCTION_TYPE:                         Types.              (line    6)
46712* FUNCTION_VALUE:                        Scalar Return.      (line   52)
46713* FUNCTION_VALUE_REGNO_P:                Scalar Return.      (line   78)
46714* functions, leaf:                       Leaf Functions.     (line    6)
46715* fundamental type:                      Types.              (line    6)
46716* g in constraint:                       Simple Constraints. (line  120)
46717* G in constraint:                       Simple Constraints. (line   98)
46718* garbage collector, invocation:         Invoking the garbage collector.
46719                                                             (line    6)
46720* garbage collector, troubleshooting:    Troubleshooting.    (line    6)
46721* GCC and portability:                   Portability.        (line    6)
46722* GCC_DRIVER_HOST_INITIALIZATION:        Host Misc.          (line   36)
46723* gcov_type:                             Profile information.
46724                                                             (line   41)
46725* ge:                                    Comparisons.        (line   72)
46726* ge and attributes:                     Expressions.        (line   85)
46727* GE_EXPR:                               Unary and Binary Expressions.
46728                                                             (line    6)
46729* GEN_ERRNO_RTX:                         Library Calls.      (line   65)
46730* gencodes:                              RTL passes.         (line   18)
46731* general_operand:                       Machine-Independent Predicates.
46732                                                             (line  105)
46733* GENERAL_REGS:                          Register Classes.   (line   23)
46734* generated files:                       Files.              (line    6)
46735* generating assembler output:           Output Statement.   (line    6)
46736* generating insns:                      RTL Template.       (line    6)
46737* GENERIC <1>:                           GENERIC.            (line    6)
46738* GENERIC:                               Parsing pass.       (line    6)
46739* generic predicates:                    Machine-Independent Predicates.
46740                                                             (line    6)
46741* genflags:                              RTL passes.         (line   18)
46742* get_attr:                              Expressions.        (line  101)
46743* get_attr_length:                       Insn Lengths.       (line   46)
46744* GET_CLASS_NARROWEST_MODE:              Machine Modes.      (line  333)
46745* GET_CODE:                              RTL Objects.        (line   47)
46746* get_frame_size:                        Elimination.        (line   34)
46747* get_insns:                             Insns.              (line   34)
46748* get_last_insn:                         Insns.              (line   34)
46749* GET_MODE:                              Machine Modes.      (line  280)
46750* GET_MODE_ALIGNMENT:                    Machine Modes.      (line  320)
46751* GET_MODE_BITSIZE:                      Machine Modes.      (line  304)
46752* GET_MODE_CLASS:                        Machine Modes.      (line  294)
46753* GET_MODE_FBIT:                         Machine Modes.      (line  311)
46754* GET_MODE_IBIT:                         Machine Modes.      (line  307)
46755* GET_MODE_MASK:                         Machine Modes.      (line  315)
46756* GET_MODE_NAME:                         Machine Modes.      (line  291)
46757* GET_MODE_NUNITS:                       Machine Modes.      (line  329)
46758* GET_MODE_SIZE:                         Machine Modes.      (line  301)
46759* GET_MODE_UNIT_SIZE:                    Machine Modes.      (line  323)
46760* GET_MODE_WIDER_MODE:                   Machine Modes.      (line  297)
46761* GET_RTX_CLASS:                         RTL Classes.        (line    6)
46762* GET_RTX_FORMAT:                        RTL Classes.        (line  131)
46763* GET_RTX_LENGTH:                        RTL Classes.        (line  128)
46764* get_thread_pointerMODE instruction pattern: Standard Names.
46765                                                             (line 1856)
46766* geu:                                   Comparisons.        (line   72)
46767* geu and attributes:                    Expressions.        (line   85)
46768* GGC:                                   Type Information.   (line    6)
46769* ggc_collect:                           Invoking the garbage collector.
46770                                                             (line    6)
46771* GIMPLE <1>:                            GIMPLE.             (line    6)
46772* GIMPLE <2>:                            Gimplification pass.
46773                                                             (line    6)
46774* GIMPLE:                                Parsing pass.       (line   14)
46775* GIMPLE Exception Handling:             GIMPLE Exception Handling.
46776                                                             (line    6)
46777* GIMPLE instruction set:                GIMPLE instruction set.
46778                                                             (line    6)
46779* GIMPLE sequences:                      GIMPLE sequences.   (line    6)
46780* GIMPLE statement iterators <1>:        Maintaining the CFG.
46781                                                             (line   34)
46782* GIMPLE statement iterators:            Basic Blocks.       (line   78)
46783* gimple_addresses_taken:                Manipulating GIMPLE statements.
46784                                                             (line   90)
46785* GIMPLE_ASM:                            GIMPLE_ASM.         (line    6)
46786* gimple_asm_clear_volatile:             GIMPLE_ASM.         (line   63)
46787* gimple_asm_clobber_op:                 GIMPLE_ASM.         (line   46)
46788* gimple_asm_input_op:                   GIMPLE_ASM.         (line   30)
46789* gimple_asm_nclobbers:                  GIMPLE_ASM.         (line   27)
46790* gimple_asm_ninputs:                    GIMPLE_ASM.         (line   21)
46791* gimple_asm_noutputs:                   GIMPLE_ASM.         (line   24)
46792* gimple_asm_output_op:                  GIMPLE_ASM.         (line   38)
46793* gimple_asm_set_clobber_op:             GIMPLE_ASM.         (line   50)
46794* gimple_asm_set_input_op:               GIMPLE_ASM.         (line   34)
46795* gimple_asm_set_output_op:              GIMPLE_ASM.         (line   42)
46796* gimple_asm_set_volatile:               GIMPLE_ASM.         (line   60)
46797* gimple_asm_string:                     GIMPLE_ASM.         (line   53)
46798* gimple_asm_volatile_p:                 GIMPLE_ASM.         (line   57)
46799* GIMPLE_ASSIGN:                         GIMPLE_ASSIGN.      (line    6)
46800* gimple_assign_cast_p <1>:              GIMPLE_ASSIGN.      (line   93)
46801* gimple_assign_cast_p:                  Logical Operators.  (line  160)
46802* gimple_assign_lhs:                     GIMPLE_ASSIGN.      (line   51)
46803* gimple_assign_lhs_ptr:                 GIMPLE_ASSIGN.      (line   54)
46804* gimple_assign_rhs1:                    GIMPLE_ASSIGN.      (line   57)
46805* gimple_assign_rhs1_ptr:                GIMPLE_ASSIGN.      (line   60)
46806* gimple_assign_rhs2:                    GIMPLE_ASSIGN.      (line   64)
46807* gimple_assign_rhs2_ptr:                GIMPLE_ASSIGN.      (line   67)
46808* gimple_assign_rhs3:                    GIMPLE_ASSIGN.      (line   71)
46809* gimple_assign_rhs3_ptr:                GIMPLE_ASSIGN.      (line   74)
46810* gimple_assign_rhs_class:               GIMPLE_ASSIGN.      (line   46)
46811* gimple_assign_rhs_code:                GIMPLE_ASSIGN.      (line   41)
46812* gimple_assign_set_lhs:                 GIMPLE_ASSIGN.      (line   78)
46813* gimple_assign_set_rhs1:                GIMPLE_ASSIGN.      (line   81)
46814* gimple_assign_set_rhs2:                GIMPLE_ASSIGN.      (line   85)
46815* gimple_assign_set_rhs3:                GIMPLE_ASSIGN.      (line   89)
46816* gimple_bb:                             Manipulating GIMPLE statements.
46817                                                             (line   18)
46818* GIMPLE_BIND:                           GIMPLE_BIND.        (line    6)
46819* gimple_bind_add_seq:                   GIMPLE_BIND.        (line   36)
46820* gimple_bind_add_stmt:                  GIMPLE_BIND.        (line   32)
46821* gimple_bind_append_vars:               GIMPLE_BIND.        (line   19)
46822* gimple_bind_block:                     GIMPLE_BIND.        (line   40)
46823* gimple_bind_body:                      GIMPLE_BIND.        (line   23)
46824* gimple_bind_set_block:                 GIMPLE_BIND.        (line   45)
46825* gimple_bind_set_body:                  GIMPLE_BIND.        (line   28)
46826* gimple_bind_set_vars:                  GIMPLE_BIND.        (line   15)
46827* gimple_bind_vars:                      GIMPLE_BIND.        (line   12)
46828* gimple_block:                          Manipulating GIMPLE statements.
46829                                                             (line   21)
46830* gimple_build_asm:                      GIMPLE_ASM.         (line    8)
46831* gimple_build_asm_vec:                  GIMPLE_ASM.         (line   17)
46832* gimple_build_assign:                   GIMPLE_ASSIGN.      (line    7)
46833* gimple_build_assign_with_ops:          GIMPLE_ASSIGN.      (line   30)
46834* gimple_build_bind:                     GIMPLE_BIND.        (line    8)
46835* gimple_build_call:                     GIMPLE_CALL.        (line    8)
46836* gimple_build_call_from_tree:           GIMPLE_CALL.        (line   16)
46837* gimple_build_call_vec:                 GIMPLE_CALL.        (line   25)
46838* gimple_build_catch:                    GIMPLE_CATCH.       (line    8)
46839* gimple_build_cond:                     GIMPLE_COND.        (line    8)
46840* gimple_build_cond_from_tree:           GIMPLE_COND.        (line   16)
46841* gimple_build_debug_bind:               GIMPLE_DEBUG.       (line    8)
46842* gimple_build_eh_filter:                GIMPLE_EH_FILTER.   (line    8)
46843* gimple_build_goto:                     GIMPLE_LABEL.       (line   18)
46844* gimple_build_label:                    GIMPLE_LABEL.       (line    7)
46845* gimple_build_nop:                      GIMPLE_NOP.         (line    7)
46846* gimple_build_omp_atomic_load:          GIMPLE_OMP_ATOMIC_LOAD.
46847                                                             (line    8)
46848* gimple_build_omp_atomic_store:         GIMPLE_OMP_ATOMIC_STORE.
46849                                                             (line    7)
46850* gimple_build_omp_continue:             GIMPLE_OMP_CONTINUE.
46851                                                             (line    8)
46852* gimple_build_omp_critical:             GIMPLE_OMP_CRITICAL.
46853                                                             (line    8)
46854* gimple_build_omp_for:                  GIMPLE_OMP_FOR.     (line    9)
46855* gimple_build_omp_master:               GIMPLE_OMP_MASTER.  (line    7)
46856* gimple_build_omp_ordered:              GIMPLE_OMP_ORDERED. (line    7)
46857* gimple_build_omp_parallel:             GIMPLE_OMP_PARALLEL.
46858                                                             (line    8)
46859* gimple_build_omp_return:               GIMPLE_OMP_RETURN.  (line    7)
46860* gimple_build_omp_section:              GIMPLE_OMP_SECTION. (line    7)
46861* gimple_build_omp_sections:             GIMPLE_OMP_SECTIONS.
46862                                                             (line    8)
46863* gimple_build_omp_sections_switch:      GIMPLE_OMP_SECTIONS.
46864                                                             (line   14)
46865* gimple_build_omp_single:               GIMPLE_OMP_SINGLE.  (line    8)
46866* gimple_build_resx:                     GIMPLE_RESX.        (line    7)
46867* gimple_build_return:                   GIMPLE_RETURN.      (line    7)
46868* gimple_build_switch:                   GIMPLE_SWITCH.      (line    8)
46869* gimple_build_try:                      GIMPLE_TRY.         (line    8)
46870* gimple_build_wce:                      GIMPLE_WITH_CLEANUP_EXPR.
46871                                                             (line    7)
46872* GIMPLE_CALL:                           GIMPLE_CALL.        (line    6)
46873* gimple_call_arg:                       GIMPLE_CALL.        (line   66)
46874* gimple_call_arg_ptr:                   GIMPLE_CALL.        (line   71)
46875* gimple_call_cannot_inline_p:           GIMPLE_CALL.        (line   91)
46876* gimple_call_chain:                     GIMPLE_CALL.        (line   57)
46877* gimple_call_copy_skip_args:            GIMPLE_CALL.        (line   98)
46878* gimple_call_fn:                        GIMPLE_CALL.        (line   38)
46879* gimple_call_fndecl:                    GIMPLE_CALL.        (line   46)
46880* gimple_call_lhs:                       GIMPLE_CALL.        (line   29)
46881* gimple_call_lhs_ptr:                   GIMPLE_CALL.        (line   32)
46882* gimple_call_mark_uninlinable:          GIMPLE_CALL.        (line   88)
46883* gimple_call_noreturn_p:                GIMPLE_CALL.        (line   94)
46884* gimple_call_num_args:                  GIMPLE_CALL.        (line   63)
46885* gimple_call_return_type:               GIMPLE_CALL.        (line   54)
46886* gimple_call_set_arg:                   GIMPLE_CALL.        (line   76)
46887* gimple_call_set_chain:                 GIMPLE_CALL.        (line   60)
46888* gimple_call_set_fn:                    GIMPLE_CALL.        (line   42)
46889* gimple_call_set_fndecl:                GIMPLE_CALL.        (line   51)
46890* gimple_call_set_lhs:                   GIMPLE_CALL.        (line   35)
46891* gimple_call_set_tail:                  GIMPLE_CALL.        (line   80)
46892* gimple_call_tail_p:                    GIMPLE_CALL.        (line   85)
46893* GIMPLE_CATCH:                          GIMPLE_CATCH.       (line    6)
46894* gimple_catch_handler:                  GIMPLE_CATCH.       (line   20)
46895* gimple_catch_set_handler:              GIMPLE_CATCH.       (line   28)
46896* gimple_catch_set_types:                GIMPLE_CATCH.       (line   24)
46897* gimple_catch_types:                    GIMPLE_CATCH.       (line   13)
46898* gimple_catch_types_ptr:                GIMPLE_CATCH.       (line   16)
46899* gimple_code:                           Manipulating GIMPLE statements.
46900                                                             (line   15)
46901* GIMPLE_COND:                           GIMPLE_COND.        (line    6)
46902* gimple_cond_code:                      GIMPLE_COND.        (line   21)
46903* gimple_cond_false_label:               GIMPLE_COND.        (line   60)
46904* gimple_cond_lhs:                       GIMPLE_COND.        (line   30)
46905* gimple_cond_make_false:                GIMPLE_COND.        (line   64)
46906* gimple_cond_make_true:                 GIMPLE_COND.        (line   67)
46907* gimple_cond_rhs:                       GIMPLE_COND.        (line   38)
46908* gimple_cond_set_code:                  GIMPLE_COND.        (line   26)
46909* gimple_cond_set_false_label:           GIMPLE_COND.        (line   56)
46910* gimple_cond_set_lhs:                   GIMPLE_COND.        (line   34)
46911* gimple_cond_set_rhs:                   GIMPLE_COND.        (line   42)
46912* gimple_cond_set_true_label:            GIMPLE_COND.        (line   51)
46913* gimple_cond_true_label:                GIMPLE_COND.        (line   46)
46914* gimple_copy:                           Manipulating GIMPLE statements.
46915                                                             (line  147)
46916* GIMPLE_DEBUG:                          GIMPLE_DEBUG.       (line    6)
46917* GIMPLE_DEBUG_BIND:                     GIMPLE_DEBUG.       (line    6)
46918* gimple_debug_bind_get_value:           GIMPLE_DEBUG.       (line   48)
46919* gimple_debug_bind_get_value_ptr:       GIMPLE_DEBUG.       (line   53)
46920* gimple_debug_bind_get_var:             GIMPLE_DEBUG.       (line   45)
46921* gimple_debug_bind_has_value_p:         GIMPLE_DEBUG.       (line   70)
46922* gimple_debug_bind_p:                   Logical Operators.  (line  164)
46923* gimple_debug_bind_reset_value:         GIMPLE_DEBUG.       (line   66)
46924* gimple_debug_bind_set_value:           GIMPLE_DEBUG.       (line   62)
46925* gimple_debug_bind_set_var:             GIMPLE_DEBUG.       (line   58)
46926* gimple_def_ops:                        Manipulating GIMPLE statements.
46927                                                             (line   94)
46928* GIMPLE_EH_FILTER:                      GIMPLE_EH_FILTER.   (line    6)
46929* gimple_eh_filter_failure:              GIMPLE_EH_FILTER.   (line   19)
46930* gimple_eh_filter_must_not_throw:       GIMPLE_EH_FILTER.   (line   33)
46931* gimple_eh_filter_set_failure:          GIMPLE_EH_FILTER.   (line   29)
46932* gimple_eh_filter_set_must_not_throw:   GIMPLE_EH_FILTER.   (line   37)
46933* gimple_eh_filter_set_types:            GIMPLE_EH_FILTER.   (line   24)
46934* gimple_eh_filter_types:                GIMPLE_EH_FILTER.   (line   12)
46935* gimple_eh_filter_types_ptr:            GIMPLE_EH_FILTER.   (line   15)
46936* gimple_expr_code:                      Manipulating GIMPLE statements.
46937                                                             (line   31)
46938* gimple_expr_type:                      Manipulating GIMPLE statements.
46939                                                             (line   24)
46940* gimple_goto_dest:                      GIMPLE_LABEL.       (line   21)
46941* gimple_goto_set_dest:                  GIMPLE_LABEL.       (line   24)
46942* gimple_has_mem_ops:                    Manipulating GIMPLE statements.
46943                                                             (line   72)
46944* gimple_has_ops:                        Manipulating GIMPLE statements.
46945                                                             (line   69)
46946* gimple_has_volatile_ops:               Manipulating GIMPLE statements.
46947                                                             (line  134)
46948* GIMPLE_LABEL:                          GIMPLE_LABEL.       (line    6)
46949* gimple_label_label:                    GIMPLE_LABEL.       (line   11)
46950* gimple_label_set_label:                GIMPLE_LABEL.       (line   14)
46951* gimple_loaded_syms:                    Manipulating GIMPLE statements.
46952                                                             (line  122)
46953* gimple_locus:                          Manipulating GIMPLE statements.
46954                                                             (line   42)
46955* gimple_locus_empty_p:                  Manipulating GIMPLE statements.
46956                                                             (line   48)
46957* gimple_modified_p:                     Manipulating GIMPLE statements.
46958                                                             (line  130)
46959* gimple_no_warning_p:                   Manipulating GIMPLE statements.
46960                                                             (line   51)
46961* GIMPLE_NOP:                            GIMPLE_NOP.         (line    6)
46962* gimple_nop_p:                          GIMPLE_NOP.         (line   10)
46963* gimple_num_ops <1>:                    Manipulating GIMPLE statements.
46964                                                             (line   75)
46965* gimple_num_ops:                        Logical Operators.  (line   78)
46966* GIMPLE_OMP_ATOMIC_LOAD:                GIMPLE_OMP_ATOMIC_LOAD.
46967                                                             (line    6)
46968* gimple_omp_atomic_load_lhs:            GIMPLE_OMP_ATOMIC_LOAD.
46969                                                             (line   17)
46970* gimple_omp_atomic_load_rhs:            GIMPLE_OMP_ATOMIC_LOAD.
46971                                                             (line   24)
46972* gimple_omp_atomic_load_set_lhs:        GIMPLE_OMP_ATOMIC_LOAD.
46973                                                             (line   14)
46974* gimple_omp_atomic_load_set_rhs:        GIMPLE_OMP_ATOMIC_LOAD.
46975                                                             (line   21)
46976* GIMPLE_OMP_ATOMIC_STORE:               GIMPLE_OMP_ATOMIC_STORE.
46977                                                             (line    6)
46978* gimple_omp_atomic_store_set_val:       GIMPLE_OMP_ATOMIC_STORE.
46979                                                             (line   12)
46980* gimple_omp_atomic_store_val:           GIMPLE_OMP_ATOMIC_STORE.
46981                                                             (line   15)
46982* gimple_omp_body:                       GIMPLE_OMP_PARALLEL.
46983                                                             (line   24)
46984* GIMPLE_OMP_CONTINUE:                   GIMPLE_OMP_CONTINUE.
46985                                                             (line    6)
46986* gimple_omp_continue_control_def:       GIMPLE_OMP_CONTINUE.
46987                                                             (line   13)
46988* gimple_omp_continue_control_def_ptr:   GIMPLE_OMP_CONTINUE.
46989                                                             (line   17)
46990* gimple_omp_continue_control_use:       GIMPLE_OMP_CONTINUE.
46991                                                             (line   24)
46992* gimple_omp_continue_control_use_ptr:   GIMPLE_OMP_CONTINUE.
46993                                                             (line   28)
46994* gimple_omp_continue_set_control_def:   GIMPLE_OMP_CONTINUE.
46995                                                             (line   20)
46996* gimple_omp_continue_set_control_use:   GIMPLE_OMP_CONTINUE.
46997                                                             (line   31)
46998* GIMPLE_OMP_CRITICAL:                   GIMPLE_OMP_CRITICAL.
46999                                                             (line    6)
47000* gimple_omp_critical_name:              GIMPLE_OMP_CRITICAL.
47001                                                             (line   13)
47002* gimple_omp_critical_name_ptr:          GIMPLE_OMP_CRITICAL.
47003                                                             (line   16)
47004* gimple_omp_critical_set_name:          GIMPLE_OMP_CRITICAL.
47005                                                             (line   21)
47006* GIMPLE_OMP_FOR:                        GIMPLE_OMP_FOR.     (line    6)
47007* gimple_omp_for_clauses:                GIMPLE_OMP_FOR.     (line   20)
47008* gimple_omp_for_clauses_ptr:            GIMPLE_OMP_FOR.     (line   23)
47009* gimple_omp_for_cond:                   GIMPLE_OMP_FOR.     (line   83)
47010* gimple_omp_for_final:                  GIMPLE_OMP_FOR.     (line   51)
47011* gimple_omp_for_final_ptr:              GIMPLE_OMP_FOR.     (line   54)
47012* gimple_omp_for_incr:                   GIMPLE_OMP_FOR.     (line   61)
47013* gimple_omp_for_incr_ptr:               GIMPLE_OMP_FOR.     (line   64)
47014* gimple_omp_for_index:                  GIMPLE_OMP_FOR.     (line   31)
47015* gimple_omp_for_index_ptr:              GIMPLE_OMP_FOR.     (line   34)
47016* gimple_omp_for_initial:                GIMPLE_OMP_FOR.     (line   41)
47017* gimple_omp_for_initial_ptr:            GIMPLE_OMP_FOR.     (line   44)
47018* gimple_omp_for_pre_body:               GIMPLE_OMP_FOR.     (line   70)
47019* gimple_omp_for_set_clauses:            GIMPLE_OMP_FOR.     (line   27)
47020* gimple_omp_for_set_cond:               GIMPLE_OMP_FOR.     (line   80)
47021* gimple_omp_for_set_final:              GIMPLE_OMP_FOR.     (line   58)
47022* gimple_omp_for_set_incr:               GIMPLE_OMP_FOR.     (line   67)
47023* gimple_omp_for_set_index:              GIMPLE_OMP_FOR.     (line   38)
47024* gimple_omp_for_set_initial:            GIMPLE_OMP_FOR.     (line   48)
47025* gimple_omp_for_set_pre_body:           GIMPLE_OMP_FOR.     (line   75)
47026* GIMPLE_OMP_MASTER:                     GIMPLE_OMP_MASTER.  (line    6)
47027* GIMPLE_OMP_ORDERED:                    GIMPLE_OMP_ORDERED. (line    6)
47028* GIMPLE_OMP_PARALLEL:                   GIMPLE_OMP_PARALLEL.
47029                                                             (line    6)
47030* gimple_omp_parallel_child_fn:          GIMPLE_OMP_PARALLEL.
47031                                                             (line   42)
47032* gimple_omp_parallel_child_fn_ptr:      GIMPLE_OMP_PARALLEL.
47033                                                             (line   46)
47034* gimple_omp_parallel_clauses:           GIMPLE_OMP_PARALLEL.
47035                                                             (line   31)
47036* gimple_omp_parallel_clauses_ptr:       GIMPLE_OMP_PARALLEL.
47037                                                             (line   34)
47038* gimple_omp_parallel_combined_p:        GIMPLE_OMP_PARALLEL.
47039                                                             (line   16)
47040* gimple_omp_parallel_data_arg:          GIMPLE_OMP_PARALLEL.
47041                                                             (line   54)
47042* gimple_omp_parallel_data_arg_ptr:      GIMPLE_OMP_PARALLEL.
47043                                                             (line   58)
47044* gimple_omp_parallel_set_child_fn:      GIMPLE_OMP_PARALLEL.
47045                                                             (line   51)
47046* gimple_omp_parallel_set_clauses:       GIMPLE_OMP_PARALLEL.
47047                                                             (line   38)
47048* gimple_omp_parallel_set_combined_p:    GIMPLE_OMP_PARALLEL.
47049                                                             (line   20)
47050* gimple_omp_parallel_set_data_arg:      GIMPLE_OMP_PARALLEL.
47051                                                             (line   62)
47052* GIMPLE_OMP_RETURN:                     GIMPLE_OMP_RETURN.  (line    6)
47053* gimple_omp_return_nowait_p:            GIMPLE_OMP_RETURN.  (line   14)
47054* gimple_omp_return_set_nowait:          GIMPLE_OMP_RETURN.  (line   11)
47055* GIMPLE_OMP_SECTION:                    GIMPLE_OMP_SECTION. (line    6)
47056* gimple_omp_section_last_p:             GIMPLE_OMP_SECTION. (line   12)
47057* gimple_omp_section_set_last:           GIMPLE_OMP_SECTION. (line   16)
47058* GIMPLE_OMP_SECTIONS:                   GIMPLE_OMP_SECTIONS.
47059                                                             (line    6)
47060* gimple_omp_sections_clauses:           GIMPLE_OMP_SECTIONS.
47061                                                             (line   30)
47062* gimple_omp_sections_clauses_ptr:       GIMPLE_OMP_SECTIONS.
47063                                                             (line   33)
47064* gimple_omp_sections_control:           GIMPLE_OMP_SECTIONS.
47065                                                             (line   17)
47066* gimple_omp_sections_control_ptr:       GIMPLE_OMP_SECTIONS.
47067                                                             (line   21)
47068* gimple_omp_sections_set_clauses:       GIMPLE_OMP_SECTIONS.
47069                                                             (line   37)
47070* gimple_omp_sections_set_control:       GIMPLE_OMP_SECTIONS.
47071                                                             (line   26)
47072* gimple_omp_set_body:                   GIMPLE_OMP_PARALLEL.
47073                                                             (line   28)
47074* GIMPLE_OMP_SINGLE:                     GIMPLE_OMP_SINGLE.  (line    6)
47075* gimple_omp_single_clauses:             GIMPLE_OMP_SINGLE.  (line   14)
47076* gimple_omp_single_clauses_ptr:         GIMPLE_OMP_SINGLE.  (line   17)
47077* gimple_omp_single_set_clauses:         GIMPLE_OMP_SINGLE.  (line   21)
47078* gimple_op <1>:                         Manipulating GIMPLE statements.
47079                                                             (line   81)
47080* gimple_op:                             Logical Operators.  (line   81)
47081* gimple_op_ptr:                         Manipulating GIMPLE statements.
47082                                                             (line   84)
47083* gimple_ops <1>:                        Manipulating GIMPLE statements.
47084                                                             (line   78)
47085* gimple_ops:                            Logical Operators.  (line   84)
47086* GIMPLE_PHI:                            GIMPLE_PHI.         (line    6)
47087* gimple_phi_arg:                        GIMPLE_PHI.         (line   25)
47088* gimple_phi_capacity:                   GIMPLE_PHI.         (line    7)
47089* gimple_phi_num_args:                   GIMPLE_PHI.         (line   11)
47090* gimple_phi_result:                     GIMPLE_PHI.         (line   16)
47091* gimple_phi_result_ptr:                 GIMPLE_PHI.         (line   19)
47092* gimple_phi_set_arg:                    GIMPLE_PHI.         (line   30)
47093* gimple_phi_set_result:                 GIMPLE_PHI.         (line   22)
47094* gimple_plf:                            Manipulating GIMPLE statements.
47095                                                             (line   66)
47096* GIMPLE_RESX:                           GIMPLE_RESX.        (line    6)
47097* gimple_resx_region:                    GIMPLE_RESX.        (line   13)
47098* gimple_resx_set_region:                GIMPLE_RESX.        (line   16)
47099* GIMPLE_RETURN:                         GIMPLE_RETURN.      (line    6)
47100* gimple_return_retval:                  GIMPLE_RETURN.      (line   10)
47101* gimple_return_set_retval:              GIMPLE_RETURN.      (line   14)
47102* gimple_seq_add_seq:                    GIMPLE sequences.   (line   32)
47103* gimple_seq_add_stmt:                   GIMPLE sequences.   (line   26)
47104* gimple_seq_alloc:                      GIMPLE sequences.   (line   62)
47105* gimple_seq_copy:                       GIMPLE sequences.   (line   67)
47106* gimple_seq_deep_copy:                  GIMPLE sequences.   (line   37)
47107* gimple_seq_empty_p:                    GIMPLE sequences.   (line   70)
47108* gimple_seq_first:                      GIMPLE sequences.   (line   44)
47109* gimple_seq_init:                       GIMPLE sequences.   (line   59)
47110* gimple_seq_last:                       GIMPLE sequences.   (line   47)
47111* gimple_seq_reverse:                    GIMPLE sequences.   (line   40)
47112* gimple_seq_set_first:                  GIMPLE sequences.   (line   55)
47113* gimple_seq_set_last:                   GIMPLE sequences.   (line   51)
47114* gimple_seq_singleton_p:                GIMPLE sequences.   (line   79)
47115* gimple_set_block:                      Manipulating GIMPLE statements.
47116                                                             (line   39)
47117* gimple_set_def_ops:                    Manipulating GIMPLE statements.
47118                                                             (line   98)
47119* gimple_set_has_volatile_ops:           Manipulating GIMPLE statements.
47120                                                             (line  138)
47121* gimple_set_locus:                      Manipulating GIMPLE statements.
47122                                                             (line   45)
47123* gimple_set_op:                         Manipulating GIMPLE statements.
47124                                                             (line   87)
47125* gimple_set_plf:                        Manipulating GIMPLE statements.
47126                                                             (line   62)
47127* gimple_set_use_ops:                    Manipulating GIMPLE statements.
47128                                                             (line  105)
47129* gimple_set_vdef_ops:                   Manipulating GIMPLE statements.
47130                                                             (line  119)
47131* gimple_set_visited:                    Manipulating GIMPLE statements.
47132                                                             (line   55)
47133* gimple_set_vuse_ops:                   Manipulating GIMPLE statements.
47134                                                             (line  112)
47135* gimple_statement_base:                 Tuple representation.
47136                                                             (line   14)
47137* gimple_statement_with_ops:             Tuple representation.
47138                                                             (line   96)
47139* gimple_stored_syms:                    Manipulating GIMPLE statements.
47140                                                             (line  126)
47141* GIMPLE_SWITCH:                         GIMPLE_SWITCH.      (line    6)
47142* gimple_switch_default_label:           GIMPLE_SWITCH.      (line   39)
47143* gimple_switch_index:                   GIMPLE_SWITCH.      (line   24)
47144* gimple_switch_label:                   GIMPLE_SWITCH.      (line   30)
47145* gimple_switch_num_labels:              GIMPLE_SWITCH.      (line   15)
47146* gimple_switch_set_default_label:       GIMPLE_SWITCH.      (line   43)
47147* gimple_switch_set_index:               GIMPLE_SWITCH.      (line   27)
47148* gimple_switch_set_label:               GIMPLE_SWITCH.      (line   35)
47149* gimple_switch_set_num_labels:          GIMPLE_SWITCH.      (line   20)
47150* GIMPLE_TRY:                            GIMPLE_TRY.         (line    6)
47151* gimple_try_catch_is_cleanup:           GIMPLE_TRY.         (line   20)
47152* gimple_try_cleanup:                    GIMPLE_TRY.         (line   27)
47153* gimple_try_eval:                       GIMPLE_TRY.         (line   23)
47154* gimple_try_kind:                       GIMPLE_TRY.         (line   16)
47155* gimple_try_set_catch_is_cleanup:       GIMPLE_TRY.         (line   32)
47156* gimple_try_set_cleanup:                GIMPLE_TRY.         (line   41)
47157* gimple_try_set_eval:                   GIMPLE_TRY.         (line   36)
47158* gimple_use_ops:                        Manipulating GIMPLE statements.
47159                                                             (line  101)
47160* gimple_vdef_ops:                       Manipulating GIMPLE statements.
47161                                                             (line  115)
47162* gimple_visited_p:                      Manipulating GIMPLE statements.
47163                                                             (line   58)
47164* gimple_vuse_ops:                       Manipulating GIMPLE statements.
47165                                                             (line  108)
47166* gimple_wce_cleanup:                    GIMPLE_WITH_CLEANUP_EXPR.
47167                                                             (line   11)
47168* gimple_wce_cleanup_eh_only:            GIMPLE_WITH_CLEANUP_EXPR.
47169                                                             (line   18)
47170* gimple_wce_set_cleanup:                GIMPLE_WITH_CLEANUP_EXPR.
47171                                                             (line   15)
47172* gimple_wce_set_cleanup_eh_only:        GIMPLE_WITH_CLEANUP_EXPR.
47173                                                             (line   22)
47174* GIMPLE_WITH_CLEANUP_EXPR:              GIMPLE_WITH_CLEANUP_EXPR.
47175                                                             (line    6)
47176* gimplification <1>:                    Gimplification pass.
47177                                                             (line    6)
47178* gimplification:                        Parsing pass.       (line   14)
47179* gimplifier:                            Parsing pass.       (line   14)
47180* gimplify_assign:                       GIMPLE_ASSIGN.      (line   19)
47181* gimplify_expr:                         Gimplification pass.
47182                                                             (line   18)
47183* gimplify_function_tree:                Gimplification pass.
47184                                                             (line   18)
47185* GLOBAL_INIT_PRIORITY:                  Functions for C++.  (line  141)
47186* global_regs:                           Register Basics.    (line   59)
47187* GO_IF_LEGITIMATE_ADDRESS:              Addressing Modes.   (line   91)
47188* greater than:                          Comparisons.        (line   60)
47189* gsi_after_labels:                      Sequence iterators. (line   76)
47190* gsi_bb:                                Sequence iterators. (line   83)
47191* gsi_commit_edge_inserts <1>:           Maintaining the CFG.
47192                                                             (line  107)
47193* gsi_commit_edge_inserts:               Sequence iterators. (line  194)
47194* gsi_commit_one_edge_insert:            Sequence iterators. (line  190)
47195* gsi_end_p <1>:                         Maintaining the CFG.
47196                                                             (line   49)
47197* gsi_end_p:                             Sequence iterators. (line   60)
47198* gsi_for_stmt:                          Sequence iterators. (line  157)
47199* gsi_insert_after <1>:                  Maintaining the CFG.
47200                                                             (line   61)
47201* gsi_insert_after:                      Sequence iterators. (line  147)
47202* gsi_insert_before <1>:                 Maintaining the CFG.
47203                                                             (line   67)
47204* gsi_insert_before:                     Sequence iterators. (line  136)
47205* gsi_insert_on_edge <1>:                Maintaining the CFG.
47206                                                             (line  107)
47207* gsi_insert_on_edge:                    Sequence iterators. (line  174)
47208* gsi_insert_on_edge_immediate:          Sequence iterators. (line  185)
47209* gsi_insert_seq_after:                  Sequence iterators. (line  154)
47210* gsi_insert_seq_before:                 Sequence iterators. (line  143)
47211* gsi_insert_seq_on_edge:                Sequence iterators. (line  179)
47212* gsi_last <1>:                          Maintaining the CFG.
47213                                                             (line   45)
47214* gsi_last:                              Sequence iterators. (line   50)
47215* gsi_last_bb:                           Sequence iterators. (line   56)
47216* gsi_link_after:                        Sequence iterators. (line  115)
47217* gsi_link_before:                       Sequence iterators. (line  105)
47218* gsi_link_seq_after:                    Sequence iterators. (line  110)
47219* gsi_link_seq_before:                   Sequence iterators. (line   99)
47220* gsi_move_after:                        Sequence iterators. (line  161)
47221* gsi_move_before:                       Sequence iterators. (line  166)
47222* gsi_move_to_bb_end:                    Sequence iterators. (line  171)
47223* gsi_next <1>:                          Maintaining the CFG.
47224                                                             (line   53)
47225* gsi_next:                              Sequence iterators. (line   66)
47226* gsi_one_before_end_p:                  Sequence iterators. (line   63)
47227* gsi_prev <1>:                          Maintaining the CFG.
47228                                                             (line   57)
47229* gsi_prev:                              Sequence iterators. (line   69)
47230* gsi_remove <1>:                        Maintaining the CFG.
47231                                                             (line   73)
47232* gsi_remove:                            Sequence iterators. (line   90)
47233* gsi_replace:                           Sequence iterators. (line  130)
47234* gsi_seq:                               Sequence iterators. (line   86)
47235* gsi_split_seq_after:                   Sequence iterators. (line  120)
47236* gsi_split_seq_before:                  Sequence iterators. (line  125)
47237* gsi_start <1>:                         Maintaining the CFG.
47238                                                             (line   41)
47239* gsi_start:                             Sequence iterators. (line   40)
47240* gsi_start_bb:                          Sequence iterators. (line   46)
47241* gsi_stmt:                              Sequence iterators. (line   72)
47242* gsi_stmt_ptr:                          Sequence iterators. (line   80)
47243* gt:                                    Comparisons.        (line   60)
47244* gt and attributes:                     Expressions.        (line   85)
47245* GT_EXPR:                               Unary and Binary Expressions.
47246                                                             (line    6)
47247* gtu:                                   Comparisons.        (line   64)
47248* gtu and attributes:                    Expressions.        (line   85)
47249* GTY:                                   Type Information.   (line    6)
47250* H in constraint:                       Simple Constraints. (line   98)
47251* HAmode:                                Machine Modes.      (line  144)
47252* HANDLE_PRAGMA_PACK_WITH_EXPANSION:     Misc.               (line  436)
47253* HANDLER:                               Statements for C++. (line    6)
47254* HANDLER_BODY:                          Statements for C++. (line    6)
47255* HANDLER_PARMS:                         Statements for C++. (line    6)
47256* hard registers:                        Regs and Memory.    (line    9)
47257* HARD_FRAME_POINTER_IS_ARG_POINTER:     Frame Registers.    (line   58)
47258* HARD_FRAME_POINTER_IS_FRAME_POINTER:   Frame Registers.    (line   51)
47259* HARD_FRAME_POINTER_REGNUM:             Frame Registers.    (line   20)
47260* HARD_REGNO_CALL_PART_CLOBBERED:        Register Basics.    (line   53)
47261* HARD_REGNO_CALLER_SAVE_MODE:           Caller Saves.       (line   20)
47262* HARD_REGNO_MODE_OK:                    Values in Registers.
47263                                                             (line   58)
47264* HARD_REGNO_NREGS:                      Values in Registers.
47265                                                             (line   11)
47266* HARD_REGNO_NREGS_HAS_PADDING:          Values in Registers.
47267                                                             (line   25)
47268* HARD_REGNO_NREGS_WITH_PADDING:         Values in Registers.
47269                                                             (line   43)
47270* HARD_REGNO_RENAME_OK:                  Values in Registers.
47271                                                             (line  119)
47272* HAS_INIT_SECTION:                      Macros for Initialization.
47273                                                             (line   19)
47274* HAS_LONG_COND_BRANCH:                  Misc.               (line    9)
47275* HAS_LONG_UNCOND_BRANCH:                Misc.               (line   18)
47276* HAVE_DOS_BASED_FILE_SYSTEM:            Filesystem.         (line   11)
47277* HAVE_POST_DECREMENT:                   Addressing Modes.   (line   12)
47278* HAVE_POST_INCREMENT:                   Addressing Modes.   (line   11)
47279* HAVE_POST_MODIFY_DISP:                 Addressing Modes.   (line   18)
47280* HAVE_POST_MODIFY_REG:                  Addressing Modes.   (line   24)
47281* HAVE_PRE_DECREMENT:                    Addressing Modes.   (line   10)
47282* HAVE_PRE_INCREMENT:                    Addressing Modes.   (line    9)
47283* HAVE_PRE_MODIFY_DISP:                  Addressing Modes.   (line   17)
47284* HAVE_PRE_MODIFY_REG:                   Addressing Modes.   (line   23)
47285* HCmode:                                Machine Modes.      (line  197)
47286* HFmode:                                Machine Modes.      (line   58)
47287* high:                                  Constants.          (line  120)
47288* HImode:                                Machine Modes.      (line   29)
47289* HImode, in insn:                       Insns.              (line  278)
47290* HONOR_REG_ALLOC_ORDER:                 Allocation Order.   (line   37)
47291* host configuration:                    Host Config.        (line    6)
47292* host functions:                        Host Common.        (line    6)
47293* host hooks:                            Host Common.        (line    6)
47294* host makefile fragment:                Host Fragment.      (line    6)
47295* HOST_BIT_BUCKET:                       Filesystem.         (line   51)
47296* HOST_EXECUTABLE_SUFFIX:                Filesystem.         (line   45)
47297* HOST_HOOKS_EXTRA_SIGNALS:              Host Common.        (line   12)
47298* HOST_HOOKS_GT_PCH_ALLOC_GRANULARITY:   Host Common.        (line   45)
47299* HOST_HOOKS_GT_PCH_GET_ADDRESS:         Host Common.        (line   17)
47300* HOST_HOOKS_GT_PCH_USE_ADDRESS:         Host Common.        (line   26)
47301* HOST_LACKS_INODE_NUMBERS:              Filesystem.         (line   89)
47302* HOST_LONG_FORMAT:                      Host Misc.          (line   45)
47303* HOST_LONG_LONG_FORMAT:                 Host Misc.          (line   41)
47304* HOST_OBJECT_SUFFIX:                    Filesystem.         (line   40)
47305* HOST_PTR_PRINTF:                       Host Misc.          (line   49)
47306* HOT_TEXT_SECTION_NAME:                 Sections.           (line   43)
47307* HQmode:                                Machine Modes.      (line  107)
47308* I in constraint:                       Simple Constraints. (line   81)
47309* i in constraint:                       Simple Constraints. (line   70)
47310* identifier:                            Identifiers.        (line    6)
47311* IDENTIFIER_LENGTH:                     Identifiers.        (line   22)
47312* IDENTIFIER_NODE:                       Identifiers.        (line    6)
47313* IDENTIFIER_OPNAME_P:                   Identifiers.        (line   27)
47314* IDENTIFIER_POINTER:                    Identifiers.        (line   17)
47315* IDENTIFIER_TYPENAME_P:                 Identifiers.        (line   33)
47316* IEEE 754-2008:                         Decimal float library routines.
47317                                                             (line    6)
47318* IF_COND:                               Statements for C++. (line    6)
47319* if_marked:                             GTY Options.        (line  156)
47320* IF_STMT:                               Statements for C++. (line    6)
47321* if_then_else:                          Comparisons.        (line   80)
47322* if_then_else and attributes:           Expressions.        (line   32)
47323* if_then_else usage:                    Side Effects.       (line   56)
47324* IFCVT_MACHDEP_INIT:                    Misc.               (line  560)
47325* IFCVT_MODIFY_CANCEL:                   Misc.               (line  554)
47326* IFCVT_MODIFY_FINAL:                    Misc.               (line  548)
47327* IFCVT_MODIFY_INSN:                     Misc.               (line  542)
47328* IFCVT_MODIFY_MULTIPLE_TESTS:           Misc.               (line  535)
47329* IFCVT_MODIFY_TESTS:                    Misc.               (line  524)
47330* IMAGPART_EXPR:                         Unary and Binary Expressions.
47331                                                             (line    6)
47332* Immediate Uses:                        SSA Operands.       (line  274)
47333* immediate_operand:                     Machine-Independent Predicates.
47334                                                             (line   11)
47335* IMMEDIATE_PREFIX:                      Instruction Output. (line  155)
47336* in_struct:                             Flags.              (line  245)
47337* in_struct, in code_label and note:     Flags.              (line   59)
47338* in_struct, in insn and jump_insn and call_insn: Flags.     (line   49)
47339* in_struct, in insn, jump_insn and call_insn: Flags.        (line  148)
47340* in_struct, in subreg:                  Flags.              (line  187)
47341* include:                               Including Patterns. (line    6)
47342* INCLUDE_DEFAULTS:                      Driver.             (line  328)
47343* inclusive-or, bitwise:                 Arithmetic.         (line  163)
47344* INCOMING_FRAME_SP_OFFSET:              Frame Layout.       (line  183)
47345* INCOMING_REG_PARM_STACK_SPACE:         Stack Arguments.    (line   74)
47346* INCOMING_REGNO:                        Register Basics.    (line   88)
47347* INCOMING_RETURN_ADDR_RTX:              Frame Layout.       (line  139)
47348* INCOMING_STACK_BOUNDARY:               Storage Layout.     (line  161)
47349* INDEX_REG_CLASS:                       Register Classes.   (line  143)
47350* indirect_jump instruction pattern:     Standard Names.     (line 1225)
47351* indirect_operand:                      Machine-Independent Predicates.
47352                                                             (line   71)
47353* INDIRECT_REF:                          Storage References. (line    6)
47354* INIT_ARRAY_SECTION_ASM_OP:             Sections.           (line  107)
47355* INIT_CUMULATIVE_ARGS:                  Register Arguments. (line  150)
47356* INIT_CUMULATIVE_INCOMING_ARGS:         Register Arguments. (line  177)
47357* INIT_CUMULATIVE_LIBCALL_ARGS:          Register Arguments. (line  171)
47358* INIT_ENVIRONMENT:                      Driver.             (line  306)
47359* INIT_EXPANDERS:                        Per-Function Data.  (line   39)
47360* INIT_EXPR:                             Unary and Binary Expressions.
47361                                                             (line    6)
47362* init_machine_status:                   Per-Function Data.  (line   45)
47363* init_one_libfunc:                      Library Calls.      (line   15)
47364* INIT_SECTION_ASM_OP <1>:               Macros for Initialization.
47365                                                             (line   10)
47366* INIT_SECTION_ASM_OP:                   Sections.           (line   91)
47367* INITIAL_ELIMINATION_OFFSET:            Elimination.        (line   85)
47368* INITIAL_FRAME_ADDRESS_RTX:             Frame Layout.       (line   83)
47369* INITIAL_FRAME_POINTER_OFFSET:          Elimination.        (line   35)
47370* initialization routines:               Initialization.     (line    6)
47371* inlining:                              Target Attributes.  (line   95)
47372* insert_insn_on_edge:                   Maintaining the CFG.
47373                                                             (line  107)
47374* insn:                                  Insns.              (line   63)
47375* insn and /f:                           Flags.              (line  107)
47376* insn and /j:                           Flags.              (line  157)
47377* insn and /s:                           Flags.              (line   49)
47378* insn and /u:                           Flags.              (line   39)
47379* insn and /v:                           Flags.              (line   44)
47380* insn attributes:                       Insn Attributes.    (line    6)
47381* insn canonicalization:                 Insn Canonicalizations.
47382                                                             (line    6)
47383* insn includes:                         Including Patterns. (line    6)
47384* insn lengths, computing:               Insn Lengths.       (line    6)
47385* insn notes, notes:                     Basic Blocks.       (line   52)
47386* insn splitting:                        Insn Splitting.     (line    6)
47387* insn-attr.h:                           Defining Attributes.
47388                                                             (line   32)
47389* INSN_ANNULLED_BRANCH_P:                Flags.              (line   39)
47390* INSN_CODE:                             Insns.              (line  305)
47391* INSN_DELETED_P:                        Flags.              (line   44)
47392* INSN_FROM_TARGET_P:                    Flags.              (line   49)
47393* insn_list:                             Insns.              (line  552)
47394* INSN_REFERENCES_ARE_DELAYED:           Misc.               (line  463)
47395* INSN_SETS_ARE_DELAYED:                 Misc.               (line  452)
47396* INSN_UID:                              Insns.              (line   23)
47397* INSN_VAR_LOCATION:                     Insns.              (line  245)
47398* insns:                                 Insns.              (line    6)
47399* insns, generating:                     RTL Template.       (line    6)
47400* insns, recognizing:                    RTL Template.       (line    6)
47401* instruction attributes:                Insn Attributes.    (line    6)
47402* instruction latency time:              Processor pipeline description.
47403                                                             (line    6)
47404* instruction patterns:                  Patterns.           (line    6)
47405* instruction splitting:                 Insn Splitting.     (line    6)
47406* insv instruction pattern:              Standard Names.     (line 1023)
47407* insvM instruction pattern:             Standard Names.     (line  975)
47408* insvmisalignM instruction pattern:     Standard Names.     (line  985)
47409* int iterators in .md files:            Int Iterators.      (line    6)
47410* INT16_TYPE:                            Type Layout.        (line  254)
47411* INT32_TYPE:                            Type Layout.        (line  255)
47412* INT64_TYPE:                            Type Layout.        (line  256)
47413* INT8_TYPE:                             Type Layout.        (line  253)
47414* INT_FAST16_TYPE:                       Type Layout.        (line  270)
47415* INT_FAST32_TYPE:                       Type Layout.        (line  271)
47416* INT_FAST64_TYPE:                       Type Layout.        (line  272)
47417* INT_FAST8_TYPE:                        Type Layout.        (line  269)
47418* INT_LEAST16_TYPE:                      Type Layout.        (line  262)
47419* INT_LEAST32_TYPE:                      Type Layout.        (line  263)
47420* INT_LEAST64_TYPE:                      Type Layout.        (line  264)
47421* INT_LEAST8_TYPE:                       Type Layout.        (line  261)
47422* INT_TYPE_SIZE:                         Type Layout.        (line   12)
47423* INTEGER_CST:                           Constant expressions.
47424                                                             (line    6)
47425* INTEGER_TYPE:                          Types.              (line    6)
47426* Interdependence of Patterns:           Dependent Patterns. (line    6)
47427* interfacing to GCC output:             Interface.          (line    6)
47428* interlock delays:                      Processor pipeline description.
47429                                                             (line    6)
47430* intermediate representation lowering:  Parsing pass.       (line   14)
47431* INTMAX_TYPE:                           Type Layout.        (line  230)
47432* INTPTR_TYPE:                           Type Layout.        (line  277)
47433* introduction:                          Top.                (line    6)
47434* INVOKE__main:                          Macros for Initialization.
47435                                                             (line   51)
47436* ior:                                   Arithmetic.         (line  163)
47437* ior and attributes:                    Expressions.        (line   50)
47438* ior, canonicalization of:              Insn Canonicalizations.
47439                                                             (line   52)
47440* iorM3 instruction pattern:             Standard Names.     (line  269)
47441* IRA_HARD_REGNO_ADD_COST_MULTIPLIER:    Allocation Order.   (line   45)
47442* IS_ASM_LOGICAL_LINE_SEPARATOR:         Data Output.        (line  121)
47443* is_gimple_addressable:                 Logical Operators.  (line  115)
47444* is_gimple_asm_val:                     Logical Operators.  (line  119)
47445* is_gimple_assign:                      Logical Operators.  (line  151)
47446* is_gimple_call:                        Logical Operators.  (line  154)
47447* is_gimple_call_addr:                   Logical Operators.  (line  122)
47448* is_gimple_constant:                    Logical Operators.  (line  130)
47449* is_gimple_debug:                       Logical Operators.  (line  157)
47450* is_gimple_ip_invariant:                Logical Operators.  (line  139)
47451* is_gimple_ip_invariant_address:        Logical Operators.  (line  144)
47452* is_gimple_mem_ref_addr:                Logical Operators.  (line  126)
47453* is_gimple_min_invariant:               Logical Operators.  (line  133)
47454* is_gimple_omp:                         GIMPLE_OMP_PARALLEL.
47455                                                             (line   65)
47456* is_gimple_val:                         Logical Operators.  (line  109)
47457* iterators in .md files:                Iterators.          (line    6)
47458* IV analysis on GIMPLE:                 Scalar evolutions.  (line    6)
47459* IV analysis on RTL:                    loop-iv.            (line    6)
47460* JMP_BUF_SIZE:                          Exception Region Output.
47461                                                             (line   84)
47462* jump:                                  Flags.              (line  286)
47463* jump instruction pattern:              Standard Names.     (line 1102)
47464* jump instruction patterns:             Jump Patterns.      (line    6)
47465* jump instructions and set:             Side Effects.       (line   56)
47466* jump, in call_insn:                    Flags.              (line  161)
47467* jump, in insn:                         Flags.              (line  157)
47468* jump, in mem:                          Flags.              (line   70)
47469* JUMP_ALIGN:                            Alignment Output.   (line    9)
47470* jump_insn:                             Insns.              (line   73)
47471* jump_insn and /f:                      Flags.              (line  107)
47472* jump_insn and /s:                      Flags.              (line   49)
47473* jump_insn and /u:                      Flags.              (line   39)
47474* jump_insn and /v:                      Flags.              (line   44)
47475* JUMP_LABEL:                            Insns.              (line   80)
47476* JUMP_TABLES_IN_TEXT_SECTION:           Sections.           (line  151)
47477* Jumps:                                 Jumps.              (line    6)
47478* LABEL_ALIGN:                           Alignment Output.   (line   58)
47479* LABEL_ALIGN_AFTER_BARRIER:             Alignment Output.   (line   27)
47480* LABEL_ALT_ENTRY_P:                     Insns.              (line  146)
47481* LABEL_ALTERNATE_NAME:                  Edges.              (line  181)
47482* LABEL_DECL:                            Declarations.       (line    6)
47483* LABEL_KIND:                            Insns.              (line  146)
47484* LABEL_NUSES:                           Insns.              (line  142)
47485* LABEL_PRESERVE_P:                      Flags.              (line   59)
47486* label_ref:                             Constants.          (line   97)
47487* label_ref and /v:                      Flags.              (line   65)
47488* label_ref, RTL sharing:                Sharing.            (line   35)
47489* LABEL_REF_NONLOCAL_P:                  Flags.              (line   65)
47490* lang_hooks.gimplify_expr:              Gimplification pass.
47491                                                             (line   18)
47492* lang_hooks.parse_file:                 Parsing pass.       (line    6)
47493* language-dependent trees:              Language-dependent trees.
47494                                                             (line    6)
47495* language-independent intermediate representation: Parsing pass.
47496                                                             (line   14)
47497* large return values:                   Aggregate Return.   (line    6)
47498* LARGEST_EXPONENT_IS_NORMAL:            Storage Layout.     (line  486)
47499* LAST_STACK_REG:                        Stack Registers.    (line   31)
47500* LAST_VIRTUAL_REGISTER:                 Regs and Memory.    (line   51)
47501* lceilMN2:                              Standard Names.     (line  693)
47502* LCSSA:                                 LCSSA.              (line    6)
47503* LD_FINI_SWITCH:                        Macros for Initialization.
47504                                                             (line   29)
47505* LD_INIT_SWITCH:                        Macros for Initialization.
47506                                                             (line   25)
47507* LDD_SUFFIX:                            Macros for Initialization.
47508                                                             (line  122)
47509* le:                                    Comparisons.        (line   76)
47510* le and attributes:                     Expressions.        (line   85)
47511* LE_EXPR:                               Unary and Binary Expressions.
47512                                                             (line    6)
47513* leaf functions:                        Leaf Functions.     (line    6)
47514* leaf_function_p:                       Standard Names.     (line 1187)
47515* LEAF_REG_REMAP:                        Leaf Functions.     (line   39)
47516* LEAF_REGISTERS:                        Leaf Functions.     (line   25)
47517* left rotate:                           Arithmetic.         (line  195)
47518* left shift:                            Arithmetic.         (line  173)
47519* LEGITIMATE_PIC_OPERAND_P:              PIC.                (line   32)
47520* LEGITIMIZE_RELOAD_ADDRESS:             Addressing Modes.   (line  153)
47521* length:                                GTY Options.        (line   50)
47522* less than:                             Comparisons.        (line   68)
47523* less than or equal:                    Comparisons.        (line   76)
47524* leu:                                   Comparisons.        (line   76)
47525* leu and attributes:                    Expressions.        (line   85)
47526* lfloorMN2:                             Standard Names.     (line  688)
47527* LIB2FUNCS_EXTRA:                       Target Fragment.    (line   11)
47528* LIB_SPEC:                              Driver.             (line  108)
47529* LIBCALL_VALUE:                         Scalar Return.      (line   56)
47530* libgcc.a:                              Library Calls.      (line    6)
47531* LIBGCC2_CFLAGS:                        Target Fragment.    (line    8)
47532* LIBGCC2_GNU_PREFIX:                    Type Layout.        (line  128)
47533* LIBGCC2_HAS_DF_MODE:                   Type Layout.        (line  109)
47534* LIBGCC2_HAS_TF_MODE:                   Type Layout.        (line  122)
47535* LIBGCC2_HAS_XF_MODE:                   Type Layout.        (line  116)
47536* LIBGCC2_LONG_DOUBLE_TYPE_SIZE:         Type Layout.        (line  103)
47537* LIBGCC2_UNWIND_ATTRIBUTE:              Misc.               (line  963)
47538* LIBGCC_SPEC:                           Driver.             (line  116)
47539* library subroutine names:              Library Calls.      (line    6)
47540* LIBRARY_PATH_ENV:                      Misc.               (line  503)
47541* LIMIT_RELOAD_CLASS:                    Register Classes.   (line  300)
47542* Linear loop transformations framework: Lambda.             (line    6)
47543* LINK_COMMAND_SPEC:                     Driver.             (line  237)
47544* LINK_EH_SPEC:                          Driver.             (line  143)
47545* LINK_GCC_C_SEQUENCE_SPEC:              Driver.             (line  233)
47546* LINK_LIBGCC_SPECIAL_1:                 Driver.             (line  228)
47547* LINK_SPEC:                             Driver.             (line  101)
47548* list:                                  Containers.         (line    6)
47549* Liveness representation:               Liveness information.
47550                                                             (line    6)
47551* lo_sum:                                Arithmetic.         (line   24)
47552* load address instruction:              Simple Constraints. (line  164)
47553* LOAD_EXTEND_OP:                        Misc.               (line   60)
47554* load_multiple instruction pattern:     Standard Names.     (line  137)
47555* Local Register Allocator (LRA):        RTL passes.         (line  200)
47556* LOCAL_ALIGNMENT:                       Storage Layout.     (line  250)
47557* LOCAL_CLASS_P:                         Classes.            (line   73)
47558* LOCAL_DECL_ALIGNMENT:                  Storage Layout.     (line  287)
47559* LOCAL_INCLUDE_DIR:                     Driver.             (line  313)
47560* LOCAL_LABEL_PREFIX:                    Instruction Output. (line  153)
47561* LOCAL_REGNO:                           Register Basics.    (line  102)
47562* LOG_LINKS:                             Insns.              (line  324)
47563* Logical Operators:                     Logical Operators.  (line    6)
47564* logical-and, bitwise:                  Arithmetic.         (line  158)
47565* LOGICAL_OP_NON_SHORT_CIRCUIT:          Costs.              (line  265)
47566* logM2 instruction pattern:             Standard Names.     (line  601)
47567* LONG_ACCUM_TYPE_SIZE:                  Type Layout.        (line   93)
47568* LONG_DOUBLE_TYPE_SIZE:                 Type Layout.        (line   58)
47569* LONG_FRACT_TYPE_SIZE:                  Type Layout.        (line   73)
47570* LONG_LONG_ACCUM_TYPE_SIZE:             Type Layout.        (line   98)
47571* LONG_LONG_FRACT_TYPE_SIZE:             Type Layout.        (line   78)
47572* LONG_LONG_TYPE_SIZE:                   Type Layout.        (line   33)
47573* LONG_TYPE_SIZE:                        Type Layout.        (line   22)
47574* longjmp and automatic variables:       Interface.          (line   52)
47575* Loop analysis:                         Loop representation.
47576                                                             (line    6)
47577* Loop manipulation:                     Loop manipulation.  (line    6)
47578* Loop querying:                         Loop querying.      (line    6)
47579* Loop representation:                   Loop representation.
47580                                                             (line    6)
47581* Loop-closed SSA form:                  LCSSA.              (line    6)
47582* LOOP_ALIGN:                            Alignment Output.   (line   41)
47583* LOOP_EXPR:                             Unary and Binary Expressions.
47584                                                             (line    6)
47585* looping instruction patterns:          Looping Patterns.   (line    6)
47586* lowering, language-dependent intermediate representation: Parsing pass.
47587                                                             (line   14)
47588* lrintMN2:                              Standard Names.     (line  678)
47589* lroundMN2:                             Standard Names.     (line  683)
47590* LSHIFT_EXPR:                           Unary and Binary Expressions.
47591                                                             (line    6)
47592* lshiftrt:                              Arithmetic.         (line  190)
47593* lshiftrt and attributes:               Expressions.        (line   85)
47594* lshrM3 instruction pattern:            Standard Names.     (line  520)
47595* lt:                                    Comparisons.        (line   68)
47596* lt and attributes:                     Expressions.        (line   85)
47597* LT_EXPR:                               Unary and Binary Expressions.
47598                                                             (line    6)
47599* LTGT_EXPR:                             Unary and Binary Expressions.
47600                                                             (line    6)
47601* lto:                                   LTO.                (line    6)
47602* ltrans:                                LTO.                (line    6)
47603* ltu:                                   Comparisons.        (line   68)
47604* m in constraint:                       Simple Constraints. (line   17)
47605* machine attributes:                    Target Attributes.  (line    6)
47606* machine description macros:            Target Macros.      (line    6)
47607* machine descriptions:                  Machine Desc.       (line    6)
47608* machine mode conversions:              Conversions.        (line    6)
47609* machine modes:                         Machine Modes.      (line    6)
47610* machine specific constraints:          Machine Constraints.
47611                                                             (line    6)
47612* machine-independent predicates:        Machine-Independent Predicates.
47613                                                             (line    6)
47614* macros, target description:            Target Macros.      (line    6)
47615* maddMN4 instruction pattern:           Standard Names.     (line  443)
47616* MAKE_DECL_ONE_ONLY:                    Label Output.       (line  250)
47617* make_safe_from:                        Expander Definitions.
47618                                                             (line  151)
47619* makefile fragment:                     Fragments.          (line    6)
47620* makefile targets:                      Makefile.           (line    6)
47621* MALLOC_ABI_ALIGNMENT:                  Storage Layout.     (line  175)
47622* Manipulating GIMPLE statements:        Manipulating GIMPLE statements.
47623                                                             (line    6)
47624* mark_hook:                             GTY Options.        (line  171)
47625* marking roots:                         GGC Roots.          (line    6)
47626* MASK_RETURN_ADDR:                      Exception Region Output.
47627                                                             (line   35)
47628* match_dup <1>:                         define_peephole2.   (line   28)
47629* match_dup:                             RTL Template.       (line   73)
47630* match_dup and attributes:              Insn Lengths.       (line   16)
47631* match_op_dup:                          RTL Template.       (line  163)
47632* match_operand:                         RTL Template.       (line   16)
47633* match_operand and attributes:          Expressions.        (line   55)
47634* match_operator:                        RTL Template.       (line   95)
47635* match_par_dup:                         RTL Template.       (line  219)
47636* match_parallel:                        RTL Template.       (line  172)
47637* match_scratch <1>:                     define_peephole2.   (line   28)
47638* match_scratch:                         RTL Template.       (line   58)
47639* match_test and attributes:             Expressions.        (line   64)
47640* matching constraint:                   Simple Constraints. (line  142)
47641* matching operands:                     Output Template.    (line   49)
47642* math library:                          Soft float library routines.
47643                                                             (line    6)
47644* math, in RTL:                          Arithmetic.         (line    6)
47645* MATH_LIBRARY:                          Misc.               (line  496)
47646* matherr:                               Library Calls.      (line   52)
47647* MAX_BITS_PER_WORD:                     Storage Layout.     (line   60)
47648* MAX_CONDITIONAL_EXECUTE:               Misc.               (line  518)
47649* MAX_FIXED_MODE_SIZE:                   Storage Layout.     (line  433)
47650* MAX_MOVE_MAX:                          Misc.               (line  106)
47651* MAX_OFILE_ALIGNMENT:                   Storage Layout.     (line  212)
47652* MAX_REGS_PER_ADDRESS:                  Addressing Modes.   (line   43)
47653* MAX_STACK_ALIGNMENT:                   Storage Layout.     (line  205)
47654* maxM3 instruction pattern:             Standard Names.     (line  304)
47655* may_trap_p, tree_could_trap_p:         Edges.              (line  115)
47656* maybe_undef:                           GTY Options.        (line  179)
47657* mcount:                                Profiling.          (line   12)
47658* MD_CAN_REDIRECT_BRANCH:                Misc.               (line  678)
47659* MD_EXEC_PREFIX:                        Driver.             (line  268)
47660* MD_FALLBACK_FRAME_STATE_FOR:           Exception Handling. (line   94)
47661* MD_HANDLE_UNWABI:                      Exception Handling. (line  114)
47662* MD_STARTFILE_PREFIX:                   Driver.             (line  296)
47663* MD_STARTFILE_PREFIX_1:                 Driver.             (line  301)
47664* mem:                                   Regs and Memory.    (line  374)
47665* mem and /c:                            Flags.              (line   81)
47666* mem and /f:                            Flags.              (line   85)
47667* mem and /j:                            Flags.              (line   70)
47668* mem and /u:                            Flags.              (line  134)
47669* mem and /v:                            Flags.              (line   76)
47670* mem, RTL sharing:                      Sharing.            (line   40)
47671* MEM_ADDR_SPACE:                        Special Accessors.  (line   49)
47672* MEM_ALIAS_SET:                         Special Accessors.  (line    9)
47673* MEM_ALIGN:                             Special Accessors.  (line   46)
47674* MEM_EXPR:                              Special Accessors.  (line   20)
47675* MEM_KEEP_ALIAS_SET_P:                  Flags.              (line   70)
47676* MEM_NOTRAP_P:                          Flags.              (line   81)
47677* MEM_OFFSET:                            Special Accessors.  (line   32)
47678* MEM_OFFSET_KNOWN_P:                    Special Accessors.  (line   28)
47679* MEM_POINTER:                           Flags.              (line   85)
47680* MEM_READONLY_P:                        Flags.              (line  134)
47681* MEM_REF:                               Storage References. (line    6)
47682* mem_signal_fenceMODE instruction pattern: Standard Names.  (line 1844)
47683* MEM_SIZE:                              Special Accessors.  (line   40)
47684* MEM_SIZE_KNOWN_P:                      Special Accessors.  (line   36)
47685* mem_thread_fenceMODE instruction pattern: Standard Names.  (line 1836)
47686* MEM_VOLATILE_P:                        Flags.              (line   76)
47687* memory model:                          Memory model.       (line    6)
47688* memory reference, nonoffsettable:      Simple Constraints. (line  256)
47689* memory references in constraints:      Simple Constraints. (line   17)
47690* memory_barrier instruction pattern:    Standard Names.     (line 1585)
47691* MEMORY_MOVE_COST:                      Costs.              (line   54)
47692* memory_operand:                        Machine-Independent Predicates.
47693                                                             (line   58)
47694* METHOD_TYPE:                           Types.              (line    6)
47695* MIN_UNITS_PER_WORD:                    Storage Layout.     (line   70)
47696* MINIMUM_ALIGNMENT:                     Storage Layout.     (line  300)
47697* MINIMUM_ATOMIC_ALIGNMENT:              Storage Layout.     (line  183)
47698* minM3 instruction pattern:             Standard Names.     (line  304)
47699* minus:                                 Arithmetic.         (line   36)
47700* minus and attributes:                  Expressions.        (line   85)
47701* minus, canonicalization of:            Insn Canonicalizations.
47702                                                             (line   27)
47703* MINUS_EXPR:                            Unary and Binary Expressions.
47704                                                             (line    6)
47705* MIPS coprocessor-definition macros:    MIPS Coprocessors.  (line    6)
47706* mod:                                   Arithmetic.         (line  136)
47707* mod and attributes:                    Expressions.        (line   85)
47708* mode classes:                          Machine Modes.      (line  219)
47709* mode iterators in .md files:           Mode Iterators.     (line    6)
47710* mode switching:                        Mode Switching.     (line    6)
47711* MODE_ACCUM:                            Machine Modes.      (line  249)
47712* MODE_AFTER:                            Mode Switching.     (line   49)
47713* MODE_BASE_REG_CLASS:                   Register Classes.   (line  119)
47714* MODE_BASE_REG_REG_CLASS:               Register Classes.   (line  125)
47715* MODE_CC <1>:                           MODE_CC Condition Codes.
47716                                                             (line    6)
47717* MODE_CC:                               Machine Modes.      (line  268)
47718* MODE_CODE_BASE_REG_CLASS:              Register Classes.   (line  133)
47719* MODE_COMPLEX_FLOAT:                    Machine Modes.      (line  260)
47720* MODE_COMPLEX_INT:                      Machine Modes.      (line  257)
47721* MODE_DECIMAL_FLOAT:                    Machine Modes.      (line  237)
47722* MODE_ENTRY:                            Mode Switching.     (line   55)
47723* MODE_EXIT:                             Mode Switching.     (line   61)
47724* MODE_FLOAT:                            Machine Modes.      (line  233)
47725* MODE_FRACT:                            Machine Modes.      (line  241)
47726* MODE_FUNCTION:                         Machine Modes.      (line  264)
47727* MODE_INT:                              Machine Modes.      (line  225)
47728* MODE_NEEDED:                           Mode Switching.     (line   42)
47729* MODE_PARTIAL_INT:                      Machine Modes.      (line  229)
47730* MODE_PRIORITY_TO_MODE:                 Mode Switching.     (line   67)
47731* MODE_RANDOM:                           Machine Modes.      (line  273)
47732* MODE_UACCUM:                           Machine Modes.      (line  253)
47733* MODE_UFRACT:                           Machine Modes.      (line  245)
47734* MODES_TIEABLE_P:                       Values in Registers.
47735                                                             (line  129)
47736* modifiers in constraints:              Modifiers.          (line    6)
47737* MODIFY_EXPR:                           Unary and Binary Expressions.
47738                                                             (line    6)
47739* MODIFY_JNI_METHOD_CALL:                Misc.               (line  763)
47740* modM3 instruction pattern:             Standard Names.     (line  269)
47741* modulo scheduling:                     RTL passes.         (line  132)
47742* MOVE_BY_PIECES_P:                      Costs.              (line  165)
47743* MOVE_MAX:                              Misc.               (line  101)
47744* MOVE_MAX_PIECES:                       Costs.              (line  171)
47745* MOVE_RATIO:                            Costs.              (line  149)
47746* movM instruction pattern:              Standard Names.     (line   11)
47747* movmemM instruction pattern:           Standard Names.     (line  750)
47748* movmisalignM instruction pattern:      Standard Names.     (line  126)
47749* movMODEcc instruction pattern:         Standard Names.     (line 1037)
47750* movstr instruction pattern:            Standard Names.     (line  785)
47751* movstrictM instruction pattern:        Standard Names.     (line  120)
47752* msubMN4 instruction pattern:           Standard Names.     (line  466)
47753* mulhisi3 instruction pattern:          Standard Names.     (line  419)
47754* mulM3 instruction pattern:             Standard Names.     (line  269)
47755* mulqihi3 instruction pattern:          Standard Names.     (line  423)
47756* mulsidi3 instruction pattern:          Standard Names.     (line  423)
47757* mult:                                  Arithmetic.         (line   92)
47758* mult and attributes:                   Expressions.        (line   85)
47759* mult, canonicalization of:             Insn Canonicalizations.
47760                                                             (line   27)
47761* MULT_EXPR:                             Unary and Binary Expressions.
47762                                                             (line    6)
47763* MULT_HIGHPART_EXPR:                    Unary and Binary Expressions.
47764                                                             (line    6)
47765* MULTIARCH_DIRNAME:                     Target Fragment.    (line  170)
47766* MULTILIB_DEFAULTS:                     Driver.             (line  253)
47767* MULTILIB_DIRNAMES:                     Target Fragment.    (line   44)
47768* MULTILIB_EXCEPTIONS:                   Target Fragment.    (line   70)
47769* MULTILIB_EXTRA_OPTS:                   Target Fragment.    (line  132)
47770* MULTILIB_MATCHES:                      Target Fragment.    (line   63)
47771* MULTILIB_OPTIONS:                      Target Fragment.    (line   24)
47772* MULTILIB_OSDIRNAMES:                   Target Fragment.    (line  139)
47773* MULTILIB_REQUIRED:                     Target Fragment.    (line   82)
47774* MULTILIB_REUSE:                        Target Fragment.    (line  103)
47775* multiple alternative constraints:      Multi-Alternative.  (line    6)
47776* MULTIPLE_SYMBOL_SPACES:                Misc.               (line  476)
47777* multiplication:                        Arithmetic.         (line   92)
47778* multiplication with signed saturation: Arithmetic.         (line   92)
47779* multiplication with unsigned saturation: Arithmetic.       (line   92)
47780* n in constraint:                       Simple Constraints. (line   75)
47781* N_REG_CLASSES:                         Register Classes.   (line   83)
47782* name:                                  Identifiers.        (line    6)
47783* named address spaces:                  Named Address Spaces.
47784                                                             (line    6)
47785* named patterns and conditions:         Patterns.           (line   47)
47786* names, pattern:                        Standard Names.     (line    6)
47787* namespace, scope:                      Namespaces.         (line    6)
47788* NAMESPACE_DECL <1>:                    Namespaces.         (line    6)
47789* NAMESPACE_DECL:                        Declarations.       (line    6)
47790* NATIVE_SYSTEM_HEADER_COMPONENT:        Driver.             (line  323)
47791* ne:                                    Comparisons.        (line   56)
47792* ne and attributes:                     Expressions.        (line   85)
47793* NE_EXPR:                               Unary and Binary Expressions.
47794                                                             (line    6)
47795* nearbyintM2 instruction pattern:       Standard Names.     (line  660)
47796* neg:                                   Arithmetic.         (line   81)
47797* neg and attributes:                    Expressions.        (line   85)
47798* neg, canonicalization of:              Insn Canonicalizations.
47799                                                             (line   27)
47800* NEGATE_EXPR:                           Unary and Binary Expressions.
47801                                                             (line    6)
47802* negation:                              Arithmetic.         (line   81)
47803* negation with signed saturation:       Arithmetic.         (line   81)
47804* negation with unsigned saturation:     Arithmetic.         (line   81)
47805* negM2 instruction pattern:             Standard Names.     (line  532)
47806* nested functions, trampolines for:     Trampolines.        (line    6)
47807* nested_ptr:                            GTY Options.        (line  186)
47808* next_bb, prev_bb, FOR_EACH_BB, FOR_ALL_BB: Basic Blocks.   (line   25)
47809* NEXT_INSN:                             Insns.              (line   30)
47810* NEXT_OBJC_RUNTIME:                     Library Calls.      (line   88)
47811* nil:                                   RTL Objects.        (line   73)
47812* NM_FLAGS:                              Macros for Initialization.
47813                                                             (line  111)
47814* NO_DBX_BNSYM_ENSYM:                    DBX Hooks.          (line   26)
47815* NO_DBX_FUNCTION_END:                   DBX Hooks.          (line   20)
47816* NO_DBX_GCC_MARKER:                     File Names and DBX. (line   28)
47817* NO_DBX_MAIN_SOURCE_DIRECTORY:          File Names and DBX. (line   23)
47818* NO_DOLLAR_IN_LABEL:                    Label Output.       (line   67)
47819* NO_DOT_IN_LABEL:                       Label Output.       (line   73)
47820* NO_FUNCTION_CSE:                       Costs.              (line  261)
47821* NO_IMPLICIT_EXTERN_C:                  Misc.               (line  374)
47822* NO_PROFILE_COUNTERS:                   Profiling.          (line   28)
47823* NO_REGS:                               Register Classes.   (line   17)
47824* NON_LVALUE_EXPR:                       Unary and Binary Expressions.
47825                                                             (line    6)
47826* nondeterministic finite state automaton: Processor pipeline description.
47827                                                             (line  305)
47828* nonimmediate_operand:                  Machine-Independent Predicates.
47829                                                             (line  101)
47830* nonlocal goto handler:                 Edges.              (line  172)
47831* nonlocal_goto instruction pattern:     Standard Names.     (line 1417)
47832* nonlocal_goto_receiver instruction pattern: Standard Names.
47833                                                             (line 1434)
47834* nonmemory_operand:                     Machine-Independent Predicates.
47835                                                             (line   97)
47836* nonoffsettable memory reference:       Simple Constraints. (line  256)
47837* nop instruction pattern:               Standard Names.     (line 1220)
47838* NOP_EXPR:                              Unary and Binary Expressions.
47839                                                             (line    6)
47840* normal predicates:                     Predicates.         (line   31)
47841* not:                                   Arithmetic.         (line  154)
47842* not and attributes:                    Expressions.        (line   50)
47843* not equal:                             Comparisons.        (line   56)
47844* not, canonicalization of:              Insn Canonicalizations.
47845                                                             (line   27)
47846* note:                                  Insns.              (line  174)
47847* note and /i:                           Flags.              (line   59)
47848* note and /v:                           Flags.              (line   44)
47849* NOTE_INSN_BASIC_BLOCK:                 Basic Blocks.       (line   50)
47850* NOTE_INSN_BLOCK_BEG:                   Insns.              (line  199)
47851* NOTE_INSN_BLOCK_END:                   Insns.              (line  199)
47852* NOTE_INSN_DELETED:                     Insns.              (line  189)
47853* NOTE_INSN_DELETED_LABEL:               Insns.              (line  194)
47854* NOTE_INSN_EH_REGION_BEG:               Insns.              (line  205)
47855* NOTE_INSN_EH_REGION_END:               Insns.              (line  205)
47856* NOTE_INSN_FUNCTION_BEG:                Insns.              (line  229)
47857* NOTE_INSN_LOOP_BEG:                    Insns.              (line  213)
47858* NOTE_INSN_LOOP_CONT:                   Insns.              (line  219)
47859* NOTE_INSN_LOOP_END:                    Insns.              (line  213)
47860* NOTE_INSN_LOOP_VTOP:                   Insns.              (line  223)
47861* NOTE_INSN_VAR_LOCATION:                Insns.              (line  233)
47862* NOTE_LINE_NUMBER:                      Insns.              (line  174)
47863* NOTE_SOURCE_FILE:                      Insns.              (line  174)
47864* NOTE_VAR_LOCATION:                     Insns.              (line  233)
47865* NOTICE_UPDATE_CC:                      CC0 Condition Codes.
47866                                                             (line   31)
47867* NUM_MACHINE_MODES:                     Machine Modes.      (line  286)
47868* NUM_MODES_FOR_MODE_SWITCHING:          Mode Switching.     (line   30)
47869* Number of iterations analysis:         Number of iterations.
47870                                                             (line    6)
47871* o in constraint:                       Simple Constraints. (line   23)
47872* OBJC_GEN_METHOD_LABEL:                 Label Output.       (line  452)
47873* OBJC_JBLEN:                            Misc.               (line  958)
47874* OBJECT_FORMAT_COFF:                    Macros for Initialization.
47875                                                             (line   97)
47876* OFFSET_TYPE:                           Types.              (line    6)
47877* offsettable address:                   Simple Constraints. (line   23)
47878* OImode:                                Machine Modes.      (line   51)
47879* Omega a solver for linear programming problems: Omega.     (line    6)
47880* OMP_ATOMIC:                            OpenMP.             (line    6)
47881* OMP_CLAUSE:                            OpenMP.             (line    6)
47882* OMP_CONTINUE:                          OpenMP.             (line    6)
47883* OMP_CRITICAL:                          OpenMP.             (line    6)
47884* OMP_FOR:                               OpenMP.             (line    6)
47885* OMP_MASTER:                            OpenMP.             (line    6)
47886* OMP_ORDERED:                           OpenMP.             (line    6)
47887* OMP_PARALLEL:                          OpenMP.             (line    6)
47888* OMP_RETURN:                            OpenMP.             (line    6)
47889* OMP_SECTION:                           OpenMP.             (line    6)
47890* OMP_SECTIONS:                          OpenMP.             (line    6)
47891* OMP_SINGLE:                            OpenMP.             (line    6)
47892* one_cmplM2 instruction pattern:        Standard Names.     (line  747)
47893* operand access:                        Accessors.          (line    6)
47894* Operand Access Routines:               SSA Operands.       (line  119)
47895* operand constraints:                   Constraints.        (line    6)
47896* Operand Iterators:                     SSA Operands.       (line  119)
47897* operand predicates:                    Predicates.         (line    6)
47898* operand substitution:                  Output Template.    (line    6)
47899* operands <1>:                          Patterns.           (line   53)
47900* operands:                              SSA Operands.       (line    6)
47901* Operands:                              Operands.           (line    6)
47902* operator predicates:                   Predicates.         (line    6)
47903* optc-gen.awk:                          Options.            (line    6)
47904* Optimization infrastructure for GIMPLE: Tree SSA.          (line    6)
47905* OPTIMIZE_MODE_SWITCHING:               Mode Switching.     (line    9)
47906* option specification files:            Options.            (line    6)
47907* OPTION_DEFAULT_SPECS:                  Driver.             (line   26)
47908* optional hardware or system features:  Run-time Target.    (line   59)
47909* options, directory search:             Including Patterns. (line   44)
47910* order of register allocation:          Allocation Order.   (line    6)
47911* ordered_comparison_operator:           Machine-Independent Predicates.
47912                                                             (line  116)
47913* ORDERED_EXPR:                          Unary and Binary Expressions.
47914                                                             (line    6)
47915* Ordering of Patterns:                  Pattern Ordering.   (line    6)
47916* ORIGINAL_REGNO:                        Special Accessors.  (line   54)
47917* other register constraints:            Simple Constraints. (line  173)
47918* outgoing_args_size:                    Stack Arguments.    (line   48)
47919* OUTGOING_REG_PARM_STACK_SPACE:         Stack Arguments.    (line   80)
47920* OUTGOING_REGNO:                        Register Basics.    (line   95)
47921* output of assembler code:              File Framework.     (line    6)
47922* output statements:                     Output Statement.   (line    6)
47923* output templates:                      Output Template.    (line    6)
47924* output_asm_insn:                       Output Statement.   (line   53)
47925* OUTPUT_QUOTED_STRING:                  File Framework.     (line  108)
47926* OVERLAPPING_REGISTER_NAMES:            Instruction Output. (line   21)
47927* OVERLOAD:                              Functions for C++.  (line    6)
47928* OVERRIDE_ABI_FORMAT:                   Register Arguments. (line  141)
47929* OVL_CURRENT:                           Functions for C++.  (line    6)
47930* OVL_NEXT:                              Functions for C++.  (line    6)
47931* p in constraint:                       Simple Constraints. (line  164)
47932* PAD_VARARGS_DOWN:                      Register Arguments. (line  222)
47933* parallel:                              Side Effects.       (line  210)
47934* param_is:                              GTY Options.        (line  114)
47935* parameters, c++ abi:                   C++ ABI.            (line    6)
47936* parameters, miscellaneous:             Misc.               (line    6)
47937* parameters, precompiled headers:       PCH Target.         (line    6)
47938* paramN_is:                             GTY Options.        (line  132)
47939* parity:                                Arithmetic.         (line  243)
47940* parityM2 instruction pattern:          Standard Names.     (line  741)
47941* PARM_BOUNDARY:                         Storage Layout.     (line  140)
47942* PARM_DECL:                             Declarations.       (line    6)
47943* PARSE_LDD_OUTPUT:                      Macros for Initialization.
47944                                                             (line  127)
47945* pass_duplicate_computed_gotos:         Edges.              (line  162)
47946* passes and files of the compiler:      Passes.             (line    6)
47947* passing arguments:                     Interface.          (line   36)
47948* PATH_SEPARATOR:                        Filesystem.         (line   31)
47949* PATTERN:                               Insns.              (line  294)
47950* pattern conditions:                    Patterns.           (line   43)
47951* pattern names:                         Standard Names.     (line    6)
47952* Pattern Ordering:                      Pattern Ordering.   (line    6)
47953* patterns:                              Patterns.           (line    6)
47954* pc:                                    Regs and Memory.    (line  361)
47955* pc and attributes:                     Insn Lengths.       (line   20)
47956* pc, RTL sharing:                       Sharing.            (line   25)
47957* PC_REGNUM:                             Register Basics.    (line  109)
47958* pc_rtx:                                Regs and Memory.    (line  366)
47959* PCC_BITFIELD_TYPE_MATTERS:             Storage Layout.     (line  326)
47960* PCC_STATIC_STRUCT_RETURN:              Aggregate Return.   (line   65)
47961* PDImode:                               Machine Modes.      (line   40)
47962* peephole optimization, RTL representation: Side Effects.   (line  244)
47963* peephole optimizer definitions:        Peephole Definitions.
47964                                                             (line    6)
47965* per-function data:                     Per-Function Data.  (line    6)
47966* percent sign:                          Output Template.    (line    6)
47967* PHI nodes:                             SSA.                (line   31)
47968* PHI_ARG_DEF:                           SSA.                (line   71)
47969* PHI_ARG_EDGE:                          SSA.                (line   68)
47970* PHI_ARG_ELT:                           SSA.                (line   63)
47971* PHI_NUM_ARGS:                          SSA.                (line   59)
47972* PHI_RESULT:                            SSA.                (line   56)
47973* PIC:                                   PIC.                (line    6)
47974* PIC_OFFSET_TABLE_REG_CALL_CLOBBERED:   PIC.                (line   26)
47975* PIC_OFFSET_TABLE_REGNUM:               PIC.                (line   16)
47976* pipeline hazard recognizer:            Processor pipeline description.
47977                                                             (line    6)
47978* Plugins:                               Plugins.            (line    6)
47979* plus:                                  Arithmetic.         (line   14)
47980* plus and attributes:                   Expressions.        (line   85)
47981* plus, canonicalization of:             Insn Canonicalizations.
47982                                                             (line   27)
47983* PLUS_EXPR:                             Unary and Binary Expressions.
47984                                                             (line    6)
47985* Pmode:                                 Misc.               (line  330)
47986* pmode_register_operand:                Machine-Independent Predicates.
47987                                                             (line   35)
47988* pointer:                               Types.              (line    6)
47989* POINTER_PLUS_EXPR:                     Unary and Binary Expressions.
47990                                                             (line    6)
47991* POINTER_SIZE:                          Storage Layout.     (line   76)
47992* POINTER_TYPE:                          Types.              (line    6)
47993* POINTERS_EXTEND_UNSIGNED:              Storage Layout.     (line   82)
47994* pop_operand:                           Machine-Independent Predicates.
47995                                                             (line   88)
47996* popcount:                              Arithmetic.         (line  239)
47997* popcountM2 instruction pattern:        Standard Names.     (line  735)
47998* pops_args:                             Function Entry.     (line  106)
47999* portability:                           Portability.        (line    6)
48000* position independent code:             PIC.                (line    6)
48001* post_dec:                              Incdec.             (line   25)
48002* post_inc:                              Incdec.             (line   30)
48003* post_modify:                           Incdec.             (line   33)
48004* post_order_compute, inverted_post_order_compute, walk_dominator_tree: Basic Blocks.
48005                                                             (line   34)
48006* POSTDECREMENT_EXPR:                    Unary and Binary Expressions.
48007                                                             (line    6)
48008* POSTINCREMENT_EXPR:                    Unary and Binary Expressions.
48009                                                             (line    6)
48010* POWI_MAX_MULTS:                        Misc.               (line  826)
48011* powM3 instruction pattern:             Standard Names.     (line  609)
48012* pragma:                                Misc.               (line  379)
48013* pre_dec:                               Incdec.             (line    8)
48014* PRE_GCC3_DWARF_FRAME_REGISTERS:        Frame Registers.    (line  127)
48015* pre_inc:                               Incdec.             (line   22)
48016* pre_modify:                            Incdec.             (line   51)
48017* PREDECREMENT_EXPR:                     Unary and Binary Expressions.
48018                                                             (line    6)
48019* predefined macros:                     Run-time Target.    (line    6)
48020* predicates:                            Predicates.         (line    6)
48021* predicates and machine modes:          Predicates.         (line   31)
48022* predication:                           Conditional Execution.
48023                                                             (line    6)
48024* predict.def:                           Profile information.
48025                                                             (line   24)
48026* PREFERRED_DEBUGGING_TYPE:              All Debuggers.      (line   42)
48027* PREFERRED_RELOAD_CLASS:                Register Classes.   (line  253)
48028* PREFERRED_STACK_BOUNDARY:              Storage Layout.     (line  154)
48029* prefetch:                              Side Effects.       (line  318)
48030* prefetch and /v:                       Flags.              (line  214)
48031* prefetch instruction pattern:          Standard Names.     (line 1562)
48032* PREFETCH_SCHEDULE_BARRIER_P:           Flags.              (line  214)
48033* PREINCREMENT_EXPR:                     Unary and Binary Expressions.
48034                                                             (line    6)
48035* presence_set:                          Processor pipeline description.
48036                                                             (line  224)
48037* preserving SSA form:                   SSA.                (line   76)
48038* preserving virtual SSA form:           SSA.                (line  184)
48039* pretend_args_size:                     Function Entry.     (line  112)
48040* prev_active_insn:                      define_peephole.    (line   60)
48041* PREV_INSN:                             Insns.              (line   26)
48042* PRINT_OPERAND:                         Instruction Output. (line   96)
48043* PRINT_OPERAND_ADDRESS:                 Instruction Output. (line  124)
48044* PRINT_OPERAND_PUNCT_VALID_P:           Instruction Output. (line  117)
48045* probe_stack instruction pattern:       Standard Names.     (line 1409)
48046* probe_stack_address instruction pattern: Standard Names.   (line 1402)
48047* processor functional units:            Processor pipeline description.
48048                                                             (line    6)
48049* processor pipeline description:        Processor pipeline description.
48050                                                             (line    6)
48051* product:                               Arithmetic.         (line   92)
48052* profile feedback:                      Profile information.
48053                                                             (line   14)
48054* profile representation:                Profile information.
48055                                                             (line    6)
48056* PROFILE_BEFORE_PROLOGUE:               Profiling.          (line   35)
48057* PROFILE_HOOK:                          Profiling.          (line   23)
48058* profiling, code generation:            Profiling.          (line    6)
48059* program counter:                       Regs and Memory.    (line  362)
48060* prologue:                              Function Entry.     (line    6)
48061* prologue instruction pattern:          Standard Names.     (line 1500)
48062* PROMOTE_MODE:                          Storage Layout.     (line   93)
48063* pseudo registers:                      Regs and Memory.    (line    9)
48064* PSImode:                               Machine Modes.      (line   32)
48065* PTRDIFF_TYPE:                          Type Layout.        (line  201)
48066* purge_dead_edges <1>:                  Maintaining the CFG.
48067                                                             (line   82)
48068* purge_dead_edges:                      Edges.              (line  104)
48069* push address instruction:              Simple Constraints. (line  164)
48070* PUSH_ARGS:                             Stack Arguments.    (line   18)
48071* PUSH_ARGS_REVERSED:                    Stack Arguments.    (line   26)
48072* push_operand:                          Machine-Independent Predicates.
48073                                                             (line   81)
48074* push_reload:                           Addressing Modes.   (line  177)
48075* PUSH_ROUNDING:                         Stack Arguments.    (line   32)
48076* pushM1 instruction pattern:            Standard Names.     (line  256)
48077* PUT_CODE:                              RTL Objects.        (line   47)
48078* PUT_MODE:                              Machine Modes.      (line  283)
48079* PUT_REG_NOTE_KIND:                     Insns.              (line  357)
48080* PUT_SDB_:                              SDB and DWARF.      (line  106)
48081* QCmode:                                Machine Modes.      (line  197)
48082* QFmode:                                Machine Modes.      (line   54)
48083* QImode:                                Machine Modes.      (line   25)
48084* QImode, in insn:                       Insns.              (line  278)
48085* QQmode:                                Machine Modes.      (line  103)
48086* qualified type <1>:                    Types for C++.      (line    6)
48087* qualified type:                        Types.              (line    6)
48088* querying function unit reservations:   Processor pipeline description.
48089                                                             (line   90)
48090* question mark:                         Multi-Alternative.  (line   41)
48091* quotient:                              Arithmetic.         (line  116)
48092* r in constraint:                       Simple Constraints. (line   66)
48093* RDIV_EXPR:                             Unary and Binary Expressions.
48094                                                             (line    6)
48095* READONLY_DATA_SECTION_ASM_OP:          Sections.           (line   63)
48096* real operands:                         SSA Operands.       (line    6)
48097* REAL_ARITHMETIC:                       Floating Point.     (line   66)
48098* REAL_CST:                              Constant expressions.
48099                                                             (line    6)
48100* REAL_LIBGCC_SPEC:                      Driver.             (line  125)
48101* REAL_NM_FILE_NAME:                     Macros for Initialization.
48102                                                             (line  106)
48103* REAL_TYPE:                             Types.              (line    6)
48104* REAL_VALUE_ABS:                        Floating Point.     (line   82)
48105* REAL_VALUE_ATOF:                       Floating Point.     (line   50)
48106* REAL_VALUE_FIX:                        Floating Point.     (line   41)
48107* REAL_VALUE_FROM_INT:                   Floating Point.     (line   92)
48108* REAL_VALUE_ISINF:                      Floating Point.     (line   59)
48109* REAL_VALUE_ISNAN:                      Floating Point.     (line   62)
48110* REAL_VALUE_NEGATE:                     Floating Point.     (line   79)
48111* REAL_VALUE_NEGATIVE:                   Floating Point.     (line   56)
48112* REAL_VALUE_TO_INT:                     Floating Point.     (line   86)
48113* REAL_VALUE_TO_TARGET_DECIMAL128:       Data Output.        (line  145)
48114* REAL_VALUE_TO_TARGET_DECIMAL32:        Data Output.        (line  143)
48115* REAL_VALUE_TO_TARGET_DECIMAL64:        Data Output.        (line  144)
48116* REAL_VALUE_TO_TARGET_DOUBLE:           Data Output.        (line  141)
48117* REAL_VALUE_TO_TARGET_LONG_DOUBLE:      Data Output.        (line  142)
48118* REAL_VALUE_TO_TARGET_SINGLE:           Data Output.        (line  140)
48119* REAL_VALUE_TYPE:                       Floating Point.     (line   26)
48120* REAL_VALUE_UNSIGNED_FIX:               Floating Point.     (line   45)
48121* REAL_VALUES_EQUAL:                     Floating Point.     (line   32)
48122* REAL_VALUES_LESS:                      Floating Point.     (line   38)
48123* REALPART_EXPR:                         Unary and Binary Expressions.
48124                                                             (line    6)
48125* recog_data.operand:                    Instruction Output. (line   54)
48126* recognizing insns:                     RTL Template.       (line    6)
48127* RECORD_TYPE <1>:                       Classes.            (line    6)
48128* RECORD_TYPE:                           Types.              (line    6)
48129* redirect_edge_and_branch:              Profile information.
48130                                                             (line   71)
48131* redirect_edge_and_branch, redirect_jump: Maintaining the CFG.
48132                                                             (line   92)
48133* reduc_smax_M instruction pattern:      Standard Names.     (line  310)
48134* reduc_smin_M instruction pattern:      Standard Names.     (line  310)
48135* reduc_splus_M instruction pattern:     Standard Names.     (line  322)
48136* reduc_umax_M instruction pattern:      Standard Names.     (line  316)
48137* reduc_umin_M instruction pattern:      Standard Names.     (line  316)
48138* reduc_uplus_M instruction pattern:     Standard Names.     (line  328)
48139* reference:                             Types.              (line    6)
48140* REFERENCE_TYPE:                        Types.              (line    6)
48141* reg:                                   Regs and Memory.    (line    9)
48142* reg and /f:                            Flags.              (line   94)
48143* reg and /i:                            Flags.              (line   89)
48144* reg and /v:                            Flags.              (line   98)
48145* reg, RTL sharing:                      Sharing.            (line   17)
48146* REG_ALLOC_ORDER:                       Allocation Order.   (line    9)
48147* REG_BR_PRED:                           Insns.              (line  538)
48148* REG_BR_PROB:                           Insns.              (line  532)
48149* REG_BR_PROB_BASE, BB_FREQ_BASE, count: Profile information.
48150                                                             (line   82)
48151* REG_BR_PROB_BASE, EDGE_FREQUENCY:      Profile information.
48152                                                             (line   52)
48153* REG_CC_SETTER:                         Insns.              (line  503)
48154* REG_CC_USER:                           Insns.              (line  503)
48155* REG_CLASS_CONTENTS:                    Register Classes.   (line   93)
48156* reg_class_contents:                    Register Basics.    (line   59)
48157* REG_CLASS_FROM_CONSTRAINT:             Old Constraints.    (line   35)
48158* REG_CLASS_FROM_LETTER:                 Old Constraints.    (line   27)
48159* REG_CLASS_NAMES:                       Register Classes.   (line   88)
48160* REG_CROSSING_JUMP:                     Insns.              (line  416)
48161* REG_DEAD:                              Insns.              (line  368)
48162* REG_DEAD, REG_UNUSED:                  Liveness information.
48163                                                             (line   32)
48164* REG_DEP_ANTI:                          Insns.              (line  525)
48165* REG_DEP_OUTPUT:                        Insns.              (line  521)
48166* REG_DEP_TRUE:                          Insns.              (line  518)
48167* REG_EH_REGION, EDGE_ABNORMAL_CALL:     Edges.              (line  110)
48168* REG_EQUAL:                             Insns.              (line  431)
48169* REG_EQUIV:                             Insns.              (line  431)
48170* REG_EXPR:                              Special Accessors.  (line   60)
48171* REG_FRAME_RELATED_EXPR:                Insns.              (line  544)
48172* REG_FUNCTION_VALUE_P:                  Flags.              (line   89)
48173* REG_INC:                               Insns.              (line  384)
48174* reg_label and /v:                      Flags.              (line   65)
48175* REG_LABEL_OPERAND:                     Insns.              (line  398)
48176* REG_LABEL_TARGET:                      Insns.              (line  407)
48177* reg_names <1>:                         Instruction Output. (line  108)
48178* reg_names:                             Register Basics.    (line   59)
48179* REG_NONNEG:                            Insns.              (line  390)
48180* REG_NOTE_KIND:                         Insns.              (line  357)
48181* REG_NOTES:                             Insns.              (line  331)
48182* REG_OFFSET:                            Special Accessors.  (line   64)
48183* REG_OK_STRICT:                         Addressing Modes.   (line  100)
48184* REG_PARM_STACK_SPACE:                  Stack Arguments.    (line   59)
48185* REG_PARM_STACK_SPACE, and TARGET_FUNCTION_ARG: Register Arguments.
48186                                                             (line   51)
48187* REG_POINTER:                           Flags.              (line   94)
48188* REG_SETJMP:                            Insns.              (line  425)
48189* REG_UNUSED:                            Insns.              (line  377)
48190* REG_USERVAR_P:                         Flags.              (line   98)
48191* REG_VALUE_IN_UNWIND_CONTEXT:           Frame Registers.    (line  157)
48192* REG_WORDS_BIG_ENDIAN:                  Storage Layout.     (line   36)
48193* regclass_for_constraint:               C Constraint Interface.
48194                                                             (line   60)
48195* register allocation order:             Allocation Order.   (line    6)
48196* register class definitions:            Register Classes.   (line    6)
48197* register class preference constraints: Class Preferences.  (line    6)
48198* register pairs:                        Values in Registers.
48199                                                             (line   69)
48200* Register Transfer Language (RTL):      RTL.                (line    6)
48201* register usage:                        Registers.          (line    6)
48202* REGISTER_MOVE_COST:                    Costs.              (line   10)
48203* REGISTER_NAMES:                        Instruction Output. (line    9)
48204* register_operand:                      Machine-Independent Predicates.
48205                                                             (line   30)
48206* REGISTER_PREFIX:                       Instruction Output. (line  152)
48207* REGISTER_TARGET_PRAGMAS:               Misc.               (line  380)
48208* registers arguments:                   Register Arguments. (line    6)
48209* registers in constraints:              Simple Constraints. (line   66)
48210* REGMODE_NATURAL_SIZE:                  Values in Registers.
48211                                                             (line   50)
48212* REGNO_MODE_CODE_OK_FOR_BASE_P:         Register Classes.   (line  176)
48213* REGNO_MODE_OK_FOR_BASE_P:              Register Classes.   (line  153)
48214* REGNO_MODE_OK_FOR_REG_BASE_P:          Register Classes.   (line  163)
48215* REGNO_OK_FOR_BASE_P:                   Register Classes.   (line  149)
48216* REGNO_OK_FOR_INDEX_P:                  Register Classes.   (line  190)
48217* REGNO_REG_CLASS:                       Register Classes.   (line  108)
48218* regs_ever_live:                        Function Entry.     (line   21)
48219* regular expressions:                   Processor pipeline description.
48220                                                             (line    6)
48221* relative costs:                        Costs.              (line    6)
48222* RELATIVE_PREFIX_NOT_LINKDIR:           Driver.             (line  263)
48223* reload_completed:                      Standard Names.     (line 1187)
48224* reload_in instruction pattern:         Standard Names.     (line   99)
48225* reload_in_progress:                    Standard Names.     (line   57)
48226* reload_out instruction pattern:        Standard Names.     (line   99)
48227* reloading:                             RTL passes.         (line  183)
48228* remainder:                             Arithmetic.         (line  136)
48229* remainderM3 instruction pattern:       Standard Names.     (line  555)
48230* reorder:                               GTY Options.        (line  210)
48231* representation of RTL:                 RTL.                (line    6)
48232* reservation delays:                    Processor pipeline description.
48233                                                             (line    6)
48234* rest_of_decl_compilation:              Parsing pass.       (line   52)
48235* rest_of_type_compilation:              Parsing pass.       (line   52)
48236* restore_stack_block instruction pattern: Standard Names.   (line 1322)
48237* restore_stack_function instruction pattern: Standard Names.
48238                                                             (line 1322)
48239* restore_stack_nonlocal instruction pattern: Standard Names.
48240                                                             (line 1322)
48241* RESULT_DECL:                           Declarations.       (line    6)
48242* return:                                Side Effects.       (line   72)
48243* return instruction pattern:            Standard Names.     (line 1160)
48244* return values in registers:            Scalar Return.      (line    6)
48245* RETURN_ADDR_IN_PREVIOUS_FRAME:         Frame Layout.       (line  135)
48246* RETURN_ADDR_OFFSET:                    Exception Handling. (line   60)
48247* RETURN_ADDR_RTX:                       Frame Layout.       (line  124)
48248* RETURN_ADDRESS_POINTER_REGNUM:         Frame Registers.    (line   65)
48249* RETURN_EXPR:                           Statements for C++. (line    6)
48250* RETURN_STMT:                           Statements for C++. (line    6)
48251* return_val:                            Flags.              (line  274)
48252* return_val, in call_insn:              Flags.              (line   24)
48253* return_val, in reg:                    Flags.              (line   89)
48254* return_val, in symbol_ref:             Flags.              (line  202)
48255* returning aggregate values:            Aggregate Return.   (line    6)
48256* returning structures and unions:       Interface.          (line   10)
48257* reverse probability:                   Profile information.
48258                                                             (line   66)
48259* REVERSE_CONDITION:                     MODE_CC Condition Codes.
48260                                                             (line   94)
48261* REVERSIBLE_CC_MODE:                    MODE_CC Condition Codes.
48262                                                             (line   79)
48263* right rotate:                          Arithmetic.         (line  195)
48264* right shift:                           Arithmetic.         (line  190)
48265* rintM2 instruction pattern:            Standard Names.     (line  668)
48266* RISC:                                  Processor pipeline description.
48267                                                             (line    6)
48268* roots, marking:                        GGC Roots.          (line    6)
48269* rotate:                                Arithmetic.         (line  195)
48270* rotatert:                              Arithmetic.         (line  195)
48271* rotlM3 instruction pattern:            Standard Names.     (line  520)
48272* rotrM3 instruction pattern:            Standard Names.     (line  520)
48273* ROUND_DIV_EXPR:                        Unary and Binary Expressions.
48274                                                             (line    6)
48275* ROUND_MOD_EXPR:                        Unary and Binary Expressions.
48276                                                             (line    6)
48277* ROUND_TOWARDS_ZERO:                    Storage Layout.     (line  477)
48278* ROUND_TYPE_ALIGN:                      Storage Layout.     (line  424)
48279* roundM2 instruction pattern:           Standard Names.     (line  644)
48280* RSHIFT_EXPR:                           Unary and Binary Expressions.
48281                                                             (line    6)
48282* RTL addition:                          Arithmetic.         (line   14)
48283* RTL addition with signed saturation:   Arithmetic.         (line   14)
48284* RTL addition with unsigned saturation: Arithmetic.         (line   14)
48285* RTL classes:                           RTL Classes.        (line    6)
48286* RTL comparison:                        Arithmetic.         (line   43)
48287* RTL comparison operations:             Comparisons.        (line    6)
48288* RTL constant expression types:         Constants.          (line    6)
48289* RTL constants:                         Constants.          (line    6)
48290* RTL declarations:                      RTL Declarations.   (line    6)
48291* RTL difference:                        Arithmetic.         (line   36)
48292* RTL expression:                        RTL Objects.        (line    6)
48293* RTL expressions for arithmetic:        Arithmetic.         (line    6)
48294* RTL format:                            RTL Classes.        (line   72)
48295* RTL format characters:                 RTL Classes.        (line   77)
48296* RTL function-call insns:               Calls.              (line    6)
48297* RTL insn template:                     RTL Template.       (line    6)
48298* RTL integers:                          RTL Objects.        (line    6)
48299* RTL memory expressions:                Regs and Memory.    (line    6)
48300* RTL object types:                      RTL Objects.        (line    6)
48301* RTL postdecrement:                     Incdec.             (line    6)
48302* RTL postincrement:                     Incdec.             (line    6)
48303* RTL predecrement:                      Incdec.             (line    6)
48304* RTL preincrement:                      Incdec.             (line    6)
48305* RTL register expressions:              Regs and Memory.    (line    6)
48306* RTL representation:                    RTL.                (line    6)
48307* RTL side effect expressions:           Side Effects.       (line    6)
48308* RTL strings:                           RTL Objects.        (line    6)
48309* RTL structure sharing assumptions:     Sharing.            (line    6)
48310* RTL subtraction:                       Arithmetic.         (line   36)
48311* RTL subtraction with signed saturation: Arithmetic.        (line   36)
48312* RTL subtraction with unsigned saturation: Arithmetic.      (line   36)
48313* RTL sum:                               Arithmetic.         (line   14)
48314* RTL vectors:                           RTL Objects.        (line    6)
48315* RTL_CONST_CALL_P:                      Flags.              (line   19)
48316* RTL_CONST_OR_PURE_CALL_P:              Flags.              (line   29)
48317* RTL_LOOPING_CONST_OR_PURE_CALL_P:      Flags.              (line   33)
48318* RTL_PURE_CALL_P:                       Flags.              (line   24)
48319* RTX (See RTL):                         RTL Objects.        (line    6)
48320* RTX codes, classes of:                 RTL Classes.        (line    6)
48321* RTX_FRAME_RELATED_P:                   Flags.              (line  107)
48322* run-time conventions:                  Interface.          (line    6)
48323* run-time target specification:         Run-time Target.    (line    6)
48324* s in constraint:                       Simple Constraints. (line  102)
48325* same_type_p:                           Types.              (line   88)
48326* SAmode:                                Machine Modes.      (line  148)
48327* sat_fract:                             Conversions.        (line   90)
48328* satfractMN2 instruction pattern:       Standard Names.     (line  925)
48329* satfractunsMN2 instruction pattern:    Standard Names.     (line  938)
48330* satisfies_constraint_:                 C Constraint Interface.
48331                                                             (line   47)
48332* SAVE_EXPR:                             Unary and Binary Expressions.
48333                                                             (line    6)
48334* save_stack_block instruction pattern:  Standard Names.     (line 1322)
48335* save_stack_function instruction pattern: Standard Names.   (line 1322)
48336* save_stack_nonlocal instruction pattern: Standard Names.   (line 1322)
48337* SBSS_SECTION_ASM_OP:                   Sections.           (line   76)
48338* Scalar evolutions:                     Scalar evolutions.  (line    6)
48339* scalars, returned as values:           Scalar Return.      (line    6)
48340* SCHED_GROUP_P:                         Flags.              (line  148)
48341* SCmode:                                Machine Modes.      (line  197)
48342* scratch:                               Regs and Memory.    (line  298)
48343* scratch operands:                      Regs and Memory.    (line  298)
48344* scratch, RTL sharing:                  Sharing.            (line   35)
48345* scratch_operand:                       Machine-Independent Predicates.
48346                                                             (line   50)
48347* SDATA_SECTION_ASM_OP:                  Sections.           (line   58)
48348* SDB_ALLOW_FORWARD_REFERENCES:          SDB and DWARF.      (line  124)
48349* SDB_ALLOW_UNKNOWN_REFERENCES:          SDB and DWARF.      (line  119)
48350* SDB_DEBUGGING_INFO:                    SDB and DWARF.      (line    9)
48351* SDB_DELIM:                             SDB and DWARF.      (line  112)
48352* SDB_OUTPUT_SOURCE_LINE:                SDB and DWARF.      (line  129)
48353* SDmode:                                Machine Modes.      (line   85)
48354* sdot_prodM instruction pattern:        Standard Names.     (line  334)
48355* search options:                        Including Patterns. (line   44)
48356* SECONDARY_INPUT_RELOAD_CLASS:          Register Classes.   (line  396)
48357* SECONDARY_MEMORY_NEEDED:               Register Classes.   (line  452)
48358* SECONDARY_MEMORY_NEEDED_MODE:          Register Classes.   (line  471)
48359* SECONDARY_MEMORY_NEEDED_RTX:           Register Classes.   (line  462)
48360* SECONDARY_OUTPUT_RELOAD_CLASS:         Register Classes.   (line  397)
48361* SECONDARY_RELOAD_CLASS:                Register Classes.   (line  395)
48362* SELECT_CC_MODE:                        MODE_CC Condition Codes.
48363                                                             (line    7)
48364* sequence:                              Side Effects.       (line  260)
48365* Sequence iterators:                    Sequence iterators. (line    6)
48366* set:                                   Side Effects.       (line   15)
48367* set and /f:                            Flags.              (line  107)
48368* SET_ASM_OP:                            Label Output.       (line  419)
48369* set_attr:                              Tagging Insns.      (line   31)
48370* set_attr_alternative:                  Tagging Insns.      (line   49)
48371* set_bb_seq:                            GIMPLE sequences.   (line   76)
48372* SET_BY_PIECES_P:                       Costs.              (line  206)
48373* SET_DEST:                              Side Effects.       (line   69)
48374* SET_IS_RETURN_P:                       Flags.              (line  157)
48375* SET_LABEL_KIND:                        Insns.              (line  146)
48376* set_optab_libfunc:                     Library Calls.      (line   15)
48377* SET_RATIO:                             Costs.              (line  194)
48378* SET_SRC:                               Side Effects.       (line   69)
48379* set_thread_pointerMODE instruction pattern: Standard Names.
48380                                                             (line 1856)
48381* SET_TYPE_STRUCTURAL_EQUALITY:          Types.              (line    6)
48382* setmemM instruction pattern:           Standard Names.     (line  793)
48383* SETUP_FRAME_ADDRESSES:                 Frame Layout.       (line  102)
48384* SF_SIZE:                               Type Layout.        (line  136)
48385* SFmode:                                Machine Modes.      (line   66)
48386* sharing of RTL components:             Sharing.            (line    6)
48387* shift:                                 Arithmetic.         (line  173)
48388* SHIFT_COUNT_TRUNCATED:                 Misc.               (line  113)
48389* SHLIB_SUFFIX:                          Macros for Initialization.
48390                                                             (line  135)
48391* SHORT_ACCUM_TYPE_SIZE:                 Type Layout.        (line   83)
48392* SHORT_FRACT_TYPE_SIZE:                 Type Layout.        (line   63)
48393* SHORT_IMMEDIATES_SIGN_EXTEND:          Misc.               (line   87)
48394* SHORT_TYPE_SIZE:                       Type Layout.        (line   16)
48395* sibcall_epilogue instruction pattern:  Standard Names.     (line 1532)
48396* sibling call:                          Edges.              (line  122)
48397* SIBLING_CALL_P:                        Flags.              (line  161)
48398* SIG_ATOMIC_TYPE:                       Type Layout.        (line  252)
48399* sign_extend:                           Conversions.        (line   23)
48400* sign_extract:                          Bit-Fields.         (line    8)
48401* sign_extract, canonicalization of:     Insn Canonicalizations.
48402                                                             (line   88)
48403* signed division:                       Arithmetic.         (line  116)
48404* signed division with signed saturation: Arithmetic.        (line  116)
48405* signed maximum:                        Arithmetic.         (line  141)
48406* signed minimum:                        Arithmetic.         (line  141)
48407* SImode:                                Machine Modes.      (line   37)
48408* simple constraints:                    Simple Constraints. (line    6)
48409* simple_return:                         Side Effects.       (line   86)
48410* simple_return instruction pattern:     Standard Names.     (line 1176)
48411* sincos math function, implicit usage:  Library Calls.      (line   78)
48412* sincosM3 instruction pattern:          Standard Names.     (line  580)
48413* sinM2 instruction pattern:             Standard Names.     (line  572)
48414* SIZE_ASM_OP:                           Label Output.       (line   35)
48415* SIZE_TYPE:                             Type Layout.        (line  175)
48416* SIZETYPE:                              Type Layout.        (line  191)
48417* skip:                                  GTY Options.        (line   77)
48418* SLOW_BYTE_ACCESS:                      Costs.              (line  118)
48419* SLOW_UNALIGNED_ACCESS:                 Costs.              (line  133)
48420* smax:                                  Arithmetic.         (line  141)
48421* smin:                                  Arithmetic.         (line  141)
48422* sms, swing, software pipelining:       RTL passes.         (line  132)
48423* smulM3_highpart instruction pattern:   Standard Names.     (line  435)
48424* soft float library:                    Soft float library routines.
48425                                                             (line    6)
48426* special:                               GTY Options.        (line  295)
48427* special predicates:                    Predicates.         (line   31)
48428* SPECS:                                 Target Fragment.    (line  191)
48429* speed of instructions:                 Costs.              (line    6)
48430* split_block:                           Maintaining the CFG.
48431                                                             (line   99)
48432* splitting instructions:                Insn Splitting.     (line    6)
48433* SQmode:                                Machine Modes.      (line  111)
48434* sqrt:                                  Arithmetic.         (line  207)
48435* sqrtM2 instruction pattern:            Standard Names.     (line  538)
48436* square root:                           Arithmetic.         (line  207)
48437* ss_abs:                                Arithmetic.         (line  200)
48438* ss_ashift:                             Arithmetic.         (line  173)
48439* ss_div:                                Arithmetic.         (line  116)
48440* ss_minus:                              Arithmetic.         (line   36)
48441* ss_mult:                               Arithmetic.         (line   92)
48442* ss_neg:                                Arithmetic.         (line   81)
48443* ss_plus:                               Arithmetic.         (line   14)
48444* ss_truncate:                           Conversions.        (line   43)
48445* SSA:                                   SSA.                (line    6)
48446* SSA_NAME_DEF_STMT:                     SSA.                (line  219)
48447* SSA_NAME_VERSION:                      SSA.                (line  224)
48448* ssaddM3 instruction pattern:           Standard Names.     (line  269)
48449* ssashlM3 instruction pattern:          Standard Names.     (line  510)
48450* ssdivM3 instruction pattern:           Standard Names.     (line  269)
48451* ssmaddMN4 instruction pattern:         Standard Names.     (line  458)
48452* ssmsubMN4 instruction pattern:         Standard Names.     (line  482)
48453* ssmulM3 instruction pattern:           Standard Names.     (line  269)
48454* ssnegM2 instruction pattern:           Standard Names.     (line  532)
48455* sssubM3 instruction pattern:           Standard Names.     (line  269)
48456* ssum_widenM3 instruction pattern:      Standard Names.     (line  344)
48457* stack arguments:                       Stack Arguments.    (line    6)
48458* stack frame layout:                    Frame Layout.       (line    6)
48459* stack smashing protection:             Stack Smashing Protection.
48460                                                             (line    6)
48461* STACK_ALIGNMENT_NEEDED:                Frame Layout.       (line   48)
48462* STACK_BOUNDARY:                        Storage Layout.     (line  146)
48463* STACK_CHECK_BUILTIN:                   Stack Checking.     (line   32)
48464* STACK_CHECK_FIXED_FRAME_SIZE:          Stack Checking.     (line   83)
48465* STACK_CHECK_MAX_FRAME_SIZE:            Stack Checking.     (line   74)
48466* STACK_CHECK_MAX_VAR_SIZE:              Stack Checking.     (line   90)
48467* STACK_CHECK_MOVING_SP:                 Stack Checking.     (line   54)
48468* STACK_CHECK_PROBE_INTERVAL_EXP:        Stack Checking.     (line   46)
48469* STACK_CHECK_PROTECT:                   Stack Checking.     (line   63)
48470* STACK_CHECK_STATIC_BUILTIN:            Stack Checking.     (line   39)
48471* STACK_DYNAMIC_OFFSET:                  Frame Layout.       (line   75)
48472* STACK_DYNAMIC_OFFSET and virtual registers: Regs and Memory.
48473                                                             (line   83)
48474* STACK_GROWS_DOWNWARD:                  Frame Layout.       (line    9)
48475* STACK_PARMS_IN_REG_PARM_AREA:          Stack Arguments.    (line   90)
48476* STACK_POINTER_OFFSET:                  Frame Layout.       (line   58)
48477* STACK_POINTER_OFFSET and virtual registers: Regs and Memory.
48478                                                             (line   93)
48479* STACK_POINTER_REGNUM:                  Frame Registers.    (line    9)
48480* STACK_POINTER_REGNUM and virtual registers: Regs and Memory.
48481                                                             (line   83)
48482* stack_pointer_rtx:                     Frame Registers.    (line  104)
48483* stack_protect_set instruction pattern: Standard Names.     (line 1866)
48484* stack_protect_test instruction pattern: Standard Names.    (line 1876)
48485* STACK_PUSH_CODE:                       Frame Layout.       (line   17)
48486* STACK_REG_COVER_CLASS:                 Stack Registers.    (line   23)
48487* STACK_REGS:                            Stack Registers.    (line   20)
48488* STACK_SAVEAREA_MODE:                   Storage Layout.     (line  440)
48489* STACK_SIZE_MODE:                       Storage Layout.     (line  452)
48490* STACK_SLOT_ALIGNMENT:                  Storage Layout.     (line  271)
48491* standard pattern names:                Standard Names.     (line    6)
48492* STANDARD_STARTFILE_PREFIX:             Driver.             (line  275)
48493* STANDARD_STARTFILE_PREFIX_1:           Driver.             (line  282)
48494* STANDARD_STARTFILE_PREFIX_2:           Driver.             (line  289)
48495* STARTFILE_SPEC:                        Driver.             (line  148)
48496* STARTING_FRAME_OFFSET:                 Frame Layout.       (line   39)
48497* STARTING_FRAME_OFFSET and virtual registers: Regs and Memory.
48498                                                             (line   74)
48499* Statement and operand traversals:      Statement and operand traversals.
48500                                                             (line    6)
48501* Statement Sequences:                   Statement Sequences.
48502                                                             (line    6)
48503* statements <1>:                        Statements for C++. (line    6)
48504* statements:                            Function Properties.
48505                                                             (line    6)
48506* Statements:                            Statements.         (line    6)
48507* Static profile estimation:             Profile information.
48508                                                             (line   24)
48509* static single assignment:              SSA.                (line    6)
48510* STATIC_CHAIN_INCOMING_REGNUM:          Frame Registers.    (line   78)
48511* STATIC_CHAIN_REGNUM:                   Frame Registers.    (line   77)
48512* stdarg.h and register arguments:       Register Arguments. (line   45)
48513* STDC_0_IN_SYSTEM_HEADERS:              Misc.               (line  351)
48514* STMT_EXPR:                             Unary and Binary Expressions.
48515                                                             (line    6)
48516* STMT_IS_FULL_EXPR_P:                   Statements for C++. (line   22)
48517* storage layout:                        Storage Layout.     (line    6)
48518* STORE_BY_PIECES_P:                     Costs.              (line  213)
48519* STORE_FLAG_VALUE:                      Misc.               (line  202)
48520* store_multiple instruction pattern:    Standard Names.     (line  160)
48521* strcpy:                                Storage Layout.     (line  231)
48522* STRICT_ALIGNMENT:                      Storage Layout.     (line  321)
48523* strict_low_part:                       RTL Declarations.   (line    9)
48524* strict_memory_address_p:               Addressing Modes.   (line  187)
48525* STRING_CST:                            Constant expressions.
48526                                                             (line    6)
48527* STRING_POOL_ADDRESS_P:                 Flags.              (line  165)
48528* strlenM instruction pattern:           Standard Names.     (line  860)
48529* structure value address:               Aggregate Return.   (line    6)
48530* STRUCTURE_SIZE_BOUNDARY:               Storage Layout.     (line  313)
48531* structures, returning:                 Interface.          (line   10)
48532* subM3 instruction pattern:             Standard Names.     (line  269)
48533* SUBOBJECT:                             Statements for C++. (line    6)
48534* SUBOBJECT_CLEANUP:                     Statements for C++. (line    6)
48535* subreg:                                Regs and Memory.    (line   97)
48536* subreg and /s:                         Flags.              (line  187)
48537* subreg and /u:                         Flags.              (line  180)
48538* subreg and /u and /v:                  Flags.              (line  170)
48539* subreg, in strict_low_part:            RTL Declarations.   (line    9)
48540* SUBREG_BYTE:                           Regs and Memory.    (line  289)
48541* SUBREG_PROMOTED_UNSIGNED_P:            Flags.              (line  170)
48542* SUBREG_PROMOTED_UNSIGNED_SET:          Flags.              (line  180)
48543* SUBREG_PROMOTED_VAR_P:                 Flags.              (line  187)
48544* SUBREG_REG:                            Regs and Memory.    (line  289)
48545* subst iterators in .md files:          Subst Iterators.    (line    6)
48546* SUCCESS_EXIT_CODE:                     Host Misc.          (line   12)
48547* SUPPORTS_INIT_PRIORITY:                Macros for Initialization.
48548                                                             (line   58)
48549* SUPPORTS_ONE_ONLY:                     Label Output.       (line  259)
48550* SUPPORTS_WEAK:                         Label Output.       (line  233)
48551* SWITCH_BODY:                           Statements for C++. (line    6)
48552* SWITCH_COND:                           Statements for C++. (line    6)
48553* SWITCH_STMT:                           Statements for C++. (line    6)
48554* SWITCHABLE_TARGET:                     Run-time Target.    (line  165)
48555* SYMBOL_FLAG_ANCHOR:                    Special Accessors.  (line  120)
48556* SYMBOL_FLAG_EXTERNAL:                  Special Accessors.  (line  102)
48557* SYMBOL_FLAG_FUNCTION:                  Special Accessors.  (line   95)
48558* SYMBOL_FLAG_HAS_BLOCK_INFO:            Special Accessors.  (line  116)
48559* SYMBOL_FLAG_LOCAL:                     Special Accessors.  (line   98)
48560* SYMBOL_FLAG_SMALL:                     Special Accessors.  (line  107)
48561* SYMBOL_FLAG_TLS_SHIFT:                 Special Accessors.  (line  111)
48562* symbol_ref:                            Constants.          (line   87)
48563* symbol_ref and /f:                     Flags.              (line  165)
48564* symbol_ref and /i:                     Flags.              (line  202)
48565* symbol_ref and /u:                     Flags.              (line   10)
48566* symbol_ref and /v:                     Flags.              (line  206)
48567* symbol_ref, RTL sharing:               Sharing.            (line   20)
48568* SYMBOL_REF_ANCHOR_P:                   Special Accessors.  (line  120)
48569* SYMBOL_REF_BLOCK:                      Special Accessors.  (line  133)
48570* SYMBOL_REF_BLOCK_OFFSET:               Special Accessors.  (line  138)
48571* SYMBOL_REF_CONSTANT:                   Special Accessors.  (line   81)
48572* SYMBOL_REF_DATA:                       Special Accessors.  (line   85)
48573* SYMBOL_REF_DECL:                       Special Accessors.  (line   69)
48574* SYMBOL_REF_EXTERNAL_P:                 Special Accessors.  (line  102)
48575* SYMBOL_REF_FLAG:                       Flags.              (line  206)
48576* SYMBOL_REF_FLAG, in TARGET_ENCODE_SECTION_INFO: Sections.  (line  277)
48577* SYMBOL_REF_FLAGS:                      Special Accessors.  (line   89)
48578* SYMBOL_REF_FUNCTION_P:                 Special Accessors.  (line   95)
48579* SYMBOL_REF_HAS_BLOCK_INFO_P:           Special Accessors.  (line  116)
48580* SYMBOL_REF_LOCAL_P:                    Special Accessors.  (line   98)
48581* SYMBOL_REF_SMALL_P:                    Special Accessors.  (line  107)
48582* SYMBOL_REF_TLS_MODEL:                  Special Accessors.  (line  111)
48583* SYMBOL_REF_USED:                       Flags.              (line  197)
48584* SYMBOL_REF_WEAK:                       Flags.              (line  202)
48585* symbolic label:                        Sharing.            (line   20)
48586* sync_addMODE instruction pattern:      Standard Names.     (line 1631)
48587* sync_andMODE instruction pattern:      Standard Names.     (line 1631)
48588* sync_compare_and_swapMODE instruction pattern: Standard Names.
48589                                                             (line 1591)
48590* sync_iorMODE instruction pattern:      Standard Names.     (line 1631)
48591* sync_lock_releaseMODE instruction pattern: Standard Names. (line 1696)
48592* sync_lock_test_and_setMODE instruction pattern: Standard Names.
48593                                                             (line 1670)
48594* sync_nandMODE instruction pattern:     Standard Names.     (line 1631)
48595* sync_new_addMODE instruction pattern:  Standard Names.     (line 1663)
48596* sync_new_andMODE instruction pattern:  Standard Names.     (line 1663)
48597* sync_new_iorMODE instruction pattern:  Standard Names.     (line 1663)
48598* sync_new_nandMODE instruction pattern: Standard Names.     (line 1663)
48599* sync_new_subMODE instruction pattern:  Standard Names.     (line 1663)
48600* sync_new_xorMODE instruction pattern:  Standard Names.     (line 1663)
48601* sync_old_addMODE instruction pattern:  Standard Names.     (line 1646)
48602* sync_old_andMODE instruction pattern:  Standard Names.     (line 1646)
48603* sync_old_iorMODE instruction pattern:  Standard Names.     (line 1646)
48604* sync_old_nandMODE instruction pattern: Standard Names.     (line 1646)
48605* sync_old_subMODE instruction pattern:  Standard Names.     (line 1646)
48606* sync_old_xorMODE instruction pattern:  Standard Names.     (line 1646)
48607* sync_subMODE instruction pattern:      Standard Names.     (line 1631)
48608* sync_xorMODE instruction pattern:      Standard Names.     (line 1631)
48609* SYSROOT_HEADERS_SUFFIX_SPEC:           Driver.             (line  177)
48610* SYSROOT_SUFFIX_SPEC:                   Driver.             (line  172)
48611* t-TARGET:                              Target Fragment.    (line    6)
48612* table jump:                            Basic Blocks.       (line   67)
48613* tablejump instruction pattern:         Standard Names.     (line 1249)
48614* tag:                                   GTY Options.        (line   82)
48615* tagging insns:                         Tagging Insns.      (line    6)
48616* tail calls:                            Tail Calls.         (line    6)
48617* TAmode:                                Machine Modes.      (line  156)
48618* target attributes:                     Target Attributes.  (line    6)
48619* target description macros:             Target Macros.      (line    6)
48620* target functions:                      Target Structure.   (line    6)
48621* target hooks:                          Target Structure.   (line    6)
48622* target makefile fragment:              Target Fragment.    (line    6)
48623* target specifications:                 Run-time Target.    (line    6)
48624* TARGET_ADDR_SPACE_ADDRESS_MODE:        Named Address Spaces.
48625                                                             (line   45)
48626* TARGET_ADDR_SPACE_CONVERT:             Named Address Spaces.
48627                                                             (line   88)
48628* TARGET_ADDR_SPACE_LEGITIMATE_ADDRESS_P: Named Address Spaces.
48629                                                             (line   63)
48630* TARGET_ADDR_SPACE_LEGITIMIZE_ADDRESS:  Named Address Spaces.
48631                                                             (line   72)
48632* TARGET_ADDR_SPACE_POINTER_MODE:        Named Address Spaces.
48633                                                             (line   38)
48634* TARGET_ADDR_SPACE_SUBSET_P:            Named Address Spaces.
48635                                                             (line   79)
48636* TARGET_ADDR_SPACE_VALID_POINTER_MODE:  Named Address Spaces.
48637                                                             (line   52)
48638* TARGET_ADDRESS_COST:                   Costs.              (line  302)
48639* TARGET_ALIGN_ANON_BITFIELD:            Storage Layout.     (line  398)
48640* TARGET_ALLOCATE_INITIAL_VALUE:         Misc.               (line  700)
48641* TARGET_ALLOCATE_STACK_SLOTS_FOR_ARGS:  Misc.               (line  980)
48642* TARGET_ALWAYS_STRIP_DOTDOT:            Driver.             (line  247)
48643* TARGET_ARG_PARTIAL_BYTES:              Register Arguments. (line   84)
48644* TARGET_ARM_EABI_UNWINDER:              Exception Region Output.
48645                                                             (line  129)
48646* TARGET_ARRAY_MODE_SUPPORTED_P:         Register Arguments. (line  337)
48647* TARGET_ASAN_SHADOW_OFFSET:             Misc.               (line 1008)
48648* TARGET_ASM_ALIGNED_DI_OP:              Data Output.        (line   10)
48649* TARGET_ASM_ALIGNED_HI_OP:              Data Output.        (line    8)
48650* TARGET_ASM_ALIGNED_SI_OP:              Data Output.        (line    9)
48651* TARGET_ASM_ALIGNED_TI_OP:              Data Output.        (line   11)
48652* TARGET_ASM_ASSEMBLE_VISIBILITY:        Label Output.       (line  271)
48653* TARGET_ASM_BYTE_OP:                    Data Output.        (line    7)
48654* TARGET_ASM_CAN_OUTPUT_MI_THUNK:        Function Entry.     (line  207)
48655* TARGET_ASM_CLOSE_PAREN:                Data Output.        (line  131)
48656* TARGET_ASM_CODE_END:                   File Framework.     (line   59)
48657* TARGET_ASM_CONSTRUCTOR:                Macros for Initialization.
48658                                                             (line   69)
48659* TARGET_ASM_DECLARE_CONSTANT_NAME:      Label Output.       (line  154)
48660* TARGET_ASM_DESTRUCTOR:                 Macros for Initialization.
48661                                                             (line   83)
48662* TARGET_ASM_EMIT_EXCEPT_PERSONALITY:    Dispatch Tables.    (line   82)
48663* TARGET_ASM_EMIT_EXCEPT_TABLE_LABEL:    Dispatch Tables.    (line   74)
48664* TARGET_ASM_EMIT_UNWIND_LABEL:          Dispatch Tables.    (line   63)
48665* TARGET_ASM_EXTERNAL_LIBCALL:           Label Output.       (line  306)
48666* TARGET_ASM_FILE_END:                   File Framework.     (line   37)
48667* TARGET_ASM_FILE_START:                 File Framework.     (line    9)
48668* TARGET_ASM_FILE_START_APP_OFF:         File Framework.     (line   17)
48669* TARGET_ASM_FILE_START_FILE_DIRECTIVE:  File Framework.     (line   31)
48670* TARGET_ASM_FINAL_POSTSCAN_INSN:        Instruction Output. (line   84)
48671* TARGET_ASM_FUNCTION_BEGIN_EPILOGUE:    Function Entry.     (line   61)
48672* TARGET_ASM_FUNCTION_END_PROLOGUE:      Function Entry.     (line   55)
48673* TARGET_ASM_FUNCTION_EPILOGUE:          Function Entry.     (line   68)
48674* TARGET_ASM_FUNCTION_PROLOGUE:          Function Entry.     (line   11)
48675* TARGET_ASM_FUNCTION_RODATA_SECTION:    Sections.           (line  215)
48676* TARGET_ASM_FUNCTION_SECTION:           File Framework.     (line  124)
48677* TARGET_ASM_FUNCTION_SWITCHED_TEXT_SECTIONS: File Framework.
48678                                                             (line  134)
48679* TARGET_ASM_GLOBALIZE_DECL_NAME:        Label Output.       (line  199)
48680* TARGET_ASM_GLOBALIZE_LABEL:            Label Output.       (line  190)
48681* TARGET_ASM_INIT_SECTIONS:              Sections.           (line  160)
48682* TARGET_ASM_INTEGER:                    Data Output.        (line   27)
48683* TARGET_ASM_INTERNAL_LABEL:             Label Output.       (line  350)
48684* TARGET_ASM_JUMP_ALIGN_MAX_SKIP:        Alignment Output.   (line   22)
48685* TARGET_ASM_LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP: Alignment Output.
48686                                                             (line   36)
48687* TARGET_ASM_LABEL_ALIGN_MAX_SKIP:       Alignment Output.   (line   69)
48688* TARGET_ASM_LOOP_ALIGN_MAX_SKIP:        Alignment Output.   (line   54)
48689* TARGET_ASM_LTO_END:                    File Framework.     (line   54)
48690* TARGET_ASM_LTO_START:                  File Framework.     (line   49)
48691* TARGET_ASM_MARK_DECL_PRESERVED:        Label Output.       (line  313)
48692* TARGET_ASM_MERGEABLE_RODATA_PREFIX:    Sections.           (line  222)
48693* TARGET_ASM_NAMED_SECTION:              File Framework.     (line  116)
48694* TARGET_ASM_OPEN_PAREN:                 Data Output.        (line  130)
48695* TARGET_ASM_OUTPUT_ADDR_CONST_EXTRA:    Data Output.        (line   40)
48696* TARGET_ASM_OUTPUT_ANCHOR:              Anchored Addresses. (line   44)
48697* TARGET_ASM_OUTPUT_DWARF_DTPREL:        SDB and DWARF.      (line  101)
48698* TARGET_ASM_OUTPUT_IDENT:               File Framework.     (line  102)
48699* TARGET_ASM_OUTPUT_MI_THUNK:            Function Entry.     (line  165)
48700* TARGET_ASM_OUTPUT_SOURCE_FILENAME:     File Framework.     (line   94)
48701* TARGET_ASM_RECORD_GCC_SWITCHES:        File Framework.     (line  165)
48702* TARGET_ASM_RECORD_GCC_SWITCHES_SECTION: File Framework.    (line  209)
48703* TARGET_ASM_RELOC_RW_MASK:              Sections.           (line  169)
48704* TARGET_ASM_SELECT_RTX_SECTION:         Sections.           (line  232)
48705* TARGET_ASM_SELECT_SECTION:             Sections.           (line  181)
48706* TARGET_ASM_TM_CLONE_TABLE_SECTION:     Sections.           (line  227)
48707* TARGET_ASM_TRAMPOLINE_TEMPLATE:        Trampolines.        (line   29)
48708* TARGET_ASM_TTYPE:                      Exception Region Output.
48709                                                             (line  123)
48710* TARGET_ASM_UNALIGNED_DI_OP:            Data Output.        (line   14)
48711* TARGET_ASM_UNALIGNED_HI_OP:            Data Output.        (line   12)
48712* TARGET_ASM_UNALIGNED_SI_OP:            Data Output.        (line   13)
48713* TARGET_ASM_UNALIGNED_TI_OP:            Data Output.        (line   15)
48714* TARGET_ASM_UNIQUE_SECTION:             Sections.           (line  202)
48715* TARGET_ASM_UNWIND_EMIT:                Dispatch Tables.    (line   88)
48716* TARGET_ASM_UNWIND_EMIT_BEFORE_INSN:    Dispatch Tables.    (line   93)
48717* TARGET_ATOMIC_TEST_AND_SET_TRUEVAL:    Misc.               (line 1018)
48718* TARGET_ATTRIBUTE_TABLE:                Target Attributes.  (line   11)
48719* TARGET_ATTRIBUTE_TAKES_IDENTIFIER_P:   Target Attributes.  (line   19)
48720* TARGET_BINDS_LOCAL_P:                  Sections.           (line  309)
48721* TARGET_BRANCH_TARGET_REGISTER_CALLEE_SAVED: Misc.          (line  797)
48722* TARGET_BRANCH_TARGET_REGISTER_CLASS:   Misc.               (line  789)
48723* TARGET_BUILD_BUILTIN_VA_LIST:          Register Arguments. (line  273)
48724* TARGET_BUILTIN_DECL:                   Misc.               (line  597)
48725* TARGET_BUILTIN_RECIPROCAL:             Addressing Modes.   (line  264)
48726* TARGET_BUILTIN_SETJMP_FRAME_VALUE:     Frame Layout.       (line  109)
48727* TARGET_C99_FUNCTIONS:                  Library Calls.      (line   71)
48728* TARGET_C_PREINCLUDE:                   Misc.               (line  362)
48729* TARGET_CALLEE_COPIES:                  Register Arguments. (line  116)
48730* TARGET_CAN_ELIMINATE:                  Elimination.        (line   75)
48731* TARGET_CAN_FOLLOW_JUMP:                Misc.               (line  687)
48732* TARGET_CAN_INLINE_P:                   Target Attributes.  (line  158)
48733* TARGET_CANNOT_FORCE_CONST_MEM:         Addressing Modes.   (line  237)
48734* TARGET_CANNOT_MODIFY_JUMPS_P:          Misc.               (line  776)
48735* TARGET_CANONICAL_VA_LIST_TYPE:         Register Arguments. (line  294)
48736* TARGET_CANONICALIZE_COMPARISON:        MODE_CC Condition Codes.
48737                                                             (line   58)
48738* TARGET_CASE_VALUES_THRESHOLD:          Misc.               (line   47)
48739* TARGET_CC_MODES_COMPATIBLE:            MODE_CC Condition Codes.
48740                                                             (line  123)
48741* TARGET_CHECK_PCH_TARGET_FLAGS:         PCH Target.         (line   28)
48742* TARGET_CHECK_STRING_OBJECT_FORMAT_ARG: Run-time Target.    (line  121)
48743* TARGET_CLASS_LIKELY_SPILLED_P:         Register Classes.   (line  494)
48744* TARGET_CLASS_MAX_NREGS:                Register Classes.   (line  511)
48745* TARGET_COMMUTATIVE_P:                  Misc.               (line  693)
48746* TARGET_COMP_TYPE_ATTRIBUTES:           Target Attributes.  (line   27)
48747* TARGET_COMPARE_VERSION_PRIORITY:       Misc.               (line  637)
48748* TARGET_CONDITIONAL_REGISTER_USAGE:     Register Basics.    (line   60)
48749* TARGET_CONST_ANCHOR:                   Misc.               (line  991)
48750* TARGET_CONST_NOT_OK_FOR_DEBUG_P:       Addressing Modes.   (line  232)
48751* TARGET_CONVERT_TO_TYPE:                Misc.               (line  944)
48752* TARGET_CPU_CPP_BUILTINS:               Run-time Target.    (line    9)
48753* TARGET_CXX_ADJUST_CLASS_AT_DEFINITION: C++ ABI.            (line   87)
48754* TARGET_CXX_CDTOR_RETURNS_THIS:         C++ ABI.            (line   38)
48755* TARGET_CXX_CLASS_DATA_ALWAYS_COMDAT:   C++ ABI.            (line   62)
48756* TARGET_CXX_COOKIE_HAS_SIZE:            C++ ABI.            (line   25)
48757* TARGET_CXX_DECL_MANGLING_CONTEXT:      C++ ABI.            (line   93)
48758* TARGET_CXX_DETERMINE_CLASS_DATA_VISIBILITY: C++ ABI.       (line   54)
48759* TARGET_CXX_GET_COOKIE_SIZE:            C++ ABI.            (line   18)
48760* TARGET_CXX_GUARD_MASK_BIT:             C++ ABI.            (line   12)
48761* TARGET_CXX_GUARD_TYPE:                 C++ ABI.            (line    7)
48762* TARGET_CXX_IMPORT_EXPORT_CLASS:        C++ ABI.            (line   30)
48763* TARGET_CXX_KEY_METHOD_MAY_BE_INLINE:   C++ ABI.            (line   43)
48764* TARGET_CXX_LIBRARY_RTTI_COMDAT:        C++ ABI.            (line   69)
48765* TARGET_CXX_USE_AEABI_ATEXIT:           C++ ABI.            (line   74)
48766* TARGET_CXX_USE_ATEXIT_FOR_CXA_ATEXIT:  C++ ABI.            (line   80)
48767* TARGET_DEBUG_UNWIND_INFO:              SDB and DWARF.      (line   37)
48768* TARGET_DECIMAL_FLOAT_SUPPORTED_P:      Storage Layout.     (line  524)
48769* TARGET_DECLSPEC:                       Target Attributes.  (line   73)
48770* TARGET_DEFAULT_PACK_STRUCT:            Misc.               (line  440)
48771* TARGET_DEFAULT_SHORT_ENUMS:            Type Layout.        (line  167)
48772* TARGET_DEFAULT_TARGET_FLAGS:           Run-time Target.    (line   56)
48773* TARGET_DEFERRED_OUTPUT_DEFS:           Label Output.       (line  434)
48774* TARGET_DELAY_SCHED2:                   SDB and DWARF.      (line   66)
48775* TARGET_DELAY_VARTRACK:                 SDB and DWARF.      (line   70)
48776* TARGET_DELEGITIMIZE_ADDRESS:           Addressing Modes.   (line  223)
48777* TARGET_DIFFERENT_ADDR_DISPLACEMENT_P:  Register Classes.   (line  570)
48778* TARGET_DLLIMPORT_DECL_ATTRIBUTES:      Target Attributes.  (line   55)
48779* TARGET_DWARF_CALLING_CONVENTION:       SDB and DWARF.      (line   18)
48780* TARGET_DWARF_HANDLE_FRAME_UNSPEC:      Frame Layout.       (line  172)
48781* TARGET_DWARF_REGISTER_SPAN:            Exception Region Output.
48782                                                             (line  106)
48783* TARGET_EDOM:                           Library Calls.      (line   53)
48784* TARGET_EMUTLS_DEBUG_FORM_TLS_ADDRESS:  Emulated TLS.       (line   68)
48785* TARGET_EMUTLS_GET_ADDRESS:             Emulated TLS.       (line   19)
48786* TARGET_EMUTLS_REGISTER_COMMON:         Emulated TLS.       (line   24)
48787* TARGET_EMUTLS_TMPL_PREFIX:             Emulated TLS.       (line   45)
48788* TARGET_EMUTLS_TMPL_SECTION:            Emulated TLS.       (line   36)
48789* TARGET_EMUTLS_VAR_ALIGN_FIXED:         Emulated TLS.       (line   63)
48790* TARGET_EMUTLS_VAR_FIELDS:              Emulated TLS.       (line   49)
48791* TARGET_EMUTLS_VAR_INIT:                Emulated TLS.       (line   57)
48792* TARGET_EMUTLS_VAR_PREFIX:              Emulated TLS.       (line   41)
48793* TARGET_EMUTLS_VAR_SECTION:             Emulated TLS.       (line   31)
48794* TARGET_ENCODE_SECTION_INFO:            Sections.           (line  253)
48795* TARGET_ENCODE_SECTION_INFO and address validation: Addressing Modes.
48796                                                             (line   83)
48797* TARGET_ENCODE_SECTION_INFO usage:      Instruction Output. (line  128)
48798* TARGET_ENUM_VA_LIST_P:                 Register Arguments. (line  278)
48799* TARGET_EXCEPT_UNWIND_INFO:             Exception Region Output.
48800                                                             (line   48)
48801* TARGET_EXECUTABLE_SUFFIX:              Misc.               (line  750)
48802* TARGET_EXPAND_BUILTIN:                 Misc.               (line  607)
48803* TARGET_EXPAND_BUILTIN_SAVEREGS:        Varargs.            (line   67)
48804* TARGET_EXPAND_TO_RTL_HOOK:             Storage Layout.     (line  530)
48805* TARGET_EXPR:                           Unary and Binary Expressions.
48806                                                             (line    6)
48807* TARGET_EXTRA_INCLUDES:                 Misc.               (line  837)
48808* TARGET_EXTRA_LIVE_ON_ENTRY:            Tail Calls.         (line   21)
48809* TARGET_EXTRA_PRE_INCLUDES:             Misc.               (line  844)
48810* TARGET_FIXED_CONDITION_CODE_REGS:      MODE_CC Condition Codes.
48811                                                             (line  108)
48812* TARGET_FIXED_POINT_SUPPORTED_P:        Storage Layout.     (line  527)
48813* target_flags:                          Run-time Target.    (line   52)
48814* TARGET_FLAGS_REGNUM:                   MODE_CC Condition Codes.
48815                                                             (line  135)
48816* TARGET_FLT_EVAL_METHOD:                Type Layout.        (line  148)
48817* TARGET_FN_ABI_VA_LIST:                 Register Arguments. (line  289)
48818* TARGET_FOLD_BUILTIN:                   Misc.               (line  628)
48819* TARGET_FORCE_AT_COMP_DIR:              SDB and DWARF.      (line   61)
48820* TARGET_FORMAT_TYPES:                   Misc.               (line  864)
48821* TARGET_FRAME_POINTER_REQUIRED:         Elimination.        (line    9)
48822* TARGET_FUNCTION_ARG:                   Register Arguments. (line   12)
48823* TARGET_FUNCTION_ARG_ADVANCE:           Register Arguments. (line  187)
48824* TARGET_FUNCTION_ARG_BOUNDARY:          Register Arguments. (line  241)
48825* TARGET_FUNCTION_ARG_ROUND_BOUNDARY:    Register Arguments. (line  247)
48826* TARGET_FUNCTION_ATTRIBUTE_INLINABLE_P: Target Attributes.  (line   95)
48827* TARGET_FUNCTION_INCOMING_ARG:          Register Arguments. (line   68)
48828* TARGET_FUNCTION_OK_FOR_SIBCALL:        Tail Calls.         (line    8)
48829* TARGET_FUNCTION_VALUE:                 Scalar Return.      (line   11)
48830* TARGET_FUNCTION_VALUE_REGNO_P:         Scalar Return.      (line   97)
48831* TARGET_GENERATE_VERSION_DISPATCHER_BODY: Misc.             (line  654)
48832* TARGET_GET_DRAP_RTX:                   Misc.               (line  974)
48833* TARGET_GET_FUNCTION_VERSIONS_DISPATCHER: Misc.             (line  647)
48834* TARGET_GET_PCH_VALIDITY:               PCH Target.         (line    7)
48835* TARGET_GET_RAW_ARG_MODE:               Aggregate Return.   (line   83)
48836* TARGET_GET_RAW_RESULT_MODE:            Aggregate Return.   (line   78)
48837* TARGET_GIMPLIFY_VA_ARG_EXPR:           Register Arguments. (line  300)
48838* TARGET_HANDLE_C_OPTION:                Run-time Target.    (line   75)
48839* TARGET_HANDLE_OPTION:                  Run-time Target.    (line   62)
48840* TARGET_HARD_REGNO_SCRATCH_OK:          Values in Registers.
48841                                                             (line  144)
48842* TARGET_HAS_SINCOS:                     Library Calls.      (line   79)
48843* TARGET_HAVE_CONDITIONAL_EXECUTION:     Misc.               (line  811)
48844* TARGET_HAVE_CTORS_DTORS:               Macros for Initialization.
48845                                                             (line   64)
48846* TARGET_HAVE_NAMED_SECTIONS:            File Framework.     (line  141)
48847* TARGET_HAVE_SRODATA_SECTION:           Sections.           (line  298)
48848* TARGET_HAVE_SWITCHABLE_BSS_SECTIONS:   File Framework.     (line  146)
48849* TARGET_HAVE_TLS:                       Sections.           (line  318)
48850* TARGET_IN_SMALL_DATA_P:                Sections.           (line  294)
48851* TARGET_INIT_BUILTINS:                  Misc.               (line  580)
48852* TARGET_INIT_DWARF_REG_SIZES_EXTRA:     Exception Region Output.
48853                                                             (line  115)
48854* TARGET_INIT_LIBFUNCS:                  Library Calls.      (line   16)
48855* TARGET_INSERT_ATTRIBUTES:              Target Attributes.  (line   82)
48856* TARGET_INSTANTIATE_DECLS:              Storage Layout.     (line  538)
48857* TARGET_INVALID_ARG_FOR_UNPROTOTYPED_FN: Misc.              (line  898)
48858* TARGET_INVALID_BINARY_OP:              Misc.               (line  917)
48859* TARGET_INVALID_CONVERSION:             Misc.               (line  904)
48860* TARGET_INVALID_PARAMETER_TYPE:         Misc.               (line  923)
48861* TARGET_INVALID_RETURN_TYPE:            Misc.               (line  930)
48862* TARGET_INVALID_UNARY_OP:               Misc.               (line  910)
48863* TARGET_INVALID_WITHIN_DOLOOP:          Misc.               (line  661)
48864* TARGET_LEGITIMATE_ADDRESS_P:           Addressing Modes.   (line   50)
48865* TARGET_LEGITIMATE_COMBINED_INSN:       Misc.               (line  673)
48866* TARGET_LEGITIMATE_CONSTANT_P:          Addressing Modes.   (line  216)
48867* TARGET_LEGITIMIZE_ADDRESS:             Addressing Modes.   (line  132)
48868* TARGET_LIB_INT_CMP_BIASED:             Library Calls.      (line   43)
48869* TARGET_LIBCALL_VALUE:                  Scalar Return.      (line   66)
48870* TARGET_LIBFUNC_GNU_PREFIX:             Library Calls.      (line   25)
48871* TARGET_LIBGCC_CMP_RETURN_MODE:         Storage Layout.     (line  461)
48872* TARGET_LIBGCC_SDATA_SECTION:           Sections.           (line  132)
48873* TARGET_LIBGCC_SHIFT_COUNT_MODE:        Storage Layout.     (line  467)
48874* TARGET_LOOP_UNROLL_ADJUST:             Misc.               (line  818)
48875* TARGET_LRA_P:                          Register Classes.   (line  553)
48876* TARGET_MACHINE_DEPENDENT_REORG:        Misc.               (line  565)
48877* TARGET_MANGLE_ASSEMBLER_NAME:          Label Output.       (line  325)
48878* TARGET_MANGLE_DECL_ASSEMBLER_NAME:     Sections.           (line  243)
48879* TARGET_MANGLE_TYPE:                    Storage Layout.     (line  542)
48880* TARGET_MAX_ANCHOR_OFFSET:              Anchored Addresses. (line   39)
48881* TARGET_MD_ASM_CLOBBERS:                Misc.               (line  486)
48882* TARGET_MEM_CONSTRAINT:                 Addressing Modes.   (line  109)
48883* TARGET_MEM_REF:                        Storage References. (line    6)
48884* TARGET_MEMBER_TYPE_FORCES_BLK:         Storage Layout.     (line  413)
48885* TARGET_MEMMODEL_CHECK:                 Misc.               (line 1014)
48886* TARGET_MEMORY_MOVE_COST:               Costs.              (line   81)
48887* TARGET_MERGE_DECL_ATTRIBUTES:          Target Attributes.  (line   47)
48888* TARGET_MERGE_TYPE_ATTRIBUTES:          Target Attributes.  (line   39)
48889* TARGET_MIN_ANCHOR_OFFSET:              Anchored Addresses. (line   33)
48890* TARGET_MIN_DIVISIONS_FOR_RECIP_MUL:    Misc.               (line   92)
48891* TARGET_MODE_DEPENDENT_ADDRESS_P:       Addressing Modes.   (line  199)
48892* TARGET_MODE_REP_EXTENDED:              Misc.               (line  177)
48893* TARGET_MS_BITFIELD_LAYOUT_P:           Storage Layout.     (line  497)
48894* TARGET_MUST_PASS_IN_STACK:             Register Arguments. (line   61)
48895* TARGET_MUST_PASS_IN_STACK, and TARGET_FUNCTION_ARG: Register Arguments.
48896                                                             (line   51)
48897* TARGET_N_FORMAT_TYPES:                 Misc.               (line  869)
48898* TARGET_NARROW_VOLATILE_BITFIELD:       Storage Layout.     (line  404)
48899* TARGET_OBJC_CONSTRUCT_STRING_OBJECT:   Run-time Target.    (line   90)
48900* TARGET_OBJC_DECLARE_CLASS_DEFINITION:  Run-time Target.    (line  111)
48901* TARGET_OBJC_DECLARE_UNRESOLVED_CLASS_REFERENCE: Run-time Target.
48902                                                             (line  106)
48903* TARGET_OBJECT_SUFFIX:                  Misc.               (line  745)
48904* TARGET_OBJFMT_CPP_BUILTINS:            Run-time Target.    (line   46)
48905* TARGET_OPTF:                           Misc.               (line  851)
48906* TARGET_OPTION_DEFAULT_PARAMS:          Run-time Target.    (line  161)
48907* TARGET_OPTION_FUNCTION_VERSIONS:       Target Attributes.  (line  151)
48908* TARGET_OPTION_INIT_STRUCT:             Run-time Target.    (line  158)
48909* TARGET_OPTION_OPTIMIZATION_TABLE:      Run-time Target.    (line  144)
48910* TARGET_OPTION_OVERRIDE:                Target Attributes.  (line  137)
48911* TARGET_OPTION_PRAGMA_PARSE:            Target Attributes.  (line  131)
48912* TARGET_OPTION_PRINT:                   Target Attributes.  (line  125)
48913* TARGET_OPTION_RESTORE:                 Target Attributes.  (line  119)
48914* TARGET_OPTION_SAVE:                    Target Attributes.  (line  113)
48915* TARGET_OPTION_VALID_ATTRIBUTE_P:       Target Attributes.  (line  102)
48916* TARGET_OS_CPP_BUILTINS:                Run-time Target.    (line   42)
48917* TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE:  Run-time Target.    (line  127)
48918* TARGET_OVERRIDES_FORMAT_ATTRIBUTES:    Misc.               (line  873)
48919* TARGET_OVERRIDES_FORMAT_ATTRIBUTES_COUNT: Misc.            (line  879)
48920* TARGET_OVERRIDES_FORMAT_INIT:          Misc.               (line  883)
48921* TARGET_PASS_BY_REFERENCE:              Register Arguments. (line  104)
48922* TARGET_PCH_VALID_P:                    PCH Target.         (line   13)
48923* TARGET_POSIX_IO:                       Misc.               (line  510)
48924* TARGET_PREFERRED_OUTPUT_RELOAD_CLASS:  Register Classes.   (line  289)
48925* TARGET_PREFERRED_RELOAD_CLASS:         Register Classes.   (line  218)
48926* TARGET_PREFERRED_RENAME_CLASS:         Register Classes.   (line  206)
48927* TARGET_PREPARE_PCH_SAVE:               PCH Target.         (line   35)
48928* TARGET_PRETEND_OUTGOING_VARARGS_NAMED: Varargs.            (line  128)
48929* TARGET_PROFILE_BEFORE_PROLOGUE:        Sections.           (line  302)
48930* TARGET_PROMOTE_FUNCTION_MODE:          Storage Layout.     (line  118)
48931* TARGET_PROMOTE_PROTOTYPES:             Stack Arguments.    (line   11)
48932* TARGET_PROMOTED_TYPE:                  Misc.               (line  936)
48933* TARGET_PTRMEMFUNC_VBIT_LOCATION:       Type Layout.        (line  295)
48934* TARGET_REF_MAY_ALIAS_ERRNO:            Register Arguments. (line  311)
48935* TARGET_REGISTER_MOVE_COST:             Costs.              (line   33)
48936* TARGET_REGISTER_PRIORITY:              Register Classes.   (line  558)
48937* TARGET_RELAXED_ORDERING:               Misc.               (line  888)
48938* TARGET_RESOLVE_OVERLOADED_BUILTIN:     Misc.               (line  617)
48939* TARGET_RETURN_IN_MEMORY:               Aggregate Return.   (line   17)
48940* TARGET_RETURN_IN_MSB:                  Scalar Return.      (line  117)
48941* TARGET_RETURN_POPS_ARGS:               Stack Arguments.    (line  100)
48942* TARGET_RTX_COSTS:                      Costs.              (line  271)
48943* TARGET_SCALAR_MODE_SUPPORTED_P:        Register Arguments. (line  319)
48944* TARGET_SCHED_ADJUST_COST:              Scheduling.         (line   37)
48945* TARGET_SCHED_ADJUST_PRIORITY:          Scheduling.         (line   52)
48946* TARGET_SCHED_ALLOC_SCHED_CONTEXT:      Scheduling.         (line  274)
48947* TARGET_SCHED_CLEAR_SCHED_CONTEXT:      Scheduling.         (line  289)
48948* TARGET_SCHED_DEPENDENCIES_EVALUATION_HOOK: Scheduling.     (line   89)
48949* TARGET_SCHED_DFA_NEW_CYCLE:            Scheduling.         (line  235)
48950* TARGET_SCHED_DFA_POST_ADVANCE_CYCLE:   Scheduling.         (line  160)
48951* TARGET_SCHED_DFA_POST_CYCLE_INSN:      Scheduling.         (line  144)
48952* TARGET_SCHED_DFA_PRE_ADVANCE_CYCLE:    Scheduling.         (line  153)
48953* TARGET_SCHED_DFA_PRE_CYCLE_INSN:       Scheduling.         (line  132)
48954* TARGET_SCHED_DISPATCH:                 Scheduling.         (line  355)
48955* TARGET_SCHED_DISPATCH_DO:              Scheduling.         (line  360)
48956* TARGET_SCHED_EXPOSED_PIPELINE:         Scheduling.         (line  364)
48957* TARGET_SCHED_FINISH:                   Scheduling.         (line  109)
48958* TARGET_SCHED_FINISH_GLOBAL:            Scheduling.         (line  126)
48959* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_BACKTRACK: Scheduling.  (line  215)
48960* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_BEGIN: Scheduling.      (line  204)
48961* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD: Scheduling.
48962                                                             (line  168)
48963* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD: Scheduling.
48964                                                             (line  196)
48965* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD_SPEC: Scheduling.
48966                                                             (line  328)
48967* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_END: Scheduling.        (line  220)
48968* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_FINI: Scheduling.       (line  230)
48969* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_INIT: Scheduling.       (line  225)
48970* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_ISSUE: Scheduling.      (line  210)
48971* TARGET_SCHED_FREE_SCHED_CONTEXT:       Scheduling.         (line  293)
48972* TARGET_SCHED_GEN_SPEC_CHECK:           Scheduling.         (line  315)
48973* TARGET_SCHED_H_I_D_EXTENDED:           Scheduling.         (line  269)
48974* TARGET_SCHED_INIT:                     Scheduling.         (line   99)
48975* TARGET_SCHED_INIT_DFA_POST_CYCLE_INSN: Scheduling.         (line  149)
48976* TARGET_SCHED_INIT_DFA_PRE_CYCLE_INSN:  Scheduling.         (line  141)
48977* TARGET_SCHED_INIT_GLOBAL:              Scheduling.         (line  118)
48978* TARGET_SCHED_INIT_SCHED_CONTEXT:       Scheduling.         (line  279)
48979* TARGET_SCHED_IS_COSTLY_DEPENDENCE:     Scheduling.         (line  246)
48980* TARGET_SCHED_ISSUE_RATE:               Scheduling.         (line   12)
48981* TARGET_SCHED_NEEDS_BLOCK_P:            Scheduling.         (line  308)
48982* TARGET_SCHED_REASSOCIATION_WIDTH:      Scheduling.         (line  370)
48983* TARGET_SCHED_REORDER:                  Scheduling.         (line   60)
48984* TARGET_SCHED_REORDER2:                 Scheduling.         (line   77)
48985* TARGET_SCHED_SET_SCHED_CONTEXT:        Scheduling.         (line  285)
48986* TARGET_SCHED_SET_SCHED_FLAGS:          Scheduling.         (line  340)
48987* TARGET_SCHED_SMS_RES_MII:              Scheduling.         (line  346)
48988* TARGET_SCHED_SPECULATE_INSN:           Scheduling.         (line  297)
48989* TARGET_SCHED_VARIABLE_ISSUE:           Scheduling.         (line   24)
48990* TARGET_SECONDARY_RELOAD:               Register Classes.   (line  318)
48991* TARGET_SECTION_TYPE_FLAGS:             File Framework.     (line  152)
48992* TARGET_SET_CURRENT_FUNCTION:           Misc.               (line  727)
48993* TARGET_SET_DEFAULT_TYPE_ATTRIBUTES:    Target Attributes.  (line   34)
48994* TARGET_SET_UP_BY_PROLOGUE:             Tail Calls.         (line   31)
48995* TARGET_SETUP_INCOMING_VARARGS:         Varargs.            (line   76)
48996* TARGET_SHIFT_TRUNCATION_MASK:          Misc.               (line  140)
48997* TARGET_SMALL_REGISTER_CLASSES_FOR_MODE_P: Register Arguments.
48998                                                             (line  361)
48999* TARGET_SPILL_CLASS:                    Register Classes.   (line  578)
49000* TARGET_SPLIT_COMPLEX_ARG:              Register Arguments. (line  261)
49001* TARGET_STACK_PROTECT_FAIL:             Stack Smashing Protection.
49002                                                             (line   17)
49003* TARGET_STACK_PROTECT_GUARD:            Stack Smashing Protection.
49004                                                             (line    7)
49005* TARGET_STATIC_CHAIN:                   Frame Registers.    (line   92)
49006* TARGET_STRICT_ARGUMENT_NAMING:         Varargs.            (line  112)
49007* TARGET_STRING_OBJECT_REF_TYPE_P:       Run-time Target.    (line  116)
49008* TARGET_STRIP_NAME_ENCODING:            Sections.           (line  290)
49009* TARGET_STRUCT_VALUE_RTX:               Aggregate Return.   (line   45)
49010* TARGET_SUPPORTS_SPLIT_STACK:           Stack Smashing Protection.
49011                                                             (line   27)
49012* TARGET_SUPPORTS_WEAK:                  Label Output.       (line  241)
49013* TARGET_TERMINATE_DW2_EH_FRAME_INFO:    Exception Region Output.
49014                                                             (line  100)
49015* TARGET_TRAMPOLINE_ADJUST_ADDRESS:      Trampolines.        (line   75)
49016* TARGET_TRAMPOLINE_INIT:                Trampolines.        (line   56)
49017* TARGET_UNSPEC_MAY_TRAP_P:              Misc.               (line  719)
49018* TARGET_UNWIND_TABLES_DEFAULT:          Exception Region Output.
49019                                                             (line   74)
49020* TARGET_UNWIND_WORD_MODE:               Storage Layout.     (line  473)
49021* TARGET_UPDATE_STACK_BOUNDARY:          Misc.               (line  970)
49022* TARGET_USE_ANCHORS_FOR_SYMBOL_P:       Anchored Addresses. (line   55)
49023* TARGET_USE_BLOCKS_FOR_CONSTANT_P:      Addressing Modes.   (line  251)
49024* TARGET_USE_BLOCKS_FOR_DECL_P:          Addressing Modes.   (line  257)
49025* TARGET_USE_JCR_SECTION:                Misc.               (line  952)
49026* TARGET_USES_WEAK_UNWIND_INFO:          Exception Handling. (line  126)
49027* TARGET_VALID_DLLIMPORT_ATTRIBUTE_P:    Target Attributes.  (line   68)
49028* TARGET_VALID_POINTER_MODE:             Register Arguments. (line  306)
49029* TARGET_VECTOR_ALIGNMENT:               Storage Layout.     (line  264)
49030* TARGET_VECTOR_MODE_SUPPORTED_P:        Register Arguments. (line  331)
49031* TARGET_VECTORIZE_ADD_STMT_COST:        Addressing Modes.   (line  373)
49032* TARGET_VECTORIZE_AUTOVECTORIZE_VECTOR_SIZES: Addressing Modes.
49033                                                             (line  353)
49034* TARGET_VECTORIZE_BUILTIN_CONVERSION:   Addressing Modes.   (line  315)
49035* TARGET_VECTORIZE_BUILTIN_GATHER:       Addressing Modes.   (line  404)
49036* TARGET_VECTORIZE_BUILTIN_MASK_FOR_LOAD: Addressing Modes.  (line  273)
49037* TARGET_VECTORIZE_BUILTIN_TM_LOAD:      Addressing Modes.   (line  395)
49038* TARGET_VECTORIZE_BUILTIN_TM_STORE:     Addressing Modes.   (line  399)
49039* TARGET_VECTORIZE_BUILTIN_VECTORIZATION_COST: Addressing Modes.
49040                                                             (line  300)
49041* TARGET_VECTORIZE_BUILTIN_VECTORIZED_FUNCTION: Addressing Modes.
49042                                                             (line  327)
49043* TARGET_VECTORIZE_DESTROY_COST_DATA:    Addressing Modes.   (line  390)
49044* TARGET_VECTORIZE_FINISH_COST:          Addressing Modes.   (line  384)
49045* TARGET_VECTORIZE_INIT_COST:            Addressing Modes.   (line  361)
49046* TARGET_VECTORIZE_PREFERRED_SIMD_MODE:  Addressing Modes.   (line  346)
49047* TARGET_VECTORIZE_SUPPORT_VECTOR_MISALIGNMENT: Addressing Modes.
49048                                                             (line  337)
49049* TARGET_VECTORIZE_VEC_PERM_CONST_OK:    Addressing Modes.   (line  311)
49050* TARGET_VECTORIZE_VECTOR_ALIGNMENT_REACHABLE: Addressing Modes.
49051                                                             (line  306)
49052* TARGET_VTABLE_DATA_ENTRY_DISTANCE:     Type Layout.        (line  348)
49053* TARGET_VTABLE_ENTRY_ALIGN:             Type Layout.        (line  342)
49054* TARGET_VTABLE_USES_DESCRIPTORS:        Type Layout.        (line  331)
49055* TARGET_WANT_DEBUG_PUB_SECTIONS:        SDB and DWARF.      (line   56)
49056* TARGET_WARN_FUNC_RETURN:               Tail Calls.         (line   36)
49057* TARGET_WEAK_NOT_IN_ARCHIVE_TOC:        Label Output.       (line  277)
49058* targetm:                               Target Structure.   (line    7)
49059* targets, makefile:                     Makefile.           (line    6)
49060* TCmode:                                Machine Modes.      (line  197)
49061* TDmode:                                Machine Modes.      (line   94)
49062* TEMPLATE_DECL:                         Declarations.       (line    6)
49063* Temporaries:                           Temporaries.        (line    6)
49064* termination routines:                  Initialization.     (line    6)
49065* testing constraints:                   C Constraint Interface.
49066                                                             (line    6)
49067* TEXT_SECTION_ASM_OP:                   Sections.           (line   38)
49068* TF_SIZE:                               Type Layout.        (line  139)
49069* TFmode:                                Machine Modes.      (line   98)
49070* THEN_CLAUSE:                           Statements for C++. (line    6)
49071* THREAD_MODEL_SPEC:                     Driver.             (line  163)
49072* THROW_EXPR:                            Unary and Binary Expressions.
49073                                                             (line    6)
49074* THUNK_DECL:                            Declarations.       (line    6)
49075* THUNK_DELTA:                           Declarations.       (line    6)
49076* TImode:                                Machine Modes.      (line   48)
49077* TImode, in insn:                       Insns.              (line  278)
49078* TLS_COMMON_ASM_OP:                     Sections.           (line   81)
49079* TLS_SECTION_ASM_FLAG:                  Sections.           (line   86)
49080* tm.h macros:                           Target Macros.      (line    6)
49081* TQFmode:                               Machine Modes.      (line   62)
49082* TQmode:                                Machine Modes.      (line  119)
49083* TRAMPOLINE_ALIGNMENT:                  Trampolines.        (line   49)
49084* TRAMPOLINE_SECTION:                    Trampolines.        (line   40)
49085* TRAMPOLINE_SIZE:                       Trampolines.        (line   45)
49086* trampolines for nested functions:      Trampolines.        (line    6)
49087* TRANSFER_FROM_TRAMPOLINE:              Trampolines.        (line  111)
49088* trap instruction pattern:              Standard Names.     (line 1542)
49089* tree <1>:                              Macros and Functions.
49090                                                             (line    6)
49091* tree:                                  Tree overview.      (line    6)
49092* Tree SSA:                              Tree SSA.           (line    6)
49093* TREE_CHAIN:                            Macros and Functions.
49094                                                             (line    6)
49095* TREE_CODE:                             Tree overview.      (line    6)
49096* tree_int_cst_equal:                    Constant expressions.
49097                                                             (line    6)
49098* TREE_INT_CST_HIGH:                     Constant expressions.
49099                                                             (line    6)
49100* TREE_INT_CST_LOW:                      Constant expressions.
49101                                                             (line    6)
49102* tree_int_cst_lt:                       Constant expressions.
49103                                                             (line    6)
49104* TREE_LIST:                             Containers.         (line    6)
49105* TREE_OPERAND:                          Expression trees.   (line    6)
49106* TREE_PUBLIC <1>:                       Function Properties.
49107                                                             (line   28)
49108* TREE_PUBLIC:                           Function Basics.    (line    6)
49109* TREE_PURPOSE:                          Containers.         (line    6)
49110* TREE_READONLY:                         Function Properties.
49111                                                             (line   37)
49112* tree_size:                             Macros and Functions.
49113                                                             (line   13)
49114* TREE_STATIC:                           Function Properties.
49115                                                             (line   31)
49116* TREE_STRING_LENGTH:                    Constant expressions.
49117                                                             (line    6)
49118* TREE_STRING_POINTER:                   Constant expressions.
49119                                                             (line    6)
49120* TREE_THIS_VOLATILE:                    Function Properties.
49121                                                             (line   34)
49122* TREE_TYPE <1>:                         Types for C++.      (line    6)
49123* TREE_TYPE <2>:                         Function Basics.    (line   47)
49124* TREE_TYPE <3>:                         Expression trees.   (line    6)
49125* TREE_TYPE <4>:                         Working with declarations.
49126                                                             (line   11)
49127* TREE_TYPE <5>:                         Types.              (line    6)
49128* TREE_TYPE:                             Macros and Functions.
49129                                                             (line    6)
49130* TREE_VALUE:                            Containers.         (line    6)
49131* TREE_VEC:                              Containers.         (line    6)
49132* TREE_VEC_ELT:                          Containers.         (line    6)
49133* TREE_VEC_LENGTH:                       Containers.         (line    6)
49134* TRULY_NOOP_TRUNCATION:                 Misc.               (line  163)
49135* TRUNC_DIV_EXPR:                        Unary and Binary Expressions.
49136                                                             (line    6)
49137* TRUNC_MOD_EXPR:                        Unary and Binary Expressions.
49138                                                             (line    6)
49139* truncate:                              Conversions.        (line   38)
49140* truncMN2 instruction pattern:          Standard Names.     (line  903)
49141* TRUTH_AND_EXPR:                        Unary and Binary Expressions.
49142                                                             (line    6)
49143* TRUTH_ANDIF_EXPR:                      Unary and Binary Expressions.
49144                                                             (line    6)
49145* TRUTH_NOT_EXPR:                        Unary and Binary Expressions.
49146                                                             (line    6)
49147* TRUTH_OR_EXPR:                         Unary and Binary Expressions.
49148                                                             (line    6)
49149* TRUTH_ORIF_EXPR:                       Unary and Binary Expressions.
49150                                                             (line    6)
49151* TRUTH_XOR_EXPR:                        Unary and Binary Expressions.
49152                                                             (line    6)
49153* TRY_BLOCK:                             Statements for C++. (line    6)
49154* TRY_HANDLERS:                          Statements for C++. (line    6)
49155* TRY_STMTS:                             Statements for C++. (line    6)
49156* Tuple specific accessors:              Tuple specific accessors.
49157                                                             (line    6)
49158* tuples:                                Tuple representation.
49159                                                             (line    6)
49160* type:                                  Types.              (line    6)
49161* type declaration:                      Declarations.       (line    6)
49162* TYPE_ALIGN <1>:                        Types for C++.      (line    6)
49163* TYPE_ALIGN:                            Types.              (line    6)
49164* TYPE_ARG_TYPES <1>:                    Types for C++.      (line    6)
49165* TYPE_ARG_TYPES:                        Types.              (line    6)
49166* TYPE_ASM_OP:                           Label Output.       (line   79)
49167* TYPE_ATTRIBUTES:                       Attributes.         (line   25)
49168* TYPE_BINFO:                            Classes.            (line    6)
49169* TYPE_BUILT_IN:                         Types for C++.      (line   68)
49170* TYPE_CANONICAL:                        Types.              (line    6)
49171* TYPE_CONTEXT <1>:                      Types for C++.      (line    6)
49172* TYPE_CONTEXT:                          Types.              (line    6)
49173* TYPE_DECL:                             Declarations.       (line    6)
49174* TYPE_FIELDS <1>:                       Classes.            (line    6)
49175* TYPE_FIELDS <2>:                       Types for C++.      (line    6)
49176* TYPE_FIELDS:                           Types.              (line    6)
49177* TYPE_HAS_ARRAY_NEW_OPERATOR:           Classes.            (line   96)
49178* TYPE_HAS_DEFAULT_CONSTRUCTOR:          Classes.            (line   81)
49179* TYPE_HAS_MUTABLE_P:                    Classes.            (line   86)
49180* TYPE_HAS_NEW_OPERATOR:                 Classes.            (line   93)
49181* TYPE_MAIN_VARIANT <1>:                 Types for C++.      (line    6)
49182* TYPE_MAIN_VARIANT:                     Types.              (line    6)
49183* TYPE_MAX_VALUE:                        Types.              (line    6)
49184* TYPE_METHOD_BASETYPE <1>:              Types for C++.      (line    6)
49185* TYPE_METHOD_BASETYPE:                  Types.              (line    6)
49186* TYPE_METHODS:                          Classes.            (line    6)
49187* TYPE_MIN_VALUE:                        Types.              (line    6)
49188* TYPE_NAME <1>:                         Types for C++.      (line    6)
49189* TYPE_NAME:                             Types.              (line    6)
49190* TYPE_NOTHROW_P:                        Functions for C++.  (line  154)
49191* TYPE_OFFSET_BASETYPE <1>:              Types for C++.      (line    6)
49192* TYPE_OFFSET_BASETYPE:                  Types.              (line    6)
49193* TYPE_OPERAND_FMT:                      Label Output.       (line   90)
49194* TYPE_OVERLOADS_ARRAY_REF:              Classes.            (line  104)
49195* TYPE_OVERLOADS_ARROW:                  Classes.            (line  107)
49196* TYPE_OVERLOADS_CALL_EXPR:              Classes.            (line  100)
49197* TYPE_POLYMORPHIC_P:                    Classes.            (line   77)
49198* TYPE_PRECISION <1>:                    Types for C++.      (line    6)
49199* TYPE_PRECISION:                        Types.              (line    6)
49200* TYPE_PTR_P:                            Types for C++.      (line   74)
49201* TYPE_PTRDATAMEM_P:                     Types for C++.      (line    6)
49202* TYPE_PTRFN_P:                          Types for C++.      (line   78)
49203* TYPE_PTROB_P:                          Types for C++.      (line   81)
49204* TYPE_PTROBV_P:                         Types for C++.      (line    6)
49205* TYPE_QUAL_CONST <1>:                   Types for C++.      (line    6)
49206* TYPE_QUAL_CONST:                       Types.              (line    6)
49207* TYPE_QUAL_RESTRICT <1>:                Types for C++.      (line    6)
49208* TYPE_QUAL_RESTRICT:                    Types.              (line    6)
49209* TYPE_QUAL_VOLATILE <1>:                Types for C++.      (line    6)
49210* TYPE_QUAL_VOLATILE:                    Types.              (line    6)
49211* TYPE_RAISES_EXCEPTIONS:                Functions for C++.  (line  149)
49212* TYPE_SIZE <1>:                         Types for C++.      (line    6)
49213* TYPE_SIZE:                             Types.              (line    6)
49214* TYPE_STRUCTURAL_EQUALITY_P:            Types.              (line    6)
49215* TYPE_UNQUALIFIED <1>:                  Types for C++.      (line    6)
49216* TYPE_UNQUALIFIED:                      Types.              (line    6)
49217* TYPE_VFIELD:                           Classes.            (line    6)
49218* TYPENAME_TYPE:                         Types for C++.      (line    6)
49219* TYPENAME_TYPE_FULLNAME <1>:            Types for C++.      (line    6)
49220* TYPENAME_TYPE_FULLNAME:                Types.              (line    6)
49221* TYPEOF_TYPE:                           Types for C++.      (line    6)
49222* UDAmode:                               Machine Modes.      (line  168)
49223* udiv:                                  Arithmetic.         (line  130)
49224* udivM3 instruction pattern:            Standard Names.     (line  269)
49225* udivmodM4 instruction pattern:         Standard Names.     (line  507)
49226* udot_prodM instruction pattern:        Standard Names.     (line  335)
49227* UDQmode:                               Machine Modes.      (line  136)
49228* UHAmode:                               Machine Modes.      (line  160)
49229* UHQmode:                               Machine Modes.      (line  128)
49230* UINT16_TYPE:                           Type Layout.        (line  258)
49231* UINT32_TYPE:                           Type Layout.        (line  259)
49232* UINT64_TYPE:                           Type Layout.        (line  260)
49233* UINT8_TYPE:                            Type Layout.        (line  257)
49234* UINT_FAST16_TYPE:                      Type Layout.        (line  274)
49235* UINT_FAST32_TYPE:                      Type Layout.        (line  275)
49236* UINT_FAST64_TYPE:                      Type Layout.        (line  276)
49237* UINT_FAST8_TYPE:                       Type Layout.        (line  273)
49238* UINT_LEAST16_TYPE:                     Type Layout.        (line  266)
49239* UINT_LEAST32_TYPE:                     Type Layout.        (line  267)
49240* UINT_LEAST64_TYPE:                     Type Layout.        (line  268)
49241* UINT_LEAST8_TYPE:                      Type Layout.        (line  265)
49242* UINTMAX_TYPE:                          Type Layout.        (line  241)
49243* UINTPTR_TYPE:                          Type Layout.        (line  278)
49244* umaddMN4 instruction pattern:          Standard Names.     (line  454)
49245* umax:                                  Arithmetic.         (line  149)
49246* umaxM3 instruction pattern:            Standard Names.     (line  269)
49247* umin:                                  Arithmetic.         (line  149)
49248* uminM3 instruction pattern:            Standard Names.     (line  269)
49249* umod:                                  Arithmetic.         (line  136)
49250* umodM3 instruction pattern:            Standard Names.     (line  269)
49251* umsubMN4 instruction pattern:          Standard Names.     (line  478)
49252* umulhisi3 instruction pattern:         Standard Names.     (line  426)
49253* umulM3_highpart instruction pattern:   Standard Names.     (line  440)
49254* umulqihi3 instruction pattern:         Standard Names.     (line  426)
49255* umulsidi3 instruction pattern:         Standard Names.     (line  426)
49256* unchanging:                            Flags.              (line  296)
49257* unchanging, in call_insn:              Flags.              (line   19)
49258* unchanging, in jump_insn, call_insn and insn: Flags.       (line   39)
49259* unchanging, in mem:                    Flags.              (line  134)
49260* unchanging, in subreg:                 Flags.              (line  170)
49261* unchanging, in symbol_ref:             Flags.              (line   10)
49262* UNEQ_EXPR:                             Unary and Binary Expressions.
49263                                                             (line    6)
49264* UNGE_EXPR:                             Unary and Binary Expressions.
49265                                                             (line    6)
49266* UNGT_EXPR:                             Unary and Binary Expressions.
49267                                                             (line    6)
49268* UNION_TYPE <1>:                        Classes.            (line    6)
49269* UNION_TYPE:                            Types.              (line    6)
49270* unions, returning:                     Interface.          (line   10)
49271* UNITS_PER_WORD:                        Storage Layout.     (line   66)
49272* UNKNOWN_TYPE <1>:                      Types for C++.      (line    6)
49273* UNKNOWN_TYPE:                          Types.              (line    6)
49274* UNLE_EXPR:                             Unary and Binary Expressions.
49275                                                             (line    6)
49276* UNLIKELY_EXECUTED_TEXT_SECTION_NAME:   Sections.           (line   49)
49277* UNLT_EXPR:                             Unary and Binary Expressions.
49278                                                             (line    6)
49279* UNORDERED_EXPR:                        Unary and Binary Expressions.
49280                                                             (line    6)
49281* unshare_all_rtl:                       Sharing.            (line   58)
49282* unsigned division:                     Arithmetic.         (line  130)
49283* unsigned division with unsigned saturation: Arithmetic.    (line  130)
49284* unsigned greater than:                 Comparisons.        (line   64)
49285* unsigned less than:                    Comparisons.        (line   68)
49286* unsigned minimum and maximum:          Arithmetic.         (line  149)
49287* unsigned_fix:                          Conversions.        (line   77)
49288* unsigned_float:                        Conversions.        (line   62)
49289* unsigned_fract_convert:                Conversions.        (line   97)
49290* unsigned_sat_fract:                    Conversions.        (line  103)
49291* unspec <1>:                            Constant Definitions.
49292                                                             (line  111)
49293* unspec:                                Side Effects.       (line  293)
49294* unspec_volatile <1>:                   Constant Definitions.
49295                                                             (line   99)
49296* unspec_volatile:                       Side Effects.       (line  293)
49297* untyped_call instruction pattern:      Standard Names.     (line 1145)
49298* untyped_return instruction pattern:    Standard Names.     (line 1209)
49299* UPDATE_PATH_HOST_CANONICALIZE (PATH):  Filesystem.         (line   59)
49300* update_ssa:                            SSA.                (line   76)
49301* update_stmt <1>:                       SSA Operands.       (line    6)
49302* update_stmt:                           Manipulating GIMPLE statements.
49303                                                             (line  141)
49304* update_stmt_if_modified:               Manipulating GIMPLE statements.
49305                                                             (line  144)
49306* UQQmode:                               Machine Modes.      (line  123)
49307* us_ashift:                             Arithmetic.         (line  173)
49308* us_minus:                              Arithmetic.         (line   36)
49309* us_mult:                               Arithmetic.         (line   92)
49310* us_neg:                                Arithmetic.         (line   81)
49311* us_plus:                               Arithmetic.         (line   14)
49312* us_truncate:                           Conversions.        (line   48)
49313* usaddM3 instruction pattern:           Standard Names.     (line  269)
49314* USAmode:                               Machine Modes.      (line  164)
49315* usashlM3 instruction pattern:          Standard Names.     (line  510)
49316* usdivM3 instruction pattern:           Standard Names.     (line  269)
49317* use:                                   Side Effects.       (line  168)
49318* USE_C_ALLOCA:                          Host Misc.          (line   19)
49319* USE_LD_AS_NEEDED:                      Driver.             (line  136)
49320* USE_LOAD_POST_DECREMENT:               Costs.              (line  226)
49321* USE_LOAD_POST_INCREMENT:               Costs.              (line  221)
49322* USE_LOAD_PRE_DECREMENT:                Costs.              (line  236)
49323* USE_LOAD_PRE_INCREMENT:                Costs.              (line  231)
49324* use_param:                             GTY Options.        (line  114)
49325* use_paramN:                            GTY Options.        (line  132)
49326* use_params:                            GTY Options.        (line  140)
49327* USE_SELECT_SECTION_FOR_FUNCTIONS:      Sections.           (line  194)
49328* USE_STORE_POST_DECREMENT:              Costs.              (line  246)
49329* USE_STORE_POST_INCREMENT:              Costs.              (line  241)
49330* USE_STORE_PRE_DECREMENT:               Costs.              (line  256)
49331* USE_STORE_PRE_INCREMENT:               Costs.              (line  251)
49332* used:                                  Flags.              (line  314)
49333* used, in symbol_ref:                   Flags.              (line  197)
49334* user:                                  GTY Options.        (line  301)
49335* user gc:                               User GC.            (line    6)
49336* USER_LABEL_PREFIX:                     Instruction Output. (line  154)
49337* USING_STMT:                            Statements for C++. (line    6)
49338* usmaddMN4 instruction pattern:         Standard Names.     (line  462)
49339* usmsubMN4 instruction pattern:         Standard Names.     (line  486)
49340* usmulhisi3 instruction pattern:        Standard Names.     (line  430)
49341* usmulM3 instruction pattern:           Standard Names.     (line  269)
49342* usmulqihi3 instruction pattern:        Standard Names.     (line  430)
49343* usmulsidi3 instruction pattern:        Standard Names.     (line  430)
49344* usnegM2 instruction pattern:           Standard Names.     (line  532)
49345* USQmode:                               Machine Modes.      (line  132)
49346* ussubM3 instruction pattern:           Standard Names.     (line  269)
49347* usum_widenM3 instruction pattern:      Standard Names.     (line  345)
49348* UTAmode:                               Machine Modes.      (line  172)
49349* UTQmode:                               Machine Modes.      (line  140)
49350* V in constraint:                       Simple Constraints. (line   43)
49351* VA_ARG_EXPR:                           Unary and Binary Expressions.
49352                                                             (line    6)
49353* values, returned by functions:         Scalar Return.      (line    6)
49354* VAR_DECL:                              Declarations.       (line    6)
49355* var_location:                          Debug Information.  (line   14)
49356* varargs implementation:                Varargs.            (line    6)
49357* variable:                              Declarations.       (line    6)
49358* Variable Location Debug Information in RTL: Debug Information.
49359                                                             (line    6)
49360* variable_size:                         GTY Options.        (line  230)
49361* vashlM3 instruction pattern:           Standard Names.     (line  524)
49362* vashrM3 instruction pattern:           Standard Names.     (line  524)
49363* vcondMN instruction pattern:           Standard Names.     (line  214)
49364* vec_concat:                            Vector Operations.  (line   28)
49365* vec_duplicate:                         Vector Operations.  (line   33)
49366* vec_extractM instruction pattern:      Standard Names.     (line  204)
49367* vec_initM instruction pattern:         Standard Names.     (line  209)
49368* vec_load_lanesMN instruction pattern:  Standard Names.     (line  166)
49369* VEC_LSHIFT_EXPR:                       Vectors.            (line    6)
49370* vec_merge:                             Vector Operations.  (line   11)
49371* VEC_PACK_FIX_TRUNC_EXPR:               Vectors.            (line    6)
49372* VEC_PACK_SAT_EXPR:                     Vectors.            (line    6)
49373* vec_pack_sfix_trunc_M instruction pattern: Standard Names. (line  372)
49374* vec_pack_ssat_M instruction pattern:   Standard Names.     (line  365)
49375* VEC_PACK_TRUNC_EXPR:                   Vectors.            (line    6)
49376* vec_pack_trunc_M instruction pattern:  Standard Names.     (line  358)
49377* vec_pack_ufix_trunc_M instruction pattern: Standard Names. (line  372)
49378* vec_pack_usat_M instruction pattern:   Standard Names.     (line  365)
49379* vec_perm_constM instruction pattern:   Standard Names.     (line  242)
49380* vec_permM instruction pattern:         Standard Names.     (line  224)
49381* VEC_RSHIFT_EXPR:                       Vectors.            (line    6)
49382* vec_select:                            Vector Operations.  (line   19)
49383* vec_setM instruction pattern:          Standard Names.     (line  199)
49384* vec_shl_M instruction pattern:         Standard Names.     (line  352)
49385* vec_shr_M instruction pattern:         Standard Names.     (line  352)
49386* vec_store_lanesMN instruction pattern: Standard Names.     (line  188)
49387* VEC_UNPACK_FLOAT_HI_EXPR:              Vectors.            (line    6)
49388* VEC_UNPACK_FLOAT_LO_EXPR:              Vectors.            (line    6)
49389* VEC_UNPACK_HI_EXPR:                    Vectors.            (line    6)
49390* VEC_UNPACK_LO_EXPR:                    Vectors.            (line    6)
49391* vec_unpacks_float_hi_M instruction pattern: Standard Names.
49392                                                             (line  394)
49393* vec_unpacks_float_lo_M instruction pattern: Standard Names.
49394                                                             (line  394)
49395* vec_unpacks_hi_M instruction pattern:  Standard Names.     (line  379)
49396* vec_unpacks_lo_M instruction pattern:  Standard Names.     (line  379)
49397* vec_unpacku_float_hi_M instruction pattern: Standard Names.
49398                                                             (line  394)
49399* vec_unpacku_float_lo_M instruction pattern: Standard Names.
49400                                                             (line  394)
49401* vec_unpacku_hi_M instruction pattern:  Standard Names.     (line  387)
49402* vec_unpacku_lo_M instruction pattern:  Standard Names.     (line  387)
49403* VEC_WIDEN_MULT_HI_EXPR:                Vectors.            (line    6)
49404* VEC_WIDEN_MULT_LO_EXPR:                Vectors.            (line    6)
49405* vec_widen_smult_even_M instruction pattern: Standard Names.
49406                                                             (line  403)
49407* vec_widen_smult_hi_M instruction pattern: Standard Names.  (line  403)
49408* vec_widen_smult_lo_M instruction pattern: Standard Names.  (line  403)
49409* vec_widen_smult_odd_M instruction pattern: Standard Names. (line  403)
49410* vec_widen_sshiftl_hi_M instruction pattern: Standard Names.
49411                                                             (line  412)
49412* vec_widen_sshiftl_lo_M instruction pattern: Standard Names.
49413                                                             (line  412)
49414* vec_widen_umult_even_M instruction pattern: Standard Names.
49415                                                             (line  403)
49416* vec_widen_umult_hi_M instruction pattern: Standard Names.  (line  403)
49417* vec_widen_umult_lo_M instruction pattern: Standard Names.  (line  403)
49418* vec_widen_umult_odd_M instruction pattern: Standard Names. (line  403)
49419* vec_widen_ushiftl_hi_M instruction pattern: Standard Names.
49420                                                             (line  412)
49421* vec_widen_ushiftl_lo_M instruction pattern: Standard Names.
49422                                                             (line  412)
49423* vector:                                Containers.         (line    6)
49424* vector operations:                     Vector Operations.  (line    6)
49425* VECTOR_CST:                            Constant expressions.
49426                                                             (line    6)
49427* VECTOR_STORE_FLAG_VALUE:               Misc.               (line  294)
49428* verify_flow_info:                      Maintaining the CFG.
49429                                                             (line  119)
49430* virtual operands:                      SSA Operands.       (line    6)
49431* VIRTUAL_INCOMING_ARGS_REGNUM:          Regs and Memory.    (line   59)
49432* VIRTUAL_OUTGOING_ARGS_REGNUM:          Regs and Memory.    (line   87)
49433* VIRTUAL_STACK_DYNAMIC_REGNUM:          Regs and Memory.    (line   78)
49434* VIRTUAL_STACK_VARS_REGNUM:             Regs and Memory.    (line   69)
49435* VLIW:                                  Processor pipeline description.
49436                                                             (line    6)
49437* vlshrM3 instruction pattern:           Standard Names.     (line  524)
49438* VMS:                                   Filesystem.         (line   37)
49439* VMS_DEBUGGING_INFO:                    VMS Debug.          (line    9)
49440* VOID_TYPE:                             Types.              (line    6)
49441* VOIDmode:                              Machine Modes.      (line  190)
49442* volatil:                               Flags.              (line  328)
49443* volatil, in insn, call_insn, jump_insn, code_label, barrier, and note: Flags.
49444                                                             (line   44)
49445* volatil, in label_ref and reg_label:   Flags.              (line   65)
49446* volatil, in mem, asm_operands, and asm_input: Flags.       (line   76)
49447* volatil, in reg:                       Flags.              (line   98)
49448* volatil, in subreg:                    Flags.              (line  170)
49449* volatil, in symbol_ref:                Flags.              (line  206)
49450* volatile memory references:            Flags.              (line  329)
49451* volatile, in prefetch:                 Flags.              (line  214)
49452* voting between constraint alternatives: Class Preferences. (line    6)
49453* vrotlM3 instruction pattern:           Standard Names.     (line  524)
49454* vrotrM3 instruction pattern:           Standard Names.     (line  524)
49455* walk_dominator_tree:                   SSA.                (line  254)
49456* walk_gimple_op:                        Statement and operand traversals.
49457                                                             (line   32)
49458* walk_gimple_seq:                       Statement and operand traversals.
49459                                                             (line   50)
49460* walk_gimple_stmt:                      Statement and operand traversals.
49461                                                             (line   13)
49462* walk_use_def_chains:                   SSA.                (line  230)
49463* WCHAR_TYPE:                            Type Layout.        (line  209)
49464* WCHAR_TYPE_SIZE:                       Type Layout.        (line  217)
49465* which_alternative:                     Output Statement.   (line   59)
49466* WHILE_BODY:                            Statements for C++. (line    6)
49467* WHILE_COND:                            Statements for C++. (line    6)
49468* WHILE_STMT:                            Statements for C++. (line    6)
49469* whopr:                                 LTO.                (line    6)
49470* WIDEST_HARDWARE_FP_SIZE:               Type Layout.        (line  154)
49471* window_save instruction pattern:       Standard Names.     (line 1513)
49472* WINT_TYPE:                             Type Layout.        (line  222)
49473* word_mode:                             Machine Modes.      (line  336)
49474* WORD_REGISTER_OPERATIONS:              Misc.               (line   54)
49475* WORDS_BIG_ENDIAN:                      Storage Layout.     (line   29)
49476* WORDS_BIG_ENDIAN, effect on subreg:    Regs and Memory.    (line  217)
49477* wpa:                                   LTO.                (line    6)
49478* X in constraint:                       Simple Constraints. (line  124)
49479* x-HOST:                                Host Fragment.      (line    6)
49480* XCmode:                                Machine Modes.      (line  197)
49481* XCOFF_DEBUGGING_INFO:                  DBX Options.        (line   13)
49482* XEXP:                                  Accessors.          (line    6)
49483* XF_SIZE:                               Type Layout.        (line  138)
49484* XFmode:                                Machine Modes.      (line   79)
49485* XINT:                                  Accessors.          (line    6)
49486* xm-MACHINE.h <1>:                      Host Misc.          (line    6)
49487* xm-MACHINE.h:                          Filesystem.         (line    6)
49488* xor:                                   Arithmetic.         (line  168)
49489* xor, canonicalization of:              Insn Canonicalizations.
49490                                                             (line   79)
49491* xorM3 instruction pattern:             Standard Names.     (line  269)
49492* XSTR:                                  Accessors.          (line    6)
49493* XVEC:                                  Accessors.          (line   41)
49494* XVECEXP:                               Accessors.          (line   48)
49495* XVECLEN:                               Accessors.          (line   44)
49496* XWINT:                                 Accessors.          (line    6)
49497* zero_extend:                           Conversions.        (line   28)
49498* zero_extendMN2 instruction pattern:    Standard Names.     (line  913)
49499* zero_extract:                          Bit-Fields.         (line   30)
49500* zero_extract, canonicalization of:     Insn Canonicalizations.
49501                                                             (line   88)
49502
49503
49504
49505Tag Table:
49506Node: Top1842
49507Node: Contributing4930
49508Node: Portability5671
49509Node: Interface7459
49510Node: Libgcc10499
49511Node: Integer library routines12340
49512Node: Soft float library routines19182
49513Node: Decimal float library routines31119
49514Node: Fixed-point fractional library routines46876
49515Node: Exception handling routines147274
49516Node: Miscellaneous routines148381
49517Node: Languages150501
49518Node: Source Tree152050
49519Node: Configure Terms152632
49520Node: Top Level155590
49521Node: gcc Directory159164
49522Node: Subdirectories160114
49523Node: Configuration162281
49524Node: Config Fragments163001
49525Node: System Config164230
49526Node: Configuration Files165166
49527Node: Build167991
49528Node: Makefile168403
49529Ref: Makefile-Footnote-1175206
49530Ref: Makefile-Footnote-2175351
49531Node: Library Files175423
49532Node: Headers175985
49533Node: Documentation178068
49534Node: Texinfo Manuals178927
49535Node: Man Page Generation181260
49536Node: Miscellaneous Docs183175
49537Node: Front End184569
49538Node: Front End Directory188262
49539Node: Front End Config189582
49540Node: Front End Makefile192408
49541Node: Back End196190
49542Node: Testsuites199987
49543Node: Test Idioms200918
49544Node: Test Directives204315
49545Node: Directives204842
49546Node: Selectors215152
49547Node: Effective-Target Keywords216510
49548Ref: arm_neon_ok224125
49549Ref: arm_neonv2_ok224283
49550Ref: arm_neon_fp16_ok224455
49551Node: Add Options234826
49552Node: Require Support236023
49553Node: Final Actions238530
49554Node: Ada Tests243697
49555Node: C Tests245029
49556Node: libgcj Tests249452
49557Node: LTO Testing250579
49558Node: gcov Testing252226
49559Node: profopt Testing255213
49560Node: compat Testing256928
49561Node: Torture Tests261168
49562Node: Options262785
49563Node: Option file format263225
49564Node: Option properties270215
49565Node: Passes283094
49566Node: Parsing pass283838
49567Node: Gimplification pass287368
49568Node: Pass manager289201
49569Node: Tree SSA passes290995
49570Node: RTL passes313467
49571Node: RTL326598
49572Node: RTL Objects328786
49573Node: RTL Classes332660
49574Node: Accessors337658
49575Node: Special Accessors340052
49576Node: Flags345822
49577Node: Machine Modes360546
49578Node: Constants372858
49579Node: Regs and Memory379588
49580Node: Arithmetic397489
49581Node: Comparisons407579
49582Node: Bit-Fields411871
49583Node: Vector Operations413423
49584Node: Conversions415305
49585Node: RTL Declarations419803
49586Node: Side Effects420624
49587Node: Incdec437224
49588Node: Assembler440559
49589Node: Debug Information442104
49590Node: Insns443302
49591Node: Calls469796
49592Node: Sharing472389
49593Node: Reading RTL475499
49594Node: GENERIC476491
49595Node: Deficiencies478364
49596Node: Tree overview478605
49597Node: Macros and Functions482732
49598Node: Identifiers483557
49599Node: Containers485168
49600Node: Types486325
49601Node: Declarations498421
49602Node: Working with declarations498916
49603Node: Internal structure504522
49604Node: Current structure hierarchy504906
49605Node: Adding new DECL node types507000
49606Node: Attributes511073
49607Node: Expression trees512318
49608Node: Constant expressions514071
49609Node: Storage References518290
49610Node: Unary and Binary Expressions521809
49611Node: Vectors541671
49612Node: Statements546398
49613Node: Basic Statements546918
49614Node: Blocks551425
49615Node: Statement Sequences552829
49616Node: Empty Statements553162
49617Node: Jumps553736
49618Node: Cleanups554389
49619Node: OpenMP556157
49620Node: Functions561997
49621Node: Function Basics562468
49622Node: Function Properties566153
49623Node: Language-dependent trees568935
49624Node: C and C++ Trees569821
49625Node: Types for C++572725
49626Node: Namespaces577703
49627Node: Classes580810
49628Node: Functions for C++585888
49629Node: Statements for C++592141
49630Node: C++ Expressions600189
49631Node: Java Trees601690
49632Node: GIMPLE601803
49633Node: Tuple representation605424
49634Node: GIMPLE instruction set613700
49635Node: GIMPLE Exception Handling615368
49636Node: Temporaries617282
49637Ref: Temporaries-Footnote-1618597
49638Node: Operands618660
49639Node: Compound Expressions619422
49640Node: Compound Lvalues619656
49641Node: Conditional Expressions620418
49642Node: Logical Operators621076
49643Node: Manipulating GIMPLE statements627833
49644Node: Tuple specific accessors633767
49645Node: `GIMPLE_ASM'634586
49646Node: `GIMPLE_ASSIGN'637219
49647Node: `GIMPLE_BIND'641325
49648Node: `GIMPLE_CALL'643132
49649Node: `GIMPLE_CATCH'647402
49650Node: `GIMPLE_COND'648546
49651Node: `GIMPLE_DEBUG'651334
49652Node: `GIMPLE_EH_FILTER'654717
49653Node: `GIMPLE_LABEL'656205
49654Node: `GIMPLE_NOP'657180
49655Node: `GIMPLE_OMP_ATOMIC_LOAD'657549
49656Node: `GIMPLE_OMP_ATOMIC_STORE'658459
49657Node: `GIMPLE_OMP_CONTINUE'659098
49658Node: `GIMPLE_OMP_CRITICAL'660448
49659Node: `GIMPLE_OMP_FOR'661385
49660Node: `GIMPLE_OMP_MASTER'664900
49661Node: `GIMPLE_OMP_ORDERED'665283
49662Node: `GIMPLE_OMP_PARALLEL'665683
49663Node: `GIMPLE_OMP_RETURN'668455
49664Node: `GIMPLE_OMP_SECTION'669105
49665Node: `GIMPLE_OMP_SECTIONS'669771
49666Node: `GIMPLE_OMP_SINGLE'671377
49667Node: `GIMPLE_PHI'672314
49668Node: `GIMPLE_RESX'673600
49669Node: `GIMPLE_RETURN'674319
49670Node: `GIMPLE_SWITCH'674887
49671Node: `GIMPLE_TRY'676687
49672Node: `GIMPLE_WITH_CLEANUP_EXPR'678477
49673Node: GIMPLE sequences679360
49674Node: Sequence iterators682566
49675Node: Adding a new GIMPLE statement code691022
49676Node: Statement and operand traversals692298
49677Node: Tree SSA694898
49678Node: Annotations696684
49679Node: SSA Operands697210
49680Node: SSA711741
49681Node: Alias analysis723861
49682Node: Memory model727641
49683Node: Loop Analysis and Representation729004
49684Node: Loop representation730185
49685Node: Loop querying737105
49686Node: Loop manipulation739938
49687Node: LCSSA742306
49688Node: Scalar evolutions744378
49689Node: loop-iv747622
49690Node: Number of iterations749548
49691Node: Dependency analysis752357
49692Node: Lambda758725
49693Node: Omega760396
49694Node: Control Flow761961
49695Node: Basic Blocks763727
49696Node: Edges769018
49697Node: Profile information777650
49698Node: Maintaining the CFG782334
49699Node: Liveness information788196
49700Node: Machine Desc790322
49701Node: Overview792885
49702Node: Patterns794926
49703Node: Example798364
49704Node: RTL Template799799
49705Node: Output Template810454
49706Node: Output Statement814419
49707Node: Predicates818758
49708Node: Machine-Independent Predicates821676
49709Node: Defining Predicates826621
49710Node: Constraints832586
49711Node: Simple Constraints834068
49712Node: Multi-Alternative846924
49713Node: Class Preferences849765
49714Node: Modifiers850657
49715Node: Machine Constraints854903
49716Node: Disable Insn Alternatives907311
49717Node: Define Constraints910213
49718Node: C Constraint Interface917000
49719Node: Standard Names920641
49720Ref: shift patterns943192
49721Ref: prologue instruction pattern988132
49722Ref: window_save instruction pattern988625
49723Ref: epilogue instruction pattern988900
49724Node: Pattern Ordering1006471
49725Node: Dependent Patterns1007707
49726Node: Jump Patterns1009327
49727Ref: Jump Patterns-Footnote-11011471
49728Node: Looping Patterns1011517
49729Node: Insn Canonicalizations1016245
49730Node: Expander Definitions1020836
49731Node: Insn Splitting1029048
49732Node: Including Patterns1038650
49733Node: Peephole Definitions1040430
49734Node: define_peephole1041683
49735Node: define_peephole21048014
49736Node: Insn Attributes1051081
49737Node: Defining Attributes1052187
49738Ref: define_enum_attr1055398
49739Node: Expressions1056433
49740Node: Tagging Insns1063182
49741Node: Attr Example1067535
49742Node: Insn Lengths1069909
49743Node: Constant Attributes1072986
49744Node: Delay Slots1074155
49745Node: Processor pipeline description1077379
49746Ref: Processor pipeline description-Footnote-11096192
49747Node: Conditional Execution1096514
49748Node: Define Subst1099576
49749Node: Define Subst Example1101610
49750Node: Define Subst Pattern Matching1104604
49751Node: Define Subst Output Template1105829
49752Node: Constant Definitions1107899
49753Ref: define_enum1111681
49754Node: Iterators1112169
49755Node: Mode Iterators1112747
49756Node: Defining Mode Iterators1113725
49757Node: Substitutions1115219
49758Node: Examples1117460
49759Node: Code Iterators1118908
49760Node: Int Iterators1121187
49761Node: Subst Iterators1123645
49762Node: Target Macros1125337
49763Node: Target Structure1128425
49764Node: Driver1130540
49765Node: Run-time Target1149323
49766Node: Per-Function Data1158476
49767Node: Storage Layout1161241
49768Node: Type Layout1187316
49769Node: Registers1202643
49770Node: Register Basics1203617
49771Node: Allocation Order1209122
49772Node: Values in Registers1211568
49773Node: Leaf Functions1219057
49774Node: Stack Registers1221915
49775Node: Register Classes1223187
49776Node: Old Constraints1253192
49777Node: Stack and Calling1260344
49778Node: Frame Layout1260878
49779Node: Exception Handling1271758
49780Node: Stack Checking1277980
49781Node: Frame Registers1282793
49782Node: Elimination1291052
49783Node: Stack Arguments1295281
49784Node: Register Arguments1302464
49785Node: Scalar Return1322558
49786Node: Aggregate Return1328644
49787Node: Caller Saves1332854
49788Node: Function Entry1334032
49789Node: Profiling1345136
49790Node: Tail Calls1346835
49791Node: Stack Smashing Protection1348738
49792Node: Varargs1350366
49793Node: Trampolines1357062
49794Node: Library Calls1363105
49795Node: Addressing Modes1368044
49796Node: Anchored Addresses1388078
49797Node: Condition Code1390727
49798Node: CC0 Condition Codes1392786
49799Node: MODE_CC Condition Codes1396032
49800Node: Costs1402899
49801Node: Scheduling1419368
49802Node: Sections1438774
49803Node: PIC1454472
49804Node: Assembler Format1456532
49805Node: File Framework1457670
49806Ref: TARGET_HAVE_SWITCHABLE_BSS_SECTIONS1464611
49807Node: Data Output1467876
49808Node: Uninitialized Data1475652
49809Node: Label Output1480663
49810Node: Initialization1503631
49811Node: Macros for Initialization1509593
49812Node: Instruction Output1516316
49813Node: Dispatch Tables1526818
49814Node: Exception Region Output1531196
49815Node: Alignment Output1537879
49816Node: Debugging Info1542424
49817Node: All Debuggers1543094
49818Node: DBX Options1545949
49819Node: DBX Hooks1551398
49820Node: File Names and DBX1552707
49821Node: SDB and DWARF1554819
49822Node: VMS Debug1560891
49823Node: Floating Point1561478
49824Node: Mode Switching1565954
49825Node: Target Attributes1569950
49826Node: Emulated TLS1578264
49827Node: MIPS Coprocessors1581654
49828Node: PCH Target1582951
49829Node: C++ ABI1584793
49830Node: Named Address Spaces1589585
49831Node: Misc1594524
49832Ref: TARGET_SHIFT_TRUNCATION_MASK1601266
49833Node: Host Config1646432
49834Node: Host Common1647500
49835Node: Filesystem1649879
49836Node: Host Misc1653994
49837Node: Fragments1656443
49838Node: Target Fragment1657638
49839Node: Host Fragment1668271
49840Node: Collect21668511
49841Node: Header Dirs1671147
49842Node: Type Information1672570
49843Node: GTY Options1675793
49844Node: User GC1690114
49845Node: GGC Roots1693841
49846Node: Files1694557
49847Node: Invoking the garbage collector1697264
49848Node: Troubleshooting1698767
49849Node: Plugins1699843
49850Node: Plugins loading1700961
49851Node: Plugin API1701830
49852Node: Plugins pass1708859
49853Node: Plugins GC1710828
49854Node: Plugins description1712488
49855Node: Plugins attr1713023
49856Node: Plugins recording1714908
49857Node: Plugins gate1715758
49858Node: Plugins tracking1716349
49859Node: Plugins building1716937
49860Node: LTO1718723
49861Node: LTO Overview1719584
49862Node: LTO object file layout1725416
49863Node: IPA1730048
49864Node: WHOPR1739013
49865Node: Internal flags1743704
49866Node: Funding1744916
49867Node: GNU Project1747399
49868Node: Copying1748048
49869Node: GNU Free Documentation License1785579
49870Node: Contributors1810719
49871Node: Option Index1848124
49872Node: Concept Index1848928
49873
49874End Tag Table
49875